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

Commit ed08910

Browse files
committed
testing rulesets where response is None to delete
1 parent 26893b2 commit ed08910

1 file changed

Lines changed: 132 additions & 0 deletions

File tree

CloudFlare/tests/test_rulesets.py

Lines changed: 132 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,132 @@
1+
""" get/post/delete/etc zone ruleset based 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 GET POST PUT PATCH & DELETE - but not in that order
13+
14+
cf = None
15+
16+
def test_cloudflare(debug=False):
17+
global cf
18+
cf = CloudFlare.CloudFlare(debug=debug)
19+
assert isinstance(cf, CloudFlare.CloudFlare)
20+
21+
zone_name = None
22+
zone_id = None
23+
24+
def test_find_zone(domain_name=None):
25+
global zone_name, zone_id
26+
# grab a random zone identifier from the first 10 zones
27+
if domain_name:
28+
params = {'per_page':1, 'name':domain_name}
29+
else:
30+
params = {'per_page':10}
31+
try:
32+
zones = cf.zones.get(params=params)
33+
except CloudFlare.exceptions.CloudFlareAPIError as e:
34+
print('%s: Error %d=%s' % (domain_name, int(e), str(e)), file=sys.stderr)
35+
exit(0)
36+
assert len(zones) > 0 and len(zones) <= 10
37+
n = random.randrange(len(zones))
38+
zone_name = zones[n]['name']
39+
zone_id = zones[n]['id']
40+
assert len(zone_id) == 32
41+
print('zone: %s %s' % (zone_id, zone_name), file=sys.stderr)
42+
43+
ruleset_name = None
44+
ruleset_ref = None
45+
ruleset_content = None
46+
47+
def test_ruleset_create_values():
48+
global ruleset_name, ruleset_ref, ruleset_content
49+
ruleset_name = str(uuid.uuid1())
50+
ruleset_ref = str(uuid.uuid1())
51+
ruleset_content = """
52+
{
53+
"description": "Testing 1 2 3 ...",
54+
"kind": "zone",
55+
"name": "%s",
56+
"phase": "http_request_firewall_custom",
57+
"rules": [
58+
{
59+
"action": "block",
60+
"description": "Block when the IP address is not 1.1.1.1",
61+
"enabled": false,
62+
"expression": "ip.src ne 1.1.1.1",
63+
"ref": "%s"
64+
}
65+
]
66+
}
67+
""" % (ruleset_name, ruleset_ref)
68+
ruleset_content = ''.join([s.strip() for s in ruleset_content.splitlines()]).strip()
69+
70+
print('ruleset: name=%s content=%s' % (ruleset_name, ruleset_content), file=sys.stderr)
71+
assert True
72+
73+
ruleset_id = None
74+
75+
def test_rulesets_get():
76+
# GET
77+
ruleset_results = cf.zones.rulesets.get(zone_id)
78+
assert isinstance(ruleset_results, list)
79+
for ruleset in ruleset_results:
80+
assert isinstance(ruleset, dict)
81+
assert 'id' in ruleset
82+
assert 'kind' in ruleset
83+
assert 'phase' in ruleset
84+
assert 'name' in ruleset
85+
print('ruleset: %s: name=%s kind=%s phase=%s' % (ruleset['id'], ruleset['name'], ruleset['kind'], ruleset['phase']), file=sys.stderr)
86+
assert True
87+
88+
def test_ruleset_post():
89+
global ruleset_id
90+
# POST
91+
ruleset = cf.zones.rulesets.post(zone_id, data=ruleset_content)
92+
assert isinstance(ruleset, dict)
93+
assert 'id' in ruleset
94+
assert 'kind' in ruleset
95+
assert 'phase' in ruleset
96+
assert 'name' in ruleset
97+
assert 'rules' in ruleset
98+
assert 'ref' in ruleset['rules'][0]
99+
assert ruleset['name'] == ruleset_name
100+
assert ruleset['rules'][0]['ref'] == ruleset_ref
101+
ruleset_id = ruleset['id']
102+
print('ruleset: %s: name=%s kind=%s phase=%s' % (ruleset['id'], ruleset['name'], ruleset['kind'], ruleset['phase']), file=sys.stderr)
103+
104+
def test_rulesets_get_specific():
105+
# GET
106+
ruleset = cf.zones.rulesets.get(zone_id, ruleset_id)
107+
assert isinstance(ruleset, dict)
108+
assert 'id' in ruleset
109+
assert 'kind' in ruleset
110+
assert 'phase' in ruleset
111+
assert 'name' in ruleset
112+
assert 'rules' in ruleset
113+
assert ruleset['id'] == ruleset_id
114+
print('ruleset: %s: name=%s kind=%s phase=%s' % (ruleset['id'], ruleset['name'], ruleset['kind'], ruleset['phase']), file=sys.stderr)
115+
116+
def test_ruleset_delete():
117+
# DELETE
118+
ruleset_response = cf.zones.rulesets.delete(zone_id, ruleset_id)
119+
# None is returned - not quite the same response as other delete's in the API
120+
assert ruleset_response == None
121+
122+
if __name__ == '__main__':
123+
test_cloudflare(debug=true)
124+
if len(sys.argv) > 1:
125+
test_find_zone(sys.argv[1])
126+
else:
127+
test_find_zone()
128+
test_ruleset_create_values()
129+
test_rulesets_get()
130+
test_ruleset_post()
131+
test_rulesets_get_specific()
132+
test_ruleset_delete()

0 commit comments

Comments
 (0)