|
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() |