Files
mesh-contracts/identity-and-access/go/clients/meshnodeenrollerclient/enrolment_test.go
T

59 lines
2.1 KiB
Go

package meshnodeenrollerclient
import (
"bytes"
"encoding/json"
"reflect"
"testing"
"time"
seat "git.novox.be/novox/mesh-contracts/identity-and-access/go/seats/meshnodeenroller"
)
func TestATokenLifeAndTheRedeemProofAreAsTheHolderMakesThem(t *testing.T) {
for life, ok := range map[string]bool{"": true, "1h": true, "24h": true, "25h": false, "0s": false, "-1h": false, "soon": false} {
if _, err := TokenLife(life); (err == nil) != ok {
t.Errorf("TokenLife(%q) = %v, want ok %v", life, err, ok)
}
}
if d, _ := TokenLife(""); d != DefaultTokenLife {
t.Errorf("an empty life is %s", d)
}
if got := IssuedID("g14", time.Unix(0, 42)); got != "enrolment-issued.g14.42" {
t.Errorf("IssuedID = %s", got)
}
if User("g14") != "enrol.g14" {
t.Error("the joining machine dials as enrol.<node>")
}
r := Redeem{Node: "g14", PublicKey: "p", OverlayKey: "o", SealingKey: "s", ServingKey: "v"}
if string(RedeemProof("g14", "p", "o", "s", "v")) != "novox-mesh-redeem v1\x00g14\x00p\x00o\x00s\x00v" || r.KeysDigest() != KeysDigest("p", "o", "s", "v") {
t.Error("the proof bytes or the keys' digest changed")
}
if got := (RedeemAnswer{Node: "g14", Signature: "x"}).SignedBytes(); string(got) == "" || string(got) == "x" {
t.Errorf("SignedBytes = %s", got)
}
}
// TestTheRedeemAnswerIsTheContractsWire: the client's answer reads into the contract's type with no field dropped, and
// the contract's reads back as the client's wire.
func TestTheRedeemAnswerIsTheContractsWire(t *testing.T) {
mine := RedeemAnswer{Node: "g14", Login: "g14-login", Account: "YQ==", Certificate: "pem", Signer: "dg==", Signature: "cw=="}
wire, _ := json.Marshal(mine)
var theirs seat.RedeemAnswer
d := json.NewDecoder(bytes.NewReader(wire))
d.DisallowUnknownFields()
if err := d.Decode(&theirs); err != nil {
t.Fatal(err)
}
if theirs.Node != "g14" || theirs.Signer != "dg==" || theirs.Signature != "cw==" {
t.Errorf("the contract reads %+v", theirs)
}
back, _ := json.Marshal(theirs)
var a, b map[string]string
_ = json.Unmarshal(wire, &a)
_ = json.Unmarshal(back, &b)
if len(a) != 6 || !reflect.DeepEqual(a, b) {
t.Errorf("the contract reads %s back as %s", wire, back)
}
}