summaryrefslogtreecommitdiff
path: root/000.yarn
diff options
context:
space:
mode:
authorLars Wirzenius <liw@liw.fi>2017-03-04 20:14:33 +0200
committerLars Wirzenius <liw@liw.fi>2017-03-04 20:14:33 +0200
commit3b651fb14c1018d017b7fecd0be9a853094726d2 (patch)
tree6018b109bcf4f7662bf4061faaeae49e3c5339ee /000.yarn
parentf22175e01ed092acf408aff01af54005ea426268 (diff)
downloadgit.liw.fi-ruleset-tests-3b651fb14c1018d017b7fecd0be9a853094726d2.tar.gz
Make basic ian can clone scenario work
Diffstat (limited to '000.yarn')
-rw-r--r--000.yarn214
1 files changed, 52 insertions, 162 deletions
diff --git a/000.yarn b/000.yarn
index a726711..f78a27a 100644
--- a/000.yarn
+++ b/000.yarn
@@ -197,180 +197,70 @@ This is going to be a long scenario, but that's just so that we don't
need to re-do the setup. The setup consists of creating test users,
groups, and respositories.
-<!--
-
- SCENARIO create users, groups, repositories
- ASSUMING only the gitano-admin repository exists
- WHEN we run gitano whoami
- THEN we are in group gitano-admin
-
- WHEN we create user ian
- AND we create user olive
- AND we create user steven
- AND we create user gabriella
- AND we create user tina
- AND we create user ci
-
- WHEN we create group qvarndevs
- AND we create group qvarnguests
- AND we create group ops
- AND we create group otherdevs
- AND we create group staff
-
- WHEN we add ian to qvarndevs
- AND we add tina to qvarndevs
- AND we add gabriella to qvarnguests
- AND we add olive to ops
- AND we add tina to otherdevs
- AND we add steven to staff
-
- WHEN we create repository qvarn
- AND we create repository ops/secrets
- AND we create repository ops/ansible
- AND we create repository intrawiki
- AND we create repository otherproject
-
- WHEN we set qvarn config writers to qvarndevs
- AND we set qvarn config guests to qvarnguests
- AND we set qvarn config public to yes
- AND we set ops/secrets config writers to ops
- AND we set ops/ansible config writers to ops
- AND we set intrawiki config writers to staff
-
--->
-
-<!--
-
-Now we can start defining use cases.
-
-Use case: Ian makes a bugfix to Qvarn.
-
- WHEN ci clonse qvarn
- AND ian clones qvarn
- AND ian creates local qvarn branch ian/bugfix
- AND ian pushes qvarn
- AND ian merges ian/bugfix into master
- AND ian pushes qvarn
- THEN ci sees new commit in qvarn
-
-Use case: Ian makes a release.
-
- WHEN ian creates tag qvarn-1.0 in qvarn master
- AND ian pushes qvarn
- THEN ci sees tag qvarn-1.0 in qvarn
-
-Use case: Olive provisions a new Qvarn instance.
-
- WHEN olive clones ops/ansible
- AND olive clones ops/secrets
- AND olive creates local ops/ansible branch newthing
- AND olive pushes ops/ansible
- AND merges ops/ansible branch newthing to master
- AND olive pushes ops/ansible
-
-Use case: Steven updates internal wiki.
-
- WHEN ci clones intrawiki
- AND steven clones intrawiki
- AND steven makes a change in intrawiki master
- AND steven pushes intrawiki
- THEN ci sees a new commit in intrawiki
-
--->
-
-<!--
-
- FINALLY remove user ian
- AND remove user olive
- AND remove user steven
- AND remove user gabriella
- AND remove user tina
- AND remove user ci
-
- AND remove group qvarndevs
- AND remove group qvarnguests
- AND remove group ops
- AND remove group otherdevs
- AND remove group staff
-
- AND remove repository qvarn
- AND remove repository ops/secrets
- AND remove repository ops/ansible
- AND remove repository intrawiki
- AND remove repository otherproject
-
--->
+ SCENARIO ian can clone qvarn.git
+ WHEN admin creates user ian
+ AND admin creates group qvarndevs
+ AND admin adds ian to qvarndevs
+ AND admin creates repository qvarn
+ AND admin sets qvarn config writers to qvarndevs
+ THEN ian can clone qvarn
-# Scenario step implementations
-
- IMPLEMENTS ASSUMING only the gitano-admin repository exists
- output = helper.gitano('ls')
- print 'ls output:'
- print output
- lines = [x for x in output.splitlines() if 'gitano-admin' not in x]
- helper.assertEqual(lines, [])
-
- IMPLEMENTS WHEN we run gitano (.+)
- args = helper.get_next_match()
- whoami_output = helper.gitano(args)
- helper.set_variable('admin_whoami', whoami_output)
+ FINALLY admin removes things that were created
- IMPLEMENTS THEN we are in group gitano-admin
- whoami = helper.get_variable('admin_whoami')
- helper.assertIn('gitano-admin', whoami)
+# Scenario step implementations
- IMPLEMENTS WHEN we create user (\S+)
+ IMPLEMENTS WHEN admin creates user (\S+)
username = helper.get_next_match()
- helper.gitano('user add {} user@example.com Test User'.format(username))
-
- IMPLEMENTS WHEN we create group (\S+)
+ # FIXME: Create first, this is temporary
+ helper.append_to_list('users', username)
+ helper.gitano(None, 'user add {} {}@example.com Test {}'.format(username, username, username))
+ pubkey = helper.ssh_keygen(username)
+ helper.gitano(None, 'as {} sshkey add default'.format(username), stdin=pubkey)
+ print helper.gitano(username, 'whoami')
+
+ IMPLEMENTS WHEN admin creates group (\S+)
group = helper.get_next_match()
- helper.gitano('group add {} Test group'.format(group))
+ # FIXME: Create first, this is temporary
+ helper.append_to_list('groups', group)
+ helper.gitano(None, 'group add {} Test group'.format(group))
- IMPLEMENTS FINALLY remove user (\S+)
- username = helper.get_next_match()
- try:
- output = helper.gitano('user del {}'.format(username))
- except cliapp.AppException:
- pass
- else:
- last_line = output.splitlines()[-1]
- token = last_line.split()[-1]
- helper.gitano('user del {} {}'.format(username, token))
-
- IMPLEMENTS FINALLY remove group (\S+)
- group = helper.get_next_match()
- try:
- output = helper.gitano('group del {}'.format(group))
- except cliapp.AppException:
- pass
- else:
- last_line = output.splitlines()[-1]
- token = last_line.split()[-1]
- helper.gitano('group del {} {}'.format(group, token))
-
- IMPLEMENTS WHEN we add (\S+) to (\S+)
+ IMPLEMENTS WHEN admin adds (\S+) to (\S+)
user = helper.get_next_match()
group = helper.get_next_match()
- output = helper.gitano('group adduser {} {}'.format(group, user))
+ output = helper.gitano(None, 'group adduser {} {}'.format(group, user))
- IMPLEMENTS WHEN we create repository (\S+)
+ IMPLEMENTS WHEN admin creates repository (\S+)
repo = helper.get_next_match()
- output = helper.gitano('create {}'.format(repo))
+ # FIXME: Create first, this is temporary
+ helper.append_to_list('repositories', repo)
+ output = helper.gitano(None, 'create {}'.format(repo))
- IMPLEMENTS FINALLY remove repository (\S+)
+ IMPLEMENTS THEN (\S+) can clone (\S+)
+ user = helper.get_next_match()
repo = helper.get_next_match()
- try:
- output = helper.gitano('destroy {}'.format(repo))
- except cliapp.AppException:
- pass
- else:
- last_line = output.splitlines()[-1]
- token = last_line.split()[-1]
- helper.gitano('destroy {} {}'.format(repo, token))
-
- IMPLEMENTS WHEN we set (\S+) config (\S+) to (\S+)
+ url = helper.repo_ssh_url(repo)
+ dirname = '{}_{}'.format(user, repo)
+
+ print 'user:', user
+ print 'repo:', repo
+ print 'url:', url
+ print helper.gitano(user, 'whoami')
+
+ print helper.git_as(user, ['clone', url, dirname])
+
+ IMPLEMENTS WHEN admin sets (\S+) config (\S+) to (\S+)
repo = helper.get_next_match()
key = helper.get_next_match()
value = helper.get_next_match()
- helper.gitano('config {} set {} {}'.format(repo, key, value))
+ helper.gitano(None, 'config {} set {} {}'.format(repo, key, value))
+
+ IMPLEMENTS FINALLY admin removes things that were created
+ def iter(var, prefix):
+ items = helper.get_variable(var, [])
+ with open('/tmp/yarn.out', 'a') as f:
+ f.write('%s: %r\n' % (var, items))
+ for item in items:
+ helper.gitano_confirm_with_token(prefix, item)
+ iter('users', 'user del')
+ iter('groups', 'group del')
+ iter('repositories', 'destroy')