A machine's uplink is a seat (hq ADR 0117)
the-uplink joins the closed set as a node seat delivering nothing. Its holder is the module for the machine's own network manager, and keeps that manager from contradicting the mesh — the resolver file left to resolv-conf, mesh0 left alone — without ever declaring a link. Held per machine, so a machine running two managers is refused at assignment rather than found by its resolver being rewritten. The count test moves to fifteen; one test holds the seat's shape.
This commit is contained in:
@@ -47,6 +47,13 @@ var seats = []Seat{
|
|||||||
{Name: "the-private-network", Scope: ScopeNode, Decision: "novox/hq ADR 0110"},
|
{Name: "the-private-network", Scope: ScopeNode, Decision: "novox/hq ADR 0110"},
|
||||||
{Name: "the-resolver-configuration", Scope: ScopeNode, Decision: "novox/hq ADR 0110"},
|
{Name: "the-resolver-configuration", Scope: ScopeNode, Decision: "novox/hq ADR 0110"},
|
||||||
{Name: "the-showcase", Scope: ScopeNode, Decision: "novox/hq ADR 0110"},
|
{Name: "the-showcase", Scope: ScopeNode, Decision: "novox/hq ADR 0110"},
|
||||||
|
// The program that manages the machine's own network. It delivers nothing: its holder only
|
||||||
|
// keeps the manager and the mesh from contradicting each other — the resolver file left to the
|
||||||
|
// mesh, the private network's interface left alone — and never declares a link, an address or
|
||||||
|
// a wireless network, because the link is the only channel a fix could arrive on. A seat
|
||||||
|
// rather than a condition in the resolver's module, so a machine running two managers is
|
||||||
|
// refused at assignment instead of found by the resolver being rewritten (novox/hq ADR 0117).
|
||||||
|
{Name: "the-uplink", Scope: ScopeNode, Decision: "novox/hq ADR 0117"},
|
||||||
}
|
}
|
||||||
|
|
||||||
// Seats is every seat the mesh defines, in reading order.
|
// Seats is every seat the mesh defines, in reading order.
|
||||||
|
|||||||
@@ -44,12 +44,32 @@ func TestTheSeatsAreAClosedSetAndEachNamesItsDecision(t *testing.T) {
|
|||||||
delivered[s.Delivers] = s.Name
|
delivered[s.Delivers] = s.Name
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if len(Seats()) != 14 {
|
if len(Seats()) != 15 {
|
||||||
t.Errorf("the mesh defines %d seats rather than 14; the set is closed, so a change here is "+
|
t.Errorf("the mesh defines %d seats rather than 15; the set is closed, so a change here is "+
|
||||||
"a decision (novox/hq ADR 0110): %s", len(Seats()), seatNames())
|
"a decision (novox/hq ADR 0110): %s", len(Seats()), seatNames())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// novox/hq ADR 0117: a machine's uplink is a seat, held per machine, and delivers nothing.
|
||||||
|
//
|
||||||
|
// **Nothing, because nothing may be required of it.** A holder only keeps its network manager from
|
||||||
|
// contradicting the mesh; a requirement resolving to it would make the manager the mesh's answer
|
||||||
|
// for something, and the manager's link is the one thing the mesh must never be able to break.
|
||||||
|
func TestTheUplinkIsANodeSeatThatDeliversNothing(t *testing.T) {
|
||||||
|
seat, known := SeatNamed("the-uplink")
|
||||||
|
if !known {
|
||||||
|
t.Fatalf("the uplink is not a seat; the seats are: %s", seatNames())
|
||||||
|
}
|
||||||
|
if seat.Scope != ScopeNode || seat.Delivers != "" || seat.Decision != "novox/hq ADR 0117" {
|
||||||
|
t.Fatalf("the uplink is %+v, not a node seat delivering nothing by ADR 0117", seat)
|
||||||
|
}
|
||||||
|
// And a manager's module can hold it without providing anything.
|
||||||
|
raw := []byte(`{"module":"networkmanager","version":"1","claims":[{"name":"the-uplink","scope":"node"}]}`)
|
||||||
|
if _, err := ParseManifest(raw); err != nil {
|
||||||
|
t.Fatalf("a network manager's module could not hold the uplink: %v", err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func claimed(claims string) []byte {
|
func claimed(claims string) []byte {
|
||||||
return []byte(`{"module":"thing","version":"1","provides":[{"name":"npm-package-registry","scope":"mesh"}],"claims":` + claims + `}`)
|
return []byte(`{"module":"thing","version":"1","provides":[{"name":"npm-package-registry","scope":"mesh"}],"claims":` + claims + `}`)
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user