1.4.5.2
This commit is contained in:
306
EdgeDNS/internal/nodes/dns_node_test.go
Normal file
306
EdgeDNS/internal/nodes/dns_node_test.go
Normal file
@@ -0,0 +1,306 @@
|
||||
// Copyright 2021 Liuxiangchao iwind.liu@gmail.com. All rights reserved.
|
||||
//go:build plus
|
||||
|
||||
package nodes_test
|
||||
|
||||
import (
|
||||
"crypto/tls"
|
||||
"github.com/miekg/dns"
|
||||
"testing"
|
||||
"time"
|
||||
)
|
||||
|
||||
func TestDNS_Query_A_UDP(t *testing.T) {
|
||||
type query struct {
|
||||
Domain string
|
||||
Type uint16
|
||||
}
|
||||
|
||||
c := new(dns.Client)
|
||||
|
||||
for _, query := range []query{
|
||||
{"hello.world.teaos.cn", dns.TypeA},
|
||||
{"cdn.teaos.cn", dns.TypeA},
|
||||
{"hello.teaos.cn", dns.TypeCNAME},
|
||||
{"hello.teaos.cn", dns.TypeA},
|
||||
{"edgecdn.teaos.cn", dns.TypeA},
|
||||
} {
|
||||
var m = new(dns.Msg)
|
||||
m.SetQuestion(query.Domain+".", query.Type)
|
||||
r, _, err := c.Exchange(m, "127.0.0.1:53")
|
||||
if err != nil {
|
||||
t.Fatalf("failed to exchange: %v", err)
|
||||
}
|
||||
for _, a := range r.Answer {
|
||||
t.Log(a)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func TestDNS_Query_A_Many(t *testing.T) {
|
||||
type queryDef struct {
|
||||
Domain string
|
||||
Type uint16
|
||||
}
|
||||
|
||||
var c = new(dns.Client)
|
||||
|
||||
for i := 0; i < 10000; i++ {
|
||||
for _, query := range []queryDef{
|
||||
{"hello.goedge.cn", dns.TypeA},
|
||||
} {
|
||||
var m = new(dns.Msg)
|
||||
m.SetQuestion(query.Domain+".", query.Type)
|
||||
r, _, err := c.Exchange(m, "127.0.0.1:53")
|
||||
if err != nil {
|
||||
t.Fatalf("failed to exchange: %v", err)
|
||||
}
|
||||
_ = r
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func TestDNS_Query_CNAME(t *testing.T) {
|
||||
type query struct {
|
||||
Domain string
|
||||
Type uint16
|
||||
}
|
||||
|
||||
c := new(dns.Client)
|
||||
|
||||
for _, query := range []query{
|
||||
{"hello.teaos.cn", dns.TypeA},
|
||||
} {
|
||||
m := new(dns.Msg)
|
||||
m.SetQuestion(query.Domain+".", query.Type)
|
||||
r, _, err := c.Exchange(m, "127.0.0.1:53")
|
||||
if err != nil {
|
||||
t.Fatalf("failed to exchange: %v", err)
|
||||
}
|
||||
for _, a := range r.Answer {
|
||||
t.Log(a)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func TestDNS_Query_A_TCP(t *testing.T) {
|
||||
type query struct {
|
||||
Domain string
|
||||
Type uint16
|
||||
}
|
||||
|
||||
c := new(dns.Client)
|
||||
|
||||
for _, query := range []query{
|
||||
{"hello.world.teaos.cn", dns.TypeA},
|
||||
{"cdn.teaos.cn", dns.TypeA},
|
||||
{"hello.teaos.cn", dns.TypeCNAME},
|
||||
{"goedge.cn", dns.TypeA},
|
||||
{"www.goedge.cn", dns.TypeA},
|
||||
} {
|
||||
m := new(dns.Msg)
|
||||
m.SetQuestion(query.Domain+".", query.Type)
|
||||
//r, _, err := c.Exchange(m, "127.0.0.1:54")
|
||||
conn, err := dns.Dial("tcp", "127.0.0.1:53")
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
r, _, err := c.ExchangeWithConn(m, conn)
|
||||
if err != nil {
|
||||
t.Fatalf("failed to exchange: %v", err)
|
||||
}
|
||||
for _, a := range r.Answer {
|
||||
t.Log(a)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func TestDNS_Query_A_TLS(t *testing.T) {
|
||||
type query struct {
|
||||
Domain string
|
||||
Type uint16
|
||||
}
|
||||
|
||||
c := new(dns.Client)
|
||||
|
||||
for _, query := range []query{
|
||||
{"hello.world.teaos.cn", dns.TypeA},
|
||||
{"cdn.teaos.cn", dns.TypeA},
|
||||
{"hello.teaos.cn", dns.TypeCNAME},
|
||||
} {
|
||||
m := new(dns.Msg)
|
||||
m.SetQuestion(query.Domain+".", query.Type)
|
||||
//r, _, err := c.Exchange(m, "127.0.0.1:54")
|
||||
conn, err := dns.DialWithTLS("tcp", "127.0.0.1:853", &tls.Config{
|
||||
InsecureSkipVerify: true,
|
||||
})
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
r, _, err := c.ExchangeWithConn(m, conn)
|
||||
if err != nil {
|
||||
t.Fatalf("failed to exchange: %v", err)
|
||||
}
|
||||
for _, a := range r.Answer {
|
||||
t.Log(a)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func TestDNS_Query_Internet(t *testing.T) {
|
||||
type query struct {
|
||||
Domain string
|
||||
Type uint16
|
||||
}
|
||||
|
||||
c := new(dns.Client)
|
||||
for _, query := range []query{
|
||||
{"1.goedge.cn", dns.TypeA},
|
||||
} {
|
||||
m := new(dns.Msg)
|
||||
//m.RecursionDesired = true
|
||||
m.SetQuestion(query.Domain+".", query.Type)
|
||||
|
||||
conn, err := dns.Dial("udp", "ns1.teaos.cn:53")
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
r, _, err := c.ExchangeWithConn(m, conn)
|
||||
if err != nil {
|
||||
t.Fatalf("failed to exchange: %v", err)
|
||||
}
|
||||
for _, a := range r.Answer {
|
||||
t.Log(a)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func TestDNS_Query_TSIG(t *testing.T) {
|
||||
type query struct {
|
||||
Domain string
|
||||
Type uint16
|
||||
}
|
||||
|
||||
c := new(dns.Client)
|
||||
c.TsigSecret = map[string]string{"teaos.": "NzhhZDExMzM5NWMwN2Q5OWM5YTFhMzgxZWNkZGMwMDA2ODUzODdiYTM2ODA5N2I2YjYwZWRlNmNlNjlhMzdmM2JmNjcxZmQ4NzVjMjI1Y2QwOTQ2Njk5OWY0MzRkMTJkNTczNjFlZDgwYmQxZWZjZDM4ZjAxNDNmM2Y2NTU1YjE="}
|
||||
|
||||
for _, query := range []query{
|
||||
{"hello.cdn.teaos.cn", dns.TypeA},
|
||||
{"cdn.teaos.cn", dns.TypeA},
|
||||
{"hello.teaos.cn", dns.TypeCNAME},
|
||||
{"hello.teaos.cn", dns.TypeA},
|
||||
{"edgecdn.teaos.cn", dns.TypeA},
|
||||
} {
|
||||
m := new(dns.Msg)
|
||||
m.SetQuestion(query.Domain+".", query.Type)
|
||||
m.SetTsig("teaos.", dns.HmacSHA512, 300, time.Now().Unix())
|
||||
r, _, err := c.Exchange(m, "127.0.0.1:53")
|
||||
if err != nil {
|
||||
t.Fatalf("failed to exchange: %v", err)
|
||||
}
|
||||
for _, a := range r.Answer {
|
||||
t.Log(a)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func TestDNS_Query_A_Route(t *testing.T) {
|
||||
type query struct {
|
||||
Domain string
|
||||
Type uint16
|
||||
}
|
||||
|
||||
c := new(dns.Client)
|
||||
|
||||
for _, query := range []query{
|
||||
{"route.com", dns.TypeA},
|
||||
} {
|
||||
m := new(dns.Msg)
|
||||
m.SetQuestion(query.Domain+".", query.Type)
|
||||
r, _, err := c.Exchange(m, "127.0.0.1:53")
|
||||
if err != nil {
|
||||
t.Fatalf("failed to exchange: %v", err)
|
||||
}
|
||||
for _, a := range r.Answer {
|
||||
t.Log(a)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func TestDNS_Query_Recursion(t *testing.T) {
|
||||
type query struct {
|
||||
Domain string
|
||||
Type uint16
|
||||
}
|
||||
|
||||
c := new(dns.Client)
|
||||
|
||||
for _, query := range []query{
|
||||
{"example.org", dns.TypeA},
|
||||
} {
|
||||
m := new(dns.Msg)
|
||||
m.SetQuestion(query.Domain+".", query.Type)
|
||||
r, _, err := c.Exchange(m, "127.0.0.1:53")
|
||||
if err != nil {
|
||||
t.Fatalf("failed to exchange: %v", err)
|
||||
}
|
||||
for _, a := range r.Answer {
|
||||
t.Log(a)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func TestDNS_Flood(t *testing.T) {
|
||||
type query struct {
|
||||
Domain string
|
||||
Type uint16
|
||||
}
|
||||
|
||||
var c = new(dns.Client)
|
||||
|
||||
for i := 0; i < 1_000_000; i++ {
|
||||
for _, query := range []query{
|
||||
{"hello.world.teaos.cn", dns.TypeA},
|
||||
{"cdn.teaos.cn", dns.TypeA},
|
||||
{"hello.teaos.cn", dns.TypeCNAME},
|
||||
{"hello.teaos.cn", dns.TypeA},
|
||||
{"edgecdn.teaos.cn", dns.TypeA},
|
||||
} {
|
||||
var m = new(dns.Msg)
|
||||
m.SetQuestion(query.Domain+".", query.Type)
|
||||
r, _, err := c.Exchange(m, "192.168.2.60:58")
|
||||
if err != nil {
|
||||
t.Fatalf("failed to exchange: %v", err)
|
||||
}
|
||||
_ = r
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func BenchmarkDNSNode(b *testing.B) {
|
||||
var c = new(dns.Client)
|
||||
conn, err := c.Dial("192.168.2.60:58")
|
||||
if err != nil {
|
||||
b.Fatal(err)
|
||||
}
|
||||
|
||||
b.ResetTimer()
|
||||
|
||||
type query struct {
|
||||
Domain string
|
||||
Type uint16
|
||||
}
|
||||
|
||||
for i := 0; i < b.N; i++ {
|
||||
for _, query := range []query{
|
||||
{"cdn.teaos.cn", dns.TypeA},
|
||||
} {
|
||||
var m = new(dns.Msg)
|
||||
m.SetQuestion(query.Domain+".", query.Type)
|
||||
_, _, err := c.ExchangeWithConn(m, conn)
|
||||
if err != nil {
|
||||
b.Fatal(err)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user