85 lines
1.8 KiB
Go
85 lines
1.8 KiB
Go
package token_test
|
|
|
|
import (
|
|
_ "embed"
|
|
"fmt"
|
|
"testing"
|
|
|
|
"github.com/ipld/go-ipld-prime"
|
|
"github.com/ipld/go-ipld-prime/codec/dagcbor"
|
|
"github.com/ipld/go-ipld-prime/codec/dagjson"
|
|
"github.com/stretchr/testify/require"
|
|
"github.com/ucan-wg/go-ucan/internal/token"
|
|
)
|
|
|
|
//go:embed token.ipldsch
|
|
var schemaBytes []byte
|
|
|
|
func TestSchemaRoundTrip(t *testing.T) {
|
|
const delegationJson = `
|
|
{
|
|
"aud":"did:key:def456",
|
|
"cmd":"/foo/bar",
|
|
"exp":123456,
|
|
"iss":"did:key:abc123",
|
|
"meta":{
|
|
"bar":"baaar",
|
|
"foo":"fooo"
|
|
},
|
|
"nbf":123456,
|
|
"nonce":{
|
|
"/":{
|
|
"bytes":"c3VwZXItcmFuZG9t"
|
|
}
|
|
},
|
|
"pol":[
|
|
["==", ".status", "draft"],
|
|
["all", ".reviewer", [
|
|
["like", ".email", "*@example.com"]]
|
|
],
|
|
["any", ".tags", [
|
|
["or", [
|
|
["==", ".", "news"],
|
|
["==", ".", "press"]]
|
|
]]
|
|
]
|
|
],
|
|
"sub":""
|
|
}
|
|
`
|
|
// format: dagJson --> IPLD node --> token --> dagCbor --> IPLD node --> dagJson
|
|
// function: Unwrap() Wrap()
|
|
|
|
n1, err := ipld.DecodeUsingPrototype([]byte(delegationJson), dagjson.Decode, token.Prototype())
|
|
require.NoError(t, err)
|
|
|
|
cborBytes, err := ipld.Encode(n1, dagcbor.Encode)
|
|
require.NoError(t, err)
|
|
fmt.Println("cborBytes length", len(cborBytes))
|
|
fmt.Println("cbor", string(cborBytes))
|
|
|
|
n2, err := ipld.DecodeUsingPrototype(cborBytes, dagcbor.Decode, token.Prototype())
|
|
require.NoError(t, err)
|
|
fmt.Println("read Cbor", n2)
|
|
|
|
t1, err := token.Unwrap(n2)
|
|
require.NoError(t, err)
|
|
|
|
n3 := t1.Wrap()
|
|
|
|
readJson, err := ipld.Encode(n3, dagjson.Encode)
|
|
require.NoError(t, err)
|
|
fmt.Println("readJson length", len(readJson))
|
|
fmt.Println("json: ", string(readJson))
|
|
|
|
require.JSONEq(t, delegationJson, string(readJson))
|
|
}
|
|
|
|
func BenchmarkSchemaLoad(b *testing.B) {
|
|
b.ReportAllocs()
|
|
|
|
for i := 0; i < b.N; i++ {
|
|
_, _ = ipld.LoadSchemaBytes(schemaBytes)
|
|
}
|
|
}
|