95 lines
1.9 KiB
Go
95 lines
1.9 KiB
Go
package event
|
|
|
|
import (
|
|
"bytes"
|
|
"crypto/ed25519"
|
|
"encoding/json"
|
|
"testing"
|
|
|
|
"lukechampine.com/frand"
|
|
|
|
"github.com/mleku/transit/chk"
|
|
"github.com/mleku/transit/content"
|
|
"github.com/mleku/transit/id"
|
|
"github.com/mleku/transit/kind"
|
|
"github.com/mleku/transit/log"
|
|
"github.com/mleku/transit/mime"
|
|
"github.com/mleku/transit/p256k"
|
|
"github.com/mleku/transit/pubkey"
|
|
"github.com/mleku/transit/tag"
|
|
)
|
|
|
|
var e = &E{
|
|
Pubkey: generatePubkey(),
|
|
Content: content.New(`this is some content
|
|
|
|
with multiple lines
|
|
|
|
to show how it encodes
|
|
|
|
#winning`, false),
|
|
Kind: kind.New("forum/reply"),
|
|
Mimetype: mime.New("text/asciidoc"),
|
|
Tags: tag.NewTags(
|
|
tag.New("root", generateId()),
|
|
tag.New("parent", generateId()),
|
|
tag.New("event", generateId()),
|
|
tag.New("user", generatePubkey()),
|
|
tag.New("hashtag", "winning"),
|
|
tag.New("url", "http://example.com"),
|
|
),
|
|
}
|
|
|
|
func TestE(t *testing.T) {
|
|
var b []byte
|
|
var err error
|
|
if b, err = json.Marshal(e); chk.E(err) {
|
|
t.Fatal(err)
|
|
}
|
|
b1 := make([]byte, len(b))
|
|
copy(b1, b)
|
|
e2 := &E{}
|
|
if err = json.Unmarshal(b, e2); chk.E(err) {
|
|
t.Fatal(err)
|
|
}
|
|
var b2 []byte
|
|
if b2, err = json.Marshal(e2); chk.E(err) {
|
|
t.Fatal(err)
|
|
}
|
|
log.I.F("\n%s\n%s\n", b1, b2)
|
|
if !bytes.Equal(b1, b2) {
|
|
t.Fatal("failed to encode/decode")
|
|
}
|
|
}
|
|
|
|
func TestGetId(t *testing.T) {
|
|
log.I.S(e.GetId())
|
|
}
|
|
|
|
func TestSign(t *testing.T) {
|
|
var err error
|
|
signer := new(p256k.Signer)
|
|
if err = signer.Generate(); chk.E(err) {
|
|
t.Fatal(err)
|
|
}
|
|
var signed *Signed
|
|
if signed, err = e.Sign(signer); chk.E(err) {
|
|
return
|
|
}
|
|
// sb := signed.Serialize()
|
|
// log.I.F("%s", sb)
|
|
valid := signed.Verify(signer)
|
|
if !valid {
|
|
t.Fatal("failed to verify signature")
|
|
}
|
|
}
|
|
|
|
func generatePubkey() (p *pubkey.P) {
|
|
var pub ed25519.PublicKey
|
|
pub, _, _ = ed25519.GenerateKey(frand.Reader)
|
|
pp := pubkey.New(pub)
|
|
return pp
|
|
}
|
|
|
|
func generateId() (i *id.I) { return id.New(frand.Bytes(32)) }
|