mirror of
https://github.com/netbirdio/netbird.git
synced 2024-12-14 19:00:50 +01:00
fd67892cb4
Refactor the flat code structure
94 lines
2.0 KiB
Go
94 lines
2.0 KiB
Go
package dns
|
|
|
|
import (
|
|
"net"
|
|
"testing"
|
|
|
|
"github.com/golang/mock/gomock"
|
|
"github.com/google/gopacket"
|
|
"github.com/google/gopacket/layers"
|
|
"github.com/miekg/dns"
|
|
|
|
"github.com/netbirdio/netbird/client/iface/mocks"
|
|
)
|
|
|
|
func TestResponseWriterLocalAddr(t *testing.T) {
|
|
ctrl := gomock.NewController(t)
|
|
defer ctrl.Finish()
|
|
|
|
device := mocks.NewMockDevice(ctrl)
|
|
device.EXPECT().Write(gomock.Any(), gomock.Any())
|
|
|
|
request := &dns.Msg{
|
|
Question: []dns.Question{{
|
|
Name: "google.com.",
|
|
Qtype: dns.TypeA,
|
|
Qclass: dns.TypeA,
|
|
}},
|
|
}
|
|
|
|
replyMessage := &dns.Msg{}
|
|
replyMessage.SetReply(request)
|
|
replyMessage.RecursionAvailable = true
|
|
replyMessage.Rcode = dns.RcodeSuccess
|
|
replyMessage.Answer = []dns.RR{
|
|
&dns.A{
|
|
A: net.IPv4(8, 8, 8, 8),
|
|
},
|
|
}
|
|
|
|
ipv4 := &layers.IPv4{
|
|
Protocol: layers.IPProtocolUDP,
|
|
SrcIP: net.IPv4(127, 0, 0, 1),
|
|
DstIP: net.IPv4(127, 0, 0, 2),
|
|
}
|
|
udp := &layers.UDP{
|
|
DstPort: 53,
|
|
SrcPort: 45223,
|
|
}
|
|
if err := udp.SetNetworkLayerForChecksum(ipv4); err != nil {
|
|
t.Error("failed to set network layer for checksum")
|
|
return
|
|
}
|
|
|
|
// Serialize the packet
|
|
buffer := gopacket.NewSerializeBuffer()
|
|
options := gopacket.SerializeOptions{
|
|
ComputeChecksums: true,
|
|
FixLengths: true,
|
|
}
|
|
|
|
requestData, err := request.Pack()
|
|
if err != nil {
|
|
t.Errorf("got an error while packing the request message, error: %v", err)
|
|
return
|
|
}
|
|
payload := gopacket.Payload(requestData)
|
|
|
|
if err := gopacket.SerializeLayers(buffer, options, ipv4, udp, payload); err != nil {
|
|
t.Errorf("failed to serialize packet: %v", err)
|
|
return
|
|
}
|
|
|
|
rw := &responseWriter{
|
|
local: &net.UDPAddr{
|
|
IP: net.IPv4(127, 0, 0, 1),
|
|
Port: 55223,
|
|
},
|
|
remote: &net.UDPAddr{
|
|
IP: net.IPv4(127, 0, 0, 1),
|
|
Port: 53,
|
|
},
|
|
packet: gopacket.NewPacket(
|
|
buffer.Bytes(),
|
|
layers.LayerTypeIPv4,
|
|
gopacket.Default,
|
|
),
|
|
device: device,
|
|
}
|
|
if err := rw.WriteMsg(replyMessage); err != nil {
|
|
t.Errorf("got an error while writing the local resolver response, error: %v", err)
|
|
return
|
|
}
|
|
}
|