1# $OpenBSD: Makefile,v 1.32 2017/07/07 23:55:21 bluhm 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 `whoami`/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