12 # Contributors: |
12 # Contributors: |
13 # |
13 # |
14 # Description: |
14 # Description: |
15 # |
15 # |
16 |
16 |
17 import sys, os, unittest |
17 import os, unittest |
18 import __init__ |
|
19 |
18 |
20 ROOT_PATH = os.path.dirname(os.path.abspath(__file__)) |
19 ROOT_PATH = os.path.dirname(os.path.abspath(__file__)) |
21 |
20 |
22 try: |
21 from cone.public import exceptions, plugin, api, container, utils |
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 |
22 |
35 from CRMLPlugin.crml_model import * |
23 from CRMLPlugin.crml_model import * |
36 from CRMLPlugin.crml_reader import CrmlReader |
24 from CRMLPlugin.crml_reader import CrmlReader |
37 |
25 |
38 class TestCrmlReader(unittest.TestCase): |
26 class TestCrmlReader(unittest.TestCase): |
41 |
29 |
42 def setUp(self): |
30 def setUp(self): |
43 self.reader = CrmlReader() |
31 self.reader = CrmlReader() |
44 |
32 |
45 def assert_read_access_equals(self, data, expected): |
33 def assert_read_access_equals(self, data, expected): |
46 etree = ElementTree.fromstring(data) |
34 etree = utils.etree.fromstring(data) |
47 access = self.reader.read_access(etree) |
35 access = self.reader.read_access(etree) |
48 self.assertEquals(expected, access) |
36 self.assertEquals(expected, access) |
49 |
37 |
50 def test_read_access(self): |
38 def test_read_access(self): |
51 data = """<?xml version="1.0"?><test/>""" |
39 data = """<?xml version="1.0"?><test/>""" |
57 <access type='W' capabilities="WriteDeviceData" sid="0x87654321"/> |
45 <access type='W' capabilities="WriteDeviceData" sid="0x87654321"/> |
58 </test> |
46 </test> |
59 """ % self.NAMESPACE |
47 """ % self.NAMESPACE |
60 self.assert_read_access_equals(data, |
48 self.assert_read_access_equals(data, |
61 CrmlAccess(cap_rd='AlwaysPass', cap_wr='WriteDeviceData', sid_rd='0x12345678', sid_wr='0x87654321')) |
49 CrmlAccess(cap_rd='AlwaysPass', cap_wr='WriteDeviceData', sid_rd='0x12345678', sid_wr='0x87654321')) |
62 |
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 |
63 def test_read_duplicate_access(self): |
77 def test_read_duplicate_access(self): |
64 data = """<?xml version="1.0"?> |
78 data = """<?xml version="1.0"?> |
65 <test xmlns='%s'> |
79 <test xmlns='%s'> |
66 <access type='R' capabilities="ReadDeviceData" sid="0x12345678"/> |
80 <access type='R' capabilities="ReadDeviceData" sid="0x12345678"/> |
67 <access type='W' capabilities="WriteDeviceData" sid="0x87654321"/> |
81 <access type='W' capabilities="WriteDeviceData" sid="0x87654321"/> |
72 self.assert_read_access_equals(data, |
86 self.assert_read_access_equals(data, |
73 CrmlAccess(cap_rd='ReadDeviceData', cap_wr='WriteDeviceData', sid_rd='0x12345678', sid_wr='0x87654321')) |
87 CrmlAccess(cap_rd='ReadDeviceData', cap_wr='WriteDeviceData', sid_rd='0x12345678', sid_wr='0x87654321')) |
74 |
88 |
75 |
89 |
76 def read_key_from_xml(self, data): |
90 def read_key_from_xml(self, data): |
77 etree = ElementTree.fromstring(data) |
91 etree = utils.etree.fromstring(data) |
78 return self.reader.read_key(etree) |
92 return self.reader.read_key(etree) |
79 |
93 |
80 def assert_read_key_equals(self, data, expected): |
94 def assert_read_key_equals(self, data, expected): |
81 self.assertEquals(expected, self.read_key_from_xml(data)) |
95 self.assertEquals(expected, self.read_key_from_xml(data)) |
82 |
96 |
94 # Required attribute 'ref' missing |
108 # Required attribute 'ref' missing |
95 data = '<key xmlns="%s" name="Foobar setting" int="0x01020304" type="real"/>' % self.NAMESPACE |
109 data = '<key xmlns="%s" name="Foobar setting" int="0x01020304" type="real"/>' % self.NAMESPACE |
96 self.assertRaises(exceptions.ParseError, self.read_key_from_xml, data) |
110 self.assertRaises(exceptions.ParseError, self.read_key_from_xml, data) |
97 |
111 |
98 def assert_read_bitmask_key_equals(self, data, expected): |
112 def assert_read_bitmask_key_equals(self, data, expected): |
99 etree = ElementTree.fromstring(data) |
113 etree = utils.etree.fromstring(data) |
100 key = self.reader.read_bitmask_key(etree) |
114 key = self.reader.read_bitmask_key(etree) |
101 self.assertEquals(expected, key) |
115 self.assertEquals(expected, key) |
102 |
116 |
103 def test_read_bitmask_key(self): |
117 def test_read_bitmask_key(self): |
104 data = """ |
118 data = """ |
120 bits = [CrmlBit(ref='BitmaskTest.Bit0', index=1), |
134 bits = [CrmlBit(ref='BitmaskTest.Bit0', index=1), |
121 CrmlBit(ref='BitmaskTest.Bit3', index=4), |
135 CrmlBit(ref='BitmaskTest.Bit3', index=4), |
122 CrmlBit(ref='BitmaskTest.Bit5', index=6, invert=True)])) |
136 CrmlBit(ref='BitmaskTest.Bit5', index=6, invert=True)])) |
123 |
137 |
124 def assert_read_key_range_equals(self, data, expected): |
138 def assert_read_key_range_equals(self, data, expected): |
125 etree = ElementTree.fromstring(data) |
139 etree = utils.etree.fromstring(data) |
126 key = self.reader.read_key_range(etree) |
140 key = self.reader.read_key_range(etree) |
127 self.assertEquals(expected, key) |
141 self.assertEquals(expected, key) |
128 |
142 |
129 def test_read_key_range(self): |
143 def test_read_key_range(self): |
130 data = """ |
144 data = """ |
155 subkeys=[CrmlKeyRangeSubKey(ref='StringSubSetting', name='String', int='0x0001', type='string8'), |
169 subkeys=[CrmlKeyRangeSubKey(ref='StringSubSetting', name='String', int='0x0001', type='string8'), |
156 CrmlKeyRangeSubKey(ref='IntSubSetting', name='Int', int='0x0002', type='int'), |
170 CrmlKeyRangeSubKey(ref='IntSubSetting', name='Int', int='0x0002', type='int'), |
157 CrmlKeyRangeSubKey(ref='IntSubSetting2', name='Int2', int='0x0003', type='int')])) |
171 CrmlKeyRangeSubKey(ref='IntSubSetting2', name='Int2', int='0x0003', type='int')])) |
158 |
172 |
159 def assert_read_repo_equals(self, data, expected): |
173 def assert_read_repo_equals(self, data, expected): |
160 etree = ElementTree.fromstring(data) |
174 etree = utils.etree.fromstring(data) |
161 key = self.reader.read_repository(etree) |
175 key = self.reader.read_repository(etree) |
162 self.assertEquals(expected, key) |
176 self.assertEquals(expected, key) |
163 |
177 |
164 def test_read_empty_repository(self): |
178 def test_read_empty_repository(self): |
165 data = """<?xml version="1.0"?> |
179 data = """<?xml version="1.0"?> |