更新工作区配置,删除不再使用的Cloudflare相关文件,优化日志输出格式,增强主机信息收集功能,调整代码结构以提高可维护性。
This commit is contained in:
310
agent-wdd/cloudflare/CloudflareAPI_test.go
Normal file
310
agent-wdd/cloudflare/CloudflareAPI_test.go
Normal file
@@ -0,0 +1,310 @@
|
||||
package cloudflare
|
||||
|
||||
import (
|
||||
"agent-wdd/utils"
|
||||
"fmt"
|
||||
"testing"
|
||||
)
|
||||
|
||||
// 测试前的设置函数,获取API token并检查环境设置
|
||||
func setupTest(t *testing.T) *CloudflareClient {
|
||||
// 从环境变量获取API令牌
|
||||
apiToken := "T7LxBemfe8SNGWkT9uz2XIc1e22ifAbBv_POJvDP"
|
||||
|
||||
// 创建Cloudflare客户端实例
|
||||
return GetInstance(apiToken)
|
||||
}
|
||||
|
||||
// TestClientCreation 测试客户端创建
|
||||
func TestClientCreation(t *testing.T) {
|
||||
client := setupTest(t)
|
||||
if client == nil {
|
||||
t.Fatal("客户端创建失败")
|
||||
}
|
||||
}
|
||||
|
||||
// TestListZones 测试获取域名列表
|
||||
func TestListZones(t *testing.T) {
|
||||
client := setupTest(t)
|
||||
|
||||
// 列出所有域名
|
||||
zones, err := client.ListZones(nil)
|
||||
if err != nil {
|
||||
t.Fatalf("获取域名列表失败: %v", err)
|
||||
}
|
||||
|
||||
t.Logf("找到 %d 个域名", len(zones))
|
||||
for _, zone := range zones {
|
||||
t.Logf("域名: %s (ID: %s, 状态: %s)", zone.Name, zone.ID, zone.Status)
|
||||
|
||||
utils.BeautifulPrint(zone)
|
||||
}
|
||||
}
|
||||
|
||||
// TestGetZone 测试获取单个域名详情
|
||||
func TestGetZone(t *testing.T) {
|
||||
client := setupTest(t)
|
||||
|
||||
// 列出所有域名
|
||||
zones, err := client.ListZones(nil)
|
||||
if err != nil {
|
||||
t.Fatalf("获取域名列表失败: %v", err)
|
||||
}
|
||||
|
||||
// 如果没有域名,则跳过测试
|
||||
if len(zones) == 0 {
|
||||
t.Skip("没有找到域名,跳过测试")
|
||||
}
|
||||
|
||||
// 使用第一个域名进行测试
|
||||
zoneID := zones[0].ID
|
||||
zoneName := zones[0].Name
|
||||
|
||||
// 获取特定域名的详细信息
|
||||
zone, err := client.GetZone(zoneID)
|
||||
if err != nil {
|
||||
t.Fatalf("获取域名详情失败: %v", err)
|
||||
}
|
||||
|
||||
t.Logf("域名 %s 的详情:", zoneName)
|
||||
t.Logf(" - ID: %s", zone.ID)
|
||||
t.Logf(" - 状态: %s", zone.Status)
|
||||
t.Logf(" - 名称服务器: %v", zone.NameServers)
|
||||
t.Logf(" - 创建时间: %s", zone.CreatedOn)
|
||||
|
||||
utils.BeautifulPrint(zone)
|
||||
}
|
||||
|
||||
// TestListDNSRecords 测试获取DNS记录列表
|
||||
func TestListDNSRecords(t *testing.T) {
|
||||
client := setupTest(t)
|
||||
|
||||
// 列出所有域名
|
||||
zones, err := client.ListZones(nil)
|
||||
if err != nil {
|
||||
t.Fatalf("获取域名列表失败: %v", err)
|
||||
}
|
||||
|
||||
// 如果没有域名,则跳过测试
|
||||
if len(zones) == 0 {
|
||||
t.Skip("没有找到域名,跳过测试")
|
||||
}
|
||||
|
||||
// 使用第一个域名进行测试
|
||||
zoneID := zones[0].ID
|
||||
zoneName := zones[0].Name
|
||||
|
||||
// 列出域名下的所有DNS记录
|
||||
records, err := client.ListDNSRecords(zoneID, nil)
|
||||
if err != nil {
|
||||
t.Fatalf("获取DNS记录列表失败: %v", err)
|
||||
}
|
||||
|
||||
t.Logf("在域名 %s 中找到 %d 条DNS记录", zoneName, len(records))
|
||||
for i, record := range records {
|
||||
if i < 5 { // 只打印前5条记录,避免输出过多
|
||||
t.Logf(" - 记录 %d: %s (类型: %s, 内容: %s)", i+1, record.Name, record.Type, record.Content)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// TestCreateUpdateDeleteDNSRecord 测试DNS记录的创建、更新和删除
|
||||
func TestCreateUpdateDeleteDNSRecord(t *testing.T) {
|
||||
client := setupTest(t)
|
||||
|
||||
// 列出所有域名
|
||||
zones, err := client.ListZones(nil)
|
||||
if err != nil {
|
||||
t.Fatalf("获取域名列表失败: %v", err)
|
||||
}
|
||||
|
||||
// 如果没有域名,则跳过测试
|
||||
if len(zones) == 0 {
|
||||
t.Skip("没有找到域名,跳过测试")
|
||||
}
|
||||
|
||||
// 使用第一个域名进行测试
|
||||
zoneID := zones[0].ID
|
||||
zoneName := zones[0].Name
|
||||
|
||||
// 创建新的DNS记录
|
||||
testRecordName := fmt.Sprintf("test-api.%s", zoneName)
|
||||
newRecord := DNSRecord{
|
||||
Type: "A",
|
||||
Name: testRecordName,
|
||||
Content: "192.0.2.1", // 示例IP地址
|
||||
TTL: 3600, // 1小时
|
||||
Proxied: false, // 不使用Cloudflare代理
|
||||
Comment: "自动化测试记录",
|
||||
}
|
||||
|
||||
// 检查记录是否已存在
|
||||
existingRecord, err := client.FindDNSRecord(zoneID, newRecord.Name, newRecord.Type)
|
||||
if err != nil {
|
||||
t.Fatalf("检查已存在记录失败: %v", err)
|
||||
}
|
||||
|
||||
var recordID string
|
||||
|
||||
// 测试创建或更新记录
|
||||
if existingRecord != nil {
|
||||
// 记录已存在,更新它
|
||||
t.Logf("记录 %s 已存在,正在更新", newRecord.Name)
|
||||
updatedRecord, err := client.UpdateDNSRecord(zoneID, existingRecord.ID, newRecord)
|
||||
if err != nil {
|
||||
t.Fatalf("更新DNS记录失败: %v", err)
|
||||
}
|
||||
t.Logf("成功更新DNS记录: %s", updatedRecord.Name)
|
||||
recordID = updatedRecord.ID
|
||||
} else {
|
||||
// 创建新记录
|
||||
createdRecord, err := client.CreateDNSRecord(zoneID, newRecord)
|
||||
if err != nil {
|
||||
t.Fatalf("创建DNS记录失败: %v", err)
|
||||
}
|
||||
t.Logf("成功创建DNS记录: %s", createdRecord.Name)
|
||||
recordID = createdRecord.ID
|
||||
}
|
||||
|
||||
// 测试获取特定DNS记录详情
|
||||
record, err := client.GetDNSRecord(zoneID, recordID)
|
||||
if err != nil {
|
||||
t.Fatalf("获取DNS记录详情失败: %v", err)
|
||||
}
|
||||
|
||||
t.Logf("DNS记录详情:")
|
||||
t.Logf(" - ID: %s", record.ID)
|
||||
t.Logf(" - 名称: %s", record.Name)
|
||||
t.Logf(" - 类型: %s", record.Type)
|
||||
t.Logf(" - 内容: %s", record.Content)
|
||||
t.Logf(" - TTL: %d", record.TTL)
|
||||
t.Logf(" - 已代理: %t", record.Proxied)
|
||||
|
||||
// 测试删除DNS记录
|
||||
success, err := client.DeleteDNSRecord(zoneID, recordID)
|
||||
if err != nil {
|
||||
t.Fatalf("删除DNS记录失败: %v", err)
|
||||
}
|
||||
|
||||
if success {
|
||||
t.Logf("成功删除DNS记录: %s", record.Name)
|
||||
} else {
|
||||
t.Errorf("删除DNS记录失败: %s", record.Name)
|
||||
}
|
||||
}
|
||||
|
||||
// TestGetZoneIDByName 测试通过域名获取域名ID
|
||||
func TestGetZoneIDByName(t *testing.T) {
|
||||
client := setupTest(t)
|
||||
|
||||
// 列出所有域名
|
||||
zones, err := client.ListZones(nil)
|
||||
if err != nil {
|
||||
t.Fatalf("获取域名列表失败: %v", err)
|
||||
}
|
||||
|
||||
// 如果没有域名,则跳过测试
|
||||
if len(zones) == 0 {
|
||||
t.Skip("没有找到域名,跳过测试")
|
||||
}
|
||||
|
||||
// 使用第一个域名进行测试
|
||||
zoneName := zones[0].Name
|
||||
expectedID := zones[0].ID
|
||||
|
||||
// 测试辅助函数
|
||||
id, err := getZoneIDByName(client, zoneName)
|
||||
if err != nil {
|
||||
t.Fatalf("通过名称获取域名ID失败: %v", err)
|
||||
}
|
||||
|
||||
if id != expectedID {
|
||||
t.Errorf("获取的域名ID不匹配: 期望 %s, 实际 %s", expectedID, id)
|
||||
} else {
|
||||
t.Logf("成功通过名称获取域名ID: %s", id)
|
||||
}
|
||||
}
|
||||
|
||||
// TestCreateOrUpdateDNSRecord 测试创建或更新DNS记录辅助函数
|
||||
func TestCreateOrUpdateDNSRecord(t *testing.T) {
|
||||
client := setupTest(t)
|
||||
|
||||
// 列出所有域名
|
||||
zones, err := client.ListZones(nil)
|
||||
if err != nil {
|
||||
t.Fatalf("获取域名列表失败: %v", err)
|
||||
}
|
||||
|
||||
// 如果没有域名,则跳过测试
|
||||
if len(zones) == 0 {
|
||||
t.Skip("没有找到域名,跳过测试")
|
||||
}
|
||||
|
||||
// 使用第一个域名进行测试
|
||||
zoneID := zones[0].ID
|
||||
zoneName := zones[0].Name
|
||||
|
||||
// 创建测试记录
|
||||
testRecordName := fmt.Sprintf("test-helper.%s", zoneName)
|
||||
record := DNSRecord{
|
||||
Type: "A",
|
||||
Name: testRecordName,
|
||||
Content: "192.0.2.2", // 示例IP地址
|
||||
TTL: 1800, // 30分钟
|
||||
Proxied: false,
|
||||
Comment: "测试辅助函数创建的记录",
|
||||
}
|
||||
|
||||
// 测试辅助函数
|
||||
updatedRecord, err := createOrUpdateDNSRecord(client, zoneID, record)
|
||||
if err != nil {
|
||||
t.Fatalf("创建或更新DNS记录失败: %v", err)
|
||||
}
|
||||
|
||||
t.Logf("通过辅助函数成功创建或更新DNS记录: %s", updatedRecord.Name)
|
||||
|
||||
// 清理: 删除测试记录
|
||||
if updatedRecord != nil && updatedRecord.ID != "" {
|
||||
success, err := client.DeleteDNSRecord(zoneID, updatedRecord.ID)
|
||||
if err != nil {
|
||||
t.Logf("清理时删除DNS记录失败: %v", err)
|
||||
}
|
||||
|
||||
if success {
|
||||
t.Logf("清理: 成功删除测试DNS记录")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 以下是从Example.go转移过来的辅助函数,为了在测试中使用
|
||||
|
||||
// getZoneIDByName 通过域名获取对应的Zone ID
|
||||
func getZoneIDByName(client *CloudflareClient, name string) (string, error) {
|
||||
zones, err := client.ListZones(&ZoneFilter{Name: name})
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
|
||||
if len(zones) == 0 {
|
||||
return "", fmt.Errorf("no zone found with name: %s", name)
|
||||
}
|
||||
|
||||
return zones[0].ID, nil
|
||||
}
|
||||
|
||||
// createOrUpdateDNSRecord 创建或更新DNS记录
|
||||
func createOrUpdateDNSRecord(client *CloudflareClient, zoneID string, record DNSRecord) (*DNSRecord, error) {
|
||||
// 查找是否已存在相同名称和类型的记录
|
||||
existingRecord, err := client.FindDNSRecord(zoneID, record.Name, record.Type)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
if existingRecord != nil {
|
||||
// 更新现有记录
|
||||
return client.UpdateDNSRecord(zoneID, existingRecord.ID, record)
|
||||
}
|
||||
|
||||
// 创建新记录
|
||||
return client.CreateDNSRecord(zoneID, record)
|
||||
}
|
||||
Reference in New Issue
Block a user