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