}
revert {
catch {file delete -force $Stash/$opt}
- exec {*}[list cp -a $Saved/$opt $Stash/$opt]
+ catch {exec {*}[list cp -a $Saved/$opt $Stash/$opt]}
}
commit {
file delete -force $Saved.bak
--- /dev/null
+#!/bin/sh
+
+test_description="$(basename $0)"
+. $SHARNESS_TEST_SRCDIR/sharness.sh
+export DSC_SCHEMA=$SHARNESS_TEST_DIRECTORY/../schema
+PATH=$SHARNESS_TEST_DIRECTORY/..:$PATH
+export DSC_STASH=stash
+
+set -f
+test_expect_success "foo !has" "! dsc has srv/foo"
+test_expect_success "bar !has" "! dsc has srv/bar"
+test_expect_success "baz !has" "! dsc has srv/baz"
+test_expect_success "foo add" "dsc add srv/foo"
+test_expect_success "foo exists" "[ -d $DSC_STASH/srv/foo ]"
+test_expect_success "foo has" "dsc has srv/foo"
+test_expect_success "bar add" "dsc add srv/bar"
+test_expect_success "bar exists" "[ -d $DSC_STASH/srv/bar ]"
+test_expect_success "bar has" "dsc has srv/bar"
+test_expect_success "baz add" "dsc add srv/baz"
+test_expect_success "baz exists" "[ -d $DSC_STASH/srv/baz ]"
+test_expect_success "baz has" "dsc has srv/baz"
+test_expect_success "get *" "dsc get srv/* >out"
+echo bar >expected
+echo baz >>expected
+echo foo >>expected
+test_expect_success "get * out" "test_cmp out expected"
+test_expect_success "foo del" "dsc del srv/foo"
+test_expect_success "foo !exists" "! [ -d $DSC_STASH/srv/foo ]"
+test_expect_success "get *" "dsc get srv/* >out"
+echo bar >expected
+echo baz >>expected
+test_expect_success "del * out" "dsc del srv"
+test_expect_success "get *" "dsc get srv/* >out"
+test_expect_success "get * out" "! [ -s out ]"
+
+test_done
--- /dev/null
+#!/bin/sh
+
+test_description="$(basename $0)"
+. $SHARNESS_TEST_SRCDIR/sharness.sh
+export DSC_SCHEMA=$SHARNESS_TEST_DIRECTORY/../schema
+PATH=$SHARNESS_TEST_DIRECTORY/..:$PATH
+export DSC_STASH=stash
+
+test_expect_success "traversal bad" "! dsc add net/foo/addr/::1234"
+test_expect_success "net add" "dsc add net/foo"
+test_expect_success "traversal ok" "dsc add net/foo/addr/::1234"
+
+test_done
--- /dev/null
+#!/bin/sh
+
+test_description="$(basename $0)"
+. $SHARNESS_TEST_SRCDIR/sharness.sh
+export DSC_SCHEMA=$SHARNESS_TEST_DIRECTORY/../schema
+PATH=$SHARNESS_TEST_DIRECTORY/..:$PATH
+export DSC_STASH=stash DSC_SAVED=saved
+mkdir saved
+
+dd if=/dev/urandom of=prv bs=64 count=1 2>/dev/null
+test_expect_success "set" "dsc set ssh/prv <prv"
+test_expect_success "get" "dsc get ssh/prv >out"
+test_expect_success "cmp" "test_cmp out prv"
+test_expect_success "commit" "dsc commit"
+test_expect_success "export" "dsc export >out"
+test_expect_success "has base64" "grep -q :base64 out"
+test_expect_success "del *" 'dsc del ""'
+test_expect_success "import" "dsc import <out"
+test_expect_success "get" "dsc get ssh/prv >out"
+test_expect_success "cmp" "test_cmp out prv"
+
+test_done
--- /dev/null
+#!/bin/sh
+
+test_description="$(basename $0)"
+. $SHARNESS_TEST_SRCDIR/sharness.sh
+
+opt=net/foo/addr/1.2.3.4/prefixlen
+
+echo >in
+test_expect_success "default: ok" \
+ "$DSC_SCHEMA/net/*/addr/*/prefixlen/check $opt <in >out 2>&1"
+test_expect_success "default: expected" '[ "$(cat out)" = 24 ]'
+
+echo 20 >in
+test_expect_success "20: ok" \
+ "$DSC_SCHEMA/net/*/addr/*/prefixlen/check $opt <in"
+
+echo dead >in
+test_expect_success "dead fails" \
+ "! $DSC_SCHEMA/net/*/addr/*/prefixlen/check $opt <in"
+
+echo 0 >in
+test_expect_success "0: fails" \
+ "! $DSC_SCHEMA/net/*/addr/*/prefixlen/check $opt <in"
+
+echo 33 >in
+test_expect_success "33: fails" \
+ "! $DSC_SCHEMA/net/*/addr/*/prefixlen/check $opt <in"
+
+test_done
--- /dev/null
+#!/bin/sh
+
+test_description="$(basename $0)"
+. $SHARNESS_TEST_SRCDIR/sharness.sh
+
+opt=net/foo/addr/2001:db8::1234/prefixlen
+
+echo >in
+test_expect_success "default: ok" \
+ "$DSC_SCHEMA/net/*/addr/*/prefixlen/check $opt <in >out 2>&1"
+test_expect_success "default: expected" '[ "$(cat out)" = 64 ]'
+
+echo 80 >in
+test_expect_success "80: ok" \
+ "$DSC_SCHEMA/net/*/addr/*/prefixlen/check $opt <in"
+
+echo dead >in
+test_expect_success "dead fails" \
+ "! $DSC_SCHEMA/net/*/addr/*/prefixlen/check $opt <in"
+
+echo 0 >in
+test_expect_success "0: fails" \
+ "! $DSC_SCHEMA/net/*/addr/*/prefixlen/check $opt <in"
+
+echo 129 >in
+test_expect_success "129: fails" \
+ "! $DSC_SCHEMA/net/*/addr/*/prefixlen/check $opt <in"
+
+test_done
--- /dev/null
+#!/bin/sh
+
+test_description="$(basename $0)"
+. $SHARNESS_TEST_SRCDIR/sharness.sh
+
+opt=net/foo/mtu
+
+echo >in
+test_expect_success "default: ok" \
+ "$DSC_SCHEMA/net/*/mtu/check $opt <in >out 2>&1"
+test_expect_success "default: expected" '[ "$(cat out)" = 1500 ]'
+
+echo dead >in
+test_expect_success "dead fails" \
+ "! $DSC_SCHEMA/net/*/mtu/check $opt <in"
+
+echo 0 >in
+test_expect_success "0: fails" \
+ "! $DSC_SCHEMA/net/*/mtu/check $opt <in"
+
+echo 68000 >in
+test_expect_success "68k: fails" \
+ "! $DSC_SCHEMA/net/*/mtu/check $opt <in"
+
+test_done
+
--- /dev/null
+#!/bin/sh
+
+test_description="$(basename $0)"
+. $SHARNESS_TEST_SRCDIR/sharness.sh
+export DSC_SCHEMA=$SHARNESS_TEST_DIRECTORY/../schema
+PATH=$SHARNESS_TEST_DIRECTORY/..:$PATH
+export DSC_STASH=stash
+
+test_expect_success "hostname" "dsc set sys/hostname mein"
+
+test_expect_success "foo net" "dsc add net/foo"
+test_expect_success "foo mtu" "dsc set net/foo/mtu 1300"
+addr=net/foo/addr/2001:db8::1:1234
+test_expect_success "2001:db8::1:1234 add" "dsc add $addr >got"
+read addr <got
+test_expect_success "2001:db8::1:1234/80 add" "dsc set $addr/prefixlen 80"
+addr=net/foo/addr/2001:db8::2:1234
+test_expect_success "2001:db8::2:1234 add" "dsc add $addr >got"
+read addr <got
+test_expect_success "2001:db8::2:1234/126 add" "dsc set $addr/prefixlen 126"
+
+test_expect_success "bar net" "dsc add net/bar"
+addr=net/bar/addr/2001:db8::1:2345
+test_expect_success "2001:db8::1:2345 add" "dsc add $addr >got"
+read addr <got
+test_expect_success "2001:db8::1:2345/80 add" "dsc set $addr/prefixlen 80"
+addr=net/bar/addr/2001:db8::2:2345
+test_expect_success "2001:db8::2:2345 add" "dsc add $addr >got"
+
+test_expect_success "note" 'dsc set sys/note "hello
+world
+"'
+
+test_expect_success "diff" "dsc diff >out"
+perl -i -npe 's/^--- (\S+).*$/--- $1/' out
+perl -i -npe 's/^\+\+\+ (\S+).*$/+++ $1/' out
+perl -i -ne 'print unless /^@/' out
+cat >expected <<EOF
+--- dirs
++++ dirs
++net
++net/bar
++net/bar/addr
++net/bar/addr/2001:DB8::1:2345
++net/bar/addr/2001:DB8::2:2345
++net/foo
++net/foo/addr
++net/foo/addr/2001:DB8::1:1234
++net/foo/addr/2001:DB8::2:1234
++sys
+--- net/bar/addr/2001:DB8::1:2345/prefixlen
++++ net/bar/addr/2001:DB8::1:2345/prefixlen
++80
+--- net/foo/addr/2001:DB8::1:1234/prefixlen
++++ net/foo/addr/2001:DB8::1:1234/prefixlen
++80
+--- net/foo/addr/2001:DB8::2:1234/prefixlen
++++ net/foo/addr/2001:DB8::2:1234/prefixlen
++126
+--- net/foo/mtu
++++ net/foo/mtu
++1300
+--- sys/hostname
++++ sys/hostname
++mein
+--- sys/note
++++ sys/note
++hello
++world
+EOF
+test_expect_success "cmp" "test_cmp out expected"
+mkdir saved
+test_expect_success "commit" "dsc commit"
+test_expect_success "export" "dsc export >out"
+cat >expected <<EOF
+-- .dirs --
+net
+net/bar
+net/bar/addr
+net/bar/addr/2001:DB8::1:2345
+net/bar/addr/2001:DB8::2:2345
+net/foo
+net/foo/addr
+net/foo/addr/2001:DB8::1:1234
+net/foo/addr/2001:DB8::2:1234
+sys
+-- net/bar/addr/2001:DB8::1:2345/prefixlen --
+80
+-- net/foo/mtu --
+1300
+-- net/foo/addr/2001:DB8::1:1234/prefixlen --
+80
+-- net/foo/addr/2001:DB8::2:1234/prefixlen --
+126
+-- sys/hostname --
+mein
+-- sys/note --
+hello
+world
+EOF
+test_expect_success "cmp" "test_cmp out expected"
+
+test_done
--- /dev/null
+#!/bin/sh
+
+test_description="$(basename $0)"
+. $SHARNESS_TEST_SRCDIR/sharness.sh
+export DSC_SCHEMA=$SHARNESS_TEST_DIRECTORY/../schema
+PATH=$SHARNESS_TEST_DIRECTORY/..:$PATH
+
+test_expect_success "net ok" "dsc list net >out"
+cat >expected <<EOF
+net/* Network interface name
+net/*/addr/* Network address
+net/*/addr/*/prefixlen Prefix length
+net/*/mtu Maximum transmission unit
+EOF
+test_expect_success "net ok" "test_cmp out expected"
+
+test_expect_success "net -v ok" "dsc list -v net >out"
+cat >expected <<EOF
+net/* Network interface name
+net/*/addr/* Network address
+ No CIDR notation, just a pure address.
+ Set prefix length through net/*/addr/*/prefixlen.
+net/*/addr/*/prefixlen Prefix length
+ If not set, then defaults to /64 (or /24 for IPv4).
+net/*/mtu Maximum transmission unit
+ If not set, then defaults to 1500.
+EOF
+test_expect_success "net -v ok" "test_cmp out expected"
+
+test_expect_success "sys ok" "dsc list sys >out"
+cat >expected <<EOF
+sys/hostname Hostname
+sys/note Arbitrary note
+EOF
+test_expect_success "sys ok" "test_cmp out expected"
+
+test_done
--- /dev/null
+#!/bin/sh
+
+test_description="$(basename $0)"
+. $SHARNESS_TEST_SRCDIR/sharness.sh
+export DSC_SCHEMA=$SHARNESS_TEST_DIRECTORY/../schema
+PATH=$SHARNESS_TEST_DIRECTORY/..:$PATH
+export DSC_STASH=stash DSC_SAVED=saved
+mkdir saved
+
+diffpp() {
+ perl -i -npe 's/^--- (\S+).*$/--- $1/' $1
+ perl -i -npe 's/^\+\+\+ (\S+).*$/+++ $1/' $1
+ perl -i -ne 'print unless /^@/' $1
+}
+
+test_expect_success "hostname" "dsc set sys/hostname mein"
+test_expect_success "commit" "dsc commit"
+
+test_expect_success "hostname alter" "dsc set sys/hostname overriden"
+test_expect_success "net" "dsc add net/foo"
+test_expect_success "mtu" "dsc set net/foo/mtu 2000"
+test_expect_success "diff" "dsc diff >out"
+diffpp out
+cat >expected <<EOF
+--- dirs
++++ dirs
++net
++net/foo
+ sys
+--- net/foo/mtu
++++ net/foo/mtu
++2000
+--- sys/hostname
++++ sys/hostname
+-mein
++overriden
+EOF
+test_expect_success "cmp" "test_cmp out expected"
+
+test_expect_success "revert hostname" "dsc revert sys/hostname"
+test_expect_success "diff" "dsc diff >out"
+diffpp out
+cat >expected <<EOF
+--- dirs
++++ dirs
++net
++net/foo
+ sys
+--- net/foo/mtu
++++ net/foo/mtu
++2000
+EOF
+test_expect_success "cmp" "test_cmp out expected"
+
+test_expect_success "revert mtu" "dsc revert net/foo/mtu"
+test_expect_success "diff" "dsc diff >out"
+diffpp out
+cat >expected <<EOF
+--- dirs
++++ dirs
++net
++net/foo
+ sys
+EOF
+test_expect_success "cmp" "test_cmp out expected"
+
+test_expect_success "revert net" "dsc revert net"
+test_expect_success "diff" "dsc diff >out"
+test_expect_success "cmp" "! [ -s out ]"
+
+test_done
--- /dev/null
+#!/bin/sh
+
+test_description="$(basename $0)"
+. $SHARNESS_TEST_SRCDIR/sharness.sh
+export DSC_SCHEMA=$SHARNESS_TEST_DIRECTORY/../schema
+PATH=$SHARNESS_TEST_DIRECTORY/..:$PATH
+export DSC_STASH=stash
+
+test_expect_success "non-existent set" "! dsc set sys/non-existent"
+
+test_expect_success "hostname set" "dsc set sys/hostname mein"
+test_expect_success "hostname get" "dsc get sys/hostname >out"
+echo mein >expected
+test_expect_success "hostname get out" "test_cmp out expected"
+test_expect_success "hostname del" 'dsc set sys/hostname ""'
+test_expect_success "hostname get" "dsc get sys/hostname >out"
+echo unknown >expected
+test_expect_success "hostname get out" "test_cmp out expected"
+
+test_expect_success "note set" 'dsc set sys/note "hello
+world
+"'
+test_expect_success "note get" "dsc get sys/note >out"
+echo hello >expected
+echo world >>expected
+test_expect_success "note get out" "test_cmp out expected"
+test_expect_success "note del" 'dsc set sys/note ""'
+test_expect_success "note get" "dsc get sys/note >out"
+test_expect_success "note get out" "! [ -s out ]"
+
+test_done