]> git.ipfire.org Git - thirdparty/libarchive.git/commitdiff
Add a test for basic -r operation.
authorTim Kientzle <kientzle@gmail.com>
Fri, 17 Jul 2009 03:49:55 +0000 (23:49 -0400)
committerTim Kientzle <kientzle@gmail.com>
Fri, 17 Jul 2009 03:49:55 +0000 (23:49 -0400)
SVN-Revision: 1225

Makefile.am
tar/test/CMakeLists.txt
tar/test/Makefile
tar/test/test_option_r.c [new file with mode: 0644]

index f32b889eff88d363607a1e9d6e5962e22322b704..3517da4a62d4d3a3de235bb2535fbe43fdf0d924 100644 (file)
@@ -433,6 +433,7 @@ bsdtar_test_SOURCES=                                                \
        tar/test/test_help.c                                    \
        tar/test/test_option_T_upper.c                          \
        tar/test/test_option_q.c                                \
+       tar/test/test_option_r.c                                \
        tar/test/test_option_s.c                                \
        tar/test/test_patterns.c                                \
        tar/test/test_stdio.c                                   \
index bc05e9e2097b3043fe7f86f3deb5a2a6c4cc8e89..4f4391bd9f442a4f92ca66dcf02611b07db1adff 100644 (file)
@@ -15,6 +15,7 @@ IF(ENABLE_TAR AND ENABLE_TEST)
     test_help.c
     test_option_T_upper.c
     test_option_q.c
+    test_option_r.c
     test_option_s.c
     test_patterns.c
     test_stdio.c
index 31fa66279ed815bf9ffb691f7fc70d9fd757dac0..8410c1e964444b983f67da256eb4ca7e3c336952 100644 (file)
@@ -16,6 +16,7 @@ TESTS=        \
        test_help.c                             \
        test_option_T_upper.c                   \
        test_option_q.c                         \
+       test_option_r.c                         \
        test_option_s.c                         \
        test_patterns.c                         \
        test_stdio.c                            \
diff --git a/tar/test/test_option_r.c b/tar/test/test_option_r.c
new file mode 100644 (file)
index 0000000..c046200
--- /dev/null
@@ -0,0 +1,99 @@
+/*-
+ * Copyright (c) 2003-2007 Tim Kientzle
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. 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.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``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 THE AUTHOR(S) 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.
+ */
+#include "test.h"
+__FBSDID("$FreeBSD: src/usr.bin/tar/test/test_basic.c,v 1.2 2008/05/26 17:10:10 kientzle Exp $");
+
+
+DEFINE_TEST(test_option_r)
+{
+       char buff[15];
+       FILE *f;
+       int r;
+
+       /* Create a file */
+       f = fopen("f1", "w");
+       if (!assert(f != NULL))
+               return;
+       assertEqualInt(3, fwrite("abc", 1, 3, f));
+       fclose(f);
+
+       /* Archive that one file. */
+       r = systemf("%s cf archive.tar f1 >step1.out 2>step1.err", testprog);
+       failure("Error invoking %s cf archive.tar f1", testprog);
+       assertEqualInt(r, 0);
+
+       /* Verify that nothing went to stdout or stderr. */
+       assertEmptyFile("step1.out");
+       assertEmptyFile("step1.err");
+
+       /* Edit that file */
+       f = fopen("f1", "w");
+       if (!assert(f != NULL))
+               return;
+       assertEqualInt(3, fwrite("123", 1, 3, f));
+       fclose(f);
+
+       /* Update the archive. */
+       r = systemf("%s rf archive.tar f1 >step2.out 2>step2.err", testprog);
+       failure("Error invoking %s rf archive.tar f1", testprog);
+       assertEqualInt(r, 0);
+
+       /* Verify that nothing went to stderr. */
+       assertEmptyFile("step2.out");
+       assertEmptyFile("step2.err");
+
+       /* Unpack both items */
+       assertEqualInt(0, mkdir("step3", 0775));
+       assertEqualInt(0, chdir("step3"));
+       r = systemf("%s xf ../archive.tar", testprog);
+       failure("Error invoking %s xf archive.tar", testprog);
+       assertEqualInt(r, 0);
+
+       /* Verify that the second one overwrote the first. */
+       f = fopen("f1", "r");
+       if (assert(f != NULL)) {
+               assertEqualInt(3, fread(buff, 1, 3, f));
+               assertEqualMem(buff, "123", 3);
+               fclose(f);
+       }
+
+       /* Unpack just the first item.  (This also verifies that the
+       * 'r' update actually appended and didn't just overwrite.) */
+       assertEqualInt(0, chdir(".."));
+       assertEqualInt(0, mkdir("step4", 0775));
+       assertEqualInt(0, chdir("step4"));
+       r = systemf("%s xqf ../archive.tar f1", testprog);
+       failure("Error invoking %s xqf archive.tar f1", testprog);
+       assertEqualInt(r, 0);
+
+       /* Verify the first file got extracted. */
+       f = fopen("f1", "r");
+       if (assert(f != NULL)) {
+               assertEqualInt(3, fread(buff, 1, 3, f));
+               assertEqualMem(buff, "abc", 3);
+               fclose(f);
+       }
+
+}