| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117 |
- 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")
- })
- }
|