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