mesh/delivery ready: it delivers once merged
mesh/delivery-group group feat/chain-on-the-bus stopped: a member was stopped
mesh/merge-gate out of date: judged beside mesh-catalog#357 was merged otherwise than its head 3bc4215d872c onto 798d6fd68589; judged again on a recheck or…
mesh/repo-check out of date: judged beside mesh-catalog#357 was merged otherwise than its head 3bc4215d872c onto 798d6fd68589; judged again on a recheck or…
89 lines
2.5 KiB
Go
89 lines
2.5 KiB
Go
//go:build integration
|
|
|
|
package inventory
|
|
|
|
import (
|
|
"context"
|
|
"os"
|
|
"testing"
|
|
)
|
|
|
|
// A pin made before it named the module (migration 0051, novox/hq #258): completed where the node it
|
|
// names answers once, left for a person where it answers twice.
|
|
|
|
func legacyPin(t *testing.T, inv *Inventory, node, provision, provider string) {
|
|
t.Helper()
|
|
_, err := inv.store.Pool().Exec(context.Background(),
|
|
`insert into provision_pin (node, name, provider)
|
|
select u.id, $2, p.id from node u, node p where u.name = $1 and p.name = $3`,
|
|
node, provision, provider)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
}
|
|
|
|
func completeEarlierPins(t *testing.T, inv *Inventory) {
|
|
t.Helper()
|
|
sql, err := os.ReadFile("migrations/0051-a-pin-made-before-is-completed.sql")
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if _, err := inv.store.Pool().Exec(context.Background(), string(sql)); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
}
|
|
|
|
func TestAPinMadeBeforeIsCompletedWhenTheNodeAnswersOnce(t *testing.T) {
|
|
inv := inTheTables(t)
|
|
ctx := context.Background()
|
|
for _, n := range []string{"user", "provider"} {
|
|
if _, err := inv.AddNode(ctx, n); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
}
|
|
for _, m := range []string{"postgres", "redis"} {
|
|
if err := inv.RegisterModule(ctx, manifest(m, []string{m + "-database"}, nil), Source{}); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if _, err := inv.Assign(ctx, "provider", m); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
}
|
|
legacyPin(t, inv, "user", "postgres-database", "provider")
|
|
completeEarlierPins(t, inv)
|
|
pins, err := inv.PinsFor(ctx, "user")
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if got := pins["postgres-database"]; got.Node != "provider" || got.Module != "postgres" {
|
|
t.Fatalf("the record was not completed with the one module that answers: %+v", got)
|
|
}
|
|
}
|
|
|
|
func TestAPinMadeBeforeIsLeftOpenWhenTheNodeAnswersTwice(t *testing.T) {
|
|
inv := inTheTables(t)
|
|
ctx := context.Background()
|
|
for _, n := range []string{"user", "provider"} {
|
|
if _, err := inv.AddNode(ctx, n); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
}
|
|
for _, m := range []string{"public-acme", "step-ca"} {
|
|
if err := inv.RegisterModule(ctx, manifest(m, []string{"acme-ca"}, nil), Source{}); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if _, err := inv.Assign(ctx, "provider", m); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
}
|
|
legacyPin(t, inv, "user", "acme-ca", "provider")
|
|
completeEarlierPins(t, inv)
|
|
pins, err := inv.PinsFor(ctx, "user")
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if got := pins["acme-ca"]; got.Node != "provider" || got.Module != "" {
|
|
t.Fatalf("a node that answers twice was guessed for: %+v", got)
|
|
}
|
|
}
|