Files
transit/event/event_test.go
2025-05-22 13:08:25 +01:00

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)) }