[ARVADOS] updated: 1.3.0-1337-ge190fb0f5
Git user
git at public.curoverse.com
Wed Jul 24 19:59:01 UTC 2019
Summary of changes:
build/run-tests.sh | 41 ++----
sdk/python/tests/run_test_server.py | 248 +++++++++++++++++++-----------------
services/ws/server_test.go | 3 +-
3 files changed, 142 insertions(+), 150 deletions(-)
via e190fb0f5337a6c5b5b782d70f0b48699d4f21d6 (commit)
from 26c517777afbdb9668ab24aa61bfc44ecd7f26b9 (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
commit e190fb0f5337a6c5b5b782d70f0b48699d4f21d6
Author: Peter Amstutz <pamstutz at veritasgenetics.com>
Date: Wed Jul 24 15:58:40 2019 -0400
14717: Refactor run_test_server.py and run_test.sh to use config.yml
Arvados-DCO-1.1-Signed-off-by: Peter Amstutz <pamstutz at veritasgenetics.com>
diff --git a/build/run-tests.sh b/build/run-tests.sh
index 7b915a533..032a71355 100755
--- a/build/run-tests.sh
+++ b/build/run-tests.sh
@@ -382,12 +382,8 @@ checkpidfile() {
checkhealth() {
svc="$1"
- port="$(cat "$WORKSPACE/tmp/${svc}.port")"
- scheme=http
- if [[ ${svc} =~ -ssl$ || ${svc} = wss ]]; then
- scheme=https
- fi
- url="$scheme://localhost:${port}/_health/ping"
+ base=$(python -c "import yaml; print list(yaml.safe_load(file('$ARVADOS_CONFIG'))['Clusters']['zzzzz']['Services']['$1']['InternalURLs'].keys())[0]")
+ url="$base/_health/ping"
if ! curl -Ss -H "Authorization: Bearer e687950a23c3a9bceec28c6223a06c79" "${url}" | tee -a /dev/stderr | grep '"OK"'; then
echo "${url} failed"
return 1
@@ -425,22 +421,22 @@ start_services() {
&& export ARVADOS_TEST_API_INSTALLED="$$" \
&& checkpidfile api \
&& checkdiscoverydoc $ARVADOS_API_HOST \
+ && eval $(python sdk/python/tests/run_test_server.py start_nginx) \
+ && checkpidfile nginx \
&& python sdk/python/tests/run_test_server.py start_controller \
&& checkpidfile controller \
- && checkhealth controller \
+ && checkhealth Controller \
+ && checkdiscoverydoc $ARVADOS_API_HOST \
&& python sdk/python/tests/run_test_server.py start_keep_proxy \
&& checkpidfile keepproxy \
&& python sdk/python/tests/run_test_server.py start_keep-web \
&& checkpidfile keep-web \
- && checkhealth keep-web \
+ && checkhealth WebDAV \
&& python sdk/python/tests/run_test_server.py start_arv-git-httpd \
&& checkpidfile arv-git-httpd \
- && checkhealth arv-git-httpd \
+ && checkhealth GitHTTP \
&& python sdk/python/tests/run_test_server.py start_ws \
&& checkpidfile ws \
- && eval $(python sdk/python/tests/run_test_server.py start_nginx) \
- && checkdiscoverydoc $ARVADOS_API_HOST \
- && checkpidfile nginx \
&& export ARVADOS_TEST_PROXY_SERVICES=1 \
&& (env | egrep ^ARVADOS) \
&& fail=0
@@ -624,25 +620,6 @@ initialize() {
# whine a lot.
setup_ruby_environment
- if [[ -s "$CONFIGSRC/config.yml" ]] ; then
- echo "Getting database configuration from $CONFIGSRC/config.yml"
- cp "$CONFIGSRC/config.yml" "$temp/test-config.yml"
- else
- if [[ -s /etc/arvados/config.yml ]] ; then
- echo "Getting database configuration from /etc/arvados/config.yml"
- python > "$temp/test-config.yml" <<EOF
-import yaml
-import json
-v = list(yaml.safe_load(open('/etc/arvados/config.yml'))['Clusters'].values())[0]['PostgreSQL']
-v['Connection']['dbname'] = 'arvados_test'
-print(json.dumps({"Clusters": { "zzzzz": {'PostgreSQL': v}}}))
-EOF
- else
- fatal "Please provide a config.yml file for the test suite in CONFIGSRC or /etc/arvados"
- fi
- fi
- export ARVADOS_CONFIG="$temp/test-config.yml"
-
echo "PATH is $PATH"
}
@@ -677,6 +654,8 @@ install_env() {
pip install --no-cache-dir PyYAML \
|| fatal "pip install PyYAML failed"
+ eval $(python sdk/python/tests/run_test_server.py setup_config)
+
# Preinstall libcloud if using a fork; otherwise nodemanager "pip
# install" won't pick it up by default.
if [[ -n "$LIBCLOUD_PIN_SRC" ]]; then
diff --git a/sdk/python/tests/run_test_server.py b/sdk/python/tests/run_test_server.py
index 2e4c5be83..437d85ef9 100644
--- a/sdk/python/tests/run_test_server.py
+++ b/sdk/python/tests/run_test_server.py
@@ -317,15 +317,9 @@ def run(leave_running_atexit=False):
os.makedirs(gitdir)
subprocess.check_output(['tar', '-xC', gitdir, '-f', gittarball])
- # The nginx proxy isn't listening here yet, but we need to choose
- # the wss:// port now so we can write the API server config file.
- wss_port = find_available_port()
- _setport('wss', wss_port)
-
- port = find_available_port()
+ port = internal_port_from_config("RailsAPI")
env = os.environ.copy()
env['RAILS_ENV'] = 'test'
- env['ARVADOS_TEST_WSS_PORT'] = str(wss_port)
env.pop('ARVADOS_WEBSOCKETS', None)
env.pop('ARVADOS_TEST_API_HOST', None)
env.pop('ARVADOS_API_HOST', None)
@@ -378,10 +372,7 @@ def reset():
headers={'Authorization': 'OAuth2 {}'.format(token)})
os.environ['ARVADOS_API_HOST_INSECURE'] = 'true'
os.environ['ARVADOS_API_TOKEN'] = token
- if _wait_until_port_listens(_getport('controller-ssl'), timeout=0.5, warn=False):
- os.environ['ARVADOS_API_HOST'] = '0.0.0.0:'+str(_getport('controller-ssl'))
- else:
- os.environ['ARVADOS_API_HOST'] = existing_api_host
+ os.environ['ARVADOS_API_HOST'] = existing_api_host
def stop(force=False):
"""Stop the API server, if one is running.
@@ -402,58 +393,28 @@ def stop(force=False):
kill_server_pid(_pidfile('api'))
my_api_host = None
+def get_config():
+ with open(os.environ["ARVADOS_CONFIG"]) as f:
+ return yaml.safe_load(f)
+
+def internal_port_from_config(service):
+ return int(list(get_config()["Clusters"]["zzzzz"]["Services"][service]["InternalURLs"].keys())[0].split(":")[2])
+
+def external_port_from_config(service):
+ return int(get_config()["Clusters"]["zzzzz"]["Services"][service]["ExternalURL"].split(":")[2])
+
def run_controller():
if 'ARVADOS_TEST_PROXY_SERVICES' in os.environ:
return
stop_controller()
- rails_api_port = int(string.split(os.environ.get('ARVADOS_TEST_API_HOST', my_api_host), ':')[-1])
- port = find_available_port()
- conf = os.path.join(TEST_TMPDIR, 'arvados.yml')
- with open(conf, 'w') as f:
- f.write("""
-Clusters:
- zzzzz:
- EnableBetaController14287: {beta14287}
- ManagementToken: e687950a23c3a9bceec28c6223a06c79
- API:
- RequestTimeout: 30s
- Logging:
- Level: "{loglevel}"
- HTTPRequestTimeout: 30s
- PostgreSQL:
- ConnectionPool: 32
- Connection:
- host: {dbhost}
- dbname: {dbname}
- user: {dbuser}
- password: {dbpass}
- TLS:
- Insecure: true
- Services:
- Controller:
- InternalURLs:
- "http://localhost:{controllerport}": {{}}
- RailsAPI:
- InternalURLs:
- "https://localhost:{railsport}": {{}}
- """.format(
- beta14287=('true' if '14287' in os.environ.get('ARVADOS_EXPERIMENTAL', '') else 'false'),
- loglevel=('info' if os.environ.get('ARVADOS_DEBUG', '') in ['','0'] else 'debug'),
- dbhost=_dbconfig('host'),
- dbname=_dbconfig('dbname'),
- dbuser=_dbconfig('user'),
- dbpass=_dbconfig('password'),
- controllerport=port,
- railsport=rails_api_port,
- ))
logf = open(_logfilename('controller'), 'a')
+ port = internal_port_from_config("Controller")
controller = subprocess.Popen(
- ["arvados-server", "controller", "-config", conf],
+ ["arvados-server", "controller"],
stdin=open('/dev/null'), stdout=logf, stderr=logf, close_fds=True)
with open(_pidfile('controller'), 'w') as f:
f.write(str(controller.pid))
_wait_until_port_listens(port)
- _setport('controller', port)
return port
def stop_controller():
@@ -465,36 +426,13 @@ def run_ws():
if 'ARVADOS_TEST_PROXY_SERVICES' in os.environ:
return
stop_ws()
- port = find_available_port()
- conf = os.path.join(TEST_TMPDIR, 'ws.yml')
- with open(conf, 'w') as f:
- f.write("""
-Client:
- APIHost: {}
- Insecure: true
-Listen: :{}
-LogLevel: {}
-Postgres:
- host: {}
- dbname: {}
- user: {}
- password: {}
- sslmode: require
- """.format(os.environ['ARVADOS_API_HOST'],
- port,
- ('info' if os.environ.get('ARVADOS_DEBUG', '') in ['','0'] else 'debug'),
- _dbconfig('host'),
- _dbconfig('dbname'),
- _dbconfig('user'),
- _dbconfig('password')))
+ port = internal_port_from_config("Websocket")
logf = open(_logfilename('ws'), 'a')
- ws = subprocess.Popen(
- ["ws", "-config", conf],
+ ws = subprocess.Popen(["ws"],
stdin=open('/dev/null'), stdout=logf, stderr=logf, close_fds=True)
with open(_pidfile('ws'), 'w') as f:
f.write(str(ws.pid))
_wait_until_port_listens(port)
- _setport('ws', port)
return port
def stop_ws():
@@ -591,11 +529,11 @@ def stop_keep(num_servers=2):
def run_keep_proxy():
if 'ARVADOS_TEST_PROXY_SERVICES' in os.environ:
- os.environ["ARVADOS_KEEP_SERVICES"] = "http://localhost:{}".format(_getport('keepproxy'))
+ os.environ["ARVADOS_KEEP_SERVICES"] = "http://localhost:{}".format(internal_port_from_config('Keepproxy'))
return
stop_keep_proxy()
- port = find_available_port()
+ port = internal_port_from_config("Keepproxy")
env = os.environ.copy()
env['ARVADOS_API_TOKEN'] = auth_token('anonymous')
logf = open(_logfilename('keepproxy'), 'a')
@@ -605,6 +543,7 @@ def run_keep_proxy():
'-listen=:{}'.format(port)],
env=env, stdin=open('/dev/null'), stdout=logf, stderr=logf, close_fds=True)
+ print("Using API %s token %s" % (os.environ['ARVADOS_API_HOST'], auth_token('admin')), file=sys.stdout)
api = arvados.api(
version='v1',
host=os.environ['ARVADOS_API_HOST'],
@@ -620,7 +559,6 @@ def run_keep_proxy():
'service_ssl_flag': False,
}}).execute()
os.environ["ARVADOS_KEEP_SERVICES"] = "http://localhost:{}".format(port)
- _setport('keepproxy', port)
_wait_until_port_listens(port)
def stop_keep_proxy():
@@ -634,7 +572,7 @@ def run_arv_git_httpd():
stop_arv_git_httpd()
gitdir = os.path.join(SERVICES_SRC_DIR, 'api', 'tmp', 'git')
- gitport = find_available_port()
+ gitport = internal_port_from_config("GitHTTP")
env = os.environ.copy()
env.pop('ARVADOS_API_TOKEN', None)
logf = open(_logfilename('arv-git-httpd'), 'a')
@@ -646,7 +584,6 @@ def run_arv_git_httpd():
env=env, stdin=open('/dev/null'), stdout=logf, stderr=logf)
with open(_pidfile('arv-git-httpd'), 'w') as f:
f.write(str(agh.pid))
- _setport('arv-git-httpd', gitport)
_wait_until_port_listens(gitport)
def stop_arv_git_httpd():
@@ -659,7 +596,7 @@ def run_keep_web():
return
stop_keep_web()
- keepwebport = find_available_port()
+ keepwebport = internal_port_from_config("WebDAV")
env = os.environ.copy()
env['ARVADOS_API_TOKEN'] = auth_token('anonymous')
logf = open(_logfilename('keep-web'), 'a')
@@ -672,7 +609,6 @@ def run_keep_web():
env=env, stdin=open('/dev/null'), stdout=logf, stderr=logf)
with open(_pidfile('keep-web'), 'w') as f:
f.write(str(keepweb.pid))
- _setport('keep-web', keepwebport)
_wait_until_port_listens(keepwebport)
def stop_keep_web():
@@ -685,17 +621,17 @@ def run_nginx():
return
stop_nginx()
nginxconf = {}
- nginxconf['CONTROLLERPORT'] = _getport('controller')
- nginxconf['CONTROLLERSSLPORT'] = find_available_port()
- nginxconf['KEEPWEBPORT'] = _getport('keep-web')
- nginxconf['KEEPWEBDLSSLPORT'] = find_available_port()
- nginxconf['KEEPWEBSSLPORT'] = find_available_port()
- nginxconf['KEEPPROXYPORT'] = _getport('keepproxy')
- nginxconf['KEEPPROXYSSLPORT'] = find_available_port()
- nginxconf['GITPORT'] = _getport('arv-git-httpd')
- nginxconf['GITSSLPORT'] = find_available_port()
- nginxconf['WSPORT'] = _getport('ws')
- nginxconf['WSSPORT'] = _getport('wss')
+ nginxconf['CONTROLLERPORT'] = internal_port_from_config("Controller")
+ nginxconf['CONTROLLERSSLPORT'] = external_port_from_config("Controller")
+ nginxconf['KEEPWEBPORT'] = internal_port_from_config("WebDAV")
+ nginxconf['KEEPWEBDLSSLPORT'] = external_port_from_config("WebDAVDownload")
+ nginxconf['KEEPWEBSSLPORT'] = external_port_from_config("WebDAV")
+ nginxconf['KEEPPROXYPORT'] = internal_port_from_config("Keepproxy")
+ nginxconf['KEEPPROXYSSLPORT'] = external_port_from_config("Keepproxy")
+ nginxconf['GITPORT'] = internal_port_from_config("GitHTTP")
+ nginxconf['GITSSLPORT'] = external_port_from_config("GitHTTP")
+ nginxconf['WSPORT'] = internal_port_from_config("Websocket")
+ nginxconf['WSSPORT'] = external_port_from_config("Websocket")
nginxconf['SSLCERT'] = os.path.join(SERVICES_SRC_DIR, 'api', 'tmp', 'self-signed.pem')
nginxconf['SSLKEY'] = os.path.join(SERVICES_SRC_DIR, 'api', 'tmp', 'self-signed.key')
nginxconf['ACCESSLOG'] = _logfilename('nginx_access')
@@ -719,11 +655,101 @@ def run_nginx():
'-g', 'pid '+_pidfile('nginx')+';',
'-c', conffile],
env=env, stdin=open('/dev/null'), stdout=sys.stderr)
- _setport('controller-ssl', nginxconf['CONTROLLERSSLPORT'])
- _setport('keep-web-dl-ssl', nginxconf['KEEPWEBDLSSLPORT'])
- _setport('keep-web-ssl', nginxconf['KEEPWEBSSLPORT'])
- _setport('keepproxy-ssl', nginxconf['KEEPPROXYSSLPORT'])
- _setport('arv-git-httpd-ssl', nginxconf['GITSSLPORT'])
+
+def setup_config():
+ rails_api_port = find_available_port()
+ controller_port = find_available_port()
+ controller_external_port = find_available_port()
+ websocket_port = find_available_port()
+ websocket_external_port = find_available_port()
+ git_httpd_port = find_available_port()
+ git_httpd_external_port = find_available_port()
+ keepproxy_port = find_available_port()
+ keepproxy_external_port = find_available_port()
+ keep_web_port = find_available_port()
+ keep_web_external_port = find_available_port()
+ keep_web_dl_port = find_available_port()
+ keep_web_dl_external_port = find_available_port()
+
+ if "CONFIGSRC" in os.environ:
+ dbconf = os.path.join(os.environ["CONFIGSRC"], "config.yml")
+ else:
+ dbconf = "/etc/arvados/config.yml"
+
+ print("Getting config from %s" % dbconf, file=sys.stderr)
+
+ pgconnection = list(yaml.safe_load(open(dbconf))["Clusters"].values())[0]["PostgreSQL"]["Connection"]
+
+ if "test" not in pgconnection["dbname"]:
+ pgconnection["dbname"] = "arvados_test"
+
+ services = {
+ "RailsAPI": {
+ "InternalURLs": { }
+ },
+ "Controller": {
+ "ExternalURL": "https://localhost:%s" % controller_external_port,
+ "InternalURLs": { }
+ },
+ "Websocket": {
+ "ExternalURL": "https://localhost:%s" % websocket_external_port,
+ "InternalURLs": { }
+ },
+ "GitHTTP": {
+ "ExternalURL": "https://localhost:%s" % git_httpd_external_port,
+ "InternalURLs": { }
+ },
+ "Keepproxy": {
+ "ExternalURL": "https://localhost:%s" % keepproxy_external_port,
+ "InternalURLs": { }
+ },
+ "WebDAV": {
+ "ExternalURL": "https://localhost:%s" % keep_web_external_port,
+ "InternalURLs": { }
+ },
+ "WebDAVDownload": {
+ "ExternalURL": "https://localhost:%s" % keep_web_dl_external_port,
+ "InternalURLs": { }
+ }
+ }
+ services["RailsAPI"]["InternalURLs"]["https://localhost:%s"%rails_api_port] = {}
+ services["Controller"]["InternalURLs"]["http://localhost:%s"%controller_port] = {}
+ services["Websocket"]["InternalURLs"]["http://localhost:%s"%websocket_port] = {}
+ services["GitHTTP"]["InternalURLs"]["http://localhost:%s"%git_httpd_port] = {}
+ services["Keepproxy"]["InternalURLs"]["http://localhost:%s"%keepproxy_port] = {}
+ services["WebDAV"]["InternalURLs"]["http://localhost:%s"%keep_web_port] = {}
+ services["WebDAVDownload"]["InternalURLs"]["http://localhost:%s"%keep_web_dl_port] = {}
+
+ config = {
+ "Clusters": {
+ "zzzzz": {
+ "EnableBetaController14287": ('14287' in os.environ.get('ARVADOS_EXPERIMENTAL', '')),
+ "ManagementToken": "e687950a23c3a9bceec28c6223a06c79",
+ "API": {
+ "RequestTimeout": "30s"
+ },
+ "SystemLogs": {
+ "LogLevel": ('info' if os.environ.get('ARVADOS_DEBUG', '') in ['','0'] else 'debug')
+ },
+ "PostgreSQL": {
+ "Connection": pgconnection,
+ },
+ "TLS": {
+ "Insecure": True
+ },
+ "Services": services
+ }
+ }
+ }
+
+ conf = os.path.join(TEST_TMPDIR, 'arvados.yml')
+ with open(conf, 'w') as f:
+ yaml.safe_dump(config, f)
+
+ ex = "export ARVADOS_CONFIG="+conf
+ print(ex, file=sys.stderr)
+ print(ex)
+
def stop_nginx():
if 'ARVADOS_TEST_PROXY_SERVICES' in os.environ:
@@ -733,20 +759,6 @@ def stop_nginx():
def _pidfile(program):
return os.path.join(TEST_TMPDIR, program + '.pid')
-def _portfile(program):
- return os.path.join(TEST_TMPDIR, program + '.port')
-
-def _setport(program, port):
- with open(_portfile(program), 'w') as f:
- f.write(str(port))
-
-# Returns 9 if program is not up.
-def _getport(program):
- try:
- return int(open(_portfile(program)).read())
- except IOError:
- return 9
-
def _dbconfig(key):
global _cached_db_config
if not _cached_db_config:
@@ -868,7 +880,7 @@ if __name__ == "__main__":
'start_keep_proxy', 'stop_keep_proxy',
'start_keep-web', 'stop_keep-web',
'start_arv-git-httpd', 'stop_arv-git-httpd',
- 'start_nginx', 'stop_nginx',
+ 'start_nginx', 'stop_nginx', 'setup_config',
]
parser = argparse.ArgumentParser()
parser.add_argument('action', type=str, help="one of {}".format(actions))
@@ -922,8 +934,10 @@ if __name__ == "__main__":
stop_keep_web()
elif args.action == 'start_nginx':
run_nginx()
- print("export ARVADOS_API_HOST=0.0.0.0:{}".format(_getport('controller-ssl')))
+ print("export ARVADOS_API_HOST=0.0.0.0:{}".format(external_port_from_config('Controller')))
elif args.action == 'stop_nginx':
stop_nginx()
+ elif args.action == 'setup_config':
+ setup_config()
else:
raise Exception("action recognized but not implemented!?")
diff --git a/services/ws/server_test.go b/services/ws/server_test.go
index 8b43cef37..1b9a50ca6 100644
--- a/services/ws/server_test.go
+++ b/services/ws/server_test.go
@@ -190,8 +190,7 @@ ManagementToken: qqqqq
"sslmode": "require",
"user": "arvados"})
c.Check(cluster.PostgreSQL.ConnectionPool, check.Equals, 63)
- c.Check(cluster.Services.Websocket.InternalURLs, check.DeepEquals, map[arvados.URL]arvados.ServiceInstance{
- arvados.URL{Host: ":8765"}: arvados.ServiceInstance{}})
+ c.Check(cluster.Services.Websocket.InternalURLs[arvados.URL{Host: ":8765"}], check.NotNil)
c.Check(cluster.SystemLogs.LogLevel, check.Equals, "debug")
c.Check(cluster.SystemLogs.Format, check.Equals, "text")
c.Check(cluster.API.SendTimeout, check.Equals, arvados.Duration(61*time.Second))
-----------------------------------------------------------------------
hooks/post-receive
--
More information about the arvados-commits
mailing list