|  |  | @ -3,7 +3,6 @@ package engine | 
			
		
	
		
			
				
					|  |  |  | import ( | 
			
		
	
		
			
				
					|  |  |  | 	"context" | 
			
		
	
		
			
				
					|  |  |  | 	"encoding/binary" | 
			
		
	
		
			
				
					|  |  |  | 	"encoding/json" | 
			
		
	
		
			
				
					|  |  |  | 	"errors" | 
			
		
	
		
			
				
					|  |  |  | 	"testing" | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
	
		
			
				
					|  |  | @ -1140,18 +1139,18 @@ func TestSQLEngine_ConvertLogEntryToRecordValue_ComplexDataTypes(t *testing.T) { | 
			
		
	
		
			
				
					|  |  |  | } | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  | // Tests for log buffer deduplication functionality
 | 
			
		
	
		
			
				
					|  |  |  | func TestSQLEngine_GetLogBufferStartFromFile_NewFormat(t *testing.T) { | 
			
		
	
		
			
				
					|  |  |  | func TestSQLEngine_GetLogBufferStartFromFile_BinaryFormat(t *testing.T) { | 
			
		
	
		
			
				
					|  |  |  | 	engine := NewTestSQLEngine() | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  | 	// Create sample buffer start (new ultra-efficient format)
 | 
			
		
	
		
			
				
					|  |  |  | 	bufferStart := LogBufferStart{StartIndex: 1609459100000000001} | 
			
		
	
		
			
				
					|  |  |  | 	startJson, _ := json.Marshal(bufferStart) | 
			
		
	
		
			
				
					|  |  |  | 	// Create sample buffer start (binary format)
 | 
			
		
	
		
			
				
					|  |  |  | 	bufferStartBytes := make([]byte, 8) | 
			
		
	
		
			
				
					|  |  |  | 	binary.BigEndian.PutUint64(bufferStartBytes, uint64(1609459100000000001)) | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  | 	// Create file entry with buffer start + some chunks
 | 
			
		
	
		
			
				
					|  |  |  | 	entry := &filer_pb.Entry{ | 
			
		
	
		
			
				
					|  |  |  | 		Name: "test-log-file", | 
			
		
	
		
			
				
					|  |  |  | 		Extended: map[string][]byte{ | 
			
		
	
		
			
				
					|  |  |  | 			"buffer_start": startJson, | 
			
		
	
		
			
				
					|  |  |  | 			"buffer_start": bufferStartBytes, | 
			
		
	
		
			
				
					|  |  |  | 		}, | 
			
		
	
		
			
				
					|  |  |  | 		Chunks: []*filer_pb.FileChunk{ | 
			
		
	
		
			
				
					|  |  |  | 			{FileId: "chunk1", Offset: 0, Size: 1000}, | 
			
		
	
	
		
			
				
					|  |  | @ -1166,7 +1165,7 @@ func TestSQLEngine_GetLogBufferStartFromFile_NewFormat(t *testing.T) { | 
			
		
	
		
			
				
					|  |  |  | 	assert.NotNil(t, result) | 
			
		
	
		
			
				
					|  |  |  | 	assert.Equal(t, int64(1609459100000000001), result.StartIndex) | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  | 	// Test extraction works correctly with the new format
 | 
			
		
	
		
			
				
					|  |  |  | 	// Test extraction works correctly with the binary format
 | 
			
		
	
		
			
				
					|  |  |  | } | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  | func TestSQLEngine_GetLogBufferStartFromFile_NoMetadata(t *testing.T) { | 
			
		
	
	
		
			
				
					|  |  | @ -1187,18 +1186,18 @@ func TestSQLEngine_GetLogBufferStartFromFile_NoMetadata(t *testing.T) { | 
			
		
	
		
			
				
					|  |  |  | func TestSQLEngine_GetLogBufferStartFromFile_InvalidData(t *testing.T) { | 
			
		
	
		
			
				
					|  |  |  | 	engine := NewTestSQLEngine() | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  | 	// Create file entry with invalid buffer start
 | 
			
		
	
		
			
				
					|  |  |  | 	// Create file entry with invalid buffer start (wrong size)
 | 
			
		
	
		
			
				
					|  |  |  | 	entry := &filer_pb.Entry{ | 
			
		
	
		
			
				
					|  |  |  | 		Name: "test-log-file", | 
			
		
	
		
			
				
					|  |  |  | 		Extended: map[string][]byte{ | 
			
		
	
		
			
				
					|  |  |  | 			"buffer_start": []byte("invalid-json"), | 
			
		
	
		
			
				
					|  |  |  | 			"buffer_start": []byte("invalid-binary"), | 
			
		
	
		
			
				
					|  |  |  | 		}, | 
			
		
	
		
			
				
					|  |  |  | 	} | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  | 	// Test extraction
 | 
			
		
	
		
			
				
					|  |  |  | 	result, err := engine.getLogBufferStartFromFile(entry) | 
			
		
	
		
			
				
					|  |  |  | 	assert.Error(t, err) | 
			
		
	
		
			
				
					|  |  |  | 	assert.Contains(t, err.Error(), "failed to parse buffer start") | 
			
		
	
		
			
				
					|  |  |  | 	assert.Contains(t, err.Error(), "invalid buffer_start format: expected 8 bytes") | 
			
		
	
		
			
				
					|  |  |  | 	assert.Nil(t, result) | 
			
		
	
		
			
				
					|  |  |  | } | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
	
		
			
				
					|  |  | @ -1256,14 +1255,14 @@ func TestSQLEngine_LogBufferDeduplication_ServerRestartScenario(t *testing.T) { | 
			
		
	
		
			
				
					|  |  |  | 	// prevent false positive duplicates across server restarts
 | 
			
		
	
		
			
				
					|  |  |  | } | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  | func TestBrokerClient_ParquetBufferStartForBrokerQuery(t *testing.T) { | 
			
		
	
		
			
				
					|  |  |  | 	// Test scenario: getBufferStartFromEntry should handle both JSON and binary formats
 | 
			
		
	
		
			
				
					|  |  |  | 	// This tests the dual format support for buffer_start metadata
 | 
			
		
	
		
			
				
					|  |  |  | func TestBrokerClient_BinaryBufferStartFormat(t *testing.T) { | 
			
		
	
		
			
				
					|  |  |  | 	// Test scenario: getBufferStartFromEntry should only support binary format
 | 
			
		
	
		
			
				
					|  |  |  | 	// This tests the standardized binary format for buffer_start metadata
 | 
			
		
	
		
			
				
					|  |  |  | 	realBrokerClient := &BrokerClient{} | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  | 	// Test binary format (Parquet files)
 | 
			
		
	
		
			
				
					|  |  |  | 	parquetEntry := &filer_pb.Entry{ | 
			
		
	
		
			
				
					|  |  |  | 		Name:        "2025-01-07-14-30.parquet", | 
			
		
	
		
			
				
					|  |  |  | 	// Test binary format (used by both log files and Parquet files)
 | 
			
		
	
		
			
				
					|  |  |  | 	binaryEntry := &filer_pb.Entry{ | 
			
		
	
		
			
				
					|  |  |  | 		Name:        "2025-01-07-14-30-45", | 
			
		
	
		
			
				
					|  |  |  | 		IsDirectory: false, | 
			
		
	
		
			
				
					|  |  |  | 		Extended: map[string][]byte{ | 
			
		
	
		
			
				
					|  |  |  | 			"buffer_start": func() []byte { | 
			
		
	
	
		
			
				
					|  |  | @ -1275,22 +1274,26 @@ func TestBrokerClient_ParquetBufferStartForBrokerQuery(t *testing.T) { | 
			
		
	
		
			
				
					|  |  |  | 		}, | 
			
		
	
		
			
				
					|  |  |  | 	} | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  | 	bufferStart := realBrokerClient.getBufferStartFromEntry(parquetEntry) | 
			
		
	
		
			
				
					|  |  |  | 	bufferStart := realBrokerClient.getBufferStartFromEntry(binaryEntry) | 
			
		
	
		
			
				
					|  |  |  | 	assert.NotNil(t, bufferStart) | 
			
		
	
		
			
				
					|  |  |  | 	assert.Equal(t, int64(2000001), bufferStart.StartIndex, "Should parse binary buffer_start from Parquet file") | 
			
		
	
		
			
				
					|  |  |  | 	assert.Equal(t, int64(2000001), bufferStart.StartIndex, "Should parse binary buffer_start metadata") | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  | 	// Test JSON format (log files)
 | 
			
		
	
		
			
				
					|  |  |  | 	logEntry := &filer_pb.Entry{ | 
			
		
	
		
			
				
					|  |  |  | 		Name:        "2025-01-07-14-30-45", | 
			
		
	
		
			
				
					|  |  |  | 	// Test Parquet file (same binary format)
 | 
			
		
	
		
			
				
					|  |  |  | 	parquetEntry := &filer_pb.Entry{ | 
			
		
	
		
			
				
					|  |  |  | 		Name:        "2025-01-07-14-30.parquet", | 
			
		
	
		
			
				
					|  |  |  | 		IsDirectory: false, | 
			
		
	
		
			
				
					|  |  |  | 		Extended: map[string][]byte{ | 
			
		
	
		
			
				
					|  |  |  | 			"buffer_start": []byte(`{"start_index": 1500001}`), | 
			
		
	
		
			
				
					|  |  |  | 			"buffer_start": func() []byte { | 
			
		
	
		
			
				
					|  |  |  | 				buf := make([]byte, 8) | 
			
		
	
		
			
				
					|  |  |  | 				binary.BigEndian.PutUint64(buf, uint64(1500001)) | 
			
		
	
		
			
				
					|  |  |  | 				return buf | 
			
		
	
		
			
				
					|  |  |  | 			}(), | 
			
		
	
		
			
				
					|  |  |  | 		}, | 
			
		
	
		
			
				
					|  |  |  | 	} | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  | 	bufferStart = realBrokerClient.getBufferStartFromEntry(logEntry) | 
			
		
	
		
			
				
					|  |  |  | 	bufferStart = realBrokerClient.getBufferStartFromEntry(parquetEntry) | 
			
		
	
		
			
				
					|  |  |  | 	assert.NotNil(t, bufferStart) | 
			
		
	
		
			
				
					|  |  |  | 	assert.Equal(t, int64(1500001), bufferStart.StartIndex, "Should parse JSON buffer_start from log file") | 
			
		
	
		
			
				
					|  |  |  | 	assert.Equal(t, int64(1500001), bufferStart.StartIndex, "Should parse binary buffer_start from Parquet file") | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  | 	// Test missing metadata
 | 
			
		
	
		
			
				
					|  |  |  | 	emptyEntry := &filer_pb.Entry{ | 
			
		
	
	
		
			
				
					|  |  | @ -1301,4 +1304,16 @@ func TestBrokerClient_ParquetBufferStartForBrokerQuery(t *testing.T) { | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  | 	bufferStart = realBrokerClient.getBufferStartFromEntry(emptyEntry) | 
			
		
	
		
			
				
					|  |  |  | 	assert.Nil(t, bufferStart, "Should return nil for entry without buffer_start metadata") | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  | 	// Test invalid format (wrong size)
 | 
			
		
	
		
			
				
					|  |  |  | 	invalidEntry := &filer_pb.Entry{ | 
			
		
	
		
			
				
					|  |  |  | 		Name:        "invalid-metadata", | 
			
		
	
		
			
				
					|  |  |  | 		IsDirectory: false, | 
			
		
	
		
			
				
					|  |  |  | 		Extended: map[string][]byte{ | 
			
		
	
		
			
				
					|  |  |  | 			"buffer_start": []byte("invalid"), | 
			
		
	
		
			
				
					|  |  |  | 		}, | 
			
		
	
		
			
				
					|  |  |  | 	} | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  | 	bufferStart = realBrokerClient.getBufferStartFromEntry(invalidEntry) | 
			
		
	
		
			
				
					|  |  |  | 	assert.Nil(t, bufferStart, "Should return nil for invalid buffer_start metadata") | 
			
		
	
		
			
				
					|  |  |  | } |