def runTest(self): rule_tree = native_heap_classifier.LoadRules(_TEST_RULES) nheap = native_heap.NativeHeap() mock_addr = 0 for test_entry in _TEST_STACK_TRACES: mock_strace = stacktrace.Stacktrace() for mock_btstr in test_entry[1]: mock_addr += 4 # Addr is irrelevant, just keep it distinct. mock_frame = stacktrace.Frame(mock_addr) mock_frame.SetSymbolInfo(symbol.Symbol(mock_btstr)) mock_strace.Add(mock_frame) nheap.Add( native_heap.Allocation(size=test_entry[0], count=1, stack_trace=mock_strace)) res = native_heap_classifier.Classify(nheap, rule_tree) def CheckResult(node, prefix): node_name = prefix + node.name self.assertIn(node_name, _EXPECTED_RESULTS) self.assertEqual(node.values, _EXPECTED_RESULTS[node_name]) for child in node.children: CheckResult(child, node_name + '::') CheckResult(res.total, '')
def testStandardRuleParsingAndProcessing(self): rule_tree = native_heap_classifier.LoadRules(_TEST_RULES) nheap = native_heap.NativeHeap() mock_addr = 0 for test_entry in _TEST_STACK_TRACES: mock_strace = stacktrace.Stacktrace() for (mock_btstr, mock_source_path) in test_entry[1]: mock_addr += 4 # Addr is irrelevant, just keep it distinct. mock_frame = stacktrace.Frame(mock_addr) mock_frame.SetSymbolInfo(symbol.Symbol(mock_btstr, mock_source_path)) mock_strace.Add(mock_frame) nheap.Add(native_heap.Allocation( size=test_entry[0], count=1, stack_trace=mock_strace)) res = native_heap_classifier.Classify(nheap, rule_tree) self._CheckResult(res.total, '', _EXPECTED_RESULTS)
def testInferHeuristicRules(self): nheap = native_heap.NativeHeap() mock_addr = 0 for (mock_alloc_size, mock_source_path) in _HEURISTIC_TEST_STACK_TRACES: mock_strace = stacktrace.Stacktrace() mock_addr += 4 # Addr is irrelevant, just keep it distinct. mock_frame = stacktrace.Frame(mock_addr) mock_frame.SetSymbolInfo(symbol.Symbol(str(mock_addr), mock_source_path)) for _ in xrange(10): # Just repeat the same stack frame 10 times mock_strace.Add(mock_frame) nheap.Add(native_heap.Allocation( size=mock_alloc_size, count=1, stack_trace=mock_strace)) rule_tree = native_heap_classifier.InferHeuristicRulesFromHeap( nheap, threshold=0.05) res = native_heap_classifier.Classify(nheap, rule_tree) self._CheckResult(res.total, '', _HEURISTIC_EXPECTED_RESULTS)