diff options
Diffstat (limited to 'subplot/server.py')
-rw-r--r-- | subplot/server.py | 69 |
1 files changed, 53 insertions, 16 deletions
diff --git a/subplot/server.py b/subplot/server.py index 289e181..a604733 100644 --- a/subplot/server.py +++ b/subplot/server.py @@ -5,8 +5,6 @@ import random import re import requests import shutil -import socket -import time import urllib3 import yaml @@ -14,7 +12,7 @@ import yaml urllib3.disable_warnings() -def start_chunk_server(ctx): +def start_chunk_server(ctx, env=None): daemon_start_on_port = globals()["daemon_start_on_port"] srcdir = globals()["srcdir"] @@ -35,7 +33,7 @@ def start_chunk_server(ctx): "address": f"localhost:{port}", } - server_binary = os.path.abspath(os.path.join(srcdir, "target", "debug", "obnam-server")) + server_binary = ctx["server-binary"] filename = "config.yaml" yaml.safe_dump(config, stream=open(filename, "w")) @@ -44,22 +42,18 @@ def start_chunk_server(ctx): ctx["server_url"] = f"https://{config['address']}" daemon_start_on_port( - ctx, - name="obnam-server", - path=server_binary, - args=filename, - port=port, + ctx, name="obnam-server", path=server_binary, args=filename, port=port, env=env ) -def stop_chunk_server(ctx): +def stop_chunk_server(ctx, env=None): logging.debug("Stopping obnam-server") daemon_stop = globals()["daemon_stop"] daemon_stop(ctx, name="obnam-server") def post_file(ctx, filename=None, path=None, header=None, json=None): - url = f"{ctx['server_url']}/chunks" + url = f"{ctx['server_url']}/v1/chunks" headers = {header: json} data = open(filename, "rb").read() _request(ctx, requests.post, url, headers=headers, data=data) @@ -71,12 +65,12 @@ def get_chunk_via_var(ctx, var=None): def get_chunk_by_id(ctx, chunk_id=None): - url = f"{ctx['server_url']}/chunks/{chunk_id}" + url = f"{ctx['server_url']}/v1/chunks/{chunk_id}" _request(ctx, requests.get, url) -def find_chunks_with_sha(ctx, sha=None): - url = f"{ctx['server_url']}/chunks?sha256={sha}" +def find_chunks_with_label(ctx, sha=None): + url = f"{ctx['server_url']}/v1/chunks?label={sha}" _request(ctx, requests.get, url) @@ -86,14 +80,16 @@ def delete_chunk_via_var(ctx, var=None): def delete_chunk_by_id(ctx, chunk_id=None): - url = f"{ctx['server_url']}/chunks/{chunk_id}" + url = f"{ctx['server_url']}/v1/chunks/{chunk_id}" _request(ctx, requests.delete, url) def make_chunk_file_be_empty(ctx, chunk_id=None): chunk_id = ctx["vars"][chunk_id] chunks = ctx["config"]["chunks"] - for (dirname, _, _) in os.walk(chunks): + logging.debug(f"trying to empty chunk {chunk_id}") + for (dirname, _, filenames) in os.walk(chunks): + logging.debug(f"found directory {dirname}, with {filenames}") filename = os.path.join(dirname, chunk_id + ".data") if os.path.exists(filename): logging.debug(f"emptying chunk file {filename}") @@ -138,6 +134,33 @@ def json_body_matches(ctx, wanted=None): assert_eq(body.get(key, "not.there"), wanted[key]) +def server_has_n_chunks(ctx, n=None): + assert_eq = globals()["assert_eq"] + n = int(n) + files = find_files(ctx["config"]["chunks"]) + files = [x for x in files if x.endswith(".data")] + logging.debug(f"server_has_n_file_chunks: n={n}") + logging.debug(f"server_has_n_file_chunks: len(files)={len(files)}") + logging.debug(f"server_has_n_file_chunks: files={files}") + assert_eq(n, len(files)) + + +def server_stderr_contains(ctx, wanted=None): + assert_eq = globals()["assert_eq"] + assert_eq(_server_stderr_contains(ctx, wanted), True) + + +def server_stderr_doesnt_contain(ctx, wanted=None): + assert_eq = globals()["assert_eq"] + assert_eq(_server_stderr_contains(ctx, wanted), False) + + +def find_files(root): + for dirname, _, names in os.walk(root): + for name in names: + yield os.path.join(dirname, name) + + # Make an HTTP request. def _request(ctx, method, url, headers=None, data=None): r = method(url, headers=headers, data=data, verify=False) @@ -177,3 +200,17 @@ def _expand_vars(ctx, s): result.append(value) s = s[m.end() :] return "".join(result) + + +def _server_stderr_contains(ctx, wanted): + daemon_get_stderr = globals()["daemon_get_stderr"] + + wanted = _expand_vars(ctx, wanted) + + stderr = daemon_get_stderr(ctx, "obnam-server") + + logging.debug(f"_server_stderr_contains:") + logging.debug(f" wanted: {wanted}") + logging.debug(f" stderr: {stderr}") + + return wanted in stderr |