configurationengine/source/cone/core/tests/unittest_configuration_project_on_filestorage.py
changeset 0 2e8eeb919028
child 3 e7e0ae78773e
equal deleted inserted replaced
-1:000000000000 0:2e8eeb919028
       
     1 #
       
     2 # Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
       
     3 # All rights reserved.
       
     4 # This component and the accompanying materials are made available
       
     5 # under the terms of "Eclipse Public License v1.0"
       
     6 # which accompanies this distribution, and is available
       
     7 # at the URL "http://www.eclipse.org/legal/epl-v10.html".
       
     8 #
       
     9 # Initial Contributors:
       
    10 # Nokia Corporation - initial contribution.
       
    11 #
       
    12 # Contributors:
       
    13 #
       
    14 # Description: 
       
    15 #
       
    16 
       
    17 """
       
    18 Test the CPF configuration
       
    19 """
       
    20 import unittest
       
    21 import string
       
    22 import sys,os
       
    23 import shutil
       
    24 import __init__
       
    25 from testautomation.base_testcase import BaseTestCase
       
    26 
       
    27 from cone.public import exceptions, api
       
    28 from cone.confml.model import ConfmlMeta, ConfmlDescription
       
    29 from cone.storage.filestorage import FileStorage
       
    30 from cone.confml import model
       
    31 
       
    32 ROOT_PATH = os.path.dirname(os.path.abspath(__file__))
       
    33 temp_dir  = os.path.join(ROOT_PATH, "temp/project_on_filestorage")
       
    34 datafolder= os.path.join(ROOT_PATH,"../../storage/tests/data")
       
    35 
       
    36 class TestConeProjectOpen(unittest.TestCase):    
       
    37     def setUp(self):
       
    38         pass
       
    39     
       
    40     def test_open_storage(self):
       
    41         p = api.Storage.open(datafolder)
       
    42         self.assertTrue(p)
       
    43         
       
    44     def test_open_project_of_non_storage(self):
       
    45         fs = "foobar_dummy"
       
    46         try:
       
    47             p = api.Storage.open(fs)
       
    48             self.fail("Opening on top of non storage succeeds!!")
       
    49         except exceptions.StorageException:
       
    50             self.assertTrue(True)
       
    51         
       
    52 
       
    53 class TestConeProjectMethodsRead(unittest.TestCase):    
       
    54     def setUp(self):
       
    55         self.project = api.Project(api.Storage.open(datafolder))
       
    56 
       
    57     def test_list_configurations(self):
       
    58         confs =  self.project.list_configurations()
       
    59         self.assertTrue(confs)
       
    60         self.assertEquals(confs[0],"morestuff.confml")
       
    61 
       
    62     def test_get_configuration(self):
       
    63         conf =  self.project.get_configuration("morestuff.confml")
       
    64         self.assertTrue(conf)
       
    65         self.assertTrue(isinstance(conf,api.ConfigurationProxy))
       
    66 
       
    67     def test_get_configuration_non_existing(self):
       
    68         try:
       
    69             conf =  self.project.get_configuration("foo.confml")
       
    70             self.fail("Opening non existing configuration succeeds!")
       
    71         except exceptions.NotFound,e:
       
    72             self.assertTrue(True)
       
    73 
       
    74     def test_get_configuration_and_list_layers(self):
       
    75         conf =  self.project.get_configuration("morestuff.confml")
       
    76         layers = conf.list_configurations()
       
    77         self.assertTrue(layers)
       
    78         self.assertEquals(layers[0],'platform/s60/root.confml')
       
    79         self.assertEquals(layers[1],'familyX/root.confml')
       
    80 
       
    81     def test_get_is_configuration(self):
       
    82         self.assertTrue(self.project.is_configuration("morestuff.confml"))
       
    83         # TODO: this is not working at the moment due to performance problem in
       
    84         # Project.list_all_configurations()
       
    85         #self.assertTrue(self.project.is_configuration("platform/s60/root.confml"))
       
    86         #self.assertFalse(self.project.is_configuration("platform/foo/root.confml"))
       
    87 
       
    88     def test_get_configuration_and_get_layer(self):
       
    89         conf =  self.project.get_configuration("morestuff.confml")
       
    90         s60layer = conf.get_configuration('platform/s60/root.confml')
       
    91         self.assertTrue(s60layer)
       
    92         self.assertTrue(isinstance(s60layer.get_layer(),api.Layer))
       
    93     
       
    94     def test_get_configuration_and_get_layer_path(self):
       
    95         conf =  self.project.get_configuration("morestuff.confml")
       
    96         s60layer = conf.get_configuration('platform/s60/root.confml')
       
    97         self.assertEquals(s60layer.get_path(),'platform/s60/root.confml')
       
    98     
       
    99     def test_get_configuration_and_get_layer_and_get_layer_resources(self):
       
   100         conf =  self.project.get_configuration("morestuff.confml")
       
   101         s60layer = conf.get_configuration('platform/s60/root.confml')
       
   102         files = s60layer.list_resources()
       
   103         self.assertEquals(files[0],'platform/s60/root.confml')
       
   104     
       
   105     def test_get_configuration_and_get_layer_and_get_a_layer_resource(self):
       
   106         conf =  self.project.get_configuration("morestuff.confml")
       
   107         s60layer = conf.get_configuration('platform/s60/root.confml')
       
   108         res = s60layer.get_resource('root.confml')
       
   109         self.assertTrue(res)
       
   110     
       
   111     def test_get_configuration_and_list_all_configuration_resources(self):
       
   112         conf =  self.project.get_configuration("morestuff.confml")
       
   113         resources = conf.list_resources()
       
   114         self.assertEquals(resources[0],'morestuff.confml')
       
   115 
       
   116     def test_get_configuration_and_get_first_layer_by_index(self):
       
   117         conf =  self.project.get_configuration("morestuff.confml")
       
   118         s60config = conf.get_configuration_by_index(0)
       
   119         self.assertEquals(s60config.get_path(),'platform/s60/root.confml')
       
   120 
       
   121     def test_get_configuration_and_get_last_layer_by_index(self):
       
   122         conf =  self.project.get_configuration("morestuff.confml")
       
   123         config = conf.get_configuration_by_index(-1)
       
   124         self.assertEquals(config.get_path(),'familyX/prodX/root.confml')
       
   125     
       
   126     def test_get_all_resources(self):
       
   127         conf =  self.project.get_configuration("morestuff.confml")
       
   128         resources = conf.get_all_resources()
       
   129         self.assertEquals(resources[0].get_path(),'morestuff.confml')
       
   130         self.assertEquals(resources[1].get_path(),'platform/s60/root.confml')
       
   131 
       
   132     def test_list_confmls(self):
       
   133         conf =  self.project.get_configuration("morestuff.confml")
       
   134         confmls = conf.list_resources()
       
   135         self.assertEquals(confmls[0],'morestuff.confml')
       
   136         self.assertEquals(confmls[1],'platform/s60/root.confml')
       
   137     
       
   138     def test_list_implmls(self):
       
   139         conf =  self.project.get_configuration("morestuff.confml")
       
   140         implmls = conf.get_configuration('platform/s60/root.confml').get_layer().list_implml()
       
   141         self.assertEquals(implmls[0],'implml/accessoryserver_1020505A.crml')
       
   142 
       
   143 #    def test_list_content(self):
       
   144 #        conf =  self.project.get_configuration("morestuff.confml")
       
   145 #        contents = conf.list_content()
       
   146 #        self.assertEquals(contents[0],'platform/s60/content/.svn/all-wcprops')
       
   147             
       
   148     def test_layered_content(self):
       
   149         conf =  self.project.get_configuration("morestuff.confml")
       
   150         contents = conf.layered_content()
       
   151         self.assertEquals(contents.get_value('test/s60.txt'),'platform/s60/content/test/s60.txt')
       
   152         self.assertEquals(contents.get_value('test/override.txt'),'familyX/content/test/override.txt')
       
   153         self.assertEquals(contents.get_value('test/shout.txt'),'familyX/content/test/shout.txt')
       
   154 
       
   155     def test_layer_name(self):
       
   156         conf =  self.project.get_configuration("morestuff.confml")
       
   157         s60layer = conf.get_configuration('platform/s60/root.confml')
       
   158         self.assertEquals(s60layer.get_ref(),'platform__s60__root_confml')
       
   159 
       
   160 
       
   161     def test_layered_content_with_one_layer(self):
       
   162         conf =  self.project.get_configuration("morestuff.confml")
       
   163         contents = conf.layered_content([-2])
       
   164         self.assertEquals(contents.get_value('test/override.txt'),'familyX/content/test/override.txt')
       
   165         self.assertEquals(contents.get_value('test/shout.txt'),'familyX/content/test/shout.txt')
       
   166         try:
       
   167             contents.get_value('test/s60.txt')
       
   168             self.fail("Fetching content from s60 layer succeeds!")
       
   169         except KeyError:
       
   170             pass
       
   171 
       
   172     def test_layered_content_with_two_layers(self):
       
   173         conf =  self.project.get_configuration("morestuff.confml")
       
   174         contents = conf.layered_content([-2,-1])
       
   175         self.assertEquals(contents.get_value('test/override.txt'),'familyX/content/test/override.txt')
       
   176         self.assertEquals(contents.get_value('test/shout.txt'),'familyX/content/test/shout.txt')
       
   177         self.assertEquals(contents.get_value('prodX/jee/ProdX_specific.txt'),'familyX/prodX/content/prodX/jee/ProdX_specific.txt')
       
   178         try:
       
   179             contents.get_value('test/s60.txt')
       
   180             self.fail("Fetching content from s60 layer succeeds!")
       
   181         except KeyError:
       
   182             pass
       
   183 
       
   184 
       
   185 
       
   186         
       
   187 class TestConeProjectMethodsWrite(BaseTestCase):    
       
   188     def setUp(self):
       
   189         if not os.path.exists(temp_dir):
       
   190             os.makedirs(temp_dir)
       
   191         
       
   192         if not os.path.exists('newtempproject'):
       
   193             os.mkdir('newtempproject')
       
   194         fs = api.Storage.open("newtempproject","a")
       
   195         self.project = api.Project(fs)
       
   196 
       
   197     def tearDown(self):
       
   198         self.project.close()
       
   199         shutil.rmtree('newtempproject')
       
   200         pass
       
   201 
       
   202     def test_create_configuration(self):
       
   203         conf = self.project.create_configuration("dummy.confml")
       
   204         self.assertTrue(conf)
       
   205         self.assertEquals(conf.get_ref(),'dummy_confml')
       
   206         self.assertTrue(isinstance(conf,api.Configuration))
       
   207         conf.close()
       
   208         
       
   209     def test_create_close_open_configuration(self):
       
   210         tempdir_orig = os.path.normpath(os.path.join(temp_dir, "temp1_orig"))
       
   211         tempdir_copy = os.path.normpath(os.path.join(temp_dir, "temp1_copy"))
       
   212         self.remove_if_exists([tempdir_orig, tempdir_copy])
       
   213         
       
   214         project = api.Project(api.Storage.open(tempdir_orig,"w"))
       
   215         conf = project.create_configuration("dummy2.confml")
       
   216         conf.set_name("dummy")
       
   217         prop1 = model.ConfmlMetaProperty('owner', 'some guy')
       
   218         prop2 = model.ConfmlMetaProperty('purpose', 'for testing')
       
   219         conf.meta = model.ConfmlMeta([prop1, prop2])
       
   220         conf.desc = "Testing to see a configuration created"
       
   221         conf.create_configuration("test/path/to/somewhere/r.confml")
       
   222         conf.create_configuration("test/path/to/elsewhere/r.confml")
       
   223         conf.save()
       
   224         project.save()
       
   225         project.close()
       
   226         
       
   227         # Make a copy of the created directory
       
   228         shutil.copytree(tempdir_orig, tempdir_copy)
       
   229         # If everything has been closed properly, the original directory
       
   230         # should now be removable
       
   231         shutil.rmtree(tempdir_orig)
       
   232         
       
   233         project2 = api.Project(api.Storage.open(tempdir_copy))
       
   234         conf2 = project2.get_configuration("dummy2.confml")
       
   235         
       
   236         self.assertEquals(conf.get_name(),conf2.get_name())
       
   237         self.assertEquals(conf2.get_name(),'dummy')
       
   238         self.assertEquals(conf2.meta[0].tag ,'owner')
       
   239         self.assertEquals(conf2.meta[0].value ,'some guy')
       
   240         self.assertEquals(conf.desc,conf2.desc)
       
   241         self.assertEquals(conf.list_configurations(),conf2.list_configurations())
       
   242         project2.close()
       
   243     
       
   244     def test_remove_configuration_non_existing(self):
       
   245         try:
       
   246             self.project.remove_configuration("dummystring.txt")
       
   247             self.fail("Removing non existing configuration succeds!")
       
   248         except exceptions.NotFound,e:
       
   249             self.assertTrue(True)
       
   250             
       
   251     def test_create_remove_configuration(self):
       
   252         conf = self.project.create_configuration("remove.confml")
       
   253         conf.save()
       
   254         conf.close()
       
   255         
       
   256         self.project.remove_configuration("remove.confml")
       
   257         try:
       
   258             conf =  self.project.get_configuration("remove.confml")
       
   259             self.fail("Opening of removed configuration succeeds!")
       
   260         except exceptions.NotFound,e:
       
   261             self.assertTrue(True)
       
   262 
       
   263     def test_create_configuration_in_sub_configuration(self):
       
   264         fs = api.Storage.open("newproject","w")
       
   265         project = api.Project(fs)
       
   266         conf = project.create_configuration("croot.confml")
       
   267         subconf = conf.create_configuration("test/root.confml")
       
   268         subconf.create_configuration('confml/data.confml')
       
   269         conf.save()
       
   270         self.assertTrue(project.get_storage().is_resource('test/confml/data.confml'))
       
   271         conf = project.get_configuration("croot.confml")
       
   272         subconf = conf.create_configuration("test2\\root.confml")
       
   273         subconf.create_configuration('confml/data.confml')
       
   274         subconf.close()
       
   275         conf.save()
       
   276         self.assertTrue(project.get_storage().is_resource('test2/confml/data.confml'))
       
   277         project.close()
       
   278         shutil.rmtree("newproject")
       
   279 
       
   280     
       
   281     
       
   282 if __name__ == '__main__':
       
   283     unittest.main()
       
   284