state: a state file without a section loads it empty (closes #267)
check / check (push) Canceled after 0s
check / check (push) Canceled after 0s
Load fills in each of domains, hostnames, ports and certificates that
the file leaves out or holds as null with an empty map. Before, such a
section loaded as a nil map, and the first check's write into it
panicked, so a state file holding {} stopped the watcher at every
start.
A state test loads {} and a file missing each section in turn, and
checks that every section is an empty map. A watcher test loads {}, and
a file without the certificates section, runs the first check against
live DNS, and checks that it saved domain, hostname, port and
certificate entries.
Model: opus-5-5
This commit was merged in pull request #278.
This commit is contained in:
@@ -477,6 +477,54 @@ func TestDomainPortAndTLSChecks(t *testing.T) {
|
||||
}
|
||||
}
|
||||
|
||||
// TestFirstCheckAfterLoadingFileWithoutSections loads a state file
|
||||
// holding {}, and one that leaves out the certificates section, and runs
|
||||
// the first check. It saves domain, hostname, port and certificate
|
||||
// entries; a section loaded as nil made it panic.
|
||||
func TestFirstCheckAfterLoadingFileWithoutSections(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
tests := []struct {
|
||||
name string
|
||||
file string
|
||||
}{
|
||||
{"no sections", `{}`},
|
||||
{"no certificates", `{"domains": {}, "hostnames": {}, "ports": {}}`},
|
||||
}
|
||||
|
||||
for _, tt := range tests {
|
||||
t.Run(tt.name, func(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
cfg := defaultTestConfig(t)
|
||||
cfg.Domains = []string{testSmallDomain}
|
||||
|
||||
_, deps := runChecks(t, cfg, func(deps *testDeps) {
|
||||
err := os.WriteFile(cfg.StatePath(), []byte(tt.file), 0o600)
|
||||
if err != nil {
|
||||
t.Fatalf("writing the state file: %v", err)
|
||||
}
|
||||
|
||||
err = deps.state.Load()
|
||||
if err != nil {
|
||||
t.Fatalf("loading the state file: %v", err)
|
||||
}
|
||||
})
|
||||
|
||||
snap := deps.state.GetSnapshot()
|
||||
if len(snap.Domains) == 0 || len(snap.Hostnames) == 0 ||
|
||||
len(snap.Ports) == 0 || len(snap.Certificates) == 0 {
|
||||
t.Errorf(
|
||||
"saved %d domain, %d hostname, %d port and %d "+
|
||||
"certificate entries, want at least one of each",
|
||||
len(snap.Domains), len(snap.Hostnames),
|
||||
len(snap.Ports), len(snap.Certificates),
|
||||
)
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
func TestNSChangeDetection(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
|
||||
Reference in New Issue
Block a user