113cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle# Authors: Karl MacMillan <kmacmillan@mentalrootkit.com> 213cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle# 313cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle# Copyright (C) 2006 Red Hat 413cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle# see file 'COPYING' for use and warranty information 513cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle# 613cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle# This program is free software; you can redistribute it and/or 713cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle# modify it under the terms of the GNU General Public License as 813cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle# published by the Free Software Foundation; version 2 only 913cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle# 1013cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle# This program is distributed in the hope that it will be useful, 1113cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle# but WITHOUT ANY WARRANTY; without even the implied warranty of 1213cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 1313cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle# GNU General Public License for more details. 1413cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle# 1513cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle# You should have received a copy of the GNU General Public License 1613cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle# along with this program; if not, write to the Free Software 1713cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 1813cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle# 1913cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle 2013cd4c8960688af11ad23b4c946149015c80d54Joshua Brindleimport unittest 2113cd4c8960688af11ad23b4c946149015c80d54Joshua Brindleimport sepolgen.refpolicy as refpolicy 2213cd4c8960688af11ad23b4c946149015c80d54Joshua Brindleimport sepolgen.refparser as refparser 2313cd4c8960688af11ad23b4c946149015c80d54Joshua Brindleimport sepolgen.policygen as policygen 2413cd4c8960688af11ad23b4c946149015c80d54Joshua Brindleimport sepolgen.access as access 2513cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle 2613cd4c8960688af11ad23b4c946149015c80d54Joshua Brindleclass TestAccessVector(unittest.TestCase): 2713cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle def test_init(self): 2813cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle # Default construction 2913cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle a = access.AccessVector() 3013cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle self.assertEqual(a.src_type, None) 3113cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle self.assertEqual(a.tgt_type, None) 3213cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle self.assertEqual(a.obj_class, None) 3313cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle self.assertTrue(isinstance(a.perms, refpolicy.IdSet)) 3413cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle self.assertTrue(isinstance(a.audit_msgs, type([]))) 3513cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle self.assertEquals(len(a.audit_msgs), 0) 3613cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle 3713cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle # Construction from a list 3813cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle a = access.AccessVector() 3913cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle a.src_type = "foo" 4013cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle a.tgt_type = "bar" 4113cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle a.obj_class = "file" 4213cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle a.perms.update(["read", "write"]) 4313cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle 4413cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle l = access.AccessVector(['foo', 'bar', 'file', 'read', 'write']) 4513cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle self.assertEqual(a.src_type, l.src_type) 4613cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle self.assertEqual(a.tgt_type, l.tgt_type) 4713cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle self.assertEqual(a.obj_class, l.obj_class) 4813cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle self.assertEqual(a.perms, l.perms) 4913cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle 5013cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle def test_from_list(self): 5113cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle a = access.AccessVector() 5213cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle a.src_type = "foo" 5313cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle a.tgt_type = "bar" 5413cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle a.obj_class = "file" 5513cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle a.perms.update(["read", "write"]) 5613cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle 5713cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle l = access.AccessVector() 5813cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle l.from_list(['foo', 'bar', 'file', 'read', 'write']) 5913cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle self.assertEqual(a.src_type, l.src_type) 6013cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle self.assertEqual(a.tgt_type, l.tgt_type) 6113cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle self.assertEqual(a.obj_class, l.obj_class) 6213cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle self.assertEqual(a.perms, l.perms) 6313cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle 6413cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle def test_to_list(self): 6513cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle a = access.AccessVector() 6613cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle a.src_type = "foo" 6713cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle a.tgt_type = "bar" 6813cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle a.obj_class = "file" 6913cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle a.perms.update(["read", "write"]) 7013cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle 7113cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle l = a.to_list() 7213cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle self.assertEqual(l[0], "foo") 7313cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle self.assertEqual(l[1], "bar") 7413cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle self.assertEqual(l[2], "file") 7513cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle self.assertEqual(l[3], "read") 7613cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle self.assertEqual(l[4], "write") 7713cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle 7813cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle def test_to_string(self): 7913cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle a = access.AccessVector() 8013cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle a.src_type = "foo" 8113cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle a.tgt_type = "bar" 8213cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle a.obj_class = "file" 8313cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle a.perms.update(["read", "write"]) 8413cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle 856e35202e203951cb0a864e75fb196bb24fc5f979Daniel J Walsh self.assertEquals(str(a), "allow foo bar:file { read write };") 866e35202e203951cb0a864e75fb196bb24fc5f979Daniel J Walsh self.assertEquals(a.to_string(), "allow foo bar:file { read write };") 8713cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle 8813cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle def test_cmp(self): 8913cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle a = access.AccessVector() 9013cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle a.src_type = "foo" 9113cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle a.tgt_type = "bar" 9213cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle a.obj_class = "file" 9313cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle a.perms.update(["read", "write"]) 9413cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle 9513cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle b = access.AccessVector() 9613cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle b.src_type = "foo" 9713cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle b.tgt_type = "bar" 9813cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle b.obj_class = "file" 9913cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle b.perms.update(["read", "write"]) 10013cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle 10113cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle self.assertEquals(a, b) 10213cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle 10313cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle # Source Type 10413cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle b.src_type = "baz" 10513cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle self.assertEquals(cmp(a, b), 1) 10613cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle 10713cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle b.src_type = "gaz" 10813cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle self.assertEquals(cmp(a, b), -1) 10913cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle 11013cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle # Target Type 11113cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle b.src_type = "foo" 11213cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle b.tgt_type = "aar" 11313cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle self.assertEquals(cmp(a, b), 1) 11413cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle 11513cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle b.tgt_type = "gaz" 11613cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle self.assertEquals(cmp(a, b), -1) 11713cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle 11813cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle # Perms 11913cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle b.tgt_type = "bar" 12013cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle b.perms = refpolicy.IdSet(["read"]) 12113cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle ret = cmp(a, b) 12213cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle self.assertEquals(ret, 1) 12313cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle 12413cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle b.perms = refpolicy.IdSet(["read", "write", "append"]) 12513cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle ret = cmp(a, b) 12613cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle self.assertEquals(ret, -1) 12713cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle 12813cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle b.perms = refpolicy.IdSet(["read", "append"]) 12913cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle ret = cmp(a, b) 13013cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle self.assertEquals(ret, 1) 13113cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle 13213cd4c8960688af11ad23b4c946149015c80d54Joshua Brindleclass TestUtilFunctions(unittest.TestCase): 13313cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle def test_is_idparam(self): 13413cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle self.assertTrue(access.is_idparam("$1")) 13513cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle self.assertTrue(access.is_idparam("$2")) 13613cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle self.assertTrue(access.is_idparam("$123")) 13713cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle self.assertFalse(access.is_idparam("$123.23")) 13813cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle self.assertFalse(access.is_idparam("$A")) 13913cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle 14013cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle def test_avrule_to_access_vectors(self): 14113cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle rule = refpolicy.AVRule() 14213cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle rule.src_types.add("foo") 14313cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle rule.src_types.add("baz") 14413cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle rule.tgt_types.add("bar") 14513cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle rule.tgt_types.add("what") 14613cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle rule.obj_classes.add("file") 14713cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle rule.obj_classes.add("dir") 14813cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle rule.perms.add("read") 14913cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle rule.perms.add("write") 15013cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle 15113cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle avs = access.avrule_to_access_vectors(rule) 15213cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle self.assertEquals(len(avs), 8) 15313cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle comps = [("foo", "what", "dir"), 15413cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle ("foo", "what", "file"), 15513cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle ("foo", "bar", "dir"), 15613cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle ("foo", "bar", "file"), 15713cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle ("baz", "what", "dir"), 15813cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle ("baz", "what", "file"), 15913cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle ("baz", "bar", "dir"), 16013cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle ("baz", "bar", "file")] 16113cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle status = [False] * 8 16213cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle for av in access.avrule_to_access_vectors(rule): 16313cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle self.assertEquals(av.perms, refpolicy.IdSet(["read", "write"])) 16413cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle for i in xrange(len(comps)): 16513cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle if comps[i][0] == av.src_type and \ 16613cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle comps[i][1] == av.tgt_type and \ 16713cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle comps[i][2] == av.obj_class: 16813cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle status[i] = True 16913cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle 17013cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle for s in status: 17113cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle self.assertEquals(s, True) 17213cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle 17313cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle 17413cd4c8960688af11ad23b4c946149015c80d54Joshua Brindleclass TestAccessVectorSet(unittest.TestCase): 17513cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle def setUp(self): 17613cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle rule = refpolicy.AVRule() 17713cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle rule.src_types.add("foo") 17813cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle rule.src_types.add("baz") 17913cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle rule.tgt_types.add("bar") 18013cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle rule.tgt_types.add("what") 18113cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle rule.obj_classes.add("file") 18213cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle rule.obj_classes.add("dir") 18313cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle rule.perms.add("read") 18413cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle rule.perms.add("write") 18513cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle 18613cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle s = access.AccessVectorSet() 18713cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle avs = access.avrule_to_access_vectors(rule) 18813cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle for av in avs: 18913cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle s.add_av(av) 19013cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle self.s = s 19113cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle 19213cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle def test_init(self): 19313cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle a = access.AccessVectorSet() 19413cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle 19513cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle def test_iter(self): 19613cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle comps = [("foo", "what", "dir"), 19713cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle ("foo", "what", "file"), 19813cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle ("foo", "bar", "dir"), 19913cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle ("foo", "bar", "file"), 20013cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle ("baz", "what", "dir"), 20113cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle ("baz", "what", "file"), 20213cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle ("baz", "bar", "dir"), 20313cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle ("baz", "bar", "file")] 20413cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle status = [False] * 8 20513cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle for av in self.s: 20613cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle self.assertEquals(av.perms, refpolicy.IdSet(["read", "write"])) 20713cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle for i in xrange(len(comps)): 20813cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle if comps[i][0] == av.src_type and \ 20913cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle comps[i][1] == av.tgt_type and \ 21013cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle comps[i][2] == av.obj_class: 21113cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle status[i] = True 21213cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle 21313cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle for s in status: 21413cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle self.assertEquals(s, True) 21513cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle 21613cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle def test_len(self): 21713cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle self.assertEquals(len(self.s), 8) 21813cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle 21913cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle def test_list(self): 22013cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle a = access.AccessVectorSet() 22113cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle a.add("$1", "foo", "file", refpolicy.IdSet(["read", "write"])) 22213cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle a.add("$1", "bar", "file", refpolicy.IdSet(["read", "write"])) 22313cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle a.add("what", "bar", "file", refpolicy.IdSet(["read", "write"])) 22413cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle 22513cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle avl = a.to_list() 22613cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle 22713cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle test_l = [['what','bar','file','read','write'], 22813cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle ['$1','foo','file','read','write'], 22913cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle ['$1','bar','file','read','write']] 23013cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle 23113cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle for a,b in zip(test_l, avl): 23213cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle self.assertEqual(len(a), len(b)) 23313cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle for x,y in zip(a,b): 23413cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle self.assertEqual(x, y) 23513cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle 23613cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle b = access.AccessVectorSet() 23713cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle b.from_list(avl) 23813cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle self.assertEqual(len(b), 3) 239