83 lines
2.0 KiB
Python
83 lines
2.0 KiB
Python
import atexit
|
|
import os
|
|
import shutil
|
|
import signal
|
|
import subprocess
|
|
import tempfile
|
|
|
|
|
|
config = os.environ.get('BOULDER_CONFIG')
|
|
if config is None:
|
|
config = 'test/boulder-config.json'
|
|
processes = []
|
|
tempdir = tempfile.mkdtemp()
|
|
|
|
|
|
def run(path):
|
|
binary = os.path.join(tempdir, os.path.basename(path))
|
|
|
|
buildcmd = 'GORACE="halt_on_error=1" go build -race -o %s ./%s' % (binary, path)
|
|
print(buildcmd)
|
|
subprocess.check_call(buildcmd, shell=True)
|
|
|
|
srvcmd = [binary, '--config', config]
|
|
p = subprocess.Popen(srvcmd)
|
|
p.cmd = srvcmd
|
|
print('started %s with pid %d' % (p.cmd, p.pid))
|
|
return p
|
|
|
|
|
|
def start():
|
|
"""Return True if everything builds and starts.
|
|
|
|
Give up and return False if anything fails to build, or dies at
|
|
startup. Anything that did start before this point can be cleaned
|
|
up explicitly by calling stop(), or automatically atexit.
|
|
"""
|
|
global processes
|
|
for prog in [
|
|
'cmd/boulder-wfe',
|
|
'cmd/boulder-ra',
|
|
'cmd/boulder-sa',
|
|
'cmd/boulder-ca',
|
|
'cmd/boulder-va',
|
|
'test/dns-test-srv']:
|
|
try:
|
|
processes.append(run(prog))
|
|
except Exception as e:
|
|
print(e)
|
|
return False
|
|
if not check():
|
|
# Don't keep building stuff if a server has already died.
|
|
return False
|
|
return True
|
|
|
|
|
|
def check():
|
|
"""Return true if all started processes are still alive.
|
|
|
|
Log about anything that died.
|
|
"""
|
|
global processes
|
|
busted = []
|
|
stillok = []
|
|
for p in processes:
|
|
if p.poll() is None:
|
|
stillok.append(p)
|
|
else:
|
|
busted.append(p)
|
|
if busted:
|
|
print "\n\nThese processes exited early (check above for their output):"
|
|
for p in busted:
|
|
print "\t'%s' with pid %d exited %d" % (p.cmd, p.pid, p.returncode)
|
|
processes = stillok
|
|
return not busted
|
|
|
|
|
|
@atexit.register
|
|
def stop():
|
|
for p in processes:
|
|
if p.poll() is None:
|
|
p.kill()
|
|
shutil.rmtree(tempdir)
|