diff options
author | Richard W.M. Jones <rjones@redhat.com> | 2012-08-04 14:37:46 +0100 |
---|---|---|
committer | Richard W.M. Jones <rjones@redhat.com> | 2012-08-11 09:28:58 +0100 |
commit | 198cc630f0634fa318c6943f8de6706951701250 (patch) | |
tree | a7a392f2d8731ac8e31248ba1bdf3511f82da21d /tests | |
parent | a05623cd71fe4f179c9fd61a1a3e327c35290e56 (diff) | |
download | libguestfs-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.am | 26 | ||||
-rwxr-xr-x | tests/rsync/test-rsync.sh | 100 |
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 |