Skip to content
This repository was archived by the owner on Nov 22, 2024. It is now read-only.

Commit ea9e609

Browse files
committed
testing load balancers becuase they return 412 HTTP errors
1 parent e09b075 commit ea9e609

File tree

1 file changed

+274
-0
lines changed

1 file changed

+274
-0
lines changed
Lines changed: 274 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,274 @@
1+
""" workers tests """
2+
3+
import os
4+
import sys
5+
import uuid
6+
import random
7+
8+
sys.path.insert(0, os.path.abspath('.'))
9+
sys.path.insert(0, os.path.abspath('..'))
10+
import CloudFlare
11+
12+
# test /accounts/:id/workers/scripts
13+
14+
cf = None
15+
16+
def test_cloudflare(debug=False):
17+
""" test_cloudflare """
18+
global cf
19+
cf = CloudFlare.CloudFlare(debug=debug)
20+
assert isinstance(cf, CloudFlare.CloudFlare)
21+
22+
account_name = None
23+
account_id = None
24+
25+
def test_find_account(find_name=None):
26+
""" test_find_account """
27+
global account_name, account_id
28+
# grab a random account identifier from the first 10 accounts
29+
if find_name:
30+
params = {'per_page':1, 'name':find_name}
31+
else:
32+
params = {'per_page':10}
33+
try:
34+
accounts = cf.accounts.get(params=params)
35+
except CloudFlare.exceptions.CloudFlareAPIError as e:
36+
print('%s: Error %d=%s' % (find_name, int(e), str(e)), file=sys.stderr)
37+
assert False
38+
assert len(accounts) > 0 and len(accounts) <= 10
39+
# n = random.randrange(len(accounts))
40+
# stop using a random account - use the primary account (i.e. the zero'th one)
41+
n = 0
42+
account_name = accounts[n]['name']
43+
account_id = accounts[n]['id']
44+
assert len(account_id) == 32
45+
print('account: %s %s' % (account_id, account_name), file=sys.stderr)
46+
47+
zone_name = None
48+
zone_id = None
49+
50+
def test_find_zone(domain_name=None):
51+
""" test_find_zone """
52+
global zone_name, zone_id
53+
# grab a random zone identifier from the first 10 zones
54+
if domain_name:
55+
params = {'per_page':1, 'name':domain_name}
56+
else:
57+
params = {'per_page':10}
58+
try:
59+
zones = cf.zones.get(params=params)
60+
except CloudFlare.exceptions.CloudFlareAPIError as e:
61+
print('%s: Error %d=%s' % (domain_name, int(e), str(e)), file=sys.stderr)
62+
assert False
63+
assert len(zones) > 0 and len(zones) <= 10
64+
n = random.randrange(len(zones))
65+
zone_name = zones[n]['name']
66+
zone_id = zones[n]['id']
67+
assert len(zone_id) == 32
68+
print('zone: %s %s' % (zone_id, zone_name), file=sys.stderr)
69+
70+
def test_load_balancers_list_regions():
71+
""" test_load_balancers_list_regions """
72+
regions = cf.accounts.load_balancers.regions(account_id)
73+
assert isinstance(regions, dict)
74+
assert 'regions' in regions
75+
assert 'iso_standard' in regions
76+
assert isinstance(regions['regions'], list)
77+
assert isinstance(regions['iso_standard'], str)
78+
for region in regions['regions']:
79+
assert 'countries' in region
80+
assert 'region_code' in region
81+
assert isinstance(region['countries'], list)
82+
assert isinstance(region['region_code'], str)
83+
countries = ','.join([v['country_code_a2'] for v in region['countries']])
84+
print('/accounts/load_balancers/regions: %s: %s' % (region['region_code'], countries), file=sys.stderr)
85+
86+
def test_load_balancers_get_regions():
87+
""" test_load_balancers_get_regions """
88+
regions = cf.accounts.load_balancers.regions(account_id, 'WNAM')
89+
assert isinstance(regions, dict)
90+
assert 'regions' in regions
91+
assert 'iso_standard' in regions
92+
assert isinstance(regions['regions'], list)
93+
assert isinstance(regions['iso_standard'], str)
94+
for region in regions['regions']:
95+
assert 'countries' in region
96+
assert 'region_code' in region
97+
assert isinstance(region['countries'], list)
98+
assert isinstance(region['region_code'], str)
99+
countries = ','.join([v['country_code_a2'] for v in region['countries']])
100+
print('/accounts/load_balancers/regions: %s: %s' % (region['region_code'], countries), file=sys.stderr)
101+
102+
def test_load_balancers_search():
103+
""" test_load_balancers_search """
104+
r = cf.accounts.load_balancers.search(account_id)
105+
assert isinstance(r, dict)
106+
assert 'resources' in r
107+
assert isinstance(r['resources'], list)
108+
if len(r['resources']) == 0:
109+
print('/account/load_balancers/search: returns zero results', file=sys.stderr)
110+
return
111+
for resource in r['resources']:
112+
assert 'reference_type' in r
113+
assert isinstance(r['reference_type'], str)
114+
assert 'resource_id' in r
115+
assert isinstance(r['resource_id'], str)
116+
assert 'resource_name' in r
117+
assert isinstance(r['resource_name'], str)
118+
assert 'resource_type' in r
119+
assert isinstance(r['resource_type'], str)
120+
print('/account/load_balancers/search: %s: %s' % (r['resource_id'], r['resource_name']), file=sys.stderr)
121+
122+
def test_load_balancers_pools():
123+
""" test_load_balancers_pools """
124+
pools = cf.accounts.load_balancers.pools(account_id)
125+
assert isinstance(pools, list)
126+
for pool in pools:
127+
assert isinstance(pool, dict)
128+
assert 'id' in pool
129+
print('/accounts/load_balancers/pools: %s: %s length=%d' % (pool['id'], pool['name'], len(pool['origins'])), file=sys.stderr)
130+
131+
pool_id = None
132+
133+
def test_load_balancers_pool_create():
134+
""" test_load_balancers_pool_create """
135+
global pool_id
136+
origin_name = str(uuid.uuid1())
137+
pool_name = str(uuid.uuid1())
138+
origins_data = [
139+
# Yes yes yes - we know these are Google's addresses - but that's ok
140+
{'address':'8.8.8.101', 'name':origin_name + '_1'},
141+
{'address':'8.8.8.102', 'name':origin_name + '_2'},
142+
{'address':'8.8.8.103', 'name':origin_name + '_3'},
143+
]
144+
pool_data = {'description':'testing123', 'name':pool_name, 'origins':origins_data}
145+
try:
146+
pool = cf.accounts.load_balancers.pools.post(account_id, data=pool_data)
147+
except CloudFlare.exceptions.CloudFlareAPIError as e:
148+
# this happens when the account isn't setup for load balancers
149+
pool_id = None
150+
return
151+
assert isinstance(pool, dict)
152+
assert 'id' in pool
153+
print('/accounts/load_balancers/pools: POST: %s: %s length=%d' % (pool['id'], pool['name'], len(pool['origins'])), file=sys.stderr)
154+
pool_id = pool['id']
155+
print('pool_id =', pool_id)
156+
157+
def test_load_balancers_pool_details():
158+
""" test_load_balancers_pool_details """
159+
if pool_id is None:
160+
print('/accounts/load_balancers/pools: skip', file=sys.stderr)
161+
return
162+
pool = cf.accounts.load_balancers.pools(account_id, pool_id)
163+
assert isinstance(pool, dict)
164+
assert 'id' in pool
165+
print('/accounts/load_balancers/pools: %s: %s length=%d' % (pool['id'], pool['name'], len(pool['origins'])), file=sys.stderr)
166+
assert pool_id == pool['id']
167+
168+
load_balancer_id = None
169+
170+
def test_load_balancers_create():
171+
""" test_load_balancers_create """
172+
global load_balancer_id
173+
if pool_id is None:
174+
print('/zones/load_balancers: POST: skip', file=sys.stderr)
175+
load_balancer_id = None
176+
return
177+
dns_name = str(uuid.uuid1())
178+
balancer_data = {
179+
'default_pools': [ pool_id ],
180+
'fallback_pool': pool_id,
181+
'name': dns_name + '.' + zone_name,
182+
'description': dns_name,
183+
}
184+
try:
185+
load_balancer = cf.zones.load_balancers.post(zone_id, data=balancer_data)
186+
except CloudFlare.exceptions.CloudFlareAPIError as e:
187+
# this happens when the zone isn't setup for load balancers
188+
print('/zones/load_balancers: POST: skip', file=sys.stderr)
189+
load_balancer_id = None
190+
return
191+
assert isinstance(load_balancer, dict)
192+
assert 'default_pools' in load_balancer
193+
assert 'fallback_pool' in load_balancer
194+
assert 'id' in load_balancer
195+
load_balancer_id = load_balancer['id']
196+
print('/zones/load_balancers: POST: %s %s' % (load_balancer['id'], load_balancer['name']), file=sys.stderr)
197+
198+
def test_load_balancers_pool_health():
199+
""" test_load_balancers_pool_health """
200+
if pool_id is None:
201+
print('/accounts/load_balancers/pools/health: skip', file=sys.stderr)
202+
return
203+
try:
204+
health = cf.accounts.load_balancers.pools.health(account_id, pool_id)
205+
except CloudFlare.exceptions.CloudFlareAPIError as e:
206+
# the new loadbalancer will not be ready - which is ok
207+
print('/accounts/load_balancers/pools/health: Error expected: %d %s' % (int(e), str(e)), file=sys.stderr)
208+
return
209+
assert isinstance(health, dict)
210+
assert 'pool_id' in health
211+
assert isinstance(health['pool_id'], str)
212+
assert isinstance(health['pop_health'], dict)
213+
print('/accounts/load_balancers/pools/health: %s: length=%d' % (health['pool_id'], len(health['pop_health'])), file=sys.stderr)
214+
assert pool_id == health['pool_id']
215+
216+
def test_load_balancers_pool_delete_should_fail():
217+
""" test_load_balancers_pool_delete_should_fail """
218+
if pool_id is None:
219+
print('/accounts/load_balancers/pools: DELETE: skip', file=sys.stderr)
220+
return
221+
try:
222+
pool = cf.accounts.load_balancers.pools.delete(account_id, pool_id)
223+
except CloudFlare.exceptions.CloudFlareAPIError as e:
224+
# the new loadbalancer can not be deleted as it's in use with a zone
225+
print('/accounts/load_balancers/pools: DELETE: Error expected: %d %s' % (int(e), str(e)), file=sys.stderr)
226+
return
227+
assert 'id' in pool
228+
print('/accounts/load_balancers/pools: DELETE: %s: deleted' % (pool['id']), file=sys.stderr)
229+
assert pool_id == pool['id']
230+
assert False
231+
232+
def test_load_balancers_delete():
233+
""" test_load_balancers_delete """
234+
if load_balancer_id is None:
235+
print('/zones/load_balancers: DELETE: skip', file=sys.stderr)
236+
return
237+
r = cf.zones.load_balancers.delete(zone_id, load_balancer_id)
238+
assert isinstance(r, dict)
239+
assert 'id' in r
240+
print('/zones/load_balancers: DELETE: %s: deleted' % (r['id']), file=sys.stderr)
241+
assert load_balancer_id == r['id']
242+
243+
def test_load_balancers_pool_delete():
244+
""" test_load_balancers_pool_delete """
245+
if pool_id is None:
246+
print('/accounts/load_balancers/pools: DELETE: skip', file=sys.stderr)
247+
return
248+
pool = cf.accounts.load_balancers.pools.delete(account_id, pool_id)
249+
assert isinstance(pool, dict)
250+
assert 'id' in pool
251+
print('/accounts/load_balancers/pools: DELETE: %s: deleted' % (pool['id']), file=sys.stderr)
252+
assert pool_id == pool['id']
253+
254+
if __name__ == '__main__':
255+
test_cloudflare(debug=False)
256+
if len(sys.argv) > 1:
257+
test_find_account(sys.argv[1])
258+
else:
259+
test_find_account()
260+
if len(sys.argv) > 2:
261+
test_find_zone(sys.argv[2])
262+
else:
263+
test_find_zone()
264+
test_load_balancers_list_regions()
265+
test_load_balancers_get_regions()
266+
test_load_balancers_search()
267+
test_load_balancers_pools()
268+
test_load_balancers_pool_create()
269+
test_load_balancers_pool_details()
270+
test_load_balancers_create()
271+
test_load_balancers_pool_health()
272+
test_load_balancers_pool_delete_should_fail()
273+
test_load_balancers_delete()
274+
test_load_balancers_pool_delete()

0 commit comments

Comments
 (0)