1#	$OpenBSD: Makefile,v 1.33 2022/11/11 13:59:02 anton Exp $
2
3# Regression tests by Niall O'Higgins <niallo@openbsd.org> and
4# Tobias Stoeckmann <tobias@openbsd.org>.
5# Based on OpenRCS regression framework.
6
7.include <bsd.own.mk>
8
9OPENCVS=	${BSDSRCDIR}/usr.bin/cvs/obj/opencvs
10CVS?=		${OPENCVS}
11CVSCMD=		${CVS} -f
12
13REGRESS_ROOT=	${.OBJDIR}/regress_cvs_root
14REGRESS_WCOPY=	${.OBJDIR}/regress_cvs_wcopy
15REGRESS_SEED=	${REGRESS_WCOPY}/seed
16REGRESS_IMPORT=	${.OBJDIR}/regress_cvs_import
17
18.if defined(REMOTE)
19MYCVSROOT?=	localhost:${REGRESS_ROOT}
20.if defined(CVS_SERVER)
21TESTFILE=	$(CVS_SERVER)
22.else
23TESTFILE=	cvs
24.endif
25.else
26TESTFILE=	${CVS:T}
27MYCVSROOT?=	${REGRESS_ROOT}
28.endif
29
30DIFF=		diff -u
31
32CLEANFILES=	regress_cvs_root regress_cvs_wcopy regress_cvs_stderr \
33		regress_cvs_stdout regress_cvs_import
34
35# These must be done in order.
36LTESTS= cvs-initial \
37	cvs-import-mflag \
38	cvs-checkout-dflag \
39	cvs-checkout-rflag-HEAD \
40	cvs-checkout-kflag-k-rflag-HEAD \
41	cvs-checkout-rflag-inval_branch_rev \
42	cvs-checkout-rflag-too_high \
43	cvs-checkout \
44	cvs-checkout-pflag \
45	cvs-tag \
46	cvs-add \
47	cvs-add-dir \
48	cvs-add-subdir_file \
49	cvs-commit-Fflag \
50	cvs-checkout \
51	cvs-tag-branch \
52	cvs-checkout-rflag_branch \
53	cvs-diff-file \
54	cvs-commit-to_branch \
55	cvs-annotate \
56	cvs-annotate-rflag-inval_branch_rev \
57	cvs-annotate-rflag-inval_branch_rev-fflag \
58	cvs-annotate-rflag-unknown_symbol-fflag \
59	cvs-checkout-kflag-kv-rflag-1.1 \
60	cvs-update-Aflag-kflag-kv \
61	cvs-update-Aflag-kflag-k-rflag-1.1 \
62	cvs-update-Aflag-rflag-1.1 \
63	cvs-update-Aflag \
64	cvs-status \
65	cvs-diff \
66	cvs-remove-fflag \
67	cvs-status-vflag \
68	cvs-log \
69	cvs-rlog \
70	cvs-rtag-one_more_branch \
71	cvs-export \
72	cvs-update-with-local
73# Known to fail.
74#	cvs-update-for_subdir
75#	cvs-release-dflag
76
77.for t in ${LTESTS}
78REGRESS_TARGETS+=test-${t}
79test-${t}: ${CVS}
80.endfor
81
82# XXX - should not print anything
83test-cvs-add:
84	@echo "initial content" > ${REGRESS_SEED}/seed2.txt
85	@cd ${REGRESS_SEED}; \
86	    ${CVSCMD} -q add seed2.txt > /dev/null 2> /dev/null
87#	    eval 'test `${CVSCMD} -Q add seed2.txt | wc -l` -eq 0'
88
89test-cvs-add-dir:
90	@mkdir ${REGRESS_SEED}/subdir
91	@cd ${REGRESS_SEED}; ${CVSCMD} -q add subdir > /dev/null 2> /dev/null
92	@test -d ${REGRESS_SEED}/subdir/CVS && \
93	    test -d ${REGRESS_ROOT}/seed/subdir
94
95test-cvs-add-subdir_file:
96	@echo "initial content of seed3.txt" > ${REGRESS_SEED}/subdir/seed3.txt
97	@cd ${REGRESS_SEED}; \
98	    ${CVSCMD} -q add subdir/seed3.txt > /dev/null 2> /dev/null
99#	@eval 'test `${CVSCMD} -Q add seed2.txt | wc -l` -eq 0'
100
101test-cvs-annotate:
102	@cd ${REGRESS_SEED}; \
103	    eval 'test `${CVSCMD} -Q annotate seed1.txt 2>/dev/null | \
104	    wc -l` -eq 3'
105
106test-cvs-annotate-rflag-inval_branch_rev:
107	@cd ${REGRESS_SEED}; \
108	    eval 'test `${CVSCMD} -Q annotate -r 1.2.3.4 seed1.txt 2>/dev/null \
109	    | wc -l` -eq 0'
110
111test-cvs-annotate-rflag-inval_branch_rev-fflag:
112	@cd ${REGRESS_SEED}; \
113	    eval 'test `${CVSCMD} -Q annotate -f -r 1.2.3.4 seed1.txt \
114	    2>/dev/null | wc -l` -eq 3'
115
116test-cvs-annotate-rflag-unknown_symbol-fflag:
117	@cd ${REGRESS_SEED}; \
118	    eval 'test `${CVSCMD} -Q annotate -f -r UNKNOWN seed1.txt \
119	    2>/dev/null | wc -l` -eq 0'
120
121test-cvs-checkout:
122	@rm -rf ${REGRESS_WCOPY}
123	@mkdir ${REGRESS_WCOPY}
124	@cd ${REGRESS_WCOPY}; ${CVSCMD} -Q -d ${MYCVSROOT} co seed > /dev/null
125	@test -f ${REGRESS_SEED}/seed1.txt
126
127test-cvs-checkout-kflag-k-rflag-HEAD:
128	@rm -rf ${REGRESS_WCOPY}
129	@mkdir ${REGRESS_WCOPY}
130	@cd ${REGRESS_WCOPY}; \
131	    ${CVSCMD} -Q -d ${MYCVSROOT} co -rHEAD -kkv seed > /dev/null
132	@test -f ${REGRESS_SEED}/seed1.txt
133	@eval 'test `grep -c -e THEAD -e -kkv \
134	    ${REGRESS_SEED}/CVS/Entries | wc -l` -eq 1'
135	@eval 'test `grep -c Id$ \
136	    ${REGRESS_SEED}/seed1.txt | wc -l` -eq 1'
137
138test-cvs-checkout-kflag-kv-rflag-1.1:
139	@rm -rf ${REGRESS_WCOPY}
140	@mkdir ${REGRESS_WCOPY}
141	@cd ${REGRESS_WCOPY}; \
142	    ${CVSCMD} -Q -d ${MYCVSROOT} co -r 1.1 -kkv seed > /dev/null
143	@test -f ${REGRESS_SEED}/seed1.txt
144	@eval 'test `grep -c -e T1.1 -e -kkv \
145	    ${REGRESS_SEED}/CVS/Entries | wc -l` -eq 1'
146
147test-cvs-checkout-pflag:
148	@eval 'test `${CVSCMD} -Q -d ${MYCVSROOT} checkout \
149	    -p seed/seed1.txt 2>/dev/null | wc -l` -eq 2'
150
151test-cvs-checkout-rflag_branch:
152	@rm -rf ${REGRESS_WCOPY}
153	@mkdir ${REGRESS_WCOPY}
154	@cd ${REGRESS_WCOPY}; \
155	    ${CVSCMD} -Q -d ${MYCVSROOT} co -r FIRST_BRANCH seed > /dev/null
156	@test -f ${REGRESS_SEED}/seed1.txt
157	@eval 'test `grep -c TFIRST_BRANCH ${REGRESS_SEED}/CVS/Entries` -eq 2'
158
159test-cvs-checkout-rflag-inval_branch_rev:
160	@rm -rf ${REGRESS_WCOPY}
161	@mkdir ${REGRESS_WCOPY}
162	@cd ${REGRESS_WCOPY}; ${CVSCMD} -Q -d ${MYCVSROOT} co -r1.2.3.4 seed
163	@eval 'test ! -f ${REGRESS_SEED}/seed1.txt'
164
165test-cvs-checkout-rflag-too_high:
166	@rm -rf ${REGRESS_WCOPY}
167	@mkdir ${REGRESS_WCOPY}
168	@cd ${REGRESS_WCOPY}; ${CVSCMD} -Q -d ${MYCVSROOT} co -r1.5 seed
169	@eval 'test ! -f ${REGRESS_SEED}/seed1.txt'
170
171test-cvs-checkout-rflag-HEAD:
172	@rm -rf ${REGRESS_WCOPY}
173	@mkdir ${REGRESS_WCOPY}
174	@cd ${REGRESS_WCOPY}; \
175	    ${CVSCMD} -Q -d ${MYCVSROOT} co -rHEAD seed > /dev/null
176	@test -f ${REGRESS_SEED}/seed1.txt
177	@eval 'test `grep -c THEAD ${REGRESS_SEED}/CVS/Entries | wc -l` -eq 1'
178
179test-cvs-checkout-rflag-1.1:
180	@rm -rf ${REGRESS_WCOPY}
181	@mkdir ${REGRESS_WCOPY}
182	@cd ${REGRESS_WCOPY}; \
183	    ${CVSCMD} -Q -d ${MYCVSROOT} co -r 1.1 seed > /dev/null
184	@test -f ${REGRESS_SEED}/seed1.txt && test -f ${REGRESS_SEED}/seed2.txt
185
186test-cvs-checkout-dflag:
187	@rm -rf ${REGRESS_WCOPY}
188	@mkdir ${REGRESS_WCOPY}
189	@cd ${REGRESS_WCOPY}; \
190	    ${CVSCMD} -Q -d ${MYCVSROOT} co -d seed2 seed > /dev/null
191	@test -d ${REGRESS_WCOPY}/seed2/CVS
192
193test-cvs-checkout-subdir:
194	@rm -rf ${REGRESS_WCOPY}
195	@mkdir ${REGRESS_WCOPY}
196	@cd ${REGRESS_WCOPY}; \
197	    ${CVSCMD} -Q -d ${MYCVSROOT} co seed/subdir > /dev/null
198	@test -f ${REGRESS_SEED}/subdir/seed3.txt && \
199	    test ! -f ${REGRESS_SEED}/seed2.txt
200
201test-cvs-commit-Fflag:
202	@sleep 1
203	@echo "second line" >> ${REGRESS_SEED}/seed1.txt
204	@echo "commit seed repo" > ${REGRESS_WCOPY}/logmsg.txt
205	@cd ${REGRESS_SEED}; ${CVSCMD} commit \
206	    -F ${REGRESS_WCOPY}/logmsg.txt > /dev/null
207	@grep "^@commit seed repo" \
208	    ${REGRESS_ROOT}/seed/seed1.txt,v > /dev/null
209	@eval 'test `cat ${REGRESS_ROOT}/seed/seed1.txt,v | wc -l` -eq 60'
210	@test -f ${REGRESS_ROOT}/seed/seed2.txt,v
211
212test-cvs-commit-to_branch:
213	@sleep 1
214	@cd ${REGRESS_SEED}; ${CVSCMD} commit -m'first branch seed' > /dev/null
215	@eval 'test `cat ${REGRESS_ROOT}/seed/seed1.txt,v | wc -l` -eq 80'
216	@eval 'test `grep -c TFIRST_BRANCH ${REGRESS_SEED}/CVS/Entries` -eq 2'
217
218test-cvs-diff:
219	@sleep 1
220	@echo "modified" > ${REGRESS_SEED}/seed2.txt
221	@cd ${REGRESS_SEED}; eval 'test `${CVSCMD} -Q diff | wc -l` -eq 9'
222
223test-cvs-diff-file:
224	@sleep 1
225	@echo "first branch line" >> ${REGRESS_SEED}/seed1.txt
226	@cd ${REGRESS_SEED}; \
227	    eval 'test `${CVSCMD} -Q diff seed1.txt | wc -l` -eq 7'
228
229test-cvs-export:
230	@rm -rf ${REGRESS_WCOPY}
231	@mkdir ${REGRESS_WCOPY}
232	@cd ${REGRESS_WCOPY}; \
233	    ${CVSCMD} -Q -d ${MYCVSROOT} export -r HEAD seed > /dev/null
234	@test -f ${REGRESS_SEED}/seed1.txt
235
236test-cvs-import-mflag:
237	@rm -rf ${REGRESS_IMPORT}
238	@mkdir ${REGRESS_IMPORT}
239	@cp ${.CURDIR}/seed1.txt ${REGRESS_IMPORT}
240	@touch -t 200001010100 ${REGRESS_IMPORT}/seed1.txt
241	@cd ${REGRESS_IMPORT} && ${CVSCMD} -Q -d ${MYCVSROOT} import \
242	    -m'import seed repo' seed regress regress_import > /dev/null
243	@chmod u+w ${REGRESS_ROOT}/seed/seed1.txt,v
244	@perl ${.CURDIR}/setdate.pl ${REGRESS_ROOT}/seed/seed1.txt,v 1.1 \
245	    2000.01.01.00.00.00
246	@perl ${.CURDIR}/setdate.pl ${REGRESS_ROOT}/seed/seed1.txt,v 1.1.1.1 \
247	    2000.01.01.00.00.00
248	@sed "s/author `logname`/author user/" \
249	    ${REGRESS_ROOT}/seed/seed1.txt,v | \
250	    ${DIFF} - ${.CURDIR}/test_${TESTFILE}_import_01_seed1.txt,v
251
252test-cvs-initial: clean
253	@${CVSCMD} -d ${MYCVSROOT} init
254	@test -d ${REGRESS_ROOT}/CVSROOT
255
256test-cvs-log:
257	@cd ${REGRESS_SEED}; eval 'test `${CVSCMD} -Q log | wc -l` -eq 68'
258
259test-cvs-release-dflag: test-cvs-checkout
260	@cd ${REGRESS_WCOPY}; ${CVSCMD} -Q -d ${MYCVSROOT} release -d seed
261	@test ! -d ${.OBJDIR}/regress_cvs_wcopy/seed
262	@eval 'test `grep '^F' ${REGRESS_ROOT}/CVSROOT/history | wc -l` -eq 1'
263
264test-cvs-remove-fflag:
265	@cd ${REGRESS_SEED}; ${CVSCMD} -Q remove -f seed1.txt
266	@test ! -f ${REGRESS_SEED}/seed1.txt
267
268test-cvs-rlog:
269	@eval 'test `${CVSCMD} -Q -d ${MYCVSROOT} rlog seed | wc -l` -eq 65'
270
271test-cvs-status:
272	@cd ${REGRESS_SEED}; eval 'test `${CVSCMD} -Q status | wc -l` -eq 21'
273
274test-cvs-status-vflag:
275	@cd ${REGRESS_SEED}; eval 'test `${CVSCMD} -Q status -v | wc -l` -eq 33'
276
277test-cvs-tag:
278	@cd ${REGRESS_SEED}; ${CVSCMD} -Q tag FIRST_TAG > /dev/null
279	@grep FIRST_TAG ${REGRESS_ROOT}/seed/seed1.txt,v > /dev/null
280
281test-cvs-tag-branch:
282	@cd ${REGRESS_SEED}; ${CVSCMD} -Q tag -b FIRST_BRANCH > /dev/null
283	@grep FIRST_BRANCH ${REGRESS_ROOT}/seed/seed1.txt,v > /dev/null
284
285test-cvs-rtag-one_more_branch:
286	@${CVSCMD} -d ${MYCVSROOT} -Q rtag -b SECOND_BRANCH seed > /dev/null
287	@grep SECOND_BRANCH ${REGRESS_ROOT}/seed/seed2.txt,v \
288	    | grep 4 > /dev/null
289
290test-cvs-update-Aflag:
291	@cd ${REGRESS_SEED}; ${CVSCMD} -Q update -A > /dev/null
292	@eval 'test `grep -c -e T1 -e kkv ${REGRESS_SEED}/CVS/Entries` -eq 0'
293
294test-cvs-update-Aflag-kflag-kv:
295	@cd ${REGRESS_SEED}; ${CVSCMD} -Q update -A -kv > /dev/null
296	@eval 'test `grep -c T1 ${REGRESS_SEED}/CVS/Entries` -eq 0'
297	@eval 'test `grep -c kv ${REGRESS_SEED}/CVS/Entries` -eq 2'
298
299test-cvs-update-Aflag-kflag-k-rflag-1.1:
300	@cd ${REGRESS_SEED}; ${CVSCMD} -Q update -A -kk -r 1.1 > /dev/null
301	@eval 'test `grep -c T1 ${REGRESS_SEED}/CVS/Entries` -eq 2'
302	@eval 'test `grep -c kk ${REGRESS_SEED}/CVS/Entries` -eq 2'
303
304test-cvs-update-Aflag-rflag-1.1:
305	@cd ${REGRESS_SEED}; ${CVSCMD} -Q update -A -r 1.1 > /dev/null
306	@eval 'test `grep -c T1 ${REGRESS_SEED}/CVS/Entries` -eq 2'
307	@eval 'test `grep -c kk ${REGRESS_SEED}/CVS/Entries` -eq 0'
308
309test-cvs-update-for_subdir:
310	@cd ${REGRESS_SEED}; ${CVSCMD} -Q update > /dev/null
311	@test -f ${REGRESS_SEED}/subdir/seed3.txt && \
312	    test ! -f ${REGRESS_SEED}/seed1.txt && \
313	    test ! -f ${REGRESS_SEED}/seed2.txt
314
315test-cvs-merge:
316	@rm -rf ${REGRESS_WCOPY}
317	@mkdir -p ${REGRESS_WCOPY}/a ${REGRESS_WCOPY}/b
318	@cd ${REGRESS_WCOPY}/a; \
319	    ${CVSCMD} -Q -d ${MYCVSROOT} co seed > /dev/null
320	@cd ${REGRESS_WCOPY}/b; \
321	    ${CVSCMD} -Q -d ${MYCVSROOT} co seed > /dev/null
322	@echo "modified text" > ${REGRESS_WCOPY}/a/seed/seed1.txt
323	@cd ${REGRESS_WCOPY}/a/seed && ${CVSCMD} -Q com -m 'a' > /dev/null
324	@echo "modified text 2" > ${REGRESS_WCOPY}/b/seed/seed1.txt
325	@cd ${REGRESS_WCOPY}/b/seed && ${CVSCMD} -Q up > /dev/null 2>&1
326	@echo "modified text" > ${REGRESS_WCOPY}/b/seed/seed1.txt
327	@cd ${REGRESS_WCOPY}/b/seed && test `${CVSCMD} -q up | wc -l` -eq 0
328
329test-cvs-update-with-local:
330	@rm -rf ${REGRESS_WCOPY}
331	@mkdir -p ${REGRESS_WCOPY}/a ${REGRESS_WCOPY}/b
332	@cd ${REGRESS_WCOPY}/a; \
333	    ${CVSCMD} -Q -d ${MYCVSROOT} co seed > /dev/null
334	@cd ${REGRESS_WCOPY}/b; \
335	    ${CVSCMD} -Q -d ${MYCVSROOT} co seed > /dev/null
336	@echo "new file" > ${REGRESS_WCOPY}/a/seed/test.txt
337	@cd ${REGRESS_WCOPY}/a/seed && \
338		${CVSCMD} -Q add test.txt > /dev/null && \
339		${CVSCMD} -Q com -m 'a' > /dev/null
340	@echo "local file" > ${REGRESS_WCOPY}/b/seed/test.txt
341	@cd ${REGRESS_WCOPY}/b/seed && \
342		${CVSCMD} -Q up 2>&1|grep -q '^C test.txt' && \
343		grep -q '^local file' test.txt
344
345clean:
346	@rm -rf ${CLEANFILES}
347
348# opencvs is not linked to the build, so make it on demand as a workaround
349${OPENCVS}:
350	cd ${BSDSRCDIR}/usr.bin/cvs && ${MAKE} obj
351	cd ${BSDSRCDIR}/usr.bin/cvs && ${MAKE} all
352
353.include <bsd.regress.mk>
354