all: upd chlog

This commit is contained in:
Stanislav Chzhen 2023-04-12 17:22:27 +03:00
parent 1b6a76e79c
commit e07e7a23e7
7 changed files with 34 additions and 35 deletions

1
.gitignore vendored
View File

@ -21,7 +21,6 @@
/snapcraft_login
AdGuardHome*
coverage.txt
leases.db
leases.json
node_modules/

View File

@ -55,6 +55,8 @@ NOTE: Add new changes BELOW THIS COMMENT.
### Changed
- Stored DHCP leases moved from `leases.db` to `data/leases.json` and now have
human-readable format.
- ARPA domain names containing a subnet within private networks now also
considered private, behaving closer to [RFC 6761][rfc6761] ([#5567]).

View File

@ -23,7 +23,9 @@ const (
dataFilename = "leases.json"
)
// Deprecated: Use Lease.
// leaseJSON is the structure of stored lease.
//
// Deprecated: Use [Lease].
type leaseJSON struct {
HWAddr []byte `json:"mac"`
IP []byte `json:"ip"`
@ -39,9 +41,7 @@ func normalizeIP(ip net.IP) net.IP {
return ip
}
// Load lease table from DB
//
// TODO(s.chzhen): Decrease complexity.
// dbLoad loads stored leases.
func (s *server) dbLoad() (err error) {
data, err := os.ReadFile(s.conf.DBFilePath)
if err != nil {
@ -114,7 +114,7 @@ func normalizeLeases(staticLeases, dynLeases []*Lease) []*Lease {
return leases
}
// Store lease table in DB
// dbStore stores DHCP leases.
func (s *server) dbStore() (err error) {
// Use an empty slice here as opposed to nil so that it doesn't write
// "null" into the database file if leases are empty.
@ -131,6 +131,7 @@ func (s *server) dbStore() (err error) {
return writeDB(s.conf.DBFilePath, leases)
}
// writeDB writes leases to file at path.
func writeDB(path string, leases []*Lease) (err error) {
defer func() { err = errors.Annotate(err, "writing db: %w") }()
@ -156,34 +157,24 @@ func writeDB(path string, leases []*Lease) (err error) {
return nil
}
func checkDB(conf *ServerConfig) (err error) {
workDirPath := filepath.Join(conf.WorkDir, dbFilename)
_, err = os.Stat(workDirPath)
// migrateDB migrates stored leases if necessary.
func migrateDB(conf *ServerConfig) (err error) {
defer func() { err = errors.Annotate(err, "migrating db: %w") }()
oldLeasesPath := filepath.Join(conf.WorkDir, dbFilename)
dataDirPath := filepath.Join(conf.DataDir, dataFilename)
file, err := os.Open(oldLeasesPath)
if errors.Is(err, os.ErrNotExist) {
// Nothing to migrate.
return nil
} else if err == nil {
dataDirPath := filepath.Join(conf.DataDir, dataFilename)
err = migrateDB(workDirPath, dataDirPath)
}
return errors.Annotate(err, "checking db: %w")
}
func migrateDB(workDirPath, dataDirPath string) (err error) {
defer func() { err = errors.Annotate(err, "migrating db: %w") }()
var data []byte
data, err = os.ReadFile(workDirPath)
if err != nil {
} else if err != nil {
// Don't wrap the error since it's informative enough as is.
return err
}
ljs := []leaseJSON{}
err = json.Unmarshal(data, &ljs)
err = json.NewDecoder(file).Decode(&ljs)
if err != nil {
// Don't wrap the error since it's informative enough as is.
return err
@ -213,6 +204,10 @@ func migrateDB(workDirPath, dataDirPath string) (err error) {
}
err = writeDB(dataDirPath, leases)
if err != nil {
// Don't wrap the error since it's informative enough as is.
return err
}
return os.Remove(workDirPath)
return os.Remove(oldLeasesPath)
}

View File

@ -13,18 +13,18 @@ import (
"github.com/stretchr/testify/require"
)
const testLeasesDB = `[
const testData = `[
{"mac":"ESIzRFVm","ip":"AQIDBA==","host":"test1","exp":1},
{"mac":"ZlVEMyIR","ip":"BAMCAQ==","host":"test2","exp":1231231231}
]`
func Test_upgradeDB(t *testing.T) {
func Test_migrateDB(t *testing.T) {
dir := t.TempDir()
workDirPath := filepath.Join(dir, dbFilename)
oldLeasesPath := filepath.Join(dir, dbFilename)
dataDirPath := filepath.Join(dir, dataFilename)
err := os.WriteFile(workDirPath, []byte(testLeasesDB), 0o644)
err := os.WriteFile(oldLeasesPath, []byte(testData), 0o644)
require.NoError(t, err)
wantLeases := []*Lease{{
@ -41,7 +41,12 @@ func Test_upgradeDB(t *testing.T) {
IsStatic: false,
}}
err = migrateDB(workDirPath, dataDirPath)
conf := &ServerConfig{
WorkDir: dir,
DataDir: dir,
}
err = migrateDB(conf)
require.NoError(t, err)
var data []byte

View File

@ -279,8 +279,8 @@ func Create(conf *ServerConfig) (s *server, err error) {
return nil, fmt.Errorf("neither dhcpv4 nor dhcpv6 srv is configured")
}
// Check if leases db needs to be migrated.
err = checkDB(conf)
// Migrate leases db if needed.
err = migrateDB(conf)
if err != nil {
return nil, err
}

View File

@ -53,7 +53,6 @@ func TestDB(t *testing.T) {
Hostname: "static-2.local",
HWAddr: net.HardwareAddr{0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xBB},
IP: netip.MustParseAddr("192.168.10.101"),
IsStatic: true,
}}
srv4, ok := s.srv4.(*v4Server)

View File

@ -33,7 +33,6 @@ func TestServer_handleDHCPStatus(t *testing.T) {
Conf4: *defaultV4ServerConf(),
DataDir: t.TempDir(),
WorkDir: t.TempDir(),
DBFilePath: dbFilename,
ConfigModified: func() {},
})
require.NoError(t, err)