This commit is contained in:
143
getpkg/test.sh
143
getpkg/test.sh
@ -120,8 +120,95 @@ else
|
||||
print_test_result "Autocomplete command output" 1
|
||||
fi
|
||||
|
||||
# Test 4: Create command
|
||||
echo -e "\nTest 4: Create command"
|
||||
# Test 4: Hash command
|
||||
echo -e "\nTest 4: Hash command"
|
||||
|
||||
# Test 4a: Hash command with missing argument
|
||||
echo "Test 4a: Hash command error handling"
|
||||
HASH_ERROR_OUTPUT=$("$GETPKG" hash 2>&1) || true
|
||||
if [[ "$HASH_ERROR_OUTPUT" =~ "Usage: getpkg hash" ]]; then
|
||||
print_test_result "Hash command error handling (missing argument)" 0
|
||||
else
|
||||
print_test_result "Hash command error handling (missing argument)" 1
|
||||
fi
|
||||
|
||||
# Test 4b: Hash command with nonexistent file
|
||||
echo "Test 4b: Hash command with nonexistent file"
|
||||
HASH_NONEXISTENT_OUTPUT=$("$GETPKG" hash nonexistent_file.txt 2>&1) || true
|
||||
if [[ "$HASH_NONEXISTENT_OUTPUT" =~ "Error: Path does not exist" ]]; then
|
||||
print_test_result "Hash command error handling (nonexistent file)" 0
|
||||
else
|
||||
print_test_result "Hash command error handling (nonexistent file)" 1
|
||||
fi
|
||||
|
||||
# Test 4c: Hash command with test file
|
||||
echo "Test 4c: Hash command with test file"
|
||||
TEST_FILE="${TEST_DIR}/test_hash_file.txt"
|
||||
echo "test content for hashing" > "$TEST_FILE"
|
||||
HASH_FILE_OUTPUT=$("$GETPKG" hash "$TEST_FILE" 2>&1) || HASH_FILE_OUTPUT=""
|
||||
if [[ "$HASH_FILE_OUTPUT" =~ ^[0-9]+$ ]]; then
|
||||
print_test_result "Hash command with file (numeric output)" 0
|
||||
|
||||
# Test that the hash is consistent
|
||||
HASH_FILE_OUTPUT2=$("$GETPKG" hash "$TEST_FILE" 2>&1) || HASH_FILE_OUTPUT2=""
|
||||
if [ "$HASH_FILE_OUTPUT" = "$HASH_FILE_OUTPUT2" ]; then
|
||||
print_test_result "Hash command consistency (same file, same hash)" 0
|
||||
else
|
||||
print_test_result "Hash command consistency (same file, same hash)" 1
|
||||
fi
|
||||
else
|
||||
print_test_result "Hash command with file (numeric output)" 1
|
||||
print_test_result "Hash command consistency (same file, same hash)" 1
|
||||
fi
|
||||
|
||||
# Test 4d: Hash command with directory
|
||||
echo "Test 4d: Hash command with directory"
|
||||
TEST_HASH_DIR="${TEST_DIR}/test_hash_dir"
|
||||
mkdir -p "$TEST_HASH_DIR"
|
||||
echo "dir content 1" > "$TEST_HASH_DIR/file1.txt"
|
||||
echo "dir content 2" > "$TEST_HASH_DIR/file2.txt"
|
||||
HASH_DIR_OUTPUT=$("$GETPKG" hash "$TEST_HASH_DIR" 2>&1) || HASH_DIR_OUTPUT=""
|
||||
if [[ "$HASH_DIR_OUTPUT" =~ ^[0-9]+$ ]]; then
|
||||
print_test_result "Hash command with directory (numeric output)" 0
|
||||
|
||||
# Test that directory hash is different from file hash
|
||||
if [ "$HASH_DIR_OUTPUT" != "$HASH_FILE_OUTPUT" ]; then
|
||||
print_test_result "Hash command different for file vs directory" 0
|
||||
else
|
||||
print_test_result "Hash command different for file vs directory" 1
|
||||
fi
|
||||
else
|
||||
print_test_result "Hash command with directory (numeric output)" 1
|
||||
print_test_result "Hash command different for file vs directory" 1
|
||||
fi
|
||||
|
||||
# Test 4e: Hash command compatibility with tr (sos script format)
|
||||
echo "Test 4e: Hash command compatibility with tr command"
|
||||
LOCALHASH=$("$GETPKG" hash "$TEST_FILE" | tr -d '[:space:]') || LOCALHASH=""
|
||||
if [[ "$LOCALHASH" =~ ^[0-9]+$ ]] && [ ${#LOCALHASH} -gt 0 ]; then
|
||||
print_test_result "Hash command compatible with tr -d '[:space:]'" 0
|
||||
else
|
||||
print_test_result "Hash command compatible with tr -d '[:space:]'" 1
|
||||
fi
|
||||
|
||||
# Test 4f: Hash command appears in autocomplete
|
||||
echo "Test 4f: Hash command in autocomplete"
|
||||
if [[ "$AUTOCOMPLETE_OUTPUT" =~ hash ]]; then
|
||||
print_test_result "Hash command appears in autocomplete" 0
|
||||
else
|
||||
print_test_result "Hash command appears in autocomplete" 1
|
||||
fi
|
||||
|
||||
# Test 4g: Hash command appears in help
|
||||
echo "Test 4g: Hash command in help"
|
||||
if [[ "$HELP_OUTPUT" =~ hash.*file_or_directory ]] && [[ "$HELP_OUTPUT" =~ "Outputs raw hash value to stdout" ]]; then
|
||||
print_test_result "Hash command appears in help" 0
|
||||
else
|
||||
print_test_result "Hash command appears in help" 1
|
||||
fi
|
||||
|
||||
# Test 5: Create command
|
||||
echo -e "\nTest 5: Create command"
|
||||
CREATE_DIR="${TEST_DIR}/${TEST_TOOL_NAME}"
|
||||
timeout 3 "$GETPKG" create "$TEST_TOOL_NAME" "$CREATE_DIR" >/dev/null 2>&1 || true
|
||||
if [ -d "$CREATE_DIR" ] && [ -f "$CREATE_DIR/setup_script.sh" ]; then
|
||||
@ -130,8 +217,8 @@ else
|
||||
print_test_result "Create tool directory" 1
|
||||
fi
|
||||
|
||||
# Test 5: Create test tool binary
|
||||
echo -e "\nTest 5: Create test tool"
|
||||
# Test 6: Create test tool binary
|
||||
echo -e "\nTest 6: Create test tool"
|
||||
cat > "$CREATE_DIR/${TEST_TOOL_NAME}" << 'EOF'
|
||||
#!/bin/bash
|
||||
case "$1" in
|
||||
@ -156,15 +243,15 @@ else
|
||||
print_test_result "Create test tool binary" 1
|
||||
fi
|
||||
|
||||
# Test 5b: Test basic publish functionality
|
||||
echo -e "\nTest 5b: Testing basic publish command"
|
||||
# Test 6b: Test basic publish functionality
|
||||
echo -e "\nTest 6b: Testing basic publish command"
|
||||
# Test with a dummy token to see error message
|
||||
DUMMY_OUTPUT=$(timeout 3 "$GETPKG" publish "dummy:x86_64" "$CREATE_DIR" 2>&1 <<< "") || true
|
||||
echo "Dummy publish output: $DUMMY_OUTPUT"
|
||||
|
||||
# Test 6: Publish command (requires SOS_WRITE_TOKEN)
|
||||
# Test 7: Publish command (requires SOS_WRITE_TOKEN)
|
||||
if [ -n "${SOS_WRITE_TOKEN:-}" ]; then
|
||||
echo -e "\nTest 6: Publish command with ARCH"
|
||||
echo -e "\nTest 7: Publish command with ARCH"
|
||||
echo "SOS_WRITE_TOKEN is set: ${#SOS_WRITE_TOKEN} characters"
|
||||
echo "Publishing ${TEST_TOOL_NAME}:${TEST_ARCH} from $CREATE_DIR"
|
||||
echo "Directory contents:"
|
||||
@ -190,8 +277,8 @@ if [ -n "${SOS_WRITE_TOKEN:-}" ]; then
|
||||
PUBLISHED_HASH=$(echo "$PUBLISH_OUTPUT" | grep "Hash:" | cut -d' ' -f2)
|
||||
echo "Published hash: $PUBLISHED_HASH"
|
||||
|
||||
# Test 7: Check if published tool exists
|
||||
echo -e "\nTest 7: Check published tool exists"
|
||||
# Test 8: Check if published tool exists
|
||||
echo -e "\nTest 8: Check published tool exists"
|
||||
EXISTS_CHECK=$(curl -s "https://getpkg.xyz/exists/${TEST_TOOL_NAME}:${TEST_ARCH}" 2>/dev/null || echo "error")
|
||||
if [[ "$EXISTS_CHECK" != "error" ]] && [[ "$EXISTS_CHECK" != "false" ]]; then
|
||||
print_test_result "Published tool exists on server" 0
|
||||
@ -199,30 +286,30 @@ if [ -n "${SOS_WRITE_TOKEN:-}" ]; then
|
||||
print_test_result "Published tool exists on server" 1
|
||||
fi
|
||||
|
||||
# Test 8: Install command
|
||||
echo -e "\nTest 8: Install command"
|
||||
# Test 9: Install command
|
||||
echo -e "\nTest 9: Install command"
|
||||
INSTALL_OUTPUT=$(timeout 3 "$GETPKG" install "$TEST_TOOL_NAME" 2>&1) || INSTALL_OUTPUT=""
|
||||
if [[ "$INSTALL_OUTPUT" =~ Installed\ ${TEST_TOOL_NAME}\ successfully ]] || [[ "$INSTALL_OUTPUT" =~ ${TEST_TOOL_NAME}\ is\ already\ up\ to\ date ]]; then
|
||||
print_test_result "Install tool from getpkg.xyz" 0
|
||||
|
||||
# Test 9: Check installed files
|
||||
echo -e "\nTest 9: Check installed files"
|
||||
# Test 10: Check installed files
|
||||
echo -e "\nTest 10: Check installed files"
|
||||
if [ -f ~/.config/getpkg/"${TEST_TOOL_NAME}.json" ] && [ -d ~/.local/bin/getpkg/"${TEST_TOOL_NAME}" ]; then
|
||||
print_test_result "Tool files installed correctly" 0
|
||||
else
|
||||
print_test_result "Tool files installed correctly" 1
|
||||
fi
|
||||
|
||||
# Test 10: Check bashrc_getpkg modifications
|
||||
echo -e "\nTest 10: Check bashrc modifications"
|
||||
# Test 11: Check bashrc_getpkg modifications
|
||||
echo -e "\nTest 11: Check bashrc modifications"
|
||||
if [ -f ~/.bashrc_getpkg ] && grep -q "${TEST_TOOL_NAME}" ~/.bashrc_getpkg; then
|
||||
print_test_result "Bashrc modifications for PATH and autocomplete" 0
|
||||
else
|
||||
print_test_result "Bashrc modifications for PATH and autocomplete" 1
|
||||
fi
|
||||
|
||||
# Test 11: Direct tool name install (shortcut syntax)
|
||||
echo -e "\nTest 11: Direct tool install syntax"
|
||||
# Test 12: Direct tool name install (shortcut syntax)
|
||||
echo -e "\nTest 12: Direct tool install syntax"
|
||||
# First remove the tool
|
||||
rm -rf ~/.local/bin/getpkg/"${TEST_TOOL_NAME}"
|
||||
rm -f ~/.config/getpkg/"${TEST_TOOL_NAME}.json"
|
||||
@ -234,8 +321,8 @@ if [ -n "${SOS_WRITE_TOKEN:-}" ]; then
|
||||
print_test_result "Direct tool name install syntax" 1
|
||||
fi
|
||||
|
||||
# Test 12: Update already installed tool (should say up to date)
|
||||
echo -e "\nTest 12: Update check for installed tool"
|
||||
# Test 13: Update already installed tool (should say up to date)
|
||||
echo -e "\nTest 13: Update check for installed tool"
|
||||
UPDATE_OUTPUT=$(timeout 3 "$GETPKG" install "$TEST_TOOL_NAME" 2>&1) || UPDATE_OUTPUT=""
|
||||
if [[ "$UPDATE_OUTPUT" =~ ${TEST_TOOL_NAME}\ is\ already\ up\ to\ date ]]; then
|
||||
print_test_result "Update check recognizes up-to-date tool" 0
|
||||
@ -263,8 +350,8 @@ if [ -n "${SOS_WRITE_TOKEN:-}" ]; then
|
||||
print_test_result "Update check recognizes up-to-date tool" 1
|
||||
fi
|
||||
|
||||
# Test 12b: Publish without ARCH (for cross-platform tools)
|
||||
echo -e "\nTest 12b: Publish without ARCH"
|
||||
# Test 13b: Publish without ARCH (for cross-platform tools)
|
||||
echo -e "\nTest 13b: Publish without ARCH"
|
||||
TEST_TOOL_NOARCH="${TEST_TOOL_NAME}-noarch"
|
||||
mkdir -p "${TEST_DIR}/${TEST_TOOL_NOARCH}"
|
||||
cat > "${TEST_DIR}/${TEST_TOOL_NOARCH}/${TEST_TOOL_NOARCH}" << 'EOF'
|
||||
@ -293,8 +380,8 @@ EOF
|
||||
print_test_result "Publish tool without ARCH" 1
|
||||
fi
|
||||
|
||||
# Test 12c: Install universal tool (arch fallback)
|
||||
echo -e "\nTest 12c: Install universal tool (arch fallback)"
|
||||
# Test 13c: Install universal tool (arch fallback)
|
||||
echo -e "\nTest 13c: Install universal tool (arch fallback)"
|
||||
rm -rf ~/.config/getpkg/"${TEST_TOOL_NOARCH}.json" ~/.local/bin/getpkg/"${TEST_TOOL_NOARCH}" 2>/dev/null || true
|
||||
FALLBACK_INSTALL_OUTPUT=$(timeout 3 "$GETPKG" install "${TEST_TOOL_NOARCH}" 2>&1) || FALLBACK_INSTALL_OUTPUT=""
|
||||
if [[ "$FALLBACK_INSTALL_OUTPUT" =~ Arch-specific\ version\ not\ found,\ trying\ universal\ version ]] && [[ "$FALLBACK_INSTALL_OUTPUT" =~ Installed\ ${TEST_TOOL_NOARCH}\ successfully ]]; then
|
||||
@ -316,8 +403,8 @@ else
|
||||
echo "To run full tests, set SOS_WRITE_TOKEN environment variable"
|
||||
fi
|
||||
|
||||
# Test 13: Invalid tool name validation
|
||||
echo -e "\nTest 13: Invalid tool name validation"
|
||||
# Test 14: Invalid tool name validation
|
||||
echo -e "\nTest 14: Invalid tool name validation"
|
||||
INVALID_OUTPUT=$(timeout 3 "$GETPKG" install "../evil-tool" 2>&1)
|
||||
INVALID_EXIT_CODE=$?
|
||||
echo "Invalid tool output: $INVALID_OUTPUT"
|
||||
@ -328,9 +415,9 @@ else
|
||||
print_test_result "Invalid tool name rejection" 1
|
||||
fi
|
||||
|
||||
# Test 14: Update command (if we have tools installed)
|
||||
# Test 15: Update command (if we have tools installed)
|
||||
if [ -d ~/.config/getpkg ] && [ "$(find ~/.config/getpkg -name "*.json" -type f 2>/dev/null | wc -l)" -gt 0 ]; then
|
||||
echo -e "\nTest 14: Update command"
|
||||
echo -e "\nTest 15: Update command"
|
||||
UPDATE_ALL_OUTPUT=$(timeout 30 "$GETPKG" update 2>&1) || UPDATE_ALL_OUTPUT=""
|
||||
if [[ "$UPDATE_ALL_OUTPUT" =~ Update\ complete ]]; then
|
||||
print_test_result "Update all tools command" 0
|
||||
|
Reference in New Issue
Block a user