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