Path: blob/main/contrib/libarchive/tar/test/test_basic.c
39535 views
/*-1* SPDX-License-Identifier: BSD-2-Clause2*3* Copyright (c) 2003-2007 Tim Kientzle4* All rights reserved.5*/6#include "test.h"78static const char *9make_files(void)10{11FILE *f;1213/* File with 10 bytes content. */14f = fopen("file", "wb");15assert(f != NULL);16assertEqualInt(10, fwrite("123456789", 1, 10, f));17fclose(f);1819/* hardlink to above file. */20assertMakeHardlink("linkfile", "file");21assertIsHardlink("file", "linkfile");2223/* Symlink to above file. */24if (canSymlink())25assertMakeSymlink("symlink", "file", 0);2627/* Directory. */28assertMakeDir("dir", 0775);2930return canSymlink()31? "file linkfile symlink dir"32: "file linkfile dir";33}3435static void36verify_files(const char *target)37{38assertChdir(target);3940/* Regular file with 2 links. */41failure("%s", target);42assertIsReg("file", -1);43failure("%s", target);44assertFileSize("file", 10);45failure("%s", target);46assertFileContents("123456789", 10, "file");47failure("%s", target);48assertFileNLinks("file", 2);4950/* Another name for the same file. */51failure("%s", target);52assertIsReg("linkfile", -1);53failure("%s", target);54assertFileSize("linkfile", 10);55assertFileContents("123456789", 10, "linkfile");56assertFileNLinks("linkfile", 2);57assertIsHardlink("file", "linkfile");5859/* Symlink */60if (canSymlink())61assertIsSymlink("symlink", "file", 0);6263/* dir */64failure("%s", target);65assertIsDir("dir", 0775);66assertChdir("..");67}6869static void70run_tar(const char *target, const char *pack_options,71const char *unpack_options, const char *flist)72{73int r;7475assertMakeDir(target, 0775);7677/* Use the tar program to create an archive. */78r = systemf("%s cf - %s %s >%s/archive 2>%s/pack.err", testprog, pack_options, flist, target, target);79failure("Error invoking %s cf -%s", testprog, pack_options);80assertEqualInt(r, 0);8182assertChdir(target);8384/* Verify that nothing went to stderr. */85assertEmptyFile("pack.err");8687/*88* Use tar to unpack the archive into another directory.89*/90r = systemf("%s xf archive %s >unpack.out 2>unpack.err",91testprog, unpack_options);92failure("Error invoking %s xf archive %s", testprog, unpack_options);93assertEqualInt(r, 0);9495/* Verify that nothing went to stderr. */96assertEmptyFile("unpack.err");97assertChdir("..");98}99100DEFINE_TEST(test_basic)101{102const char *flist;103104assertUmask(0);105flist = make_files();106/* Archive/dearchive with a variety of options. */107run_tar("copy", "", "", flist);108verify_files("copy");109110run_tar("copy_ustar", "--format=ustar", "", flist);111verify_files("copy_ustar");112113/* tar doesn't handle cpio symlinks correctly */114/* run_tar("copy_odc", "--format=odc", ""); */115}116117118