Blob


1 .include "../../got-version.mk"
3 REGRESS_TARGETS=test_repo_read test_repo_read_group \
4 test_repo_read_denied_user test_repo_read_denied_group \
5 test_repo_read_bad_user test_repo_read_bad_group \
6 test_repo_write test_repo_write_empty test_request_bad \
7 test_repo_write_protected test_repo_write_readonly \
8 test_email_notification test_http_notification \
9 test_git_interop test_email_and_http_notification
10 NOOBJ=Yes
11 CLEANFILES=gotd.conf
13 .PHONY: ensure_root prepare_test_repo check_test_repo start_gotd
15 GOTD_TEST_ROOT=/tmp
16 GOTD_DEVUSER?=gotdev
17 GOTD_DEVUSER_HOME!=getent passwd $(GOTD_DEVUSER) | cut -d: -f6
18 GOTD_TEST_REPO!?=mktemp -d "$(GOTD_TEST_ROOT)/gotd-test-repo-XXXXXXXXXX"
19 GOTD_TEST_REPO_NAME=test-repo
20 GOTD_TEST_REPO_URL=ssh://${GOTD_DEVUSER}@127.0.0.1/$(GOTD_TEST_REPO_NAME)
21 GOTD_TEST_SMTP_PORT=2525
22 GOTD_TEST_HTTP_PORT=8000
24 GOTD_TEST_USER?=${DOAS_USER}
25 .if empty(GOTD_TEST_USER)
26 GOTD_TEST_USER=${SUDO_USER}
27 .endif
28 .if empty(GOTD_TEST_USER)
29 GOTD_TEST_USER=${USER}
30 .endif
31 GOTD_TEST_USER_HOME!=getent passwd $(GOTD_TEST_USER) | cut -d: -f6
33 # gotd.conf parameters
34 GOTD_USER?=got
35 GOTD_SOCK=${GOTD_DEVUSER_HOME}/gotd.sock
37 .if "${GOT_RELEASE}" == "Yes"
38 PREFIX ?= /usr/local
39 BINDIR ?= ${PREFIX}/sbin
40 .else
41 PREFIX ?= ${GOTD_TEST_USER_HOME}
42 BINDIR ?= ${PREFIX}/bin
43 .endif
45 GOTD_START_CMD?=env ${GOTD_ENV} $(BINDIR)/gotd -vv -f $(PWD)/gotd.conf
46 GOTD_STOP_CMD?=$(BINDIR)/gotctl -f $(GOTD_SOCK) stop
47 GOTD_TRAP=trap "$(GOTD_STOP_CMD)" HUP INT QUIT PIPE TERM
49 GOTD_ENV=GOT_NOTIFY_EMAIL_TIMEOUT=1
51 GOTD_TEST_ENV=GOTD_TEST_ROOT=$(GOTD_TEST_ROOT) \
52 GOTD_TEST_REPO_URL=$(GOTD_TEST_REPO_URL) \
53 GOTD_TEST_REPO_NAME=$(GOTD_TEST_REPO_NAME) \
54 GOTD_TEST_REPO=$(GOTD_TEST_REPO) \
55 GOTD_SOCK=$(GOTD_SOCK) \
56 GOTD_DEVUSER=$(GOTD_DEVUSER) \
57 GOTD_USER=$(GOTD_USER) \
58 GOTD_CONF=$(PWD)/gotd.conf \
59 GOTD_TEST_SMTP_PORT=$(GOTD_TEST_SMTP_PORT) \
60 GOTD_TEST_HTTP_PORT=$(GOTD_TEST_HTTP_PORT) \
61 HOME=$(GOTD_TEST_USER_HOME) \
62 PATH=$(GOTD_TEST_USER_HOME)/bin:$(PATH)
64 ensure_root:
65 @if [[ `id -u` -ne 0 ]]; then \
66 echo gotd test suite must be started by root >&2; \
67 false; \
68 fi ; \
69 if [[ "$(GOTD_TEST_USER)" = "root" ]]; then \
70 echo GOTD_TEST_USER must be a non-root user >&2; \
71 false; \
72 fi
74 start_gotd_ro: ensure_root
75 @echo 'listen on "$(GOTD_SOCK)"' > $(PWD)/gotd.conf
76 @echo "user $(GOTD_USER)" >> $(PWD)/gotd.conf
77 @echo 'repository "test-repo" {' >> $(PWD)/gotd.conf
78 @echo ' path "$(GOTD_TEST_REPO)"' >> $(PWD)/gotd.conf
79 @echo ' permit ro $(GOTD_DEVUSER)' >> $(PWD)/gotd.conf
80 @echo "}" >> $(PWD)/gotd.conf
81 @$(GOTD_TRAP); $(GOTD_START_CMD)
82 @$(GOTD_TRAP); sleep .5
84 start_gotd_implicit_ro: ensure_root
85 @echo 'listen on "$(GOTD_SOCK)"' > $(PWD)/gotd.conf
86 @echo "user $(GOTD_USER)" >> $(PWD)/gotd.conf
87 @echo 'repository "test-repo" {' >> $(PWD)/gotd.conf
88 @echo ' path "$(GOTD_TEST_REPO)"' >> $(PWD)/gotd.conf
89 @echo "}" >> $(PWD)/gotd.conf
90 @$(GOTD_TRAP); $(GOTD_START_CMD)
91 @$(GOTD_TRAP); sleep .5
93 start_gotd_ro_group: ensure_root
94 @echo 'listen on "$(GOTD_SOCK)"' > $(PWD)/gotd.conf
95 @echo "user $(GOTD_USER)" >> $(PWD)/gotd.conf
96 @echo 'repository "test-repo" {' >> $(PWD)/gotd.conf
97 @echo ' path "$(GOTD_TEST_REPO)"' >> $(PWD)/gotd.conf
98 @echo ' permit ro :$(GOTD_DEVUSER)' >> $(PWD)/gotd.conf
99 @echo "}" >> $(PWD)/gotd.conf
100 @$(GOTD_TRAP); $(GOTD_START_CMD)
101 @$(GOTD_TRAP); sleep .5
103 # try a permit rule followed by a deny rule; last matched rule wins
104 start_gotd_ro_denied_user: ensure_root
105 @echo 'listen on "$(GOTD_SOCK)"' > $(PWD)/gotd.conf
106 @echo "user $(GOTD_USER)" >> $(PWD)/gotd.conf
107 @echo 'repository "test-repo" {' >> $(PWD)/gotd.conf
108 @echo ' path "$(GOTD_TEST_REPO)"' >> $(PWD)/gotd.conf
109 @echo ' permit ro $(GOTD_DEVUSER)' >> $(PWD)/gotd.conf
110 @echo ' deny $(GOTD_DEVUSER)' >> $(PWD)/gotd.conf
111 @echo "}" >> $(PWD)/gotd.conf
112 @$(GOTD_TRAP); $(GOTD_START_CMD)
113 @$(GOTD_TRAP); sleep .5
115 # try a permit rule followed by a deny rule; last matched rule wins
116 start_gotd_ro_denied_group: ensure_root
117 @echo 'listen on "$(GOTD_SOCK)"' > $(PWD)/gotd.conf
118 @echo "user $(GOTD_USER)" >> $(PWD)/gotd.conf
119 @echo 'repository "test-repo" {' >> $(PWD)/gotd.conf
120 @echo ' path "$(GOTD_TEST_REPO)"' >> $(PWD)/gotd.conf
121 @echo ' permit ro $(GOTD_DEVUSER)' >> $(PWD)/gotd.conf
122 @echo ' deny :$(GOTD_DEVUSER)' >> $(PWD)/gotd.conf
123 @echo "}" >> $(PWD)/gotd.conf
124 @$(GOTD_TRAP); $(GOTD_START_CMD)
125 @$(GOTD_TRAP); sleep .5
127 # $GOTD_DEVUSER should not equal $GOTD_USER
128 start_gotd_ro_bad_user: ensure_root
129 @echo 'listen on "$(GOTD_SOCK)"' > $(PWD)/gotd.conf
130 @echo "user $(GOTD_USER)" >> $(PWD)/gotd.conf
131 @echo 'repository "test-repo" {' >> $(PWD)/gotd.conf
132 @echo ' path "$(GOTD_TEST_REPO)"' >> $(PWD)/gotd.conf
133 @echo ' permit ro $(GOTD_USER)' >> $(PWD)/gotd.conf
134 @echo "}" >> $(PWD)/gotd.conf
135 @$(GOTD_TRAP); $(GOTD_START_CMD)
136 @$(GOTD_TRAP); sleep .5
138 # $GOTD_DEVUSER should not be in group wheel
139 start_gotd_ro_bad_group: ensure_root
140 @echo 'listen on "$(GOTD_SOCK)"' > $(PWD)/gotd.conf
141 @echo "user $(GOTD_USER)" >> $(PWD)/gotd.conf
142 @echo 'repository "test-repo" {' >> $(PWD)/gotd.conf
143 @echo ' path "$(GOTD_TEST_REPO)"' >> $(PWD)/gotd.conf
144 @echo ' permit ro :wheel' >> $(PWD)/gotd.conf
145 @echo "}" >> $(PWD)/gotd.conf
146 @$(GOTD_TRAP); $(GOTD_START_CMD)
147 @$(GOTD_TRAP); sleep .5
149 start_gotd_rw: ensure_root
150 @echo 'listen on "$(GOTD_SOCK)"' > $(PWD)/gotd.conf
151 @echo "user $(GOTD_USER)" >> $(PWD)/gotd.conf
152 @echo 'repository "test-repo" {' >> $(PWD)/gotd.conf
153 @echo ' path "$(GOTD_TEST_REPO)"' >> $(PWD)/gotd.conf
154 @echo ' permit rw $(GOTD_DEVUSER)' >> $(PWD)/gotd.conf
155 @echo "}" >> $(PWD)/gotd.conf
156 @$(GOTD_TRAP); $(GOTD_START_CMD)
157 @$(GOTD_TRAP); sleep .5
159 start_gotd_rw_protected: ensure_root
160 @echo 'listen on "$(GOTD_SOCK)"' > $(PWD)/gotd.conf
161 @echo "user $(GOTD_USER)" >> $(PWD)/gotd.conf
162 @echo 'repository "test-repo" {' >> $(PWD)/gotd.conf
163 @echo ' path "$(GOTD_TEST_REPO)"' >> $(PWD)/gotd.conf
164 @echo ' permit rw $(GOTD_DEVUSER)' >> $(PWD)/gotd.conf
165 @echo ' protect branch "foo"' >> $(PWD)/gotd.conf
166 @echo ' protect tag namespace "refs/tags/"' >> $(PWD)/gotd.conf
167 @echo ' protect branch "refs/heads/main"' >> $(PWD)/gotd.conf
168 @echo "}" >> $(PWD)/gotd.conf
169 @$(GOTD_TRAP); $(GOTD_START_CMD)
170 @$(GOTD_TRAP); sleep .5
172 start_gotd_email_notification: ensure_root
173 @echo 'listen on "$(GOTD_SOCK)"' > $(PWD)/gotd.conf
174 @echo "user $(GOTD_USER)" >> $(PWD)/gotd.conf
175 @echo 'repository "test-repo" {' >> $(PWD)/gotd.conf
176 @echo ' path "$(GOTD_TEST_REPO)"' >> $(PWD)/gotd.conf
177 @echo ' permit rw $(GOTD_DEVUSER)' >> $(PWD)/gotd.conf
178 @echo ' notify {' >> $(PWD)/gotd.conf
179 @echo -n ' email to ${GOTD_DEVUSER}' >> $(PWD)/gotd.conf
180 @echo ' relay 127.0.0.1 port ${GOTD_TEST_SMTP_PORT}' >> $(PWD)/gotd.conf
181 @echo " }" >> $(PWD)/gotd.conf
182 @echo "}" >> $(PWD)/gotd.conf
183 @$(GOTD_TRAP); $(GOTD_START_CMD)
184 @$(GOTD_TRAP); sleep .5
186 start_gotd_http_notification: ensure_root
187 @echo 'listen on "$(GOTD_SOCK)"' > $(PWD)/gotd.conf
188 @echo "user $(GOTD_USER)" >> $(PWD)/gotd.conf
189 @echo 'repository "test-repo" {' >> $(PWD)/gotd.conf
190 @echo ' path "$(GOTD_TEST_REPO)"' >> $(PWD)/gotd.conf
191 @echo ' permit rw $(GOTD_DEVUSER)' >> $(PWD)/gotd.conf
192 @echo ' notify {' >> $(PWD)/gotd.conf
193 @echo ' url "http://localhost:${GOTD_TEST_HTTP_PORT}/" user flan password "password" insecure' >> $(PWD)/gotd.conf
194 @echo " }" >> $(PWD)/gotd.conf
195 @echo "}" >> $(PWD)/gotd.conf
196 @$(GOTD_TRAP); $(GOTD_START_CMD)
197 @$(GOTD_TRAP); sleep .5
199 start_gotd_email_and_http_notification: ensure_root
200 @echo 'listen on "$(GOTD_SOCK)"' > $(PWD)/gotd.conf
201 @echo "user $(GOTD_USER)" >> $(PWD)/gotd.conf
202 @echo 'repository "test-repo" {' >> $(PWD)/gotd.conf
203 @echo ' path "$(GOTD_TEST_REPO)"' >> $(PWD)/gotd.conf
204 @echo ' permit rw $(GOTD_DEVUSER)' >> $(PWD)/gotd.conf
205 @echo ' notify {' >> $(PWD)/gotd.conf
206 @echo ' url "http://localhost:${GOTD_TEST_HTTP_PORT}/" user flan password "password" insecure' >> $(PWD)/gotd.conf
207 @echo -n ' email to ${GOTD_DEVUSER}' >> $(PWD)/gotd.conf
208 @echo ' relay 127.0.0.1 port ${GOTD_TEST_SMTP_PORT}' >> $(PWD)/gotd.conf
209 @echo " }" >> $(PWD)/gotd.conf
210 @echo "}" >> $(PWD)/gotd.conf
211 @$(GOTD_TRAP); $(GOTD_START_CMD)
212 @$(GOTD_TRAP); sleep .5
214 prepare_test_repo: ensure_root
215 @chown ${GOTD_USER} "${GOTD_TEST_REPO}"
216 @su -m ${GOTD_USER} -c 'env $(GOTD_TEST_ENV) sh ./prepare_test_repo.sh'
218 prepare_test_repo_empty: ensure_root
219 @chown ${GOTD_USER} "${GOTD_TEST_REPO}"
220 @su -m ${GOTD_USER} -c 'env $(GOTD_TEST_ENV) sh ./prepare_test_repo.sh 1'
222 test_repo_read: prepare_test_repo start_gotd_ro
223 @-$(GOTD_TRAP); su ${GOTD_TEST_USER} -c \
224 'env $(GOTD_TEST_ENV) sh ./repo_read.sh'
225 @$(GOTD_STOP_CMD) 2>/dev/null
226 @su -m ${GOTD_USER} -c 'env $(GOTD_TEST_ENV) sh ./check_test_repo.sh'
228 test_repo_read_group: prepare_test_repo start_gotd_ro_group
229 @-$(GOTD_TRAP); su ${GOTD_TEST_USER} -c \
230 'env $(GOTD_TEST_ENV) sh ./repo_read.sh'
231 @$(GOTD_STOP_CMD) 2>/dev/null
232 @su -m ${GOTD_USER} -c 'env $(GOTD_TEST_ENV) sh ./check_test_repo.sh'
234 test_repo_read_denied_user: prepare_test_repo start_gotd_ro_denied_user
235 @-$(GOTD_TRAP); su ${GOTD_TEST_USER} -c \
236 'env $(GOTD_TEST_ENV) sh ./repo_read_access_denied.sh'
237 @$(GOTD_STOP_CMD) 2>/dev/null
238 @su -m ${GOTD_USER} -c 'env $(GOTD_TEST_ENV) sh ./check_test_repo.sh'
240 test_repo_read_denied_group: prepare_test_repo start_gotd_ro_denied_group
241 @-$(GOTD_TRAP); su ${GOTD_TEST_USER} -c \
242 'env $(GOTD_TEST_ENV) sh ./repo_read_access_denied.sh'
243 @$(GOTD_STOP_CMD) 2>/dev/null
244 @su -m ${GOTD_USER} -c 'env $(GOTD_TEST_ENV) sh ./check_test_repo.sh'
246 test_repo_read_bad_user: prepare_test_repo start_gotd_ro_bad_user
247 @-$(GOTD_TRAP); su ${GOTD_TEST_USER} -c \
248 'env $(GOTD_TEST_ENV) sh ./repo_read_access_denied.sh'
249 @$(GOTD_STOP_CMD) 2>/dev/null
250 @su -m ${GOTD_USER} -c 'env $(GOTD_TEST_ENV) sh ./check_test_repo.sh'
252 test_repo_read_bad_group: prepare_test_repo start_gotd_ro_bad_group
253 @-$(GOTD_TRAP); su ${GOTD_TEST_USER} -c \
254 'env $(GOTD_TEST_ENV) sh ./repo_read_access_denied.sh'
255 @$(GOTD_STOP_CMD) 2>/dev/null
256 @su -m ${GOTD_USER} -c 'env $(GOTD_TEST_ENV) sh ./check_test_repo.sh'
258 test_repo_write: prepare_test_repo start_gotd_rw
259 @-$(GOTD_TRAP); su ${GOTD_TEST_USER} -c \
260 'env $(GOTD_TEST_ENV) sh ./repo_write.sh'
261 @$(GOTD_STOP_CMD) 2>/dev/null
262 @su -m ${GOTD_USER} -c 'env $(GOTD_TEST_ENV) sh ./check_test_repo.sh'
264 test_repo_write_empty: prepare_test_repo_empty start_gotd_rw
265 @-$(GOTD_TRAP); su ${GOTD_TEST_USER} -c \
266 'env $(GOTD_TEST_ENV) sh ./repo_write_empty.sh'
267 @$(GOTD_STOP_CMD) 2>/dev/null
268 @su -m ${GOTD_USER} -c 'env $(GOTD_TEST_ENV) sh ./check_test_repo.sh'
270 test_repo_write_protected: prepare_test_repo start_gotd_rw_protected
271 @-$(GOTD_TRAP); su ${GOTD_TEST_USER} -c \
272 'env $(GOTD_TEST_ENV) sh ./repo_write_protected.sh'
273 @$(GOTD_STOP_CMD) 2>/dev/null
274 @su -m ${GOTD_USER} -c 'env $(GOTD_TEST_ENV) sh ./check_test_repo.sh'
276 test_repo_write_readonly: prepare_test_repo_empty start_gotd_implicit_ro
277 @-$(GOTD_TRAP); su ${GOTD_TEST_USER} -c \
278 'env $(GOTD_TEST_ENV) sh ./repo_write_readonly.sh'
279 @$(GOTD_STOP_CMD) 2>/dev/null
280 @su -m ${GOTD_USER} -c 'env $(GOTD_TEST_ENV) sh ./check_test_repo.sh'
282 test_request_bad: prepare_test_repo_empty start_gotd_ro
283 @-$(GOTD_TRAP); su -m ${GOTD_TEST_USER} -c \
284 'env $(GOTD_TEST_ENV) sh ./request_bad.sh'
285 @$(GOTD_STOP_CMD) 2>/dev/null
287 test_email_notification: prepare_test_repo start_gotd_email_notification
288 @-$(GOTD_TRAP); su -m ${GOTD_TEST_USER} -c \
289 'env $(GOTD_TEST_ENV) sh ./email_notification.sh'
290 @$(GOTD_STOP_CMD) 2>/dev/null
292 test_http_notification: prepare_test_repo start_gotd_http_notification
293 @-$(GOTD_TRAP); su -m ${GOTD_TEST_USER} -c \
294 'env $(GOTD_TEST_ENV) sh ./http_notification.sh'
295 @$(GOTD_STOP_CMD) 2>/dev/null
297 test_email_and_http_notification: prepare_test_repo start_gotd_email_and_http_notification
298 @-$(GOTD_TRAP); su -m ${GOTD_TEST_USER} -c \
299 'env $(GOTD_TEST_ENV) sh ./http_notification.sh test_file_changed'
300 @-$(GOTD_TRAP); su -m ${GOTD_TEST_USER} -c \
301 'env $(GOTD_TEST_ENV) sh ./email_notification.sh test_file_changed'
302 @$(GOTD_STOP_CMD) 2>/dev/null
304 test_git_interop: prepare_test_repo start_gotd_rw
305 @-$(GOTD_TRAP); su ${GOTD_TEST_USER} -c \
306 'env $(GOTD_TEST_ENV) sh ./test_git_interop.sh'
307 @$(GOTD_STOP_CMD) 2>/dev/null
308 @su -m ${GOTD_USER} -c 'env $(GOTD_TEST_ENV) sh ./check_test_repo.sh'
310 .include <bsd.regress.mk>