Files
realDynDNS/pkg/changeDetector/changeDetector_test.go
2024-04-01 11:44:53 +02:00

106 lines
2.5 KiB
Go

package changeDetector
import (
"net"
"realdnydns/model/common"
"realdnydns/pkg/config"
"testing"
)
type MockExternalIpProvider struct {
ExternalIp string
}
func (m *MockExternalIpProvider) GetExternalIp() (net.IP, error) {
return net.ParseIP(m.ExternalIp), nil
}
type MockDNSProvider interface {
UpdateRecord(tld string, subdomain string, ip net.IP, ttl int, prio int, disabled bool) (*common.ARecord, error)
GetRecord(tld string, subdomain string) (*common.ARecord, error)
}
type MockDNSProviderImpl struct {
GetRecordIpResponse string
UpdateRecordIpResponse string
}
func (m *MockDNSProviderImpl) GetRecord(tld string, subdomain string) (*common.ARecord, error) {
return &common.ARecord{
IP: m.GetRecordIpResponse,
TTL: 10,
Prio: 20,
Disabled: false,
}, nil
}
func (m *MockDNSProviderImpl) UpdateRecord(tld string, subdomain string, ip net.IP, ttl int, prio int, disabled bool) (*common.ARecord, error) {
return &common.ARecord{
IP: m.UpdateRecordIpResponse,
TTL: 10,
Prio: 20,
Disabled: false,
}, nil
}
func TestDetectAndApplyChanges(t *testing.T) {
t.Run("with changes", testDetectAndApplyChangesWithChanges())
t.Run("without changes", testDetectAndApplyChangesWithoutChanges())
}
func testDetectAndApplyChangesWithChanges() func(t *testing.T) {
return func(t *testing.T) {
changeDetector := New(&MockExternalIpProvider{
ExternalIp: "127.0.0.1",
}, &MockDNSProviderImpl{
GetRecordIpResponse: "127.0.0.2",
UpdateRecordIpResponse: "127.0.0.1",
}, []config.DomainConfig{
{
TLD: "example.com",
Subdomains: []string{
"test",
"@",
},
},
})
numberUpdated, err := changeDetector.DetectAndApplyChanges()
if err != nil {
t.Errorf("expected no error, got %v", err)
}
if numberUpdated != 2 {
t.Errorf("expected numberUpdated to be 2, got %v", numberUpdated)
}
}
}
func testDetectAndApplyChangesWithoutChanges() func(t *testing.T) {
return func(t *testing.T) {
changeDetector := New(&MockExternalIpProvider{
ExternalIp: "127.0.0.1",
}, &MockDNSProviderImpl{
GetRecordIpResponse: "127.0.0.1",
UpdateRecordIpResponse: "127.0.0.1",
}, []config.DomainConfig{
{
TLD: "example.com",
Subdomains: []string{
"test",
"@",
},
},
})
numberUpdated, err := changeDetector.DetectAndApplyChanges()
if err != nil {
t.Errorf("expected no error, got %v", err)
}
if numberUpdated != 0 {
t.Errorf("expected numberUpdated to be 0, got %v", numberUpdated)
}
}
}