// Copyright 2023 GoEdge CDN goedge.cdn@gmail.com. All rights reserved. Official site: https://goedge.cn . //go:build plus package dnsclients_test import ( "encoding/json" "errors" "github.com/TeaOSLab/EdgeAPI/internal/dnsclients" "github.com/TeaOSLab/EdgeAPI/internal/dnsclients/dnstypes" "github.com/iwind/TeaGo/dbs" "github.com/iwind/TeaGo/logs" "github.com/iwind/TeaGo/maps" "testing" ) const AzureDNSTestDomain = "goedge.dev" func TestAzureDNSProvider_GetDomains(t *testing.T) { provider, err := testAzureDNSProvider() if err != nil { t.Fatal(err) } domains, err := provider.GetDomains() if err != nil { t.Fatal(err) } t.Log(domains) } func TestAzureDNSProvider_GetRoutes(t *testing.T) { provider, err := testAzureDNSProvider() if err != nil { t.Fatal(err) } routes, err := provider.GetRoutes(AzureDNSTestDomain) if err != nil { t.Fatal(err) } logs.PrintAsJSON(routes, t) } func TestAzureDNSProvider_GetRecords(t *testing.T) { provider, err := testAzureDNSProvider() if err != nil { t.Fatal(err) } records, err := provider.GetRecords(AzureDNSTestDomain) if err != nil { t.Fatal(err) } for _, record := range records { t.Log(record.Id, record.Type, record.Name, record.Value, record.Route, record.TTL) } } func TestAzureDNSProvider_AddRecord_CNAME(t *testing.T) { provider, err := testAzureDNSProvider() if err != nil { t.Fatal(err) } var route = "*" var record = &dnstypes.Record{ Type: dnstypes.RecordTypeCNAME, Name: "test10", Value: "hello." + AzureDNSTestDomain, Route: route, TTL: 600, } err = provider.AddRecord(AzureDNSTestDomain, record) if err != nil { t.Fatal(err) } t.Log("ok, record id:", record.Id) } func TestAzureDNSProvider_AddRecord_TXT(t *testing.T) { provider, err := testAzureDNSProvider() if err != nil { t.Fatal(err) } //var route = "CONTINENT:AS@COUNTRY:CN@SUBDIVISION:13" var route = "COUNTRY:JP" var record = &dnstypes.Record{ Type: dnstypes.RecordTypeTXT, Name: "test-txt", Value: "i-am-txt", Route: route, TTL: 600, } err = provider.AddRecord(AzureDNSTestDomain, record) if err != nil { t.Fatal(err) } t.Log("ok, record id:", record.Id) } func TestAzureDNSProvider_AddRecord_A(t *testing.T) { provider, err := testAzureDNSProvider() if err != nil { t.Fatal(err) } //var route = "CONTINENT:AS@COUNTRY:CN@SUBDIVISION:13" var route = "COUNTRY:JP" var record = &dnstypes.Record{ Type: dnstypes.RecordTypeA, Name: "test2", Value: "192.168.1.113", Route: route, TTL: 600, } err = provider.AddRecord(AzureDNSTestDomain, record) if err != nil { t.Fatal(err) } t.Log("ok, record id:", record.Id) } func TestAzureDNSProvider_AddRecord_A_Default(t *testing.T) { provider, err := testAzureDNSProvider() if err != nil { t.Fatal(err) } //var route = "CONTINENT:AS@COUNTRY:CN@SUBDIVISION:13" var route = "*" var record = &dnstypes.Record{ Type: dnstypes.RecordTypeA, Name: "test3", Value: "192.168.1.201", Route: route, TTL: 600, } err = provider.AddRecord(AzureDNSTestDomain, record) if err != nil { t.Fatal(err) } t.Log("ok, record id:", record.Id) } func TestAzureDNSProvider_QueryRecord(t *testing.T) { provider, err := testAzureDNSProvider() if err != nil { t.Fatal(err) } { record, err := provider.QueryRecord(AzureDNSTestDomain, "test2", dnstypes.RecordTypeA) if err != nil { t.Fatal(err) } t.Log(record) } { record, err := provider.QueryRecord(AzureDNSTestDomain, "test2", dnstypes.RecordTypeCNAME) if err != nil { t.Fatal(err) } t.Log(record) } } func TestAzureDNSProvider_QueryRecords(t *testing.T) { provider, err := testAzureDNSProvider() if err != nil { t.Fatal(err) } { records, err := provider.QueryRecords(AzureDNSTestDomain, "test2", dnstypes.RecordTypeA) if err != nil { t.Fatal(err) } logs.PrintAsJSON(records, t) } } func TestAzureDNSProvider_UpdateRecord(t *testing.T) { provider, err := testAzureDNSProvider() if err != nil { t.Fatal(err) } var route = "COUNTRY:HK" var id = provider.ComposeRecordId("test2", "A", "192.168.1.115") err = provider.UpdateRecord(AzureDNSTestDomain, &dnstypes.Record{ Id: id, }, &dnstypes.Record{ Type: dnstypes.RecordTypeA, Name: "test2", Value: "192.168.1.114", Route: route, TTL: 1800, }) if err != nil { t.Fatal(err) } t.Log("ok") } func TestAzureDNSProvider_UpdateRecord_CNAME(t *testing.T) { provider, err := testAzureDNSProvider() if err != nil { t.Fatal(err) } var route = "COUNTRY:HK" var id = provider.ComposeRecordId("test10", "CNAME", "hello1."+AzureDNSTestDomain+".") err = provider.UpdateRecord(AzureDNSTestDomain, &dnstypes.Record{ Id: id, }, &dnstypes.Record{ Type: dnstypes.RecordTypeCNAME, Name: "test10", Value: "hello2." + AzureDNSTestDomain + ".", Route: route, TTL: 1800, }) if err != nil { t.Fatal(err) } t.Log("ok") } func TestAzureDNSProvider_UpdateRecord_TXT(t *testing.T) { provider, err := testAzureDNSProvider() if err != nil { t.Fatal(err) } var route = "COUNTRY:HK" var id = provider.ComposeRecordId("test-txt", "TXT", "i-am-txt") err = provider.UpdateRecord(AzureDNSTestDomain, &dnstypes.Record{ Id: id, }, &dnstypes.Record{ Type: dnstypes.RecordTypeTXT, Name: "test-txt", Value: "i-am-txt2", Route: route, TTL: 1800, }) if err != nil { t.Fatal(err) } t.Log("ok") } func TestAzureDNSProvider_DeleteRecord(t *testing.T) { provider, err := testAzureDNSProvider() if err != nil { t.Fatal(err) } var id = "JHRlc3QzJEEkMTkyLjE2OC4xLjIwMQ==" id = "JHRlc3QzJEEkMTkyLjE2OC4xLjIwMw==" err = provider.DeleteRecord(AzureDNSTestDomain, &dnstypes.Record{ Id: id, }) if err != nil { t.Fatal(err) } t.Log("ok") } func TestAzureDNSProvider_DeleteRecord_CNAME(t *testing.T) { provider, err := testAzureDNSProvider() if err != nil { t.Fatal(err) } var id = "JGhlbGxvLWZvcndhcmQkQ05BTUUkaGVsbG8uZ29lZGdlLmRldi4=" err = provider.DeleteRecord(AzureDNSTestDomain, &dnstypes.Record{ Id: id, }) if err != nil { t.Fatal(err) } t.Log("ok") } func testAzureDNSProvider() (provider *dnsclients.AzureDNSProvider, err error) { dbs.NotifyReady() db, err := dbs.Default() if err != nil { return nil, err } one, err := db.FindOne("SELECT * FROM edgeDNSProviders WHERE type='azureDNS' AND id='47' ORDER BY id DESC") if err != nil { return nil, err } if one == nil { err = errors.New("PROVIDER NOT FOUND") return } var apiParams = maps.Map{} err = json.Unmarshal([]byte(one.GetString("apiParams")), &apiParams) if err != nil { return nil, err } provider = &dnsclients.AzureDNSProvider{ ProviderId: one.GetInt64("id"), } err = provider.Auth(apiParams) if err != nil { return nil, err } return provider, nil }