| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154 |
- package engine
- import (
- "context"
- "testing"
- )
- func TestMockBrokerClient_BasicFunctionality(t *testing.T) {
- mockBroker := NewMockBrokerClient()
- // Test ListNamespaces
- namespaces, err := mockBroker.ListNamespaces(context.Background())
- if err != nil {
- t.Fatalf("Expected no error, got %v", err)
- }
- if len(namespaces) != 2 {
- t.Errorf("Expected 2 namespaces, got %d", len(namespaces))
- }
- // Test ListTopics
- topics, err := mockBroker.ListTopics(context.Background(), "default")
- if err != nil {
- t.Fatalf("Expected no error, got %v", err)
- }
- if len(topics) != 2 {
- t.Errorf("Expected 2 topics in default namespace, got %d", len(topics))
- }
- // Test GetTopicSchema
- schema, err := mockBroker.GetTopicSchema(context.Background(), "default", "user_events")
- if err != nil {
- t.Fatalf("Expected no error, got %v", err)
- }
- if len(schema.Fields) != 3 {
- t.Errorf("Expected 3 fields in user_events schema, got %d", len(schema.Fields))
- }
- }
- func TestMockBrokerClient_FailureScenarios(t *testing.T) {
- mockBroker := NewMockBrokerClient()
- // Configure mock to fail
- mockBroker.SetFailure(true, "simulated broker failure")
- // Test that operations fail as expected
- _, err := mockBroker.ListNamespaces(context.Background())
- if err == nil {
- t.Error("Expected error when mock is configured to fail")
- }
- _, err = mockBroker.ListTopics(context.Background(), "default")
- if err == nil {
- t.Error("Expected error when mock is configured to fail")
- }
- _, err = mockBroker.GetTopicSchema(context.Background(), "default", "user_events")
- if err == nil {
- t.Error("Expected error when mock is configured to fail")
- }
- // Test that filer client also fails
- _, err = mockBroker.GetFilerClient()
- if err == nil {
- t.Error("Expected error when mock is configured to fail")
- }
- // Reset mock to working state
- mockBroker.SetFailure(false, "")
- // Test that operations work again
- namespaces, err := mockBroker.ListNamespaces(context.Background())
- if err != nil {
- t.Errorf("Expected no error after resetting mock, got %v", err)
- }
- if len(namespaces) == 0 {
- t.Error("Expected namespaces after resetting mock")
- }
- }
- func TestMockBrokerClient_TopicManagement(t *testing.T) {
- mockBroker := NewMockBrokerClient()
- // Test ConfigureTopic (add a new topic)
- err := mockBroker.ConfigureTopic(context.Background(), "test", "new-topic", 1, nil)
- if err != nil {
- t.Fatalf("Expected no error, got %v", err)
- }
- // Verify the topic was added
- topics, err := mockBroker.ListTopics(context.Background(), "test")
- if err != nil {
- t.Fatalf("Expected no error, got %v", err)
- }
- foundNewTopic := false
- for _, topic := range topics {
- if topic == "new-topic" {
- foundNewTopic = true
- break
- }
- }
- if !foundNewTopic {
- t.Error("Expected new-topic to be in the topics list")
- }
- // Test DeleteTopic
- err = mockBroker.DeleteTopic(context.Background(), "test", "new-topic")
- if err != nil {
- t.Fatalf("Expected no error, got %v", err)
- }
- // Verify the topic was removed
- topics, err = mockBroker.ListTopics(context.Background(), "test")
- if err != nil {
- t.Fatalf("Expected no error, got %v", err)
- }
- for _, topic := range topics {
- if topic == "new-topic" {
- t.Error("Expected new-topic to be removed from topics list")
- }
- }
- }
- func TestSQLEngineWithMockBrokerClient_ErrorHandling(t *testing.T) {
- // Create an engine with a failing mock broker
- mockBroker := NewMockBrokerClient()
- mockBroker.SetFailure(true, "mock broker unavailable")
- catalog := &SchemaCatalog{
- databases: make(map[string]*DatabaseInfo),
- currentDatabase: "default",
- brokerClient: mockBroker,
- }
- engine := &SQLEngine{catalog: catalog}
- // Test that queries fail gracefully with proper error messages
- result, err := engine.ExecuteSQL(context.Background(), "SELECT * FROM nonexistent_topic")
- // ExecuteSQL itself should not return an error, but the result should contain an error
- if err != nil {
- // If ExecuteSQL returns an error, that's also acceptable for this test
- t.Logf("ExecuteSQL returned error (acceptable): %v", err)
- return
- }
- // Should have an error in the result when broker is unavailable
- if result.Error == nil {
- t.Error("Expected error in query result when broker is unavailable")
- } else {
- t.Logf("Got expected error in result: %v", result.Error)
- }
- }
|