diff options
| author | Yuval Adam <_@yuv.al> | 2025-07-18 15:43:32 +0200 |
|---|---|---|
| committer | Yuval Adam <_@yuv.al> | 2025-07-18 15:43:32 +0200 |
| commit | d0c73a92f27a652eaf925d880625a05ae211211d (patch) | |
| tree | 7a82b603764f56690b7a8e3d0241e1d19934839c /tests/test_cloudflare_api.py | |
| parent | 350eedaf53068b1822846fceee15c97c644aad8a (diff) | |
Add tests
Diffstat (limited to 'tests/test_cloudflare_api.py')
| -rwxr-xr-x | tests/test_cloudflare_api.py | 106 |
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 |
