Add additional test cases and fix some failing tests

This commit is contained in:
lordwelch 2020-07-06 16:26:52 -07:00
parent e421cff225
commit 2dc11ce1e3
3 changed files with 106 additions and 2 deletions

View File

@ -270,7 +270,7 @@ func TestNetconfig(t *testing.T) {
} }
netconfig.DefaultCounterObj = &nftables.CounterObj{Packets: 23, Bytes: 42} netconfig.DefaultCounterObj = &nftables.CounterObj{Packets: 23, Bytes: 42}
if err := netconfig.Apply(tmp, filepath.Join(tmp, "root")); err != nil { if err := netconfig.Apply(tmp, filepath.Join(tmp, "root"), true); err != nil {
t.Fatalf("netconfig.Apply: %v", err) t.Fatalf("netconfig.Apply: %v", err)
} }
@ -278,7 +278,7 @@ func TestNetconfig(t *testing.T) {
// already-configured interfaces, addresses, routes, … (and ensure // already-configured interfaces, addresses, routes, … (and ensure
// nftables rules are replaced, not appendend to). // nftables rules are replaced, not appendend to).
netconfig.DefaultCounterObj = &nftables.CounterObj{Packets: 0, Bytes: 0} netconfig.DefaultCounterObj = &nftables.CounterObj{Packets: 0, Bytes: 0}
if err := netconfig.Apply(tmp, filepath.Join(tmp, "root")); err != nil { if err := netconfig.Apply(tmp, filepath.Join(tmp, "root"), true); err != nil {
t.Fatalf("netconfig.Apply: %v", err) t.Fatalf("netconfig.Apply: %v", err)
} }

View File

@ -143,6 +143,11 @@ func NewServer(addr, domain string) *Server {
} }
func (s *Server) initHostsLocked() { func (s *Server) initHostsLocked() {
for k := range s.subnames {
if k != s.domain {
s.Mux.HandleRemove(string(k))
}
}
s.hostsByName = make(map[lcHostname]string) s.hostsByName = make(map[lcHostname]string)
s.hostsByIP = make(map[string]string) s.hostsByIP = make(map[string]string)
s.subnames[s.domain] = make(map[lcHostname]IP) s.subnames[s.domain] = make(map[lcHostname]IP)
@ -341,6 +346,15 @@ func (s *Server) SetDNSEntries(dnsEntries []IP) {
entry.Host = lcHostname(strings.TrimSuffix(dn, "lan")) + s.domain entry.Host = lcHostname(strings.TrimSuffix(dn, "lan")) + s.domain
} }
s.setSubname(entry) s.setSubname(entry)
hdnSlice := strings.SplitN(string(entry.Host), ".", 2)
domain := lcHostname("")
if len(hdnSlice) == 2 {
domain = lcHostname(hdnSlice[1])
}
if domain == "" || domain == s.domain {
continue
}
s.Mux.HandleFunc(string(domain), s.subnameHandler(domain))
} }
} }

View File

@ -642,3 +642,93 @@ func TestSubname(t *testing.T) {
} }
}) })
} }
func TestDNSEntries(t *testing.T) {
r := &recorder{}
s := NewServer("127.0.0.2:0", "lan")
s.SetLeases([]dhcp4d.Lease{
{
Hostname: "testtarget",
Addr: net.IP{192, 168, 42, 23},
},
{
Hostname: "testtarget-ipv6",
Addr: net.ParseIP("fe80:3::"),
},
})
s.SetDNSEntries([]IP{
IP{
Host: "testtarget",
IPv4: net.IP{7, 7, 7, 7},
IPv6: net.ParseIP("fe80:1::"),
},
IP{
Host: "testtarget.example.org",
IPv4: net.IP{8, 8, 8, 8},
IPv6: net.ParseIP("fe80:2::"),
},
{
Host: "testtarget-ipv6",
IPv4: net.IP{9, 9, 9, 9},
IPv6: net.ParseIP("fe80:9::"),
},
})
t.Run("testtarget.", func(t *testing.T) {
if err := resolveTestTarget(s, "testtarget.", net.IP{192, 168, 42, 23}); err != nil {
t.Fatal(err)
}
})
t.Run("testtarget.lan.", func(t *testing.T) {
if err := resolveTestTarget(s, "testtarget.lan.", net.IP{192, 168, 42, 23}); err != nil {
t.Fatal(err)
}
})
t.Run("testtarget-ipv6.lan. (IPv6)", func(t *testing.T) {
if err := resolveTestTarget(s, "testtarget-ipv6.lan.", net.ParseIP("fe80:3::")); err != nil {
t.Fatal(err)
}
})
t.Run("testtarget-ipv6.lan. (no override???)", func(t *testing.T) {
if err := resolveTestTarget(s, "testtarget-ipv6.lan.", net.IP{9, 9, 9, 9}); err != nil {
t.Fatal(err)
}
})
t.Run("testtarget.lan. (IPv6) (no override???)", func(t *testing.T) {
if err := resolveTestTarget(s, "testtarget.lan.", net.ParseIP("fe80:1::")); err != nil {
t.Fatal(err)
}
})
t.Run("testtarget.example.org.", func(t *testing.T) {
if err := resolveTestTarget(s, "testtarget.example.org.", net.IP{8, 8, 8, 8}); err != nil {
t.Fatal(err)
}
})
t.Run("testtarget.example.org. (IPv6)", func(t *testing.T) {
if err := resolveTestTarget(s, "testtarget.example.org.", net.ParseIP("fe80:2::")); err != nil {
t.Fatal(err)
}
})
s.SetLeases([]dhcp4d.Lease{
{
Hostname: "testtarget",
Addr: net.IP{192, 168, 42, 23},
},
})
t.Run("testtarget.example.org. (deleted)", func(t *testing.T) {
m := new(dns.Msg)
m.SetQuestion("testtarget.example.org.", dns.TypeA)
s.Mux.ServeDNS(r, m)
if got, want := r.response.Rcode, dns.RcodeNameError; got != want {
t.Fatalf("unexpected rcode: got %v, want %v", got, want)
}
})
}