|
| 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