diff options
Diffstat (limited to 'scripts/pybootchartgui/pybootchartgui/tests/process_tree_test.py')
-rw-r--r-- | scripts/pybootchartgui/pybootchartgui/tests/process_tree_test.py | 92 |
1 files changed, 92 insertions, 0 deletions
diff --git a/scripts/pybootchartgui/pybootchartgui/tests/process_tree_test.py b/scripts/pybootchartgui/pybootchartgui/tests/process_tree_test.py new file mode 100644 index 0000000000..6f46a1c03d --- /dev/null +++ b/scripts/pybootchartgui/pybootchartgui/tests/process_tree_test.py | |||
@@ -0,0 +1,92 @@ | |||
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() | ||