46 lines
1.9 KiB
Go
46 lines
1.9 KiB
Go
package main
|
|
|
|
import (
|
|
"errors"
|
|
"reflect"
|
|
"testing"
|
|
|
|
"git.novox.be/novox/mesh-sdk/go/catalogue"
|
|
)
|
|
|
|
// configForm is a module in the config form, shaped as a real one (inventory's config_move_test).
|
|
func configForm(t *testing.T, name string) catalogue.Manifest {
|
|
t.Helper()
|
|
m, err := catalogue.ParseManifest([]byte(`{"module": "` + name + `", "version": "1",
|
|
"config": {"level": {"type": "string", "description": "how much it says", "default": "info"}},
|
|
"resources": [{"id": "conf", "type": "file", "path": "/etc/` + name + `.json", "mode": "0640",
|
|
"content": "{\"level\": \"info\"}", "merge": "json", "takes-config": ["level"]}]}`))
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
return m
|
|
}
|
|
|
|
// Issue 1493: a module in the config form whose values are set only in mesh-config has no settings row, and its
|
|
// settings are still read, because SettingsFor is where mesh-config's values are laid in.
|
|
func TestSettingsAreReadForAConfigModuleWithoutASettingsRow(t *testing.T) {
|
|
shelf := map[string]catalogue.Manifest{
|
|
"brother": configForm(t, "brother"), // config only in mesh-config: no settings row
|
|
"older": {Module: "older", Version: "1"}, // settings form, with a row
|
|
"idle": {Module: "idle", Version: "1"}, // settings form, no row: nothing to read
|
|
"newer": configForm(t, "newer"), // config form, but the switch is off for it
|
|
}
|
|
have := map[string]bool{"older": true, "gone": true} // "gone" has a row and is not on the shelf
|
|
reads := func(module string) (bool, error) { return module == "brother", nil }
|
|
got, err := modulesToRead(shelf, have, reads)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if want := []string{"brother", "older"}; !reflect.DeepEqual(got, want) {
|
|
t.Errorf("settings are read for %v, want %v", got, want)
|
|
}
|
|
if _, err := modulesToRead(shelf, have, func(string) (bool, error) { return false, errors.New("store down") }); err == nil {
|
|
t.Error("a failing ReadsConfig is not returned")
|
|
}
|
|
}
|