mirror of
https://github.com/AdguardTeam/AdGuardHome.git
synced 2025-01-10 16:07:25 +03:00
89bf3721b5
Merge in DNS/adguard-home from AG-20352-dhcpd-lease-is-static to master Squashed commit of the following: commit e4f4278a7ffa0f084ed41472dd3e7de4466c9f50 Merge: b6e3b62e15bba281
Author: Stanislav Chzhen <s.chzhen@adguard.com> Date: Mon Apr 10 11:13:05 2023 +0300 Merge branch 'master' into AG-20352-dhcpd-lease-is-static commit b6e3b62ed4e7bc17fc3fdd2f4faa940a7f4334c2 Author: Stanislav Chzhen <s.chzhen@adguard.com> Date: Thu Apr 6 15:20:42 2023 +0300 dhcpd: imp naming commit e2d9ed0832b329f4cebcf8cbfcfadc5755fe441b Merge: ecd244a610bffd89
Author: Stanislav Chzhen <s.chzhen@adguard.com> Date: Wed Apr 5 16:53:55 2023 +0300 Merge branch 'master' into AG-20352-dhcpd-lease-is-static commit ecd244a60841d3cb96d292da688e353650baf645 Author: Stanislav Chzhen <s.chzhen@adguard.com> Date: Wed Apr 5 16:53:15 2023 +0300 dhcpd: add lease json form commit 9ebc246ed4711ff46091326a7cb35ea90b880cff Author: Stanislav Chzhen <s.chzhen@adguard.com> Date: Wed Apr 5 13:11:25 2023 +0300 dhcpd: imp code commit fc3d0cdaebf9e32e73d57e80296f9891896259cf Author: Stanislav Chzhen <s.chzhen@adguard.com> Date: Wed Apr 5 13:00:59 2023 +0300 all: fix json commit d722578543b98b1fefabecd6486f3bc102263d71 Author: Stanislav Chzhen <s.chzhen@adguard.com> Date: Wed Apr 5 12:23:34 2023 +0300 dhcpd: add lease is static
160 lines
3.5 KiB
Go
160 lines
3.5 KiB
Go
//go:build darwin || freebsd || linux || openbsd
|
|
|
|
package dhcpd
|
|
|
|
import (
|
|
"bytes"
|
|
"encoding/json"
|
|
"net/http"
|
|
"net/http/httptest"
|
|
"net/netip"
|
|
"testing"
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
"github.com/stretchr/testify/require"
|
|
)
|
|
|
|
func TestServer_handleDHCPStatus(t *testing.T) {
|
|
const (
|
|
staticName = "static-client"
|
|
staticMAC = "aa:aa:aa:aa:aa:aa"
|
|
)
|
|
|
|
staticIP := netip.MustParseAddr("192.168.10.10")
|
|
|
|
staticLease := &leaseStatic{
|
|
HWAddr: staticMAC,
|
|
IP: staticIP,
|
|
Hostname: staticName,
|
|
}
|
|
|
|
s, err := Create(&ServerConfig{
|
|
Enabled: true,
|
|
Conf4: *defaultV4ServerConf(),
|
|
WorkDir: t.TempDir(),
|
|
DBFilePath: dbFilename,
|
|
ConfigModified: func() {},
|
|
})
|
|
require.NoError(t, err)
|
|
|
|
// checkStatus is a helper that asserts the response of
|
|
// [*server.handleDHCPStatus].
|
|
checkStatus := func(t *testing.T, want *dhcpStatusResponse) {
|
|
w := httptest.NewRecorder()
|
|
var req *http.Request
|
|
req, err = http.NewRequest(http.MethodGet, "", nil)
|
|
require.NoError(t, err)
|
|
|
|
b := &bytes.Buffer{}
|
|
err = json.NewEncoder(b).Encode(&want)
|
|
require.NoError(t, err)
|
|
|
|
s.handleDHCPStatus(w, req)
|
|
assert.Equal(t, http.StatusOK, w.Code)
|
|
|
|
assert.JSONEq(t, b.String(), w.Body.String())
|
|
}
|
|
|
|
// defaultResponse is a helper that returs the response with default
|
|
// configuration.
|
|
defaultResponse := func() *dhcpStatusResponse {
|
|
conf4 := defaultV4ServerConf()
|
|
conf4.LeaseDuration = 86400
|
|
|
|
resp := &dhcpStatusResponse{
|
|
V4: *conf4,
|
|
V6: V6ServerConf{},
|
|
Leases: []*leaseDynamic{},
|
|
StaticLeases: []*leaseStatic{},
|
|
Enabled: true,
|
|
}
|
|
|
|
return resp
|
|
}
|
|
|
|
ok := t.Run("status", func(t *testing.T) {
|
|
resp := defaultResponse()
|
|
|
|
checkStatus(t, resp)
|
|
})
|
|
require.True(t, ok)
|
|
|
|
ok = t.Run("add_static_lease", func(t *testing.T) {
|
|
w := httptest.NewRecorder()
|
|
|
|
b := &bytes.Buffer{}
|
|
err = json.NewEncoder(b).Encode(staticLease)
|
|
require.NoError(t, err)
|
|
|
|
var r *http.Request
|
|
r, err = http.NewRequest(http.MethodPost, "", b)
|
|
require.NoError(t, err)
|
|
|
|
s.handleDHCPAddStaticLease(w, r)
|
|
assert.Equal(t, http.StatusOK, w.Code)
|
|
|
|
resp := defaultResponse()
|
|
resp.StaticLeases = []*leaseStatic{staticLease}
|
|
|
|
checkStatus(t, resp)
|
|
})
|
|
require.True(t, ok)
|
|
|
|
ok = t.Run("add_invalid_lease", func(t *testing.T) {
|
|
w := httptest.NewRecorder()
|
|
|
|
b := &bytes.Buffer{}
|
|
|
|
err = json.NewEncoder(b).Encode(&leaseStatic{})
|
|
require.NoError(t, err)
|
|
|
|
var r *http.Request
|
|
r, err = http.NewRequest(http.MethodPost, "", b)
|
|
require.NoError(t, err)
|
|
|
|
s.handleDHCPAddStaticLease(w, r)
|
|
assert.Equal(t, http.StatusBadRequest, w.Code)
|
|
})
|
|
require.True(t, ok)
|
|
|
|
ok = t.Run("remove_static_lease", func(t *testing.T) {
|
|
w := httptest.NewRecorder()
|
|
|
|
b := &bytes.Buffer{}
|
|
err = json.NewEncoder(b).Encode(staticLease)
|
|
require.NoError(t, err)
|
|
|
|
var r *http.Request
|
|
r, err = http.NewRequest(http.MethodPost, "", b)
|
|
require.NoError(t, err)
|
|
|
|
s.handleDHCPRemoveStaticLease(w, r)
|
|
assert.Equal(t, http.StatusOK, w.Code)
|
|
|
|
resp := defaultResponse()
|
|
|
|
checkStatus(t, resp)
|
|
})
|
|
require.True(t, ok)
|
|
|
|
ok = t.Run("set_config", func(t *testing.T) {
|
|
w := httptest.NewRecorder()
|
|
|
|
resp := defaultResponse()
|
|
resp.Enabled = false
|
|
|
|
b := &bytes.Buffer{}
|
|
err = json.NewEncoder(b).Encode(&resp)
|
|
require.NoError(t, err)
|
|
|
|
var r *http.Request
|
|
r, err = http.NewRequest(http.MethodPost, "", b)
|
|
require.NoError(t, err)
|
|
|
|
s.handleDHCPSetConfig(w, r)
|
|
assert.Equal(t, http.StatusOK, w.Code)
|
|
|
|
checkStatus(t, resp)
|
|
})
|
|
require.True(t, ok)
|
|
}
|