Files
s3/seaweedfs-rdma-sidecar/test-rdma-integration.sh
zooqueen dd74d3e6d6 Replace AGPL MinIO fork with Apache-2.0 SeaweedFS fork; rebrand CLI weed->s3
hanzoai/s3 was an AGPL-3.0 MinIO fork whose network-copyleft blocks embedding
and reselling as a managed service. Replace it wholesale with a fork of
SeaweedFS (github.com/seaweedfs/seaweedfs, Apache-2.0, Go) which ships a
built-in S3 gateway + Filer.

- License: AGPL-3.0 -> Apache-2.0 (upstream LICENSE kept verbatim, incl.
  "Copyright 2025 Chris Lu"); NOTICE added crediting SeaweedFS. No AGPL/BUSL/
  SSPL/GPL or enterprise ("ee") files remain.
- Module: go.mod path set to github.com/hanzoai/s3 with a self-replace
  (replace github.com/seaweedfs/seaweedfs => ./) so the ~1800 internal Go files
  keep their upstream import paths with zero churn. Internal identifiers and
  import paths are intentionally NOT renamed.
- CLI rebrand: the binary is built as `s3` (was `weed`); root usage, per-command
  help/usage/flag strings, shell autocomplete program name, and the product name
  in CLI output now read "Hanzo S3" / `s3`. Users never see `weed`.
  (e.g. `s3 server`, `s3 filer`, `s3 master`, `s3 volume`, `s3 s3`, `s3 mount`.)
- Build: `make` (or `go build -o s3 ./weed`) builds the `s3` binary green;
  `cmd/weed-db` and `cmd/weed-sql` also build; `go vet ./weed/command/` clean.
- README/LLM.md rewritten for Hanzo S3; AGENTS.md/CLAUDE.md symlinks preserved.
- Dropped a 33MB prebuilt Mach-O `stress` binary upstream had committed; `.gitignore`
  updated to ignore the `s3` build output.
2026-06-18 23:41:25 -07:00

127 lines
3.6 KiB
Bash

#!/bin/bash
set -e
echo "๐Ÿš€ Testing RDMA Integration with All Fixes Applied"
echo "=================================================="
# Build the sidecar with all fixes
echo "๐Ÿ“ฆ Building RDMA sidecar..."
go build -o bin/demo-server ./cmd/demo-server
go build -o bin/sidecar ./cmd/sidecar
# Test that the parse functions work correctly
echo "๐Ÿงช Testing parse helper functions..."
cat > test_parse_functions.go << 'EOF'
package main
import (
"fmt"
"strconv"
)
func parseUint32(s string, defaultValue uint32) uint32 {
if s == "" {
return defaultValue
}
val, err := strconv.ParseUint(s, 10, 32)
if err != nil {
return defaultValue
}
return uint32(val)
}
func parseUint64(s string, defaultValue uint64) uint64 {
if s == "" {
return defaultValue
}
val, err := strconv.ParseUint(s, 10, 64)
if err != nil {
return defaultValue
}
return val
}
func main() {
fmt.Println("Testing parseUint32:")
fmt.Printf(" '123' -> %d (expected: 123)\n", parseUint32("123", 0))
fmt.Printf(" '' -> %d (expected: 999)\n", parseUint32("", 999))
fmt.Printf(" 'invalid' -> %d (expected: 999)\n", parseUint32("invalid", 999))
fmt.Println("Testing parseUint64:")
fmt.Printf(" '12345678901234' -> %d (expected: 12345678901234)\n", parseUint64("12345678901234", 0))
fmt.Printf(" '' -> %d (expected: 999)\n", parseUint64("", 999))
fmt.Printf(" 'invalid' -> %d (expected: 999)\n", parseUint64("invalid", 999))
}
EOF
go run test_parse_functions.go
rm test_parse_functions.go
echo "โœ… Parse functions working correctly!"
# Test the sidecar startup
echo "๐Ÿ Testing sidecar startup..."
timeout 5 ./bin/demo-server --port 8081 --enable-rdma=false --debug --volume-server=http://httpbin.org/get &
SIDECAR_PID=$!
sleep 2
# Test health endpoint
echo "๐Ÿฅ Testing health endpoint..."
if curl -s http://localhost:8081/health | grep -q "healthy"; then
echo "โœ… Health endpoint working!"
else
echo "โŒ Health endpoint failed!"
fi
# Test stats endpoint
echo "๐Ÿ“Š Testing stats endpoint..."
if curl -s http://localhost:8081/stats | jq . > /dev/null; then
echo "โœ… Stats endpoint working!"
else
echo "โŒ Stats endpoint failed!"
fi
# Test read endpoint (will fallback to HTTP)
echo "๐Ÿ“– Testing read endpoint..."
RESPONSE=$(curl -s "http://localhost:8081/read?volume=1&needle=123&cookie=456&offset=0&size=1024&volume_server=http://localhost:8080")
if echo "$RESPONSE" | jq . > /dev/null; then
echo "โœ… Read endpoint working!"
echo " Response structure valid JSON"
# Check if it has the expected fields
if echo "$RESPONSE" | jq -e '.source' > /dev/null; then
SOURCE=$(echo "$RESPONSE" | jq -r '.source')
echo " Source: $SOURCE"
fi
if echo "$RESPONSE" | jq -e '.is_rdma' > /dev/null; then
IS_RDMA=$(echo "$RESPONSE" | jq -r '.is_rdma')
echo " RDMA Used: $IS_RDMA"
fi
else
echo "โŒ Read endpoint failed!"
echo "Response: $RESPONSE"
fi
# Stop the sidecar
kill $SIDECAR_PID 2>/dev/null || true
wait $SIDECAR_PID 2>/dev/null || true
echo ""
echo "๐ŸŽฏ Integration Test Summary:"
echo "=========================="
echo "โœ… Sidecar builds successfully"
echo "โœ… Parse functions handle errors correctly"
echo "โœ… HTTP endpoints are functional"
echo "โœ… JSON responses are properly formatted"
echo "โœ… Error handling works as expected"
echo ""
echo "๐ŸŽ‰ All RDMA integration fixes are working correctly!"
echo ""
echo "๐Ÿ’ก Next Steps:"
echo "- Deploy in Docker environment with real SeaweedFS cluster"
echo "- Test with actual file uploads and downloads"
echo "- Verify RDMA flags are passed correctly to weed mount"
echo "- Monitor health checks with configurable socket paths"