1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
|
Test suite for ACL on git.liw.fi
================================
Introduction
------------
This is a test suite for my Gitano ACL setup on git.liw.fi. It is run
against either the real or a test instance of the setup. It requires
the person running it to have admin access on the Gitano instance,
so the tests can create and remove users and repositories.
Pre-requisites
--------------
Yarn must be run with `--env` used to set the environment variables
`GITANO` and `GITHOST`. `GITANO` must be the Unix user for the
Gitano instance (typically `git`), and `GITHOST` must be the address
of the host (IP address or domain name).
The person running this test suite must be able to log in to the
Gitano instance using their normal ssh key. In other words,
`ssh "$GITANO@$GITHOST" whoami` must work.
See the `check` script for details on how to invoke yarn for this test
suite.
The test suite will create a user called `tstusr`, and remove it
after the test suite. The user may get created and removed multiple
times. If the user existed beforehand, it will be removed.
User creation
-------------
The admin must be able to create and remove a user.
SCENARIO admin can create and remove a user
ASSUMING no tstusr user exists on server
GIVEN an ssh key for tstusr
WHEN admin creates user tstusr
THEN user tstusr exists
WHEN admin removes user tstusr
THEN user tstusr doesn't exist
FINALLY remove user tstusr on server
Implementations
---------------
Verify that there are no test related users on the server. If there
is, something's gone wrong in a previous run, and things should be
cleaned up manually. Or another run of the test suite is going on, and
we shouldn't interfere with that.
We split up the various assumptions so the implementation code
doesn't make assumptions on user names, etc.
IMPLEMENTS ASSUMING no (\S+) user exists on server
if user_exists "$MATCH_1"
then
die "User $MATCH_1 exists on server, but shouldn't"
fi
Create an ssh key for a user. This is generated for a scenario,
then discarded.
IMPLEMENTS GIVEN an ssh key for (\S+)
ssh-keygen -f "$DATADIR/$MATCH_1.key" -N ''
Create a user on the server. Only an admin should be able to do
this, but anyone can try. Note that since we only care about
usernames, we invent the real name and e-mail address.
IMPLEMENTS WHEN (\S+) creates user (\S+)
run_gitano_as "$MATCH_1" user add "$MATCH_2" name foo@example.com
Verify a user exists on the server.
IMPLEMENTS THEN user (\S+) exists
user_exists "$MATCH_1"
Remove a user.
IMPLEMENTS WHEN (\S+) removes user (\S+)
user_del "$MATCH_1" "$MATCH_2"
Verify a user doesn't exist on the server.
IMPLEMENTS THEN user (\S+) doesn't exist
if user_exists "$MATCH_1"
then
die "User $MATCH_1 exists on server, but shouldn't"
fi
Clean up user.
IMPLEMENTS FINALLY remove user (\S+) on server
user_del admin "$MATCH_1"
|