package test

// Taken and modified from CoreDNS, under Apache 2.0.

import (
	"testing"

	"github.com/miekg/dns"
)

func TestNewServer(t *testing.T) {
	s := NewServer(func(w dns.ResponseWriter, r *dns.Msg) {
		ret := new(dns.Msg)
		ret.SetReply(r)
		w.WriteMsg(ret)
	})
	defer s.Close()

	c := new(dns.Client)
	c.Net = "tcp"
	m := new(dns.Msg)
	m.SetQuestion("example.org.", dns.TypeSOA)
	ret, _, err := c.Exchange(m, s.Addr)
	if err != nil {
		t.Fatalf("Could not send message to dnstest.Server: %s", err)
	}
	if ret.Id != m.Id {
		t.Fatalf("Msg ID's should match, expected %d, got %d", m.Id, ret.Id)
	}

	c.Net = "udp"
	ret, _, err = c.Exchange(m, s.Addr)
	if err != nil {
		t.Fatalf("Could not send message to dnstest.Server: %s", err)
	}
	if ret.Id != m.Id {
		t.Fatalf("Msg ID's should match, expected %d, got %d", m.Id, ret.Id)
	}
}
