diff options
Diffstat (limited to '000.yarn')
-rw-r--r-- | 000.yarn | 214 |
1 files changed, 52 insertions, 162 deletions
@@ -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') |