github.com/web-platform-tests/wpt.fyi@v0.0.0-20240530210107-70cf978996f1/results-processor/test_server.py (about)

     1  #!/usr/bin/env python3
     2  
     3  # Copyright 2019 The WPT Dashboard Project. All rights reserved.
     4  # Use of this source code is governed by a BSD-style license that can be
     5  # found in the LICENSE file.
     6  
     7  import argparse
     8  import logging
     9  import sys
    10  import time
    11  
    12  import flask
    13  
    14  # Exported credentials for authenticated APIs
    15  AUTH_CREDENTIALS = ('TEST_USERNAME', 'TEST_PASSWORD')
    16  
    17  logging.basicConfig(level=logging.ERROR, stream=sys.stdout)
    18  app = flask.Flask(__name__)
    19  
    20  
    21  @app.route('/api/screenshots/upload', methods=['POST'])
    22  def screenshots_upload():
    23      if 'screenshot' not in flask.request.files:
    24          return ('Bad request', 400)
    25      num = len(flask.request.files.getlist('screenshot'))
    26      sys.stderr.write('{}\n'.format(num))
    27      sys.stderr.flush()
    28      return ('Success', 201)
    29  
    30  
    31  @app.route('/slow', methods=['GET'])
    32  def slow():
    33      time.sleep(30)
    34      return 'Done'
    35  
    36  
    37  @app.route('/download/attachment', methods=['GET'])
    38  def download_attachment():
    39      return flask.send_file('artifact_test.zip',
    40                             as_attachment=True,
    41                             download_name='artifact_test.zip')
    42  
    43  
    44  @app.route('/download/test.txt', methods=['GET'])
    45  def download_json():
    46      return 'Hello, world!'
    47  
    48  
    49  @app.route('/api/status/<run_id>', methods=['PATCH'])
    50  def echo_status(run_id):
    51      assert flask.request.authorization.username == AUTH_CREDENTIALS[0]
    52      assert flask.request.authorization.password == AUTH_CREDENTIALS[1]
    53      payload = flask.request.get_json()
    54      assert str(payload.get('id')) == run_id
    55      sys.stderr.write(flask.request.get_data(as_text=True))
    56      sys.stderr.write('\n')
    57      sys.stderr.flush()
    58      return 'Success'
    59  
    60  
    61  @app.route('/api/results/create', methods=['POST'])
    62  def echo_create():
    63      assert flask.request.authorization.username == AUTH_CREDENTIALS[0]
    64      assert flask.request.authorization.password == AUTH_CREDENTIALS[1]
    65      payload = flask.request.get_json()
    66      return flask.jsonify(id=payload['id'])
    67  
    68  
    69  if __name__ == '__main__':
    70      parser = argparse.ArgumentParser()
    71      parser.add_argument('-p', '--port', required=True, type=int)
    72      args = parser.parse_args()
    73      app.run(port=args.port, debug=False)