blob: 6ea0b4425016a2bd61d91dff0d72547debace968 (
plain)
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
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
|
#!/bin/bash
# Copyright (C) 2015 Gauvain Pocentek <gauvain@pocentek.net>
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Lesser 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 Lesser General Public License for more details.
#
# You should have received a copy of the GNU Lesser General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
cleanup() {
rm -f /tmp/python-gitlab.cfg
docker kill gitlab-test >/dev/null 2>&1
docker rm gitlab-test >/dev/null 2>&1
deactivate || true
rm -rf $VENV
}
trap cleanup EXIT
PY_VER=2
while getopts :p: opt "$@"; do
case $opt in
p)
PY_VER=$OPTARG;;
*)
echo "Unknown option: $opt"
exit 1;;
esac
done
case $PY_VER in
2) VENV_CMD=virtualenv;;
3) VENV_CMD=pyvenv;;
*)
echo "Wrong python version (2 or 3)"
exit 1;;
esac
docker run --name gitlab-test --detach --publish 8080:80 --publish 2222:22 genezys/gitlab:latest >/dev/null 2>&1
LOGIN='root'
PASSWORD='5iveL!fe'
CONFIG=/tmp/python-gitlab.cfg
GITLAB="gitlab --config-file $CONFIG"
VENV=$(pwd)/.venv
$VENV_CMD $VENV
. $VENV/bin/activate
pip install -rrequirements.txt
pip install -e .
GREEN='\033[0;32m'
NC='\033[0m'
OK="echo -e ${GREEN}OK${NC}"
echo -n "Waiting for gitlab to come online... "
I=0
while :; do
sleep 5
curl -s http://localhost:8080/users/sign_in 2>/dev/null | grep -q "GitLab Community Edition" && break
let I=I+5
[ $I -eq 120 ] && exit 1
done
sleep 5
$OK
# Get the token
TOKEN=$(curl -s http://localhost:8080/api/v3/session \
-X POST \
--data "login=$LOGIN&password=$PASSWORD" \
| python -c 'import sys, json; print(json.load(sys.stdin)["private_token"])')
cat > $CONFIG << EOF
[global]
default = local
timeout = 2
[local]
url = http://localhost:8080
private_token = $TOKEN
EOF
echo "Config file content ($CONFIG):"
cat $CONFIG
# NOTE(gpocentek): the first call might fail without a little delay
sleep 10
set -e
echo -n "Testing project creation... "
PROJECT_ID=$($GITLAB project create --name test-project1 | grep ^id: | cut -d' ' -f2)
$GITLAB project list | grep -q test-project1
$OK
echo -n "Testing project update... "
$GITLAB project update --id $PROJECT_ID --description "My New Description"
$OK
echo -n "Testing user creation... "
USER_ID=$($GITLAB user create --email fake@email.com --username user1 --name "User One" --password fakepassword | grep ^id: | cut -d' ' -f2)
$OK
echo -n "Testing verbose output... "
$GITLAB -v user list | grep -q avatar-url
$OK
echo -n "Testing CLI args not in output... "
$GITLAB -v user list | grep -qv config-file
$OK
echo -n "Testing adding member to a project... "
$GITLAB project-member create --project-id $PROJECT_ID --user-id $USER_ID --access-level 40 >/dev/null 2>&1
$OK
echo -n "Creating a file... "
$GITLAB project-file create --project-id $PROJECT_ID --file-path README --branch-name master --content "CONTENT" --commit-message "Initial commit" >/dev/null 2>&1
$OK
echo -n "Creating a branch... "
$GITLAB project-branch create --project-id $PROJECT_ID --branch-name branch1 --ref master >/dev/null 2>&1
$OK
echo -n "Deleting a branch... "
$GITLAB project-branch delete --project-id $PROJECT_ID --name branch1 >/dev/null 2>&1
$OK
echo -n "Testing project deletion... "
$GITLAB project delete --id $PROJECT_ID
$OK
|