From bb5a28d407d664e0e6c9dace03b0852a83a60747 Mon Sep 17 00:00:00 2001 From: Rener Castro Date: Wed, 17 Dec 2025 23:21:15 -0300 Subject: [PATCH] fix: fix Avro Object Container File (OCF) encoding header using default config --- ocf/ocf.go | 4 ++-- ocf/ocf_test.go | 55 +++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 57 insertions(+), 2 deletions(-) diff --git a/ocf/ocf.go b/ocf/ocf.go index bc6d62a..db8bb8b 100644 --- a/ocf/ocf.go +++ b/ocf/ocf.go @@ -379,7 +379,7 @@ func newEncoder(schema avro.Schema, w io.Writer, cfg encoderConfig) (*Encoder, e return nil, err } - writer := avro.NewWriter(w, 512, avro.WithWriterConfig(cfg.EncodingConfig)) + writer := avro.NewWriter(w, 512, avro.WithWriterConfig(avro.DefaultConfig)) buf := &bytes.Buffer{} e := &Encoder{ writer: writer, @@ -420,7 +420,7 @@ func newEncoder(schema avro.Schema, w io.Writer, cfg encoderConfig) (*Encoder, e return nil, err } - writer := avro.NewWriter(w, 512, avro.WithWriterConfig(cfg.EncodingConfig)) + writer := avro.NewWriter(w, 512, avro.WithWriterConfig(avro.DefaultConfig)) writer.WriteVal(HeaderSchema, header) if err = writer.Flush(); err != nil { return nil, err diff --git a/ocf/ocf_test.go b/ocf/ocf_test.go index 25566f9..192b024 100644 --- a/ocf/ocf_test.go +++ b/ocf/ocf_test.go @@ -1575,3 +1575,58 @@ func TestEncoder_ResetPreservesCodec(t *testing.T) { require.NoError(t, err) assert.Equal(t, []byte("deflate"), dec2.Metadata()["avro.codec"]) } + +type CustomTagTestObject struct { + StringField string `json:"string_field"` + IntField int `json:"int_field"` +} + +func TestCustomTagKey(t *testing.T) { + // Define schema matching the json tags + schemaStr := `{ + "type": "record", + "name": "CustomTagTestObject", + "fields": [ + {"name": "string_field", "type": "string"}, + {"name": "int_field", "type": "int"} + ] + }` + + // Create a Config with TagKey set to "json" + config := avro.Config{ + TagKey: "json", + }.Freeze() + + // Create a buffer to write the OCF file to + var buf bytes.Buffer + + // Create OCF encoder with custom encoding config + enc, err := ocf.NewEncoder(schemaStr, &buf, ocf.WithEncodingConfig(config)) + require.NoError(t, err) + + // Data to encode + data := CustomTagTestObject{ + StringField: "hello", + IntField: 42, + } + + // Encode using the OCF encoder + err = enc.Encode(data) + require.NoError(t, err) + + // Close the encoder to flush data + err = enc.Close() + require.NoError(t, err) + + // Verify the output by decoding + dec, err := ocf.NewDecoder(&buf, ocf.WithDecoderConfig(config)) + require.NoError(t, err) + + var result CustomTagTestObject + require.True(t, dec.HasNext()) + err = dec.Decode(&result) + require.NoError(t, err) + + assert.Equal(t, data.StringField, result.StringField) + assert.Equal(t, data.IntField, result.IntField) +}