mesh/merge-gate head 540cda11dfd5 merged into trunk ad753c70f6d4 — pass: builds mesh-controller → novox; no bus step; every machine composes with the chang…
mesh/repo-check head 540cda11dfd5 merged into trunk ad753c70f6d4 — pass: its merge-check.sh passed
mesh/delivery delivered
94 lines
3.1 KiB
Go
94 lines
3.1 KiB
Go
package main
|
|
|
|
import (
|
|
"encoding/json"
|
|
"fmt"
|
|
"os"
|
|
"slices"
|
|
"strings"
|
|
"testing"
|
|
)
|
|
|
|
// aLongGroup is members as JSON over 200 KB: 1666 paths of the shape of mesh-delivery #5's change (novox/hq issue 1272).
|
|
func aLongGroup(t *testing.T) string {
|
|
t.Helper()
|
|
var paths []string
|
|
for i := 0; i < 1666; i++ {
|
|
paths = append(paths, fmt.Sprintf("modules/mesh-delivery-forge-bridge/vendor/github.com/nats-io/nats-server/v2/server/certstore/certstore_windows_file_%04d.go", i))
|
|
}
|
|
body, err := json.Marshal([]map[string]any{{"id": "novox/mesh-delivery#5", "paths": paths}, {"id": "novox/mesh-catalog#374"}})
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if len(body) < 200<<10 {
|
|
t.Fatalf("the members are only %d bytes", len(body))
|
|
}
|
|
return string(body)
|
|
}
|
|
|
|
func readBackFromTheCommand(t *testing.T, argv []string, members string) {
|
|
t.Helper()
|
|
for _, a := range argv {
|
|
if len(a) > 64<<10 {
|
|
t.Errorf("an argument of %d bytes is handed to the command", len(a))
|
|
}
|
|
}
|
|
i := slices.Index(argv, "--members-file")
|
|
if i < 0 {
|
|
t.Fatalf("the command does not name a members file: %.200v", argv)
|
|
}
|
|
raw, err := os.ReadFile(argv[i+1])
|
|
if err != nil || string(raw) != members {
|
|
t.Errorf("the file does not hold the whole members list (%d bytes, %v)", len(raw), err)
|
|
}
|
|
removeMembersFile(argv)
|
|
if _, err := os.Stat(argv[i+1]); !os.IsNotExist(err) {
|
|
t.Errorf("the file is still there after the command: %v", err)
|
|
}
|
|
}
|
|
|
|
func TestDeliveryCheckHandsALongMembersListInAFile(t *testing.T) { // 1272/AC1
|
|
members := aLongGroup(t)
|
|
argv, err := argvFor("delivery-check", map[string]any{"group": "feat/x", "members": members})
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if argv[0] != "delivery" || argv[1] != "check" || !slices.Contains(argv, "--group") {
|
|
t.Errorf("the command is %.100v", strings.Join(argv, " "))
|
|
}
|
|
readBackFromTheCommand(t, argv, members)
|
|
}
|
|
|
|
func TestDeliveryOrderHandsALongMembersListInAFile(t *testing.T) { // 1272/AC2
|
|
members := aLongGroup(t)
|
|
argv, err := argvFor("delivery-order", map[string]any{"members": members})
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if argv[0] != "delivery" || argv[1] != "order" {
|
|
t.Errorf("the command is %.100v", strings.Join(argv, " "))
|
|
}
|
|
readBackFromTheCommand(t, argv, members)
|
|
}
|
|
|
|
func TestAShortMembersListIsStillTheArgumentItWas(t *testing.T) { // 1272/AC3
|
|
members := `[{"id":"novox/a#1"},{"id":"novox/b#2"}]`
|
|
argv, err := argvFor("delivery-check", map[string]any{"group": "feat/x", "members": members, "ready": "true"})
|
|
want := []string{"delivery", "check", "--group", "feat/x", "--members", members, "--ready"}
|
|
if err != nil || !slices.Equal(argv, want) {
|
|
t.Errorf("a short list gives %v, %v, want %v", argv, err, want)
|
|
}
|
|
}
|
|
|
|
func TestTheCommandReadsTheMembersFromTheFileAsFromTheArgument(t *testing.T) { // 1272/AC1
|
|
members := `[{"id":"novox/a#1"}]`
|
|
argv, _ := membersFlags(strings.Repeat(" ", membersInArgument) + members)
|
|
defer removeMembersFile(argv)
|
|
if len(argv) != 2 || argv[0] != "--members-file" {
|
|
t.Fatalf("a long list gives %v", argv)
|
|
}
|
|
if st, err := os.Stat(argv[1]); err != nil || st.Mode().Perm() != 0o600 {
|
|
t.Errorf("the file is %v, %v", st, err)
|
|
}
|
|
}
|