152 lines
3.6 KiB
Go
152 lines
3.6 KiB
Go
package envelope_test
|
|
|
|
import (
|
|
"bytes"
|
|
"crypto/sha256"
|
|
"testing"
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
"github.com/stretchr/testify/require"
|
|
"github.com/ucan-wg/go-ucan/tokens/internal/envelope"
|
|
"gotest.tools/v3/golden"
|
|
)
|
|
|
|
func TestDecode(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
t.Run("via FromDagCbor", func(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
data := golden.Get(t, "example.dagcbor")
|
|
|
|
tkn, err := envelope.FromDagCbor[*Example](data)
|
|
require.NoError(t, err)
|
|
assert.Equal(t, exampleGreeting, tkn.Hello)
|
|
assert.Equal(t, exampleDID, tkn.Issuer)
|
|
})
|
|
|
|
t.Run("via FromDagJson", func(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
data := golden.Get(t, "example.dagjson")
|
|
|
|
tkn, err := envelope.FromDagJson[*Example](data)
|
|
require.NoError(t, err)
|
|
assert.Equal(t, exampleGreeting, tkn.Hello)
|
|
assert.Equal(t, exampleDID, tkn.Issuer)
|
|
})
|
|
}
|
|
|
|
func TestEncode(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
t.Run("via ToDagCbor", func(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
data, err := envelope.ToDagCbor(examplePrivKey(t), newExample(t))
|
|
require.NoError(t, err)
|
|
golden.AssertBytes(t, data, exampleDAGCBORFilename)
|
|
})
|
|
|
|
t.Run("via ToDagJson", func(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
data, err := envelope.ToDagJson(examplePrivKey(t), newExample(t))
|
|
require.NoError(t, err)
|
|
golden.Assert(t, string(data), exampleDAGJSONFilename)
|
|
})
|
|
}
|
|
|
|
func TestRoundtrip(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
t.Run("via FromDagCbor/ToDagCbor", func(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
dataIn := golden.Get(t, exampleDAGCBORFilename)
|
|
|
|
tkn, err := envelope.FromDagCbor[*Example](dataIn)
|
|
require.NoError(t, err)
|
|
assert.Equal(t, exampleGreeting, tkn.Hello)
|
|
assert.Equal(t, exampleDID, tkn.Issuer)
|
|
|
|
dataOut, err := envelope.ToDagCbor(examplePrivKey(t), newExample(t))
|
|
require.NoError(t, err)
|
|
assert.Equal(t, dataIn, dataOut)
|
|
})
|
|
|
|
t.Run("via FromDagCborReader/ToDagCborWriter", func(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
data := golden.Get(t, exampleDAGCBORFilename)
|
|
|
|
tkn, err := envelope.FromDagCborReader[*Example](bytes.NewReader(data))
|
|
require.NoError(t, err)
|
|
assert.Equal(t, exampleGreeting, tkn.Hello)
|
|
assert.Equal(t, exampleDID, tkn.Issuer)
|
|
|
|
w := &bytes.Buffer{}
|
|
require.NoError(t, envelope.ToDagCborWriter(w, examplePrivKey(t), newExample(t)))
|
|
assert.Equal(t, data, w.Bytes())
|
|
})
|
|
|
|
t.Run("via FromDagJson/ToDagJson", func(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
dataIn := golden.Get(t, exampleDAGJSONFilename)
|
|
|
|
tkn, err := envelope.FromDagJson[*Example](dataIn)
|
|
require.NoError(t, err)
|
|
assert.Equal(t, exampleGreeting, tkn.Hello)
|
|
assert.Equal(t, exampleDID, tkn.Issuer)
|
|
|
|
dataOut, err := envelope.ToDagJson(examplePrivKey(t), newExample(t))
|
|
require.NoError(t, err)
|
|
assert.Equal(t, dataIn, dataOut)
|
|
})
|
|
|
|
t.Run("via FromDagJsonReader/ToDagJsonrWriter", func(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
data := golden.Get(t, exampleDAGJSONFilename)
|
|
|
|
tkn, err := envelope.FromDagJsonReader[*Example](bytes.NewReader(data))
|
|
require.NoError(t, err)
|
|
assert.Equal(t, exampleGreeting, tkn.Hello)
|
|
assert.Equal(t, exampleDID, tkn.Issuer)
|
|
|
|
w := &bytes.Buffer{}
|
|
require.NoError(t, envelope.ToDagJsonWriter(w, examplePrivKey(t), newExample(t)))
|
|
assert.Equal(t, data, w.Bytes())
|
|
})
|
|
}
|
|
|
|
func TestFromIPLD_with_invalid_signature(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
node := invalidNodeFromGolden(t)
|
|
tkn, err := envelope.FromIPLD[*Example](node)
|
|
assert.Nil(t, tkn)
|
|
require.EqualError(t, err, "failed to verify the token's signature")
|
|
}
|
|
|
|
func TestHash(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
msg := []byte("this is a test")
|
|
|
|
hash1 := sha256.Sum256(msg)
|
|
|
|
hasher := sha256.New()
|
|
|
|
for _, b := range msg {
|
|
hasher.Write([]byte{b})
|
|
}
|
|
|
|
hash2 := hasher.Sum(nil)
|
|
hash3 := hasher.Sum(nil)
|
|
|
|
require.Equal(t, hash1[:], hash2)
|
|
require.Equal(t, hash1[:], hash3)
|
|
}
|