65 lines
1.9 KiB
Go
65 lines
1.9 KiB
Go
package checker
|
|
|
|
import (
|
|
"context"
|
|
"encoding/json"
|
|
"fmt"
|
|
|
|
sdk "git.happydns.org/checker-sdk-go/checker"
|
|
)
|
|
|
|
// fakeObs is a tiny ObservationGetter that returns a single payload regardless
|
|
// of the key requested. Tests use it to feed canned ResolverPropagationData
|
|
// into rules.
|
|
type fakeObs struct {
|
|
payload any
|
|
err error
|
|
}
|
|
|
|
func newFakeObs(payload any) *fakeObs { return &fakeObs{payload: payload} }
|
|
|
|
func (f *fakeObs) Get(_ context.Context, _ sdk.ObservationKey, dest any) error {
|
|
if f.err != nil {
|
|
return f.err
|
|
}
|
|
raw, err := json.Marshal(f.payload)
|
|
if err != nil {
|
|
return fmt.Errorf("fakeObs marshal: %w", err)
|
|
}
|
|
return json.Unmarshal(raw, dest)
|
|
}
|
|
|
|
func (f *fakeObs) GetRelated(_ context.Context, _ sdk.ObservationKey) ([]sdk.RelatedObservation, error) {
|
|
return nil, nil
|
|
}
|
|
|
|
// errObs always fails Get; used to verify error-path branches in rules.
|
|
type errObs struct{ err error }
|
|
|
|
func (e *errObs) Get(_ context.Context, _ sdk.ObservationKey, _ any) error { return e.err }
|
|
func (e *errObs) GetRelated(_ context.Context, _ sdk.ObservationKey) ([]sdk.RelatedObservation, error) {
|
|
return nil, nil
|
|
}
|
|
|
|
// mkProbe is a small constructor used in many tests.
|
|
func mkProbe(rcode, sig string, records ...string) *RRProbe {
|
|
return &RRProbe{Rcode: rcode, Signature: sig, Records: records, Transport: TransportUDP}
|
|
}
|
|
|
|
// mkResolver builds a ResolverView with a single probe.
|
|
func mkResolver(id, region string, filtered, reachable bool, probes map[string]*RRProbe) *ResolverView {
|
|
return &ResolverView{
|
|
ID: id, Name: id, IP: "0.0.0.0", Region: region,
|
|
Filtered: filtered, Reachable: reachable, Transport: TransportUDP,
|
|
Probes: probes,
|
|
}
|
|
}
|
|
|
|
// statesByCode reorganises a slice of CheckState by Code for easy lookup.
|
|
func statesByCode(states []sdk.CheckState) map[string][]sdk.CheckState {
|
|
out := map[string][]sdk.CheckState{}
|
|
for _, s := range states {
|
|
out[s.Code] = append(out[s.Code], s)
|
|
}
|
|
return out
|
|
}
|