Patrick Williams | c124f4f | 2015-09-15 14:41:29 -0500 | [diff] [blame] | 1 | import sys |
| 2 | import os |
| 3 | import unittest |
| 4 | |
| 5 | sys.path.insert(0, os.getcwd()) |
| 6 | |
| 7 | import pybootchartgui.parsing as parsing |
| 8 | import pybootchartgui.process_tree as process_tree |
| 9 | import pybootchartgui.main as main |
| 10 | |
| 11 | if sys.version_info >= (3, 0): |
| 12 | long = int |
| 13 | |
| 14 | class TestProcessTree(unittest.TestCase): |
| 15 | |
| 16 | def setUp(self): |
| 17 | self.name = "Process tree unittest" |
| 18 | self.rootdir = os.path.join(os.path.dirname(sys.argv[0]), '../../examples/1/') |
| 19 | |
| 20 | parser = main._mk_options_parser() |
| 21 | options, args = parser.parse_args(['--q', self.rootdir]) |
| 22 | writer = main._mk_writer(options) |
| 23 | trace = parsing.Trace(writer, args, options) |
| 24 | |
| 25 | parsing.parse_file(writer, trace, self.mk_fname('proc_ps.log')) |
| 26 | trace.compile(writer) |
| 27 | self.processtree = process_tree.ProcessTree(writer, None, trace.ps_stats, \ |
| 28 | trace.ps_stats.sample_period, None, options.prune, None, None, False, for_testing = True) |
| 29 | |
| 30 | def mk_fname(self,f): |
| 31 | return os.path.join(self.rootdir, f) |
| 32 | |
| 33 | def flatten(self, process_tree): |
| 34 | flattened = [] |
| 35 | for p in process_tree: |
| 36 | flattened.append(p) |
| 37 | flattened.extend(self.flatten(p.child_list)) |
| 38 | return flattened |
| 39 | |
| 40 | def checkAgainstJavaExtract(self, filename, process_tree): |
| 41 | test_data = open(filename) |
| 42 | for expected, actual in zip(test_data, self.flatten(process_tree)): |
| 43 | tokens = expected.split('\t') |
| 44 | self.assertEqual(int(tokens[0]), actual.pid // 1000) |
| 45 | self.assertEqual(tokens[1], actual.cmd) |
| 46 | self.assertEqual(long(tokens[2]), 10 * actual.start_time) |
| 47 | self.assert_(long(tokens[3]) - 10 * actual.duration < 5, "duration") |
| 48 | self.assertEqual(int(tokens[4]), len(actual.child_list)) |
| 49 | self.assertEqual(int(tokens[5]), len(actual.samples)) |
| 50 | test_data.close() |
| 51 | |
| 52 | def testBuild(self): |
| 53 | process_tree = self.processtree.process_tree |
| 54 | self.checkAgainstJavaExtract(self.mk_fname('extract.processtree.1.log'), process_tree) |
| 55 | |
| 56 | def testMergeLogger(self): |
| 57 | self.processtree.merge_logger(self.processtree.process_tree, 'bootchartd', None, False) |
| 58 | process_tree = self.processtree.process_tree |
| 59 | self.checkAgainstJavaExtract(self.mk_fname('extract.processtree.2.log'), process_tree) |
| 60 | |
| 61 | def testPrune(self): |
| 62 | self.processtree.merge_logger(self.processtree.process_tree, 'bootchartd', None, False) |
| 63 | self.processtree.prune(self.processtree.process_tree, None) |
| 64 | process_tree = self.processtree.process_tree |
| 65 | self.checkAgainstJavaExtract(self.mk_fname('extract.processtree.3b.log'), process_tree) |
| 66 | |
| 67 | def testMergeExploders(self): |
| 68 | self.processtree.merge_logger(self.processtree.process_tree, 'bootchartd', None, False) |
| 69 | self.processtree.prune(self.processtree.process_tree, None) |
| 70 | self.processtree.merge_exploders(self.processtree.process_tree, set(['hwup'])) |
| 71 | process_tree = self.processtree.process_tree |
| 72 | self.checkAgainstJavaExtract(self.mk_fname('extract.processtree.3c.log'), process_tree) |
| 73 | |
| 74 | def testMergeSiblings(self): |
| 75 | self.processtree.merge_logger(self.processtree.process_tree, 'bootchartd', None, False) |
| 76 | self.processtree.prune(self.processtree.process_tree, None) |
| 77 | self.processtree.merge_exploders(self.processtree.process_tree, set(['hwup'])) |
| 78 | self.processtree.merge_siblings(self.processtree.process_tree) |
| 79 | process_tree = self.processtree.process_tree |
| 80 | self.checkAgainstJavaExtract(self.mk_fname('extract.processtree.3d.log'), process_tree) |
| 81 | |
| 82 | def testMergeRuns(self): |
| 83 | self.processtree.merge_logger(self.processtree.process_tree, 'bootchartd', None, False) |
| 84 | self.processtree.prune(self.processtree.process_tree, None) |
| 85 | self.processtree.merge_exploders(self.processtree.process_tree, set(['hwup'])) |
| 86 | self.processtree.merge_siblings(self.processtree.process_tree) |
| 87 | self.processtree.merge_runs(self.processtree.process_tree) |
| 88 | process_tree = self.processtree.process_tree |
| 89 | self.checkAgainstJavaExtract(self.mk_fname('extract.processtree.3e.log'), process_tree) |
| 90 | |
| 91 | if __name__ == '__main__': |
| 92 | unittest.main() |