summaryrefslogtreecommitdiff
path: root/yarns/900-local.yarn
diff options
context:
space:
mode:
Diffstat (limited to 'yarns/900-local.yarn')
-rw-r--r--yarns/900-local.yarn191
1 files changed, 0 insertions, 191 deletions
diff --git a/yarns/900-local.yarn b/yarns/900-local.yarn
deleted file mode 100644
index 5fa06f3..0000000
--- a/yarns/900-local.yarn
+++ /dev/null
@@ -1,191 +0,0 @@
-<!--
-
-Copyright 2017-2018 Lars Wirzenius
-
-This program is free software: you can redistribute it and/or modify
-it under the terms of the GNU Affero General Public License as published by
-the Free Software Foundation, either version 3 of the License, or
-(at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU Affero General Public License for more details.
-
-You should have received a copy of the GNU Affero General Public License
-along with this program. If not, see <http://www.gnu.org/licenses/>.
-
--->
-
-# Scenario step implementations for locally managed ick
-
-## Authentication setup
-
- IMPLEMENTS GIVEN an RSA key pair for token signing
- argv = [
- os.path.join(srcdir, 'generate-rsa-key'),
- 'token.key',
- ]
- cliapp.runcmd(argv, stdout=None, stderr=None)
-
- IMPLEMENTS GIVEN an access token for (\S+) with scopes (.+)
- user = get_next_match()
- scopes = get_next_match()
- key = open('token.key').read()
- argv = [
- os.path.join(srcdir, 'create-token'),
- scopes,
- user,
- ]
- token = cliapp.runcmd(argv, feed_stdin=key)
- store_token(user, token)
- V['issuer'] = 'localhost'
- V['audience'] = user
-
-## Controller configuration
-
- IMPLEMENTS GIVEN controller config uses (\S+) at the state directory
- V['statedir'] = get_next_match()
-
- IMPLEMENTS GIVEN controller config uses (\S+) as artifact store
- V['artifact_store'] = get_next_match()
-
- IMPLEMENTS GIVEN controller config uses (\S+) as authentication
- V['auth_url'] = get_next_match()
-
- IMPLEMENTS GIVEN controller config uses (\S+) as notify
- V['notify_url'] = get_next_match()
- assert V['notify_url'] is not None
-
-## Start and stop the controller
-
- IMPLEMENTS GIVEN a running ick controller
- import os, time, cliapp, yaml
- V['controller.log'] = 'ick_controller.log'
- V['gunicorn3.log'] = 'gunicorn3.log'
- V['port'] = random_free_port()
- V['url'] = 'http://127.0.0.1:{}'.format(V['port'])
- assert V['auth_url'] is not None
- assert V['notify_url'] is not None
- config = {
- 'token-issuer': V['issuer'],
- 'token-audience': V['audience'],
- 'token-public-key': cat('token.key.pub'),
- 'log': [
- {
- 'filename': V['controller.log'],
- },
- ],
- 'statedir': V['statedir'],
- 'apt-server': 'localhost',
- 'artifact-store': V['artifact_store'],
- 'auth-url': V['auth_url'],
- 'notify-url': V['notify_url'],
- }
- assert config['notify-url'] is not None
- env = dict(os.environ)
- env['ICK_CONTROLLER_CONFIG'] = 'ick_controller.yaml'
- yaml.safe_dump(config, open('ick_controller.yaml', 'w'))
- argv = [
- 'gunicorn3',
- '--daemon',
- '--bind', '127.0.0.1:{}'.format(V['port']),
- '--log-file', V['gunicorn3.log'],
- '--log-level', 'debug',
- '-p', 'pid',
- 'ick_controller:app',
- ]
- cliapp.runcmd(argv, env=env)
- V['pid'] = int(cat('pid'))
- wait_for_port(V['port'])
-
- IMPLEMENTS WHEN user stops ick controller
- import os, signal
- os.kill(int(V['pid']), signal.SIGTERM)
-
- IMPLEMENTS FINALLY stop ick controller
- import os, signal
- os.kill(V['pid'], signal.SIGTERM)
-
-## Controller state inspection
-
- IMPLEMENTS THEN controller state directory contains project (\S+)
- name = get_next_match()
- basename = encode_basename(name)
- filename = os.path.join(V['statedir'], 'projects', basename)
- print 'name', name
- print 'basename', basename
- print 'filename', filename
- assertTrue(os.path.exists(filename))
-
- IMPLEMENTS THEN controller state directory contains worker (\S+)
- name = get_next_match()
- basename = encode_basename(name)
- filename = os.path.join(V['statedir'], 'workers', basename)
- print 'filename', filename
- assertTrue(os.path.exists(filename))
-
-## Check version result
-
- IMPLEMENTS THEN artifact store URL is (\S+)
- expected = get_next_match()
- body = V['body']
- obj = json.loads(body)
- actual = obj['artifact_store']
- assertEqual(actual, expected)
-
- IMPLEMENTS THEN authentication URL is (\S+)
- expected = get_next_match()
- body = V['body']
- obj = json.loads(body)
- actual = obj['auth_url']
- assertEqual(actual, expected)
-
- IMPLEMENTS THEN notify URL is (\S+)
- expected = get_next_match()
- body = V['body']
- obj = json.loads(body)
- actual = obj['notify_url']
- assertEqual(actual, expected)
-
-## Start and stop artifact store
-
- IMPLEMENTS GIVEN artifact store config uses (\S+) at the blob directory
- V['blobdir'] = get_next_match()
-
- IMPLEMENTS GIVEN a running artifact store
- import os, time, cliapp, yaml
- V['artifact_store.log'] = 'artifact_store.log'
- V['gunicorn3_as.log'] = 'gunicorn3_as.log'
- V['bsport'] = random_free_port()
- V['bsurl'] = 'http://127.0.0.1:{}'.format(V['bsport'])
- config = {
- 'token-issuer': V['issuer'],
- 'token-audience': V['audience'],
- 'token-public-key': cat('token.key.pub'),
- 'log': [
- {
- 'filename': V['artifact_store.log'],
- },
- ],
- 'blobdir': V['blobdir'],
- }
- env = dict(os.environ)
- env['ARTIFACT_STORE_CONFIG'] = 'artifact_store.yaml'
- yaml.safe_dump(config, open('artifact_store.yaml', 'w'))
- argv = [
- 'gunicorn3',
- '--daemon',
- '--bind', '127.0.0.1:{}'.format(V['bsport']),
- '--log-file', V['gunicorn3_as.log'],
- '--log-level', 'debug',
- '-p', 'bspid',
- 'artifact_store:app',
- ]
- cliapp.runcmd(argv, env=env)
- V['bspid'] = int(cat('bspid'))
- wait_for_port(V['bsport'])
-
- IMPLEMENTS FINALLY stop artifact store
- import os, signal
- os.kill(V['bspid'], signal.SIGTERM)