2 MLT Miracle Test Procedure
4 Copyright (C) 2003 Ushodaya Enterprised Limited
5 Author: Dan Dennedy <dan@dennedy.org>
6 Last Revision: 2003-01-17
8 NOTE: THIS DOCUMENT REQUIRES REVISION TO NEW, EXPECTED BEHAVIOR FROM MIRACLE.
10 Tests are divided into 9 sections:
14 3. Server Configuration
16 5. Multi-unit Playback
20 9. Server Side Queuing
22 Each section contains many tests which I've divided into a minimum of two lines:
24 n.m action to carry out
27 Further lines may appear to show the actual results when they deviate from what
28 I expected or if there are special cases to consider.
30 Sequential tests are indicated as:
32 n.m.o action to carry out
35 It is suggested that you run top during the testing and note cpu hikes
36 or any excessive memory usage related to an operation.
42 The tests following are by no means exhaustive, but they should cover typical
43 use cases - creativity is encouraged with more cases being added where necessary.
44 This document should also be maintained to dictate actual state, especially with
45 regard to a final release. Unit test cases are encouraged, but are excluded from
48 It is important to carry out the full test cycle when preparing a final release.
49 In this situation, please resist the temptation to bug fix a given test case and
50 resume the tests from that point onward - it is better to repeat from the
51 beginning (but you can of course employ common sense in this situation).
53 Before starting the final tests, please delete/backup your current
54 /etc/dv139d.conf file. This (more or less) ensures that tests are carried out
61 Run these from the top level project directory
63 1.1.0 Start miracle in interactive mode: src/miracle/miracle -test
64 --> miracle starts interactively and reports:
65 (5) Starting server on 5250.
66 (5) miracle version 0.0.1 listening on port 5250
68 1.1.1 Stop the server by pressing Ctrl-C
69 --> miracle returns the following and returns control to the console:
70 (5) miracle version 0.0.1 server terminated.
72 1.2.2 Start miracle as a daemon: src/miracle/miracle
73 --> control returns to the console
75 1.2.3 Verify miracle is running: ps ax
76 --> several miracle processes are running
78 1.2.4 Verify successful miracle startup using syslog: sudo tail /var/log/syslog
79 --> miracle: miracle version 0.0.1 listening on port 5250
81 1.2.5 Verify connectivity on port 5250: telnet localhost 5250
84 1.2.6 Test clean disconnect: BYE
85 --> Connection closed by foreign host.
87 1.2.7 Stop the daemon: killall miracle
90 1.2.8 Verify a clean server shutdown: sudo tail /var/log/syslog
91 --> miracle: shutdown complete.
93 1.3.0 Start miracle on a different port: src/miracle/miracle -port 5260
95 1.3.1 Verify successful miracle startup using syslog: sudo tail /var/log/syslog
96 --> miracle: miracle version 0.0.1 listening on port 5260
98 1.3.2 Verify connectivity on port 5260: telnet localhost 5260
101 1.3.3 Test clean disconnect: BYE
102 --> Connection closed by foreign host.
104 1.3.4 Stop the daemon: killall miracle
111 Start the miracle server and connect to it with telnet or a protocol-
112 level client (albino).
114 2.1 List the AV/C devices on the bus: NLS
116 --> one or more lines listing devices with GUID in second column
118 2.2 Add a device as a miracle unit: UADD {sdl, bluefish}:{NTSC, PAL}
122 2.3 List the units: ULS
124 --> U0 ?? {sdl, bluefish} 1
125 --> It is important that the last column is '1' to indicate it is online.
127 2.4 Add an offline unit by using some bogus GUID value: UADD foo
131 2.3 List the units: ULS
134 --> U1 00 0000000f00055c1 0
135 --> It is important that the last column of the last row is '0' to
138 2.4 Attempt unit commands for a unit that does not exist: LOAD U6 foo
139 --> 403 Unit not found
141 2.5 Attempt unit commands without specifying a unit: PLAY
142 --> 402 Argument missing
144 2.6 Attempt unit commands for a unit that is offline: PLAY U1
145 --> 403 Unit not found
147 2.7.0 Load a clip into an offline unit: LOAD U1 test.dv
150 2.7.1 Verify the status of the offline unit: USTA U1
152 --> 1 offline "test.dv" 0 1000 25.00 0 ...
153 --> only the first 3 columns are relevant in this test
155 2.9 Set the property of an online unit: USET U0 points=use
158 2.8 Set the property of an offline unit: USET U1 points=ignore
162 3. Server Configuration
163 -----------------------
165 Start miracle if not already started from a previous test.
167 3.1 Get the hard-coded default root property value: GET root
171 3.2 List the files and subdirectories at the root: CLS /
176 3.3 Change the server root to a place where clips are stored: e.g.,
180 3.4 Get the new value of the root property value: GET root
183 --> Notice that if you did not use a trailing slash in step 2.3, one is
184 added for you and appears in this step. This is normal and correct.
186 3.5 List the files and subdirectories at the root: CLS /
188 --> zero or more lines listing subdirectories followed by files.
190 3.6 Try to set a property that does not exist: SET foo=bar
191 --> 405 Argument value out of range
193 3.7 Try to set no property or value: SET
194 --> 402 Argument missing
196 3.8 Attempt a bogus command: FOO
197 --> 400 Unknown command
199 XXX 3.9 Attempt the incorrect case for a command: get root
200 XXX --> 400 Unknown command
202 3.10 Attempt case insensitivity of property key: GET Root
210 Start miracle or restart if already started.
212 Set the server root property if desired.
214 4.1.0 Load a clip into the unit: LOAD U0 test.dv
217 4.1.1 Check the unit status: USTA U0
219 --> 0 stopped "test.dv" 0 1000 25.00 0 ...
220 --> Only the first 3 columns are relevant in this test.
221 --> The remaining columns are only relevant to the tester.
223 4.2.0 Play the clip: PLAY U0
225 --> Verify audio and video output
227 4.2.1 Check the unit status: USTA U0
229 --> 0 playing "test.dv" 1739 1000 25.00 0 ...
230 --> Only the first 3 columns are relevant in this test.
231 --> The remaining columns are only relevant to the tester.
233 4.3.0 Pause playback: PAUSE U0
235 --> Verify video continues, but audio is muted.
237 4.3.1 Check the unit status: USTA U0
239 --> 0 paused "test.dv" 1739 0 25.00 0 ...
240 --> The fifth column --------^ should be 0; it indicates speed.
242 4.3.2 Stop playback: STOP U0
244 --> The analog video output stops
246 4.3.3 Pause playback: PAUSE U0
248 --> Analog video starts again, but it is held on the same frame
251 4.3.4 Stop playback: STOP U0
253 --> The analog video signal ceases.
255 4.3.5 Rewind the unit: REW U0
258 4.3.6 Play the unit: PLAY U0
260 --> Analog audio and video are produced from the beginning of the file.
262 4.4 Stop the server during playback and ensure clean shutdown.
265 5. Multi-unit Playback
266 -----------------------
268 Start miracle or restart if already started.
269 Add *2* online units.
270 Set the server root property if desired.
272 5.1.0 Load a clip into one unit: LOAD U0 test.dv
275 5.1.1 Load a clip into the other unit: LOAD U1 test.dv
278 5.1.2 Start playing one unit: PLAY U0
280 --> Verify audio and video output
282 5.1.3 Start playing the other unit: PLAY U1
284 --> Verify audio and video output of both units
286 5.2 Verify independence of units by pausing one of them: PAUSE U0
288 --> Verify video continues, but audio is muted on the first unit only.
290 5.3 Stop the server during multi-unit playback and ensure clean shutdown.
296 Start miracle or restart if already started.
297 Add *2* online units.
298 Set the server root property if desired.
302 6.1.0 Load a clip: LOAD U0 test.dv
305 6.1.1 Start playback by pausing on the first frame: PAUSE U0
307 --> analog video starts, but audio is muted.
309 6.1.2 Play fast forward: FF U0
311 --> verify video is playing fast in the forward direction.
313 6.1.3 Get unit status: USTA U0
315 --> 0 playing "test.dv" 219 2000 25.00 0 ...
316 --> The important column is --^, indicates speed
318 6.1.4 Play fast reverse: REW U0
320 --> verify analog video output is fast in the reverse direction.
322 6.1.5 Get unit status: USTA U0
324 --> 0 playing "test.dv" 4621 -2000 25.00 0 ...
325 --> The important column is ---^, negative mean reverse
327 6.1.6 Play slow forward: PLAY U0 500
329 --> Verify the analog video output is slow in the forward direction.
331 6.1.7 Play reverse normal speed: PLAY U0 -1000
333 --> Verify the analog video output is at a normal speed in the reverse direction.
334 --> Audio output is reverse, but not the field order of video
336 Loading while playing:
338 6.2.0 Stop the unit (might be playing): STOP U0
341 6.2.1 Rewing the unit: REW U0
344 6.2.2 Start playing: PLAY U0
346 --> verify analog audio and video output
348 6.2.3 Load another clip: LOAD test002.dv
350 --> playback seamlessly switches to the new clip
351 --> verify the analog appearance of the video makes a clean switch
353 6.2.4 Load another clip, this time with in and out points:
354 LOAD test.dv 100 500 (whatever works for your test footage)
356 --> verify the analog appearance of the video makes a clean switch
358 6.2.5 Get unit status: USTA U0
360 --> 0 playing "test.dv" 403 1000 25.00 100 ...
361 --> verify position -----^ is beyond --^ in point, last column is the out
362 point specified in the previous step.
366 6.3.0 Load a clip: LOAD U0 test.dv
369 6.3.1 Pause the playback unit: PAUSE U0
372 6.3.2 Set the in point: SIN U0 100
374 --> verify the frame displayed in analog video out changes
376 6.3.4 Get the unit status: USTA U0
378 --> 0 paused "test.dv" 100 0 25.00 100 ...
379 --> verify position ---^ and in ---^
381 6.3.5 Change the mode of the unit to not restrict playback to the edit
382 region: USET U0 points=ignore
385 6.3.6 Jump to a frame before the in frame: GOTO U0 50
388 6.3.7 Get the unit status: USTA U0
390 --> 0 paused "test.dv" 50 0 25.00 100 ...
391 --> position ----------^ preceeds -^ (in)
393 6.3.8 Set the unit mode to restrict playback to the edit region: USET U0 points=use
395 --> verify frame on analog video output changes
397 6.3.9 Get the unit status: USTA U0
399 --> 0 paused "test.dv" 100 0 25.00 100 ...
400 --> verify position ---^ and in ---^
402 6.3.10 Clear the in point: SIN U0 -1
405 6.3.11 Get the unit status: USTA U0
407 --> 0 paused "test.dv" 100 0 25.00 0 ...
408 --> verify the in point is reset --^
410 The above sequence should be repeated in a similar manner for the out point
411 using the SOUT command.
415 6.4.0 Load a clip into the first unit: LOAD U0 test.dv
418 6.4.1 Load a clip into the second unit: LOAD U1 test002.dv
421 6.4.2 Start playing the first unit: PLAY U0
423 --> verify audio and video analog output
425 6.4.3 Set an in point on the clip in the second unit: SIN U1 100
428 6.4.4 Play the second unit: PLAY U1
430 --> note the beginning footage
432 6.4.5 Transfer the clip from the second to the first unit: XFER U1 U0
434 --> verify a clean switch on the analog audio and video output of the first unit.
435 --> upon transfer it should play the same footage previewed in step 6.4.4
437 6.4.5 Get the first unit's status: USTA U0
439 --> 0 playing "test002.dv" 963 1000 29.97 100 2502
440 --> note the in point set from U1 ---------^
443 7. Unit Configuration
444 ---------------------
446 Start miracle or restart if already started.
448 Set the server root property if desired.
450 7.1.0 Load a short clip: LOAD U0 test.dv
453 7.1.1 Play a clip: PLAY U0
455 --> Wait until it gets to the end, and it should pause on the last frame.
457 7.1.2 Make the clip start looping: USET U0 eof=loop
459 --> verify the clip starts playing from the beginning and loops
461 7.2.0 Set the in point: SIN U0 10
463 --> playback pauses at in point (verify with USTA U0)
465 7.2.1 Set the out point: SOUT U0 200
467 --> playback pauses at in point (verify with USTA U0)
469 7.2.2 Start playing again: PLAY U0
471 --> verify playback loops between in and out points
473 7.3 Tell the unit to ignore the edit points: USET U0 points=ignore
475 --> verify playback loops over entire video file
477 7.4 Get the current value of the points property: UGET U0 points
482 9. Server Side Queuing
483 ----------------------
485 Only one unit is used for these test cases, and
486 users are encouraged to test with multiple units online. It is assumed that a
487 number of dv files are available for use in the servers ROOT directory - this
488 document assumes that they are named test001.dv and up.
490 9.1.0 Start miracle in interactive mode and add a unit (all tests will assume U0)
491 --> server started with unit 0 available
493 9.1.1 Obtain a miracle shell (via telnet or albino).
494 --> 100 VTR (if reported by the client)
496 9.1.2 Load a clip with LOAD U0 test001.dv and PAUSE U0
499 9.1.3 List the clips with LIST U0
502 --> 0 "test001.dv" 0 6999 7000 7000 25.00
503 --> The 1 on the second line denotes the number of times the list has been changed
504 via user commands (known as the 'generation' number).
505 --> The third line and beyond reports the clip index (from 0 to n), file loaded, in point,
506 out point, real size of the file and the calculated size (out - in + 1 ).
508 9.1.4 Check the unit status with USTA U0
510 --> 0 paused "test001.dv" 0 0 25.00 0 6999 7000 "test001.dv" 0 0 6999 7000 1 1 0
511 --> The last two fields indicate the generation number and current clip resp.
513 9.1.5 Append a clip with APND U0 test002.dv followed by LIST U0
516 --> 0 "test001.dv" 0 6999 7000 7000
517 --> 1 "test002.dv" 0 6999 7000 7000
518 --> Check that USTA U0 reports a generation of 2 and current clip of 0
520 9.1.6 Move clip 1 to clip 0 with MOVE U0 1 0 followed by LIST U0
523 --> 0 "test002.dv" 0 6999 7000 7000
524 --> 1 "test001.dv" 0 6999 7000 7000
525 --> Check that USTA U0 reports a generation of 3 and current clip of 1
527 9.1.7 Move clip 0 to clip 1 with MOVE U0 0 1 followed by LIST U0
530 --> 0 "test001.dv" 0 6999 7000 7000
531 --> 1 "test002.dv" 0 6999 7000 7000
532 --> Check that USTA U0 reports a generation of 4 and current clip of 0
533 --> Note that the order in which you run 9.1.6 and 9.1.7 shouldn't matter as the
534 result will be identical
536 9.1.8 Change the position to the next clip with GOTO U0 0 +1
538 --> Check that USTA U0 reports a generation of 4 and current clip of 1
540 9.1.9 Remove all but the playing clip with CLEAN U0 followed by LIST U0
543 --> 0 "test002.dv" 0 6999 7000 7000
544 --> Check that USTA U0 reports a generation of 5 and current clip of 0
546 9.1.10 Insert test001.dv back into the list using INSERT U0 test001.dv and run LIST U0
549 --> 0 "test001.dv" 0 6999 7000 7000
550 --> 1 "test002.dv" 0 6999 7000 7000
551 --> Check that USTA U0 reports a generation of 6 and current clip of 1
553 9.1.11 Insert test003.dv at position 2 using INSERT U0 test001.dv 3 and run LIST U0
556 --> 0 "test001.dv" 0 6999 7000 7000
557 --> 1 "test002.dv" 0 6999 7000 7000
558 --> 2 "test003.dv" 0 6999 7000 7000
559 --> Check that USTA U0 reports a generation of 7 and current clip of 1
561 9.1.12 Change the in point of the current clip using SIN U0 5000 and run LIST U0
564 --> 0 "test001.dv" 0 6999 7000 7000
565 --> 1 "test002.dv" 5000 6999 7000 2000
566 --> 2 "test003.dv" 0 6999 7000 7000
567 --> Check that USTA U0 reports a generation of 8 and current clip of 1
569 9.1.13 Change the out point of the following clip using SOUT U0 5000 +1 and run LIST U0
572 --> 0 "test001.dv" 0 6999 7000 7000
573 --> 1 "test002.dv" 5000 6999 7000 2000
574 --> 2 "test003.dv" 0 5000 7000 5001
575 --> Check that USTA U0 reports a generation of 9 and current clip of 2
577 9.1.14 Change the in point of the current clip to 1000 using SIN U0 1000 and run LIST U0
580 --> 0 "test001.dv" 0 6999 7000 7000
581 --> 1 "test002.dv" 5000 6999 7000 2000
582 --> 2 "test003.dv" 1000 5000 7000 4001
583 --> Check that USTA U0 reports a generation of 10 and current clip of 2
585 9.1.15 Ignore the in/out points by running USET U0 points=ignore and run LIST U0
588 --> 0 "test001.dv" 0 6999 7000 7000
589 --> 1 "test002.dv" 5000 6999 7000 7000
590 --> 2 "test003.dv" 1000 5000 7000 7000
591 --> Check that USTA U0 reports a generation of 11 and current clip of 2
593 9.1.16 Turn the in/out points on again by running USET U0 points=use and run LIST U0
596 --> 0 "test001.dv" 0 6999 7000 7000
597 --> 1 "test002.dv" 5000 6999 7000 2000
598 --> 2 "test003.dv" 1000 5000 7000 4001
599 --> Check that USTA U0 reports a generation of 12 and current clip of 2
601 9.1.17 Remove the current clip using REMOVE U0 and run LIST U0
604 --> 0 "test001.dv" 0 6999 7000 7000
605 --> 1 "test002.dv" 5000 6999 7000 2000
606 --> Check that USTA U0 reports a generation of 13 and current clip of 0
608 9.1.17 Remove the next clip using REMOVE U0 +1 and run LIST U0
611 --> 0 "test001.dv" 0 6999 7000 7000
612 --> Check that USTA U0 reports a generation of 14 and current clip of 0