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 }