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

Commit 7e88785

Browse files
committed
testing pdf uploading and downloading
1 parent 6ba9ced commit 7e88785

2 files changed

Lines changed: 147 additions & 0 deletions

File tree

13 KB
Binary file not shown.
Lines changed: 147 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,147 @@
1+
""" loa_documents tests """
2+
3+
import os
4+
import sys
5+
import time
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/addressing/prefixes
13+
# test /accounts/:id/addressing/loa_documents
14+
# test /accounts/:id/addressing/loa_documents/:id/download
15+
16+
cf = None
17+
18+
def test_cloudflare(debug=False):
19+
global cf
20+
cf = CloudFlare.CloudFlare(debug=debug)
21+
assert isinstance(cf, CloudFlare.CloudFlare)
22+
23+
account_name = None
24+
account_id = None
25+
26+
def test_find_account(find_name=None):
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+
exit(0)
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+
def test_addressing_prefixs():
48+
prefixes = cf.accounts.addressing.prefixes(account_id)
49+
assert isinstance(prefixes, list)
50+
for p in prefixes:
51+
assert 'id' in p
52+
assert 'cidr' in p
53+
assert 'asn' in p
54+
assert 'advertised' in p
55+
assert 'approved' in p
56+
print('%s: cidr=%s asn=%s advertised=%s approved=%s' % (p['id'], p['cidr'], p['asn'], p['advertised'], p['approved']), file=sys.stderr)
57+
58+
def test_addressing_loa_documents():
59+
loa_documents = cf.accounts.addressing.loa_documents(account_id)
60+
assert isinstance(loa_documents, list)
61+
for loa_document in loa_documents:
62+
assert isinstance(loa_document, dict)
63+
assert 'id' in loa_document
64+
assert 'filename' in loa_document
65+
assert 'verified' in loa_document
66+
assert 'size_bytes' in loa_document
67+
print('%s: filename=%s size_bytes=%d verified=%s' % (loa_document['id'], loa_document['filename'], loa_document['size_bytes'], loa_document['verified']), file=sys.stderr)
68+
69+
def test_addressing_loa_documents_upload(filename=None):
70+
if not filename:
71+
filename = 'CloudFlare/tests/dummy_loa_document.pdf'
72+
try:
73+
pdf_file = open(filename, 'rb')
74+
except (FileNotFoundError, IsADirectoryError, PermissionError) as e:
75+
print('%s: %s' % (filename, e), file=sys.stderr)
76+
assert False
77+
78+
size_bytes = os.fstat(pdf_file.fileno()).st_size
79+
print('filename=%s size_bytes=%d' % (filename, size_bytes), file=sys.stderr)
80+
81+
files = {'loa_document': pdf_file}
82+
try:
83+
loa_document = cf.accounts.addressing.loa_documents.post(account_id, files=files)
84+
except CloudFlare.exceptions.CloudFlareAPIError as e:
85+
print('%s: Error %d=%s' % (filename, int(e), str(e)), file=sys.stderr)
86+
assert False
87+
assert isinstance(loa_document, dict)
88+
assert 'id' in loa_document
89+
assert 'filename' in loa_document
90+
assert 'verified' in loa_document
91+
assert 'size_bytes' in loa_document
92+
print('%s: filename=%s size_bytes=%d verified=%s' % (loa_document['id'], loa_document['filename'], loa_document['size_bytes'], loa_document['verified']), file=sys.stderr)
93+
assert size_bytes == loa_document['size_bytes']
94+
95+
def ispdf(s):
96+
idx = 0
97+
while s[idx] in [b'\r', b'\n']:
98+
idx += 1
99+
# maybe ... \xef\xbb\xbf%PDF- ... which is U+FEFF - the byte order mark, or BOM
100+
if s[idx:idx+3] == b'\xef\xbb\xbf':
101+
idx += 3
102+
# Simple %PDF- starter
103+
if s[idx:idx+5] == b'%PDF-':
104+
return True
105+
# check further down the file - which seems messy and in-fact is!
106+
# https://stackoverflow.com/questions/77753113/pdf-not-at-start-of-file-but-why
107+
if b'%PDF-' in s[0:1024]:
108+
return True
109+
# give up!
110+
return False
111+
112+
def test_addressing_loa_documents_download():
113+
loa_documents = cf.accounts.addressing.loa_documents(account_id)
114+
assert isinstance(loa_documents, list)
115+
for loa_document in loa_documents:
116+
assert isinstance(loa_document, dict)
117+
assert 'id' in loa_document
118+
assert 'filename' in loa_document
119+
assert 'verified' in loa_document
120+
assert 'size_bytes' in loa_document
121+
assert isinstance(loa_document['size_bytes'], int)
122+
print('%s: filename=%s size_bytes=%d verified=%s' % (loa_document['id'], loa_document['filename'], loa_document['size_bytes'], loa_document['verified']), file=sys.stderr)
123+
loa_document_identifier = loa_document['id']
124+
size_bytes = loa_document['size_bytes']
125+
pdf_content = cf.accounts.addressing.loa_documents.download(account_id, loa_document_identifier)
126+
assert size_bytes == len(pdf_content)
127+
print('%s: %s' % (loa_document_identifier, pdf_content[0:10]))
128+
assert ispdf(pdf_content)
129+
130+
def create_pdf_file():
131+
with tempfile.NamedTemporaryFile() as fp:
132+
fp.write(pdf_file_content)
133+
return fp.name
134+
135+
if __name__ == '__main__':
136+
test_cloudflare(debug=True)
137+
if len(sys.argv) > 1:
138+
test_find_account(sys.argv[1])
139+
else:
140+
test_find_account()
141+
test_addressing_prefixs()
142+
test_addressing_loa_documents()
143+
if len(sys.argv) > 2:
144+
test_addressing_loa_documents_upload(sys.argv[2])
145+
else:
146+
test_addressing_loa_documents_upload()
147+
test_addressing_loa_documents_download()

0 commit comments

Comments
 (0)