|
|
@@ -0,0 +1,36 @@
|
|
|
+package service
|
|
|
+
|
|
|
+import (
|
|
|
+ "net"
|
|
|
+ "testing"
|
|
|
+)
|
|
|
+
|
|
|
+func TestRejectAllBlockedIPsNeedsOnlyOneUsableAddress(t *testing.T) {
|
|
|
+ teredo := net.IPAddr{IP: net.ParseIP("2001::1")}
|
|
|
+ public4 := net.IPAddr{IP: net.ParseIP("142.250.74.36")}
|
|
|
+ private4 := net.IPAddr{IP: net.ParseIP("10.0.0.1")}
|
|
|
+
|
|
|
+ cases := []struct {
|
|
|
+ name string
|
|
|
+ ips []net.IPAddr
|
|
|
+ wantErr string
|
|
|
+ }{
|
|
|
+ {"poisoned AAAA next to healthy A", []net.IPAddr{teredo, public4}, ""},
|
|
|
+ {"all blocked", []net.IPAddr{teredo, private4}, "host h.example resolves to blocked private/internal address 2001::1"},
|
|
|
+ {"no addresses", nil, "host h.example has no IP addresses"},
|
|
|
+ }
|
|
|
+ for _, tc := range cases {
|
|
|
+ t.Run(tc.name, func(t *testing.T) {
|
|
|
+ err := rejectAllBlockedIPs("h.example", tc.ips)
|
|
|
+ if tc.wantErr == "" {
|
|
|
+ if err != nil {
|
|
|
+ t.Fatalf("rejectAllBlockedIPs() = %v, want nil", err)
|
|
|
+ }
|
|
|
+ return
|
|
|
+ }
|
|
|
+ if err == nil || err.Error() != tc.wantErr {
|
|
|
+ t.Fatalf("rejectAllBlockedIPs() = %v, want %q", err, tc.wantErr)
|
|
|
+ }
|
|
|
+ })
|
|
|
+ }
|
|
|
+}
|