# Tests for aug_srun # Blank lines and lines starting with '#' are ignored. This file is # processed by test-run.c # # The syntax for a test specification is # test NAME RESULT ERRCODE # [use MODULE] # COMMANDS # prints # OUTPUT # # where # NAME - the name printed to identify the test # RESULT - an integer that is compared against the return code # of aug_srun # ERRCODE - one of the error codes defined in enum errcode_t in augeas.h # without the AUG_ prefix, i.e. NOERROR, EMMATCH etc. If ERRCODE # is omitted, it defaults to NOERROR # MODULE - the name of a module that should be loaded before the test # COMMANDS - the commands to hand to aug_srun; can be multiple lines, # which are passed as one string. # OUTPUT - the string that aug_srun should print on the OUT file stream # # The prints keyword and OUTPUT are optional; if they are not provided, the # output of aug_srun must be empty # # Leading spaces are stripped from COMMANDS and OUTPUT; a leading or trailing # ':' is also stripped, but the rest of the line is used verbatim. # # A test passes when RESULT and ERRCODE agree with what aug_srun given # COMMANDS produces, and OUTPUT coincides with what aug_srun prints on its # OUT stream. # # The test is run against a tree initialized with AUG_NO_STDINC|AUG_NO_LOAD # and file system root /dev/null. The Hosts module is loaded # # Various corner cases # test null 0 test empty 0 : test quit -2 quit test quit-2 -2 get /augeas quit prints /augeas (none) test two-commands 2 get /augeas/root get /augeas/span prints /augeas/root = /dev/null/ /augeas/span = enable test comment 1 :# Get /augeas get /augeas prints /augeas (none) test get_wspace 2 : get /augeas : : rm /augeas/root : prints /augeas (none) rm : /augeas/root 1 test get_wspace_between 1 : get /augeas prints /augeas (none) test unknown-cmd -1 ECMDRUN nocommand test help 1 help prints something # # ls tests # test ls-root 1 ls / prints augeas/ = (none) files = (none) test ls-bad-pathx -1 EPATHX ls /files[] # # match tests # test match-root 1 match / prints /augeas = (none) /files = (none) test match-context 1 match . prints /files = (none) test match-root-star 1 match /* prints /augeas = (none) /files = (none) test match-bad-pathx -1 EPATHX match /files[] test match-nothing 1 match /not-there prints : (no matches) # # test rm # test rm-save-modes 1 rm /augeas/version/save prints rm : /augeas/version/save 5 test rm-bad-pathx -1 EPATHX rm /files[] # # test mv # test mv 1 mv /augeas/version /files test mv-not-there -1 ENOMATCH mv /not-there /files test mv-to-not-there 1 mv /files /new-node test mv-into-descendant -1 EMVDESC mv /augeas /augeas/version test mv-into-self -1 EMVDESC mv /augeas /augeas test mv-into-multiple -1 EMMATCH mv /files /augeas/version/save/* test mv-multiple -1 EMMATCH mv /augeas/version/save/* /files test mv-tree1 3 set /a/b/c value mv /a/b/c /x print /*[ label() != 'augeas' and label() != 'files'] prints /a /a/b /x = "value" test mv-tree2 3 set /a/b/c value mv /a/b/c /a/x print /*[ label() != 'augeas' and label() != 'files'] prints /a /a/b /a/x = "value" test mv-tree3 3 set /a/b/c value mv /a/b/c /x/y print /*[ label() != 'augeas' and label() != 'files'] prints /a /a/b /x /x/y = "value" test mv-tree4 -1 EMVDESC set /a/b/c value mv /a/b/c /a/b/c/d print /*[ label() != 'augeas' and label() != 'files'] test mv-tree5 3 set /a/b/c value mv /a/b/c /a/b/d print /*[ label() != 'augeas' and label() != 'files'] prints /a /a/b /a/b/d = "value" test mv-tree6 3 set /a/b/c value mv /a /x/y print /*[ label() != 'augeas' and label() != 'files'] prints /x /x/y /x/y/b /x/y/b/c = "value" # # test rename # test rename 1 rename /augeas/version version2 prints rename : /augeas/version to version2 1 test rename-into-self 1 rename /augeas augeas prints rename : /augeas to augeas 1 test rename-tree1 3 set /a/b/c value rename /a/b/c x print /*[ label() != 'augeas' and label() != 'files'] prints rename : /a/b/c to x 1 /a /a/b /a/b/x = "value" test rename-tree2 4 set /a/b/c value set /a/b/d value2 rename /a/b/c x print /*[ label() != 'augeas' and label() != 'files'] prints rename : /a/b/c to x 1 /a /a/b /a/b/x = "value" /a/b/d = "value2" test rename-multiple 4 set /a/b/d value set /a/c/d value2 rename //d x print /*[ label() != 'augeas' and label() != 'files'] prints rename : //d to x 2 /a /a/b /a/b/x = "value" /a/c /a/c/x = "value2" test rename-slash -1 ELABEL set /a/b/c value rename /a/b/c va/lue # # test set # test set-not-there 2 set /foo value get /foo prints /foo = value test set-existing 2 set /files value get /files prints /files = value test set-trailing-slash 2 set /files/ value get /files prints /files = value test set-bad-pathx -1 EPATHX set /files[] 1 test set-multiple -1 EMMATCH set /augeas/version/save/mode value test set-args 2 set /files get /files prints /files (none) test set-union-not-there -1 EMMATCH set (/files/left|/files/right) 1 test set-union-existing -1 EMMATCH set /files/left value1 set /files/right value2 set (/files/left|/files/right) 1 test set-else-not-there 2 set '(/files/not-there else /files/not-there-yet)' value get /files/not-there-yet prints /files/not-there-yet = value test set-else-existing 3 set /files/existing value set '(/files/existing else /files/not-there)' new_value get /files/existing prints /files/existing = new_value test set-else-update 3 set /files/existing value set '(/files/not-there else /files/existing)' value3 get /files/existing prints /files/existing = value3 # # test clear # test clear-not-there 2 clear /foo get /foo prints /foo (none) test clear-existing 2 clear /files get /files prints /files (none) test clear-bad-pathx -1 EPATHX clear /files[] test clear-multiple -1 EMMATCH clear /augeas/version/save/mode test clear-args -1 ECMDRUN clear /files value # # test get # test get-save-mode 1 get /augeas/version/save/mode[1] prints /augeas/version/save/mode[1] = backup test get-too-many -1 EMMATCH get /augeas/* test get-not-there 1 get /not-there prints /not-there (o) test get-bad-pathx -1 EPATHX get /files[] # # test transform # test transform-1 3 transform Test incl /tmp/bar get /augeas/load/Test/lens get /augeas/load/Test/incl prints /augeas/load/Test/lens = Test.lns /augeas/load/Test/incl = /tmp/bar test transform-2 4 transform Bar incl /tmp/foo/* transform Bar incl /tmp/bar/* transform Bar excl /tmp/foo/baz print /augeas/load/Bar prints /augeas/load/Bar /augeas/load/Bar/lens = "Bar.lns" /augeas/load/Bar/incl[1] = "/tmp/foo/*" /augeas/load/Bar/incl[2] = "/tmp/bar/*" /augeas/load/Bar/excl = "/tmp/foo/baz" test transform-3 2 transform Bar.lns incl /tmp/foo/* print /augeas/load/Bar prints /augeas/load/Bar /augeas/load/Bar/lens = "Bar.lns" /augeas/load/Bar/incl = "/tmp/foo/*" # # test print # test print-save 1 print /augeas/version/save prints /augeas/version/save /augeas/version/save/mode[1] = "backup" /augeas/version/save/mode[2] = "newfile" /augeas/version/save/mode[3] = "noop" /augeas/version/save/mode[4] = "overwrite" test print-root 1 print / # # test set/get parsing with quoting, whitespace and escaping # test set-single-quotes 2 set /files 'a test value' get /files prints /files = a test value test set-double-quotes 2 set /files "a test value" get /files prints /files = a test value test set-mixed-quotes1 2 set /files "a 'mixed quotes' test" get /files prints /files = a 'mixed quotes' test test set-mixed-quotes2 2 set /files 'a "mixed quotes" test' get /files prints /files = a "mixed quotes" test test set-mixed-quotes-expr 2 clear /foo print "/*[ label() != 'augeas' and label() != 'files']" prints /foo test set-quote-concat 2 set "/fi"les test get "/fi"les prints /files = test test set-escaped-quotes 2 set /files "''\"''" get /files prints /files = ''"'' test set-escaped-path 2 set /white\ space\ tab value get /white\ space\ tab prints /white space tab = value test set-escaped-path-bracket 2 set /white\ space/\[section value print /white\ space/\[section prints /white\ space/\[section = "value" test set-squote-escaped-bracket 2 set '/augeas/\[section' value print '/augeas/\[section' prints /augeas/\[section = "value" test set-squote-escaped-path 2 set '/white\ space' value get '/white\ space' prints /white\ space = value test set-dquote-escaped-path 2 set "/white\ space" value get "/white\ space" prints /white\ space = value test set-tabnline 2 set /files newl\ntab\tend get /files prints /files = newl tab end test set-tabnline-squote 2 set /files 'newl\ntab\tend' get /files prints /files = newl tab end test set-tabnline-dquote 2 set /files "newl\ntab\tend" get /files prints /files = newl tab end # Combinations of quotes in values, some unmatched # Tests from David Schmitt (Puppet bug #12199) test quot_sq -1 ECMDRUN set /test ' test quot_sq_sq -1 ECMDRUN set /test ''' test quot_sq_dq 2 set /test "'" get /test prints /test = ' test quot_sqsq 2 set /test '' get /test prints /test = : test quot_sqsq_sq 2 set /test '''' get /test prints /test = : test quot_sqsq_dq 2 set /test "''" get /test prints /test = '' test quot_sqsqsq -1 ECMDRUN set /test ''' test quot_sqsqsq_sq -1 ECMDRUN set /test ''''' test quot_sqsqsq_dq 2 set /test "'''" get /test prints /test = ''' test quot_sqsqsqsq 2 set /test '''' get /test prints /test = : test quot_sqsqsqsq_sq 2 set /test '''''' get /test prints /test = : test quot_sqsqsqsq_dq 2 set /test "''''" get /test prints /test = '''' test quot_dq -1 ECMDRUN set /test " test quot_dq_sq 2 set /test '"' get /test prints /test = " test quot_dq_dq -1 ECMDRUN set /test """ test quot_dqdq 2 set /test "" get /test prints /test = : test quot_dqdq_sq 2 set /test '""' get /test prints /test = "" test quot_dqdq_dq 2 set /test """" get /test prints /test = : test quot_dqdqdq -1 ECMDRUN set /test """ test quot_dqdqdq_sq 2 set /test '"""' get /test prints /test = """ test quot_dqdqdq_dq -1 ECMDRUN set /test """"" test quot_dqdqdqdq 2 set /test """" get /test prints /test = : test quot_dqdqdqdq_sq 2 set /test '""""' get /test prints /test = """" test quot_dqdqdqdq_dq 2 set /test """""" get /test prints /test = : test quot_truncated_dq 2 set /test "s"bc"d"ef get /test prints /test = sbcdef test quot_truncated_dq_sq 2 set /test '"s"bc"d"ef' get /test prints /test = "s"bc"d"ef test quot_truncated_dq_dq 2 set /test ""s"bc"d"ef" get /test prints /test = sbcdef test quot_truncated_sq 2 set /test 's'bc'd'ef get /test prints /test = sbcdef test quot_truncated_sq_sq 2 set /test ''s'bc'd'ef' get /test prints /test = sbcdef test quot_truncated_sq_dq 2 set /test "'s'bc'd'ef" get /test prints /test = 's'bc'd'ef test quot_truncated_dq_mix 2 set /test "s"bc'd'ef get /test prints /test = sbcdef test quot_truncated_dq_mix_sq 2 set /test '"s"bc'd'ef' get /test prints /test = "s"bcdef test quot_truncated_dq_mix_dq 2 set /test ""s"bc'd'ef" get /test prints /test = sbc'd'ef test quot_truncated_sq_mix 2 set /test 's'bc"d"ef get /test prints /test = sbcdef test quot_truncated_sq_mix_sq 2 set /test ''s'bc"d"ef' get /test prints /test = sbc"d"ef test quot_truncated_sq_mix_dq 2 set /test "'s'bc"d"ef" get /test prints /test = 's'bcdef test quot_truncated_space -1 ECMDRUN set /test before after test quot_truncated_space_sq 2 set /test 'before after' get /test prints /test = before after test quot_truncated_space_dq 2 set /test "before after" get /test prints /test = before after test quot_mix -1 ECMDRUN set /test a"b'c"d'e test quot_mix_sq -1 ECMDRUN set /test 'a"b'c"d'e' test quot_mix_dq -1 ECMDRUN set /test "a"b'c"d'e" # # Tests for aug_text_store # test store_hosts 3 use Hosts set /text/in/t1 "192.168.0.1 rtr.example.com foo\n" store Hosts.lns /text/in/t1 /text/tree/t1 print /text/tree/t1 prints /text/tree/t1 /text/tree/t1/1 /text/tree/t1/1/ipaddr = "192.168.0.1" /text/tree/t1/1/canonical = "rtr.example.com" /text/tree/t1/1/alias = "foo" test store_nolens -1 ENOLENS set /text/in/t1 "192.168.0.1 rtr.example.com foo\n" store Nomodule.lns /text/in/t1 /text/tree/t1 test store_epathx_node -1 EPATHX use Hosts store Hosts.lns [garbage] /text/tree/t1 test store_epathx_path -1 EPATHX use Hosts store Hosts.lns /text/in/t1 [garbage] test store_null_text -1 ENOMATCH use Hosts store Hosts.lns /text/in/t1 /text/tree/t1 test store_esyntax 3 use Hosts set /text/in/t1 "not a hosts file entry" store Hosts.lns /text/in/t1 /text/tree/t1 match /augeas/text/text/tree/t1/error prints /augeas/text/text/tree/t1/error = parse_failed # Bug #283; /text is actually NULL test store_null -1 ENOMATCH use Hosts set /text/1 "192.168.0.1 toto\n" store Hosts.lns /text /hosts # # Tests for aug_text_retrieve # test retrieve_hosts 5 use Hosts set /text/in/t1 "192.168.0.1 rtr.example.com foo\n" store Hosts.lns /text/in/t1 /text/tree/t1 set /text/tree/t1/1/alias[1] bar retrieve Hosts.lns /text/in/t1 /text/tree/t1 /text/out/t1 print /text/out/t1 prints /text/out/t1 = "192.168.0.1 rtr.example.com bar\n" test retrieve_nolens -1 ENOLENS set /text/in/t1 "192.168.0.1 rtr.example.com foo\n" store Hosts.lns /text/in/t1 /text/tree/t1 retrieve Nomodule.lns /text/in/t1 /text/tree/t1 /text/out/t1 test retrieve_epathx_node_in -1 EPATHX use Hosts retrieve Hosts.lns [garbage] /text/tree/t1 /text/out/t1 test retrieve_epathx_path -1 EPATHX use Hosts retrieve Hosts.lns /text/in/t1 [garbage] /text/out/t1 test retrieve_epathx_node_out -1 EPATHX use Hosts set /text/in/t1 "192.168.0.1 rtr.example.com foo\n" retrieve Hosts.lns /text/in/t1 /text/tree/t1 [garbage] test retrieve_no_node_in -1 ENOMATCH use Hosts retrieve Hosts.lns /text/in/t1 /text/tree/t1 /text/out/t1 test retrieve_no_tree 3 use Hosts set /text/in/t1 "192.168.0.1 rtr.example.com foo\n" retrieve Hosts.lns /text/in/t1 /text/tree/t1 /text/out/t1 print /text/out/t1 prints /text/out/t1 = "" test retrieve_esyntax 5 use Hosts set /text/in/t1 "192.168.0.1 rtr.example.com foo\n" store Hosts.lns /text/in/t1 /text/tree/t1 set /text/in/t1 "not a hosts file entry" retrieve Hosts.lns /text/in/t1 /text/tree/t1 /text/out/t1 match /augeas//error prints /augeas/text/text/tree/t1/error = parse_skel_failed # Bug #283; /text is actually NULL test retrieve_null -1 ENOMATCH use Hosts set /text/1 "192.168.0.1 toto\n" retrieve Hosts.lns /text /hosts /out # Change 'var=val' to 'variable=value' and check that the span gets updated test span_updates_lv 9 set /in "var=val\n" store Cron.lns /in /cron span /cron/var span /cron mv /cron/var /cron/variable set /cron/variable value retrieve Cron.lns /in /cron /out span /cron/variable span /cron prints /cron label=(0:3) value=(4:7) span=(0,8) /cron label=(0:0) value=(0:0) span=(0,8) /cron label=(0:8) value=(9:14) span=(0,15) /cron label=(0:0) value=(0:0) span=(0,15) # Make a change and check that the parents' span gets updated test span_updates_parent 8 set /in "10.0.0.1 gw.example.com\n" store Hosts.lns /in /host span /host/1 span /host set /host/1/canonical gateway.example.com retrieve Hosts.lns /in /host /out span /host/1 span /host prints /host label=(0:0) value=(0:0) span=(0,24) /host label=(0:0) value=(0:0) span=(0,24) /host label=(0:0) value=(0:0) span=(0,29) /host label=(0:0) value=(0:0) span=(0,29) # Check that creating nodes sets spans test span_updates_on_create 5 set /in "" set /cron/var val retrieve Cron.lns /in /cron /out span /cron/var span /cron prints /cron label=(0:3) value=(4:7) span=(0,8) /cron label=(0:0) value=(0:0) span=(0,8)