Files
elmprodvpn/selective-vpn-api/app/resolver_policy_test.go

70 lines
2.0 KiB
Go

package app
import "testing"
func TestDomainStateFromScore(t *testing.T) {
tests := []struct {
score int
want string
}{
{25, domainStateActive},
{10, domainStateStable},
{0, domainStateSuspect},
{-12, domainStateQuarantine},
{-40, domainStateHardQuar},
}
for _, tc := range tests {
if got := domainStateFromScore(tc.score); got != tc.want {
t.Fatalf("domainStateFromScore(%d)=%q want=%q", tc.score, got, tc.want)
}
}
}
func TestDomainScorePenalty(t *testing.T) {
if got := domainScorePenalty(dnsMetrics{NXDomain: 2}); got >= 0 {
t.Fatalf("expected negative penalty for confirmed nxdomain, got %d", got)
}
if got := domainScorePenalty(dnsMetrics{NXDomain: 1}); got >= 0 {
t.Fatalf("expected negative penalty for single nxdomain, got %d", got)
}
if got := domainScorePenalty(dnsMetrics{Timeout: 1}); got >= 0 {
t.Fatalf("expected negative penalty for timeout, got %d", got)
}
}
func TestDomainCacheGetStale(t *testing.T) {
s := newDomainCacheState()
now := 2000
s.set("example.com", domainCacheSourceDirect, []string{"1.2.3.4"}, now-100)
ips, age, ok := s.getStale("example.com", domainCacheSourceDirect, now, 300)
if !ok {
t.Fatalf("expected stale entry")
}
if age != 100 {
t.Fatalf("age=%d want=100", age)
}
if len(ips) != 1 || ips[0] != "1.2.3.4" {
t.Fatalf("unexpected ips: %v", ips)
}
if _, _, ok := s.getStale("example.com", domainCacheSourceDirect, now, 50); ok {
t.Fatalf("expected stale miss when maxAge is too small")
}
}
func TestSetErrorWithStatsSetsQuarantine(t *testing.T) {
s := newDomainCacheState()
now := 3000
s.set("bad.example", domainCacheSourceDirect, []string{"2.2.2.2"}, now-10)
for i := 0; i < 5; i++ {
s.setErrorWithStats("bad.example", domainCacheSourceDirect, dnsMetrics{NXDomain: 2}, now+i)
}
state, _, ok := s.getQuarantine("bad.example", domainCacheSourceDirect, now+5)
if !ok {
t.Fatalf("expected quarantine to be set")
}
if state != domainStateQuarantine && state != domainStateHardQuar {
t.Fatalf("unexpected quarantine state: %s", state)
}
}