summaryrefslogtreecommitdiff
path: root/database/dns_test.go
diff options
context:
space:
mode:
Diffstat (limited to 'database/dns_test.go')
-rw-r--r--database/dns_test.go62
1 files changed, 62 insertions, 0 deletions
diff --git a/database/dns_test.go b/database/dns_test.go
new file mode 100644
index 0000000..a893021
--- /dev/null
+++ b/database/dns_test.go
@@ -0,0 +1,62 @@
+package database
+
+import (
+ "database/sql"
+ "path/filepath"
+ "testing"
+)
+
+func dnsTestDB(t *testing.T) *sql.DB {
+ t.Helper()
+ db, err := sql.Open("sqlite3", filepath.Join(t.TempDir(), "dns.db"))
+ if err != nil {
+ t.Fatal(err)
+ }
+ t.Cleanup(func() { db.Close() })
+ if _, err := Migrate(db); err != nil {
+ t.Fatal(err)
+ }
+ return db
+}
+
+func TestRenameUserDNSDomain(t *testing.T) {
+ db := dnsTestDB(t)
+ if _, err := CreateUser(db, "u1", "tux"); err != nil {
+ t.Fatal(err)
+ }
+
+ records := []*DNSRecord{
+ {ID: "a", UserID: "u1", Name: "tux.penguins.lan.", Type: "CNAME", Content: "aabbccddeeff.tux.penguins.lan", TTL: 300},
+ {ID: "b", UserID: "u1", Name: "www.tux.penguins.lan.", Type: "A", Content: "192.168.8.9", TTL: 60},
+ // content that merely contains the domain mid-string must NOT be rewritten
+ {ID: "c", UserID: "u1", Name: "note.tux.penguins.lan.", Type: "TXT", Content: "notmytux.penguins.lan", TTL: 60},
+ }
+ for _, r := range records {
+ if _, err := SaveDNSRecord(db, r); err != nil {
+ t.Fatal(err)
+ }
+ }
+
+ if err := RenameUserDNSDomain(db, "u1", "tux.penguins.lan", "gentoo.penguins.lan"); err != nil {
+ t.Fatal(err)
+ }
+
+ got, err := GetUserDNSRecords(db, "u1")
+ if err != nil {
+ t.Fatal(err)
+ }
+ byID := map[string]DNSRecord{}
+ for _, r := range got {
+ byID[r.ID] = r
+ }
+
+ if byID["a"].Name != "gentoo.penguins.lan." || byID["a"].Content != "aabbccddeeff.gentoo.penguins.lan" {
+ t.Errorf("apex CNAME = %q -> %q, want gentoo + device target", byID["a"].Name, byID["a"].Content)
+ }
+ if byID["b"].Name != "www.gentoo.penguins.lan." || byID["b"].Content != "192.168.8.9" {
+ t.Errorf("A record = %q -> %q, want www.gentoo + unchanged ip", byID["b"].Name, byID["b"].Content)
+ }
+ if byID["c"].Name != "note.gentoo.penguins.lan." || byID["c"].Content != "notmytux.penguins.lan" {
+ t.Errorf("TXT = %q -> %q, want name moved but content untouched", byID["c"].Name, byID["c"].Content)
+ }
+}