A provider now waits for a person before retiring more than three consumers or half of what it holds, and deletes only when asked. The controller is that person's way in: it keeps waiting and rejected sets as conditions, answers them with retire approve|reject, lists and deletes retired consumers through the provider's own tools on its machine, records each act in the hand-act log, and probes for anything retired longer than thirty days (D11).
23 lines
916 B
Go
23 lines
916 B
Go
package catalogue
|
|
|
|
import (
|
|
"slices"
|
|
"testing"
|
|
)
|
|
|
|
// Every provider may say what becomes of a consumer the mesh stopped asking for (novox/hq ADR 0230),
|
|
// whatever its manifest lists — as it may say a consumer it keeps failing (ADR 0224) — and a module
|
|
// that receives nothing may not.
|
|
func TestEveryProviderMaySayWhatItRetires(t *testing.T) {
|
|
provider := Manifest{Module: "pg", Receives: map[string]string{"postgres-database": "/x/mesh.json"},
|
|
Emits: []string{"database.provisioned"}}
|
|
for _, e := range []string{ProvisionerFailing, ProvisionerRecovered, ProvisionerRetirement, "database.provisioned"} {
|
|
if !slices.Contains(provider.EmitsAll(), e) {
|
|
t.Errorf("a provider may not emit %s: %v", e, provider.EmitsAll())
|
|
}
|
|
}
|
|
if slices.Contains(Manifest{Module: "app", Emits: []string{"x"}}.EmitsAll(), ProvisionerRetirement) {
|
|
t.Error("a module that provides nothing may say what it retires")
|
|
}
|
|
}
|