#!/usr/bin/env python2.7 import os import shutil import socket import subprocess import sys import tempfile import time tempdir = tempfile.mkdtemp() exit_status = 0 def die(): global exit_status exit_status = 1 sys.exit(1) processes = [] def run(path): global processes binary = os.path.join(tempdir, os.path.basename(path)) cmd = 'go build -tags pkcs11 -o %s %s' % (binary, path) print(cmd) if subprocess.Popen(cmd, shell=True).wait() != 0: die() processes.append(subprocess.Popen(''' exec %s --config test/boulder-test-config.json ''' % binary, shell=True)) def start(): run('./cmd/boulder-wfe') run('./cmd/boulder-ra') run('./cmd/boulder-sa') run('./cmd/boulder-ca') run('./cmd/boulder-va') def run_node_test(): s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) try: s.connect(('localhost', 4300)) except socket.error, e: print("Cannot connect to WFE") die() os.chdir('test/js') if subprocess.Popen('npm install', shell=True).wait() != 0: print("\n Installing NPM modules failed") die() if subprocess.Popen(''' node test.js --email foo@letsencrypt.org --agree true \ --domains foo.com --new-reg http://localhost:4300/acme/new-reg \ --certKey %s/key.pem --cert %s/cert.der ''' % (tempdir, tempdir), shell=True).wait() != 0: print("\nIssuing failed") die() if subprocess.Popen(''' node revoke.js %s/cert.der %s/key.pem http://localhost:4300/acme/revoke-cert ''' % (tempdir, tempdir), shell=True).wait() != 0: print("\nRevoking failed") die() return 0 def run_client_tests(): assert "LETSENCRYPT_PATH" in os.environ root = os.environ["LETSENCRYPT_PATH"] test_script_path = os.path.join(root, 'tests', 'boulder-integration.sh') if subprocess.Popen(test_script_path, shell=True, cwd=root).wait() != 0: die() try: start() run_node_test() run_client_tests() except Exception as e: exit_status = 1 print e finally: for p in processes: if p.poll() is None: p.kill() else: exit_status = 1 shutil.rmtree(tempdir) if exit_status == 0: print("\n\nSUCCESS") else: print("\n\nFAILURE") sys.exit(exit_status)