Pull request: 4705 fix opts
Merge in DNS/adguard-home from 4705-fix-opts to master Updates #4705. Squashed commit of the following: commit d3924c443260af3d32d73bd784efff2bf8dd612e Merge: e46198c6e545f3bdAuthor: Eugene Burkov <E.Burkov@AdGuard.COM> Date: Mon Sep 5 16:57:38 2022 +0300 Merge branch 'master' into 4705-fix-opts commit e46198c6d8da4dcadabecfd9c1b33cc472efe612 Author: Eugene Burkov <E.Burkov@AdGuard.COM> Date: Mon Sep 5 16:52:20 2022 +0300 dhcpd: immp docs commit 1c1caeaa1b2eb642fa83aa5a88ec041af9963591 Author: Eugene Burkov <E.Burkov@AdGuard.COM> Date: Sat Sep 3 17:31:35 2022 +0300 dhcpd: fix logic, imp docs commit bc74e21b9eb79fe22170b0e02cddcbd4bf78d860 Merge: 280ad10f1fb04376Author: Eugene Burkov <E.Burkov@AdGuard.COM> Date: Fri Sep 2 18:58:52 2022 +0300 Merge branch 'master' into 4705-fix-opts commit 280ad10f63f954f89b42cdf206a8240f8d4de503 Author: Eugene Burkov <E.Burkov@AdGuard.COM> Date: Fri Sep 2 00:53:38 2022 +0300 dhcpd: imp docs, tests commit 600fa44f35683ba4b340843be13786e9383ead89 Author: Eugene Burkov <E.Burkov@AdGuard.COM> Date: Thu Sep 1 20:24:52 2022 +0300 dhcpd: add new opts commit caf0cc6b370a04e6e002428b49f8d54cba105d5a Author: Eugene Burkov <E.Burkov@AdGuard.COM> Date: Thu Sep 1 18:13:02 2022 +0300 dhcpd: log changes commit 3d2c61d9b8fd19c8d1e4f43ac9aac3cb94cdd4d3 Author: Eugene Burkov <E.Burkov@AdGuard.COM> Date: Thu Sep 1 18:09:34 2022 +0300 dhcpd: imp opts
This commit is contained in:
@@ -11,6 +11,7 @@ import (
|
||||
"time"
|
||||
|
||||
"github.com/AdguardTeam/AdGuardHome/internal/aghnet"
|
||||
"github.com/AdguardTeam/golibs/netutil"
|
||||
"github.com/AdguardTeam/golibs/stringutil"
|
||||
"github.com/AdguardTeam/golibs/testutil"
|
||||
"github.com/insomniacslk/dhcp/dhcpv4"
|
||||
@@ -346,7 +347,7 @@ func TestV4Server_handle_optionsPriority(t *testing.T) {
|
||||
}
|
||||
conf.Options = []string{b.String()}
|
||||
} else {
|
||||
defer func() { s.options.Update(dhcpv4.OptDNS(defaultIP)) }()
|
||||
defer func() { s.implicitOpts.Update(dhcpv4.OptDNS(defaultIP)) }()
|
||||
}
|
||||
|
||||
ss, err := v4Create(conf)
|
||||
@@ -402,6 +403,111 @@ func TestV4Server_handle_optionsPriority(t *testing.T) {
|
||||
})
|
||||
}
|
||||
|
||||
func TestV4Server_updateOptions(t *testing.T) {
|
||||
testIP := net.IP{1, 2, 3, 4}
|
||||
|
||||
dontWant := func(c dhcpv4.OptionCode) (opt dhcpv4.Option) {
|
||||
return dhcpv4.OptGeneric(c, nil)
|
||||
}
|
||||
|
||||
testCases := []struct {
|
||||
name string
|
||||
wantOpts dhcpv4.Options
|
||||
reqMods []dhcpv4.Modifier
|
||||
confOpts []string
|
||||
}{{
|
||||
name: "requested_default",
|
||||
wantOpts: dhcpv4.OptionsFromList(
|
||||
dhcpv4.OptBroadcastAddress(netutil.IPv4bcast()),
|
||||
),
|
||||
reqMods: []dhcpv4.Modifier{
|
||||
dhcpv4.WithRequestedOptions(dhcpv4.OptionBroadcastAddress),
|
||||
},
|
||||
confOpts: nil,
|
||||
}, {
|
||||
name: "requested_non-default",
|
||||
wantOpts: dhcpv4.OptionsFromList(
|
||||
dhcpv4.OptBroadcastAddress(testIP),
|
||||
),
|
||||
reqMods: []dhcpv4.Modifier{
|
||||
dhcpv4.WithRequestedOptions(dhcpv4.OptionBroadcastAddress),
|
||||
},
|
||||
confOpts: []string{
|
||||
fmt.Sprintf("%d ip %s", dhcpv4.OptionBroadcastAddress, testIP),
|
||||
},
|
||||
}, {
|
||||
name: "non-requested_default",
|
||||
wantOpts: dhcpv4.OptionsFromList(
|
||||
dontWant(dhcpv4.OptionBroadcastAddress),
|
||||
),
|
||||
reqMods: nil,
|
||||
confOpts: nil,
|
||||
}, {
|
||||
name: "non-requested_non-default",
|
||||
wantOpts: dhcpv4.OptionsFromList(
|
||||
dhcpv4.OptBroadcastAddress(testIP),
|
||||
),
|
||||
reqMods: nil,
|
||||
confOpts: []string{
|
||||
fmt.Sprintf("%d ip %s", dhcpv4.OptionBroadcastAddress, testIP),
|
||||
},
|
||||
}, {
|
||||
name: "requested_deleted",
|
||||
wantOpts: dhcpv4.OptionsFromList(
|
||||
dontWant(dhcpv4.OptionBroadcastAddress),
|
||||
),
|
||||
reqMods: []dhcpv4.Modifier{
|
||||
dhcpv4.WithRequestedOptions(dhcpv4.OptionBroadcastAddress),
|
||||
},
|
||||
confOpts: []string{
|
||||
fmt.Sprintf("%d del", dhcpv4.OptionBroadcastAddress),
|
||||
},
|
||||
}, {
|
||||
name: "requested_non-default_deleted",
|
||||
wantOpts: dhcpv4.OptionsFromList(
|
||||
dontWant(dhcpv4.OptionBroadcastAddress),
|
||||
),
|
||||
reqMods: []dhcpv4.Modifier{
|
||||
dhcpv4.WithRequestedOptions(dhcpv4.OptionBroadcastAddress),
|
||||
},
|
||||
confOpts: []string{
|
||||
fmt.Sprintf("%d ip %s", dhcpv4.OptionBroadcastAddress, testIP),
|
||||
fmt.Sprintf("%d del", dhcpv4.OptionBroadcastAddress),
|
||||
},
|
||||
}}
|
||||
|
||||
for _, tc := range testCases {
|
||||
req, err := dhcpv4.New(tc.reqMods...)
|
||||
require.NoError(t, err)
|
||||
|
||||
resp, err := dhcpv4.NewReplyFromRequest(req)
|
||||
require.NoError(t, err)
|
||||
|
||||
conf := defaultV4ServerConf()
|
||||
conf.Options = tc.confOpts
|
||||
|
||||
s, err := v4Create(conf)
|
||||
require.NoError(t, err)
|
||||
|
||||
require.IsType(t, (*v4Server)(nil), s)
|
||||
s4, _ := s.(*v4Server)
|
||||
|
||||
t.Run(tc.name, func(t *testing.T) {
|
||||
s4.updateOptions(req, resp)
|
||||
|
||||
for c, v := range tc.wantOpts {
|
||||
if v == nil {
|
||||
assert.NotContains(t, resp.Options, c)
|
||||
|
||||
continue
|
||||
}
|
||||
|
||||
assert.Equal(t, v, resp.Options.Get(dhcpv4.GenericOptionCode(c)))
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
func TestV4StaticLease_Get(t *testing.T) {
|
||||
sIface := defaultSrv(t)
|
||||
|
||||
@@ -409,7 +515,7 @@ func TestV4StaticLease_Get(t *testing.T) {
|
||||
require.True(t, ok)
|
||||
|
||||
s.conf.dnsIPAddrs = []net.IP{{192, 168, 10, 1}}
|
||||
s.options.Update(dhcpv4.OptDNS(s.conf.dnsIPAddrs...))
|
||||
s.implicitOpts.Update(dhcpv4.OptDNS(s.conf.dnsIPAddrs...))
|
||||
|
||||
l := &Lease{
|
||||
Hostname: "static-1.local",
|
||||
@@ -498,7 +604,7 @@ func TestV4DynamicLease_Get(t *testing.T) {
|
||||
require.True(t, ok)
|
||||
|
||||
s.conf.dnsIPAddrs = []net.IP{{192, 168, 10, 1}}
|
||||
s.options.Update(dhcpv4.OptDNS(s.conf.dnsIPAddrs...))
|
||||
s.implicitOpts.Update(dhcpv4.OptDNS(s.conf.dnsIPAddrs...))
|
||||
|
||||
var req, resp *dhcpv4.DHCPv4
|
||||
mac := net.HardwareAddr{0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA}
|
||||
|
||||
Reference in New Issue
Block a user