Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(96)

Side by Side Diff: tools/usb_gadget/descriptor_test.py

Issue 409883008: [usb_gadget p00] Classes for encoding USB descriptors. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 6 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(Empty)
1 #!/usr/bin/python
2
3 import unittest
4
5 import descriptor
6
7
8 class DescriptorWithField(descriptor.Descriptor):
9 pass
10
11 DescriptorWithField.AddField('bField', 'B')
12
13
14 class DescriptorWithDefault(descriptor.Descriptor):
15 pass
16
17 DescriptorWithDefault.AddField('bDefault', 'B', default=42)
18
19
20 class DescriptorWithFixed(descriptor.Descriptor):
21 pass
22
23 DescriptorWithFixed.AddFixedField('bFixed', 'B', 42)
24
25
26 class DescriptorWithComputed(descriptor.Descriptor):
27
28 @property
29 def foo(self):
30 return 42
31
32 DescriptorWithComputed.AddComputedField('bComputed', 'B', 'foo')
33
34
35 class DescriptorWithDescriptors(descriptor.DescriptorContainer):
36 pass
37
38 DescriptorWithDescriptors.AddField('bType', 'B')
39
40
41 class DescriptorTest(unittest.TestCase):
42
43 def test_default(self):
44 obj = DescriptorWithDefault()
45 self.assertEquals(obj.bDefault, 42)
46
47 def test_change_default(self):
48 obj = DescriptorWithDefault()
49 obj.bDefault = 1
50 self.assertEquals(obj.bDefault, 1)
51
52 def test_override_default(self):
53 obj = DescriptorWithDefault(bDefault=56)
54 self.assertEquals(obj.bDefault, 56)
55
56 def test_fixed(self):
57 obj = DescriptorWithFixed()
58 self.assertEquals(obj.bFixed, 42)
59
60 def test_set_fixed(self):
61 with self.assertRaises(RuntimeError):
62 DescriptorWithFixed(bFixed=1)
63
64 def test_modify_fixed(self):
65 obj = DescriptorWithFixed()
66 with self.assertRaises(RuntimeError):
67 obj.bFixed = 1
68
69 def test_computed(self):
70 obj = DescriptorWithComputed()
71 self.assertEquals(obj.bComputed, 42)
72
73 def test_set_computed(self):
74 with self.assertRaises(RuntimeError):
75 DescriptorWithComputed(bComputed=1)
76
77 def test_modify_computed(self):
78 obj = DescriptorWithComputed()
79 with self.assertRaises(RuntimeError):
80 obj.bComputed = 1
81
82 def test_unexpected(self):
83 with self.assertRaisesRegexp(TypeError, 'Unexpected'):
84 DescriptorWithField(bUnexpected=1)
85
86 def test_missing(self):
87 with self.assertRaisesRegexp(TypeError, 'Missing'):
88 DescriptorWithField()
89
90 def test_size(self):
91 obj = DescriptorWithField(bField=42)
92 self.assertEquals(obj.struct_size, 1)
93 self.assertEquals(obj.total_size, 1)
94
95 def test_encode(self):
96 obj = DescriptorWithField(bField=0xff)
97 self.assertEquals(obj.Encode(), '\xff')
98
99 def test_string(self):
100 obj = DescriptorWithField(bField=42)
101 string = str(obj)
102 self.assertIn('bField', string)
103 self.assertIn('42', string)
104
105 def test_container(self):
106 parent = DescriptorWithDescriptors(bType=0)
107 child1 = DescriptorWithField(bField=1)
108 parent.Add(child1)
109 child2 = DescriptorWithField(bField=2)
110 parent.Add(child2)
111 self.assertEquals(parent.total_size, 3)
112 self.assertEquals(parent.Encode(), '\x00\x01\x02')
113 string = str(parent)
114 self.assertIn('bType', string)
115 self.assertIn('bField', string)
116
117
118 class TestUsbDescriptors(unittest.TestCase):
119
120 def test_device_descriptor(self):
121 device_desc = descriptor.DeviceDescriptor(
122 idVendor=0xDEAD,
123 idProduct=0xBEEF,
124 bcdDevice=0x0100,
125 bNumConfigurations=1)
126 self.assertEquals(
127 device_desc.Encode(),
128 '\x12\x01\x00\x02\x00\x00\x00\x40\xAD\xDE\xEF\xBE\x00\x01\x00\x00\x00'
129 '\x01')
130
131 def test_unique_interfaces(self):
132 interface_desc1 = descriptor.InterfaceDescriptor(bInterfaceNumber=1)
133 interface_desc2 = descriptor.InterfaceDescriptor(bInterfaceNumber=1,
134 bAlternateSetting=1)
135 interface_desc3 = descriptor.InterfaceDescriptor(bInterfaceNumber=1)
136
137 configuration_desc = descriptor.ConfigurationDescriptor(
138 bmAttributes=0xC0,
139 MaxPower=100)
140 configuration_desc.AddInterface(interface_desc1)
141 configuration_desc.AddInterface(interface_desc2)
142 with self.assertRaisesRegexp(RuntimeError, r'Interface 1 \(alternate 0\)'):
143 configuration_desc.AddInterface(interface_desc3)
144
145 def test_unique_endpoints(self):
146 endpoint_desc1 = descriptor.EndpointDescriptor(
147 bEndpointAddress=0x01,
148 bmAttributes=0x02,
149 wMaxPacketSize=64,
150 bInterval=1)
151 endpoint_desc2 = descriptor.EndpointDescriptor(
152 bEndpointAddress=0x81,
153 bmAttributes=0x02,
154 wMaxPacketSize=64,
155 bInterval=1)
156 endpoint_desc3 = descriptor.EndpointDescriptor(
157 bEndpointAddress=0x01,
158 bmAttributes=0x01,
159 wMaxPacketSize=32,
160 bInterval=10)
161
162 interface_desc = descriptor.InterfaceDescriptor(bInterfaceNumber=1)
163 interface_desc.AddEndpoint(endpoint_desc1)
164 interface_desc.AddEndpoint(endpoint_desc2)
165 with self.assertRaisesRegexp(RuntimeError, 'Endpoint 0x01 already defined'):
166 interface_desc.AddEndpoint(endpoint_desc3)
167
168 def test_configuration_descriptor(self):
169 endpoint_desc = descriptor.EndpointDescriptor(
170 bEndpointAddress=0x01,
171 bmAttributes=0x02,
172 wMaxPacketSize=64,
173 bInterval=1)
174 encoded_endpoint = '\x07\x05\x01\x02\x40\x00\x01'
175 self.assertEquals(endpoint_desc.Encode(), encoded_endpoint)
176
177 interface_desc = descriptor.InterfaceDescriptor(bInterfaceNumber=1)
178 interface_desc.AddEndpoint(endpoint_desc)
179 self.assertEquals([endpoint_desc], interface_desc.GetEndpoints())
180 encoded_interface = ('\x09\x04\x01\x00\x01\xFF\xFF\xFF\x00' +
181 encoded_endpoint)
182 self.assertEquals(interface_desc.Encode(), encoded_interface)
183
184 configuration_desc = descriptor.ConfigurationDescriptor(
185 bmAttributes=0xC0,
186 MaxPower=100)
187 configuration_desc.AddInterface(interface_desc)
188 self.assertEquals([interface_desc], configuration_desc.GetInterfaces())
189 encoded_configuration = ('\x09\x02\x19\x00\x01\x01\x00\xC0\x64' +
190 encoded_interface)
191 self.assertEquals(configuration_desc.Encode(), encoded_configuration)
192
193 def test_encode_hid_descriptor(self):
194 hid_desc = descriptor.HidDescriptor()
195 hid_desc.AddDescriptor(0x22, 0x80)
196 hid_desc.AddDescriptor(0x23, 0x60)
197 encoded_desc = '\x0C\x21\x11\x01\x00\x02\x22\x80\x00\x23\x60\x00'
198 self.assertEquals(hid_desc.Encode(), encoded_desc)
199
200 def test_print_hid_descriptor(self):
201 hid_desc = descriptor.HidDescriptor()
202 hid_desc.AddDescriptor(0x22, 0x80)
203 hid_desc.AddDescriptor(0x23, 0x60)
204 string = str(hid_desc)
205 self.assertIn('0x22', string)
206 self.assertIn('0x23', string)
207
208
209 if __name__ == '__main__':
210 unittest.main()
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698