|
4 | 4 | "bytes" |
5 | 5 | "fmt" |
6 | 6 | "io" |
| 7 | + "os" |
7 | 8 | "testing" |
| 9 | + "time" |
8 | 10 |
|
9 | 11 | "github.com/apache/arrow/go/v17/arrow" |
10 | 12 | "github.com/apache/arrow/go/v17/arrow/array" |
@@ -756,3 +758,44 @@ func TestNullSchemaSerialize(t *testing.T) { |
756 | 758 | t.Fatalf("Schema serialization failed: %v", err) |
757 | 759 | } |
758 | 760 | } |
| 761 | + |
| 762 | +func TestSeralizeToDisk(t *testing.T) { |
| 763 | + r1 := generateDummyRecordBatch1() |
| 764 | + serializer, err := NewSerializer(r1.Schema) |
| 765 | + if err != nil { |
| 766 | + t.Fatalf("Failed to create serializer: %v", err) |
| 767 | + } |
| 768 | + randStr := time.Now().Unix() |
| 769 | + tmpFile, err := os.Create("serialized_data_" + fmt.Sprintf("%d", randStr) + ".bin") |
| 770 | + if err != nil { |
| 771 | + t.Fatalf("Failed to create temp file: %v", err) |
| 772 | + } |
| 773 | + defer os.Remove(tmpFile.Name()) |
| 774 | + defer tmpFile.Close() |
| 775 | + schemaContent, _ := serializer.SerializeSchema(r1.Schema) |
| 776 | + columnContent, _ := serializer.SerializeBatchColumns(r1) |
| 777 | + schemaContent = append(schemaContent, columnContent...) |
| 778 | + _, err = tmpFile.Write(schemaContent) |
| 779 | + if err != nil { |
| 780 | + t.Fatalf("Failed to write serialized data to disk: %v", err) |
| 781 | + } |
| 782 | + // now decode from disk |
| 783 | + _, err = tmpFile.Seek(0, io.SeekStart) |
| 784 | + if err != nil { |
| 785 | + t.Fatalf("Failed to seek to start of file: %v", err) |
| 786 | + } |
| 787 | + deserSchema, err := serializer.DeserializeSchema(tmpFile) |
| 788 | + if err != nil { |
| 789 | + t.Fatalf("Failed to deserialize schema from disk: %v", err) |
| 790 | + } |
| 791 | + if !deserSchema.Equal(r1.Schema) { |
| 792 | + t.Fatalf("Deserialized schema does not match original schema") |
| 793 | + } |
| 794 | + deserColumns, err := serializer.DecodeRecordBatch(tmpFile, deserSchema) |
| 795 | + if err != nil { |
| 796 | + t.Fatalf("Failed to deserialize columns from disk: %v", err) |
| 797 | + } |
| 798 | + if len(deserColumns) != len(r1.Columns) { |
| 799 | + t.Fatalf("Column count mismatch after deserialization from disk") |
| 800 | + } |
| 801 | +} |
0 commit comments