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