1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package org.fourthline.cling.support.test.model.dlna;
17
18 import org.fourthline.cling.support.model.dlna.message.header.BufferInfoHeader;
19 import org.fourthline.cling.support.model.dlna.message.header.SupportedHeader;
20 import org.fourthline.cling.support.model.dlna.message.header.EventTypeHeader;
21 import org.fourthline.cling.support.model.dlna.message.header.MaxPrateHeader;
22 import org.fourthline.cling.support.model.dlna.message.header.WCTHeader;
23 import org.fourthline.cling.support.model.dlna.message.header.ScmsFlagHeader;
24 import org.fourthline.cling.support.model.dlna.message.header.RealTimeInfoHeader;
25 import org.fourthline.cling.support.model.dlna.message.header.PeerManagerHeader;
26 import org.fourthline.cling.support.model.dlna.message.header.TransferModeHeader;
27 import java.util.EnumSet;
28 import org.fourthline.cling.support.avtransport.lastchange.AVTransportVariable.TransportPlaySpeed;
29 import org.fourthline.cling.support.model.dlna.DLNAAttribute.Type;
30 import org.fourthline.cling.support.model.dlna.DLNAConversionIndicator;
31 import org.fourthline.cling.support.model.dlna.DLNAFlags;
32 import org.fourthline.cling.support.model.dlna.DLNAProfiles;
33 import org.fourthline.cling.support.model.dlna.message.header.ContentFeaturesHeader;
34 import org.fourthline.cling.support.model.dlna.message.header.GetContentFeaturesHeader;
35 import org.fourthline.cling.support.model.dlna.message.header.GetAvailableSeekRangeHeader;
36 import org.fourthline.cling.support.model.dlna.types.AvailableSeekRangeType;
37 import org.fourthline.cling.support.model.dlna.message.header.AvailableSeekRangeHeader;
38 import org.fourthline.cling.support.model.dlna.message.header.PlaySpeedHeader;
39 import org.fourthline.cling.model.message.header.InvalidHeaderException;
40 import org.fourthline.cling.support.model.dlna.message.header.TimeSeekRangeHeader;
41 import org.fourthline.cling.support.model.dlna.types.CodedDataBuffer.TransferMechanism;
42 import org.testng.annotations.Test;
43
44 import static org.testng.Assert.assertEquals;
45
46
47 public class DLNAHeaderParsingTest {
48
49 @Test
50 public void parseTimeSeekRangeHeader() {
51 TimeSeekRangeHeader header = new TimeSeekRangeHeader();
52 header.setString("npt=335.11-336.08");
53 assertEquals(header.getValue().getNormalPlayTimeRange().getTimeStart().getMilliseconds(),335110);
54 assertEquals(header.getValue().getNormalPlayTimeRange().getTimeEnd().getMilliseconds(),336080);
55 assertEquals(header.getString(), "npt=335.110-336.080/*");
56
57 header.setString("npt=00:05:35.3-00:05:37.5");
58 assertEquals(header.getValue().getNormalPlayTimeRange().getTimeStart().getMilliseconds(),335300);
59 assertEquals(header.getValue().getNormalPlayTimeRange().getTimeEnd().getMilliseconds(),337500);
60 assertEquals(header.getString(), "npt=335.300-337.500/*");
61
62 header.setString("npt=335.1-336.1/40445.4");
63 assertEquals(header.getValue().getNormalPlayTimeRange().getTimeStart().getMilliseconds(),335100);
64 assertEquals(header.getValue().getNormalPlayTimeRange().getTimeEnd().getMilliseconds(),336100);
65 assertEquals(header.getValue().getNormalPlayTimeRange().getTimeDuration().getMilliseconds(),40445400);
66 assertEquals(header.getString(), "npt=335.100-336.100/40445.400");
67
68 header.setString("npt=335.1-336.1/*");
69 assertEquals(header.getValue().getNormalPlayTimeRange().getTimeStart().getMilliseconds(),335100);
70 assertEquals(header.getValue().getNormalPlayTimeRange().getTimeEnd().getMilliseconds(),336100);
71 assertEquals(header.getValue().getNormalPlayTimeRange().getTimeDuration(), null);
72 assertEquals(header.getString(), "npt=335.100-336.100/*");
73
74
75 header.setString("npt=335.1-336.1/40445.4 bytes=1539686400-1540210688/304857907200");
76 assertEquals(header.getValue().getNormalPlayTimeRange().getTimeStart().getMilliseconds(),335100);
77 assertEquals(header.getValue().getNormalPlayTimeRange().getTimeEnd().getMilliseconds(),336100);
78 assertEquals(header.getValue().getNormalPlayTimeRange().getTimeDuration().getMilliseconds(), 40445400);
79 assertEquals(header.getValue().getBytesRange().getFirstByte(),new Long(1539686400));
80 assertEquals(header.getValue().getBytesRange().getLastByte(), new Long(1540210688));
81 assertEquals(header.getValue().getBytesRange().getByteLength(), new Long(304857907200L));
82 assertEquals(header.getString(), "npt=335.100-336.100/40445.400 bytes=1539686400-1540210688/304857907200");
83
84 header.setString("npt=335.1-336.1/40445.4 bytes=1539686400-1540210688/*");
85 assertEquals(header.getValue().getNormalPlayTimeRange().getTimeStart().getMilliseconds(),335100);
86 assertEquals(header.getValue().getNormalPlayTimeRange().getTimeEnd().getMilliseconds(),336100);
87 assertEquals(header.getValue().getNormalPlayTimeRange().getTimeDuration().getMilliseconds(), 40445400);
88 assertEquals(header.getValue().getBytesRange().getFirstByte(),new Long(1539686400));
89 assertEquals(header.getValue().getBytesRange().getLastByte(), new Long(1540210688));
90 assertEquals(header.getValue().getBytesRange().getByteLength(), null);
91 assertEquals(header.getString(), "npt=335.100-336.100/40445.400 bytes=1539686400-1540210688/*");
92 }
93
94
95 @Test(expectedExceptions = InvalidHeaderException.class)
96 public void parseInvalidTimeSeekRangeHeader() {
97 TimeSeekRangeHeader header = new TimeSeekRangeHeader();
98 header.setString("npt=335.1111-336.08");
99 }
100
101 @Test
102 public void parsePlaySpeedHeader() {
103 PlaySpeedHeader header = new PlaySpeedHeader();
104
105 header.setString("10");
106 assertEquals(header.getValue().getValue(),"10");
107 assertEquals(header.getString(), "10");
108
109 header.setString("-10");
110 assertEquals(header.getValue().getValue(),"-10");
111 assertEquals(header.getString(), "-10");
112
113 header.setString("-1/10");
114 assertEquals(header.getValue().getValue(),"-1/10");
115 assertEquals(header.getString(), "-1/10");
116 }
117
118 @Test(expectedExceptions = InvalidHeaderException.class)
119 public void parseInvalidPlaySpeedHeader() {
120 PlaySpeedHeader header = new PlaySpeedHeader();
121 header.setString("2.1");
122 }
123
124 @Test
125 public void parseAvailableSeekRangeHeader() {
126 AvailableSeekRangeHeader header = new AvailableSeekRangeHeader();
127
128 header.setString("1 npt=335.1-336.1 bytes=1539686400-1540210688");
129 assertEquals(header.getValue().getModeFlag(),AvailableSeekRangeType.Mode.MODE_1);
130 assertEquals(header.getValue().getNormalPlayTimeRange().getTimeStart().getMilliseconds(),335100);
131 assertEquals(header.getValue().getNormalPlayTimeRange().getTimeEnd().getMilliseconds(),336100);
132 assertEquals(header.getValue().getBytesRange().getFirstByte(),new Long(1539686400));
133 assertEquals(header.getValue().getBytesRange().getLastByte(), new Long(1540210688));
134 assertEquals(header.getString(), "1 npt=335.100-336.100 bytes=1539686400-1540210688");
135
136 header.setString("0 npt=335.1-336.1");
137 assertEquals(header.getValue().getModeFlag(),AvailableSeekRangeType.Mode.MODE_0);
138 assertEquals(header.getValue().getNormalPlayTimeRange().getTimeStart().getMilliseconds(),335100);
139 assertEquals(header.getValue().getNormalPlayTimeRange().getTimeEnd().getMilliseconds(),336100);
140 assertEquals(header.getString(), "0 npt=335.100-336.100");
141
142 header.setString("1 bytes=1539686400-1540210688");
143 assertEquals(header.getValue().getModeFlag(),AvailableSeekRangeType.Mode.MODE_1);
144 assertEquals(header.getValue().getBytesRange().getFirstByte(),new Long(1539686400));
145 assertEquals(header.getValue().getBytesRange().getLastByte(), new Long(1540210688));
146 assertEquals(header.getString(), "1 bytes=1539686400-1540210688");
147 }
148
149 @Test(expectedExceptions = InvalidHeaderException.class)
150 public void parseInvalidAvailableSeekRangeHeader() {
151 AvailableSeekRangeHeader header = new AvailableSeekRangeHeader();
152 header.setString("1 npt=335.1-");
153 }
154
155 @Test
156 public void parseGetAvailableSeekRangeHeader() {
157 GetAvailableSeekRangeHeader header = new GetAvailableSeekRangeHeader();
158 header.setString("1");
159 assertEquals(header.getValue().intValue(),1);
160 assertEquals(header.getString(), "1");
161 }
162
163 @Test(expectedExceptions = InvalidHeaderException.class)
164 public void parseInvalidGetAvailableSeekRangeHeader() {
165 GetAvailableSeekRangeHeader header = new GetAvailableSeekRangeHeader();
166 header.setString("2");
167 }
168
169 @Test
170 public void parseContentFeaturesHeader() {
171 ContentFeaturesHeader header = new ContentFeaturesHeader();
172 header.setString("DLNA.ORG_PN=JPEG_TN;DLNA.ORG_PS=-1,1/2,4;DLNA.ORG_CI=1;DLNA.ORG_FLAGS=01700000000000000000000000000000");
173
174 EnumSet<DLNAFlags> dflags = (EnumSet<DLNAFlags>) header.getValue().get(Type.DLNA_ORG_FLAGS).getValue();
175 TransportPlaySpeed[] speeds = (TransportPlaySpeed[]) header.getValue().get(Type.DLNA_ORG_PS).getValue();
176
177 assertEquals(header.getValue().get(Type.DLNA_ORG_PN).getValue(), DLNAProfiles.JPEG_TN);
178 assertEquals(header.getValue().get(Type.DLNA_ORG_CI).getValue(), DLNAConversionIndicator.TRANSCODED);
179
180 assertEquals(speeds.length, 3);
181 assertEquals(speeds[0].getValue(),"-1");
182 assertEquals(speeds[1].getValue(),"1/2");
183 assertEquals(speeds[2].getValue(),"4");
184
185 assertEquals(dflags.size(), 4);
186 assertEquals(dflags.contains(DLNAFlags.DLNA_V15), true);
187 assertEquals(dflags.contains(DLNAFlags.CONNECTION_STALL), true);
188 assertEquals(dflags.contains(DLNAFlags.RTSP_PAUSE), false);
189
190 assertEquals(header.getString(), "DLNA.ORG_PN=JPEG_TN;DLNA.ORG_PS=-1,1/2,4;DLNA.ORG_CI=1;DLNA.ORG_FLAGS=01700000000000000000000000000000");
191 }
192
193 @Test
194 public void parseGetContentFeaturesHeader() {
195 GetContentFeaturesHeader header = new GetContentFeaturesHeader();
196 header.setString("1");
197 assertEquals(header.getValue().intValue(),1);
198 assertEquals(header.getString(), "1");
199 }
200
201 @Test(expectedExceptions = InvalidHeaderException.class)
202 public void parseInvalidGetContentFeaturesHeader() {
203 GetContentFeaturesHeader header = new GetContentFeaturesHeader();
204 header.setString("2");
205 }
206
207 @Test
208 public void parseTransferModeHeader() {
209 TransferModeHeader header = new TransferModeHeader();
210 header.setString("Streaming");
211 assertEquals(header.getValue(),TransferModeHeader.Type.Streaming);
212 assertEquals(header.getString(), "Streaming");
213 }
214
215 @Test(expectedExceptions = InvalidHeaderException.class)
216 public void parseInvalidTransferModeHeader() {
217 TransferModeHeader header = new TransferModeHeader();
218 header.setString("TEST");
219 }
220
221 @Test
222 public void parsePeerManagerHeader() {
223 PeerManagerHeader header = new PeerManagerHeader();
224 header.setString("uuid:12345678123456781234567812345678/urn:schemas-upnp-org:serviceId:ConnectionManager");
225 assertEquals(header.getValue().getUdn().getIdentifierString(),"12345678123456781234567812345678");
226 assertEquals(header.getValue().getServiceId().getId(),"ConnectionManager");
227 assertEquals(header.getString(), "uuid:12345678123456781234567812345678/urn:schemas-upnp-org:serviceId:ConnectionManager");
228 }
229
230 @Test
231 public void parseRealTimeInfoHeader() {
232 RealTimeInfoHeader header = new RealTimeInfoHeader();
233
234 header.setString("DLNA.ORG_TLAG=1.75");
235 assertEquals(header.getValue().getMilliseconds(),1750);
236 assertEquals(header.getString(), "DLNA.ORG_TLAG=1.750");
237
238 header.setString("DLNA.ORG_TLAG=*");
239 assertEquals(header.getValue(),null);
240 assertEquals(header.getString(), "DLNA.ORG_TLAG=*");
241
242 }
243
244 @Test(expectedExceptions = InvalidHeaderException.class)
245 public void parseInvalidRealTimeInfoHeader() {
246 RealTimeInfoHeader header = new RealTimeInfoHeader();
247 header.setString("DLNA.ORG_TLAG=1.7521");
248 }
249
250 @Test
251 public void parseScmsFlagHeader() {
252 ScmsFlagHeader header = new ScmsFlagHeader();
253
254 header.setString("00");
255 assertEquals(header.getValue().isCopyright(),true);
256 assertEquals(header.getValue().isOriginal(),true);
257 assertEquals(header.getString(), "00");
258
259 header.setString("01");
260 assertEquals(header.getValue().isCopyright(),true);
261 assertEquals(header.getValue().isOriginal(),false);
262 assertEquals(header.getString(), "01");
263
264 header.setString("10");
265 assertEquals(header.getValue().isCopyright(),false);
266 assertEquals(header.getValue().isOriginal(),true);
267 assertEquals(header.getString(), "10");
268
269 header.setString("11");
270 assertEquals(header.getValue().isCopyright(),false);
271 assertEquals(header.getValue().isOriginal(),false);
272 assertEquals(header.getString(), "11");
273 }
274
275 @Test(expectedExceptions = InvalidHeaderException.class)
276 public void parseInvalidScmsFlagHeader() {
277 ScmsFlagHeader header = new ScmsFlagHeader();
278 header.setString("2");
279 }
280
281 @Test
282 public void parseWCTHeader() {
283 WCTHeader header = new WCTHeader();
284
285 header.setString("0");
286 assertEquals(header.getValue().booleanValue(),false);
287 assertEquals(header.getString(), "0");
288
289 header.setString("1");
290 assertEquals(header.getValue().booleanValue(),true);
291 assertEquals(header.getString(), "1");
292
293 }
294
295 @Test(expectedExceptions = InvalidHeaderException.class)
296 public void parseInvalidWCTHeader() {
297 WCTHeader header = new WCTHeader();
298 header.setString("2");
299 }
300
301 @Test
302 public void parseMaxPrateHeader() {
303 MaxPrateHeader header = new MaxPrateHeader();
304
305 header.setString("120");
306 assertEquals(header.getValue().longValue(),120);
307 assertEquals(header.getString(), "120");
308
309 }
310
311 @Test(expectedExceptions = InvalidHeaderException.class)
312 public void parseInvalidMaxPrateHeader() {
313 MaxPrateHeader header = new MaxPrateHeader();
314 header.setString("A");
315 }
316
317 @Test
318 public void parseEventTypeHeader() {
319 EventTypeHeader header = new EventTypeHeader();
320
321 header.setString("2000");
322 assertEquals(header.getValue(),"2000");
323 assertEquals(header.getString(), "2000");
324
325 }
326
327 @Test(expectedExceptions = InvalidHeaderException.class)
328 public void parseInvalidEventTypeHeader() {
329 EventTypeHeader header = new EventTypeHeader();
330 header.setString("001");
331 }
332
333 @Test
334 public void parseSupportedHeader() {
335 SupportedHeader header = new SupportedHeader();
336
337 header.setString("dlna.announce, rtsp.basic");
338 assertEquals(header.getValue().length,2);
339 assertEquals(header.getValue()[0],"dlna.announce");
340 assertEquals(header.getValue()[1],"rtsp.basic");
341 assertEquals(header.getString(), "dlna.announce,rtsp.basic;");
342
343 header.setString("dlna.announce , rtsp.basic;");
344 assertEquals(header.getValue().length,2);
345 assertEquals(header.getValue()[0],"dlna.announce");
346 assertEquals(header.getValue()[1],"rtsp.basic");
347 assertEquals(header.getString(), "dlna.announce,rtsp.basic;");
348 }
349
350 @Test
351 public void parseBufferInfoHeader() {
352 BufferInfoHeader header = new BufferInfoHeader();
353
354 header.setString("dejitter=65536;CDB=98302;BTM=0;TD=1000;BFR=1");
355 assertEquals(header.getValue().getDejitterSize().longValue(), 65536L);
356 assertEquals(header.getValue().getCdb().getSize().longValue(), 98302L);
357 assertEquals(header.getValue().getCdb().getTranfer(), TransferMechanism.IMMEDIATELY);
358 assertEquals(header.getValue().getTargetDuration().longValue(), 1000L);
359 assertEquals(header.getValue().isFullnessReports().booleanValue(), true);
360 assertEquals(header.getString(), "dejitter=65536;CDB=98302;BTM=0;TD=1000;BFR=1");
361
362 header.setString("dejitter=65536;CDB=98302;BTM=0;TD=1000");
363 assertEquals(header.getValue().getDejitterSize().longValue(), 65536L);
364 assertEquals(header.getValue().getCdb().getSize().longValue(), 98302L);
365 assertEquals(header.getValue().getCdb().getTranfer(), TransferMechanism.IMMEDIATELY);
366 assertEquals(header.getValue().getTargetDuration().longValue(), 1000L);
367 assertEquals(header.getValue().isFullnessReports(), null);
368 assertEquals(header.getString(), "dejitter=65536;CDB=98302;BTM=0;TD=1000");
369
370 header.setString("dejitter=65536;CDB=98302;BTM=0");
371 assertEquals(header.getValue().getDejitterSize().longValue(), 65536L);
372 assertEquals(header.getValue().getCdb().getSize().longValue(), 98302L);
373 assertEquals(header.getValue().getCdb().getTranfer(), TransferMechanism.IMMEDIATELY);
374 assertEquals(header.getValue().getTargetDuration(), null);
375 assertEquals(header.getValue().isFullnessReports(), null);
376 assertEquals(header.getString(), "dejitter=65536;CDB=98302;BTM=0");
377
378 header.setString("dejitter=65536");
379 assertEquals(header.getValue().getDejitterSize().longValue(), 65536L);
380 assertEquals(header.getValue().getCdb(), null);
381 assertEquals(header.getValue().getTargetDuration(), null);
382 assertEquals(header.getValue().isFullnessReports(), null);
383 assertEquals(header.getString(), "dejitter=65536");
384 }
385
386 @Test(expectedExceptions = InvalidHeaderException.class)
387 public void parseInvalidBufferInfoHeader() {
388 BufferInfoHeader header = new BufferInfoHeader();
389 header.setString("dejitter=65536;CDB=98302");
390 }
391 }