90 lines
2.5 KiB
Go
90 lines
2.5 KiB
Go
package attestation_test
|
|
|
|
import (
|
|
"bytes"
|
|
_ "embed"
|
|
"encoding/base64"
|
|
"testing"
|
|
|
|
"github.com/MetaMask/go-did-it/crypto"
|
|
"github.com/MetaMask/go-did-it/crypto/ed25519"
|
|
"github.com/stretchr/testify/assert"
|
|
"github.com/stretchr/testify/require"
|
|
|
|
"github.com/ucan-wg/go-ucan/token/attestation"
|
|
"github.com/ucan-wg/go-ucan/token/internal/envelope"
|
|
)
|
|
|
|
//go:embed testdata/new.dagjson
|
|
var newDagJson []byte
|
|
|
|
const (
|
|
issuerPrivKeyCfg = "8bX3+HJxxlIGgNZ8yFG+t48oMGygEGyWD5Cy8ugeCIRksEIVyCabkuLVXbMZYj1lpXgL22Fok8nv52clGfEMXA=="
|
|
newCID = "zdpuAyWCG3GWfebFME3e4oG926tzpJodw4WTa9VjBwqPNiVWF"
|
|
)
|
|
|
|
func TestSchemaRoundTrip(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
privKey := privKey(t, issuerPrivKeyCfg)
|
|
|
|
t.Run("via buffers", func(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
// format: dagJson --> PayloadModel --> dagCbor --> PayloadModel --> dagJson
|
|
// function: DecodeDagJson() Seal() Unseal() EncodeDagJson()
|
|
|
|
p1, err := attestation.FromDagJson(newDagJson)
|
|
require.NoError(t, err)
|
|
|
|
cborBytes, id, err := p1.ToSealed(privKey)
|
|
require.NoError(t, err)
|
|
assert.Equal(t, newCID, envelope.CIDToBase58BTC(id))
|
|
|
|
p2, c2, err := attestation.FromSealed(cborBytes)
|
|
require.NoError(t, err)
|
|
assert.Equal(t, id, c2)
|
|
|
|
readJson, err := p2.ToDagJson(privKey)
|
|
require.NoError(t, err)
|
|
|
|
assert.JSONEq(t, string(newDagJson), string(readJson))
|
|
})
|
|
|
|
t.Run("via streaming", func(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
buf := bytes.NewBuffer(newDagJson)
|
|
|
|
// format: dagJson --> PayloadModel --> dagCbor --> PayloadModel --> dagJson
|
|
// function: DecodeDagJson() Seal() Unseal() EncodeDagJson()
|
|
|
|
p1, err := attestation.FromDagJsonReader(buf)
|
|
require.NoError(t, err)
|
|
|
|
cborBytes := &bytes.Buffer{}
|
|
id, err := p1.ToSealedWriter(cborBytes, privKey)
|
|
require.NoError(t, err)
|
|
assert.Equal(t, newCID, envelope.CIDToBase58BTC(id))
|
|
|
|
p2, c2, err := attestation.FromSealedReader(cborBytes)
|
|
require.NoError(t, err)
|
|
assert.Equal(t, envelope.CIDToBase58BTC(id), envelope.CIDToBase58BTC(c2))
|
|
|
|
readJson := &bytes.Buffer{}
|
|
require.NoError(t, p2.ToDagJsonWriter(readJson, privKey))
|
|
|
|
assert.JSONEq(t, string(newDagJson), readJson.String())
|
|
})
|
|
}
|
|
|
|
func privKey(t require.TestingT, privKeyCfg string) crypto.PrivateKeySigningBytes {
|
|
privBytes, err := base64.StdEncoding.DecodeString(privKeyCfg)
|
|
require.NoError(t, err)
|
|
|
|
privKey, err := ed25519.PrivateKeyFromBytes(privBytes)
|
|
require.NoError(t, err)
|
|
|
|
return privKey
|
|
}
|