From 1af4593e160a7b0f1309ba9c1bfb417802424862 Mon Sep 17 00:00:00 2001 From: meejah Date: Tue, 16 Jul 2019 16:51:44 -0600 Subject: [PATCH] some simple web integration tests --- integration/test_web.py | 51 +++++++++++++++++++++++++++++++++++++++++ integration/util.py | 32 ++++++++++++++++++++++++++ 2 files changed, 83 insertions(+) create mode 100644 integration/test_web.py diff --git a/integration/test_web.py b/integration/test_web.py new file mode 100644 index 000000000..0aa108ec9 --- /dev/null +++ b/integration/test_web.py @@ -0,0 +1,51 @@ +import sys +import time +import shutil +from os import mkdir, unlink, utime +from os.path import join, exists, getmtime + +import util + +import pytest_twisted + + +def test_index(alice): + """ + we can download the index file + """ + util.web_get(alice._node_dir, "") + + +def test_upload_download(alice): + """ + upload a file, then download it via readcap + """ + + # XXX FIXME why? + print("waiting for ready..") + time.sleep(10) + + FILE_CONTENTS = "some contents" + + readcap = util.web_post( + alice._node_dir, + "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", + params={ + "uri": readcap, + "filename": "boom", + } + ) + assert data == FILE_CONTENTS diff --git a/integration/util.py b/integration/util.py index 41327bead..ecd577c55 100644 --- a/integration/util.py +++ b/integration/util.py @@ -9,6 +9,8 @@ from twisted.internet.defer import Deferred, succeed from twisted.internet.protocol import ProcessProtocol from twisted.internet.error import ProcessExitedAlready, ProcessDone +import requests + from allmydata.util.configutil import ( get_config, set_config, @@ -357,5 +359,35 @@ def cli(request, reactor, node_dir, *argv): ) return proto.done + +def web_get(node_dir, uri_fragment, **kw): + """ + Make a web-request to the webport of `node_dir`. This will look + like: `http://localhost:/` + """ + with open(join(node_dir, "node.url"), "r") as f: + base = f.read().strip() + url = base + uri_fragment + resp = requests.get(url, **kw) + return resp.content + + +def web_post(node_dir, uri_fragment, **kw): + """ + Make a web-request to the webport of `node_dir`. This will look + like: `http://localhost:/` + """ + # XXXX same as above except requests.post + with open(join(node_dir, "node.url"), "r") as f: + base = f.read().strip() + url = base + uri_fragment + resp = requests.post(url, **kw) + if resp.status_code < 200 or resp.status_code >= 300: + raise RuntimeError( + "Expected a 200 code, got {}".format(resp.status_code) + ) + return resp.content + + def magic_folder_cli(request, reactor, node_dir, *argv): return cli(request, reactor, node_dir, "magic-folder", *argv)