github.com/hamba/avro/v2@v2.22.1-0.20240518180522-aff3955acf7d/encoder_array_test.go (about) 1 package avro_test 2 3 import ( 4 "bytes" 5 "testing" 6 7 "github.com/hamba/avro/v2" 8 "github.com/stretchr/testify/assert" 9 "github.com/stretchr/testify/require" 10 ) 11 12 func TestEncoder_ArrayInvalidType(t *testing.T) { 13 defer ConfigTeardown() 14 15 schema := `{"type":"array", "items": "int"}` 16 buf := bytes.NewBuffer([]byte{}) 17 enc, err := avro.NewEncoder(schema, buf) 18 require.NoError(t, err) 19 20 err = enc.Encode("test") 21 22 assert.Error(t, err) 23 } 24 25 func TestEncoder_Array(t *testing.T) { 26 defer ConfigTeardown() 27 28 schema := `{"type":"array", "items": "int"}` 29 buf := bytes.NewBuffer([]byte{}) 30 enc, err := avro.NewEncoder(schema, buf) 31 require.NoError(t, err) 32 33 err = enc.Encode([]int{27, 28}) 34 35 require.NoError(t, err) 36 assert.Equal(t, []byte{0x03, 0x04, 0x36, 0x38, 0x0}, buf.Bytes()) 37 } 38 39 func TestEncoder_ArrayEmpty(t *testing.T) { 40 defer ConfigTeardown() 41 42 schema := `{"type":"array", "items": "int"}` 43 buf := bytes.NewBuffer([]byte{}) 44 enc, err := avro.NewEncoder(schema, buf) 45 require.NoError(t, err) 46 47 err = enc.Encode([]int{}) 48 49 require.NoError(t, err) 50 assert.Equal(t, []byte{0x0}, buf.Bytes()) 51 } 52 53 func TestEncoder_ArrayOfStruct(t *testing.T) { 54 defer ConfigTeardown() 55 56 schema := `{"type":"array", "items": {"type": "record", "name": "test", "fields" : [{"name": "a", "type": "long"}, {"name": "b", "type": "string"}]}}` 57 buf := bytes.NewBuffer([]byte{}) 58 enc, err := avro.NewEncoder(schema, buf) 59 require.NoError(t, err) 60 61 err = enc.Encode([]TestRecord{{A: 27, B: "foo"}, {A: 27, B: "foo"}}) 62 63 require.NoError(t, err) 64 assert.Equal(t, []byte{0x03, 0x14, 0x36, 0x06, 0x66, 0x6f, 0x6f, 0x36, 0x06, 0x66, 0x6f, 0x6f, 0x0}, buf.Bytes()) 65 } 66 67 func TestEncoder_ArrayError(t *testing.T) { 68 defer ConfigTeardown() 69 70 schema := `{"type":"array", "items": "int"}` 71 buf := bytes.NewBuffer([]byte{}) 72 enc, err := avro.NewEncoder(schema, buf) 73 require.NoError(t, err) 74 75 err = enc.Encode([]string{"foo", "bar"}) 76 77 assert.Error(t, err) 78 }