configurationengine/source/cone/public/tests/unittest_container.py
changeset 3 e7e0ae78773e
parent 0 2e8eeb919028
equal deleted inserted replaced
2:87cfa131b535 3:e7e0ae78773e
    21 
    21 
    22 import zipfile
    22 import zipfile
    23 import unittest
    23 import unittest
    24 import string
    24 import string
    25 import sys,os,re
    25 import sys,os,re
    26 import __init__
       
    27 
    26 
    28 from cone.public import utils, container, exceptions
    27 from cone.public import utils, container, exceptions
    29 
    28 
    30 ROOT_PATH = os.path.dirname(os.path.abspath(__file__))
    29 ROOT_PATH = os.path.dirname(os.path.abspath(__file__))
    31 importpk   = os.path.join(ROOT_PATH,"Import.pk")
    30 importpk   = os.path.join(ROOT_PATH,"Import.pk")
   136         cont = container.ObjectProxy("test string")
   135         cont = container.ObjectProxy("test string")
   137         self.assertTrue(cont)
   136         self.assertTrue(cont)
   138         self.assertEquals(cont.startswith("test"),True)
   137         self.assertEquals(cont.startswith("test"),True)
   139         
   138         
   140 
   139 
   141 def graph(obj):
   140 def graph(obj, filters=None):
   142     if obj._parent:
   141     if obj._parent:
   143         return ["%s -> %s" % (obj._parent._name, obj._name)]
   142         return ["%s -> %s" % (obj._parent._name, obj._name)]
   144     return []
   143     return []
   145 
   144 
   146 class TestObjectContainer(unittest.TestCase):    
   145 class TestObjectContainer(unittest.TestCase):    
   149         self.assertTrue(cont)
   148         self.assertTrue(cont)
   150 
   149 
   151     def test_add_incorrect_type(self):
   150     def test_add_incorrect_type(self):
   152         cont = container.ObjectContainer()
   151         cont = container.ObjectContainer()
   153         try: 
   152         try: 
   154             cont._add(container.ObjectProxy())
   153             cont._add(container.DataContainer())
   155             self.fail("Adding incorrect class type to container succeeds?")
   154             self.fail("Adding incorrect class type to container succeeds?")
   156         except exceptions.IncorrectClassError,e:
   155         except exceptions.IncorrectClassError,e:
   157             pass
   156             pass
   158             
   157             
   159 
   158 
   162         obj = container.ObjectContainer("test")
   161         obj = container.ObjectContainer("test")
   163         cont._add(obj)
   162         cont._add(obj)
   164         cont._add(container.ObjectContainer("foo"))
   163         cont._add(container.ObjectContainer("foo"))
   165         self.assertEquals(cont._list(),['test','foo'])
   164         self.assertEquals(cont._list(),['test','foo'])
   166         self.assertEquals(cont.test,obj)
   165         self.assertEquals(cont.test,obj)
       
   166     
       
   167     def test_add_children_from_list_with_different_policies(self):
       
   168         def check(policy, expected):
       
   169             cont = container.ObjectContainer("root")
       
   170             cont._add(container.ObjectContainer("test1"))
       
   171             cont._add(container.ObjectContainer("foo"))
       
   172             cont._add(container.ObjectContainer("test2"))
       
   173             
       
   174             objs = [container.ObjectContainer("foo"),
       
   175                     container.ObjectContainer("foo"),
       
   176                     container.ObjectContainer("foo")]
       
   177             for i, obj in enumerate(objs): obj.test_attr = i
       
   178             
       
   179             cont._add(objs, policy)
       
   180             
       
   181             actual = [(o._name, getattr(o, 'test_attr', None)) for o in cont._objects()]
       
   182             self.assertEquals(actual, expected)
       
   183         
       
   184         check(container.REPLACE,
       
   185               [('test1', None),
       
   186                ('foo', 0),
       
   187                ('foo', 1),
       
   188                ('foo', 2),
       
   189                ('test2', None),])
       
   190         
       
   191         check(container.APPEND,
       
   192               [('test1', None),
       
   193                ('foo', None),
       
   194                ('foo', 0),
       
   195                ('foo', 1),
       
   196                ('foo', 2),
       
   197                ('test2', None),])
       
   198         
       
   199         check(container.PREPEND,
       
   200               [('test1', None),
       
   201                ('foo', 0),
       
   202                ('foo', 1),
       
   203                ('foo', 2),
       
   204                ('foo', None),
       
   205                ('test2', None),])
       
   206         
   167 
   207 
   168     def test_add_internal_child(self):
   208     def test_add_internal_child(self):
   169         cont = container.ObjectContainer("root")
   209         cont = container.ObjectContainer("root")
   170         obj = container.ObjectContainer("?test")
   210         obj = container.ObjectContainer("?test")
   171         cont._add(obj)
   211         cont._add(obj)
   172         cont._add(container.ObjectContainer("foo"))
   212         cont._add(container.ObjectContainer("foo"))
   173         self.assertEquals(cont._list(),['foo'])
   213         cont._add(container.ObjectContainer("bar"))
       
   214         self.assertEquals(cont._list(),['foo', 'bar'])
   174         self.assertEquals(cont._get('?test'),obj)
   215         self.assertEquals(cont._get('?test'),obj)
       
   216         self.assertEquals(cont._list(),['foo', 'bar'])
       
   217         cont._remove('?test')
       
   218         self.assertRaises(exceptions.NotFound,cont._get,'?test')
       
   219         self.assertEquals(cont._list(),['foo','bar'])
   175         
   220         
   176 
   221 
   177     def test_add_child_to_path(self):
   222     def test_add_child_to_path(self):
   178         cont = container.ObjectContainer("test")
   223         cont = container.ObjectContainer("test")
   179         obj = container.ObjectContainer("test")
   224         obj = container.ObjectContainer("test")
   239             cont._add(com, policy=container.ERROR)
   284             cont._add(com, policy=container.ERROR)
   240             self.fail("Adding an existing object succeeds with ERROR policy")
   285             self.fail("Adding an existing object succeeds with ERROR policy")
   241         except exceptions.AlreadyExists, e:
   286         except exceptions.AlreadyExists, e:
   242             pass
   287             pass
   243 
   288 
       
   289     def test__traverse_depth(self):
       
   290         cont = container.ObjectContainer("cont")
       
   291         obj1 = container.ObjectContainer("test1")
       
   292         obj2 = container.ObjectContainer("test2")
       
   293         cont._add_to_path("com.nokia", obj1)
       
   294         cont._add_to_path("com.nokia", obj2)
       
   295         self.assertEquals(len(cont._traverse()), 4)
       
   296         self.assertEquals(len(cont._traverse(depth=1)), 1)
       
   297         self.assertEquals(len(cont._traverse(depth=2)), 2)
       
   298         self.assertEquals(len(cont._traverse(depth=3)), 4)
       
   299         
   244     def test_add_child_to_existing_path_append(self):
   300     def test_add_child_to_existing_path_append(self):
   245         cont = container.ObjectContainer("test")
   301         cont = container.ObjectContainer("test")
   246         obj = container.ObjectContainer("test")
   302         obj = container.ObjectContainer("test")
   247         cont._add_to_path("com.nokia", obj)
   303         cont._add_to_path("com.nokia", obj)
   248         cont._add_to_path("com.nokia", container.ObjectContainer("test"), container.APPEND)
   304         cont._add_to_path("com.nokia", container.ObjectContainer("test"), container.APPEND)
   510         cont._add_to_path("com", container.ObjectProxyContainer(TestC(),"bar"))
   566         cont._add_to_path("com", container.ObjectProxyContainer(TestC(),"bar"))
   511         cont.com._list()
   567         cont.com._list()
   512         ret = cont._traverse(name="^t.*$")
   568         ret = cont._traverse(name="^t.*$")
   513         self.assertEquals(len(ret),1)
   569         self.assertEquals(len(ret),1)
   514         self.assertEquals(ret[0]._path(),"default.com.nokia.test")
   570         self.assertEquals(ret[0]._path(),"default.com.nokia.test")
       
   571 #        ret = cont._traverse(type=TestC)
       
   572 #        self.assertEquals(len(ret),1)
       
   573 
   515 
   574 
   516     def test_add_children_and_traverse_filter_name_many(self):
   575     def test_add_children_and_traverse_filter_name_many(self):
   517         cont = container.ObjectProxyContainer(None,"default")
   576         cont = container.ObjectProxyContainer(None,"default")
   518         cont._add_to_path("com.nokia", container.ObjectProxyContainer(TestC(),"test"))
   577         cont._add_to_path("com.nokia", container.ObjectProxyContainer(TestC(),"test"))
   519         cont._add_to_path("com.nokia", container.ObjectProxyContainer(TestC(),"foo"))
   578         cont._add_to_path("com.nokia", container.ObjectProxyContainer(TestC(),"foo"))
   567         proxy =None
   626         proxy =None
   568         proxy2 = container.LoadProxy("unload.pk", container.LoadInterface())
   627         proxy2 = container.LoadProxy("unload.pk", container.LoadInterface())
   569         self.assertEquals(proxy2.list_resources(''),['test1.txt', 'test2.txt', 'test3.txt'])
   628         self.assertEquals(proxy2.list_resources(''),['test1.txt', 'test2.txt', 'test3.txt'])
   570         os.unlink("unload.pk")
   629         os.unlink("unload.pk")
   571 
   630 
       
   631 class TestLoadContainer(unittest.TestCase):
       
   632     def test_create_load_container(self):
       
   633         cont = container.LoadContainer(importpk, container.LoadInterface())
       
   634         cont._load()
       
   635         self.assertEquals(len(cont._objects()), 1)
       
   636 
       
   637     def test_create_load_link__unload(self):
       
   638         cont = container.LoadContainer(importpk, container.LoadInterface())
       
   639         cont._load()
       
   640         self.assertEquals(len(cont._objects()), 1)
       
   641         cont._unload()
       
   642         self.assertEquals(cont._container, None)
       
   643 
       
   644     def test_create_load_link__get_objects(self):
       
   645         cont = container.LoadContainer(importpk, container.LoadInterface())
       
   646         self.assertEquals(len(cont._objects()), 1)
       
   647 
       
   648     def test_create_load_link__traverse(self):
       
   649         cont = container.LoadContainer(importpk, container.LoadInterface())
       
   650         self.assertEquals(len(cont._traverse()), 4)
       
   651         print cont._traverse()
       
   652 
       
   653     def test_create_load_link__list(self):
       
   654         cont = container.LoadContainer(importpk, container.LoadInterface())
       
   655         self.assertEquals(os.path.basename(cont._list()[0]), 'Import_pk')
       
   656 
       
   657 class TestLoadContainerWrite(unittest.TestCase):
       
   658     def test_create_load_container__add_data(self):
       
   659         cont = container.LoadContainer(importpk)
       
   660         cont._add(container.ObjectContainer("Test"))
       
   661         self.assertEquals(len(cont._objects()), 1)
       
   662 
       
   663     def test_create_load_container__add_data_unload(self):
       
   664         cont = container.LoadContainer(importpk)
       
   665         cont._add(container.ObjectContainer("Test"))
       
   666         self.assertEquals(len(cont._objects()), 1)
       
   667         cont._unload()
       
   668 
       
   669 class TestLoadLink(unittest.TestCase):
       
   670     def test_create_load_link(self):
       
   671         link = container.LoadLink(importpk, container.LoadInterface())
       
   672         objs = link._load()
       
   673         self.assertEquals(len(objs), 1)
       
   674 
       
   675     def test_create_load_link_and_populate(self):
       
   676         cont = container.ObjectContainer("Test")
       
   677         link = container.LoadLink(importpk, container.LoadInterface())
       
   678         cont._add(link)
       
   679         link.populate()
       
   680         self.assertEquals(len(cont._objects()), 2)
       
   681 
   572 if __name__ == '__main__':
   682 if __name__ == '__main__':
   573     unittest.main()
   683     unittest.main()
   574       
   684       
       
   685