You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
147 lines
3.8 KiB
147 lines
3.8 KiB
package integration
|
|
|
|
import (
|
|
"testing"
|
|
"time"
|
|
)
|
|
|
|
// TestAgentClient_Creation tests agent client creation and health checks
|
|
func TestAgentClient_Creation(t *testing.T) {
|
|
// Skip if no real agent available (would need real SeaweedMQ setup)
|
|
t.Skip("Integration test requires real SeaweedMQ Agent - run manually with agent available")
|
|
|
|
client, err := NewAgentClient("localhost:17777") // default agent port
|
|
if err != nil {
|
|
t.Fatalf("Failed to create agent client: %v", err)
|
|
}
|
|
defer client.Close()
|
|
|
|
// Test health check
|
|
err = client.HealthCheck()
|
|
if err != nil {
|
|
t.Fatalf("Health check failed: %v", err)
|
|
}
|
|
|
|
t.Logf("Agent client created and health check passed")
|
|
}
|
|
|
|
// TestAgentClient_PublishRecord tests publishing records
|
|
func TestAgentClient_PublishRecord(t *testing.T) {
|
|
t.Skip("Integration test requires real SeaweedMQ Agent - run manually with agent available")
|
|
|
|
client, err := NewAgentClient("localhost:17777")
|
|
if err != nil {
|
|
t.Fatalf("Failed to create agent client: %v", err)
|
|
}
|
|
defer client.Close()
|
|
|
|
// Test publishing a record
|
|
key := []byte("test-key")
|
|
value := []byte("test-value")
|
|
timestamp := time.Now().UnixNano()
|
|
|
|
sequence, err := client.PublishRecord("test-topic", 0, key, value, timestamp)
|
|
if err != nil {
|
|
t.Fatalf("Failed to publish record: %v", err)
|
|
}
|
|
|
|
if sequence < 0 {
|
|
t.Errorf("Invalid sequence: %d", sequence)
|
|
}
|
|
|
|
t.Logf("Published record with sequence: %d", sequence)
|
|
}
|
|
|
|
// TestAgentClient_SessionManagement tests publisher session lifecycle
|
|
func TestAgentClient_SessionManagement(t *testing.T) {
|
|
t.Skip("Integration test requires real SeaweedMQ Agent - run manually with agent available")
|
|
|
|
client, err := NewAgentClient("localhost:17777")
|
|
if err != nil {
|
|
t.Fatalf("Failed to create agent client: %v", err)
|
|
}
|
|
defer client.Close()
|
|
|
|
// Create publisher session
|
|
session, err := client.GetOrCreatePublisher("session-test-topic", 0)
|
|
if err != nil {
|
|
t.Fatalf("Failed to create publisher: %v", err)
|
|
}
|
|
|
|
if session.SessionID == 0 {
|
|
t.Errorf("Invalid session ID: %d", session.SessionID)
|
|
}
|
|
|
|
if session.Topic != "session-test-topic" {
|
|
t.Errorf("Topic mismatch: got %s, want session-test-topic", session.Topic)
|
|
}
|
|
|
|
if session.Partition != 0 {
|
|
t.Errorf("Partition mismatch: got %d, want 0", session.Partition)
|
|
}
|
|
|
|
// Close the publisher
|
|
err = client.ClosePublisher("session-test-topic", 0)
|
|
if err != nil {
|
|
t.Errorf("Failed to close publisher: %v", err)
|
|
}
|
|
|
|
t.Logf("Publisher session managed successfully")
|
|
}
|
|
|
|
// TestAgentClient_ConcurrentPublish tests concurrent publishing
|
|
func TestAgentClient_ConcurrentPublish(t *testing.T) {
|
|
t.Skip("Integration test requires real SeaweedMQ Agent - run manually with agent available")
|
|
|
|
client, err := NewAgentClient("localhost:17777")
|
|
if err != nil {
|
|
t.Fatalf("Failed to create agent client: %v", err)
|
|
}
|
|
defer client.Close()
|
|
|
|
// Publish multiple records concurrently
|
|
numRecords := 10
|
|
errors := make(chan error, numRecords)
|
|
sequences := make(chan int64, numRecords)
|
|
|
|
for i := 0; i < numRecords; i++ {
|
|
go func(index int) {
|
|
key := []byte("concurrent-key")
|
|
value := []byte("concurrent-value-" + string(rune(index)))
|
|
timestamp := time.Now().UnixNano()
|
|
|
|
sequence, err := client.PublishRecord("concurrent-test-topic", 0, key, value, timestamp)
|
|
if err != nil {
|
|
errors <- err
|
|
return
|
|
}
|
|
|
|
sequences <- sequence
|
|
errors <- nil
|
|
}(i)
|
|
}
|
|
|
|
// Collect results
|
|
successCount := 0
|
|
var lastSequence int64 = -1
|
|
|
|
for i := 0; i < numRecords; i++ {
|
|
err := <-errors
|
|
if err != nil {
|
|
t.Logf("Publish error: %v", err)
|
|
} else {
|
|
sequence := <-sequences
|
|
if sequence > lastSequence {
|
|
lastSequence = sequence
|
|
}
|
|
successCount++
|
|
}
|
|
}
|
|
|
|
if successCount < numRecords {
|
|
t.Errorf("Only %d/%d publishes succeeded", successCount, numRecords)
|
|
}
|
|
|
|
t.Logf("Concurrent publish test: %d/%d successful, last sequence: %d",
|
|
successCount, numRecords, lastSequence)
|
|
}
|