// Copyright The Monogon Project Authors.
// SPDX-License-Identifier: Apache-2.0

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)
	}
}
