128 lines
3.9 KiB
Bash
Executable File
128 lines
3.9 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
set -euo pipefail
|
|
|
|
SCRIPT_DIR=$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)
|
|
URL="${1:-http://127.0.0.1:7703}"
|
|
|
|
# Use test tokens from environment or defaults
|
|
TOKEN="${TEST_TOKEN1:-t570H7DmK2VBfCwUmtFaUXyzVklL90E1}"
|
|
|
|
echo "Testing basic input validation at $URL"
|
|
echo "======================================"
|
|
|
|
PASS_COUNT=0
|
|
FAIL_COUNT=0
|
|
|
|
# Helper function to test an upload with expected result
|
|
test_upload() {
|
|
local test_name="$1"
|
|
local metadata="$2"
|
|
local expected_result="$3" # "success" or "error"
|
|
|
|
echo ""
|
|
echo "Test: $test_name"
|
|
|
|
# Create a temp file
|
|
local temp_file="/tmp/test_$$"
|
|
echo "test content" > "$temp_file"
|
|
|
|
# Perform upload with timeout
|
|
local response=$(curl -s --max-time 5 -X PUT \
|
|
-H "Authorization: Bearer $TOKEN" \
|
|
-F "file=@$temp_file" \
|
|
-F "metadata=$metadata" \
|
|
"$URL/upload" 2>&1)
|
|
|
|
rm -f "$temp_file"
|
|
|
|
local result=$(echo "$response" | jq -r '.result' 2>/dev/null || echo "parse_error")
|
|
|
|
if [ "$expected_result" = "error" ]; then
|
|
if [ "$result" = "error" ]; then
|
|
echo " ✓ Correctly rejected"
|
|
PASS_COUNT=$((PASS_COUNT + 1))
|
|
else
|
|
echo " ✗ FAILED: Expected rejection"
|
|
FAIL_COUNT=$((FAIL_COUNT + 1))
|
|
fi
|
|
else
|
|
if [ "$result" = "success" ]; then
|
|
echo " ✓ Correctly accepted"
|
|
PASS_COUNT=$((PASS_COUNT + 1))
|
|
else
|
|
echo " ✗ FAILED: Expected success"
|
|
FAIL_COUNT=$((FAIL_COUNT + 1))
|
|
fi
|
|
fi
|
|
}
|
|
|
|
echo ""
|
|
echo "Testing Label:Tag Validation"
|
|
echo "============================="
|
|
|
|
# Valid label:tag
|
|
test_upload "Valid label:tag" '{"labeltags":["test:v1"]}' "success"
|
|
|
|
# Invalid: missing colon
|
|
test_upload "Missing colon" '{"labeltags":["testv1"]}' "error"
|
|
|
|
# Invalid: empty label
|
|
test_upload "Empty label" '{"labeltags":[":v1"]}' "error"
|
|
|
|
# Invalid: empty tag
|
|
test_upload "Empty tag" '{"labeltags":["test:"]}' "error"
|
|
|
|
# Invalid: special characters
|
|
test_upload "Invalid characters" '{"labeltags":["test@#$:v1"]}' "error"
|
|
|
|
# Invalid: starts with non-alphanumeric
|
|
test_upload "Starts with dash" '{"labeltags":["-test:v1"]}' "error"
|
|
|
|
# Valid: with allowed special chars
|
|
test_upload "Valid special chars" '{"labeltags":["test_project-1.0:v1"]}' "success"
|
|
|
|
# Invalid: too long label (>255 chars) - simplified version (256 chars)
|
|
LONG_STR="aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
|
|
test_upload "Label too long" "{\"labeltags\":[\"${LONG_STR}:v1\"]}" "error"
|
|
|
|
# Invalid: duplicate labeltags
|
|
test_upload "Duplicate labeltags" '{"labeltags":["test:v1","test:v1"]}' "error"
|
|
|
|
echo ""
|
|
echo "Testing Metadata Validation"
|
|
echo "============================"
|
|
|
|
# Valid metadata with various fields
|
|
test_upload "Valid metadata" '{"labeltags":["test:meta1"],"custom_field":"value","number":123}' "success"
|
|
|
|
# Invalid: field name with invalid characters
|
|
test_upload "Invalid field name" '{"labeltags":["test:meta2"],"field-with-dash":"value"}' "error"
|
|
|
|
# Invalid: field name starting with number
|
|
test_upload "Field starts with number" '{"labeltags":["test:meta3"],"123field":"value"}' "error"
|
|
|
|
echo ""
|
|
echo "Testing Filename Validation"
|
|
echo "============================"
|
|
|
|
# Invalid: directory traversal
|
|
test_upload "Directory traversal" '{"labeltags":["test:file1"],"filename":"../etc/passwd"}' "error"
|
|
|
|
# Invalid: path separator
|
|
test_upload "Path separator" '{"labeltags":["test:file3"],"filename":"path/to/file.txt"}' "error"
|
|
|
|
echo ""
|
|
echo "======================================"
|
|
echo "Test Results:"
|
|
echo " Passed: $PASS_COUNT"
|
|
echo " Failed: $FAIL_COUNT"
|
|
echo ""
|
|
|
|
if [ $FAIL_COUNT -eq 0 ]; then
|
|
echo "✓ All input validation tests passed!"
|
|
exit 0
|
|
else
|
|
echo "✗ Some tests failed"
|
|
exit 1
|
|
fi |