tahoe-lafs/integration/test_web.py

156 lines
3.7 KiB
Python
Raw Normal View History

2019-07-24 07:33:15 +00:00
import sys
import time
import shutil
2019-07-30 21:01:06 +00:00
import json
2019-08-07 23:19:38 +00:00
import urllib2
2019-07-24 07:33:15 +00:00
from os import mkdir, unlink, utime
from os.path import join, exists, getmtime
import util
2019-08-07 00:32:50 +00:00
import requests
2019-07-24 07:33:15 +00:00
import pytest_twisted
def test_index(alice):
"""
we can download the index file
"""
util.web_get(alice.node_dir, "")
2019-07-24 07:33:15 +00:00
# ...and json mode is valid json
json.loads(util.web_get(alice.node_dir, "?t=json"))
2019-07-24 07:33:15 +00:00
def test_upload_download(alice):
"""
upload a file, then download it via readcap
"""
FILE_CONTENTS = "some contents"
readcap = util.web_post(
alice.node_dir,
2019-07-24 07:33:15 +00:00
"uri",
data={
"t": "upload",
"format": "mdmf",
},
files={
"file": FILE_CONTENTS,
},
)
readcap = readcap.strip()
print("readcap '{}'".format(readcap))
data = util.web_get(
alice.node_dir, "uri",
2019-07-24 07:33:15 +00:00
params={
"uri": readcap,
"filename": "boom",
}
)
assert data == FILE_CONTENTS
def test_put(alice):
"""
use PUT to create a file
"""
FILE_CONTENTS = "added via PUT"
resp = requests.put(
util.node_url(alice.node_dir, "uri"),
files={
"file": FILE_CONTENTS,
},
)
assert resp.text.strip().startswith("URI:CHK:")
assert resp.text.strip().endswith(":2:4:153")
def test_helper_status(storage_nodes):
"""
successfully GET the /helper_status page
"""
url = util.node_url(storage_nodes[0].node_dir, "helper_status")
resp = requests.get(url)
2019-08-07 00:32:50 +00:00
assert resp.status_code >= 200 and resp.status_code < 300
2019-08-07 23:19:38 +00:00
2019-08-07 23:53:37 +00:00
def test_deep_stats(alice):
2019-08-07 23:19:38 +00:00
"""
create a directory, do deep-stats on it and prove the /operations/
URIs work
"""
resp = requests.post(
util.node_url(alice.node_dir, "uri"),
2019-08-07 23:19:38 +00:00
params={
"format": "sdmf",
"t": "mkdir",
"redirect_to_result": "true",
},
)
assert resp.status_code >= 200 and resp.status_code < 300
# when creating a directory, we'll be re-directed to a URL
# containing our writecap.. (XXX doesn't this violate the "URLs
# leak" maxim?)
uri = urllib2.unquote(resp.url)
assert 'URI:DIR2:' in uri
dircap = uri[uri.find("URI:DIR2:"):].rstrip('/')
dircap_uri = util.node_url(alice.node_dir, "uri/{}".format(urllib2.quote(dircap)))
2019-08-07 23:19:38 +00:00
# POST a file into this directory
FILE_CONTENTS = "a file in a directory"
resp = requests.post(
dircap_uri,
data={
"t": "upload",
"when_done": ".",
},
files={
"file": FILE_CONTENTS,
},
)
# confirm the file is in the directory
resp = requests.get(
dircap_uri,
params={
"t": "json",
},
)
d = json.loads(resp.content)
k, data = d
assert k == "dirnode"
assert len(data['children']) == 1
k, child = data['children'].values()[0]
assert k == "filenode"
assert child['size'] == len(FILE_CONTENTS)
# perform deep-stats on it...
resp = requests.post(
dircap_uri,
data={
"t": "start-deep-stats",
"ophandle": "something_random",
},
)
assert resp.status_code >= 200 and resp.status_code < 300
2019-08-07 23:25:07 +00:00
# confirm we get information from the op .. after its done
while True:
resp = requests.get(
util.node_url(alice.node_dir, "operations/something_random"),
2019-08-07 23:25:07 +00:00
)
d = json.loads(resp.content)
if d['size-literal-files'] == len(FILE_CONTENTS):
print("stats completed successfully")
break
else:
print("{} != {}; waiting".format(d['size-literal-files'], len(FILE_CONTENTS)))
time.sleep(.5)