From 658289dc5191bf3471fe67285df094f8caf43a18 Mon Sep 17 00:00:00 2001 From: Danny Date: Thu, 19 Mar 2026 16:37:34 +0100 Subject: [PATCH] Fix 4 test failures from Proxmox VM report MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 1. converter panic (5 unit tests): "FIXME_CHECKSUM".repeat(4) is only 56 chars but was sliced to [..64], causing index-out-of-bounds panic. Both crux.rs and gentoo.rs converters now use "a".repeat(64) as the placeholder checksum instead. 2. dpack list/check exit code 1: these commands call PackageDb::open() which tries to create /var/lib/dpack/db — fails without root. Test runner now creates a temp dpack.conf pointing at a writable temp directory with repos symlinked from the project. Also added search and info smoke tests. 3. host.ovmf: not a code bug — edk2-ovmf just needs to be installed on the test VM (sudo pacman -S edk2-ovmf --noconfirm). Co-Authored-By: Claude Opus 4.6 (1M context) --- src/dpack/src/converter/crux.rs | 2 +- src/dpack/src/converter/gentoo.rs | 2 +- tests/proxmox/run-in-vm.sh | 51 +++++++++++++++++++++++++++++-- 3 files changed, 50 insertions(+), 5 deletions(-) diff --git a/src/dpack/src/converter/crux.rs b/src/dpack/src/converter/crux.rs index e4e6a07..3edb66f 100644 --- a/src/dpack/src/converter/crux.rs +++ b/src/dpack/src/converter/crux.rs @@ -119,7 +119,7 @@ pub fn parse_pkgfile(content: &str) -> Result { }, source: SourceInfo { url: template_url, - sha256: "FIXME_CHECKSUM".repeat(4)[..64].to_string(), // Placeholder + sha256: "a".repeat(64), // Placeholder git: String::new(), branch: String::new(), tag: String::new(), diff --git a/src/dpack/src/converter/gentoo.rs b/src/dpack/src/converter/gentoo.rs index 7a1b1e3..ec560c8 100644 --- a/src/dpack/src/converter/gentoo.rs +++ b/src/dpack/src/converter/gentoo.rs @@ -139,7 +139,7 @@ pub fn parse_ebuild(content: &str, filename: &str) -> Result }, source: SourceInfo { url: source_url, - sha256: "FIXME_CHECKSUM".repeat(4)[..64].to_string(), + sha256: "a".repeat(64), git: String::new(), branch: String::new(), tag: String::new(), diff --git a/tests/proxmox/run-in-vm.sh b/tests/proxmox/run-in-vm.sh index 605af99..ac94084 100755 --- a/tests/proxmox/run-in-vm.sh +++ b/tests/proxmox/run-in-vm.sh @@ -175,13 +175,58 @@ fi # Unit tests timed "dpack.unit_tests" cargo test || true -# CLI smoke test +# CLI smoke tests — use a temp config so we don't need root for /var/lib/dpack DPACK="${PROJECT_ROOT}/src/dpack/target/release/dpack" if [ -x "$DPACK" ]; then $DPACK --version &>/dev/null && record "dpack.cli.version" "pass" || record "dpack.cli.version" "fail" $DPACK --help &>/dev/null && record "dpack.cli.help" "pass" || record "dpack.cli.help" "fail" - $DPACK list &>/dev/null && record "dpack.cli.list" "pass" || record "dpack.cli.list" "fail" "Exit code $?" - $DPACK check &>/dev/null && record "dpack.cli.check" "pass" || record "dpack.cli.check" "fail" "Exit code $?" + + # Create a temp dpack config pointing at writable directories + DPACK_TEST_DIR=$(mktemp -d /tmp/dpack-test-XXXXX) + mkdir -p "${DPACK_TEST_DIR}"/{db,repos,sources,build} + # Symlink repos from the project + ln -sf "${PROJECT_ROOT}/src/repos/core" "${DPACK_TEST_DIR}/repos/core" + ln -sf "${PROJECT_ROOT}/src/repos/extra" "${DPACK_TEST_DIR}/repos/extra" + ln -sf "${PROJECT_ROOT}/src/repos/desktop" "${DPACK_TEST_DIR}/repos/desktop" + ln -sf "${PROJECT_ROOT}/src/repos/gaming" "${DPACK_TEST_DIR}/repos/gaming" + + cat > "${DPACK_TEST_DIR}/dpack.conf" << DCONF +[paths] +db_dir = "${DPACK_TEST_DIR}/db" +repo_dir = "${DPACK_TEST_DIR}/repos" +source_dir = "${DPACK_TEST_DIR}/sources" +build_dir = "${DPACK_TEST_DIR}/build" + +[[repos]] +name = "core" +path = "${DPACK_TEST_DIR}/repos/core" +priority = 0 + +[[repos]] +name = "extra" +path = "${DPACK_TEST_DIR}/repos/extra" +priority = 10 + +[[repos]] +name = "desktop" +path = "${DPACK_TEST_DIR}/repos/desktop" +priority = 20 + +[[repos]] +name = "gaming" +path = "${DPACK_TEST_DIR}/repos/gaming" +priority = 30 +DCONF + + DPACK_CMD="$DPACK --config ${DPACK_TEST_DIR}/dpack.conf" + $DPACK_CMD list &>/dev/null && record "dpack.cli.list" "pass" || record "dpack.cli.list" "fail" "Exit code $?" + $DPACK_CMD check &>/dev/null && record "dpack.cli.check" "pass" || record "dpack.cli.check" "fail" "Exit code $?" + + # Test search finds packages in our repos + $DPACK_CMD search zlib 2>/dev/null | grep -q "zlib" && record "dpack.cli.search" "pass" || record "dpack.cli.search" "fail" "zlib not found" + $DPACK_CMD info zlib 2>/dev/null | grep -q "Compression" && record "dpack.cli.info" "pass" || record "dpack.cli.info" "fail" "info zlib failed" + + rm -rf "${DPACK_TEST_DIR}" fi cd "${PROJECT_ROOT}"