appengine/integration_tests/deploy_check.py (79 lines of code) (raw):

#!/usr/bin/python # Copyright 2017 Google Inc. All rights reserved. # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # http://www.apache.org/licenses/LICENSE-2.0 # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. import argparse import json import logging from retrying import retry import subprocess import sys from testsuite import deploy_app from testsuite import test_util def main(): parser = argparse.ArgumentParser() parser.add_argument('--directory', '-d', type=str, help='Directory of app to be run', required=True) parser.add_argument('--language', '-l', type=str, help='Language of the app deployed', required=False) parser.add_argument('--verbose', '-v', help='Debug logging', action='store_true', required=False) parser.add_argument('--skip-builders', action='store_true', help='Skip runtime builder flow', default=False) parser.add_argument('--skip-xrt', action='store_true', help='Skip XRT flow', default=False) args = parser.parse_args() if args.verbose: logging.getLogger().setLevel(logging.DEBUG) # retrieve previous config value to reset after cmd = ['gcloud', 'config', 'list', '--format=json'] output = json.loads(subprocess.check_output(cmd)) prev_builder_value = None if 'app' in output: prev_builder_value = output.get('app').get('use_runtime_builders') if args.skip_xrt: logging.info('Skipping xrt flow.') else: # disable app/use_runtime_builders to hit the XRT flow _set_runtime_builder_flag(False) _deploy_and_test(args.directory, args.language, True) if args.skip_builders: logging.info('Skipping builder flow.') else: # set app/use_runtime_builders to explicitly enter builder flow _set_runtime_builder_flag(True) _deploy_and_test(args.directory, args.language, False) _set_runtime_builder_flag(prev_builder_value) def _set_runtime_builder_flag(flag): try: if flag is None: cmd = ['gcloud', 'config', 'unset', 'app/use_runtime_builders'] else: cmd = ['gcloud', 'config', 'set', 'app/use_runtime_builders', str(flag)] subprocess.check_output(cmd) except subprocess.CalledProcessError as cpe: logging.error(cpe.output) sys.exit(1) def _deploy_and_test(appdir, language, is_xrt): version = None try: logging.debug('Testing runtime image.') version, url = deploy_app.deploy_app_and_record_latency(appdir, language, is_xrt) application_url = test_util.retrieve_url_for_version(version) _test_application(application_url) except Exception as e: logging.error('Error when contacting application: %s', e) sys.exit(1) finally: if version: deploy_app.stop_version(version) @retry(wait_fixed=4000, stop_max_attempt_number=8) def _test_application(application_url): output, status_code = test_util.get(application_url) if status_code: logging.error(output) raise RuntimeError('Application returned non-zero status code: %d', status_code) else: return output if __name__ == '__main__': sys.exit(main())