tests: drop standalone salvage config smoke
All checks were successful
Source release / source-package (push) Successful in 50s

This commit is contained in:
Test
2026-05-31 12:26:52 +00:00
committed by Mario Fetka
parent bb3fa718b9
commit bf51da380f
2 changed files with 0 additions and 382 deletions

View File

@@ -63,29 +63,3 @@ else()
"Skipping salvage NCP delete smoke helper: ncpfs/libncp headers or library not found"
)
endif()
add_executable(salvage_config_smoke
salvage_config_smoke.c
${CMAKE_SOURCE_DIR}/src/nwsalvage.c
)
# nwsalvage.c now also contains the server-side delete hook. The config smoke
# only exercises the standalone helper surface, so let the linker discard the
# unreferenced server hook sections instead of requiring all nwconn objects.
set_target_properties(salvage_config_smoke PROPERTIES
COMPILE_FLAGS "-ffunction-sections -fdata-sections"
LINK_FLAGS "-Wl,--gc-sections"
)
target_include_directories(salvage_config_smoke PRIVATE
${CMAKE_SOURCE_DIR}/include
)
target_link_libraries(salvage_config_smoke yyjson)
add_custom_target(run_salvage_config_smoke ALL
COMMAND $<TARGET_FILE:salvage_config_smoke>
DEPENDS salvage_config_smoke
COMMENT "Running salvage config smoke helper"
VERBATIM
)

View File

