github.com/ipld/go-ipld-prime@v0.21.0/codec/dagjson/roundtripBytes_test.go (about) 1 package dagjson_test 2 3 import ( 4 "bytes" 5 "strings" 6 "testing" 7 8 qt "github.com/frankban/quicktest" 9 10 "github.com/ipld/go-ipld-prime/codec/dagjson" 11 "github.com/ipld/go-ipld-prime/fluent" 12 "github.com/ipld/go-ipld-prime/node/basicnode" 13 nodetests "github.com/ipld/go-ipld-prime/node/tests" 14 ) 15 16 var byteNode = fluent.MustBuildMap(basicnode.Prototype.Map, 4, func(na fluent.MapAssembler) { 17 na.AssembleEntry("plain").AssignString("olde string") 18 na.AssembleEntry("bytes").AssignBytes([]byte("deadbeef")) 19 }) 20 var byteNodeSorted = fluent.MustBuildMap(basicnode.Prototype.Map, 4, func(na fluent.MapAssembler) { 21 na.AssembleEntry("bytes").AssignBytes([]byte("deadbeef")) 22 na.AssembleEntry("plain").AssignString("olde string") 23 }) 24 var byteSerial = `{"bytes":{"/":{"bytes":"ZGVhZGJlZWY"}},"plain":"olde string"}` 25 26 func TestRoundtripBytes(t *testing.T) { 27 t.Run("encoding", func(t *testing.T) { 28 var buf bytes.Buffer 29 err := dagjson.Encode(byteNode, &buf) 30 qt.Assert(t, err, qt.IsNil) 31 qt.Check(t, buf.String(), qt.Equals, byteSerial) 32 }) 33 t.Run("decoding", func(t *testing.T) { 34 buf := strings.NewReader(byteSerial) 35 nb := basicnode.Prototype.Map.NewBuilder() 36 err := dagjson.Decode(nb, buf) 37 qt.Assert(t, err, qt.IsNil) 38 qt.Check(t, nb.Build(), nodetests.NodeContentEquals, byteNodeSorted) 39 }) 40 } 41 42 var encapsulatedNode = fluent.MustBuildMap(basicnode.Prototype.Map, 1, func(na fluent.MapAssembler) { 43 na.AssembleEntry("/").CreateMap(1, func(sa fluent.MapAssembler) { 44 sa.AssembleEntry("bytes").AssignBytes([]byte("deadbeef")) 45 }) 46 }) 47 var encapsulatedSerial = `{"/":{"bytes":{"/":{"bytes":"ZGVhZGJlZWY"}}}}` 48 49 func TestEncapsulatedBytes(t *testing.T) { 50 t.Run("encoding", func(t *testing.T) { 51 var buf bytes.Buffer 52 err := dagjson.Encode(encapsulatedNode, &buf) 53 qt.Assert(t, err, qt.IsNil) 54 qt.Check(t, buf.String(), qt.Equals, encapsulatedSerial) 55 }) 56 t.Run("decoding", func(t *testing.T) { 57 buf := strings.NewReader(encapsulatedSerial) 58 nb := basicnode.Prototype.Map.NewBuilder() 59 err := dagjson.Decode(nb, buf) 60 qt.Assert(t, err, qt.IsNil) 61 qt.Check(t, nb.Build(), nodetests.NodeContentEquals, encapsulatedNode) 62 }) 63 } 64 65 var withPadding = `{"/": {"bytes": "Bxrk96XO8cwr3hrcL4VeWtVdYudzHv47BbBl7CesWvmjRrRPOLZp9Ukg6sivn5Nqg4V5X2w43mk4Ppuzr+M+DA=="}}` 66 67 func TestPaddedBytes(t *testing.T) { 68 t.Run("decoding", func(t *testing.T) { 69 buf := strings.NewReader(withPadding) 70 nb := basicnode.Prototype.Bytes.NewBuilder() 71 err := dagjson.Decode(nb, buf) 72 qt.Assert(t, err, qt.IsNil) 73 }) 74 }