release: hmac-file-server 3.2
This commit is contained in:
@ -16,7 +16,7 @@ import (
|
||||
|
||||
const (
|
||||
serverURL = "http://[::1]:8080" // Replace with your actual server URL
|
||||
secret = "a-orc-and-a-humans-is-drinking-ale" // Replace with your HMAC secret key
|
||||
secret = "hmac-file-server-is-the-win" // Replace with your HMAC secret key
|
||||
uploadPath = "hmac_icon.png" // Test file to upload
|
||||
protocolType = "v2" // Use v2, v, or token as needed
|
||||
)
|
||||
|
39
test/server_flags_test.go
Normal file
39
test/server_flags_test.go
Normal file
@ -0,0 +1,39 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"os"
|
||||
"os/exec"
|
||||
"strings"
|
||||
"testing"
|
||||
)
|
||||
|
||||
// TestGenConfigFlag runs the server with --genconfig and checks output for expected config keys
|
||||
func TestGenConfigFlag(t *testing.T) {
|
||||
cmd := exec.Command("go", "run", "../cmd/server/main.go", "--genconfig")
|
||||
output, err := cmd.CombinedOutput()
|
||||
if err != nil && !strings.Contains(string(output), "[server]") {
|
||||
t.Fatalf("Failed to run with --genconfig: %v\nOutput: %s", err, output)
|
||||
}
|
||||
if !strings.Contains(string(output), "[server]") || !strings.Contains(string(output), "bind_ip") {
|
||||
t.Errorf("Example config missing expected keys. Output: %s", output)
|
||||
}
|
||||
}
|
||||
|
||||
// TestIPv4IPv6Flag runs the server with forceprotocol=ipv4 and ipv6 and checks for startup errors
|
||||
func TestIPv4IPv6Flag(t *testing.T) {
|
||||
for _, proto := range []string{"ipv4", "ipv6", "auto"} {
|
||||
cmd := exec.Command("go", "run", "../cmd/server/main.go", "--config", "../cmd/server/config.toml")
|
||||
cmd.Env = append(os.Environ(), "FORCEPROTOCOL="+proto)
|
||||
// Set Go module cache environment variables if not already set
|
||||
if os.Getenv("GOMODCACHE") == "" {
|
||||
cmd.Env = append(cmd.Env, "GOMODCACHE="+os.Getenv("HOME")+"/go/pkg/mod")
|
||||
}
|
||||
if os.Getenv("GOPATH") == "" {
|
||||
cmd.Env = append(cmd.Env, "GOPATH="+os.Getenv("HOME")+"/go")
|
||||
}
|
||||
output, err := cmd.CombinedOutput()
|
||||
if err != nil && !strings.Contains(string(output), "Configuration loaded successfully") {
|
||||
t.Errorf("Server failed to start with forceprotocol=%s: %v\nOutput: %s", proto, err, output)
|
||||
}
|
||||
}
|
||||
}
|
173
test/test_installer_config.sh
Executable file
173
test/test_installer_config.sh
Executable file
@ -0,0 +1,173 @@
|
||||
#!/bin/bash
|
||||
|
||||
# Test script to validate installer configuration generation
|
||||
# Tests that the installer generates config compatible with fixed struct definitions
|
||||
|
||||
set -e
|
||||
|
||||
# Colors for output
|
||||
RED='\033[0;31m'
|
||||
GREEN='\033[0;32m'
|
||||
YELLOW='\033[1;33m'
|
||||
BLUE='\033[0;34m'
|
||||
NC='\033[0m' # No Color
|
||||
|
||||
echo -e "${BLUE}🔍 Testing Installer Configuration Generation${NC}"
|
||||
echo "============================================="
|
||||
echo ""
|
||||
|
||||
# Test configuration values that simulate installer input
|
||||
export HMAC_SECRET="test-hmac-secret-32-characters-long-minimum"
|
||||
export JWT_SECRET="test-jwt-secret-also-32-characters-long-minimum"
|
||||
|
||||
# Create a test directory
|
||||
TEST_DIR="/tmp/hmac-installer-test-$$"
|
||||
mkdir -p "$TEST_DIR"
|
||||
cd "$TEST_DIR"
|
||||
|
||||
echo -e "${YELLOW}📁 Test directory: $TEST_DIR${NC}"
|
||||
echo ""
|
||||
|
||||
# Copy necessary files for testing
|
||||
cp /home/renz/source/hmac-file-server-uuxo/go.mod .
|
||||
cp /home/renz/source/hmac-file-server-uuxo/go.sum .
|
||||
cp -r /home/renz/source/hmac-file-server-uuxo/cmd .
|
||||
|
||||
# Extract the generate_config function and create a test version
|
||||
cat > test_config_generation.sh << 'EOF'
|
||||
#!/bin/bash
|
||||
|
||||
# Simulated installer variables
|
||||
DEFAULT_CONFIG_DIR="./test-config"
|
||||
DATA_DIR="./test-data"
|
||||
DEFAULT_LOG_DIR="./test-logs"
|
||||
SERVER_PORT="8080"
|
||||
METRICS_PORT="9090"
|
||||
ENABLE_TLS="false"
|
||||
HMAC_SECRET="test-hmac-secret-32-characters-long-minimum"
|
||||
ENABLE_JWT="false"
|
||||
ENABLE_CLAMAV="false"
|
||||
ENABLE_REDIS="false"
|
||||
|
||||
# Create directories
|
||||
mkdir -p "$DEFAULT_CONFIG_DIR"
|
||||
mkdir -p "$DATA_DIR/runtime"
|
||||
mkdir -p "$DEFAULT_LOG_DIR"
|
||||
|
||||
# Generate configuration (extracted from installer)
|
||||
generate_config() {
|
||||
echo "Generating test configuration..."
|
||||
|
||||
cat > "$DEFAULT_CONFIG_DIR/config.toml" << EOFCONFIG
|
||||
# HMAC File Server Configuration
|
||||
# Generated by installer test on $(date)
|
||||
|
||||
[server]
|
||||
bind_ip = "0.0.0.0"
|
||||
listenport = "$SERVER_PORT"
|
||||
unixsocket = false
|
||||
storagepath = "$DATA_DIR/uploads"
|
||||
metricsenabled = true
|
||||
metricsport = "$METRICS_PORT"
|
||||
deduplicationenabled = true
|
||||
deduplicationpath = "$DATA_DIR/deduplication"
|
||||
filenaming = "HMAC"
|
||||
force_protocol = "auto"
|
||||
pidfilepath = "$DATA_DIR/runtime/hmac-file-server.pid"
|
||||
sslenabled = false
|
||||
|
||||
[security]
|
||||
secret = "$HMAC_SECRET"
|
||||
enablejwt = false
|
||||
|
||||
[uploads]
|
||||
allowedextensions = [".txt", ".pdf", ".jpg", ".jpeg", ".png", ".gif", ".webp", ".zip", ".tar", ".gz", ".7z", ".mp4", ".webm", ".ogg", ".mp3", ".wav", ".flac", ".doc", ".docx", ".xls", ".xlsx", ".ppt", ".pptx", ".odt", ".ods", ".odp"]
|
||||
maxfilesize = "100MB"
|
||||
chunkeduploadsenabled = true
|
||||
chunksize = "10MB"
|
||||
ttlenabled = false
|
||||
ttl = "168h"
|
||||
|
||||
[downloads]
|
||||
chunkeddownloadsenabled = true
|
||||
chunksize = "10MB"
|
||||
|
||||
[logging]
|
||||
level = "INFO"
|
||||
file = "$DEFAULT_LOG_DIR/hmac-file-server.log"
|
||||
max_size = 100
|
||||
max_backups = 3
|
||||
max_age = 30
|
||||
compress = true
|
||||
|
||||
[workers]
|
||||
numworkers = 10
|
||||
uploadqueuesize = 1000
|
||||
autoscaling = true
|
||||
|
||||
[timeouts]
|
||||
readtimeout = "30s"
|
||||
writetimeout = "30s"
|
||||
idletimeout = "120s"
|
||||
shutdown = "30s"
|
||||
|
||||
[clamav]
|
||||
enabled = false
|
||||
|
||||
[redis]
|
||||
enabled = false
|
||||
EOFCONFIG
|
||||
|
||||
echo "Configuration file created: $DEFAULT_CONFIG_DIR/config.toml"
|
||||
}
|
||||
|
||||
# Call the function
|
||||
generate_config
|
||||
EOF
|
||||
|
||||
chmod +x test_config_generation.sh
|
||||
./test_config_generation.sh
|
||||
|
||||
echo -e "${YELLOW}📋 Generated test configuration:${NC}"
|
||||
echo ""
|
||||
cat ./test-config/config.toml
|
||||
echo ""
|
||||
|
||||
# Build a test binary to validate the configuration
|
||||
echo -e "${YELLOW}🔨 Building test binary...${NC}"
|
||||
if go build -o hmac-test-server ./cmd/server/*.go; then
|
||||
echo -e "${GREEN}✅ Build successful${NC}"
|
||||
else
|
||||
echo -e "${RED}❌ Build failed${NC}"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo ""
|
||||
echo -e "${YELLOW}🔍 Testing configuration validation...${NC}"
|
||||
|
||||
# Test configuration validation
|
||||
if ./hmac-test-server -config ./test-config/config.toml -validate-config -validate-quiet; then
|
||||
echo -e "${GREEN}✅ Configuration validation PASSED!${NC}"
|
||||
echo ""
|
||||
echo -e "${GREEN}🎉 All critical fixes verified:${NC}"
|
||||
echo -e "${GREEN} ✓ Workers: numworkers/uploadqueuesize (not initial/max)${NC}"
|
||||
echo -e "${GREEN} ✓ Protocol: force_protocol (not forceprotocol)${NC}"
|
||||
echo -e "${GREEN} ✓ PID file: pidfilepath configured${NC}"
|
||||
echo -e "${GREEN} ✓ Timeouts: read/write/idle/shutdown${NC}"
|
||||
echo -e "${GREEN} ✓ Logging: level/file/max_size/max_backups/max_age${NC}"
|
||||
VALIDATION_RESULT=0
|
||||
else
|
||||
echo -e "${RED}❌ Configuration validation FAILED!${NC}"
|
||||
echo ""
|
||||
echo -e "${YELLOW}Running detailed validation for diagnosis...${NC}"
|
||||
./hmac-test-server -config ./test-config/config.toml -validate-config -validate-verbose || true
|
||||
VALIDATION_RESULT=1
|
||||
fi
|
||||
|
||||
echo ""
|
||||
echo -e "${YELLOW}🧹 Cleaning up test directory...${NC}"
|
||||
cd /
|
||||
rm -rf "$TEST_DIR"
|
||||
|
||||
echo -e "${BLUE}Test completed.${NC}"
|
||||
exit $VALIDATION_RESULT
|
Reference in New Issue
Block a user