aboutsummaryrefslogtreecommitdiff
path: root/weed/query/engine/mock_test.go
diff options
context:
space:
mode:
Diffstat (limited to 'weed/query/engine/mock_test.go')
-rw-r--r--weed/query/engine/mock_test.go154
1 files changed, 154 insertions, 0 deletions
diff --git a/weed/query/engine/mock_test.go b/weed/query/engine/mock_test.go
new file mode 100644
index 000000000..d00ec1761
--- /dev/null
+++ b/weed/query/engine/mock_test.go
@@ -0,0 +1,154 @@
+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)
+ }
+}