configurationengine/source/plugins/symbian/ConeCRMLPlugin/CRMLPlugin/tests/unittest_crml_reader.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 import sys, os, unittest
       
    18 import __init__
       
    19 
       
    20 ROOT_PATH = os.path.dirname(os.path.abspath(__file__))
       
    21 
       
    22 try:
       
    23     from cElementTree import ElementTree
       
    24 except ImportError:
       
    25     try:    
       
    26         from elementtree import ElementTree
       
    27     except ImportError:
       
    28         try:
       
    29             from xml.etree import cElementTree as ElementTree
       
    30         except ImportError:
       
    31             from xml.etree import ElementTree
       
    32 
       
    33 from cone.public import exceptions, plugin, api, container
       
    34 
       
    35 from CRMLPlugin.crml_model import *
       
    36 from CRMLPlugin.crml_reader import CrmlReader
       
    37 
       
    38 class TestCrmlReader(unittest.TestCase):
       
    39     
       
    40     NAMESPACE = CrmlReader.NAMESPACE
       
    41     
       
    42     def setUp(self):
       
    43         self.reader = CrmlReader()
       
    44     
       
    45     def assert_read_access_equals(self, data, expected):
       
    46         etree = ElementTree.fromstring(data)
       
    47         access = self.reader.read_access(etree)
       
    48         self.assertEquals(expected, access)
       
    49     
       
    50     def test_read_access(self):
       
    51         data = """<?xml version="1.0"?><test/>"""
       
    52         self.assert_read_access_equals(data, CrmlAccess())
       
    53         
       
    54         data = """<?xml version="1.0"?>
       
    55                 <test xmlns='%s'>
       
    56                     <access type='R' capabilities="AlwaysPass" sid="0x12345678"/>
       
    57                     <access type='W' capabilities="WriteDeviceData" sid="0x87654321"/>
       
    58                 </test>
       
    59                 """ % self.NAMESPACE
       
    60         self.assert_read_access_equals(data,
       
    61             CrmlAccess(cap_rd='AlwaysPass', cap_wr='WriteDeviceData', sid_rd='0x12345678', sid_wr='0x87654321'))
       
    62     
       
    63     def test_read_duplicate_access(self):
       
    64         data = """<?xml version="1.0"?>
       
    65                 <test xmlns='%s'>
       
    66                     <access type='R' capabilities="ReadDeviceData" sid="0x12345678"/>
       
    67                     <access type='W' capabilities="WriteDeviceData" sid="0x87654321"/>
       
    68                     <access type='R' capabilities="TCB" sid="0x11223344"/>
       
    69                     <access type='W' capabilities="DRM" sid="0x44332211"/>
       
    70                 </test>
       
    71                 """ % self.NAMESPACE
       
    72         self.assert_read_access_equals(data,
       
    73             CrmlAccess(cap_rd='ReadDeviceData', cap_wr='WriteDeviceData', sid_rd='0x12345678', sid_wr='0x87654321'))
       
    74     
       
    75     
       
    76     def read_key_from_xml(self, data):
       
    77         etree = ElementTree.fromstring(data)
       
    78         return self.reader.read_key(etree)
       
    79         
       
    80     def assert_read_key_equals(self, data, expected):
       
    81         self.assertEquals(expected, self.read_key_from_xml(data))
       
    82     
       
    83     def test_read_key(self):
       
    84         data = """<?xml version="1.0"?>
       
    85                 <key xmlns='%s' ref="Foo/Bar" name="Foobar setting" int="0x01020304" type="real" readOnly="true" backup="true">
       
    86                     <access type='R' capabilities="AlwaysPass" sid="0x12345678"/>
       
    87                     <access type='W' capabilities="WriteDeviceData" sid="0x87654321"/>
       
    88                 </key>""" % self.NAMESPACE
       
    89         self.assert_read_key_equals(data,
       
    90             CrmlSimpleKey(ref='Foo.Bar', name='Foobar setting', int='0x01020304', type='real', read_only=True, backup=True,
       
    91                           access=CrmlAccess(cap_rd='AlwaysPass', cap_wr='WriteDeviceData', sid_rd='0x12345678', sid_wr='0x87654321')))
       
    92         
       
    93     def test_read_invalid_key(self):
       
    94         # Required attribute 'ref' missing
       
    95         data = '<key xmlns="%s" name="Foobar setting" int="0x01020304" type="real"/>' % self.NAMESPACE
       
    96         self.assertRaises(exceptions.ParseError, self.read_key_from_xml, data)
       
    97     
       
    98     def assert_read_bitmask_key_equals(self, data, expected):
       
    99         etree = ElementTree.fromstring(data)
       
   100         key = self.reader.read_bitmask_key(etree)
       
   101         self.assertEquals(expected, key)
       
   102     
       
   103     def test_read_bitmask_key(self):
       
   104         data = """
       
   105         <key xmlns='%s' name="Bitmask" type="binary" int="0x00000001" readOnly="true" backup="true">
       
   106             <access type="R" capabilities="ReadDeviceData"/>
       
   107             <bit ref="BitmaskTest/Bit0">1</bit>
       
   108             <bit ref="BitmaskTest/Bit3">4</bit>
       
   109             <bit ref="BitmaskTest/Bit5" value='false'>6</bit>
       
   110         </key>
       
   111         """ % self.NAMESPACE
       
   112         
       
   113         self.assert_read_bitmask_key_equals(data,
       
   114             CrmlBitmaskKey(name      = 'Bitmask',
       
   115                            type      = 'binary',
       
   116                            int       = '0x00000001',
       
   117                            read_only = True,
       
   118                            backup    = True,
       
   119                            access    = CrmlAccess(cap_rd='ReadDeviceData'),
       
   120                            bits      = [CrmlBit(ref='BitmaskTest.Bit0', index=1),
       
   121                                         CrmlBit(ref='BitmaskTest.Bit3', index=4),
       
   122                                         CrmlBit(ref='BitmaskTest.Bit5', index=6, invert=True)]))
       
   123     
       
   124     def assert_read_key_range_equals(self, data, expected):
       
   125         etree = ElementTree.fromstring(data)
       
   126         key = self.reader.read_key_range(etree)
       
   127         self.assertEquals(expected, key)
       
   128     
       
   129     def test_read_key_range(self):
       
   130         data = """
       
   131             <keyRange xmlns='%s' firstInt="0x00004000" lastInt="0x00004FFF" readOnly="true" backup="false">
       
   132                 <access type="R" capabilities="TCB"/>
       
   133             </keyRange>
       
   134             """ % self.NAMESPACE
       
   135         self.assert_read_key_range_equals(data,
       
   136             CrmlKeyRange(first_int='0x00004000', last_int='0x00004FFF', read_only=True, backup=False,
       
   137                          access=CrmlAccess(cap_rd='TCB')))
       
   138         
       
   139         data = """
       
   140             <keyRange xmlns='%s' ref="KeyRangeTest/SequenceSetting" backup="true" name="Sequence setting"
       
   141                 firstInt="0x1001" lastInt="0x1fff" indexBits="0x0ff0" firstIndex="1" countInt="0x1000">
       
   142                 <access type="R" capabilities="AlwaysPass"/>
       
   143                 <access type="W" capabilities="WriteDeviceData"/>
       
   144                 <key ref="StringSubSetting" name="String" int="0x0001" type="string8"/>
       
   145                 <key ref="IntSubSetting" name="Int" int="0x0002" type="int"/>
       
   146                 <key ref="IntSubSetting2" name="Int2" int="0x0003"/>
       
   147             </keyRange>
       
   148             """ % self.NAMESPACE
       
   149         self.assert_read_key_range_equals(data,
       
   150             CrmlKeyRange(first_int='0x1001', last_int='0x1fff', index_bits=0x0ff0,
       
   151                          count_int='0x1000', first_index=1,
       
   152                          ref='KeyRangeTest.SequenceSetting',
       
   153                          name='Sequence setting', backup=True, read_only=False,
       
   154                          access=CrmlAccess(cap_rd='AlwaysPass', cap_wr='WriteDeviceData'),
       
   155                          subkeys=[CrmlKeyRangeSubKey(ref='StringSubSetting', name='String', int='0x0001', type='string8'),
       
   156                                   CrmlKeyRangeSubKey(ref='IntSubSetting', name='Int', int='0x0002', type='int'),
       
   157                                   CrmlKeyRangeSubKey(ref='IntSubSetting2', name='Int2', int='0x0003', type='int')]))
       
   158     
       
   159     def assert_read_repo_equals(self, data, expected):
       
   160         etree = ElementTree.fromstring(data)
       
   161         key = self.reader.read_repository(etree)
       
   162         self.assertEquals(expected, key)
       
   163     
       
   164     def test_read_empty_repository(self):
       
   165         data = """<?xml version="1.0"?>
       
   166             <repository xmlns="%s" uidName="EmptyRepo" uidValue="0x000000E1"
       
   167                 owner="0xABCDDCBA" backup="true" rfs="true" initialisationFileVersion="2">
       
   168             </repository>
       
   169             """ % self.NAMESPACE
       
   170         self.assert_read_repo_equals(data,
       
   171             CrmlRepository(uid_name  = 'EmptyRepo',
       
   172                            uid_value = '0x000000E1',
       
   173                            owner     = '0xABCDDCBA',
       
   174                            backup    = True,
       
   175                            rfs       = True,
       
   176                            version   = '2'))
       
   177     
       
   178     def test_read_simple_repository(self):
       
   179         data = """<?xml version="1.0"?>
       
   180             <repository xmlns="%s" uidName="SimpleRepo" uidValue="0x000000E2"
       
   181                 owner="0xF00DBEEF" backup="true" rfs="true">
       
   182                 <key ref="Foo/Key1" name="Fookey 1" int="0x00000001" type="int" readOnly="true" backup="true"/>
       
   183                 <key ref="Foo/Key2" name="Fookey 2" int="0x00000002" type="real" readOnly="false" backup="true"/>
       
   184                 <key ref="Foo/Key3" name="Fookey 3" int="0x00000003" type="string" readOnly="true" backup="false"/>
       
   185             </repository>
       
   186             """ % self.NAMESPACE
       
   187         self.assert_read_repo_equals(data,
       
   188             CrmlRepository(
       
   189                 uid_name  = 'SimpleRepo',
       
   190                 uid_value = '0x000000E2',
       
   191                 owner     = '0xF00DBEEF',
       
   192                 backup    = True,
       
   193                 rfs       = True,
       
   194                 version   = '1',
       
   195                 keys      = [CrmlSimpleKey(ref='Foo.Key1', name='Fookey 1', int='0x00000001', type='int', read_only=True, backup=True, access=CrmlAccess(cap_wr='AlwaysFail')),
       
   196                              CrmlSimpleKey(ref='Foo.Key2', name='Fookey 2', int='0x00000002', type='real', read_only=False, backup=True),
       
   197                              CrmlSimpleKey(ref='Foo.Key3', name='Fookey 3', int='0x00000003', type='string', read_only=True, backup=False, access=CrmlAccess(cap_wr='AlwaysFail')),]))
       
   198 
       
   199 
       
   200 if __name__ == "__main__":
       
   201     unittest.main()