aboutsummaryrefslogtreecommitdiff
path: root/test/kafka/README.md
diff options
context:
space:
mode:
Diffstat (limited to 'test/kafka/README.md')
-rw-r--r--test/kafka/README.md156
1 files changed, 156 insertions, 0 deletions
diff --git a/test/kafka/README.md b/test/kafka/README.md
new file mode 100644
index 000000000..a39855ed6
--- /dev/null
+++ b/test/kafka/README.md
@@ -0,0 +1,156 @@
+# Kafka Gateway Tests with SMQ Integration
+
+This directory contains tests for the SeaweedFS Kafka Gateway with full SeaweedMQ (SMQ) integration.
+
+## Test Types
+
+### **Unit Tests** (`./unit/`)
+- Basic gateway functionality
+- Protocol compatibility
+- No SeaweedFS backend required
+- Uses mock handlers
+
+### **Integration Tests** (`./integration/`)
+- **Mock Mode** (default): Uses in-memory handlers for protocol testing
+- **SMQ Mode** (with `SEAWEEDFS_MASTERS`): Uses real SeaweedFS backend for full integration
+
+### **E2E Tests** (`./e2e/`)
+- End-to-end workflows
+- Automatically detects SMQ availability
+- Falls back to mock mode if SMQ unavailable
+
+## Running Tests Locally
+
+### Quick Protocol Testing (Mock Mode)
+```bash
+# Run all integration tests with mock backend
+cd test/kafka
+go test ./integration/...
+
+# Run specific test
+go test -v ./integration/ -run TestClientCompatibility
+```
+
+### Full Integration Testing (SMQ Mode)
+Requires running SeaweedFS instance:
+
+1. **Start SeaweedFS with MQ support:**
+```bash
+# Terminal 1: Start SeaweedFS server
+weed server -ip="127.0.0.1" -ip.bind="0.0.0.0" -dir=/tmp/seaweedfs-data -master.port=9333 -volume.port=8081 -filer.port=8888 -filer=true
+
+# Terminal 2: Start MQ broker
+weed mq.broker -master="127.0.0.1:9333" -ip="127.0.0.1" -port=17777
+```
+
+2. **Run tests with SMQ backend:**
+```bash
+cd test/kafka
+SEAWEEDFS_MASTERS=127.0.0.1:9333 go test ./integration/...
+
+# Run specific SMQ integration tests
+SEAWEEDFS_MASTERS=127.0.0.1:9333 go test -v ./integration/ -run TestSMQIntegration
+```
+
+### Test Broker Startup
+If you're having broker startup issues:
+```bash
+# Debug broker startup locally
+./scripts/test-broker-startup.sh
+```
+
+## CI/CD Integration
+
+### GitHub Actions Jobs
+
+1. **Unit Tests** - Fast protocol tests with mock backend
+2. **Integration Tests** - Mock mode by default
+3. **E2E Tests (with SMQ)** - Full SeaweedFS + MQ broker stack
+4. **Client Compatibility (with SMQ)** - Tests different Kafka clients against real backend
+5. **Consumer Group Tests (with SMQ)** - Tests consumer group persistence
+6. **SMQ Integration Tests** - Dedicated SMQ-specific functionality tests
+
+### What Gets Tested with SMQ
+
+When `SEAWEEDFS_MASTERS` is available, tests exercise:
+
+- **Real Message Persistence** - Messages stored in SeaweedFS volumes
+- **Offset Persistence** - Consumer group offsets stored in SeaweedFS filer
+- **Topic Persistence** - Topic metadata persisted in SeaweedFS filer
+- **Consumer Group Coordination** - Distributed coordinator assignment
+- **Cross-Client Compatibility** - Sarama, kafka-go with real backend
+- **Broker Discovery** - Gateway discovers MQ brokers via masters
+
+## Test Infrastructure
+
+### `testutil.NewGatewayTestServerWithSMQ(t, mode)`
+
+Smart gateway creation that automatically:
+- Detects SMQ availability via `SEAWEEDFS_MASTERS`
+- Uses production handler when available
+- Falls back to mock when unavailable
+- Provides timeout protection against hanging
+
+**Modes:**
+- `SMQRequired` - Skip test if SMQ unavailable
+- `SMQAvailable` - Use SMQ if available, otherwise mock
+- `SMQUnavailable` - Always use mock
+
+### Timeout Protection
+
+Gateway creation includes timeout protection to prevent CI hanging:
+- 20 second timeout for `SMQRequired` mode
+- 15 second timeout for `SMQAvailable` mode
+- Clear error messages when broker discovery fails
+
+## Debugging Failed Tests
+
+### CI Logs to Check
+1. **"SeaweedFS master is up"** - Master started successfully
+2. **"SeaweedFS filer is up"** - Filer ready
+3. **"SeaweedFS MQ broker is up"** - Broker started successfully
+4. **Broker/Server logs** - Shown on broker startup failure
+
+### Local Debugging
+1. Run `./scripts/test-broker-startup.sh` to test broker startup
+2. Check logs at `/tmp/weed-*.log`
+3. Test individual components:
+ ```bash
+ # Test master
+ curl http://127.0.0.1:9333/cluster/status
+
+ # Test filer
+ curl http://127.0.0.1:8888/status
+
+ # Test broker
+ nc -z 127.0.0.1 17777
+ ```
+
+### Common Issues
+- **Broker fails to start**: Check filer is ready before starting broker
+- **Gateway timeout**: Broker discovery fails, check broker is accessible
+- **Test hangs**: Timeout protection not working, reduce timeout values
+
+## Architecture
+
+```
+┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐
+│ Kafka Client │───▶│ Kafka Gateway │───▶│ SeaweedMQ Broker│
+│ (Sarama, │ │ (Protocol │ │ (Message │
+│ kafka-go) │ │ Handler) │ │ Persistence) │
+└─────────────────┘ └─────────────────┘ └─────────────────┘
+ │ │
+ ▼ ▼
+ ┌─────────────────┐ ┌─────────────────┐
+ │ SeaweedFS Filer │ │ SeaweedFS Master│
+ │ (Offset Storage)│ │ (Coordination) │
+ └─────────────────┘ └─────────────────┘
+ │ │
+ ▼ ▼
+ ┌─────────────────────────────────────────┐
+ │ SeaweedFS Volumes │
+ │ (Message Storage) │
+ └─────────────────────────────────────────┘
+```
+
+This architecture ensures full integration testing of the entire Kafka → SeaweedFS message path. \ No newline at end of file