summaryrefslogtreecommitdiffstats
path: root/image-builder/test-image-builder.sh
blob: 525ea8f4814d8962f82426cf4e1e0f803c85c6ce (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
#!/bin/bash
#
# Copyright (C) 2026 Danilo M. <danix@danix.xyz>
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License version 2 as
# published by the Free Software Foundation.
#
# 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.
#
# Assert-based self-check for lib.sh pure logic. No docker, no network.
# Run: bash test-image-builder.sh
set -u
cd "$(dirname "$0")"
source ./lib.sh

pass=0 fail=0
check() { # DESC EXPECTED ACTUAL
    if [[ "$2" == "$3" ]]; then pass=$((pass+1));
    else fail=$((fail+1)); echo "FAIL: $1"; echo "  expected: [$2]"; echo "  actual:   [$3]"; fi
}
check_rc() { # DESC EXPECTED_RC ACTUAL_RC
    if [[ "$2" == "$3" ]]; then pass=$((pass+1));
    else fail=$((fail+1)); echo "FAIL: $1 (rc expected $2 got $3)"; fi
}

tmp="$(mktemp -d)"
trap 'rm -rf "$tmp"' EXIT

# --- mirror_path ---
check "mirror_path trailing slash" \
    "file:///mnt/nas/slackware64-current/PACKAGES.TXT" \
    "$(mirror_path 'file:///mnt/nas/' 'slackware64-current/PACKAGES.TXT')"
check "mirror_path no trailing slash" \
    "file:///mnt/nas/x/y" "$(mirror_path 'file:///mnt/nas' '/x/y')"

# --- is_local_mirror ---
is_local_mirror "file:///mnt/nas"; check_rc "is_local file://" 0 $?
is_local_mirror "/mnt/nas";        check_rc "is_local bare abs" 0 $?
is_local_mirror "https://x/y";     check_rc "is_local https" 1 $?

# --- strip_scheme ---
check "strip_scheme file://" "/mnt/nas" "$(strip_scheme 'file:///mnt/nas')"
check "strip_scheme bare" "/mnt/nas" "$(strip_scheme '/mnt/nas')"

# --- fetch: local file resolves ---
echo hello > "$tmp/src.txt"
fetch "file://$tmp/src.txt" "$tmp/dst.txt"; check_rc "fetch local ok" 0 $?
check "fetch local content" "hello" "$(cat "$tmp/dst.txt" 2>/dev/null)"

# --- fetch: missing local file errors ---
fetch "file://$tmp/nope.txt" "$tmp/x.txt"; check_rc "fetch local missing" 1 $?

# --- txz_hash: stable + content-sensitive ---
mkdir -p "$tmp/pkgs"
printf a > "$tmp/pkgs/sbopkg-1.txz"
printf b > "$tmp/pkgs/tools-1.txz"
h1="$(txz_hash "$tmp/pkgs")"
h2="$(txz_hash "$tmp/pkgs")"
check "txz_hash stable" "$h1" "$h2"
printf c > "$tmp/pkgs/tools-1.txz"   # change content
h3="$(txz_hash "$tmp/pkgs")"
check_rc "txz_hash changes on content" 0 "$([[ "$h1" != "$h3" ]] && echo 0 || echo 1)"
check "txz_hash empty dir" "" "$(txz_hash "$tmp/empty-nope")"

# --- require_mount: missing mount errors (subshell to catch _err exit) ---
MIRROR="file://$tmp/no-such-root"
( require_mount current ) 2>/dev/null; check_rc "require_mount missing" 1 $?
mkdir -p "$tmp/mnt/slackware64-current"
MIRROR="file://$tmp/mnt"
( require_mount current ) 2>/dev/null; check_rc "require_mount present" 0 $?
MIRROR="https://example/x"
( require_mount current ) 2>/dev/null; check_rc "require_mount http skips" 0 $?

echo "----"
echo "PASS: $pass  FAIL: $fail"
[[ "$fail" -eq 0 ]]