54 lines
1.4 KiB
C
54 lines
1.4 KiB
C
/*
|
|
* SPDX-License-Identifier: BSD-2-Clause
|
|
*
|
|
* Copyright (c) 2026 Tobias Stoeckmann
|
|
* All rights reserved.
|
|
*/
|
|
#include "test.h"
|
|
|
|
/* Test symlinks */
|
|
DEFINE_TEST(test_symlink)
|
|
{
|
|
const char *reffile1 = "test_symlink_1.zip";
|
|
const char *reffile2 = "test_symlink_2.zip";
|
|
int r;
|
|
|
|
if (!canSymlink()) {
|
|
skipping("System cannot create symlinks.");
|
|
return;
|
|
}
|
|
|
|
assertUmask(0);
|
|
extract_reference_file(reffile1);
|
|
extract_reference_file(reffile2);
|
|
|
|
/* Extract first archive */
|
|
r = systemf("%s %s >test.out 2>test.err", testprog, reffile1);
|
|
assertEqualInt(0, r);
|
|
assertNonEmptyFile("test.out");
|
|
assertNonEmptyFile("test.err");
|
|
assertIsDir("dir", 0755);
|
|
assertIsSymlink("dlink", "dir", 1);
|
|
assertIsReg("file.txt", 0644);
|
|
assertIsSymlink("flink", "file.txt", 0);
|
|
assertFileNotExists("link.insecure");
|
|
|
|
/* Create dangling symlinks by deleting targets */
|
|
rmdir("dir");
|
|
unlink("file.txt");
|
|
assertFileNotExists("dir");
|
|
assertFileNotExists("file.txt");
|
|
assertIsSymlink("dlink", "dir", 1);
|
|
assertIsSymlink("flink", "file.txt", 0);
|
|
|
|
/* Extract second archive, overwriting dangling symlinks */
|
|
r = systemf("%s -o %s >test.out 2>test.err", testprog, reffile2);
|
|
assertEqualInt(0, r);
|
|
assertEmptyFile("test.out");
|
|
assertEmptyFile("test.err");
|
|
assertFileNotExists("dir");
|
|
assertIsDir("dlink", 0755);
|
|
assertTextFileContents("hello world\n", "dlink/file.txt");
|
|
assertIsReg("flink", 0644);
|
|
}
|