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  }