92 lines
4.5 KiB
Python
92 lines
4.5 KiB
Python
from __future__ import print_function
|
|
import os
|
|
from unittest import TestCase
|
|
import logrun
|
|
|
|
|
|
class TestBasicFunctionality(TestCase):
|
|
def test_basic_functionality(self):
|
|
if os.getenv("DEEPSTATE_CMD") is not None:
|
|
deepstates = [os.getenv("DEEPSTATE_CMD")]
|
|
else:
|
|
deepstates = ["deepstate-angr", "deepstate-manticore"]
|
|
|
|
print("RUNNING WITH DEEPSTATE COMMANDS:", deepstates)
|
|
|
|
for deepstate in deepstates:
|
|
if os.getenv("TASK") is None or os.getenv("TASK") == "CRASH":
|
|
(r, output) = logrun.logrun([deepstate, "build/examples/Crash"],
|
|
"deepstate.out", 1800)
|
|
self.assertEqual(r, 0)
|
|
|
|
self.assertTrue("Passed: Crash_SegFault" in output)
|
|
foundCrashSave = False
|
|
for line in output.split("\n"):
|
|
if ("Saving input to" in line) and (".crash" in line):
|
|
foundCrashSave = True
|
|
self.assertTrue(foundCrashSave)
|
|
|
|
if os.getenv("TASK") is None or os.getenv("TASK") == "KLEE":
|
|
(r, output) = logrun.logrun([deepstate, "build/examples/Klee", "--klee"],
|
|
"deepstate.out", 1800)
|
|
self.assertEqual(r, 0)
|
|
|
|
self.assertTrue("zero" in output)
|
|
self.assertTrue("positive" in output)
|
|
self.assertTrue("negative" in output)
|
|
|
|
if os.getenv("TASK") is None or os.getenv("TASK") == "PRIMES":
|
|
(r, output) = logrun.logrun([deepstate, "build/examples/Primes"],
|
|
"deepstate.out", 1800)
|
|
self.assertEqual(r, 0)
|
|
|
|
self.assertTrue("Failed: PrimePolynomial_OnlyGeneratesPrimes" in output)
|
|
self.assertTrue("Failed: PrimePolynomial_OnlyGeneratesPrimes_NoStreaming" in output)
|
|
|
|
self.assertTrue("Passed: PrimePolynomial_OnlyGeneratesPrimes" in output)
|
|
self.assertTrue("Passed: PrimePolynomial_OnlyGeneratesPrimes_NoStreaming" in output)
|
|
|
|
if os.getenv("TASK") is None or os.getenv("TASK") == "TAKEOVER":
|
|
(r, output) = logrun.logrun([deepstate, "build/examples/TakeOver", "--take_over"],
|
|
"deepstate.out", 1800)
|
|
self.assertEqual(r, 0)
|
|
|
|
self.assertTrue("hi" in output)
|
|
self.assertTrue("bye" in output)
|
|
self.assertTrue("was not greater than" in output)
|
|
|
|
foundPassSave = False
|
|
for line in output.split("\n"):
|
|
if ("Saving input to" in line) and (".pass" in line):
|
|
foundPassSave = True
|
|
self.assertTrue(foundPassSave)
|
|
|
|
if os.getenv("TASK") is None or os.getenv("TASK") == "LISTS":
|
|
(r, output) = logrun.logrun([deepstate, "build/examples/Lists"],
|
|
"deepstate.out", 1800)
|
|
self.assertEqual(r, 0)
|
|
|
|
self.assertTrue("Passed: Vector_DoubleReversal" in output)
|
|
self.assertFalse("Failed: Vector_DoubleReversal" in output)
|
|
|
|
if os.getenv("TASK") is None or os.getenv("TASK") == "ONEOF":
|
|
(r, output) = logrun.logrun([deepstate, "build/examples/OneOf"],
|
|
"deepstate.out", 1800)
|
|
self.assertEqual(r, 0)
|
|
|
|
self.assertTrue("Failed: OneOfExample_ProduceSixtyOrHigher" in output)
|
|
self.assertTrue("Passed: OneOfExample_ProduceSixtyOrHigher" in output)
|
|
|
|
if os.getenv("TASK") is None or os.getenv("TASK") == "ARITHMETIC":
|
|
(r, output) = logrun.logrun([deepstate, "build/examples/IntegerArithmetic", "--num_workers", "4"],
|
|
"deepstate.out", 1800)
|
|
self.assertEqual(r, 0)
|
|
|
|
self.assertTrue("Failed: Arithmetic_InvertibleMultiplication_CanFail" in output)
|
|
self.assertTrue("Passed: Arithmetic_AdditionIsCommutative" in output)
|
|
self.assertFalse("Failed: Arithmetic_AdditionIsCommutative" in output)
|
|
self.assertTrue("Passed: Arithmetic_AdditionIsAssociative" in output)
|
|
self.assertFalse("Failed: Arithmetic_AdditionIsAssociative" in output)
|
|
self.assertTrue("Passed: Arithmetic_InvertibleMultiplication_CanFail" in output)
|
|
|