import logging import json import os import subprocess import time import requests CONTROLLER_URL = 'https://wmf2-controller.vm.liw.fi' TOKEN = 'eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzUxMiJ9.eyJpc3MiOiJpc3MiLCJzdWIiOiJzdWJqZWN0LXV1aWQiLCJhdWQiOiJhdWQiLCJleHAiOjE1NjQxNDc5MTksInNjb3BlIjoidHJpZ2dlciBzdGF0dXMifQ.WZ7wQgzPSrhIb7ufTbdnnXIYu6sOjwMmhouJrboeJQQMZKHwp-6MRbJ8dccYU7UuPyp17IlZf2w875FkYwvCTcfySwkbocBw7LmR4FqrWhHKhG6eYJBrcSLU_72t1pQaYR_-m1MGeY7aXtmUclLhzl1SEAFxOOhWwPuXb2Pk7_JeXxN0ErUka4vA2uPtqCH7rCICgbyY1mBApaZQmucWORwLs5FmhFy5STWmcgYNSesId2rj0_0Y5jW3Ws5yif0PmxCx0ik5qCebmWbvvAHQ7vDCsfBYNBQbv59MkfeSOFin4CnWy_WgqVE7A20ZymMTTjle_5au014vhn-9g3OzmIGPX1dokxa_ZeSzqcoa8ZxASwH2TLIHUAbZh_PT68dyR9IZNPZLbK2vh5OK_TEXxQ9PM38CGoa0Sl7RIzKu7i9U6vtTz0npCwi7JMQFHltrGKJtkRcqUvI3BAl6ZjRp34y3PA0HyvjVrHtcqhyagEwQqsBggloyOwVibVAmMAqMsp59Jjk4oxc7lRFcw2SADYtRkSDswJsWkjxvDr4_L2PZ7LdklcfKomLXCb4n46VM91il3PWxPIJMzNcd8uQAyQcLrzZNND4-kmlNaVIofccYNqPk_qPlQ35OAnncZn6WXc8lIzp7bMjXMzMZCThb_m-K6MPTeMcepVFV8ZKEwIE' def _POST(token, baseurl, path, body): logging.info('POST to %s%s with %r', baseurl, path, body) url = '{}{}'.format(baseurl, path) headers = { 'Authorization': 'Bearer {}'.format(TOKEN), 'Content-Type': 'application/json', } return requests.post(url, headers=headers, data=json.dumps(body)) def _GET(url, filename): logging.info('GET %s to %s', url, filename) r = requests.get(url) logging.info('Status %s', r.status_code) assert r.ok with open(filename, 'wb') as f: f.write(r.content) def _get_token(): return os.environ['WMF_TOKEN'] def nop(ctx, url=None): logging.info('Blithely assuming %s exists', url) def wait(ctx, seconds): logging.info('Waiting for %r seconds', seconds) seconds = int(seconds) time.sleep(seconds) def trigger_build(ctx, body=None): logging.info('Triggering build with %r', body) token = _get_token() body = json.loads(body) r = _POST(token, CONTROLLER_URL, '/trigger', body) ctx['status'] = r.status_code # FIXME def status_code_is(ctx, code=None): logging.info('Checking HTTP respons status code is %r', code) code = int(code) assert ctx['status'] == code def get_build_status(ctx): # FIXME logging.info('Retrieving build status for all builds') old = ctx.get('builds') if old is None: ctx['builds'] = {'builds': {'hithere': 'building'}} else: ctx['builds'] = {'builds': {'hithere': 'success'}} def build_status_is(ctx, name=None, status=None): # FIXME logging.info('Retrieving that %r build status is %r', name, status) builds = ctx.get('builds', {}).get('builds') assert builds is not None and builds.get(name) == status def get_file(ctx, url=None, filename=None): logging.info('Retrieving %r to %r', url, filename) _GET(url, filename) def run_file(ctx, filename=None): # FIXME logging.info('Executing %r', filename) filename = './' + filename os.chmod(filename, 0o700) ctx['stdout'] = subprocess.check_output([filename]).decode('utf-8') def stdout_is(ctx, expected=None): logging.info('Checking captured stdout is %r', expected) logging.info('Captured stdout is %r', ctx['stdout']) assert ctx['stdout'] == (expected + '\n')