rules_unittest.py revision a1401311d1ab56c4ed0a474bd38c108f75cb0cd9
1# Copyright 2014 The Chromium Authors. All rights reserved.
2# Use of this source code is governed by a BSD-style license that can be
3# found in the LICENSE file.
4
5import unittest
6
7from memory_inspector.classification import rules
8
9
10_TEST_RULE = """
11[
12{
13  'name': '1',
14  'mmap-file': r'/foo/1',
15  'foo': 'bar',
16  'children': [
17     {
18       'name': '1/1',
19       'mmap-file': r'/foo/1/1',
20       'children': []
21     },
22     {
23       'name': '1/2',
24       'mmap-file': r'/foo/1/2',
25     },
26  ]
27},
28{
29  'name': '2',
30  'mmap-file': r'/bar/2',
31  'children': [
32     {
33       'name': '2/1',
34       'mmap-file': r'/bar/2/1',
35     },
36     {
37       'name': '2/2',
38       'mmap-file': r'/bar/2/2',
39       'children': [
40         {
41           'name': '2/2/1',
42           'mmap-file': r'/bar/2/2/1',
43         },
44         {
45           'name': '2/2/2',
46           'mmap-file': r'/bar/2/2/2',
47         },
48       ]
49     },
50     {
51       'name': '2/3',
52       'mmap-file': r'/bar/3',
53     },
54  ]
55},
56]
57"""
58
59
60class RulesTest(unittest.TestCase):
61  def runTest(self):
62    rt = rules.Load(_TEST_RULE, MockRule)
63    self.assertEqual(rt.name, 'Total')
64    self.assertEqual(len(rt.children), 3)
65    node1 = rt.children[0]
66    node2 = rt.children[1]
67    node3 = rt.children[2]
68
69    # Check 1-st level leaves.
70    self.assertEqual(node1.name, '1')
71    self.assertEqual(node1.filters['mmap-file'], '/foo/1')
72    self.assertEqual(node1.filters['foo'], 'bar')
73    self.assertEqual(node2.name, '2')
74    self.assertEqual(node2.filters['mmap-file'], '/bar/2')
75    self.assertEqual(node3.name, 'Total-other')
76
77    # Check 2-nd level leaves and their children.
78    self.assertEqual(len(node1.children), 3)
79    self.assertEqual(node1.children[0].name, '1/1')
80    self.assertEqual(node1.children[1].name, '1/2')
81    self.assertEqual(node1.children[2].name, '1-other')
82    self.assertEqual(len(node2.children), 4)
83    self.assertEqual(node2.children[0].name, '2/1')
84    self.assertEqual(len(node2.children[0].children), 0)
85    self.assertEqual(node2.children[1].name, '2/2')
86    self.assertEqual(len(node2.children[1].children), 3)
87    self.assertEqual(node2.children[2].name, '2/3')
88    self.assertEqual(len(node2.children[2].children), 0)
89    self.assertEqual(node2.children[3].name, '2-other')
90    self.assertEqual(len(node2.children[3].children), 0)
91
92
93
94class MockRule(rules.Rule):
95  def __init__(self, name, filters):
96    super(MockRule, self).__init__(name)
97    self.filters = filters