aboutsummaryrefslogtreecommitdiff
path: root/weed/query/engine/partition_path_fix_test.go
diff options
context:
space:
mode:
Diffstat (limited to 'weed/query/engine/partition_path_fix_test.go')
-rw-r--r--weed/query/engine/partition_path_fix_test.go117
1 files changed, 117 insertions, 0 deletions
diff --git a/weed/query/engine/partition_path_fix_test.go b/weed/query/engine/partition_path_fix_test.go
new file mode 100644
index 000000000..8d92136e6
--- /dev/null
+++ b/weed/query/engine/partition_path_fix_test.go
@@ -0,0 +1,117 @@
+package engine
+
+import (
+ "strings"
+ "testing"
+
+ "github.com/stretchr/testify/assert"
+)
+
+// TestPartitionPathHandling tests that partition paths are handled correctly
+// whether discoverTopicPartitions returns relative or absolute paths
+func TestPartitionPathHandling(t *testing.T) {
+ engine := NewMockSQLEngine()
+
+ t.Run("Mock discoverTopicPartitions returns correct paths", func(t *testing.T) {
+ // Test that our mock engine handles absolute paths correctly
+ engine.mockPartitions["test.user_events"] = []string{
+ "/topics/test/user_events/v2025-09-03-15-36-29/0000-2520",
+ "/topics/test/user_events/v2025-09-03-15-36-29/2521-5040",
+ }
+
+ partitions, err := engine.discoverTopicPartitions("test", "user_events")
+ assert.NoError(t, err, "Should discover partitions without error")
+ assert.Equal(t, 2, len(partitions), "Should return 2 partitions")
+ assert.Contains(t, partitions[0], "/topics/test/user_events/", "Should contain absolute path")
+ })
+
+ t.Run("Mock discoverTopicPartitions handles relative paths", func(t *testing.T) {
+ // Test relative paths scenario
+ engine.mockPartitions["test.user_events"] = []string{
+ "v2025-09-03-15-36-29/0000-2520",
+ "v2025-09-03-15-36-29/2521-5040",
+ }
+
+ partitions, err := engine.discoverTopicPartitions("test", "user_events")
+ assert.NoError(t, err, "Should discover partitions without error")
+ assert.Equal(t, 2, len(partitions), "Should return 2 partitions")
+ assert.True(t, !strings.HasPrefix(partitions[0], "/topics/"), "Should be relative path")
+ })
+
+ t.Run("Partition path building logic works correctly", func(t *testing.T) {
+ topicBasePath := "/topics/test/user_events"
+
+ testCases := []struct {
+ name string
+ relativePartition string
+ expectedPath string
+ }{
+ {
+ name: "Absolute path - use as-is",
+ relativePartition: "/topics/test/user_events/v2025-09-03-15-36-29/0000-2520",
+ expectedPath: "/topics/test/user_events/v2025-09-03-15-36-29/0000-2520",
+ },
+ {
+ name: "Relative path - build full path",
+ relativePartition: "v2025-09-03-15-36-29/0000-2520",
+ expectedPath: "/topics/test/user_events/v2025-09-03-15-36-29/0000-2520",
+ },
+ }
+
+ for _, tc := range testCases {
+ t.Run(tc.name, func(t *testing.T) {
+ var partitionPath string
+
+ // This is the same logic from our fixed code
+ if strings.HasPrefix(tc.relativePartition, "/topics/") {
+ // Already a full path - use as-is
+ partitionPath = tc.relativePartition
+ } else {
+ // Relative path - build full path
+ partitionPath = topicBasePath + "/" + tc.relativePartition
+ }
+
+ assert.Equal(t, tc.expectedPath, partitionPath,
+ "Partition path should be built correctly")
+
+ // Ensure no double slashes
+ assert.NotContains(t, partitionPath, "//",
+ "Partition path should not contain double slashes")
+ })
+ }
+ })
+}
+
+// TestPartitionPathLogic tests the core logic for handling partition paths
+func TestPartitionPathLogic(t *testing.T) {
+ t.Run("Building partition paths from discovered partitions", func(t *testing.T) {
+ // Test the specific partition path building that was causing issues
+
+ topicBasePath := "/topics/ecommerce/user_events"
+
+ // This simulates the discoverTopicPartitions returning absolute paths (realistic scenario)
+ relativePartitions := []string{
+ "/topics/ecommerce/user_events/v2025-09-03-15-36-29/0000-2520",
+ }
+
+ // This is the code from our fix - test it directly
+ partitions := make([]string, len(relativePartitions))
+ for i, relPartition := range relativePartitions {
+ // Handle both relative and absolute partition paths from discoverTopicPartitions
+ if strings.HasPrefix(relPartition, "/topics/") {
+ // Already a full path - use as-is
+ partitions[i] = relPartition
+ } else {
+ // Relative path - build full path
+ partitions[i] = topicBasePath + "/" + relPartition
+ }
+ }
+
+ // Verify the path was handled correctly
+ expectedPath := "/topics/ecommerce/user_events/v2025-09-03-15-36-29/0000-2520"
+ assert.Equal(t, expectedPath, partitions[0], "Absolute path should be used as-is")
+
+ // Ensure no double slashes (this was the original bug)
+ assert.NotContains(t, partitions[0], "//", "Path should not contain double slashes")
+ })
+}