checker-blacklist/checker/dnsbl_test.go

74 lines
1.9 KiB
Go

package checker
import (
"net"
"reflect"
"slices"
"strings"
"testing"
)
func TestDecodeSpamhausDBL(t *testing.T) {
cases := []struct {
ip string
contains string
}{
{"127.0.1.2", "Spam"},
{"127.0.1.4", "Phishing"},
{"127.0.1.5", "Malware"},
{"127.0.1.6", "Botnet"},
{"127.0.1.255", "refused"},
{"127.255.255.254", "refused"},
{"127.0.1.99", "code"},
}
for _, c := range cases {
got := decodeSpamhausDBL(net.ParseIP(c.ip))
if len(got) != 1 || !strings.Contains(got[0], c.contains) {
t.Errorf("decodeSpamhausDBL(%s) = %v, want substring %q", c.ip, got, c.contains)
}
}
}
func TestDecodeSURBLMulti(t *testing.T) {
got := decodeSURBLMulti(net.ParseIP("127.0.0.12")) // 4 + 8
if len(got) != 2 || !strings.Contains(got[0], "Phishing") || !strings.Contains(got[1], "Malware") {
t.Errorf("decodeSURBLMulti = %v", got)
}
}
func TestDecodeURIBLMulti(t *testing.T) {
got := decodeURIBLMulti(net.ParseIP("127.0.0.2"))
if len(got) != 1 || !strings.Contains(got[0], "black") {
t.Errorf("decodeURIBLMulti(black) = %v", got)
}
got = decodeURIBLMulti(net.ParseIP("127.0.0.1"))
if len(got) != 1 || !strings.Contains(got[0], "blocked") {
t.Errorf("decodeURIBLMulti(refused) = %v", got)
}
}
func TestSplitList(t *testing.T) {
got := splitList("a, b\nc;d e")
want := []string{"a", "b", "c", "d", "e"}
if !reflect.DeepEqual(got, want) {
t.Errorf("splitList = %v, want %v", got, want)
}
if !slices.Contains(got, "c") {
t.Errorf("expected 'c' in %v", got)
}
}
func TestNormalizeDomain(t *testing.T) {
if got := normalizeDomain(" Example.COM. "); got != "example.com" {
t.Errorf("normalizeDomain = %q", got)
}
}
func TestFormatURL(t *testing.T) {
if got := formatURL("https://x/?q=%s", "abc"); got != "https://x/?q=abc" {
t.Errorf("formatURL = %q", got)
}
if got := formatURL("https://x/", "abc"); got != "https://x/" {
t.Errorf("formatURL noplaceholder = %q", got)
}
}