summaryrefslogtreecommitdiff
path: root/tests/test_cloudflare_api.py
diff options
context:
space:
mode:
authorYuval Adam <_@yuv.al>2025-07-18 15:43:32 +0200
committerYuval Adam <_@yuv.al>2025-07-18 15:43:32 +0200
commitd0c73a92f27a652eaf925d880625a05ae211211d (patch)
tree7a82b603764f56690b7a8e3d0241e1d19934839c /tests/test_cloudflare_api.py
parent350eedaf53068b1822846fceee15c97c644aad8a (diff)
Add tests
Diffstat (limited to 'tests/test_cloudflare_api.py')
-rwxr-xr-xtests/test_cloudflare_api.py106
1 files changed, 106 insertions, 0 deletions
diff --git a/tests/test_cloudflare_api.py b/tests/test_cloudflare_api.py
new file mode 100755
index 0000000..97c19b3
--- /dev/null
+++ b/tests/test_cloudflare_api.py
@@ -0,0 +1,106 @@
+#!/usr/bin/env python3
+
+import sys
+import os
+sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
+
+from config import Config
+from cloudflare_api import CloudflareAPI
+
+def test_cloudflare_api():
+ """Test Cloudflare API integration with non-mutating calls"""
+ print("="*50)
+ print("CLOUDFLARE API INTEGRATION TESTS")
+ print("="*50)
+
+ # Load configuration
+ config = Config.from_env()
+
+ # Check if API credentials are available
+ if not config.cloudflare_api_token or config.cloudflare_api_token == "your_cloudflare_api_token":
+ print("❌ Cloudflare API token not found. Please set CLOUDFLARE_API_TOKEN in .env file.")
+ return False
+
+ print(f"✓ API credentials loaded")
+ print(f" - API Token: {'*' * (len(config.cloudflare_api_token) - 8)}{config.cloudflare_api_token[-8:]}")
+ print(f" - Token length: {len(config.cloudflare_api_token)} chars")
+
+ # Initialize API
+ api = CloudflareAPI(config)
+
+ # Test 1: List existing zones (non-mutating)
+ print(f"\n1. Testing zones listing...")
+ try:
+ zones = api.list_zones()
+ print(f" ✓ Zone listing successful")
+ print(f" - Found {len(zones)} zones in account")
+
+ if zones:
+ print(f" - Example zones:")
+ for i, zone in enumerate(zones[:3]): # Show first 3 zones
+ print(f" • {zone.get('name', 'Unknown')} (ID: {zone.get('id', 'Unknown')[:8]}...)")
+ if i >= 2: # Limit to 3 zones
+ break
+ except Exception as e:
+ print(f" ❌ Zone listing failed: {e}")
+ return False
+
+ # Test 2: Get zone info for an existing zone (if any)
+ if zones:
+ print(f"\n2. Testing zone info retrieval...")
+ try:
+ first_zone = zones[0]
+ zone_name = first_zone.get('name')
+ zone_info = api.get_zone_info(zone_name)
+
+ if zone_info:
+ print(f" ✓ Zone info retrieved successfully")
+ print(f" - Zone: {zone_info.get('name')}")
+ print(f" - Status: {zone_info.get('status')}")
+ print(f" - ID: {zone_info.get('id')[:8]}...")
+
+ # Test 3: Get nameservers for the zone
+ print(f"\n3. Testing nameserver retrieval...")
+ try:
+ nameservers = api.get_zone_nameservers(zone_info['id'])
+ print(f" ✓ Nameservers retrieved successfully")
+ print(f" - Nameservers for {zone_name}:")
+ for ns in nameservers:
+ print(f" • {ns}")
+ except Exception as e:
+ print(f" ❌ Nameserver retrieval failed: {e}")
+ return False
+
+ # Test 4: Get DNS records for the zone (non-mutating)
+ print(f"\n4. Testing DNS records retrieval...")
+ try:
+ dns_records = api.get_zone_dns_records(zone_info['id'])
+ print(f" ✓ DNS records retrieved successfully")
+ print(f" - Found {len(dns_records)} DNS records")
+
+ if dns_records:
+ print(f" - Example records:")
+ for i, record in enumerate(dns_records[:3]): # Show first 3 records
+ print(f" • {record.get('type', 'Unknown')} {record.get('name', 'Unknown')} -> {record.get('content', 'Unknown')}")
+ if i >= 2: # Limit to 3 records
+ break
+ except Exception as e:
+ print(f" ❌ DNS records retrieval failed: {e}")
+ return False
+ else:
+ print(f" ❌ Zone info retrieval failed: No zone info returned")
+ return False
+ except Exception as e:
+ print(f" ❌ Zone info retrieval failed: {e}")
+ return False
+ else:
+ print(f"\n2. Skipping zone-specific tests (no zones found)")
+ print(f"3. Skipping nameserver tests (no zones found)")
+ print(f"4. Skipping DNS records tests (no zones found)")
+
+ print(f"\n✅ All Cloudflare API tests passed!")
+ return True
+
+if __name__ == "__main__":
+ success = test_cloudflare_api()
+ sys.exit(0 if success else 1) \ No newline at end of file