testRealtime.py 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101
  1. from testutils import *
  2. import subprocess
  3. import filecmp
  4. import datetime
  5. class TestRealtime(unittest.TestCase):
  6. def setUp(self):
  7. setLogger('None', ('localhost', 514), logging.WARN)
  8. def tearDown(self):
  9. pass
  10. def test_local_realtime_thread(self):
  11. self.assertTrue(runRealtime("realtime_thread", 35))
  12. def test_local_realtime_tk(self):
  13. self.assertTrue(runRealtime("realtime_tk", 35))
  14. def test_local_realtime_loop(self):
  15. self.assertTrue(runRealtime("realtime_loop", 35))
  16. def test_local_realtime_thread_upscale(self):
  17. self.assertTrue(runRealtime("realtime_thread_2.0", 70))
  18. def test_local_realtime_tk_upscale(self):
  19. self.assertTrue(runRealtime("realtime_tk_2.0", 70))
  20. def test_local_realtime_loop_upscale(self):
  21. self.assertTrue(runRealtime("realtime_loop_2.0", 70))
  22. def test_local_realtime_thread_downscale(self):
  23. self.assertTrue(runRealtime("realtime_thread_0.5", 17))
  24. def test_local_realtime_tk_downscale(self):
  25. self.assertTrue(runRealtime("realtime_tk_0.5", 17))
  26. def test_local_realtime_loop_downscale(self):
  27. self.assertTrue(runRealtime("realtime_loop_0.5", 17))
  28. def test_local_realtime_nested(self):
  29. self.assertTrue(runRealtime("nested_realtime", 20))
  30. def test_local_realtime_dynamicstructure(self):
  31. self.assertTrue(runRealtime("dynamicstructure_realtime", 40))
  32. def test_local_realtime_injection(self):
  33. proc = subprocess.Popen("python testmodels/injecting.py", shell=True)
  34. proc.wait()
  35. self.assertEquals(proc.returncode, 0)
  36. def runRealtime(name, reqtime):
  37. before = datetime.datetime.now()
  38. try:
  39. if runLocal(name):
  40. # Some tests have their own test instead of the normal 'realtime' test
  41. return True
  42. except OSError:
  43. pass
  44. after = datetime.datetime.now()
  45. # Possibly only a slight timing difference, which is allowable
  46. f1 = open("output/realtime", 'r')
  47. f2 = open("expected/realtime", 'r')
  48. for l1, l2 in zip(f1, f2):
  49. if l1 != l2:
  50. # Check that at most 1 character is different
  51. diffs = 0
  52. for c1, c2 in zip(l1, l2):
  53. if c1 != c2:
  54. diffs += 1
  55. if diffs > 1:
  56. raise Exception("Multiple characters were different in the logs")
  57. # It seems that the difference wasn't that big after all, just continue
  58. # Seems to be done, check for time passed
  59. diff = after - before
  60. if not (reqtime - 1 <= diff.seconds <= reqtime + 3):
  61. raise Exception("Total runtime was not as expected. Expected: " + str(reqtime) + "s, but got: " + str(diff.seconds) + "s")
  62. else:
  63. return True
  64. def runLocal(name):
  65. outfile = "output/" + str(name)
  66. removeFile(outfile)
  67. import subprocess
  68. try:
  69. proc = subprocess.Popen("python testmodels/experiment.py " + str(name) + "_local >> /dev/null", shell=True)
  70. proc.wait()
  71. except:
  72. import sys
  73. print(sys.exc_info()[0])
  74. import traceback
  75. traceback.print_tb(sys.exc_info()[2])
  76. proc.terminate()
  77. # Prevent zombie
  78. del proc
  79. print("Exception received :(")
  80. return False
  81. if not filecmp.cmp(outfile, "expected/" + str(name)):
  82. return False
  83. return True