MagiTrickle/records/records_test.go
2025-02-15 00:03:02 +03:00

111 lines
2.4 KiB
Go

package records
import (
"bytes"
"slices"
"testing"
"time"
)
func TestLoop(t *testing.T) {
r := New()
r.AddCNameRecord("1", "2", 60)
r.AddCNameRecord("2", "1", 60)
if r.GetARecords("1") != nil {
t.Fatal("loop detected")
}
if r.GetARecords("2") != nil {
t.Fatal("loop detected")
}
}
func TestCName(t *testing.T) {
r := New()
r.AddARecord("example.com", []byte{1, 2, 3, 4}, 60)
r.AddCNameRecord("gateway.example.com", "example.com", 60)
records := r.GetARecords("gateway.example.com")
if records == nil {
t.Fatal("no records")
}
if bytes.Compare(records[0].Address, []byte{1, 2, 3, 4}) != 0 {
t.Fatal("cname mismatch")
}
}
func TestA(t *testing.T) {
r := New()
r.AddARecord("example.com", []byte{1, 2, 3, 4}, 60)
records := r.GetARecords("example.com")
if records == nil {
t.Fatal("no records")
}
if bytes.Compare(records[0].Address, []byte{1, 2, 3, 4}) != 0 {
t.Fatal("cname mismatch")
}
}
func TestDeprecated(t *testing.T) {
r := New()
r.AddARecord("example.com", []byte{1, 2, 3, 4}, 0)
time.Sleep(time.Second)
records := r.GetARecords("example.com")
if records != nil {
t.Fatal("deprecated records")
}
}
func TestNotExistedA(t *testing.T) {
r := New()
records := r.GetARecords("example.com")
if records != nil {
t.Fatal("not existed records")
}
}
func TestNotExistedCNameAlias(t *testing.T) {
r := New()
r.AddCNameRecord("gateway.example.com", "example.com", 60)
records := r.GetARecords("gateway.example.com")
if records != nil {
t.Fatal("not existed records")
}
}
func TestReplacing(t *testing.T) {
r := New()
r.AddCNameRecord("gateway.example.com", "example.com", 60)
r.AddARecord("gateway.example.com", []byte{1, 2, 3, 4}, 60)
records := r.GetARecords("gateway.example.com")
if bytes.Compare(records[0].Address, []byte{1, 2, 3, 4}) != 0 {
t.Fatal("mismatch")
}
}
func TestAliases(t *testing.T) {
r := New()
r.AddARecord("1", []byte{1, 2, 3, 4}, 60)
r.AddCNameRecord("2", "1", 60)
r.AddCNameRecord("3", "2", 60)
r.AddCNameRecord("4", "2", 60)
r.AddCNameRecord("5", "1", 60)
aliases := r.GetAliases("1")
if aliases == nil {
t.Fatal("no aliases")
}
if !slices.Contains(aliases, "1") {
t.Fatal("no 1")
}
if !slices.Contains(aliases, "2") {
t.Fatal("no 2")
}
if !slices.Contains(aliases, "3") {
t.Fatal("no 3")
}
if !slices.Contains(aliases, "4") {
t.Fatal("no 4")
}
if !slices.Contains(aliases, "5") {
t.Fatal("no 5")
}
}