package watcher import ( "context" "log/slog" "time" "sneak.berlin/go/dnswatcher/internal/config" "sneak.berlin/go/dnswatcher/internal/resolver" "sneak.berlin/go/dnswatcher/internal/state" ) // NewForTest creates a Watcher without fx for unit testing. func NewForTest( cfg *config.Config, st *state.State, res DNSResolver, pc PortChecker, tc TLSChecker, n Notifier, ) *Watcher { return &Watcher{ log: slog.Default(), config: cfg, state: st, resolver: res, portCheck: pc, tlsCheck: tc, notify: n, firstRun: true, expiryNotified: make(map[string]time.Time), } } // NewlyDisagreeingPairs exports newlyDisagreeingPairs for testing. func NewlyDisagreeingPairs( prev, current *state.HostnameState, ) [][2]string { return newlyDisagreeingPairs(prev, current) } // DetectHostnameChanges exports detectHostnameChanges for testing. func (w *Watcher) DetectHostnameChanges( ctx context.Context, hostname string, prev, current *state.HostnameState, ) { w.detectHostnameChanges(ctx, hostname, prev, current) } // ResolveNameserverAddresses exports resolveNameserverAddresses for // testing. func (w *Watcher) ResolveNameserverAddresses( ctx context.Context, nameservers []string, prev map[string][]string, ) map[string][]string { return w.resolveNameserverAddresses(ctx, nameservers, prev) } // ResolveCNAMEAddresses exports resolveCNAMEAddresses for testing. func (w *Watcher) ResolveCNAMEAddresses( ctx context.Context, hostname string, current, prev *state.HostnameState, ) { w.resolveCNAMEAddresses(ctx, hostname, current, prev) } // DetectNSAddressChanges exports detectNSAddressChanges for testing. func (w *Watcher) DetectNSAddressChanges( ctx context.Context, domain string, prev, current map[string][]string, ) { w.detectNSAddressChanges(ctx, domain, prev, current) } // CheckAllPorts exports checkAllPorts for testing. func (w *Watcher) CheckAllPorts(ctx context.Context) { w.checkAllPorts(ctx) } // BuildHostnameState exports buildHostnameState for testing. func BuildHostnameState( results map[string]*resolver.NameserverResponse, now time.Time, ) *state.HostnameState { return buildHostnameState(results, now) }