nbdkit/0005-tests-Multiple-small-a...

442 lines
14 KiB
Diff

From 8477cf49de988a15b3fc58d91c54efef295543fd Mon Sep 17 00:00:00 2001
From: "Richard W.M. Jones" <rjones@redhat.com>
Date: Sat, 9 Jul 2016 20:14:58 +0100
Subject: [PATCH 05/11] tests: Multiple small additions and cleanups to the
test scripts.
Use a common 'functions.sh' file for test functions.
---
TODO | 2 ++
tests/Makefile.am | 10 ++++--
tests/functions.sh | 39 +++++++++++++++++++++
tests/test-captive.sh | 7 ++--
tests/test-dump-plugin.sh | 8 ++---
tests/test-foreground.sh | 4 +--
tests/test-help-plugin.sh | 3 +-
tests/test-ipv4.sh | 83 ++++++++++++++++++++++++++++++++++++++++++++
tests/test-random-sock.sh | 5 ++-
tests/test-single.sh | 3 +-
tests/test-start.sh | 5 ++-
tests/test-version-plugin.sh | 42 ++++++++++++++++++++++
tests/test-version.sh | 41 ++++++++++++++++++++++
13 files changed, 232 insertions(+), 20 deletions(-)
create mode 100644 tests/functions.sh
create mode 100755 tests/test-ipv4.sh
create mode 100755 tests/test-version-plugin.sh
create mode 100755 tests/test-version.sh
diff --git a/TODO b/TODO
index 30bf72e..6c5bb5b 100644
--- a/TODO
+++ b/TODO
@@ -1,3 +1,5 @@
+* Listen on specific interfaces or protocols (eg. only IPv6).
+
* Can we do language bindings using #!'s?
You would enter:
nbdkit foo [args]
diff --git a/tests/Makefile.am b/tests/Makefile.am
index 08fd02a..6f6cfa2 100644
--- a/tests/Makefile.am
+++ b/tests/Makefile.am
@@ -41,6 +41,7 @@ EXTRA_DIST = \
test-foreground.sh \
test-help.sh \
test-help-plugin.sh \
+ test-ipv4.sh \
test.pl \
test.py \
test_ocaml_plugin.ml \
@@ -48,20 +49,25 @@ EXTRA_DIST = \
test.rb \
test-single.sh \
test-start.sh \
- test-random-sock.sh
+ test-random-sock.sh \
+ test-version.sh \
+ test-version-plugin.sh
# Basic server command line and start-up tests.
TESTS = \
test-help.sh \
test-help-plugin.sh \
+ test-version.sh \
+ test-version-plugin.sh \
test-dump-config.sh \
test-dump-plugin.sh \
test-start.sh \
test-foreground.sh \
test-single.sh \
test-captive.sh \
- test-random-sock.sh
+ test-random-sock.sh \
+ test-ipv4.sh
# In-depth tests need libguestfs, since that is a convenient way to
# drive qemu.
diff --git a/tests/functions.sh b/tests/functions.sh
new file mode 100644
index 0000000..4ebddbb
--- /dev/null
+++ b/tests/functions.sh
@@ -0,0 +1,39 @@
+# nbdkit
+# Copyright (C) 2016 Red Hat Inc.
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are
+# met:
+#
+# * Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+#
+# * Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# * Neither the name of Red Hat nor the names of its contributors may be
+# used to endorse or promote products derived from this software without
+# specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY RED HAT AND CONTRIBUTORS ''AS IS'' AND
+# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+# THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+# PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL RED HAT OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
+# USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+# SUCH DAMAGE.
+
+# Some functions used by the tests.
+
+# Return the path to a named nbdkit plugin.
+nbdkit_plugin ()
+{
+ echo "../plugins/$1/.libs/nbdkit-$1-plugin.so"
+}
diff --git a/tests/test-captive.sh b/tests/test-captive.sh
index 5f18b5f..098024b 100755
--- a/tests/test-captive.sh
+++ b/tests/test-captive.sh
@@ -33,14 +33,15 @@
set -e
set -x
+source ./functions.sh
# Test nbdkit --run (captive nbdkit) option.
rm -f captive.sock captive.out
-../src/nbdkit -U captive.sock \
- ../plugins/example1/.libs/nbdkit-example1-plugin.so \
- --run 'sleep 5; echo nbd=$nbd; echo port=$port; echo socket=$unixsocket' > captive.out
+../src/nbdkit -U captive.sock `nbdkit_plugin example1` --run '
+ sleep 5; echo nbd=$nbd; echo port=$port; echo socket=$unixsocket
+ ' > captive.out
# Check the output.
if [ "$(cat captive.out)" != "nbd=nbd:unix:$(pwd)/captive.sock
diff --git a/tests/test-dump-plugin.sh b/tests/test-dump-plugin.sh
index 5cde25b..2517689 100755
--- a/tests/test-dump-plugin.sh
+++ b/tests/test-dump-plugin.sh
@@ -32,12 +32,10 @@
# SUCH DAMAGE.
set -e
+source ./functions.sh
-output="$(
- ../src/nbdkit \
- ../plugins/example1/.libs/nbdkit-example1-plugin.so --dump-plugin
- )"
-if [[ ! ( "$output" =~ ^path= ) ]]; then
+output="$(../src/nbdkit `nbdkit_plugin example1` --dump-plugin)"
+if [[ ! ( "$output" =~ name\=example1 ) ]]; then
echo "$0: unexpected output from nbdkit --dump-plugin"
echo "$output"
exit 1
diff --git a/tests/test-foreground.sh b/tests/test-foreground.sh
index daa733e..6d23bf4 100755
--- a/tests/test-foreground.sh
+++ b/tests/test-foreground.sh
@@ -33,14 +33,14 @@
set -e
set -x
+source ./functions.sh
# Test nbdkit -f option.
rm -f foreground.pid foreground.sock
../src/nbdkit \
- -f -P foreground.pid -U foreground.sock \
- ../plugins/example1/.libs/nbdkit-example1-plugin.so &
+ -f -P foreground.pid -U foreground.sock `nbdkit_plugin example1` &
bg_pid=$!
# We may have to wait a short time for the pid file to appear.
diff --git a/tests/test-help-plugin.sh b/tests/test-help-plugin.sh
index dba1028..92bb277 100755
--- a/tests/test-help-plugin.sh
+++ b/tests/test-help-plugin.sh
@@ -32,8 +32,9 @@
# SUCH DAMAGE.
set -e
+source ./functions.sh
-output="$(../src/nbdkit ../plugins/file/.libs/nbdkit-file-plugin.so --help)"
+output="$(../src/nbdkit `nbdkit_plugin file` --help)"
if [[ ! ( "$output" =~ "nbdkit file plugin" ) ]]; then
echo "$0: unexpected output from nbdkit file --help"
echo "$output"
diff --git a/tests/test-ipv4.sh b/tests/test-ipv4.sh
new file mode 100755
index 0000000..8eda61c
--- /dev/null
+++ b/tests/test-ipv4.sh
@@ -0,0 +1,83 @@
+#!/bin/bash -
+# nbdkit
+# Copyright (C) 2016 Red Hat Inc.
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are
+# met:
+#
+# * Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+#
+# * Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# * Neither the name of Red Hat nor the names of its contributors may be
+# used to endorse or promote products derived from this software without
+# specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY RED HAT AND CONTRIBUTORS ''AS IS'' AND
+# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+# THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+# PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL RED HAT OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
+# USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+# SUCH DAMAGE.
+
+# Every other test uses a Unix domain socket. This tests nbdkit over
+# IPv4 localhost connections.
+#
+# XXX We should be able to test "just IPv6". However there is
+# currently no option to listen only on particular interfaces.
+
+set -e
+source ./functions.sh
+
+# Don't fail if certain commands aren't available.
+if ! ss --version; then
+ echo "$0: 'ss' command not available"
+ exit 77
+fi
+if ! socat -h; then
+ echo "$0: 'socat' command not available"
+ exit 77
+fi
+
+# Find an unused port to listen on.
+for port in `seq 49152 65535`; do
+ if ! ss -ltn | grep -sqE ":$port\b"; then break; fi
+done
+echo picked unused port $port
+
+../src/nbdkit -P ipv4.pid -p $port `nbdkit_plugin example1`
+
+# We may have to wait a short time for the pid file to appear.
+for i in `seq 1 10`; do
+ if test -f ipv4.pid; then
+ break
+ fi
+ sleep 1
+done
+if ! test -f ipv4.pid; then
+ echo "$0: PID file was not created"
+ exit 1
+fi
+
+pid="$(cat ipv4.pid)"
+
+# Check the process exists.
+kill -s 0 $pid
+
+# Check we can connect to the socket.
+socat TCP:localhost:$port STDIO </dev/null
+
+# Kill the process.
+kill $pid
+rm ipv4.pid
diff --git a/tests/test-random-sock.sh b/tests/test-random-sock.sh
index 0a3a13e..a4c58d3 100755
--- a/tests/test-random-sock.sh
+++ b/tests/test-random-sock.sh
@@ -33,9 +33,8 @@
set -e
set -x
+source ./functions.sh
# Test nbdkit -U - + captive nbdkit.
-../src/nbdkit -U - \
- ../plugins/example1/.libs/nbdkit-example1-plugin.so \
- --run 'sleep 5'
+../src/nbdkit -U - `nbdkit_plugin example1` --run 'sleep 5'
diff --git a/tests/test-single.sh b/tests/test-single.sh
index ab0827d..a06ea5d 100755
--- a/tests/test-single.sh
+++ b/tests/test-single.sh
@@ -33,8 +33,9 @@
set -e
set -x
+source ./functions.sh
# Test nbdkit -s option.
# XXX Not sure what is a really good test of this.
-../src/nbdkit -s ../plugins/example1/.libs/nbdkit-example1-plugin.so </dev/null
+../src/nbdkit -s `nbdkit_plugin example1` </dev/null
diff --git a/tests/test-start.sh b/tests/test-start.sh
index 7422040..6041cd4 100755
--- a/tests/test-start.sh
+++ b/tests/test-start.sh
@@ -33,15 +33,14 @@
set -e
set -x
+source ./functions.sh
# Test nbdkit starts up, forks in the background, writes a PID file,
# and can be killed.
rm -f start.pid start.sock
-../src/nbdkit \
- -P start.pid -U start.sock \
- ../plugins/example1/.libs/nbdkit-example1-plugin.so
+../src/nbdkit -P start.pid -U start.sock `nbdkit_plugin example1`
# We may have to wait a short time for the pid file to appear.
for i in `seq 1 10`; do
diff --git a/tests/test-version-plugin.sh b/tests/test-version-plugin.sh
new file mode 100755
index 0000000..da99dbf
--- /dev/null
+++ b/tests/test-version-plugin.sh
@@ -0,0 +1,42 @@
+#!/bin/bash -
+# nbdkit
+# Copyright (C) 2016 Red Hat Inc.
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are
+# met:
+#
+# * Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+#
+# * Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# * Neither the name of Red Hat nor the names of its contributors may be
+# used to endorse or promote products derived from this software without
+# specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY RED HAT AND CONTRIBUTORS ''AS IS'' AND
+# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+# THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+# PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL RED HAT OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
+# USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+# SUCH DAMAGE.
+
+set -e
+source ./functions.sh
+
+output="$(../src/nbdkit `nbdkit_plugin file` --version)"
+if [[ ! ( "$output" =~ file\ ) ]]; then
+ echo "$0: unexpected output from nbdkit file --version"
+ echo "$output"
+ exit 1
+fi
diff --git a/tests/test-version.sh b/tests/test-version.sh
new file mode 100755
index 0000000..9a2e356
--- /dev/null
+++ b/tests/test-version.sh
@@ -0,0 +1,41 @@
+#!/bin/bash -
+# nbdkit
+# Copyright (C) 2016 Red Hat Inc.
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are
+# met:
+#
+# * Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+#
+# * Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# * Neither the name of Red Hat nor the names of its contributors may be
+# used to endorse or promote products derived from this software without
+# specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY RED HAT AND CONTRIBUTORS ''AS IS'' AND
+# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+# THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+# PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL RED HAT OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
+# USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+# SUCH DAMAGE.
+
+set -e
+
+output="$(../src/nbdkit --version)"
+if [[ ! ( "$output" =~ ^nbdkit\ 1\. ) ]]; then
+ echo "$0: unexpected output from nbdkit --version"
+ echo "$output"
+ exit 1
+fi
--
2.7.4