1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package org.fourthline.cling.test.model;
17
18 import org.fourthline.cling.model.Constants;
19 import org.fourthline.cling.model.ServerClientTokens;
20 import org.fourthline.cling.model.message.header.*;
21 import org.fourthline.cling.model.types.DeviceType;
22 import org.fourthline.cling.model.types.NamedDeviceType;
23 import org.fourthline.cling.model.types.NamedServiceType;
24 import org.fourthline.cling.model.types.ServiceType;
25 import org.fourthline.cling.model.types.UDADeviceType;
26 import org.fourthline.cling.model.types.UDAServiceType;
27 import org.seamless.util.MimeType;
28 import org.testng.annotations.Test;
29
30 import java.net.URI;
31 import java.util.Locale;
32
33 import static org.testng.Assert.assertEquals;
34
35
36 public class HeaderParsingTest {
37
38 @Test
39 public void parseContentTypeHeader() {
40 ContentTypeHeader header = new ContentTypeHeader(MimeType.valueOf("foo/bar;charset=\"utf-8\""));
41 assertEquals(header.getString(), "foo/bar;charset=\"utf-8\"");
42 }
43
44 @Test
45 public void parseDeviceType() {
46 DeviceType deviceType = DeviceType.valueOf("urn:foo-bar:device:MyDeviceType:123");
47 assertEquals(deviceType.getNamespace(), "foo-bar");
48 assertEquals(deviceType.getType(), "MyDeviceType");
49 assertEquals(deviceType.getVersion(), 123);
50 }
51
52 @Test
53 public void parseUDADeviceType() {
54 UDADeviceType deviceType = (UDADeviceType)DeviceType.valueOf("urn:schemas-upnp-org:device:MyDeviceType:123");
55 assertEquals(deviceType.getType(), "MyDeviceType");
56 assertEquals(deviceType.getVersion(), 123);
57 }
58
59 @Test
60 public void parseInvalidDeviceTypeHeader() {
61 DeviceTypeHeader header = new DeviceTypeHeader();
62 header.setString("urn:foo-bar:device:!@#:123");
63 assertEquals(header.getValue().getNamespace(), "foo-bar");
64 assertEquals(header.getValue().getType(), "---");
65 assertEquals(header.getValue().getVersion(), 123);
66 assertEquals(header.getString(), "urn:foo-bar:device:---:123");
67 }
68
69 @Test
70 public void parseDeviceTypeHeaderURI() {
71 DeviceTypeHeader header = new DeviceTypeHeader(URI.create("urn:schemas-upnp-org:device:MyDeviceType:123"));
72 assertEquals(header.getValue().getNamespace(), "schemas-upnp-org");
73 assertEquals(header.getValue().getType(), "MyDeviceType");
74 assertEquals(header.getValue().getVersion(), 123);
75 assertEquals(header.getString(), "urn:schemas-upnp-org:device:MyDeviceType:123");
76
77 }
78
79 @Test
80 public void parseDeviceUSNHeader() {
81 DeviceUSNHeader header = new DeviceUSNHeader();
82 header.setString("uuid:MY-DEVICE-123::urn:schemas-upnp-org:device:MY-DEVICE-TYPE:1");
83 assertEquals(header.getValue().getUdn().getIdentifierString(), "MY-DEVICE-123");
84 assert header.getValue().getDeviceType() instanceof UDADeviceType;
85 }
86
87 @Test
88 public void parseDeviceUSNHeaderStatic() {
89 DeviceUSNHeader header = new DeviceUSNHeader(
90 NamedDeviceType.valueOf("uuid:MY-DEVICE-123::urn:schemas-upnp-org:device:MY-DEVICE-TYPE:1")
91 );
92 assertEquals(header.getValue().getUdn().getIdentifierString(), "MY-DEVICE-123");
93 assert header.getValue().getDeviceType() instanceof UDADeviceType;
94 }
95
96 @Test(expectedExceptions = InvalidHeaderException.class)
97 public void parseInvalidDeviceUSNHeader() {
98 DeviceUSNHeader header = new DeviceUSNHeader();
99 header.setString("uuid:MY-DEVICE-123--urn:schemas-upnp-org:device:MY-DEVICE-TYPE:1");
100 }
101
102 @Test(expectedExceptions = InvalidHeaderException.class)
103 public void parseInvalidEXTHeader() {
104 EXTHeader header = new EXTHeader();
105 header.setString("MUST BE EMPTY STRING");
106 }
107
108 @Test
109 public void parseHostHeaderConstructor() {
110 HostHeader header = new HostHeader("foo.bar", 1234);
111 assertEquals(header.getValue().getHost(), "foo.bar");
112 assertEquals(header.getValue().getPort(), 1234);
113
114 header = new HostHeader(1234);
115 assertEquals(header.getValue().getHost(), Constants.IPV4_UPNP_MULTICAST_GROUP);
116 assertEquals(header.getValue().getPort(), 1234);
117 }
118
119 @Test
120 public void parseHostHeader() {
121 HostHeader header = new HostHeader();
122 assertEquals(header.getValue().getHost(), Constants.IPV4_UPNP_MULTICAST_GROUP);
123 assertEquals(header.getValue().getPort(), Constants.UPNP_MULTICAST_PORT);
124
125 header = new HostHeader();
126 header.setString("foo.bar:1234");
127 assertEquals(header.getValue().getHost(), "foo.bar");
128 assertEquals(header.getValue().getPort(), 1234);
129
130 header = new HostHeader();
131 header.setString("foo.bar");
132 assertEquals(header.getValue().getHost(), "foo.bar");
133 assertEquals(header.getValue().getPort(), Constants.UPNP_MULTICAST_PORT);
134 }
135
136 @Test(expectedExceptions = InvalidHeaderException.class)
137 public void parseInvalidHostHeader() {
138 HostHeader header = new HostHeader();
139 header.setString("foo.bar:abc");
140 }
141
142 @Test(expectedExceptions = InvalidHeaderException.class)
143 public void parseInvalidLocationHeader() {
144 LocationHeader header = new LocationHeader();
145 header.setString("this://is.not...a valid URL");
146 }
147
148 @Test(expectedExceptions = InvalidHeaderException.class)
149 public void parseInvalidMANHeader() {
150 MANHeader header = new MANHeader("abc");
151 header.setString("\"foo.bar\"; ns = baz");
152 }
153
154 @Test
155 public void parseMANHeaderNoNS() {
156 MANHeader header = new MANHeader("abc");
157 header.setString("\"foo.bar\"");
158 assert header.getValue().equals("foo.bar");
159 assert header.getNamespace() == null;
160 assert header.getString().equals("\"foo.bar\"");
161 }
162
163 @Test
164 public void parseMANHeaderNS() {
165 MANHeader header = new MANHeader("abc");
166 header.setString("\"foo.bar\"; ns =12");
167 assert header.getValue().equals("foo.bar");
168 assert header.getNamespace().equals("12");
169 assert header.getString().equals("\"foo.bar\"; ns=12");
170 }
171
172 @Test
173 public void parseMaxAgeHeader() {
174 MaxAgeHeader header = new MaxAgeHeader();
175 header.setString("max-age=1234, foobar=baz");
176 assertEquals(header.getValue(), new Integer(1234));
177 }
178
179 @Test(expectedExceptions = InvalidHeaderException.class)
180 public void parseInvalidMaxAgeHeader() {
181 MaxAgeHeader header = new MaxAgeHeader();
182 header.setString("max-foo=123");
183 }
184
185 @Test
186 public void parseMXHeader() {
187 MXHeader header = new MXHeader();
188 header.setString("111");
189 assertEquals(header.getValue(), new Integer(111));
190
191 header = new MXHeader();
192 header.setString("123");
193 assertEquals(header.getValue(), MXHeader.DEFAULT_VALUE);
194
195 }
196
197 @Test(expectedExceptions = InvalidHeaderException.class)
198 public void parseInvalidMXHeader() {
199 MXHeader header = new MXHeader();
200 header.setString("abc");
201 }
202
203 @Test(expectedExceptions = InvalidHeaderException.class)
204 public void parseInvalidNTSHeader() {
205 NTSHeader header = new NTSHeader();
206 header.setString("foo");
207 }
208
209 @Test(expectedExceptions = InvalidHeaderException.class)
210 public void parseInvalidRootDeviceHeader() {
211 RootDeviceHeader header = new RootDeviceHeader();
212 header.setString("upnp:foodevice");
213 }
214
215 @Test
216 public void parseServerHeader() {
217 ServerHeader header = new ServerHeader();
218 header.setString("foo/1 UPnP/1.1 bar/2");
219 assertEquals(header.getValue().getOsName(), "foo");
220 assertEquals(header.getValue().getOsVersion(), "1");
221 assertEquals(header.getValue().getProductName(), "bar");
222 assertEquals(header.getValue().getProductVersion(), "2");
223 assertEquals(header.getValue().getMajorVersion(), 1);
224 assertEquals(header.getValue().getMinorVersion(), 1);
225
226
227 header = new ServerHeader();
228 header.setString("foo/1, UPnP/1.1, bar/2");
229 assertEquals(header.getValue().getOsName(), "foo");
230 assertEquals(header.getValue().getOsVersion(), "1");
231 assertEquals(header.getValue().getProductName(), "bar");
232 assertEquals(header.getValue().getProductVersion(), "2");
233 assertEquals(header.getValue().getMajorVersion(), 1);
234 assertEquals(header.getValue().getMinorVersion(), 1);
235
236
237 header = new ServerHeader();
238 header.setString("foo baz/1 UPnP/1.1 bar abc/2");
239 assertEquals(header.getValue().getOsName(), "foo baz");
240 assertEquals(header.getValue().getOsVersion(), "1");
241 assertEquals(header.getValue().getProductName(), "bar abc");
242 assertEquals(header.getValue().getProductVersion(), "2");
243 assertEquals(header.getValue().getMajorVersion(), 1);
244 assertEquals(header.getValue().getMinorVersion(), 1);
245
246
247 header = new ServerHeader();
248 header.setString("foo baz/1, UPnP/1.1, bar abc/2");
249 assertEquals(header.getValue().getOsName(), "foo baz");
250 assertEquals(header.getValue().getOsVersion(), "1");
251 assertEquals(header.getValue().getProductName(), "bar abc");
252 assertEquals(header.getValue().getProductVersion(), "2");
253 assertEquals(header.getValue().getMajorVersion(), 1);
254 assertEquals(header.getValue().getMinorVersion(), 1);
255
256
257 header = new ServerHeader();
258 header.setString("foo/1 UPnP/1.");
259 assertEquals(header.getValue().getOsName(), ServerClientTokens.UNKNOWN_PLACEHOLDER);
260 assertEquals(header.getValue().getOsVersion(), ServerClientTokens.UNKNOWN_PLACEHOLDER);
261 assertEquals(header.getValue().getProductName(), ServerClientTokens.UNKNOWN_PLACEHOLDER);
262 assertEquals(header.getValue().getProductVersion(), ServerClientTokens.UNKNOWN_PLACEHOLDER);
263 assertEquals(header.getValue().getMajorVersion(), 1);
264 assertEquals(header.getValue().getMinorVersion(), 0);
265
266 }
267
268 @Test(expectedExceptions = InvalidHeaderException.class)
269 public void parseInvalidServerHeader() {
270 ServerHeader header = new ServerHeader();
271 header.setString("foo/1 baz/123 bar/2");
272 }
273
274 @Test
275 public void parseServiceType() {
276 ServiceType serviceType = ServiceType.valueOf("urn:foo-bar:service:MyServiceType:123");
277 assertEquals(serviceType.getNamespace(), "foo-bar");
278 assertEquals(serviceType.getType(), "MyServiceType");
279 assertEquals(serviceType.getVersion(), 123);
280 }
281
282 @Test
283 public void parseUDAServiceType() {
284 UDAServiceType serviceType = (UDAServiceType)ServiceType.valueOf("urn:schemas-upnp-org:service:MyServiceType:123");
285 assertEquals(serviceType.getType(), "MyServiceType");
286 assertEquals(serviceType.getVersion(), 123);
287 }
288
289 @Test
290 public void parseInvalidServiceTypeHeader() {
291 ServiceTypeHeader header = new ServiceTypeHeader();
292 header.setString("urn:foo-bar:service:!@#:123");
293 assertEquals(header.getValue().getNamespace(), "foo-bar");
294 assertEquals(header.getValue().getType(), "---");
295 assertEquals(header.getValue().getVersion(), 123);
296 assertEquals(header.getString(), "urn:foo-bar:service:---:123");
297 }
298
299 @Test
300 public void parseServiceTypeHeaderURI() {
301 ServiceTypeHeader header = new ServiceTypeHeader(URI.create("urn:schemas-upnp-org:service:MyServiceType:123"));
302 assertEquals(header.getValue().getNamespace(), "schemas-upnp-org");
303 assertEquals(header.getValue().getType(), "MyServiceType");
304 assertEquals(header.getValue().getVersion(), 123);
305 assertEquals(header.getString(), "urn:schemas-upnp-org:service:MyServiceType:123");
306 }
307
308 @Test
309 public void parseServiceUSNHeader() {
310 ServiceUSNHeader header = new ServiceUSNHeader();
311 header.setString("uuid:MY-SERVICE-123::urn:schemas-upnp-org:service:MY-SERVICE-TYPE:1");
312 assertEquals(header.getValue().getUdn().getIdentifierString(), "MY-SERVICE-123");
313 assert header.getValue().getServiceType() instanceof UDAServiceType;
314 }
315
316 @Test
317 public void parseServiceUSNHeaderStatic() {
318 ServiceUSNHeader header = new ServiceUSNHeader(
319 NamedServiceType.valueOf("uuid:MY-SERVICE-123::urn:schemas-upnp-org:service:MY-SERVICE-TYPE:1")
320 );
321 assertEquals(header.getValue().getUdn().getIdentifierString(), "MY-SERVICE-123");
322 assert header.getValue().getServiceType() instanceof UDAServiceType;
323 }
324
325 @Test(expectedExceptions = InvalidHeaderException.class)
326 public void parseInvalidServiceUSNHeader() {
327 ServiceUSNHeader header = new ServiceUSNHeader();
328 header.setString("uuid:MY-SERVICE-123--urn:schemas-upnp-org:service:MY-SERVICE-TYPE:1");
329 }
330
331 @Test(expectedExceptions = InvalidHeaderException.class)
332 public void parseInvalidSTAllHeader() {
333 STAllHeader header = new STAllHeader();
334 header.setString("ssdp:foo");
335 }
336
337 @Test(expectedExceptions = InvalidHeaderException.class)
338 public void parseInvalidUDADeviceTypeHeader() {
339 UDADeviceTypeHeader header = new UDADeviceTypeHeader();
340 header.setString("urn:foo-bar:device:!@#:123");
341 }
342
343 @Test
344 public void parseUDADeviceTypeHeaderURI() {
345 UDADeviceTypeHeader header = new UDADeviceTypeHeader(URI.create("urn:schemas-upnp-org:device:MyDeviceType:123"));
346 assertEquals(header.getValue().getNamespace(), "schemas-upnp-org");
347 assertEquals(header.getValue().getType(), "MyDeviceType");
348 assertEquals(header.getValue().getVersion(), 123);
349 assertEquals(header.getString(), "urn:schemas-upnp-org:device:MyDeviceType:123");
350 }
351
352 @Test(expectedExceptions = InvalidHeaderException.class)
353 public void parseInvalidUDAServiceTypeHeader() {
354 UDAServiceTypeHeader header = new UDAServiceTypeHeader();
355 header.setString("urn:foo-bar:service:!@#:123");
356 }
357
358 @Test
359 public void parseUDAServiceTypeHeaderURI() {
360 UDAServiceTypeHeader header = new UDAServiceTypeHeader(URI.create("urn:schemas-upnp-org:service:MyServiceType:123"));
361 assertEquals(header.getValue().getNamespace(), "schemas-upnp-org");
362 assertEquals(header.getValue().getType(), "MyServiceType");
363 assertEquals(header.getValue().getVersion(), 123);
364 assertEquals(header.getString(), "urn:schemas-upnp-org:service:MyServiceType:123");
365
366 }
367
368 @Test
369 public void parseUDNHeader() {
370 UDNHeader header = new UDNHeader();
371 header.setString("uuid:MY-UUID-1234");
372 assertEquals(header.getValue().getIdentifierString(), "MY-UUID-1234");
373 }
374
375 @Test(expectedExceptions = InvalidHeaderException.class)
376 public void parseInvalidUDNHeaderPrefix() {
377 UDNHeader header = new UDNHeader();
378 header.setString("MY-UUID-1234");
379 }
380
381 @Test(expectedExceptions = InvalidHeaderException.class)
382 public void parseInvalidUDNHeaderURN() {
383 UDNHeader header = new UDNHeader();
384 header.setString("uuid:MY-UUID-1234::urn:foo-bar:baz");
385 }
386
387 @Test(expectedExceptions = InvalidHeaderException.class)
388 public void parseInvalidUSNRootDeviceHeader() {
389 USNRootDeviceHeader header = new USNRootDeviceHeader();
390 header.setString("uuid:MY-UUID-1234::upnp:rootfoo");
391 }
392
393 @Test
394 public void parseSoapActionHeader() {
395 SoapActionHeader header = new SoapActionHeader(URI.create("urn:schemas-upnp-org:service:MyServiceType:1#MyAction"));
396 assertEquals(header.getValue().getServiceType().getNamespace(), "schemas-upnp-org");
397 assertEquals(header.getValue().getServiceType().getType(), "MyServiceType");
398 assertEquals(header.getValue().getServiceType().getVersion(), 1);
399 assertEquals(header.getValue().getActionName(), "MyAction");
400 assertEquals(header.getString(), "\"urn:schemas-upnp-org:service:MyServiceType:1#MyAction\"");
401
402 }
403
404 @Test
405 public void parseSoapActionHeaderString() {
406 SoapActionHeader header = new SoapActionHeader();
407 header.setString("\"urn:schemas-upnp-org:service:MyServiceType:1#MyAction\"");
408 assertEquals(header.getValue().getServiceType().getNamespace(), "schemas-upnp-org");
409 assertEquals(header.getValue().getServiceType().getType(), "MyServiceType");
410 assertEquals(header.getValue().getServiceType().getVersion(), 1);
411 assertEquals(header.getValue().getActionName(), "MyAction");
412 assertEquals(header.getString(), "\"urn:schemas-upnp-org:service:MyServiceType:1#MyAction\"");
413 }
414
415 @Test
416 public void parseSoapActionHeaderQueryString() {
417 SoapActionHeader header = new SoapActionHeader();
418 header.setString("\"urn:schemas-upnp-org:control-1-0#QueryStateVariable\"");
419 assertEquals(header.getValue().getServiceType(), null);
420 assertEquals(header.getValue().getType(), "control-1-0");
421 assertEquals(header.getValue().getVersion(), null);
422 assertEquals(header.getValue().getActionName(), "QueryStateVariable");
423 assertEquals(header.getString(), "\"urn:schemas-upnp-org:control-1-0#QueryStateVariable\"");
424 }
425
426 @Test
427 public void parseEventSequenceHeaderString() {
428 EventSequenceHeader header = new EventSequenceHeader();
429 header.setString("0");
430 assertEquals(header.getValue().getValue(), Long.valueOf(0));
431 header.setString("001");
432 assertEquals(header.getValue().getValue(), Long.valueOf(1));
433 header.setString("123");
434 assertEquals(header.getValue().getValue(), Long.valueOf(123));
435
436 }
437
438 @Test
439 public void parseTimeoutHeaderString() {
440 TimeoutHeader header = new TimeoutHeader();
441 header.setString("Second-123");
442 assertEquals(header.getValue(), Integer.valueOf(123));
443 header.setString("Second-infinite");
444 assertEquals(header.getValue(), TimeoutHeader.INFINITE_VALUE);
445 }
446
447 @Test
448 public void parseCallbackHeaderString() {
449 CallbackHeader header = new CallbackHeader();
450 header.setString("<http://127.0.0.1/foo>");
451 assertEquals(header.getValue().size(), 1);
452 assertEquals(header.getValue().get(0).toString(), "http://127.0.0.1/foo");
453
454 header.setString("<http://127.0.0.1/foo><http://127.0.0.1/bar>");
455 assertEquals(header.getValue().size(), 2);
456 assertEquals(header.getValue().get(0).toString(), "http://127.0.0.1/foo");
457 assertEquals(header.getValue().get(1).toString(), "http://127.0.0.1/bar");
458
459 header.setString("<http://127.0.0.1/foo> <http://127.0.0.1/bar>");
460 assertEquals(header.getValue().size(), 2);
461 assertEquals(header.getValue().get(0).toString(), "http://127.0.0.1/foo");
462 assertEquals(header.getValue().get(1).toString(), "http://127.0.0.1/bar");
463 }
464
465 @Test
466 public void parseInvalidCallbackHeaderString() {
467 CallbackHeader header = new CallbackHeader();
468 header.setString("<http://127.0.0.1/foo> <ftp://127.0.0.1/bar>");
469 assertEquals(header.getValue().size(), 1);
470 assertEquals(header.getValue().get(0).toString(), "http://127.0.0.1/foo");
471
472
473
474
475
476
477
478 }
479
480 @Test
481 public void parseSubscriptionIdHeaderString() {
482 SubscriptionIdHeader header = new SubscriptionIdHeader();
483 header.setString("uuid:123-123-123-123");
484 assertEquals(header.getValue(), "uuid:123-123-123-123");
485 }
486
487 @Test(expectedExceptions = InvalidHeaderException.class)
488 public void parseInvalidSubscriptionIdHeaderString() {
489 SubscriptionIdHeader header = new SubscriptionIdHeader();
490 header.setString("abc:123-123-123-123");
491 }
492
493 @Test
494 public void parseInterfaceMacAddress() {
495 InterfaceMacHeader header = new InterfaceMacHeader("00:17:ab:e9:65:a0");
496 assertEquals(header.getValue().length, 6);
497 assertEquals(header.getString().toUpperCase(Locale.ROOT), "00:17:AB:E9:65:A0");
498 }
499
500 @Test
501 public void parseRange() {
502 RangeHeader header = new RangeHeader("bytes=1539686400-1540210688");
503 assertEquals(header.getValue().getFirstByte(),new Long(1539686400));
504 assertEquals(header.getValue().getLastByte(), new Long(1540210688));
505 assertEquals(header.getString(), "bytes=1539686400-1540210688");
506 }
507
508 @Test
509 public void parseContentRange() {
510 ContentRangeHeader header = new ContentRangeHeader("bytes 1539686400-1540210688/21323123");
511 assertEquals(header.getValue().getFirstByte(),new Long(1539686400));
512 assertEquals(header.getValue().getLastByte(), new Long(1540210688));
513 assertEquals(header.getValue().getByteLength(), new Long(21323123));
514 assertEquals(header.getString(), "bytes 1539686400-1540210688/21323123");
515 }
516
517 @Test
518 public void parsePragma() {
519 PragmaHeader header = new PragmaHeader("no-cache");
520 assertEquals(header.getValue().getValue(),"no-cache");
521 assertEquals(header.getString(), "no-cache");
522
523 header.setString("token=value");
524 assertEquals(header.getValue().getToken(),"token");
525 assertEquals(header.getValue().getValue(),"value");
526 assertEquals(header.getString(), "token=value");
527
528 header.setString("token=\"value\"");
529 assertEquals(header.getValue().getToken(),"token");
530 assertEquals(header.getValue().getValue(),"value");
531 assertEquals(header.getString(), "token=\"value\"");
532 }
533 }