package proto import ( "testing" "time" "github.com/libp2p/go-libp2p/core/crypto" "github.com/libp2p/go-libp2p/core/peer" "github.com/libp2p/go-libp2p/core/record" ) func TestReservationVoucher(t *testing.T) { relayPrivk, relayPubk, err := crypto.GenerateKeyPair(crypto.Ed25519, 0) if err != nil { t.Fatal(err) } _, peerPubk, err := crypto.GenerateKeyPair(crypto.Ed25519, 0) if err != nil { t.Fatal(err) } relayID, err := peer.IDFromPublicKey(relayPubk) if err != nil { t.Fatal(err) } peerID, err := peer.IDFromPublicKey(peerPubk) if err != nil { t.Fatal(err) } rsvp := &ReservationVoucher{ Relay: relayID, Peer: peerID, Expiration: time.Now().Add(time.Hour), } envelope, err := record.Seal(rsvp, relayPrivk) if err != nil { t.Fatal(err) } blob, err := envelope.Marshal() if err != nil { t.Fatal(err) } _, rec, err := record.ConsumeEnvelope(blob, RecordDomain) if err != nil { t.Fatal(err) } rsvp2, ok := rec.(*ReservationVoucher) if !ok { t.Fatalf("invalid record type %+T", rec) } if rsvp.Relay != rsvp2.Relay { t.Fatal("relay IDs don't match") } if rsvp.Peer != rsvp2.Peer { t.Fatal("peer IDs don't match") } if rsvp.Expiration.Unix() != rsvp2.Expiration.Unix() { t.Fatal("expirations don't match") } }