4 from __future__ import division
9 from threading import Thread
10 from log import single_line_delim
11 from framework import VppTestCase, running_extended_tests, \
12 running_on_centos, VppTestRunner
16 def __init__(self, args, logger):
20 super(Worker, self).__init__()
23 executable = self.args[0]
24 self.logger.debug("Running executable w/args `%s'" % self.args)
25 env = os.environ.copy()
26 env["CK_LOG_FILE_NAME"] = "-"
27 self.process = subprocess.Popen(
28 self.args, shell=False, env=env, preexec_fn=os.setpgrp,
29 stdout=subprocess.PIPE, stderr=subprocess.PIPE)
30 out, err = self.process.communicate()
31 self.logger.debug("Finished running `%s'" % executable)
32 self.logger.info("Return code is `%s'" % self.process.returncode)
33 self.logger.info(single_line_delim)
34 self.logger.info("Executable `%s' wrote to stdout:" % executable)
35 self.logger.info(single_line_delim)
37 self.logger.info(single_line_delim)
38 self.logger.info("Executable `%s' wrote to stderr:" % executable)
39 self.logger.info(single_line_delim)
40 self.logger.error(err)
41 self.logger.info(single_line_delim)
42 self.result = self.process.returncode
45 @unittest.skipUnless(running_extended_tests(), "part of extended tests")
46 class VAPITestCase(VppTestCase):
49 def test_vapi_c(self):
50 """ run C VAPI tests """
52 built_root = os.getenv(var, None)
53 self.assertIsNotNone(built_root,
54 "Environment variable `%s' not set" % var)
55 executable = "%s/vapi_test/vapi_c_test" % built_root
57 [executable, "vapi client", self.shm_prefix], self.logger)
61 self.logger.info("Worker result is `%s'" % worker.result)
63 if worker.result is None:
67 "Timeout! Worker did not finish in %ss" % timeout)
68 os.killpg(os.getpgid(worker.process.pid), signal.SIGTERM)
71 raise Exception("Couldn't kill worker-spawned process")
74 "Timeout! Worker did not finish in %ss" % timeout)
75 self.assert_equal(worker.result, 0, "Binary test return code")
77 @unittest.skipIf(running_on_centos(), "Centos's gcc can't compile our C++")
78 def test_vapi_cpp(self):
79 """ run C++ VAPI tests """
81 built_root = os.getenv(var, None)
82 self.assertIsNotNone(built_root,
83 "Environment variable `%s' not set" % var)
84 executable = "%s/vapi_test/vapi_cpp_test" % built_root
86 [executable, "vapi client", self.shm_prefix], self.logger)
90 self.logger.info("Worker result is `%s'" % worker.result)
92 if worker.result is None:
96 "Timeout! Worker did not finish in %ss" % timeout)
97 os.killpg(os.getpgid(worker.process.pid), signal.SIGTERM)
100 raise Exception("Couldn't kill worker-spawned process")
103 "Timeout! Worker did not finish in %ss" % timeout)
104 self.assert_equal(worker.result, 0, "Binary test return code")
107 if __name__ == '__main__':
108 unittest.main(testRunner=VppTestRunner)