diff --git a/.gitignore b/.gitignore index 4e25472..fa18e72 100644 --- a/.gitignore +++ b/.gitignore @@ -48,6 +48,10 @@ CTestTestfile.cmake *.iws *.ipr +# Test data +dehydrate_test_data/ +test_temp/ + # macOS .DS_Store .AppleDouble diff --git a/dehydrate/test/build_dehydrate_test.sh b/dehydrate/test/build_dehydrate_test.sh index 8ac2efa..155f9e6 100755 --- a/dehydrate/test/build_dehydrate_test.sh +++ b/dehydrate/test/build_dehydrate_test.sh @@ -42,15 +42,11 @@ docker run --rm \ exit 1 fi - # Quick architecture check - the binary should at least start - if ! timeout 5 ./dehydrate_test 2>/dev/null; then - # If it fails to run, check if it's an architecture mismatch - if file dehydrate_test | grep -q 'cannot execute'; then - echo 'ERROR: Binary architecture mismatch' - echo 'Host arch:' && uname -m - echo 'Binary info:' && file dehydrate_test - exit 1 - fi + # Quick architecture check - just verify the binary format + if ! file dehydrate_test | grep -q 'executable'; then + echo 'ERROR: Generated file is not an executable' + file dehydrate_test + exit 1 fi " @@ -62,5 +58,13 @@ if [ ! -f "./dehydrate_test" ]; then exit 1 fi +# Fix ownership of the binary (created by Docker as root) +if [ "$(stat -c %u ./dehydrate_test)" != "$(id -u)" ]; then + # Use Docker to change ownership to current user + docker run --rm -v "$PROJECT_DIR":/workdir -w /workdir/test \ + gitea.jde.nz/public/dropshell-build-base:latest \ + chown "$(id -u):$(id -g)" dehydrate_test +fi + # Run the test ./dehydrate_test \ No newline at end of file diff --git a/dehydrate/test/dehydrate_test b/dehydrate/test/dehydrate_test index e2c2c36..4a60708 100755 Binary files a/dehydrate/test/dehydrate_test and b/dehydrate/test/dehydrate_test differ diff --git a/dehydrate/test/dehydrate_test.cpp b/dehydrate/test/dehydrate_test.cpp index 4d0b2b1..3f02948 100644 --- a/dehydrate/test/dehydrate_test.cpp +++ b/dehydrate/test/dehydrate_test.cpp @@ -137,7 +137,25 @@ int main() { // Clean up any existing test data if (fs::exists(test_root)) { - fs::remove_all(test_root); + try { + fs::remove_all(test_root); + } catch (const fs::filesystem_error& e) { + // If removal fails due to permissions, try to fix permissions first + std::cerr << "Warning: Failed to remove test directory, attempting to fix permissions: " << e.what() << std::endl; + try { + // Try to make files writable + for (auto& entry : fs::recursive_directory_iterator(test_root)) { + if (entry.is_regular_file()) { + fs::permissions(entry.path(), fs::perms::owner_write, fs::perm_options::add); + } + } + fs::remove_all(test_root); + } catch (const fs::filesystem_error& e2) { + std::cerr << "Error: Could not clean up test directory: " << e2.what() << std::endl; + std::cerr << "Please manually remove: " << test_root << std::endl; + // Continue anyway - the test might still work + } + } } // Create directories