Initial commit (code only without large binaries)
This commit is contained in:
184
EdgeAPI/internal/dnsclients/provider_gname_test.go
Normal file
184
EdgeAPI/internal/dnsclients/provider_gname_test.go
Normal file
@@ -0,0 +1,184 @@
|
||||
// Copyright 2024 GoEdge CDN goedge.cdn@gmail.com. All rights reserved. Official site: https://goedge.cn .
|
||||
|
||||
package dnsclients_test
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"testing"
|
||||
|
||||
"github.com/TeaOSLab/EdgeAPI/internal/dnsclients"
|
||||
"github.com/TeaOSLab/EdgeAPI/internal/dnsclients/dnstypes"
|
||||
"github.com/TeaOSLab/EdgeAPI/internal/errors"
|
||||
"github.com/iwind/TeaGo/dbs"
|
||||
"github.com/iwind/TeaGo/logs"
|
||||
"github.com/iwind/TeaGo/maps"
|
||||
)
|
||||
|
||||
const GnameTestDomain = "xyyp.xyz" // 请修改为您的测试域名(使用您账户下实际拥有的域名)
|
||||
|
||||
func TestGnameProvider_GetDomains(t *testing.T) {
|
||||
provider, err := testGnameProvider()
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
domains, err := provider.GetDomains()
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
t.Log("domains count:", len(domains))
|
||||
if len(domains) > 0 {
|
||||
t.Log("first domain:", domains[0])
|
||||
}
|
||||
logs.PrintAsJSON(domains, t)
|
||||
}
|
||||
|
||||
func TestGnameProvider_GetRecords(t *testing.T) {
|
||||
provider, err := testGnameProvider()
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
records, err := provider.GetRecords(GnameTestDomain)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
t.Log("records count:", len(records))
|
||||
if len(records) > 0 {
|
||||
t.Log("first record:", records[0].Name, records[0].Type, records[0].Value)
|
||||
}
|
||||
logs.PrintAsJSON(records, t)
|
||||
}
|
||||
|
||||
func TestGnameProvider_GetRoutes(t *testing.T) {
|
||||
provider, err := testGnameProvider()
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
routes, err := provider.GetRoutes(GnameTestDomain)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
t.Log("routes count:", len(routes))
|
||||
logs.PrintAsJSON(routes, t)
|
||||
}
|
||||
|
||||
func TestGnameProvider_QueryRecord(t *testing.T) {
|
||||
provider, err := testGnameProvider()
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
// 测试查询不同类型的记录
|
||||
testCases := []struct {
|
||||
name string
|
||||
recordType dnstypes.RecordType
|
||||
}{
|
||||
{"www", dnstypes.RecordTypeA},
|
||||
{"@", dnstypes.RecordTypeA},
|
||||
{"", dnstypes.RecordTypeA},
|
||||
{"www", dnstypes.RecordTypeCNAME},
|
||||
{"mail", dnstypes.RecordTypeA},
|
||||
}
|
||||
|
||||
for _, tc := range testCases {
|
||||
t.Logf("=== Query: %s %s ===", tc.name, tc.recordType)
|
||||
record, err := provider.QueryRecord(GnameTestDomain, tc.name, tc.recordType)
|
||||
if err != nil {
|
||||
t.Logf("Error querying %s %s: %v", tc.name, tc.recordType, err)
|
||||
continue
|
||||
}
|
||||
if record == nil {
|
||||
t.Logf("Record not found: %s %s", tc.name, tc.recordType)
|
||||
} else {
|
||||
logs.PrintAsJSON(record, t)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func TestGnameProvider_QueryRecords(t *testing.T) {
|
||||
provider, err := testGnameProvider()
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
// 测试查询多个记录
|
||||
testCases := []struct {
|
||||
name string
|
||||
recordType dnstypes.RecordType
|
||||
}{
|
||||
{"www", dnstypes.RecordTypeA},
|
||||
{"@", dnstypes.RecordTypeA},
|
||||
{"", dnstypes.RecordTypeA},
|
||||
{"www", dnstypes.RecordTypeCNAME},
|
||||
}
|
||||
|
||||
for _, tc := range testCases {
|
||||
t.Logf("=== QueryRecords: %s %s ===", tc.name, tc.recordType)
|
||||
records, err := provider.QueryRecords(GnameTestDomain, tc.name, tc.recordType)
|
||||
if err != nil {
|
||||
t.Logf("Error querying %s %s: %v", tc.name, tc.recordType, err)
|
||||
continue
|
||||
}
|
||||
if len(records) == 0 {
|
||||
t.Logf("No records found: %s %s", tc.name, tc.recordType)
|
||||
} else {
|
||||
t.Logf("Found %d records", len(records))
|
||||
logs.PrintAsJSON(records, t)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func TestGnameProvider_DefaultRoute(t *testing.T) {
|
||||
provider, err := testGnameProvider()
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
defaultRoute := provider.DefaultRoute()
|
||||
t.Log("default route:", defaultRoute)
|
||||
if len(defaultRoute) == 0 {
|
||||
t.Error("default route should not be empty")
|
||||
}
|
||||
}
|
||||
|
||||
// testGnameProvider 创建测试用的 Gname Provider
|
||||
// 方式1: 从数据库读取配置(如果数据库中有配置)
|
||||
func testGnameProvider() (dnsclients.ProviderInterface, error) {
|
||||
// 尝试从数据库读取配置
|
||||
db, err := dbs.Default()
|
||||
if err == nil {
|
||||
one, err := db.FindOne("SELECT * FROM edgeDNSProviders WHERE type='gname' ORDER BY id DESC")
|
||||
if err == nil && one != nil {
|
||||
apiParams := maps.Map{}
|
||||
err = json.Unmarshal([]byte(one.GetString("apiParams")), &apiParams)
|
||||
if err == nil {
|
||||
provider := &dnsclients.GnameProvider{}
|
||||
err = provider.Auth(apiParams)
|
||||
if err == nil {
|
||||
return provider, nil
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 方式2: 使用硬编码配置(请修改为您的实际 APPID 和 Secret)
|
||||
provider := &dnsclients.GnameProvider{}
|
||||
|
||||
// 请在此处填写您的 Gname API 凭证
|
||||
// 可以使用 appid/secret 或 apiKey/apiSecret(兼容旧参数名)
|
||||
authParams := maps.Map{
|
||||
"appid": "1519156931639cd973f", // 请修改为您的 APPID
|
||||
"secret": "5uBTJCwYFNQBjbYsc8ak", // 请修改为您的 Secret
|
||||
// 或者使用旧参数名(二选一):
|
||||
// "apiKey": "your-api-key-here",
|
||||
// "apiSecret": "your-api-secret-here",
|
||||
}
|
||||
|
||||
err = provider.Auth(authParams)
|
||||
if err != nil {
|
||||
return nil, errors.New("please set your Gname API credentials (appid/secret or apiKey/apiSecret) in testGnameProvider() function or in database")
|
||||
}
|
||||
return provider, nil
|
||||
}
|
||||
Reference in New Issue
Block a user