33import os
44import sys
55import uuid
6+ import time
7+ import random
68import tempfile
79
810fp = open ('/dev/null' , 'rb' )
1416# test IMPORT EXPORT
1517
1618cf = None
17- zone_name = None
18- zone_id = None
1919
2020def test_cloudflare ():
2121 global cf
2222 cf = CloudFlare .CloudFlare ()
2323 assert isinstance (cf , CloudFlare .CloudFlare )
2424
25+ zone_name = None
26+ zone_id = None
27+
2528def test_find_zone ():
2629 global zone_name , zone_id
27- # grab the first zone identifier
28- params = {'per_page' :1 }
30+ # grab a random zone identifier from the first 10 zones
31+ params = {'per_page' :10 }
2932 zones = cf .zones .get (params = params )
30- assert len (zones ) == 1
31- zone_name = zones [0 ]['name' ]
32- zone_id = zones [0 ]['id' ]
33+ assert len (zones ) > 0 and len (zones ) <= 10
34+ n = random .randrange (len (zones ))
35+ zone_name = zones [n ]['name' ]
36+ zone_id = zones [n ]['id' ]
3337 assert len (zone_id ) == 32
34- print ('zone: %s %s' % (zone_id , zone_name ))
38+ print ('zone: %s %s' % (zone_id , zone_name ), file = sys . stderr )
3539
3640def test_dns_import ():
3741 # IMPORT
3842 # create a zero length file
3943 fp = tempfile .TemporaryFile (mode = 'w+b' )
4044 fp .seek (0 )
41- results = cf .zones .dns_records .import_ .post (zone_id , files = {'file' :fp })
45+ while True :
46+ try :
47+ results = cf .zones .dns_records .import_ .post (zone_id , files = {'file' :fp })
48+ break
49+ except CloudFlare .exceptions .CloudFlareAPIError as e :
50+ print ('cf.zones.dns_records.import: returned %d "%s"' % (int (e ), str (e ))) # 429 or 99998
51+ time .sleep (.5 ) # This is sadly needed as import seems to be rate limited
52+ fp .seek (0 )
4253 # {"recs_added": 0, "recs_added_by_type": {}, "total_records_parsed": 0}
4354 assert len (results ) > 0
4455 assert results ['recs_added' ] == 0
@@ -64,7 +75,14 @@ def test_dns_import_with_debug():
6475 # create a zero length file
6576 fp = tempfile .TemporaryFile (mode = 'w+b' )
6677 fp .seek (0 )
67- results = cf .zones .dns_records .import_ .post (zone_id , files = {'file' :fp })
78+ while True :
79+ try :
80+ results = cf .zones .dns_records .import_ .post (zone_id , files = {'file' :fp })
81+ break
82+ except CloudFlare .exceptions .CloudFlareAPIError as e :
83+ print ('cf.zones.dns_records.import: returned %d "%s"' % (int (e ), str (e ))) # 429 or 99998
84+ time .sleep (.5 ) # This is sadly needed as import seems to be rate limited
85+ fp .seek (0 )
6886 # {"recs_added": 0, "recs_added_by_type": {}, "total_records_parsed": 0}
6987 assert len (results ) > 0
7088 assert results ['recs_added' ] == 0
@@ -78,3 +96,12 @@ def test_dns_export_with_debug():
7896 assert isinstance (dns_records , str )
7997 assert 'SOA' in dns_records
8098 assert 'NS' in dns_records
99+
100+ if __name__ == '__main__' :
101+ test_cloudflare ()
102+ test_find_zone ()
103+ test_dns_import ()
104+ test_dns_export ()
105+ test_cloudflare_with_debug ()
106+ test_dns_import_with_debug ()
107+ test_dns_export_with_debug ()
0 commit comments