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 NOOBJ=Yes
9 .PHONY: ensure_root prepare_test_repo check_test_repo start_gotd
11 GOTD_TEST_ROOT=/tmp
12 GOTD_DEVUSER?=gotdev
13 GOTD_DEVUSER_HOME!=userinfo $(GOTD_DEVUSER) | awk '/^dir/ {print $$2}'
14 GOTD_TEST_REPO!?=mktemp -d "$(GOTD_TEST_ROOT)/gotd-test-repo-XXXXXXXXX"
15 GOTD_TEST_REPO_URL=ssh://${GOTD_DEVUSER}@127.0.0.1/test-repo
17 GOTD_TEST_USER?=${DOAS_USER}
18 .if empty(GOTD_TEST_USER)
19 GOTD_TEST_USER=${SUDO_USER}
20 .endif
21 .if empty(GOTD_TEST_USER)
22 GOTD_TEST_USER=${USER}
23 .endif
24 GOTD_TEST_USER_HOME!=userinfo $(GOTD_TEST_USER) | awk '/^dir/ {print $$2}'
26 # gotd.conf parameters
27 GOTD_USER?=got
28 GOTD_GROUP?=gotsh
29 GOTD_SOCK=${GOTD_DEVUSER_HOME}/gotd.sock
31 .if "${GOT_RELEASE}" == "Yes"
32 PREFIX ?= /usr/local
33 BINDIR ?= ${PREFIX}/bin
34 .else
35 PREFIX ?= ${GOTD_TEST_USER_HOME}
36 BINDIR ?= ${PREFIX}/bin
37 .endif
39 GOTD_START_CMD?=$(BINDIR)/gotd -vv -f $(PWD)/gotd.conf
40 GOTD_STOP_CMD?=$(BINDIR)/gotctl -f $(GOTD_SOCK) stop
41 GOTD_TRAP=trap "$(GOTD_STOP_CMD)" HUP INT QUIT PIPE TERM
43 GOTD_TEST_ENV=GOTD_TEST_ROOT=$(GOTD_TEST_ROOT) \
44 GOTD_TEST_REPO_URL=$(GOTD_TEST_REPO_URL) \
45 GOTD_TEST_REPO=$(GOTD_TEST_REPO) \
46 GOTD_SOCK=$(GOTD_SOCK) \
47 GOTD_DEVUSER=$(GOTD_DEVUSER) \
48 HOME=$(GOTD_TEST_USER_HOME) \
49 PATH=$(GOTD_TEST_USER_HOME)/bin:$(PATH)
51 ensure_root:
52 @if [[ `id -u` -ne 0 ]]; then \
53 echo gotd test suite must be started by root >&2; \
54 false; \
55 fi ; \
56 if [[ "$(GOTD_TEST_USER)" = "root" ]]; then \
57 echo GOTD_TEST_USER must be a non-root user >&2; \
58 false; \
59 fi
61 start_gotd_ro: ensure_root
62 @echo 'unix_socket "$(GOTD_SOCK)"' > $(PWD)/gotd.conf
63 @echo "unix_group $(GOTD_GROUP)" >> $(PWD)/gotd.conf
64 @echo "user $(GOTD_USER)" >> $(PWD)/gotd.conf
65 @echo 'repository "test-repo" {' >> $(PWD)/gotd.conf
66 @echo ' path "$(GOTD_TEST_REPO)"' >> $(PWD)/gotd.conf
67 @echo ' permit ro $(GOTD_DEVUSER)' >> $(PWD)/gotd.conf
68 @echo "}" >> $(PWD)/gotd.conf
69 @$(GOTD_TRAP); $(GOTD_START_CMD)
70 @$(GOTD_TRAP); sleep .5
72 start_gotd_ro_group: ensure_root
73 @echo 'unix_socket "$(GOTD_SOCK)"' > $(PWD)/gotd.conf
74 @echo "unix_group $(GOTD_GROUP)" >> $(PWD)/gotd.conf
75 @echo "user $(GOTD_USER)" >> $(PWD)/gotd.conf
76 @echo 'repository "test-repo" {' >> $(PWD)/gotd.conf
77 @echo ' path "$(GOTD_TEST_REPO)"' >> $(PWD)/gotd.conf
78 @echo ' permit ro :$(GOTD_DEVUSER)' >> $(PWD)/gotd.conf
79 @echo "}" >> $(PWD)/gotd.conf
80 @$(GOTD_TRAP); $(GOTD_START_CMD)
81 @$(GOTD_TRAP); sleep .5
83 # try a permit rule followed by a deny rule; last matched rule wins
84 start_gotd_ro_denied_user: ensure_root
85 @echo 'unix_socket "$(GOTD_SOCK)"' > $(PWD)/gotd.conf
86 @echo "unix_group $(GOTD_GROUP)" >> $(PWD)/gotd.conf
87 @echo "user $(GOTD_USER)" >> $(PWD)/gotd.conf
88 @echo 'repository "test-repo" {' >> $(PWD)/gotd.conf
89 @echo ' path "$(GOTD_TEST_REPO)"' >> $(PWD)/gotd.conf
90 @echo ' permit ro $(GOTD_DEVUSER)' >> $(PWD)/gotd.conf
91 @echo ' deny $(GOTD_DEVUSER)' >> $(PWD)/gotd.conf
92 @echo "}" >> $(PWD)/gotd.conf
93 @$(GOTD_TRAP); $(GOTD_START_CMD)
94 @$(GOTD_TRAP); sleep .5
96 # try a permit rule followed by a deny rule; last matched rule wins
97 start_gotd_ro_denied_group: ensure_root
98 @echo 'unix_socket "$(GOTD_SOCK)"' > $(PWD)/gotd.conf
99 @echo "unix_group $(GOTD_GROUP)" >> $(PWD)/gotd.conf
100 @echo "user $(GOTD_USER)" >> $(PWD)/gotd.conf
101 @echo 'repository "test-repo" {' >> $(PWD)/gotd.conf
102 @echo ' path "$(GOTD_TEST_REPO)"' >> $(PWD)/gotd.conf
103 @echo ' permit ro $(GOTD_DEVUSER)' >> $(PWD)/gotd.conf
104 @echo ' deny :$(GOTD_DEVUSER)' >> $(PWD)/gotd.conf
105 @echo "}" >> $(PWD)/gotd.conf
106 @$(GOTD_TRAP); $(GOTD_START_CMD)
107 @$(GOTD_TRAP); sleep .5
109 # $GOTD_DEVUSER should not equal $GOTD_USER
110 start_gotd_ro_bad_user: ensure_root
111 @echo 'unix_socket "$(GOTD_SOCK)"' > $(PWD)/gotd.conf
112 @echo "unix_group $(GOTD_GROUP)" >> $(PWD)/gotd.conf
113 @echo "user $(GOTD_USER)" >> $(PWD)/gotd.conf
114 @echo 'repository "test-repo" {' >> $(PWD)/gotd.conf
115 @echo ' path "$(GOTD_TEST_REPO)"' >> $(PWD)/gotd.conf
116 @echo ' permit ro $(GOTD_USER)' >> $(PWD)/gotd.conf
117 @echo "}" >> $(PWD)/gotd.conf
118 @$(GOTD_TRAP); $(GOTD_START_CMD)
119 @$(GOTD_TRAP); sleep .5
121 # $GOTD_DEVUSER should not be in group wheel
122 start_gotd_ro_bad_group: ensure_root
123 @echo 'unix_socket "$(GOTD_SOCK)"' > $(PWD)/gotd.conf
124 @echo "unix_group $(GOTD_GROUP)" >> $(PWD)/gotd.conf
125 @echo "user $(GOTD_USER)" >> $(PWD)/gotd.conf
126 @echo 'repository "test-repo" {' >> $(PWD)/gotd.conf
127 @echo ' path "$(GOTD_TEST_REPO)"' >> $(PWD)/gotd.conf
128 @echo ' permit ro :wheel' >> $(PWD)/gotd.conf
129 @echo "}" >> $(PWD)/gotd.conf
130 @$(GOTD_TRAP); $(GOTD_START_CMD)
131 @$(GOTD_TRAP); sleep .5
133 start_gotd_rw: ensure_root
134 @echo 'unix_socket "$(GOTD_SOCK)"' > $(PWD)/gotd.conf
135 @echo "unix_group $(GOTD_GROUP)" >> $(PWD)/gotd.conf
136 @echo "user $(GOTD_USER)" >> $(PWD)/gotd.conf
137 @echo 'repository "test-repo" {' >> $(PWD)/gotd.conf
138 @echo ' path "$(GOTD_TEST_REPO)"' >> $(PWD)/gotd.conf
139 @echo ' permit rw $(GOTD_DEVUSER)' >> $(PWD)/gotd.conf
140 @echo "}" >> $(PWD)/gotd.conf
141 @$(GOTD_TRAP); $(GOTD_START_CMD)
142 @$(GOTD_TRAP); sleep .5
144 prepare_test_repo: ensure_root
145 @chown ${GOTD_USER} "${GOTD_TEST_REPO}"
146 @su -m ${GOTD_USER} -c 'env $(GOTD_TEST_ENV) sh ./prepare_test_repo.sh'
148 prepare_test_repo_empty: ensure_root
149 @chown ${GOTD_USER} "${GOTD_TEST_REPO}"
150 @su -m ${GOTD_USER} -c 'env $(GOTD_TEST_ENV) sh ./prepare_test_repo.sh 1'
152 test_repo_read: prepare_test_repo start_gotd_ro
153 @-$(GOTD_TRAP); su ${GOTD_TEST_USER} -c \
154 'env $(GOTD_TEST_ENV) sh ./repo_read.sh'
155 @$(GOTD_STOP_CMD) 2>/dev/null
156 @su -m ${GOTD_USER} -c 'env $(GOTD_TEST_ENV) sh ./check_test_repo.sh'
158 test_repo_read_group: prepare_test_repo start_gotd_ro_group
159 @-$(GOTD_TRAP); su ${GOTD_TEST_USER} -c \
160 'env $(GOTD_TEST_ENV) sh ./repo_read.sh'
161 @$(GOTD_STOP_CMD) 2>/dev/null
162 @su -m ${GOTD_USER} -c 'env $(GOTD_TEST_ENV) sh ./check_test_repo.sh'
164 test_repo_read_denied_user: prepare_test_repo start_gotd_ro_denied_user
165 @-$(GOTD_TRAP); su ${GOTD_TEST_USER} -c \
166 'env $(GOTD_TEST_ENV) sh ./repo_read_access_denied.sh'
167 @$(GOTD_STOP_CMD) 2>/dev/null
168 @su -m ${GOTD_USER} -c 'env $(GOTD_TEST_ENV) sh ./check_test_repo.sh'
170 test_repo_read_denied_group: prepare_test_repo start_gotd_ro_denied_group
171 @-$(GOTD_TRAP); su ${GOTD_TEST_USER} -c \
172 'env $(GOTD_TEST_ENV) sh ./repo_read_access_denied.sh'
173 @$(GOTD_STOP_CMD) 2>/dev/null
174 @su -m ${GOTD_USER} -c 'env $(GOTD_TEST_ENV) sh ./check_test_repo.sh'
176 test_repo_read_bad_user: prepare_test_repo start_gotd_ro_bad_user
177 @-$(GOTD_TRAP); su ${GOTD_TEST_USER} -c \
178 'env $(GOTD_TEST_ENV) sh ./repo_read_access_denied.sh'
179 @$(GOTD_STOP_CMD) 2>/dev/null
180 @su -m ${GOTD_USER} -c 'env $(GOTD_TEST_ENV) sh ./check_test_repo.sh'
182 test_repo_read_bad_group: prepare_test_repo start_gotd_ro_bad_group
183 @-$(GOTD_TRAP); su ${GOTD_TEST_USER} -c \
184 'env $(GOTD_TEST_ENV) sh ./repo_read_access_denied.sh'
185 @$(GOTD_STOP_CMD) 2>/dev/null
186 @su -m ${GOTD_USER} -c 'env $(GOTD_TEST_ENV) sh ./check_test_repo.sh'
188 test_repo_write: prepare_test_repo start_gotd_rw
189 @-$(GOTD_TRAP); su ${GOTD_TEST_USER} -c \
190 'env $(GOTD_TEST_ENV) sh ./repo_write.sh'
191 @$(GOTD_STOP_CMD) 2>/dev/null
192 @su -m ${GOTD_USER} -c 'env $(GOTD_TEST_ENV) sh ./check_test_repo.sh'
194 test_repo_write_empty: prepare_test_repo_empty start_gotd_rw
195 @-$(GOTD_TRAP); su ${GOTD_TEST_USER} -c \
196 'env $(GOTD_TEST_ENV) sh ./repo_write_empty.sh'
197 @$(GOTD_STOP_CMD) 2>/dev/null
198 @su -m ${GOTD_USER} -c 'env $(GOTD_TEST_ENV) sh ./check_test_repo.sh'
200 test_request_bad: prepare_test_repo_empty start_gotd_ro
201 @-$(GOTD_TRAP); su -m ${GOTD_TEST_USER} -c \
202 'env $(GOTD_TEST_ENV) sh ./request_bad.sh'
203 @$(GOTD_STOP_CMD) 2>/dev/null
205 .include <bsd.regress.mk>