35 lines
1.5 KiB
Go
35 lines
1.5 KiB
Go
package main
|
|
|
|
import (
|
|
"context"
|
|
"errors"
|
|
"reflect"
|
|
"sort"
|
|
"sync"
|
|
"testing"
|
|
)
|
|
|
|
// A starting controller takes in the done key of every catalogued module once, beside the watch of new writes: a done key
|
|
// written while no controller served, or whose take-in the controller it replaced was stopped in, is otherwise never
|
|
// taken, and its module stays in the node's own composition with no credential (issue 1945, live on 2026-10-25 at 02:34:
|
|
// the controller replaced mid take-in left mesh-provisioner-client, gitea, postgres and many more unregistered at their
|
|
// new fingerprints, and the new one, watching updates only, never looked).
|
|
func TestAStartingControllerTakesEveryModulesDoneKeyOnce(t *testing.T) {
|
|
var took []string
|
|
var mu sync.Mutex
|
|
doneKeysAtStart(context.Background(), func(context.Context) ([]string, error) {
|
|
return []string{"mesh-provisioner-client", "gitea", "postgres"}, nil
|
|
}, func(module string) { mu.Lock(); took = append(took, module); mu.Unlock() })
|
|
sort.Strings(took)
|
|
if want := []string{"gitea", "mesh-provisioner-client", "postgres"}; !reflect.DeepEqual(took, want) {
|
|
t.Fatalf("took %v, want %v", took, want)
|
|
}
|
|
// A catalogue that cannot be read takes nothing and is said, never fatal.
|
|
took = nil
|
|
doneKeysAtStart(context.Background(), func(context.Context) ([]string, error) { return nil, errors.New("down") },
|
|
func(module string) { took = append(took, module) })
|
|
if len(took) != 0 {
|
|
t.Fatalf("took %v from a catalogue that could not be read", took)
|
|
}
|
|
}
|