1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212
|
""" get/post/delete/etc zone ruleset based tests """
import os
import sys
import uuid
import random
sys.path.insert(0, os.path.abspath('.'))
sys.path.insert(0, os.path.abspath('..'))
import CloudFlare
# test GET POST PUT PATCH & DELETE - but not in that order
cf = None
def test_cloudflare(debug=False):
""" test_cloudflare """
global cf
cf = CloudFlare.CloudFlare(debug=debug)
assert isinstance(cf, CloudFlare.CloudFlare)
zone_name = None
zone_id = None
def test_find_zone(domain_name=None):
""" test_find_zone """
global zone_name, zone_id
# grab a random zone identifier from the first 10 zones
if domain_name:
params = {'per_page':1, 'name':domain_name}
else:
params = {'per_page':10}
try:
zones = cf.zones.get(params=params)
except CloudFlare.exceptions.CloudFlareAPIError as e:
print('%s: Error %d=%s' % (domain_name, int(e), str(e)), file=sys.stderr)
assert False
assert len(zones) > 0 and len(zones) <= 10
n = random.randrange(len(zones))
zone_name = zones[n]['name']
zone_id = zones[n]['id']
assert len(zone_id) == 32
print('zone: %s %s' % (zone_id, zone_name), file=sys.stderr)
ruleset_name = None
ruleset_ref = None
ruleset_content = None
def test_ruleset_create_values():
""" test_accounts_ruleset_create_values """
global ruleset_name, ruleset_ref, ruleset_content
ruleset_name = str(uuid.uuid1())
ruleset_ref = str(uuid.uuid1())
ruleset_content = """
{
"description": "Testing 1 2 3 ...",
"kind": "zone",
"name": "%s",
"phase": "http_request_firewall_custom",
"rules": [
{
"action": "block",
"description": "Block when the IP address is not 1.1.1.1",
"enabled": false,
"expression": "ip.src ne 1.1.1.1",
"ref": "%s"
}
]
}
""" % (ruleset_name, ruleset_ref)
ruleset_content = ''.join([s.strip() for s in ruleset_content.splitlines()]).strip()
print('ruleset: name=%s content=%s' % (ruleset_name, ruleset_content), file=sys.stderr)
assert True
ruleset_id = None
def test_zones_rulesets_get():
""" test_zones_rulesets_get """
# GET
ruleset_results = cf.zones.rulesets.get(zone_id)
assert isinstance(ruleset_results, list)
for ruleset in ruleset_results:
assert isinstance(ruleset, dict)
assert 'id' in ruleset
assert 'kind' in ruleset
assert 'phase' in ruleset
assert 'name' in ruleset
print('ruleset: %s: name=%s kind=%s phase=%s' % (ruleset['id'], ruleset['name'], ruleset['kind'], ruleset['phase']), file=sys.stderr)
assert True
def test_zones_ruleset_post():
""" test_zones_rulesets_post """
global ruleset_id
# POST
ruleset = cf.zones.rulesets.post(zone_id, data=ruleset_content)
assert isinstance(ruleset, dict)
assert 'id' in ruleset
assert 'kind' in ruleset
assert 'phase' in ruleset
assert 'name' in ruleset
assert 'rules' in ruleset
assert 'ref' in ruleset['rules'][0]
assert ruleset['name'] == ruleset_name
assert ruleset['rules'][0]['ref'] == ruleset_ref
ruleset_id = ruleset['id']
print('ruleset: %s: name=%s kind=%s phase=%s' % (ruleset['id'], ruleset['name'], ruleset['kind'], ruleset['phase']), file=sys.stderr)
def test_zones_rulesets_get_specific():
""" test_zones_rulesets_get_specific """
# GET
ruleset = cf.zones.rulesets.get(zone_id, ruleset_id)
assert isinstance(ruleset, dict)
assert 'id' in ruleset
assert 'kind' in ruleset
assert 'phase' in ruleset
assert 'name' in ruleset
assert 'rules' in ruleset
assert ruleset['id'] == ruleset_id
print('ruleset: %s: name=%s kind=%s phase=%s' % (ruleset['id'], ruleset['name'], ruleset['kind'], ruleset['phase']), file=sys.stderr)
def test_zones_ruleset_delete():
""" test_zones_rulesets_delete """
# DELETE
ruleset_response = cf.zones.rulesets.delete(zone_id, ruleset_id)
# None is returned - not quite the same response as other delete's in the API
assert ruleset_response is None
account_name = None
account_id = None
def test_find_account(find_name=None):
""" test_find_account """
global account_name, account_id
# grab a random account identifier from the first 10 accounts
if find_name:
params = {'per_page':1, 'name':find_name}
else:
params = {'per_page':10}
try:
accounts = cf.accounts.get(params=params)
except CloudFlare.exceptions.CloudFlareAPIError as e:
print('%s: Error %d=%s' % (find_name, int(e), str(e)), file=sys.stderr)
assert False
assert len(accounts) > 0 and len(accounts) <= 10
# n = random.randrange(len(accounts))
# stop using a random account - use the primary account (i.e. the zero'th one)
n = 0
account_name = accounts[n]['name']
account_id = accounts[n]['id']
assert len(account_id) == 32
print('account: %s %s' % (account_id, account_name), file=sys.stderr)
ruleset_id = None
ruleset_version = None
def test_accounts_ruleset():
""" test_accounts_ruleset """
global ruleset_id, ruleset_version
ruleset_results = results = cf.accounts.rulesets(account_id)
assert isinstance(ruleset_results, list)
for ruleset in ruleset_results:
assert isinstance(ruleset, dict)
assert 'id' in ruleset
assert 'version' in ruleset
ruleset_id = ruleset['id']
ruleset_version = ruleset['version']
# we only need one!
break
print('account ruleset: %s %s' % (ruleset_id, ruleset_name), file=sys.stderr)
def test_accounts_rulesets_versions():
""" test_accounts_ruleset_versions """
ruleset = cf.accounts.rulesets.versions(account_id, ruleset_id, ruleset_version)
assert isinstance(ruleset, dict)
assert 'id' in ruleset
assert 'version' in ruleset
assert ruleset['id'] == ruleset_id
assert ruleset['version'] == ruleset_version
def test_accounts_rulesets_versions_by_tag():
""" test_accounts_rulesets_versions_by_tag """
# List an account ruleset version's rules by tag
# /accounts/{account_id}/rulesets/{ruleset_id}/versions/{ruleset_version}/by_tag/{rule_tag}
# four id's passed on call!
rule_tag = 'QWERTYUIOP'
try:
results = cf.accounts.rulesets.versions.by_tag(account_id, ruleset_id, ruleset_version, rule_tag)
print('results=', results, file=sys.stderr)
assert False
except CloudFlare.exceptions.CloudFlareAPIError as e:
print('Error expected: %d %s' % (int(e), str(e)), file=sys.stderr)
assert True
if __name__ == '__main__':
test_cloudflare(debug=True)
if len(sys.argv) > 1:
test_find_zone(sys.argv[1])
else:
test_find_zone()
test_ruleset_create_values()
test_zones_rulesets_get()
test_zones_ruleset_post()
test_zones_rulesets_get_specific()
test_zones_ruleset_delete()
if len(sys.argv) > 2:
test_find_account(sys.argv[2])
else:
test_find_account()
test_accounts_ruleset()
test_accounts_rulesets_versions()
test_accounts_rulesets_versions_by_tag()
|