diff options
Diffstat (limited to 'yarns/900-implements.yarn')
-rw-r--r-- | yarns/900-implements.yarn | 87 |
1 files changed, 58 insertions, 29 deletions
diff --git a/yarns/900-implements.yarn b/yarns/900-implements.yarn index 5468a6c..92acaa4 100644 --- a/yarns/900-implements.yarn +++ b/yarns/900-implements.yarn @@ -1,6 +1,6 @@ <!-- -Copyright 2017-2018 Lars Wirzenius +Copyright 2017-2019 Lars Wirzenius This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by @@ -32,47 +32,66 @@ along with this program. If not, see <http://www.gnu.org/licenses/>. IMPLEMENTS WHEN (\S+) makes request GET (\S+) user = get_next_match() path = get_next_match() + path = expand_vars(path, V) token = get_token(user) - url = vars['url'] - http(vars, get, url + path, token=token) + url = V['url'] + http(V, get, url + path, token=token) IMPLEMENTS WHEN (\S+) retrieves (\S+) from artifact store user = get_next_match() path = get_next_match() token = get_token(user) - url = vars['bsurl'] - http(vars, get_blob, url + path, token=token) + url = V['url'] + version = get_version(url) + asurl = version['artifact_store'] + http(V, get_blob, asurl + path, token=token) + + IMPLEMENTS WHEN (\S+) deletes (\S+) from artifact store + user = get_next_match() + path = get_next_match() + token = get_token(user) + url = V['url'] + version = get_version(url) + asurl = version['artifact_store'] + http(V, delete, asurl + path, token=token) IMPLEMENTS WHEN (\S+) makes request GET (\S+) with an invalid token user = get_next_match() path = get_next_match() token = get_token(user) - url = vars['url'] - http(vars, get, url + path, token='invalid') + url = V['url'] + http(V, get, url + path, token='invalid') IMPLEMENTS WHEN (\S+) makes request POST (\S+) with a valid token and body (.+) user = get_next_match() path = get_next_match() body = get_next_match() + body = expand_vars(body, V) + V['xxxPOSTbodyvalid'] = body token = get_token(user) - url = vars['url'] - http(vars, post, url + path, body=body, token=token) + url = V['url'] + http(V, post, url + path, body=body, token=token) IMPLEMENTS WHEN (\S+) makes request POST (\S+) with an invalid token and body (.+) user = get_next_match() path = get_next_match() body = get_next_match() + body = expand_vars(body, V) + V['xxxPOSTbody'] = body token = get_token(user) - url = vars['url'] - http(vars, post, url + path, body=body, token='invalid') + url = V['url'] + http(V, post, url + path, body=body, token='invalid') IMPLEMENTS WHEN (\S+) makes request PUT (\S+) with a valid token and body (.+) user = get_next_match() path = get_next_match() + path = expand_vars(path, V) body = get_next_match() + body = expand_vars(body, V) + V['xxxPUTbody'] = body token = get_token(user) - url = vars['url'] - http(vars, put, url + path, body=body, token=token) + url = V['url'] + http(V, put, url + path, body=body, token=token) IMPLEMENTS WHEN (\S+) sends blob (\S+) to artifact store as (\S+) user = get_next_match() @@ -80,34 +99,44 @@ along with this program. If not, see <http://www.gnu.org/licenses/>. path = get_next_match() body = cat(filename) token = get_token(user) - url = vars['bsurl'] - http(vars, put_blob, url + path, body=body, token=token) + url = V['url'] + version = get_version(url) + asurl = version['artifact_store'] + http(V, put_blob, asurl + path, body=body, token=token) IMPLEMENTS WHEN (\S+) makes request PUT (\S+) with an invalid token user = get_next_match() path = get_next_match() + path = expand_vars(path, V) body = '{}' token = get_token(user) - url = vars['url'] - http(vars, put, url + path, body=body, token='invalid') + url = V['url'] + http(V, put, url + path, body=body, token='invalid') IMPLEMENTS WHEN (\S+) makes request DELETE (\S+) user = get_next_match() path = get_next_match() + path = expand_vars(path, V) token = get_token(user) - url = vars['url'] - http(vars, delete, url + path, token=token) + url = V['url'] + http(V, delete, url + path, token=token) ## HTTP response inspection + IMPLEMENTS THEN worker id is (\S+) + varname = get_next_match() + body = json.loads(V['body']) + V[varname] = body['worker'] + IMPLEMENTS THEN result has status code (\d+) expected = int(get_next_match()) - assertEqual(expected, vars['status_code']) + assertEqual(expected, V['status_code']) IMPLEMENTS THEN body matches (.+) expected_text = get_next_match() + expected_text = expand_vars(expected_text, V) expected = json.loads(expected_text) - actual = json.loads(vars['body']) + actual = json.loads(V['body']) print 'expected' json.dump(expected, sys.stdout, indent=4, sort_keys=True) print @@ -121,7 +150,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>. IMPLEMENTS THEN body text contains "(.*)" pattern = unescape(get_next_match()) - text = vars['body'] + text = V['body'] print 'pattern:', repr(pattern) print 'text:', text assertTrue(pattern in text) @@ -129,11 +158,11 @@ along with this program. If not, see <http://www.gnu.org/licenses/>. IMPLEMENTS THEN body is the same as the blob (\S+) filename = get_next_match() blob = cat(filename) - body = vars['body'] + body = V['body'] assertEqual(body, blob) IMPLEMENTS THEN version in body matches version from setup.py - body = vars['body'] + body = V['body'] obj = json.loads(body) actual = obj['version'] setup_py = os.path.join(srcdir, 'setup.py') @@ -143,13 +172,13 @@ along with this program. If not, see <http://www.gnu.org/licenses/>. IMPLEMENTS THEN result has header (\S+): (\S+) name = get_next_match() value = get_next_match() - headers = vars['headers'] + headers = V['headers'] assertEqual(headers[name].lower(), value.lower()) IMPLEMENTS THEN result is step (.+) step = json.loads(get_next_match()) print('expected step', step) - body = json.loads(vars['body']) + body = json.loads(V['body']) print('actual body', body) actual_step = body['step'] print('actual step', actual_step) @@ -160,14 +189,14 @@ along with this program. If not, see <http://www.gnu.org/licenses/>. IMPLEMENTS WHEN (\S+) requests list of builds user = get_next_match() token = get_token(user) - url = vars['url'] + url = V['url'] path = '/builds' - http(vars, get, url + path, token=token) + http(V, get, url + path, token=token) IMPLEMENTS THEN the list of builds is (.+) expected = set(json.loads(get_next_match())) print('expected', expected) - body = json.loads(vars['body'])['builds'] + body = json.loads(V['body'])['builds'] print('body', body) builds = set(build['build_id'] for build in body) assertEqual(builds, expected) |