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.
		
		
		
		
		
			
		
			
				
					
					
						
							131 lines
						
					
					
						
							4.1 KiB
						
					
					
				
			
		
		
		
			
			
			
		
		
	
	
							131 lines
						
					
					
						
							4.1 KiB
						
					
					
				
								package e2e
							 | 
						|
								
							 | 
						|
								import (
							 | 
						|
									"testing"
							 | 
						|
								
							 | 
						|
									"github.com/seaweedfs/seaweedfs/test/kafka/internal/testutil"
							 | 
						|
								)
							 | 
						|
								
							 | 
						|
								// TestComprehensiveE2E tests complete end-to-end workflows
							 | 
						|
								// This test will use SMQ backend if SEAWEEDFS_MASTERS is available, otherwise mock
							 | 
						|
								func TestComprehensiveE2E(t *testing.T) {
							 | 
						|
									gateway := testutil.NewGatewayTestServerWithSMQ(t, testutil.SMQAvailable)
							 | 
						|
									defer gateway.CleanupAndClose()
							 | 
						|
								
							 | 
						|
									addr := gateway.StartAndWait()
							 | 
						|
								
							 | 
						|
									// Log which backend we're using
							 | 
						|
									if gateway.IsSMQMode() {
							 | 
						|
										t.Logf("Running comprehensive E2E tests with SMQ backend")
							 | 
						|
									} else {
							 | 
						|
										t.Logf("Running comprehensive E2E tests with mock backend")
							 | 
						|
									}
							 | 
						|
								
							 | 
						|
									// Create topics for different test scenarios
							 | 
						|
									topics := []string{
							 | 
						|
										testutil.GenerateUniqueTopicName("e2e-kafka-go"),
							 | 
						|
										testutil.GenerateUniqueTopicName("e2e-sarama"),
							 | 
						|
										testutil.GenerateUniqueTopicName("e2e-mixed"),
							 | 
						|
									}
							 | 
						|
									gateway.AddTestTopics(topics...)
							 | 
						|
								
							 | 
						|
									t.Run("KafkaGo_to_KafkaGo", func(t *testing.T) {
							 | 
						|
										testKafkaGoToKafkaGo(t, addr, topics[0])
							 | 
						|
									})
							 | 
						|
								
							 | 
						|
									t.Run("Sarama_to_Sarama", func(t *testing.T) {
							 | 
						|
										testSaramaToSarama(t, addr, topics[1])
							 | 
						|
									})
							 | 
						|
								
							 | 
						|
									t.Run("KafkaGo_to_Sarama", func(t *testing.T) {
							 | 
						|
										testKafkaGoToSarama(t, addr, topics[2])
							 | 
						|
									})
							 | 
						|
								
							 | 
						|
									t.Run("Sarama_to_KafkaGo", func(t *testing.T) {
							 | 
						|
										testSaramaToKafkaGo(t, addr, topics[2])
							 | 
						|
									})
							 | 
						|
								}
							 | 
						|
								
							 | 
						|
								func testKafkaGoToKafkaGo(t *testing.T, addr, topic string) {
							 | 
						|
									client := testutil.NewKafkaGoClient(t, addr)
							 | 
						|
									msgGen := testutil.NewMessageGenerator()
							 | 
						|
								
							 | 
						|
									// Generate test messages
							 | 
						|
									messages := msgGen.GenerateKafkaGoMessages(2)
							 | 
						|
								
							 | 
						|
									// Produce with kafka-go
							 | 
						|
									err := client.ProduceMessages(topic, messages)
							 | 
						|
									testutil.AssertNoError(t, err, "kafka-go produce failed")
							 | 
						|
								
							 | 
						|
									// Consume with kafka-go
							 | 
						|
									consumed, err := client.ConsumeMessages(topic, len(messages))
							 | 
						|
									testutil.AssertNoError(t, err, "kafka-go consume failed")
							 | 
						|
								
							 | 
						|
									// Validate message content
							 | 
						|
									err = testutil.ValidateKafkaGoMessageContent(messages, consumed)
							 | 
						|
									testutil.AssertNoError(t, err, "Message content validation failed")
							 | 
						|
								
							 | 
						|
									t.Logf("kafka-go to kafka-go test PASSED")
							 | 
						|
								}
							 | 
						|
								
							 | 
						|
								func testSaramaToSarama(t *testing.T, addr, topic string) {
							 | 
						|
									client := testutil.NewSaramaClient(t, addr)
							 | 
						|
									msgGen := testutil.NewMessageGenerator()
							 | 
						|
								
							 | 
						|
									// Generate test messages
							 | 
						|
									messages := msgGen.GenerateStringMessages(2)
							 | 
						|
								
							 | 
						|
									// Produce with Sarama
							 | 
						|
									err := client.ProduceMessages(topic, messages)
							 | 
						|
									testutil.AssertNoError(t, err, "Sarama produce failed")
							 | 
						|
								
							 | 
						|
									// Consume with Sarama
							 | 
						|
									consumed, err := client.ConsumeMessages(topic, 0, len(messages))
							 | 
						|
									testutil.AssertNoError(t, err, "Sarama consume failed")
							 | 
						|
								
							 | 
						|
									// Validate message content
							 | 
						|
									err = testutil.ValidateMessageContent(messages, consumed)
							 | 
						|
									testutil.AssertNoError(t, err, "Message content validation failed")
							 | 
						|
								
							 | 
						|
									t.Logf("Sarama to Sarama test PASSED")
							 | 
						|
								}
							 | 
						|
								
							 | 
						|
								func testKafkaGoToSarama(t *testing.T, addr, topic string) {
							 | 
						|
									kafkaGoClient := testutil.NewKafkaGoClient(t, addr)
							 | 
						|
									saramaClient := testutil.NewSaramaClient(t, addr)
							 | 
						|
									msgGen := testutil.NewMessageGenerator()
							 | 
						|
								
							 | 
						|
									// Produce with kafka-go
							 | 
						|
									messages := msgGen.GenerateKafkaGoMessages(2)
							 | 
						|
									err := kafkaGoClient.ProduceMessages(topic, messages)
							 | 
						|
									testutil.AssertNoError(t, err, "kafka-go produce failed")
							 | 
						|
								
							 | 
						|
									// Consume with Sarama
							 | 
						|
									consumed, err := saramaClient.ConsumeMessages(topic, 0, len(messages))
							 | 
						|
									testutil.AssertNoError(t, err, "Sarama consume failed")
							 | 
						|
								
							 | 
						|
									// Validate that we got the expected number of messages
							 | 
						|
									testutil.AssertEqual(t, len(messages), len(consumed), "Message count mismatch")
							 | 
						|
								
							 | 
						|
									t.Logf("kafka-go to Sarama test PASSED")
							 | 
						|
								}
							 | 
						|
								
							 | 
						|
								func testSaramaToKafkaGo(t *testing.T, addr, topic string) {
							 | 
						|
									kafkaGoClient := testutil.NewKafkaGoClient(t, addr)
							 | 
						|
									saramaClient := testutil.NewSaramaClient(t, addr)
							 | 
						|
									msgGen := testutil.NewMessageGenerator()
							 | 
						|
								
							 | 
						|
									// Produce with Sarama
							 | 
						|
									messages := msgGen.GenerateStringMessages(2)
							 | 
						|
									err := saramaClient.ProduceMessages(topic, messages)
							 | 
						|
									testutil.AssertNoError(t, err, "Sarama produce failed")
							 | 
						|
								
							 | 
						|
									// Consume with kafka-go
							 | 
						|
									consumed, err := kafkaGoClient.ConsumeMessages(topic, len(messages))
							 | 
						|
									testutil.AssertNoError(t, err, "kafka-go consume failed")
							 | 
						|
								
							 | 
						|
									// Validate that we got the expected number of messages
							 | 
						|
									testutil.AssertEqual(t, len(messages), len(consumed), "Message count mismatch")
							 | 
						|
								
							 | 
						|
									t.Logf("Sarama to kafka-go test PASSED")
							 | 
						|
								}
							 |