77 lines
2.3 KiB
Go
77 lines
2.3 KiB
Go
package overlay
|
|
|
|
import (
|
|
"encoding/json"
|
|
"os"
|
|
"reflect"
|
|
"testing"
|
|
|
|
"git.novox.be/novox/mesh-sdk/go/catalogue"
|
|
"git.novox.be/novox/mesh-sdk/go/seatdef"
|
|
)
|
|
|
|
// The seat's definition is mesh-connectivity-contracts' (ADR 0636 §6); this module's manifest claims it, and the
|
|
// manifest is judged against that definition as every reader of the seat list judges it (ADR 0635 §1).
|
|
func useTheSeat(t *testing.T) {
|
|
t.Helper()
|
|
raw, err := os.ReadFile("../../../mesh-connectivity-contracts/seats/the-private-network/seat.json")
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
def, err := seatdef.Parse(raw)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
catalogue.UseSeats(catalogue.SeatsFromDefinitions([]seatdef.Definition{def}))
|
|
}
|
|
|
|
// The private network's claim is a seat the mesh defines (novox/hq ADR 0110), and the manifest the module ships is
|
|
// the manifest the node-engine folds in: module.json says what Manifest() says, beside its build.
|
|
func TestThePrivateNetworksClaimIsASeatTheMeshDefinesAndModuleJSONSaysTheSame(t *testing.T) {
|
|
useTheSeat(t)
|
|
raw, err := json.Marshal(Manifest())
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if _, err := catalogue.Decode(raw); err != nil {
|
|
t.Fatalf("%s does not decode: %v", Name, err)
|
|
}
|
|
seat, defined := catalogue.SeatNamed(TheNetwork)
|
|
if !defined || seat.Scope != catalogue.ScopeNode {
|
|
t.Fatalf("%s is not a node seat the mesh defines: %+v", TheNetwork, seat)
|
|
}
|
|
file, err := os.ReadFile("../../module.json")
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
var onDisk, composed map[string]any
|
|
if err := json.Unmarshal(file, &onDisk); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
json.Unmarshal(raw, &composed)
|
|
delete(onDisk, "build")
|
|
if !reflect.DeepEqual(onDisk, composed) {
|
|
t.Errorf("module.json beside its build is %v, Manifest() is %v", onDisk, composed)
|
|
}
|
|
}
|
|
|
|
// Each provision the module offers says its credential's form, as the manifest validator requires of every offer.
|
|
func TestEveryProvisionTheModuleOffersSaysItsCredentialForm(t *testing.T) {
|
|
raw, err := json.Marshal(Manifest())
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
m, err := catalogue.Decode(raw)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if len(m.Provides) != 2 {
|
|
t.Fatalf("the module provides %+v: the network and the addresses", m.Provides)
|
|
}
|
|
for _, o := range m.Provides {
|
|
if o.Credential == nil || o.Credential.Form != "none" {
|
|
t.Errorf("%s offers credential %+v: the form is none", o.Name, o.Credential)
|
|
}
|
|
}
|
|
}
|