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.
117 lines
4.1 KiB
117 lines
4.1 KiB
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")
|
|
})
|
|
}
|