3 # Blank lines and lines starting with '#' are ignored. This file is
4 # processed by test-run.c
6 # The syntax for a test specification is
7 # test NAME RESULT ERRCODE
14 # NAME - the name printed to identify the test
15 # RESULT - an integer that is compared against the return code
17 # ERRCODE - one of the error codes defined in enum errcode_t in augeas.h
18 # without the AUG_ prefix, i.e. NOERROR, EMMATCH etc. If ERRCODE
19 # is omitted, it defaults to NOERROR
20 # MODULE - the name of a module that should be loaded before the test
21 # COMMANDS - the commands to hand to aug_srun; can be multiple lines,
22 # which are passed as one string.
23 # OUTPUT - the string that aug_srun should print on the OUT file stream
25 # The prints keyword and OUTPUT are optional; if they are not provided, the
26 # output of aug_srun must be empty
28 # Leading spaces are stripped from COMMANDS and OUTPUT; a leading or trailing
29 # ':' is also stripped, but the rest of the line is used verbatim.
31 # A test passes when RESULT and ERRCODE agree with what aug_srun given
32 # COMMANDS produces, and OUTPUT coincides with what aug_srun prints on its
35 # The test is run against a tree initialized with AUG_NO_STDINC|AUG_NO_LOAD
36 # and file system root /dev/null. The Hosts module is loaded
40 # Various corner cases
60 /augeas/root = /dev/null/
76 test get_wspace_between 1
81 test unknown-cmd -1 ECMDRUN
97 test ls-bad-pathx -1 EPATHX
114 test match-root-star 1
120 test match-bad-pathx -1 EPATHX
132 rm /augeas/version/save
134 rm : /augeas/version/save 5
136 test rm-bad-pathx -1 EPATHX
143 mv /augeas/version /files
145 test mv-not-there -1 ENOMATCH
148 test mv-to-not-there 1
151 test mv-into-descendant -1 EMVDESC
152 mv /augeas /augeas/version
154 test mv-into-self -1 EMVDESC
157 test mv-into-multiple -1 EMMATCH
158 mv /files /augeas/version/save/*
160 test mv-multiple -1 EMMATCH
161 mv /augeas/version/save/* /files
166 print /*[ label() != 'augeas' and label() != 'files']
175 print /*[ label() != 'augeas' and label() != 'files']
184 print /*[ label() != 'augeas' and label() != 'files']
191 test mv-tree4 -1 EMVDESC
194 print /*[ label() != 'augeas' and label() != 'files']
199 print /*[ label() != 'augeas' and label() != 'files']
208 print /*[ label() != 'augeas' and label() != 'files']
219 rename /augeas/version version2
221 rename : /augeas/version to version2 1
223 test rename-into-self 1
224 rename /augeas augeas
226 rename : /augeas to augeas 1
231 print /*[ label() != 'augeas' and label() != 'files']
233 rename : /a/b/c to x 1
242 print /*[ label() != 'augeas' and label() != 'files']
244 rename : /a/b/c to x 1
250 test rename-multiple 4
254 print /*[ label() != 'augeas' and label() != 'files']
263 test rename-slash -1 ELABEL
282 test set-trailing-slash 2
288 test set-bad-pathx -1 EPATHX
291 test set-multiple -1 EMMATCH
292 set /augeas/version/save/mode value
300 test set-union-not-there -1 EMMATCH
301 set (/files/left|/files/right) 1
303 test set-union-existing -1 EMMATCH
304 set /files/left value1
305 set /files/right value2
306 set (/files/left|/files/right) 1
308 test set-else-not-there 2
309 set '(/files/not-there else /files/not-there-yet)' value
310 get /files/not-there-yet
312 /files/not-there-yet = value
314 test set-else-existing 3
315 set /files/existing value
316 set '(/files/existing else /files/not-there)' new_value
319 /files/existing = new_value
321 test set-else-update 3
322 set /files/existing value
323 set '(/files/not-there else /files/existing)' value3
326 /files/existing = value3
332 test clear-not-there 2
338 test clear-existing 2
344 test clear-bad-pathx -1 EPATHX
347 test clear-multiple -1 EMMATCH
348 clear /augeas/version/save/mode
350 test clear-args -1 ECMDRUN
357 get /augeas/version/save/mode[1]
359 /augeas/version/save/mode[1] = backup
361 test get-too-many -1 EMMATCH
369 test get-bad-pathx -1 EPATHX
376 transform Test incl /tmp/bar
377 get /augeas/load/Test/lens
378 get /augeas/load/Test/incl
380 /augeas/load/Test/lens = Test.lns
381 /augeas/load/Test/incl = /tmp/bar
384 transform Bar incl /tmp/foo/*
385 transform Bar incl /tmp/bar/*
386 transform Bar excl /tmp/foo/baz
387 print /augeas/load/Bar
390 /augeas/load/Bar/lens = "Bar.lns"
391 /augeas/load/Bar/incl[1] = "/tmp/foo/*"
392 /augeas/load/Bar/incl[2] = "/tmp/bar/*"
393 /augeas/load/Bar/excl = "/tmp/foo/baz"
396 transform Bar.lns incl /tmp/foo/*
397 print /augeas/load/Bar
400 /augeas/load/Bar/lens = "Bar.lns"
401 /augeas/load/Bar/incl = "/tmp/foo/*"
407 print /augeas/version/save
410 /augeas/version/save/mode[1] = "backup"
411 /augeas/version/save/mode[2] = "newfile"
412 /augeas/version/save/mode[3] = "noop"
413 /augeas/version/save/mode[4] = "overwrite"
419 # test set/get parsing with quoting, whitespace and escaping
421 test set-single-quotes 2
422 set /files 'a test value'
425 /files = a test value
427 test set-double-quotes 2
428 set /files "a test value"
431 /files = a test value
433 test set-mixed-quotes1 2
434 set /files "a 'mixed quotes' test"
437 /files = a 'mixed quotes' test
439 test set-mixed-quotes2 2
440 set /files 'a "mixed quotes" test'
443 /files = a "mixed quotes" test
445 test set-mixed-quotes-expr 2
447 print "/*[ label() != 'augeas' and label() != 'files']"
451 test set-quote-concat 2
457 test set-escaped-quotes 2
463 test set-escaped-path 2
464 set /white\ space\ tab value
465 get /white\ space\ tab
467 /white space tab = value
469 test set-escaped-path-bracket 2
470 set /white\ space/\[section value
471 print /white\ space/\[section
473 /white\ space/\[section = "value"
475 test set-squote-escaped-bracket 2
476 set '/augeas/\[section' value
477 print '/augeas/\[section'
479 /augeas/\[section = "value"
481 test set-squote-escaped-path 2
482 set '/white\ space' value
485 /white\ space = value
487 test set-dquote-escaped-path 2
488 set "/white\ space" value
491 /white\ space = value
494 set /files newl\ntab\tend
500 test set-tabnline-squote 2
501 set /files 'newl\ntab\tend'
507 test set-tabnline-dquote 2
508 set /files "newl\ntab\tend"
514 # Combinations of quotes in values, some unmatched
515 # Tests from David Schmitt (Puppet bug #12199)
516 test quot_sq -1 ECMDRUN
519 test quot_sq_sq -1 ECMDRUN
546 test quot_sqsqsq -1 ECMDRUN
549 test quot_sqsqsq_sq -1 ECMDRUN
552 test quot_sqsqsq_dq 2
564 test quot_sqsqsqsq_sq 2
570 test quot_sqsqsqsq_dq 2
576 test quot_dq -1 ECMDRUN
585 test quot_dq_dq -1 ECMDRUN
606 test quot_dqdqdq -1 ECMDRUN
609 test quot_dqdqdq_sq 2
615 test quot_dqdqdq_dq -1 ECMDRUN
624 test quot_dqdqdqdq_sq 2
630 test quot_dqdqdqdq_dq 2
636 test quot_truncated_dq 2
642 test quot_truncated_dq_sq 2
643 set /test '"s"bc"d"ef'
648 test quot_truncated_dq_dq 2
649 set /test ""s"bc"d"ef"
654 test quot_truncated_sq 2
660 test quot_truncated_sq_sq 2
661 set /test ''s'bc'd'ef'
666 test quot_truncated_sq_dq 2
667 set /test "'s'bc'd'ef"
672 test quot_truncated_dq_mix 2
678 test quot_truncated_dq_mix_sq 2
679 set /test '"s"bc'd'ef'
684 test quot_truncated_dq_mix_dq 2
685 set /test ""s"bc'd'ef"
690 test quot_truncated_sq_mix 2
696 test quot_truncated_sq_mix_sq 2
697 set /test ''s'bc"d"ef'
702 test quot_truncated_sq_mix_dq 2
703 set /test "'s'bc"d"ef"
708 test quot_truncated_space -1 ECMDRUN
709 set /test before after
711 test quot_truncated_space_sq 2
712 set /test 'before after'
717 test quot_truncated_space_dq 2
718 set /test "before after"
723 test quot_mix -1 ECMDRUN
726 test quot_mix_sq -1 ECMDRUN
727 set /test 'a"b'c"d'e'
729 test quot_mix_dq -1 ECMDRUN
730 set /test "a"b'c"d'e"
733 # Tests for aug_text_store
737 set /text/in/t1 "192.168.0.1 rtr.example.com foo\n"
738 store Hosts.lns /text/in/t1 /text/tree/t1
743 /text/tree/t1/1/ipaddr = "192.168.0.1"
744 /text/tree/t1/1/canonical = "rtr.example.com"
745 /text/tree/t1/1/alias = "foo"
747 test store_nolens -1 ENOLENS
748 set /text/in/t1 "192.168.0.1 rtr.example.com foo\n"
749 store Nomodule.lns /text/in/t1 /text/tree/t1
751 test store_epathx_node -1 EPATHX
753 store Hosts.lns [garbage] /text/tree/t1
755 test store_epathx_path -1 EPATHX
757 store Hosts.lns /text/in/t1 [garbage]
759 test store_null_text -1 ENOMATCH
761 store Hosts.lns /text/in/t1 /text/tree/t1
765 set /text/in/t1 "not a hosts file entry"
766 store Hosts.lns /text/in/t1 /text/tree/t1
767 match /augeas/text/text/tree/t1/error
769 /augeas/text/text/tree/t1/error = parse_failed
771 # Bug #283; /text is actually NULL
772 test store_null -1 ENOMATCH
774 set /text/1 "192.168.0.1 toto\n"
775 store Hosts.lns /text /hosts
778 # Tests for aug_text_retrieve
780 test retrieve_hosts 5
782 set /text/in/t1 "192.168.0.1 rtr.example.com foo\n"
783 store Hosts.lns /text/in/t1 /text/tree/t1
784 set /text/tree/t1/1/alias[1] bar
785 retrieve Hosts.lns /text/in/t1 /text/tree/t1 /text/out/t1
788 /text/out/t1 = "192.168.0.1 rtr.example.com bar\n"
790 test retrieve_nolens -1 ENOLENS
791 set /text/in/t1 "192.168.0.1 rtr.example.com foo\n"
792 store Hosts.lns /text/in/t1 /text/tree/t1
793 retrieve Nomodule.lns /text/in/t1 /text/tree/t1 /text/out/t1
795 test retrieve_epathx_node_in -1 EPATHX
797 retrieve Hosts.lns [garbage] /text/tree/t1 /text/out/t1
799 test retrieve_epathx_path -1 EPATHX
801 retrieve Hosts.lns /text/in/t1 [garbage] /text/out/t1
803 test retrieve_epathx_node_out -1 EPATHX
805 set /text/in/t1 "192.168.0.1 rtr.example.com foo\n"
806 retrieve Hosts.lns /text/in/t1 /text/tree/t1 [garbage]
808 test retrieve_no_node_in -1 ENOMATCH
810 retrieve Hosts.lns /text/in/t1 /text/tree/t1 /text/out/t1
812 test retrieve_no_tree 3
814 set /text/in/t1 "192.168.0.1 rtr.example.com foo\n"
815 retrieve Hosts.lns /text/in/t1 /text/tree/t1 /text/out/t1
820 test retrieve_esyntax 5
822 set /text/in/t1 "192.168.0.1 rtr.example.com foo\n"
823 store Hosts.lns /text/in/t1 /text/tree/t1
824 set /text/in/t1 "not a hosts file entry"
825 retrieve Hosts.lns /text/in/t1 /text/tree/t1 /text/out/t1
828 /augeas/text/text/tree/t1/error = parse_skel_failed
830 # Bug #283; /text is actually NULL
831 test retrieve_null -1 ENOMATCH
833 set /text/1 "192.168.0.1 toto\n"
834 retrieve Hosts.lns /text /hosts /out
836 # Change 'var=val' to 'variable=value' and check that the span gets updated
837 test span_updates_lv 9
839 store Cron.lns /in /cron
842 mv /cron/var /cron/variable
843 set /cron/variable value
844 retrieve Cron.lns /in /cron /out
848 /cron label=(0:3) value=(4:7) span=(0,8)
849 /cron label=(0:0) value=(0:0) span=(0,8)
850 /cron label=(0:8) value=(9:14) span=(0,15)
851 /cron label=(0:0) value=(0:0) span=(0,15)
853 # Make a change and check that the parents' span gets updated
854 test span_updates_parent 8
855 set /in "10.0.0.1 gw.example.com\n"
856 store Hosts.lns /in /host
859 set /host/1/canonical gateway.example.com
860 retrieve Hosts.lns /in /host /out
864 /host label=(0:0) value=(0:0) span=(0,24)
865 /host label=(0:0) value=(0:0) span=(0,24)
866 /host label=(0:0) value=(0:0) span=(0,29)
867 /host label=(0:0) value=(0:0) span=(0,29)
869 # Check that creating nodes sets spans
870 test span_updates_on_create 5
873 retrieve Cron.lns /in /cron /out
877 /cron label=(0:3) value=(4:7) span=(0,8)
878 /cron label=(0:0) value=(0:0) span=(0,8)