@@ -1,356 +0,0 @@
/* Smoke test for the initial nwsalvage configuration helpers. */
#include "nwsalvage.h"
#include <errno.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <sys/stat.h>
#include <unistd.h>
struct fake_ini {
const char *enable_line;
const char *repositories_line;
};
static int fake_ini_getter(int entry, char *str, size_t strsize, void *data)
{
struct fake_ini *ini = data;
const char *line = NULL;
if (entry == NWSALVAGE_ENABLE_INI_SECTION)
line = ini->enable_line;
else if (entry == NWSALVAGE_REPOSITORY_INI_SECTION)
line = ini->repositories_line;
if (!line)
return(0);
if (snprintf(str, strsize, "%s", line) < 0)
return(0);
return(1);
}
static int file_contains(const char *path, const char *needle)
{
FILE *fp = fopen(path, "r");
char buffer[4096];
size_t n;
if (!fp)
return(0);
n = fread(buffer, 1, sizeof(buffer) - 1, fp);
fclose(fp);
buffer[n] = '\0';
return(strstr(buffer, needle) != NULL);
}
static void remove_test_tree(const char *root)
{
char cmd[512];
if (!root || !*root)
return;
snprintf(cmd, sizeof(cmd), "rm -rf '%s'", root);
system(cmd);
}
static int expect_true(int condition, const char *message)
{
if (!condition) {
fprintf(stderr, "FAIL: %s\n", message);
return(1);
}
return(0);
}
int main(void)
{
struct nwsalvage_config config;
char path[NWSALVAGE_PATH_MAX];
char root[NWSALVAGE_PATH_MAX];
struct fake_ini ini;
int failures = 0;
failures += expect_true(nwsalvage_config_defaults(&config) == 0,
"defaults are accepted");
failures += expect_true(config.enabled == 1,
"salvage defaults to enabled");
failures += expect_true(!strcmp(config.recycle_repository, ".recycle"),
"default recycle repository name");
failures += expect_true(!strcmp(config.metadata_repository, ".salvage"),
"default metadata repository name");
failures += expect_true(nwsalvage_config_parse_repositories(
&config, " .recycle .salvage ") == 0,
"section 49 default line parses");
failures += expect_true(!strcmp(config.recycle_repository, ".recycle"),
"parsed recycle repository name");
failures += expect_true(!strcmp(config.metadata_repository, ".salvage"),
"parsed metadata repository name");
failures += expect_true(nwsalvage_config_parse_repositories(
&config, "recycle salvage") == 0,
"custom repository names parse");
failures += expect_true(!strcmp(config.recycle_repository, "recycle"),
"custom recycle repository name");
failures += expect_true(!strcmp(config.metadata_repository, "salvage"),
"custom metadata repository name");
failures += expect_true(nwsalvage_config_parse_repositories(
&config, "bad/name .salvage") < 0,
"repository names reject slash components");
failures += expect_true(nwsalvage_config_parse_repositories(
&config, ".recycle") < 0,
"repository line requires two names");
failures += expect_true(nwsalvage_config_parse_repositories(
&config, ".recycle .salvage extra") < 0,
"repository line rejects extra tokens");
failures += expect_true(nwsalvage_config_parse_enabled(&config, "0") == 0,
"section 48 parses disabled value");
failures += expect_true(config.enabled == 0,
"section 48 disables salvage");
failures += expect_true(nwsalvage_config_parse_enabled(&config, "1") == 0,
"section 48 parses enabled value");
failures += expect_true(config.enabled == 1,
"section 48 enables salvage");
failures += expect_true(nwsalvage_config_parse_enabled(&config, "bad") < 0,
"section 48 rejects invalid value");
ini.enable_line = "0";
ini.repositories_line = "trash meta";
failures += expect_true(nwsalvage_config_load_from_ini(
&config, fake_ini_getter, &ini) == 0,
"server-style ini getter loads salvage config");
failures += expect_true(config.enabled == 0,
"ini getter applied section 48");
failures += expect_true(!strcmp(config.recycle_repository, "trash"),
"ini getter applied section 49 recycle name");
failures += expect_true(!strcmp(config.metadata_repository, "meta"),
"ini getter applied section 49 metadata name");
ini.enable_line = NULL;
ini.repositories_line = NULL;
failures += expect_true(nwsalvage_config_load_from_ini(
&config, fake_ini_getter, &ini) == 0,
"missing ini sections keep defaults");
failures += expect_true(config.enabled == 1,
"missing section 48 keeps default enabled");
failures += expect_true(!strcmp(config.recycle_repository, ".recycle"),
"missing section 49 keeps default recycle name");
failures += expect_true(!strcmp(config.metadata_repository, ".salvage"),
"missing section 49 keeps default metadata name");
failures += expect_true(nwsalvage_config_defaults(&config) == 0,
"defaults reset after custom repository parse");
failures += expect_true(nwsalvage_build_recycle_path(
path, sizeof(path), &config, "/srv/nw/SYS",
"SUPERVISOR/PUBLIC/PMDFLTS.INI") == 0,
"recycle path builds");
failures += expect_true(!strcmp(path,
"/srv/nw/SYS/.recycle/SUPERVISOR/PUBLIC/PMDFLTS.INI"),
"recycle path layout");
failures += expect_true(nwsalvage_build_metadata_path(
path, sizeof(path), &config, "/srv/nw/SYS/",
"SUPERVISOR/PUBLIC/PMDFLTS.INI") == 0,
"metadata path builds with trailing volume slash");
failures += expect_true(!strcmp(path,
"/srv/nw/SYS/.salvage/SUPERVISOR/PUBLIC/PMDFLTS.INI.json"),
"metadata path layout");
failures += expect_true(nwsalvage_build_recycle_relative_path(
path, sizeof(path), &config,
"SUPERVISOR/PUBLIC/PMDFLTS.INI") == 0,
"recycle relative path builds");
failures += expect_true(!strcmp(path,
".recycle/SUPERVISOR/PUBLIC/PMDFLTS.INI"),
"recycle relative path layout");
failures += expect_true(nwsalvage_build_metadata_relative_path(
path, sizeof(path), &config,
"SUPERVISOR/PUBLIC/PMDFLTS.INI") == 0,
"metadata relative path builds");
failures += expect_true(!strcmp(path,
".salvage/SUPERVISOR/PUBLIC/PMDFLTS.INI.json"),
"metadata relative path layout");
failures += expect_true(nwsalvage_build_recycle_path(
path, sizeof(path), &config, "/srv/nw/SYS",
"../PMDFLTS.INI") < 0,
"relative path rejects dot-dot components");
failures += expect_true(nwsalvage_build_recycle_path(
path, sizeof(path), &config, "/srv/nw/SYS",
"/SUPERVISOR/PUBLIC/PMDFLTS.INI") < 0,
"relative path rejects absolute input");
failures += expect_true(nwsalvage_build_recycle_path(
path, sizeof(path), &config, "/srv/nw/SYS",
"SUPERVISOR\\PUBLIC\\PMDFLTS.INI") < 0,
"relative path rejects unnormalised backslashes");
failures += expect_true(nwsalvage_build_metadata_path(
path, 16, &config, "/srv/nw/SYS",
"SUPERVISOR/PUBLIC/PMDFLTS.INI") < 0,
"path builder rejects too-small buffers");
snprintf(root, sizeof(root), "/tmp/mars_nwe_salvage_smoke_%ld",
(long)getpid());
remove_test_tree(root);
failures += expect_true(mkdir(root, 0700) == 0,
"temporary salvage smoke root creates");
failures += expect_true(nwsalvage_build_metadata_path(
path, sizeof(path), &config, root,
"SUPERVISOR/PUBLIC/PMD\"FLTS.INI") == 0,
"metadata path builds for escaped JSON test");
if (!failures) {
struct nwsalvage_deleted_entry deleted_entry;
struct nwsalvage_metadata_entry metadata_entry;
memset(&deleted_entry, 0, sizeof(deleted_entry));
deleted_entry.volume_name = "SYS";
deleted_entry.deleted_by = "SUPERVISOR";
deleted_entry.deleted_at = 1780215322;
deleted_entry.original_path = "SYS:PUBLIC/PMD\"FLTS.INI";
deleted_entry.original_parent_entry_id = 4;
deleted_entry.original_name = "PMD\"FLTS.INI";
deleted_entry.recycle_relative_path = ".recycle/SUPERVISOR/PUBLIC/PMD\"FLTS.INI";
deleted_entry.salvage_relative_path = ".salvage/SUPERVISOR/PUBLIC/PMD\"FLTS.INI.json";
deleted_entry.attributes = 8192;
deleted_entry.mode = 0100644;
deleted_entry.size = 12345;
deleted_entry.atime = 1700000000;
deleted_entry.mtime = 1700000000;
deleted_entry.ctime = 1700000000;
deleted_entry.finder_info_hex =
"0000000000000000000000000000000000000000000000000000000000000000";
deleted_entry.afp_entry_id = "0x2cc1243d";
deleted_entry.afp_attributes = 0x0600;
deleted_entry.resource_fork_size = 0;
deleted_entry.netware_archive_flags = 0x07;
deleted_entry.netware_archive_date = 0x5821;
deleted_entry.netware_archive_time = 0x6c40;
deleted_entry.netware_archiver_id = 0x01020304;
deleted_entry.netware_fileinfo_flags = 0x0f;
deleted_entry.netware_create_date = 0x5820;
deleted_entry.netware_create_time = 0x6b20;
deleted_entry.netware_creator_id = 0x00000001;
deleted_entry.netware_modifier_id = 0x00000002;
deleted_entry.inherited_rights_mask = 0x01ff;
deleted_entry.trustee_count = 2;
deleted_entry.trustees[0].object_id = 0x00000001;
deleted_entry.trustees[0].rights = 0x01ff;
deleted_entry.trustees[1].object_id = 0x01020304;
deleted_entry.trustees[1].rights = 0x0041;
failures += expect_true(nwsalvage_write_metadata(path, &deleted_entry) == 0,
"metadata writer creates parent dirs and JSON");
failures += expect_true(file_contains(path, "\"version\": 1"),
"metadata JSON contains version");
failures += expect_true(file_contains(path, "\"source\": \"mars_nwe\""),
"metadata JSON contains source");
failures += expect_true(file_contains(path, "\"volume\": \"SYS\""),
"metadata JSON contains volume");
failures += expect_true(file_contains(path, "PMD\\\"FLTS.INI"),
"metadata JSON escapes quotes");
failures += expect_true(file_contains(path, "\"original_parent_entry_id\": 4"),
"metadata JSON contains parent entry id");
failures += expect_true(file_contains(path, "\"recycle_relative_path\":"),
"metadata JSON contains recycle relative path");
failures += expect_true(file_contains(path, "\"finder_info_hex\":"),
"metadata JSON contains Finder info");
failures += expect_true(file_contains(path, "\"afp_entry_id\": \"0x2cc1243d\""),
"metadata JSON contains AFP entry id");
failures += expect_true(file_contains(path, "\"afp_attributes\": 1536"),
"metadata JSON contains AFP xattr attributes");
failures += expect_true(file_contains(path, "\"netware_archive_flags\": 7"),
"metadata JSON contains NetWare archive xattr flags");
failures += expect_true(file_contains(path, "\"netware_fileinfo_flags\": 15"),
"metadata JSON contains NetWare fileinfo xattr flags");
failures += expect_true(file_contains(path, "\"inherited_rights_mask\": 511"),
"metadata JSON contains trustee inherited rights mask");
failures += expect_true(file_contains(path, "\"trustees\":"),
"metadata JSON contains trustee rights array");
failures += expect_true(file_contains(path, "\"object_id\": 16909060"),
"metadata JSON contains trustee object id");
failures += expect_true(file_contains(path, "\"attributes\": 8192"),
"metadata JSON contains attributes");
failures += expect_true(nwsalvage_read_metadata(path, &metadata_entry) == 0,
"metadata reader parses JSON");
failures += expect_true(!strcmp(metadata_entry.volume_name, "SYS"),
"metadata reader returns volume");
failures += expect_true(!strcmp(metadata_entry.deleted_by, "SUPERVISOR"),
"metadata reader returns deleted user");
failures += expect_true(metadata_entry.deleted_at == 1780215322,
"metadata reader returns deleted time");
failures += expect_true(!strcmp(metadata_entry.original_path,
"SYS:PUBLIC/PMD\"FLTS.INI"),
"metadata reader returns original path");
failures += expect_true(metadata_entry.original_parent_entry_id == 4,
"metadata reader returns parent entry id");
failures += expect_true(!strcmp(metadata_entry.original_name,
"PMD\"FLTS.INI"),
"metadata reader returns original name");
failures += expect_true(!strcmp(metadata_entry.recycle_relative_path,
".recycle/SUPERVISOR/PUBLIC/PMD\"FLTS.INI"),
"metadata reader returns recycle relative path");
failures += expect_true(!strcmp(metadata_entry.salvage_relative_path,
".salvage/SUPERVISOR/PUBLIC/PMD\"FLTS.INI.json"),
"metadata reader returns salvage relative path");
failures += expect_true(metadata_entry.attributes == 8192,
"metadata reader returns attributes");
failures += expect_true(metadata_entry.size == 12345,
"metadata reader returns size");
failures += expect_true(metadata_entry.atime == 1700000000,
"metadata reader returns atime");
failures += expect_true(metadata_entry.mtime == 1700000000,
"metadata reader returns mtime");
failures += expect_true(metadata_entry.ctime == 1700000000,
"metadata reader returns ctime");
failures += expect_true(!strcmp(metadata_entry.finder_info_hex,
"0000000000000000000000000000000000000000000000000000000000000000"),
"metadata reader returns Finder info");
failures += expect_true(!strcmp(metadata_entry.afp_entry_id, "0x2cc1243d"),
"metadata reader returns AFP entry id");
failures += expect_true(metadata_entry.afp_attributes == 0x0600,
"metadata reader returns AFP attributes");
failures += expect_true(metadata_entry.resource_fork_size == 0,
"metadata reader returns resource fork size");
failures += expect_true(metadata_entry.netware_archive_flags == 0x07,
"metadata reader returns NetWare archive flags");
failures += expect_true(metadata_entry.netware_archive_date == 0x5821,
"metadata reader returns NetWare archive date");
failures += expect_true(metadata_entry.netware_archive_time == 0x6c40,
"metadata reader returns NetWare archive time");
failures += expect_true(metadata_entry.netware_archiver_id == 0x01020304,
"metadata reader returns NetWare archiver id");
failures += expect_true(metadata_entry.netware_fileinfo_flags == 0x0f,
"metadata reader returns NetWare fileinfo flags");
failures += expect_true(metadata_entry.netware_create_date == 0x5820,
"metadata reader returns NetWare create date");
failures += expect_true(metadata_entry.netware_create_time == 0x6b20,
"metadata reader returns NetWare create time");
failures += expect_true(metadata_entry.netware_creator_id == 0x00000001,
"metadata reader returns NetWare creator id");
failures += expect_true(metadata_entry.netware_modifier_id == 0x00000002,
"metadata reader returns NetWare modifier id");
failures += expect_true(metadata_entry.inherited_rights_mask == 0x01ff,
"metadata reader returns trustee inherited rights mask");
failures += expect_true(metadata_entry.trustee_count == 2,
"metadata reader returns trustee count");
failures += expect_true(metadata_entry.trustees[0].object_id == 0x00000001,
"metadata reader returns first trustee object id");
failures += expect_true(metadata_entry.trustees[0].rights == 0x01ff,
"metadata reader returns first trustee rights");
failures += expect_true(metadata_entry.trustees[1].object_id == 0x01020304,
"metadata reader returns second trustee object id");
failures += expect_true(metadata_entry.trustees[1].rights == 0x0041,
"metadata reader returns second trustee rights");
}
remove_test_tree(root);
if (failures)
return(1);
puts("salvage config smoke passed");
return(0);
}