107 lines
2.5 KiB
Go
107 lines
2.5 KiB
Go
package parser
|
|
|
|
import (
|
|
"reflect"
|
|
"sort"
|
|
"strings"
|
|
"testing"
|
|
)
|
|
|
|
func TestDNSMasqParser(t *testing.T) {
|
|
tests := []struct {
|
|
Name string
|
|
Test string
|
|
Want []string
|
|
WantIgnored int
|
|
}{
|
|
{
|
|
"data",
|
|
`
|
|
local-data: "junk1.doubleclick.net A 127.0.0.1"
|
|
local-data: "junk2.doubleclick.net A 127.0.0.1"
|
|
local-data: "junk2.doubleclick.net CNAME doubleclick.net."
|
|
local-data: "junk6.doubleclick.net AAAA ::1"
|
|
local-data: "doubleclick.net A 127.0.0.1"
|
|
local-data: "ad.junk1.doubleclick.net A 127.0.0.1"
|
|
local-data: "adjunk.google.com A 127.0.0.1"`,
|
|
[]string{"ad.junk1.doubleclick.net", "adjunk.google.com", "doubleclick.net", "junk1.doubleclick.net", "junk2.doubleclick.net", "junk6.doubleclick.net"},
|
|
0,
|
|
},
|
|
{
|
|
"zone",
|
|
`
|
|
local-zone: "doubleclick.net" reject
|
|
local-zone: "adjunk.google.com" reject`,
|
|
[]string{"adjunk.google.com", "doubleclick.net"},
|
|
0,
|
|
},
|
|
{
|
|
"address",
|
|
`
|
|
address=/ziyu.net/0.0.0.0
|
|
address=/zlp6s.pw/0.0.0.0
|
|
address=/zm232.com/0.0.0.0
|
|
`,
|
|
[]string{"ziyu.net", "zlp6s.pw", "zm232.com"},
|
|
0,
|
|
},
|
|
}
|
|
for _, test := range tests {
|
|
t.Run(test.Name, func(it *testing.T) {
|
|
parsed, ignored, err := ParseDomains(strings.NewReader(test.Test))
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
return
|
|
}
|
|
|
|
sort.Strings(parsed)
|
|
if !reflect.DeepEqual(parsed, test.Want) {
|
|
t.Errorf("expected ParseDomains(dnsmasq) to return\n\t%v, got\n\t%v", test.Want, parsed)
|
|
}
|
|
if ignored != test.WantIgnored {
|
|
t.Errorf("expected %d ignored, got %d", test.WantIgnored, ignored)
|
|
}
|
|
})
|
|
}
|
|
}
|
|
|
|
func TestMOSDNSParser(t *testing.T) {
|
|
test := `domain:0019x.com
|
|
domain:002777.xyz
|
|
domain:003store.com
|
|
domain:00404850.xyz`
|
|
want := []string{"0019x.com", "002777.xyz", "003store.com", "00404850.xyz"}
|
|
|
|
parsed, _, err := ParseDomains(strings.NewReader(test))
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
return
|
|
}
|
|
|
|
sort.Strings(parsed)
|
|
if !reflect.DeepEqual(parsed, want) {
|
|
t.Errorf("expected ParseDomains(domains) to return %v, got %v", want, parsed)
|
|
}
|
|
}
|
|
|
|
func TestSmartDNSParser(t *testing.T) {
|
|
test := `# Title:AdRules SmartDNS List
|
|
# Update: 2025-10-07 02:05:08(GMT+8)
|
|
address /0.myikas.com/#
|
|
address /0.net.easyjet.com/#
|
|
address /0.nextyourcontent.com/#
|
|
address /0019x.com/#`
|
|
want := []string{"0.myikas.com", "0.net.easyjet.com", "0.nextyourcontent.com", "0019x.com"}
|
|
|
|
parsed, _, err := ParseDomains(strings.NewReader(test))
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
return
|
|
}
|
|
|
|
sort.Strings(parsed)
|
|
if !reflect.DeepEqual(parsed, want) {
|
|
t.Errorf("expected ParseDomains(domains) to return %v, got %v", want, parsed)
|
|
}
|
|
}
|