summaryrefslogtreecommitdiff
path: root/yarns
diff options
context:
space:
mode:
authorLars Wirzenius <liw@liw.fi>2017-10-14 18:35:58 +0300
committerLars Wirzenius <liw@liw.fi>2017-10-14 18:35:58 +0300
commit4c5bfc6aae6bf4e608a5e675be075bc37b910b53 (patch)
tree91aa05ad0f8201b92a2072b2533775a3cef114c5 /yarns
parent5480d64352e1f5b7fbc61d48b7d8e1156253fc97 (diff)
downloadick2-4c5bfc6aae6bf4e608a5e675be075bc37b910b53.tar.gz
Add: run yarns against locallly started instance, or remote
Diffstat (limited to 'yarns')
-rw-r--r--yarns/900-implements.yarn81
-rw-r--r--yarns/900-local.yarn96
-rw-r--r--yarns/900-remote.yarn59
-rw-r--r--yarns/lib.py8
4 files changed, 161 insertions, 83 deletions
diff --git a/yarns/900-implements.yarn b/yarns/900-implements.yarn
index b369833..3bb694e 100644
--- a/yarns/900-implements.yarn
+++ b/yarns/900-implements.yarn
@@ -17,77 +17,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
-->
-# Scenario step implementations
-
-## 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 scopes (.+)
- scopes = get_next_match()
- key = open('token.key').read()
- argv = [
- os.path.join(srcdir, 'create-token'),
- scopes,
- ]
- token = cliapp.runcmd(argv, feed_stdin=key)
- write('token.jwt', token)
- vars['issuer'] = 'localhost'
- vars['audience'] = 'localhost'
-
-## Controller configuration
-
- IMPLEMENTS GIVEN controller config uses (\S+) at the state directory
- vars['statedir'] = get_next_match()
-
-## Start and stop the controller
-
- IMPLEMENTS GIVEN a running ick controller
- import os, time, cliapp, yaml
- vars['controller.log'] = 'ick_controller.log'
- vars['gunicorn3.log'] = 'gunicorn3.log'
- vars['port'] = random_free_port()
- vars['url'] = 'http://127.0.0.1:{}'.format(vars['port'])
- config = {
- 'token-issuer': vars['issuer'],
- 'token-audience': vars['audience'],
- 'token-public-key': cat('token.key.pub'),
- 'log': [
- {
- 'filename': vars['controller.log'],
- },
- ],
- 'statedir': vars['statedir'],
- }
- 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(vars['port']),
- '--log-file', vars['gunicorn3.log'],
- '--log-level', 'debug',
- '-p', 'pid',
- 'ick_controller:app',
- ]
- cliapp.runcmd(argv, env=env)
- vars['pid'] = int(cat('pid'))
- wait_for_port(vars['port'])
-
- IMPLEMENTS WHEN user stops ick controller
- import os, signal
- os.kill(int(vars['pid']), signal.SIGTERM)
-
- IMPLEMENTS FINALLY stop ick controller
- import os, signal
- os.kill(vars['pid'], signal.SIGTERM)
-
+# Scenario step implementations (local and remote instances)
## HTTP requests of various kinds
@@ -154,11 +84,4 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
actual = obj['version']
setup_py = os.path.join(srcdir, 'setup.py')
wanted = cliapp.runcmd(['python3', setup_py, '--version']).strip()
- assertEqual(actual, wanted)
-
-## Controller state inspection
-
- IMPLEMENTS THEN controller state directory contains project (\S+)
- name = get_next_match()
- filename = os.path.join(vars['statedir'], 'projects', name + '.yaml')
- assertTrue(os.path.exists(filename))
+ assertTrue(wanted.startswith(actual))
diff --git a/yarns/900-local.yarn b/yarns/900-local.yarn
new file mode 100644
index 0000000..2657662
--- /dev/null
+++ b/yarns/900-local.yarn
@@ -0,0 +1,96 @@
+<!--
+
+Copyright 2017 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 scopes (.+)
+ scopes = get_next_match()
+ key = open('token.key').read()
+ argv = [
+ os.path.join(srcdir, 'create-token'),
+ scopes,
+ ]
+ token = cliapp.runcmd(argv, feed_stdin=key)
+ write('token.jwt', token)
+ vars['issuer'] = 'localhost'
+ vars['audience'] = 'localhost'
+
+## Controller configuration
+
+ IMPLEMENTS GIVEN controller config uses (\S+) at the state directory
+ vars['statedir'] = get_next_match()
+
+## Start and stop the controller
+
+ IMPLEMENTS GIVEN a running ick controller
+ import os, time, cliapp, yaml
+ vars['controller.log'] = 'ick_controller.log'
+ vars['gunicorn3.log'] = 'gunicorn3.log'
+ vars['port'] = random_free_port()
+ vars['url'] = 'http://127.0.0.1:{}'.format(vars['port'])
+ config = {
+ 'token-issuer': vars['issuer'],
+ 'token-audience': vars['audience'],
+ 'token-public-key': cat('token.key.pub'),
+ 'log': [
+ {
+ 'filename': vars['controller.log'],
+ },
+ ],
+ 'statedir': vars['statedir'],
+ }
+ 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(vars['port']),
+ '--log-file', vars['gunicorn3.log'],
+ '--log-level', 'debug',
+ '-p', 'pid',
+ 'ick_controller:app',
+ ]
+ cliapp.runcmd(argv, env=env)
+ vars['pid'] = int(cat('pid'))
+ wait_for_port(vars['port'])
+
+ IMPLEMENTS WHEN user stops ick controller
+ import os, signal
+ os.kill(int(vars['pid']), signal.SIGTERM)
+
+ IMPLEMENTS FINALLY stop ick controller
+ import os, signal
+ os.kill(vars['pid'], signal.SIGTERM)
+
+## Controller state inspection
+
+ IMPLEMENTS THEN controller state directory contains project (\S+)
+ name = get_next_match()
+ filename = os.path.join(vars['statedir'], 'projects', name + '.yaml')
+ assertTrue(os.path.exists(filename))
diff --git a/yarns/900-remote.yarn b/yarns/900-remote.yarn
new file mode 100644
index 0000000..8c5c8b7
--- /dev/null
+++ b/yarns/900-remote.yarn
@@ -0,0 +1,59 @@
+<!--
+
+Copyright 2017 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 remote Ick
+
+## Authentication setup
+
+ IMPLEMENTS GIVEN an RSA key pair for token signing
+ vars['private_key_file'] = os.environ['ICK_PRIVATE_KEY']
+ assertTrue(os.path.exists(vars['private_key_file']))
+
+ IMPLEMENTS GIVEN an access token for scopes (.+)
+ scopes = get_next_match()
+ key = open(vars['private_key_file']).read()
+ argv = [
+ os.path.join(srcdir, 'create-token'),
+ scopes,
+ ]
+ token = cliapp.runcmd(argv, feed_stdin=key)
+ write('token.jwt', token)
+ vars['issuer'] = 'localhost'
+ vars['audience'] = 'localhost'
+
+## Controller configuration
+
+ IMPLEMENTS GIVEN controller config uses (\S+) at the state directory
+ vars['statedir'] = get_next_match()
+
+## Start and stop the controller
+
+ IMPLEMENTS GIVEN a running ick controller
+ vars['url'] = os.environ['ICK_URL']
+
+ IMPLEMENTS WHEN user stops ick controller
+ pass
+
+ IMPLEMENTS FINALLY stop ick controller
+ pass
+
+## Controller state inspection
+
+ IMPLEMENTS THEN controller state directory contains project (\S+)
+ pass
diff --git a/yarns/lib.py b/yarns/lib.py
index 960f2f7..0b95a81 100644
--- a/yarns/lib.py
+++ b/yarns/lib.py
@@ -79,7 +79,7 @@ def get(url, token):
headers = {
'Authorization': 'Bearer {}'.format(token),
}
- r = requests.get(url, headers=headers)
+ r = requests.get(url, headers=headers, verify=False)
return r.status_code, r.headers['Content-Type'], r.text
@@ -88,7 +88,7 @@ def post(url, body_text, token):
'Authorization': 'Bearer {}'.format(token),
'Content-Type': 'application/json',
}
- r = requests.post(url, headers=headers, data=body_text)
+ r = requests.post(url, headers=headers, data=body_text, verify=False)
return r.status_code, r.headers['Content-Type'], r.text
@@ -97,7 +97,7 @@ def put(url, body_text, token):
'Authorization': 'Bearer {}'.format(token),
'Content-Type': 'application/json',
}
- r = requests.put(url, headers=headers, data=body_text)
+ r = requests.put(url, headers=headers, data=body_text, verify=False)
return r.status_code, r.headers['Content-Type'], r.text
@@ -105,5 +105,5 @@ def delete(url, token):
headers = {
'Authorization': 'Bearer {}'.format(token),
}
- r = requests.delete(url, headers=headers)
+ r = requests.delete(url, headers=headers, verify=False)
return r.status_code, r.headers['Content-Type'], r.text