131 lines
2.8 KiB
Go
131 lines
2.8 KiB
Go
package tag
|
|
|
|
import (
|
|
"bytes"
|
|
"crypto/ed25519"
|
|
"encoding/json"
|
|
"reflect"
|
|
"testing"
|
|
|
|
"lukechampine.com/frand"
|
|
|
|
"github.com/mleku/transit/chk"
|
|
"github.com/mleku/transit/id"
|
|
"github.com/mleku/transit/pubkey"
|
|
)
|
|
|
|
func TestNew(t *testing.T) {
|
|
// root
|
|
var b []byte
|
|
var err error
|
|
rootId := generateId()
|
|
root := New("root", rootId)
|
|
if b, err = json.Marshal(&root); chk.E(err) {
|
|
t.Fatal(err)
|
|
}
|
|
root2 := &U{}
|
|
if err = json.Unmarshal(b, root2); chk.E(err) {
|
|
t.Fatal(err)
|
|
}
|
|
if i, ok := root2.GetId(); ok {
|
|
if !bytes.Equal(i.Hash, rootId.Hash) {
|
|
t.Fatal("did not get same root id back")
|
|
}
|
|
} else {
|
|
t.Fatalf("got wrong type %v", reflect.TypeOf(root2.T[1]))
|
|
}
|
|
// // parent
|
|
parentId := generateId()
|
|
parent := New("parent", parentId)
|
|
if b, err = json.Marshal(&parent); chk.E(err) {
|
|
t.Fatal(err)
|
|
}
|
|
parent2 := &U{}
|
|
if err = json.Unmarshal(b, parent2); chk.E(err) {
|
|
t.Fatal(err)
|
|
}
|
|
if i, ok := parent2.GetId(); ok {
|
|
if !bytes.Equal(i.Hash, parentId.Hash) {
|
|
t.Fatal("did not get same parent id back")
|
|
}
|
|
} else {
|
|
t.Fatalf("got wrong type %v", reflect.TypeOf(parent2.T[1]))
|
|
}
|
|
// event
|
|
eventId := generateId()
|
|
eid := New("event", eventId)
|
|
if b, err = json.Marshal(&eid); chk.E(err) {
|
|
t.Fatal(err)
|
|
}
|
|
eid2 := &U{}
|
|
if err = json.Unmarshal(b, eid2); chk.E(err) {
|
|
t.Fatal(err)
|
|
}
|
|
if i, ok := eid2.GetId(); ok {
|
|
if !bytes.Equal(i.Hash, eventId.Hash) {
|
|
t.Fatal("did not get same event id back")
|
|
}
|
|
} else {
|
|
t.Fatalf("got wrong type %v", reflect.TypeOf(eid2.T[1]))
|
|
}
|
|
// user
|
|
pkB := generatePubkey()
|
|
pk := New("user", pkB)
|
|
if b, err = json.Marshal(&pk); chk.E(err) {
|
|
t.Fatal(err)
|
|
}
|
|
pk2 := &U{}
|
|
if err = json.Unmarshal(b, pk2); chk.E(err) {
|
|
t.Fatal(err)
|
|
}
|
|
if p, ok := pk2.GetPubkey(); ok {
|
|
if !bytes.Equal(p.Key, pkB.Key) {
|
|
t.Fatal("did not get same pubkey back")
|
|
}
|
|
} else {
|
|
t.Fatalf("got wrong type %v", reflect.TypeOf(pk2.T[1]))
|
|
}
|
|
// hashtag
|
|
ht := New("hashtag", "winning")
|
|
if b, err = json.Marshal(&ht); chk.E(err) {
|
|
t.Fatal(err)
|
|
}
|
|
hashtag2 := &U{}
|
|
if err = json.Unmarshal(b, hashtag2); chk.E(err) {
|
|
t.Fatal(err)
|
|
}
|
|
if h, ok := hashtag2.GetString(); ok {
|
|
if h != "winning" {
|
|
t.Fatal("did not get same hashtag back")
|
|
}
|
|
} else {
|
|
t.Fatalf("got wrong type %v", reflect.TypeOf(hashtag2.T[1]))
|
|
}
|
|
// url
|
|
ur := "http://example.com"
|
|
ut := New("url", ur)
|
|
if b, err = json.Marshal(ut); chk.E(err) {
|
|
t.Fatal(err)
|
|
}
|
|
ut2 := &U{}
|
|
if err = json.Unmarshal(b, ut2); chk.E(err) {
|
|
t.Fatal(err)
|
|
}
|
|
if utt, ok := ut2.GetString(); ok {
|
|
if utt != ur {
|
|
t.Fatal("did not get same URL back")
|
|
}
|
|
} else {
|
|
t.Fatalf("got wrong type %v", reflect.TypeOf(ut2.T[1]))
|
|
}
|
|
}
|
|
|
|
func generateId() (i *id.I) { return id.New(frand.Bytes(32)) }
|
|
|
|
func generatePubkey() (p *pubkey.P) {
|
|
var pub ed25519.PublicKey
|
|
pub, _, _ = ed25519.GenerateKey(frand.Reader)
|
|
p = pubkey.New(pub)
|
|
return
|
|
}
|