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_email_notification \
8 test_http_notification
9 NOOBJ=Yes
10 CLEANFILES=gotd.conf
12 .PHONY: ensure_root prepare_test_repo check_test_repo start_gotd
14 GOTD_TEST_ROOT=/tmp
15 GOTD_DEVUSER?=gotdev
16 GOTD_DEVUSER_HOME!=userinfo $(GOTD_DEVUSER) | awk '/^dir/ {print $$2}'
17 GOTD_TEST_REPO!?=mktemp -d "$(GOTD_TEST_ROOT)/gotd-test-repo-XXXXXXXXXX"
18 GOTD_TEST_REPO_NAME=test-repo
19 GOTD_TEST_REPO_URL=ssh://${GOTD_DEVUSER}@127.0.0.1/$(GOTD_TEST_REPO_NAME)
20 GOTD_TEST_SMTP_PORT=2525
21 GOTD_TEST_HTTP_PORT=8000
23 GOTD_TEST_USER?=${DOAS_USER}
24 .if empty(GOTD_TEST_USER)
25 GOTD_TEST_USER=${SUDO_USER}
26 .endif
27 .if empty(GOTD_TEST_USER)
28 GOTD_TEST_USER=${USER}
29 .endif
30 GOTD_TEST_USER_HOME!=userinfo $(GOTD_TEST_USER) | awk '/^dir/ {print $$2}'
32 # gotd.conf parameters
33 GOTD_USER?=got
34 GOTD_SOCK=${GOTD_DEVUSER_HOME}/gotd.sock
36 .if "${GOT_RELEASE}" == "Yes"
37 PREFIX ?= /usr/local
38 BINDIR ?= ${PREFIX}/bin
39 .else
40 PREFIX ?= ${GOTD_TEST_USER_HOME}
41 BINDIR ?= ${PREFIX}/bin
42 .endif
44 GOTD_START_CMD?=env ${GOTD_ENV} $(BINDIR)/gotd -vv -f $(PWD)/gotd.conf
45 GOTD_STOP_CMD?=$(BINDIR)/gotctl -f $(GOTD_SOCK) stop
46 GOTD_TRAP=trap "$(GOTD_STOP_CMD)" HUP INT QUIT PIPE TERM
48 GOTD_ENV=GOT_NOTIFY_EMAIL_TIMEOUT=1
50 GOTD_TEST_ENV=GOTD_TEST_ROOT=$(GOTD_TEST_ROOT) \
51 GOTD_TEST_REPO_URL=$(GOTD_TEST_REPO_URL) \
52 GOTD_TEST_REPO_NAME=$(GOTD_TEST_REPO_NAME) \
53 GOTD_TEST_REPO=$(GOTD_TEST_REPO) \
54 GOTD_SOCK=$(GOTD_SOCK) \
55 GOTD_DEVUSER=$(GOTD_DEVUSER) \
56 GOTD_USER=$(GOTD_USER) \
57 GOTD_TEST_SMTP_PORT=$(GOTD_TEST_SMTP_PORT) \
58 GOTD_TEST_HTTP_PORT=$(GOTD_TEST_HTTP_PORT) \
59 HOME=$(GOTD_TEST_USER_HOME) \
60 PATH=$(GOTD_TEST_USER_HOME)/bin:$(PATH)
62 ensure_root:
63 @if [[ `id -u` -ne 0 ]]; then \
64 echo gotd test suite must be started by root >&2; \
65 false; \
66 fi ; \
67 if [[ "$(GOTD_TEST_USER)" = "root" ]]; then \
68 echo GOTD_TEST_USER must be a non-root user >&2; \
69 false; \
70 fi
72 start_gotd_ro: ensure_root
73 @echo 'listen on "$(GOTD_SOCK)"' > $(PWD)/gotd.conf
74 @echo "user $(GOTD_USER)" >> $(PWD)/gotd.conf
75 @echo 'repository "test-repo" {' >> $(PWD)/gotd.conf
76 @echo ' path "$(GOTD_TEST_REPO)"' >> $(PWD)/gotd.conf
77 @echo ' permit ro $(GOTD_DEVUSER)' >> $(PWD)/gotd.conf
78 @echo "}" >> $(PWD)/gotd.conf
79 @$(GOTD_TRAP); $(GOTD_START_CMD)
80 @$(GOTD_TRAP); sleep .5
82 start_gotd_ro_group: ensure_root
83 @echo 'listen on "$(GOTD_SOCK)"' > $(PWD)/gotd.conf
84 @echo "user $(GOTD_USER)" >> $(PWD)/gotd.conf
85 @echo 'repository "test-repo" {' >> $(PWD)/gotd.conf
86 @echo ' path "$(GOTD_TEST_REPO)"' >> $(PWD)/gotd.conf
87 @echo ' permit ro :$(GOTD_DEVUSER)' >> $(PWD)/gotd.conf
88 @echo "}" >> $(PWD)/gotd.conf
89 @$(GOTD_TRAP); $(GOTD_START_CMD)
90 @$(GOTD_TRAP); sleep .5
92 # try a permit rule followed by a deny rule; last matched rule wins
93 start_gotd_ro_denied_user: 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 ' deny $(GOTD_DEVUSER)' >> $(PWD)/gotd.conf
100 @echo "}" >> $(PWD)/gotd.conf
101 @$(GOTD_TRAP); $(GOTD_START_CMD)
102 @$(GOTD_TRAP); sleep .5
104 # try a permit rule followed by a deny rule; last matched rule wins
105 start_gotd_ro_denied_group: ensure_root
106 @echo 'listen on "$(GOTD_SOCK)"' > $(PWD)/gotd.conf
107 @echo "user $(GOTD_USER)" >> $(PWD)/gotd.conf
108 @echo 'repository "test-repo" {' >> $(PWD)/gotd.conf
109 @echo ' path "$(GOTD_TEST_REPO)"' >> $(PWD)/gotd.conf
110 @echo ' permit ro $(GOTD_DEVUSER)' >> $(PWD)/gotd.conf
111 @echo ' deny :$(GOTD_DEVUSER)' >> $(PWD)/gotd.conf
112 @echo "}" >> $(PWD)/gotd.conf
113 @$(GOTD_TRAP); $(GOTD_START_CMD)
114 @$(GOTD_TRAP); sleep .5
116 # $GOTD_DEVUSER should not equal $GOTD_USER
117 start_gotd_ro_bad_user: ensure_root
118 @echo 'listen on "$(GOTD_SOCK)"' > $(PWD)/gotd.conf
119 @echo "user $(GOTD_USER)" >> $(PWD)/gotd.conf
120 @echo 'repository "test-repo" {' >> $(PWD)/gotd.conf
121 @echo ' path "$(GOTD_TEST_REPO)"' >> $(PWD)/gotd.conf
122 @echo ' permit ro $(GOTD_USER)' >> $(PWD)/gotd.conf
123 @echo "}" >> $(PWD)/gotd.conf
124 @$(GOTD_TRAP); $(GOTD_START_CMD)
125 @$(GOTD_TRAP); sleep .5
127 # $GOTD_DEVUSER should not be in group wheel
128 start_gotd_ro_bad_group: 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 :wheel' >> $(PWD)/gotd.conf
134 @echo "}" >> $(PWD)/gotd.conf
135 @$(GOTD_TRAP); $(GOTD_START_CMD)
136 @$(GOTD_TRAP); sleep .5
138 start_gotd_rw: ensure_root
139 @echo 'listen on "$(GOTD_SOCK)"' > $(PWD)/gotd.conf
140 @echo "user $(GOTD_USER)" >> $(PWD)/gotd.conf
141 @echo 'repository "test-repo" {' >> $(PWD)/gotd.conf
142 @echo ' path "$(GOTD_TEST_REPO)"' >> $(PWD)/gotd.conf
143 @echo ' permit rw $(GOTD_DEVUSER)' >> $(PWD)/gotd.conf
144 @echo "}" >> $(PWD)/gotd.conf
145 @$(GOTD_TRAP); $(GOTD_START_CMD)
146 @$(GOTD_TRAP); sleep .5
148 start_gotd_rw_protected: ensure_root
149 @echo 'listen on "$(GOTD_SOCK)"' > $(PWD)/gotd.conf
150 @echo "user $(GOTD_USER)" >> $(PWD)/gotd.conf
151 @echo 'repository "test-repo" {' >> $(PWD)/gotd.conf
152 @echo ' path "$(GOTD_TEST_REPO)"' >> $(PWD)/gotd.conf
153 @echo ' permit rw $(GOTD_DEVUSER)' >> $(PWD)/gotd.conf
154 @echo ' protect branch "foo"' >> $(PWD)/gotd.conf
155 @echo ' protect tag namespace "refs/tags/"' >> $(PWD)/gotd.conf
156 @echo ' protect branch "refs/heads/main"' >> $(PWD)/gotd.conf
157 @echo "}" >> $(PWD)/gotd.conf
158 @$(GOTD_TRAP); $(GOTD_START_CMD)
159 @$(GOTD_TRAP); sleep .5
161 start_gotd_email_notification: ensure_root
162 @echo 'listen on "$(GOTD_SOCK)"' > $(PWD)/gotd.conf
163 @echo "user $(GOTD_USER)" >> $(PWD)/gotd.conf
164 @echo 'repository "test-repo" {' >> $(PWD)/gotd.conf
165 @echo ' path "$(GOTD_TEST_REPO)"' >> $(PWD)/gotd.conf
166 @echo ' permit rw $(GOTD_DEVUSER)' >> $(PWD)/gotd.conf
167 @echo ' notify {' >> $(PWD)/gotd.conf
168 @echo -n ' email to ${GOTD_DEVUSER}' >> $(PWD)/gotd.conf
169 @echo ' relay 127.0.0.1 port ${GOTD_TEST_SMTP_PORT}' >> $(PWD)/gotd.conf
170 @echo " }" >> $(PWD)/gotd.conf
171 @echo "}" >> $(PWD)/gotd.conf
172 @$(GOTD_TRAP); $(GOTD_START_CMD)
173 @$(GOTD_TRAP); sleep .5
175 start_gotd_http_notification: ensure_root
176 @echo 'listen on "$(GOTD_SOCK)"' > $(PWD)/gotd.conf
177 @echo "user $(GOTD_USER)" >> $(PWD)/gotd.conf
178 @echo 'repository "test-repo" {' >> $(PWD)/gotd.conf
179 @echo ' path "$(GOTD_TEST_REPO)"' >> $(PWD)/gotd.conf
180 @echo ' permit rw $(GOTD_DEVUSER)' >> $(PWD)/gotd.conf
181 @echo ' notify {' >> $(PWD)/gotd.conf
182 @echo ' url "http://localhost:${GOTD_TEST_HTTP_PORT}/"' >> $(PWD)/gotd.conf
183 @echo " }" >> $(PWD)/gotd.conf
184 @echo "}" >> $(PWD)/gotd.conf
185 @$(GOTD_TRAP); $(GOTD_START_CMD)
186 @$(GOTD_TRAP); sleep .5
188 prepare_test_repo: ensure_root
189 @chown ${GOTD_USER} "${GOTD_TEST_REPO}"
190 @su -m ${GOTD_USER} -c 'env $(GOTD_TEST_ENV) sh ./prepare_test_repo.sh'
192 prepare_test_repo_empty: ensure_root
193 @chown ${GOTD_USER} "${GOTD_TEST_REPO}"
194 @su -m ${GOTD_USER} -c 'env $(GOTD_TEST_ENV) sh ./prepare_test_repo.sh 1'
196 test_repo_read: prepare_test_repo start_gotd_ro
197 @-$(GOTD_TRAP); su ${GOTD_TEST_USER} -c \
198 'env $(GOTD_TEST_ENV) sh ./repo_read.sh'
199 @$(GOTD_STOP_CMD) 2>/dev/null
200 @su -m ${GOTD_USER} -c 'env $(GOTD_TEST_ENV) sh ./check_test_repo.sh'
202 test_repo_read_group: prepare_test_repo start_gotd_ro_group
203 @-$(GOTD_TRAP); su ${GOTD_TEST_USER} -c \
204 'env $(GOTD_TEST_ENV) sh ./repo_read.sh'
205 @$(GOTD_STOP_CMD) 2>/dev/null
206 @su -m ${GOTD_USER} -c 'env $(GOTD_TEST_ENV) sh ./check_test_repo.sh'
208 test_repo_read_denied_user: prepare_test_repo start_gotd_ro_denied_user
209 @-$(GOTD_TRAP); su ${GOTD_TEST_USER} -c \
210 'env $(GOTD_TEST_ENV) sh ./repo_read_access_denied.sh'
211 @$(GOTD_STOP_CMD) 2>/dev/null
212 @su -m ${GOTD_USER} -c 'env $(GOTD_TEST_ENV) sh ./check_test_repo.sh'
214 test_repo_read_denied_group: prepare_test_repo start_gotd_ro_denied_group
215 @-$(GOTD_TRAP); su ${GOTD_TEST_USER} -c \
216 'env $(GOTD_TEST_ENV) sh ./repo_read_access_denied.sh'
217 @$(GOTD_STOP_CMD) 2>/dev/null
218 @su -m ${GOTD_USER} -c 'env $(GOTD_TEST_ENV) sh ./check_test_repo.sh'
220 test_repo_read_bad_user: prepare_test_repo start_gotd_ro_bad_user
221 @-$(GOTD_TRAP); su ${GOTD_TEST_USER} -c \
222 'env $(GOTD_TEST_ENV) sh ./repo_read_access_denied.sh'
223 @$(GOTD_STOP_CMD) 2>/dev/null
224 @su -m ${GOTD_USER} -c 'env $(GOTD_TEST_ENV) sh ./check_test_repo.sh'
226 test_repo_read_bad_group: prepare_test_repo start_gotd_ro_bad_group
227 @-$(GOTD_TRAP); su ${GOTD_TEST_USER} -c \
228 'env $(GOTD_TEST_ENV) sh ./repo_read_access_denied.sh'
229 @$(GOTD_STOP_CMD) 2>/dev/null
230 @su -m ${GOTD_USER} -c 'env $(GOTD_TEST_ENV) sh ./check_test_repo.sh'
232 test_repo_write: prepare_test_repo start_gotd_rw
233 @-$(GOTD_TRAP); su ${GOTD_TEST_USER} -c \
234 'env $(GOTD_TEST_ENV) sh ./repo_write.sh'
235 @$(GOTD_STOP_CMD) 2>/dev/null
236 @su -m ${GOTD_USER} -c 'env $(GOTD_TEST_ENV) sh ./check_test_repo.sh'
238 test_repo_write_empty: prepare_test_repo_empty start_gotd_rw
239 @-$(GOTD_TRAP); su ${GOTD_TEST_USER} -c \
240 'env $(GOTD_TEST_ENV) sh ./repo_write_empty.sh'
241 @$(GOTD_STOP_CMD) 2>/dev/null
242 @su -m ${GOTD_USER} -c 'env $(GOTD_TEST_ENV) sh ./check_test_repo.sh'
244 test_repo_write_protected: prepare_test_repo start_gotd_rw_protected
245 @-$(GOTD_TRAP); su ${GOTD_TEST_USER} -c \
246 'env $(GOTD_TEST_ENV) sh ./repo_write_protected.sh'
247 @$(GOTD_STOP_CMD) 2>/dev/null
248 @su -m ${GOTD_USER} -c 'env $(GOTD_TEST_ENV) sh ./check_test_repo.sh'
250 test_request_bad: prepare_test_repo_empty start_gotd_ro
251 @-$(GOTD_TRAP); su -m ${GOTD_TEST_USER} -c \
252 'env $(GOTD_TEST_ENV) sh ./request_bad.sh'
253 @$(GOTD_STOP_CMD) 2>/dev/null
255 test_email_notification: prepare_test_repo start_gotd_email_notification
256 @-$(GOTD_TRAP); su -m ${GOTD_TEST_USER} -c \
257 'env $(GOTD_TEST_ENV) sh ./email_notification.sh'
258 @$(GOTD_STOP_CMD) 2>/dev/null
260 test_http_notification: prepare_test_repo start_gotd_http_notification
261 @-$(GOTD_TRAP); su -m ${GOTD_TEST_USER} -c \
262 'env $(GOTD_TEST_ENV) sh ./http_notification.sh'
263 @$(GOTD_STOP_CMD) 2>/dev/null
265 .include <bsd.regress.mk>