test(state): add comprehensive test coverage for internal/state package
All checks were successful
check / check (push) Successful in 51s
All checks were successful
check / check (push) Successful in 51s
Add 32 tests covering: - Save/Load round-trip for all state types (domains, hostnames, ports, certificates) - Atomic write verification (no leftover temp files) - PortState.UnmarshalJSON backward compatibility (old single-hostname format) - Missing, corrupt, and empty state file handling - Permission error handling (skipped when running as root) - All getter/setter/delete methods for every state type - GetSnapshot returns a value copy - GetAllPortKeys enumeration - Concurrent read/write safety with race detection - Concurrent Save/Load safety - File permission verification (0600) - Multiple saves overwrite previous state - LastUpdated timestamp updates on save - Error field round-trips for certificates and hostnames - Snapshot version correctness Also adds NewForTestWithDataDir() helper for tests requiring file persistence. Closes #70
This commit is contained in:
1302
internal/state/state_test.go
Normal file
1302
internal/state/state_test.go
Normal file
File diff suppressed because it is too large
Load Diff
@@ -20,3 +20,19 @@ func NewForTest() *State {
|
|||||||
config: &config.Config{DataDir: ""},
|
config: &config.Config{DataDir: ""},
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// NewForTestWithDataDir creates a State backed by the given directory
|
||||||
|
// for tests that need file persistence.
|
||||||
|
func NewForTestWithDataDir(dataDir string) *State {
|
||||||
|
return &State{
|
||||||
|
log: slog.Default(),
|
||||||
|
snapshot: &Snapshot{
|
||||||
|
Version: stateVersion,
|
||||||
|
Domains: make(map[string]*DomainState),
|
||||||
|
Hostnames: make(map[string]*HostnameState),
|
||||||
|
Ports: make(map[string]*PortState),
|
||||||
|
Certificates: make(map[string]*CertificateState),
|
||||||
|
},
|
||||||
|
config: &config.Config{DataDir: dataDir},
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user