1 #! /bin/bash
   2 
   3 export HGRCPATH=
   4 
   5 # No insult intended here -- we just need valid author names for the tests
   6 pass_author=ohair
   7 pass_author_lax=andrew
   8 fail_author=mr
   9 fail_author_lax=robilad
  10 setup_author=xdono
  11 
  12 cd $(dirname $0)/tests
  13 
  14 last=$(hg tip --template '{rev}')
  15 
  16 failures=0
  17 
  18 fail() {
  19   echo "-- $r: TEST FAILED"
  20   failures=$(expr $failures + 1)
  21   if [ $FAILFIRST ]; then exit 2; fi
  22 }
  23 
  24 # Cases created by mktests
  25 
  26 r=0
  27 while [ $r -le $last ]; do
  28   au=$(hg log -r $r --template '{author}')
  29   lax=
  30   case $au in
  31     $pass_author) type=pass;;
  32     $pass_author_lax) type=pass; lax='--lax';;
  33     $fail_author) type=fail;;
  34     $fail_author_lax) type=fail; lax='--lax';;
  35     $setup_author) type=setup;;
  36     *) type=$au;;
  37   esac
  38   echo "-- $r $type"
  39   if [ $type = setup ]; then
  40     r=$(expr $r + 1)
  41     continue
  42   fi
  43   hg jcheck $lax -r $r "$@"
  44   rv=$?
  45   case $type in
  46     pass) if [ $rv != 0 ]; then fail $r; fi;;
  47     fail|fang) if [ $rv = 0 ]; then fail $r; fi;;
  48   esac
  49   r=$(expr $r + 1)
  50 done
  51 
  52 # Cases that require richer logic
  53 
  54 echo 9000000 >.hg/bugid
  55 
  56 bugid() {
  57   b=$(expr $(cat .hg/bugid) + 1)
  58   echo $b >.hg/bugid
  59   echo $b
  60 }
  61 
  62 # pretxnchangegroup hook
  63 
  64 echo "-- $r pretxnchangegroup"
  65 rm -rf z
  66 hg init z
  67 mkdir z/.jcheck
  68 echo 'project=jdk7' >z/.jcheck/conf
  69 cp .hg/hgrc z/.hg
  70 if hg push z; then fail; fi
  71 r=$(expr $r + 1)
  72 
  73 # Multiple heads
  74 
  75 echo "-- $r multiple heads"
  76 n=$(hg id -n)
  77 date >>date.$n
  78 hg add date.$n
  79 HGUSER=$setup_author hg ci -m "$(bugid): Head one
  80 Reviewed-by: duke"
  81 rm -rf z
  82 hg bundle --base $n -r $(expr $n + 1) z
  83 hg rollback
  84 hg revert date.$n
  85 date >>date.$n.2
  86 hg add date.$n.2
  87 HGUSER=$setup_author hg ci -m "$(bugid): Head two
  88 Reviewed-by: duke"
  89 HG='hg --config hooks.pretxnchangegroup.jcheck=python:jcheck.strict_hook'
  90 if HGUSER=$setup_author $HG pull z; then fail $r; fi
  91 hg revert date.$n.2
  92 rm -rf z
  93 r=$(expr $r + 1)
  94 
  95 # Named branches
  96 
  97 echo "-- $r named branches"
  98 hg branch foo
  99 date >date.$r
 100 hg add date.$r
 101 HG='hg --config hooks.pretxncommit.jcheck=python:jcheck.hook'
 102 if HGUSER=$setup_author $HG ci -m "$(bugid): Branch
 103 Reviewed-by: duke" ; then fail $r; fi
 104 hg rollback; hg revert -a
 105 rm .hg/branch ## hg bug ?
 106 r=$(expr $r + 1)
 107 
 108 # Tags
 109 
 110 # hg 1.6 and later strip whitespace from tag names (hg issue1217), so test a
 111 # tag with trailing whitespace only in earlier versions.
 112 whitespace_tag='jdk7-b01 '
 113 hg -q version | python -c '
 114 import sys, re;
 115 m = re.search("version ([0-9]+)\.([0-9]+)", sys.stdin.readline())
 116 if m:
 117     major = int(m.group(1))
 118     minor = int(m.group(2))
 119     if major == 1 and minor > 5 or major > 1:
 120        sys.exit(0) # version >= 1.6
 121 sys.exit(1)'
 122 [ $? -eq 0 ] && whitespace_tag=jdk7-b2 # a tag that should be rejected
 123 
 124 HG='hg --config hooks.pretxncommit.jcheck=python:jcheck.hook'
 125 for t in foo tiptoe jdk7 jdk7-b1 "$whitespace_tag" \
 126          hs1-b02 hs11-b3 hs12-b004 hs13.001-b05 \
 127          jdk- jdk-9u1 jdk-9-1 \
 128         jdk6u22 jdk6u-b01 jdk6u11-b1 jdk6u1000-b01 ; do
 129   echo "-- $r tag $t"
 130   if HGUSER=$setup_author $HG tag -r 1 "$t"; then hg rollback; fail $r; fi
 131   hg revert -a; rm .hgtags
 132   r=$(expr $r + 1)
 133 done
 134 
 135 HG='hg --config hooks.pretxncommit.jcheck=python:jcheck.hook'
 136 for t in jdk4-b01 jdk5-b01 jdk6-b01 jdk7-b01 jdk8-b01 jdk9-b01 \
 137         jdk-9+1 jdk-10+1 \
 138         jdk4-b100 jdk8-b800 \
 139         jdk4u4-b04 jdk5u5-b05 jdk6u6-b06 jdk7u7-b07 jdk8u8-b08 jdk9u9-b09 \
 140         jdk8u80-b08 jdk8u100-b100 \
 141         jdk-9+100 jdk-9.1.2.1+3 jdk-9.0.1+42 \
 142         hs11-b02 hs12.1-b11 hs13.10-b12 ; do
 143   echo "-- $r tag $t"
 144   if ! HGUSER=$setup_author $HG tag -r 1 "$t"; then fail $r; fi
 145   hg rollback; hg revert -a; rm .hgtags
 146   r=$(expr $r + 1)
 147 done
 148 
 149 # Black/white lists
 150 
 151 blackhash=b5dd894e33c0dfa6cde0c5c5fd1f7a7e5edd6f01
 152 whitehash=1c3c89ae5adcd57d074a268c5328df476ccabf52
 153 rm -rf z
 154 hg init z
 155 mkdir z/.jcheck
 156 echo 'project=jdk7' >z/.jcheck/conf
 157 
 158 cat >z/.hg/hgrc <<___
 159 [extensions]
 160 jcheck_test = $(pwd)/jcheck_test.py
 161 ___
 162 
 163 echo "-- $r blacklist"
 164 echo foo >z/foo
 165 hg add -R z z/foo
 166 HGUSER=$setup_author hg ci -R z -m '1010101: Good but black
 167 Reviewed-by: duke' -d '0 0'
 168 if hg jcheck_test --black $blackhash -R z -r tip; then fail; fi
 169 r=$(expr $r + 1)
 170 
 171 echo "-- $r blacklist file 1"
 172 echo "$blackhash # blacklisted" > blacklist
 173 if hg jcheck_test -R z -r tip; then fail; fi
 174 rm -f blacklist
 175 r=$(expr $r + 1)
 176 
 177 echo "-- $r blacklist file 2"
 178 echo "  $blackhash#" > blacklist
 179 if hg jcheck_test -R z -r tip; then fail; fi
 180 rm -f blacklist
 181 r=$(expr $r + 1)
 182 
 183 echo "-- $r blacklist file 3"
 184 echo "# $blackhash # not really blacklisted" > blacklist
 185 if hg jcheck_test -R z -r tip; then true; else fail; fi
 186 rm -f blacklist
 187 r=$(expr $r + 1)
 188 
 189 echo "-- $r whitelist"
 190 echo foobar >z/foo
 191 HGUSER=$setup_author hg ci -R z -m '1010101: Bad but white' -d '0 0'
 192 if hg jcheck_test --white $whitehash -R z -r tip; then true; else fail; fi
 193 r=$(expr $r + 1)
 194 
 195 # Duplicate bugids
 196 echo "-- $r duplicate bug ids"
 197 rm -rf z
 198 hg init z
 199 mkdir z/.jcheck
 200 cat >z/.jcheck/conf <<___
 201 project=jdk7
 202 comments=lax
 203 bugids=dup
 204 ___
 205 hg add -R z z/.jcheck/conf
 206 
 207 HGUSER=$setup_author hg ci -R z -m '1111111: Foo!' -d '0 0'
 208 touch z/foo
 209 hg add -R z z/foo
 210 if HGUSER=$setup_author hg ci -R z -m '1111111: Foo!'; then true; else fail; fi
 211 r=$(expr $r + 1)
 212 
 213 # Lax bugids
 214 echo "-- $r lax bug ids"
 215 rm -rf z
 216 hg init z
 217 mkdir z/.jcheck
 218 cat >z/.jcheck/conf <<___
 219 project=jdk7
 220 comments=lax
 221 bugids=lax
 222 ___
 223 hg add -R z z/.jcheck/conf
 224 
 225 if HGUSER=$setup_author hg ci -R z -m '1234: Silly bugid'; then true; else fail; fi
 226 r=$(expr $r + 1)
 227 
 228 # Ignore bugids
 229 echo "-- $r ignore bug ids 1"
 230 rm -rf z
 231 hg init z
 232 cat >z/.hg/hgrc <<___
 233 [extensions]
 234 jcheck = $(pwd)/jcheck.py
 235 [hooks]
 236 pretxncommit.jcheck=python:jcheck.hook
 237 ___
 238 mkdir z/.jcheck
 239 cat >z/.jcheck/conf <<___
 240 project=jdk7
 241 bugids=ignore
 242 ___
 243 hg add -R z z/.jcheck/conf
 244 
 245 if HGUSER=$setup_author hg ci -R z -m "OPENJDK6-1: test separate bugids
 246 Reviewed-by: $pass_author"; then true; else fail; fi
 247 r=$(expr $r + 1)
 248 
 249 echo "-- $r ignore bug ids 2"
 250 rm -rf z
 251 hg init z
 252 cat >z/.hg/hgrc <<___
 253 [extensions]
 254 jcheck = $(pwd)/jcheck.py
 255 [hooks]
 256 pretxncommit.jcheck=python:jcheck.hook
 257 ___
 258 mkdir z/.jcheck
 259 cat >z/.jcheck/conf <<___
 260 project=jdk7
 261 bugids=ignore
 262 ___
 263 hg add -R z z/.jcheck/conf
 264 
 265 if HGUSER=$setup_author hg ci -R z -m "openjdk6-2: test separate bugids
 266 Reviewed-by: $pass_author"; then fail; else true; fi
 267 r=$(expr $r + 1)
 268 
 269 echo "-- $r ignore bug ids 3"
 270 rm -rf z
 271 hg init z
 272 cat >z/.hg/hgrc <<___
 273 [extensions]
 274 jcheck = $(pwd)/jcheck.py
 275 [hooks]
 276 pretxncommit.jcheck=python:jcheck.hook
 277 ___
 278 mkdir z/.jcheck
 279 cat >z/.jcheck/conf <<___
 280 project=jdk7
 281 bugids=ignore
 282 ___
 283 hg add -R z z/.jcheck/conf
 284 
 285 if HGUSER=$setup_author hg ci -R z -m "6-2: test separate bugids
 286 Reviewed-by: $pass_author"; then fail; else true; fi
 287 
 288 echo "-- $r ignore bug ids 4"
 289 rm -rf z
 290 hg init z
 291 cat >z/.hg/hgrc <<___
 292 [extensions]
 293 jcheck = $(pwd)/jcheck.py
 294 [hooks]
 295 pretxncommit.jcheck=python:jcheck.hook
 296 ___
 297 mkdir z/.jcheck
 298 cat >z/.jcheck/conf <<___
 299 project=jdk7
 300 bugids=dup
 301 ___
 302 hg add -R z z/.jcheck/conf
 303 
 304 if HGUSER=$setup_author hg ci -R z -m "OPENJDK-42: Don't collect non-numeric bugids
 305 Reviewed-by: $pass_author" >z/log 2>&1; then fail; else
 306   if grep 'ValueError' z/log; then fail; fi
 307 fi
 308 r=$(expr $r + 1)
 309 
 310 # tags=lax tests
 311 echo "-- $r tags=lax tag check"
 312 rm -rf z
 313 hg init z
 314 mkdir z/.jcheck
 315 cat >z/.jcheck/conf <<___
 316 project=jdk7
 317 tags=lax
 318 ___
 319 hg add -R z z/.jcheck/conf
 320 cat >z/.hg/hgrc <<___
 321 [extensions]
 322 jcheck = $(pwd)/jcheck.py
 323 [hooks]
 324 pretxncommit.jcheck=python:jcheck.hook
 325 ___
 326 if HGUSER=$setup_author hg ci -R z -m '1111111: Foo!
 327 Reviewed-by: duke' -d '0 0' \
 328    && HGUSER=$setup_author $HG tag -R z -r tip hsparent
 329 then true; else fail; fi
 330 r=$(expr $r + 1)
 331 
 332 echo "-- $r tags=lax comment check"
 333 touch z/foo
 334 hg add -R z z/foo
 335 HGUSER=$setup_author $HG ci -R z -m "Buggy bug bug bug
 336 Reviewed-by: fang"
 337 if [ $? -eq 0 ]; then fail; fi
 338 r=$(expr $r + 1)
 339 
 340 # Summary
 341 
 342 if [ $failures -gt 0 ]; then
 343   echo "-- FAILURES: $failures"
 344 else
 345   echo "-- All tests passed"
 346 fi
 347 [ $failures != 0 ] && exit 1 || exit 0