package test import ( "crypto/tls" "fmt" "testing" "github.com/miekg/dns" ) func TestTLS(t *testing.T) { tempCorefile := `%s { tls ../plugin/tls/test_cert.pem ../plugin/tls/test_key.pem whoami }` dot, doh := ":1053", ":8443" m := new(dns.Msg) m.SetQuestion("example.com.", dns.TypeA) answerLength := 0 tests := []struct { server string tlsConfig *tls.Config }{ {fmt.Sprintf("tls://.%s", dot), &tls.Config{InsecureSkipVerify: true}, }, {fmt.Sprintf("tls://.%s", dot), &tls.Config{InsecureSkipVerify: true, NextProtos: []string{"dot"}}, }, {fmt.Sprintf("tls://.%s https://.%s", dot, doh), &tls.Config{InsecureSkipVerify: true}, }, {fmt.Sprintf("tls://.%s https://.%s", dot, doh), &tls.Config{InsecureSkipVerify: true, NextProtos: []string{"dot"}}, }, } for _, tc := range tests { ex, _, _, err := CoreDNSServerAndPorts(fmt.Sprintf(tempCorefile, tc.server)) if err != nil { t.Fatalf("Could not get CoreDNS serving instance: %s", err) } client := dns.Client{ Net: "tcp-tls", TLSConfig: tc.tlsConfig, } r, _, err := client.Exchange(m, dot) if err != nil { t.Fatalf("Could not exchange msg: %s", err) } if n := len(r.Answer); n != answerLength { t.Fatalf("Expected %v answers, got %v", answerLength, n) } if n := len(r.Extra); n != 2 { t.Errorf("Expected 2 RRs in additional section, but got %d", n) } if r.Rcode != dns.RcodeSuccess { t.Errorf("Expected success but got %d", r.Rcode) } ex.Stop() } }