package main import ( "encoding/json" "os" "slices" "strings" "testing" ) func TestConfigFromEnvNamesWhatIsMissing(t *testing.T) { env := map[string]string{"MESH_NODE": "novox", "MESH_FORGE_HOST_FILE": "/h", "MESH_GITEA_ORIGINS_FILE": "/o", "MESH_GITEA_URL": "http://127.0.0.1:3000/", "MESH_GITEA_ADMIN_USER": "mesh-admin", "MESH_GITEA_ADMIN_PASSWORD_FILE": "/p", "MESH_GITEA_SSH_PORT": "222"} cfg, err := configFromEnv(func(k string) string { return env[k] }) if err != nil || cfg.Port != 222 || cfg.Forge.URL != "http://127.0.0.1:3000" { t.Fatalf("%+v %v", cfg, err) } delete(env, "MESH_FORGE_HOST_FILE") env["MESH_GITEA_SSH_PORT"] = "x" _, err = configFromEnv(func(k string) string { return env[k] }) if err == nil || !strings.Contains(err.Error(), "MESH_FORGE_HOST_FILE") || !strings.Contains(err.Error(), "MESH_GITEA_SSH_PORT") { t.Fatalf("%v", err) } } // Issue 955: the runtime grants a module only the states its manifest `reads`, and the provider watches the machines' // keys and, through the SDK's provider, the controller's assignments (where it learns its consumers). Run as the // bus test does, with every bucket made, a missing grant passes unseen; the manifest is read here instead. func TestTheManifestReadsEveryStateTheProviderWatches(t *testing.T) { raw, err := os.ReadFile("../../module.json") if err != nil { t.Fatal(err) } var m struct { Reads []string `json:"reads"` } if err := json.Unmarshal(raw, &m); err != nil { t.Fatal(err) } for _, state := range []string{"mesh-controller.assignments", "ssh-client.keys"} { if !slices.Contains(m.Reads, state) { t.Errorf("gitea's reads %v lack %q, so the runtime refuses its watch", m.Reads, state) } } }