summaryrefslogtreecommitdiffstats
path: root/tests
diff options
context:
space:
mode:
authorRichard W.M. Jones <rjones@redhat.com>2012-08-04 14:37:46 +0100
committerRichard W.M. Jones <rjones@redhat.com>2012-08-11 09:28:58 +0100
commit198cc630f0634fa318c6943f8de6706951701250 (patch)
treea7a392f2d8731ac8e31248ba1bdf3511f82da21d /tests
parenta05623cd71fe4f179c9fd61a1a3e327c35290e56 (diff)
downloadlibguestfs-198cc630f0634fa318c6943f8de6706951701250.tar.gz
libguestfs-198cc630f0634fa318c6943f8de6706951701250.tar.xz
libguestfs-198cc630f0634fa318c6943f8de6706951701250.zip
New APIs: rsync, rsync-in, rsync-out
Implement rsync.
Diffstat (limited to 'tests')
-rw-r--r--tests/rsync/Makefile.am26
-rwxr-xr-xtests/rsync/test-rsync.sh100
2 files changed, 126 insertions, 0 deletions
diff --git a/tests/rsync/Makefile.am b/tests/rsync/Makefile.am
new file mode 100644
index 00000000..41bbf4d8
--- /dev/null
+++ b/tests/rsync/Makefile.am
@@ -0,0 +1,26 @@
+# libguestfs
+# Copyright (C) 2009-2012 Red Hat Inc.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+
+include $(top_srcdir)/subdir-rules.mk
+
+TESTS = \
+ test-rsync.sh
+
+TESTS_ENVIRONMENT = $(top_builddir)/run --test
+
+EXTRA_DIST = \
+ $(TESTS)
diff --git a/tests/rsync/test-rsync.sh b/tests/rsync/test-rsync.sh
new file mode 100755
index 00000000..e7f62f98
--- /dev/null
+++ b/tests/rsync/test-rsync.sh
@@ -0,0 +1,100 @@
+#!/bin/bash -
+# libguestfs
+# Copyright (C) 2012 Red Hat Inc.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+
+# Test rsync by copying a local directory using an involved and
+# unrealistic method.
+
+unset CDPATH
+set -e
+
+guestfish=../../fish/guestfish
+
+# Check we have the rsync command.
+if ! rsync --help >/dev/null 2>&1; then
+ echo "$0: skipping test because local rsync command is not available"
+ exit 77
+fi
+
+# If rsync is not available, bail.
+if ! $guestfish -a /dev/null run : available rsync; then
+ echo "$0: skipping test because rsync is not available in the appliance"
+ exit 77
+fi
+
+pwd="$(pwd)"
+datadir="$(cd ../../tests/data && pwd)"
+
+rm -rf tmp
+mkdir tmp
+
+# rsync must listen on a port, but we want tests to be able to
+# run in parallel. Try to choose a random-ish port number (XXX).
+port="$(awk 'BEGIN{srand(); print 65000+int(500*rand())}' </dev/null)"
+
+# Write an rsync daemon config file.
+cat > rsyncd.conf <<EOF
+address = localhost
+port = $port
+pid file = $pwd/rsyncd.pid
+[src]
+ path = $datadir
+ comment = source
+ use chroot = false
+ read only = true
+[dest]
+ path = $pwd/tmp
+ comment = destination
+ use chroot = false
+ read only = false
+EOF
+
+# Start a local rsync daemon.
+rsync --daemon --config=rsyncd.conf
+
+function cleanup ()
+{
+ kill `cat rsyncd.pid`
+}
+trap cleanup INT TERM QUIT EXIT
+
+# XXX
+ip=169.254.2.2
+user="$(id -un)"
+
+$guestfish --network -N fs -m /dev/sda1 <<EOF
+mkdir /dir1
+rsync-in "rsync://$user@$ip:$port/src/" /dir1/ archive:true
+mkdir /dir2
+rsync /dir1/ /dir2/ archive:true
+rsync-out /dir2/ "rsync://$user@$ip:$port/dest/" archive:true
+EOF
+
+# Compare test data to copied data.
+# XXX Because we used the archive flag, dates must be preserved.
+
+if [ ! -f tmp/100kallnewlines ] || \
+ [ ! -f tmp/bin-x86_64-dynamic ] || \
+ [ ! -f tmp/initrd-x86_64.img.gz ] || \
+ [ ! -f tmp/mbr-ext2-empty.img.gz ]; then
+ echo "$0: some files failed to copy"
+ exit 1
+fi
+
+rm -r tmp
+rm test1.img
+rm rsyncd.conf