Megatest

Hex Artifact Content
Login

Artifact 679021e6efd1ac20f08524ee73f1350d370ed3c5:


0000: 3b 3b 20 43 6f 70 79 72 69 67 68 74 20 32 30 30  ;; Copyright 200
0010: 36 2d 32 30 31 37 2c 20 4d 61 74 74 68 65 77 20  6-2017, Matthew 
0020: 57 65 6c 6c 61 6e 64 2e 0a 3b 3b 20 0a 3b 3b 20  Welland..;; .;; 
0030: 54 68 69 73 20 66 69 6c 65 20 69 73 20 70 61 72  This file is par
0040: 74 20 6f 66 20 4d 65 67 61 74 65 73 74 2e 0a 3b  t of Megatest..;
0050: 3b 20 0a 3b 3b 20 20 20 20 20 4d 65 67 61 74 65  ; .;;     Megate
0060: 73 74 20 69 73 20 66 72 65 65 20 73 6f 66 74 77  st is free softw
0070: 61 72 65 3a 20 79 6f 75 20 63 61 6e 20 72 65 64  are: you can red
0080: 69 73 74 72 69 62 75 74 65 20 69 74 20 61 6e 64  istribute it and
0090: 2f 6f 72 20 6d 6f 64 69 66 79 0a 3b 3b 20 20 20  /or modify.;;   
00a0: 20 20 69 74 20 75 6e 64 65 72 20 74 68 65 20 74    it under the t
00b0: 65 72 6d 73 20 6f 66 20 74 68 65 20 47 4e 55 20  erms of the GNU 
00c0: 47 65 6e 65 72 61 6c 20 50 75 62 6c 69 63 20 4c  General Public L
00d0: 69 63 65 6e 73 65 20 61 73 20 70 75 62 6c 69 73  icense as publis
00e0: 68 65 64 20 62 79 0a 3b 3b 20 20 20 20 20 74 68  hed by.;;     th
00f0: 65 20 46 72 65 65 20 53 6f 66 74 77 61 72 65 20  e Free Software 
0100: 46 6f 75 6e 64 61 74 69 6f 6e 2c 20 65 69 74 68  Foundation, eith
0110: 65 72 20 76 65 72 73 69 6f 6e 20 33 20 6f 66 20  er version 3 of 
0120: 74 68 65 20 4c 69 63 65 6e 73 65 2c 20 6f 72 0a  the License, or.
0130: 3b 3b 20 20 20 20 20 28 61 74 20 79 6f 75 72 20  ;;     (at your 
0140: 6f 70 74 69 6f 6e 29 20 61 6e 79 20 6c 61 74 65  option) any late
0150: 72 20 76 65 72 73 69 6f 6e 2e 0a 3b 3b 20 0a 3b  r version..;; .;
0160: 3b 20 20 20 20 20 4d 65 67 61 74 65 73 74 20 69  ;     Megatest i
0170: 73 20 64 69 73 74 72 69 62 75 74 65 64 20 69 6e  s distributed in
0180: 20 74 68 65 20 68 6f 70 65 20 74 68 61 74 20 69   the hope that i
0190: 74 20 77 69 6c 6c 20 62 65 20 75 73 65 66 75 6c  t will be useful
01a0: 2c 0a 3b 3b 20 20 20 20 20 62 75 74 20 57 49 54  ,.;;     but WIT
01b0: 48 4f 55 54 20 41 4e 59 20 57 41 52 52 41 4e 54  HOUT ANY WARRANT
01c0: 59 3b 20 77 69 74 68 6f 75 74 20 65 76 65 6e 20  Y; without even 
01d0: 74 68 65 20 69 6d 70 6c 69 65 64 20 77 61 72 72  the implied warr
01e0: 61 6e 74 79 20 6f 66 0a 3b 3b 20 20 20 20 20 4d  anty of.;;     M
01f0: 45 52 43 48 41 4e 54 41 42 49 4c 49 54 59 20 6f  ERCHANTABILITY o
0200: 72 20 46 49 54 4e 45 53 53 20 46 4f 52 20 41 20  r FITNESS FOR A 
0210: 50 41 52 54 49 43 55 4c 41 52 20 50 55 52 50 4f  PARTICULAR PURPO
0220: 53 45 2e 20 20 53 65 65 20 74 68 65 0a 3b 3b 20  SE.  See the.;; 
0230: 20 20 20 20 47 4e 55 20 47 65 6e 65 72 61 6c 20      GNU General 
0240: 50 75 62 6c 69 63 20 4c 69 63 65 6e 73 65 20 66  Public License f
0250: 6f 72 20 6d 6f 72 65 20 64 65 74 61 69 6c 73 2e  or more details.
0260: 0a 3b 3b 20 0a 3b 3b 20 20 20 20 20 59 6f 75 20  .;; .;;     You 
0270: 73 68 6f 75 6c 64 20 68 61 76 65 20 72 65 63 65  should have rece
0280: 69 76 65 64 20 61 20 63 6f 70 79 20 6f 66 20 74  ived a copy of t
0290: 68 65 20 47 4e 55 20 47 65 6e 65 72 61 6c 20 50  he GNU General P
02a0: 75 62 6c 69 63 20 4c 69 63 65 6e 73 65 0a 3b 3b  ublic License.;;
02b0: 20 20 20 20 20 61 6c 6f 6e 67 20 77 69 74 68 20       along with 
02c0: 4d 65 67 61 74 65 73 74 2e 20 20 49 66 20 6e 6f  Megatest.  If no
02d0: 74 2c 20 73 65 65 20 3c 68 74 74 70 3a 2f 2f 77  t, see <http://w
02e0: 77 77 2e 67 6e 75 2e 6f 72 67 2f 6c 69 63 65 6e  ww.gnu.org/licen
02f0: 73 65 73 2f 3e 2e 0a 0a 3b 3b 3d 3d 3d 3d 3d 3d  ses/>...;;======
0300: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
0310: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
0320: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
0330: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
0340: 0a 3b 3b 0a 3b 3b 20 57 72 61 70 70 65 72 20 74  .;;.;; Wrapper t
0350: 6f 20 65 6e 61 62 6c 65 20 72 75 6e 6e 69 6e 67  o enable running
0360: 20 4d 65 67 61 74 65 73 74 20 66 6c 6f 77 73 20   Megatest flows 
0370: 75 6e 64 65 72 20 74 65 61 6d 63 69 74 79 0a 3b  under teamcity.;
0380: 3b 0a 3b 3b 20 20 31 2e 20 52 75 6e 20 74 68 65  ;.;;  1. Run the
0390: 20 6d 65 67 61 74 65 73 74 20 70 72 6f 63 65 73   megatest proces
03a0: 73 20 61 6e 64 20 70 61 73 73 20 69 74 20 61 6c  s and pass it al
03b0: 6c 20 74 68 65 20 6e 65 65 64 65 64 20 70 61 72  l the needed par
03c0: 61 6d 65 74 65 72 73 0a 3b 3b 20 20 32 2e 20 45  ameters.;;  2. E
03d0: 76 65 72 79 20 66 69 76 65 20 73 65 63 6f 6e 64  very five second
03e0: 73 20 63 68 65 63 6b 20 66 6f 72 20 73 74 61 74  s check for stat
03f0: 65 2f 73 74 61 74 75 73 20 63 68 61 6e 67 65 73  e/status changes
0400: 20 61 6e 64 20 70 72 69 6e 74 20 74 68 65 20 69   and print the i
0410: 6e 66 6f 0a 3b 3b 0a 0a 28 75 73 65 20 73 72 66  nfo.;;..(use srf
0420: 69 2d 31 20 70 6f 73 69 78 20 73 72 66 69 2d 36  i-1 posix srfi-6
0430: 39 20 73 72 66 69 2d 31 38 20 72 65 67 65 78 20  9 srfi-18 regex 
0440: 64 65 66 73 74 72 75 63 74 29 0a 0a 28 75 73 65  defstruct)..(use
0450: 20 74 72 61 63 65 29 0a 3b 3b 20 28 74 72 61 63   trace).;; (trac
0460: 65 2d 63 61 6c 6c 2d 73 69 74 65 73 20 23 74 29  e-call-sites #t)
0470: 0a 0a 28 64 65 63 6c 61 72 65 20 28 75 73 65 73  ..(declare (uses
0480: 20 6d 61 72 67 73 29 29 0a 28 64 65 63 6c 61 72   margs)).(declar
0490: 65 20 28 75 73 65 73 20 72 6d 74 29 29 0a 28 64  e (uses rmt)).(d
04a0: 65 63 6c 61 72 65 20 28 75 73 65 73 20 63 6f 6d  eclare (uses com
04b0: 6d 6f 6e 29 29 0a 28 64 65 63 6c 61 72 65 20 28  mon)).(declare (
04c0: 75 73 65 73 20 6d 65 67 61 74 65 73 74 2d 76 65  uses megatest-ve
04d0: 72 73 69 6f 6e 29 29 0a 0a 28 69 6e 63 6c 75 64  rsion))..(includ
04e0: 65 20 22 6d 65 67 61 74 65 73 74 2d 66 6f 73 73  e "megatest-foss
04f0: 69 6c 2d 68 61 73 68 2e 73 63 6d 22 29 0a 28 69  il-hash.scm").(i
0500: 6e 63 6c 75 64 65 20 22 64 62 5f 72 65 63 6f 72  nclude "db_recor
0510: 64 73 2e 73 63 6d 22 29 0a 0a 28 64 65 66 69 6e  ds.scm")..(defin
0520: 65 20 6f 72 69 67 61 72 67 73 20 28 63 64 72 20  e origargs (cdr 
0530: 28 61 72 67 76 29 29 29 0a 28 64 65 66 69 6e 65  (argv))).(define
0540: 20 72 65 6d 61 72 67 73 20 28 61 72 67 73 3a 67   remargs (args:g
0550: 65 74 2d 61 72 67 73 0a 09 09 20 28 61 72 67 76  et-args... (argv
0560: 29 0a 09 09 20 60 28 20 22 2d 74 61 72 67 65 74  )... `( "-target
0570: 22 0a 09 09 20 20 20 20 22 2d 72 65 71 74 61 72  "...    "-reqtar
0580: 67 22 0a 09 09 20 20 20 20 22 2d 72 75 6e 6e 61  g"...    "-runna
0590: 6d 65 22 0a 09 09 20 20 20 20 22 2d 64 65 6c 61  me"...    "-dela
05a0: 79 22 20 20 20 3b 3b 20 68 6f 77 20 6c 6f 6e 67  y"   ;; how long
05b0: 20 74 6f 20 77 61 69 74 20 66 6f 72 20 75 6e 65   to wait for une
05c0: 78 70 65 63 74 65 64 20 63 68 61 6e 67 65 73 20  xpected changes 
05d0: 74 6f 20 0a 09 09 20 20 20 20 29 0a 09 09 20 60  to ...    )... `
05e0: 28 22 2d 74 63 2d 72 65 70 6c 22 0a 09 09 20 20  ("-tc-repl"...  
05f0: 20 29 0a 09 09 20 61 72 67 73 3a 61 72 67 2d 68   )... args:arg-h
0600: 61 73 68 0a 09 09 20 30 29 29 0a 0a 28 64 65 66  ash... 0))..(def
0610: 73 74 72 75 63 74 20 74 65 73 74 64 61 74 0a 20  struct testdat. 
0620: 20 28 74 63 2d 74 79 70 65 20 23 66 29 0a 20 20   (tc-type #f).  
0630: 28 73 74 61 74 65 20 20 20 23 66 29 0a 20 20 28  (state   #f).  (
0640: 73 74 61 74 75 73 20 20 23 66 29 0a 20 20 28 6f  status  #f).  (o
0650: 76 65 72 61 6c 6c 20 23 66 29 0a 20 20 28 66 6c  verall #f).  (fl
0660: 6f 77 69 64 20 20 23 66 29 0a 20 20 74 63 74 6e  owid  #f).  tctn
0670: 61 6d 65 0a 20 20 74 6e 61 6d 65 0a 20 20 28 65  ame.  tname.  (e
0680: 76 65 6e 74 2d 74 69 6d 65 20 23 66 29 0a 20 20  vent-time #f).  
0690: 64 65 74 61 69 6c 73 0a 20 20 63 6f 6d 6d 65 6e  details.  commen
06a0: 74 0a 20 20 64 75 72 61 74 69 6f 6e 0a 20 20 28  t.  duration.  (
06b0: 73 74 61 72 74 2d 70 72 69 6e 74 65 64 20 23 66  start-printed #f
06c0: 29 0a 20 20 28 65 6e 64 2d 70 72 69 6e 74 65 64  ).  (end-printed
06d0: 20 20 20 23 66 29 29 0a 0a 3b 3b 3d 3d 3d 3d 3d     #f))..;;=====
06e0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
06f0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
0700: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
0710: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
0720: 3d 0a 3b 3b 20 47 4c 4f 42 41 4c 53 0a 3b 3b 3d  =.;; GLOBALS.;;=
0730: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
0740: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
0750: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
0760: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
0770: 3d 3d 3d 3d 3d 0a 0a 3b 3b 20 47 6f 74 74 61 20  =====..;; Gotta 
0780: 68 61 76 65 20 61 20 67 6c 6f 62 61 6c 3f 20 53  have a global? S
0790: 74 61 73 68 20 69 74 20 69 6e 20 74 68 65 20 2a  tash it in the *
07a0: 67 6c 6f 62 61 6c 2a 20 68 61 73 68 20 74 61 62  global* hash tab
07b0: 6c 65 2e 0a 3b 3b 0a 28 64 65 66 69 6e 65 20 2a  le..;;.(define *
07c0: 67 6c 6f 62 61 6c 2a 20 28 6d 61 6b 65 2d 68 61  global* (make-ha
07d0: 73 68 2d 74 61 62 6c 65 29 29 0a 0a 28 64 65 66  sh-table))..(def
07e0: 69 6e 65 20 28 74 63 6d 74 3a 70 72 69 6e 74 20  ine (tcmt:print 
07f0: 74 64 61 74 20 66 6c 75 73 68 2d 6d 6f 64 65 29  tdat flush-mode)
0800: 0a 20 20 28 6c 65 74 2a 20 28 28 63 6f 6d 6d 65  .  (let* ((comme
0810: 6e 74 20 20 28 69 66 20 28 74 65 73 74 64 61 74  nt  (if (testdat
0820: 2d 63 6f 6d 6d 65 6e 74 20 74 64 61 74 29 0a 09  -comment tdat)..
0830: 09 20 20 20 20 20 20 20 28 63 6f 6e 63 20 22 20  .       (conc " 
0840: 6d 65 73 73 61 67 65 3d 27 22 20 28 74 65 73 74  message='" (test
0850: 64 61 74 2d 63 6f 6d 6d 65 6e 74 20 74 64 61 74  dat-comment tdat
0860: 29 20 22 27 22 29 0a 09 09 20 20 20 20 20 20 20  ) "'")...       
0870: 22 22 29 29 0a 09 20 28 64 65 74 61 69 6c 73 20  "")).. (details 
0880: 20 28 69 66 20 28 74 65 73 74 64 61 74 2d 64 65   (if (testdat-de
0890: 74 61 69 6c 73 20 74 64 61 74 29 0a 09 09 20 20  tails tdat)...  
08a0: 20 20 20 20 20 28 63 6f 6e 63 20 22 20 64 65 74       (conc " det
08b0: 61 69 6c 73 3d 27 22 20 28 74 65 73 74 64 61 74  ails='" (testdat
08c0: 2d 64 65 74 61 69 6c 73 20 74 64 61 74 29 20 22  -details tdat) "
08d0: 27 22 29 0a 09 09 20 20 20 20 20 20 20 22 22 29  '")...       "")
08e0: 29 0a 09 20 28 66 6c 6f 77 69 64 20 20 20 28 63  ).. (flowid   (c
08f0: 6f 6e 63 20 22 20 66 6c 6f 77 49 64 3d 27 22 20  onc " flowId='" 
0900: 28 74 65 73 74 64 61 74 2d 66 6c 6f 77 69 64 20  (testdat-flowid 
0910: 20 20 74 64 61 74 29 20 22 27 22 29 29 0a 09 20    tdat) "'")).. 
0920: 28 64 75 72 61 74 69 6f 6e 20 28 63 6f 6e 63 20  (duration (conc 
0930: 22 20 64 75 72 61 74 69 6f 6e 3d 27 22 20 28 2a  " duration='" (*
0940: 20 31 65 33 20 28 74 65 73 74 64 61 74 2d 64 75   1e3 (testdat-du
0950: 72 61 74 69 6f 6e 20 74 64 61 74 29 29 20 22 27  ration tdat)) "'
0960: 22 29 29 0a 09 20 28 74 63 6e 61 6d 65 20 20 20  ")).. (tcname   
0970: 28 63 6f 6e 63 20 22 20 6e 61 6d 65 3d 27 22 20  (conc " name='" 
0980: 28 74 65 73 74 64 61 74 2d 74 63 74 6e 61 6d 65  (testdat-tctname
0990: 20 20 74 64 61 74 29 20 22 27 22 29 29 0a 09 20    tdat) "'")).. 
09a0: 28 73 74 61 74 65 20 20 20 20 28 73 74 72 69 6e  (state    (strin
09b0: 67 2d 3e 73 79 6d 62 6f 6c 20 28 74 65 73 74 64  g->symbol (testd
09c0: 61 74 2d 73 74 61 74 65 20 74 64 61 74 29 29 29  at-state tdat)))
09d0: 0a 09 20 28 73 74 61 74 75 73 20 20 20 28 73 74  .. (status   (st
09e0: 72 69 6e 67 2d 3e 73 79 6d 62 6f 6c 20 28 74 65  ring->symbol (te
09f0: 73 74 64 61 74 2d 73 74 61 74 75 73 20 74 64 61  stdat-status tda
0a00: 74 29 29 29 0a 09 20 28 73 74 61 72 74 70 20 20  t))).. (startp  
0a10: 20 28 74 65 73 74 64 61 74 2d 73 74 61 72 74 2d   (testdat-start-
0a20: 70 72 69 6e 74 65 64 20 74 64 61 74 29 29 0a 09  printed tdat))..
0a30: 20 28 65 6e 64 70 20 20 20 20 20 28 74 65 73 74   (endp     (test
0a40: 64 61 74 2d 65 6e 64 2d 70 72 69 6e 74 65 64 20  dat-end-printed 
0a50: 20 20 74 64 61 74 29 29 0a 09 20 28 65 74 69 6d    tdat)).. (etim
0a60: 65 20 20 20 20 28 74 65 73 74 64 61 74 2d 65 76  e    (testdat-ev
0a70: 65 6e 74 2d 74 69 6d 65 20 20 20 20 74 64 61 74  ent-time    tdat
0a80: 29 29 0a 09 20 28 6f 76 65 72 61 6c 6c 20 20 28  )).. (overall  (
0a90: 63 61 73 65 20 73 74 61 74 65 0a 09 09 20 20 20  case state...   
0aa0: 20 20 28 28 52 55 4e 4e 49 4e 47 29 20 20 20 73    ((RUNNING)   s
0ab0: 74 61 74 65 29 0a 09 09 20 20 20 20 20 28 28 43  tate)...     ((C
0ac0: 4f 4d 50 4c 45 54 45 44 29 20 73 74 61 74 65 29  OMPLETED) state)
0ad0: 0a 09 09 20 20 20 20 20 28 65 6c 73 65 20 27 55  ...     (else 'U
0ae0: 4e 4b 29 29 29 0a 09 20 28 74 73 74 6d 70 20 20  NK))).. (tstmp  
0af0: 20 20 28 63 6f 6e 63 20 22 20 74 69 6d 65 73 74    (conc " timest
0b00: 61 6d 70 3d 27 22 20 28 74 69 6d 65 2d 3e 73 74  amp='" (time->st
0b10: 72 69 6e 67 20 28 73 65 63 6f 6e 64 73 2d 3e 6c  ring (seconds->l
0b20: 6f 63 61 6c 2d 74 69 6d 65 20 65 74 69 6d 65 29  ocal-time etime)
0b30: 20 22 25 46 54 25 54 2e 30 30 30 22 29 20 22 27   "%FT%T.000") "'
0b40: 22 29 29 29 0a 20 20 20 20 28 63 61 73 65 20 6f  "))).    (case o
0b50: 76 65 72 61 6c 6c 0a 20 20 20 20 20 20 28 28 52  verall.      ((R
0b60: 55 4e 4e 49 4e 47 29 0a 20 20 20 20 20 20 20 28  UNNING).       (
0b70: 69 66 20 28 6e 6f 74 20 73 74 61 72 74 70 29 0a  if (not startp).
0b80: 09 20 20 20 28 62 65 67 69 6e 0a 09 20 20 20 20  .   (begin..    
0b90: 20 28 70 72 69 6e 74 20 22 23 23 74 65 61 6d 63   (print "##teamc
0ba0: 69 74 79 5b 74 65 73 74 53 74 61 72 74 65 64 20  ity[testStarted 
0bb0: 22 20 20 74 63 6e 61 6d 65 20 66 6c 6f 77 69 64  "  tcname flowid
0bc0: 20 74 73 74 6d 70 20 22 5d 22 29 0a 09 20 20 20   tstmp "]")..   
0bd0: 20 20 28 74 65 73 74 64 61 74 2d 73 74 61 72 74    (testdat-start
0be0: 2d 70 72 69 6e 74 65 64 2d 73 65 74 21 20 74 64  -printed-set! td
0bf0: 61 74 20 23 74 29 29 29 29 0a 20 20 20 20 20 20  at #t)))).      
0c00: 28 28 43 4f 4d 50 4c 45 54 45 44 29 0a 20 20 20  ((COMPLETED).   
0c10: 20 20 20 20 28 69 66 20 28 6e 6f 74 20 73 74 61      (if (not sta
0c20: 72 74 70 29 20 3b 3b 20 73 74 61 72 74 20 73 74  rtp) ;; start st
0c30: 61 6e 7a 61 20 6e 65 76 65 72 20 70 72 69 6e 74  anza never print
0c40: 65 64 0a 09 20 20 20 28 62 65 67 69 6e 0a 09 20  ed..   (begin.. 
0c50: 20 20 20 20 28 70 72 69 6e 74 20 22 23 23 74 65      (print "##te
0c60: 61 6d 63 69 74 79 5b 74 65 73 74 53 74 61 72 74  amcity[testStart
0c70: 65 64 20 22 20 74 63 6e 61 6d 65 20 66 6c 6f 77  ed " tcname flow
0c80: 69 64 20 74 73 74 6d 70 20 22 5d 22 29 0a 09 20  id tstmp "]").. 
0c90: 20 20 20 20 28 74 65 73 74 64 61 74 2d 73 74 61      (testdat-sta
0ca0: 72 74 2d 70 72 69 6e 74 65 64 2d 73 65 74 21 20  rt-printed-set! 
0cb0: 74 64 61 74 20 23 74 29 29 29 0a 20 20 20 20 20  tdat #t))).     
0cc0: 20 20 28 69 66 20 28 6e 6f 74 20 65 6e 64 70 29    (if (not endp)
0cd0: 0a 09 20 20 20 28 62 65 67 69 6e 0a 09 20 20 20  ..   (begin..   
0ce0: 20 20 28 69 66 20 28 6e 6f 74 20 28 6d 65 6d 62    (if (not (memb
0cf0: 65 72 20 73 74 61 74 75 73 20 27 28 50 41 53 53  er status '(PASS
0d00: 20 57 41 52 4e 20 53 4b 49 50 20 57 41 49 56 45   WARN SKIP WAIVE
0d10: 44 29 29 29 0a 09 09 20 28 70 72 69 6e 74 20 22  D)))... (print "
0d20: 23 23 74 65 61 6d 63 69 74 79 5b 74 65 73 74 46  ##teamcity[testF
0d30: 61 69 6c 65 64 20 20 22 20 74 63 6e 61 6d 65 20  ailed  " tcname 
0d40: 66 6c 6f 77 69 64 20 63 6f 6d 6d 65 6e 74 20 64  flowid comment d
0d50: 65 74 61 69 6c 73 20 22 5d 22 29 29 0a 20 20 20  etails "]")).   
0d60: 20 20 20 20 20 20 20 20 20 20 28 70 72 69 6e 74            (print
0d70: 20 22 23 23 74 65 61 6d 63 69 74 79 5b 74 65 73   "##teamcity[tes
0d80: 74 46 69 6e 69 73 68 65 64 22 20 74 63 6e 61 6d  tFinished" tcnam
0d90: 65 20 66 6c 6f 77 69 64 20 63 6f 6d 6d 65 6e 74  e flowid comment
0da0: 20 64 65 74 61 69 6c 73 20 64 75 72 61 74 69 6f   details duratio
0db0: 6e 20 22 5d 22 29 0a 09 20 20 20 20 20 28 74 65  n "]")..     (te
0dc0: 73 74 64 61 74 2d 65 6e 64 2d 70 72 69 6e 74 65  stdat-end-printe
0dd0: 64 2d 73 65 74 21 20 74 64 61 74 20 23 74 29 29  d-set! tdat #t))
0de0: 29 29 0a 20 20 20 20 20 20 28 65 6c 73 65 0a 20  )).      (else. 
0df0: 20 20 20 20 20 20 28 69 66 20 66 6c 75 73 68 2d        (if flush-
0e00: 6d 6f 64 65 0a 09 20 20 20 28 62 65 67 69 6e 0a  mode..   (begin.
0e10: 09 20 20 20 20 20 28 69 66 20 28 6e 6f 74 20 73  .     (if (not s
0e20: 74 61 72 74 70 29 0a 09 09 20 28 62 65 67 69 6e  tartp)... (begin
0e30: 0a 09 09 20 20 20 28 70 72 69 6e 74 20 22 23 23  ...   (print "##
0e40: 74 65 61 6d 63 69 74 79 5b 74 65 73 74 53 74 61  teamcity[testSta
0e50: 72 74 65 64 20 22 20 74 63 6e 61 6d 65 20 66 6c  rted " tcname fl
0e60: 6f 77 69 64 20 74 73 74 6d 70 20 22 5d 22 29 0a  owid tstmp "]").
0e70: 09 09 20 20 20 28 74 65 73 74 64 61 74 2d 73 74  ..   (testdat-st
0e80: 61 72 74 2d 70 72 69 6e 74 65 64 2d 73 65 74 21  art-printed-set!
0e90: 20 74 64 61 74 20 23 74 29 29 29 0a 09 20 20 20   tdat #t)))..   
0ea0: 20 20 28 69 66 20 28 6e 6f 74 20 65 6e 64 70 29    (if (not endp)
0eb0: 0a 09 09 20 28 62 65 67 69 6e 0a 09 09 20 20 20  ... (begin...   
0ec0: 28 70 72 69 6e 74 20 22 23 23 74 65 61 6d 63 69  (print "##teamci
0ed0: 74 79 5b 74 65 73 74 46 61 69 6c 65 64 20 20 22  ty[testFailed  "
0ee0: 20 74 63 6e 61 6d 65 20 66 6c 6f 77 69 64 20 63   tcname flowid c
0ef0: 6f 6d 6d 65 6e 74 20 64 65 74 61 69 6c 73 20 22  omment details "
0f00: 5d 22 29 0a 20 20 20 20 20 20 20 20 20 20 20 20  ]").            
0f10: 20 20 20 20 20 20 20 28 70 72 69 6e 74 20 22 23         (print "#
0f20: 23 74 65 61 6d 63 69 74 79 5b 74 65 73 74 46 69  #teamcity[testFi
0f30: 6e 69 73 68 65 64 22 20 74 63 6e 61 6d 65 20 66  nished" tcname f
0f40: 6c 6f 77 69 64 20 63 6f 6d 6d 65 6e 74 20 64 65  lowid comment de
0f50: 74 61 69 6c 73 20 64 75 72 61 74 69 6f 6e 20 22  tails duration "
0f60: 5d 22 29 0a 09 09 20 20 20 28 74 65 73 74 64 61  ]")...   (testda
0f70: 74 2d 65 6e 64 2d 70 72 69 6e 74 65 64 2d 73 65  t-end-printed-se
0f80: 74 21 20 74 64 61 74 20 23 74 29 29 29 29 29 29  t! tdat #t))))))
0f90: 29 0a 20 20 20 20 3b 3b 20 28 70 72 69 6e 74 20  ).    ;; (print 
0fa0: 22 45 52 52 4f 52 3a 20 74 63 2d 74 79 70 65 20  "ERROR: tc-type 
0fb0: 5c 22 22 20 28 74 65 73 74 64 61 74 2d 74 63 2d  \"" (testdat-tc-
0fc0: 74 79 70 65 20 74 64 61 74 29 20 22 5c 22 20 6e  type tdat) "\" n
0fd0: 6f 74 20 72 65 63 6f 67 6e 69 73 65 64 20 66 6f  ot recognised fo
0fe0: 72 20 22 20 74 63 6e 61 6d 65 29 29 29 0a 20 20  r " tcname))).  
0ff0: 20 20 28 66 6c 75 73 68 2d 6f 75 74 70 75 74 29    (flush-output)
1000: 29 29 0a 0a 3b 3b 20 3b 3b 20 72 65 74 75 72 6e  ))..;; ;; return
1010: 73 20 76 61 6c 75 65 73 3a 20 66 6c 61 67 20 6e  s values: flag n
1020: 65 77 6c 73 74 0a 3b 3b 20 28 64 65 66 69 6e 65  ewlst.;; (define
1030: 20 28 72 65 6d 6f 76 65 2d 64 75 70 6c 69 63 61   (remove-duplica
1040: 74 65 2d 63 6f 6d 70 6c 65 74 65 64 20 20 74 64  te-completed  td
1050: 61 74 73 29 0a 3b 3b 20 20 20 28 6c 65 74 2a 20  ats).;;   (let* 
1060: 28 28 66 6c 61 67 20 20 20 20 20 20 20 23 66 29  ((flag       #f)
1070: 0a 3b 3b 20 20 20 20 20 20 20 20 20 20 28 73 74  .;;          (st
1080: 61 74 65 20 20 20 20 20 20 28 74 65 73 74 64 61  ate      (testda
1090: 74 2d 73 74 61 74 65 20 20 20 20 20 20 74 64 61  t-state      tda
10a0: 74 29 29 0a 3b 3b 20 20 20 20 20 20 20 20 20 20  t)).;;          
10b0: 28 73 74 61 74 75 73 20 20 20 20 20 28 74 65 73  (status     (tes
10c0: 74 64 61 74 2d 73 74 61 74 75 73 20 20 20 20 20  tdat-status     
10d0: 74 64 61 74 29 29 0a 3b 3b 20 20 20 20 20 20 20  tdat)).;;       
10e0: 20 20 20 28 65 76 65 6e 74 2d 74 69 6d 65 20 28     (event-time (
10f0: 74 65 73 74 64 61 74 2d 65 76 65 6e 74 2d 74 69  testdat-event-ti
1100: 6d 65 20 74 64 61 74 29 29 0a 3b 3b 20 20 20 20  me tdat)).;;    
1110: 20 20 20 20 20 20 28 74 6e 61 6d 65 20 20 20 20        (tname    
1120: 20 20 28 74 65 73 74 64 61 74 2d 74 6e 61 6d 65    (testdat-tname
1130: 20 20 20 20 20 20 74 64 61 74 29 29 29 0a 3b 3b        tdat))).;;
1140: 20 20 20 20 20 28 6c 65 74 20 6c 6f 6f 70 20 28       (let loop (
1150: 28 68 65 64 20 28 63 61 72 20 74 64 61 74 73 29  (hed (car tdats)
1160: 29 0a 3b 3b 20 20 20 20 20 20 20 20 20 20 20 20  ).;;            
1170: 20 20 20 20 28 74 61 6c 20 28 63 64 72 20 74 64      (tal (cdr td
1180: 61 74 73 29 29 0a 3b 3b 20 20 20 20 20 20 20 20  ats)).;;        
1190: 20 20 20 20 20 20 20 20 28 6e 65 77 20 27 28 29          (new '()
11a0: 29 29 0a 3b 3b 20 20 20 20 20 20 20 28 69 66 20  )).;;       (if 
11b0: 28 61 6e 64 20 28 65 71 75 61 6c 3f 20 73 74 61  (and (equal? sta
11c0: 74 65 20 22 43 4f 4d 50 4c 45 54 45 44 22 29 0a  te "COMPLETED").
11d0: 3b 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;;              
11e0: 20 20 28 65 71 75 61 6c 3f 20 74 6e 61 6d 65 20    (equal? tname 
11f0: 28 74 65 73 74 64 61 74 2d 74 6e 61 6d 65 20 68  (testdat-tname h
1200: 65 64 29 29 0a 3b 3b 20 20 20 20 20 20 20 20 20  ed)).;;         
1210: 20 20 20 20 20 20 20 28 65 71 75 61 6c 3f 20 73         (equal? s
1220: 74 61 74 65 20 28 74 65 73 74 64 61 74 2d 73 74  tate (testdat-st
1230: 61 74 65 20 68 65 64 29 29 29 20 3b 3b 20 77 65  ate hed))) ;; we
1240: 20 68 61 76 65 20 61 20 64 75 70 6c 69 63 61 74   have a duplicat
1250: 65 20 43 4f 4d 50 4c 45 54 45 44 20 63 61 6c 6c  e COMPLETED call
1260: 0a 3b 3b 20 20 20 20 20 20 20 20 20 20 20 28 62  .;;           (b
1270: 65 67 69 6e 0a 3b 3b 20 20 20 20 20 20 20 20 20  egin.;;         
1280: 20 20 20 20 28 73 65 74 21 20 66 6c 61 67 20 23      (set! flag #
1290: 74 29 20 3b 3b 20 41 20 63 68 61 6e 67 65 64 20  t) ;; A changed 
12a0: 63 6f 6d 70 6c 65 74 65 64 0a 20 20 20 20 20 20  completed.      
12b0: 20 20 20 20 20 20 0a 3b 3b 20 70 72 6f 63 65 73        .;; proces
12c0: 73 20 74 68 65 20 71 75 65 75 65 20 6f 66 20 74  s the queue of t
12d0: 65 73 74 73 20 67 61 74 68 65 72 65 64 20 73 6f  ests gathered so
12e0: 20 66 61 72 2e 20 4c 69 73 74 20 69 6e 63 6c 75   far. List inclu
12f0: 64 65 73 20 6f 6e 65 20 65 6e 74 72 79 20 66 6f  des one entry fo
1300: 72 20 65 76 65 72 79 20 74 65 73 74 20 73 6f 20  r every test so 
1310: 66 61 72 20 73 65 65 6e 0a 3b 3b 20 74 68 65 20  far seen.;; the 
1320: 6c 61 73 74 20 72 65 63 6f 72 64 20 66 6f 72 20  last record for 
1330: 61 20 74 65 73 74 20 69 73 20 70 72 65 73 65 72  a test is preser
1340: 76 65 64 2e 20 49 74 65 6d 73 20 61 72 65 20 6f  ved. Items are o
1350: 6e 6c 79 20 72 65 6d 6f 76 65 64 20 66 72 6f 6d  nly removed from
1360: 20 74 68 65 20 6c 69 73 74 20 69 66 20 6f 76 65   the list if ove
1370: 72 20 31 35 20 73 65 63 6f 6e 64 73 0a 3b 3b 20  r 15 seconds.;; 
1380: 68 61 76 65 20 70 61 73 73 65 64 20 73 69 6e 63  have passed sinc
1390: 65 20 69 74 20 68 61 70 70 65 6e 65 64 2e 20 54  e it happened. T
13a0: 68 69 73 20 61 6c 6c 6f 77 73 20 66 6f 72 20 63  his allows for c
13b0: 6f 6d 70 72 65 73 73 69 6f 6e 20 6f 66 20 43 4f  ompression of CO
13c0: 4d 50 4c 45 54 45 44 2f 46 41 49 4c 20 66 6f 6c  MPLETED/FAIL fol
13d0: 6c 6f 77 65 64 20 62 79 20 73 6f 6d 65 20 6f 74  lowed by some ot
13e0: 68 65 72 0a 3b 3b 20 73 74 61 74 65 2f 73 74 61  her.;; state/sta
13f0: 74 75 73 0a 3b 3b 0a 28 64 65 66 69 6e 65 20 28  tus.;;.(define (
1400: 70 72 6f 63 65 73 73 2d 71 75 65 75 65 20 64 61  process-queue da
1410: 74 61 20 61 67 65 20 66 6c 75 73 68 2d 6d 6f 64  ta age flush-mod
1420: 65 29 0a 20 20 3b 3b 20 68 65 72 65 20 77 65 20  e).  ;; here we 
1430: 70 72 6f 63 65 73 73 20 74 71 75 65 75 65 20 61  process tqueue a
1440: 6e 64 20 67 61 74 68 65 72 20 74 68 6f 73 65 20  nd gather those 
1450: 6f 76 65 72 20 31 35 20 73 65 63 6f 6e 64 73 20  over 15 seconds 
1460: 28 63 6f 6e 66 69 67 75 72 61 62 6c 65 3f 29 20  (configurable?) 
1470: 6f 6c 64 0a 20 20 28 6c 65 74 2a 20 28 28 70 72  old.  (let* ((pr
1480: 69 6e 74 2d 74 69 6d 65 20 28 2d 20 28 63 75 72  int-time (- (cur
1490: 72 65 6e 74 2d 73 65 63 6f 6e 64 73 29 20 61 67  rent-seconds) ag
14a0: 65 29 29 20 3b 3b 20 70 72 69 6e 74 20 73 74 75  e)) ;; print stu
14b0: 66 66 20 6f 76 65 72 20 31 35 20 73 65 63 6f 6e  ff over 15 secon
14c0: 64 73 20 6f 6c 64 0a 20 20 20 20 20 20 20 20 20  ds old.         
14d0: 28 74 71 75 65 75 65 2d 72 61 77 20 28 68 61 73  (tqueue-raw (has
14e0: 68 2d 74 61 62 6c 65 2d 72 65 66 2f 64 65 66 61  h-table-ref/defa
14f0: 75 6c 74 20 64 61 74 61 20 27 74 71 75 65 75 65  ult data 'tqueue
1500: 20 27 28 29 29 29 0a 20 20 20 20 20 20 20 20 20   '())).         
1510: 28 74 71 75 65 75 65 20 20 20 20 20 28 72 65 76  (tqueue     (rev
1520: 65 72 73 65 20 28 64 65 6c 65 74 65 2d 64 75 70  erse (delete-dup
1530: 6c 69 63 61 74 65 73 20 74 71 75 65 75 65 2d 72  licates tqueue-r
1540: 61 77 20 20 20 20 20 3b 3b 20 52 45 4d 4f 56 45  aw     ;; REMOVE
1550: 20 64 75 70 6c 69 63 61 74 65 73 20 62 79 20 74   duplicates by t
1560: 65 73 74 6e 61 6d 65 20 61 6e 64 20 73 74 61 74  estname and stat
1570: 65 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e.              
1580: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1590: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15a0: 20 20 20 28 6c 61 6d 62 64 61 20 28 61 20 62 29     (lambda (a b)
15b0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
15c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15e0: 20 20 20 20 28 61 6e 64 20 28 65 71 75 61 6c 3f      (and (equal?
15f0: 20 28 74 65 73 74 64 61 74 2d 74 6e 61 6d 65 20   (testdat-tname 
1600: 61 29 28 74 65 73 74 64 61 74 2d 74 6e 61 6d 65  a)(testdat-tname
1610: 20 62 29 29 20 20 20 20 20 20 20 20 3b 3b 20 6e   b))        ;; n
1620: 65 65 64 20 6f 6c 64 65 73 74 20 74 6f 20 6e 65  eed oldest to ne
1630: 77 65 73 74 0a 20 20 20 20 20 20 20 20 20 20 20  west.           
1640: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1650: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1660: 20 20 20 20 20 20 20 20 20 20 20 20 20 28 65 71               (eq
1670: 75 61 6c 3f 20 28 74 65 73 74 64 61 74 2d 73 74  ual? (testdat-st
1680: 61 74 65 20 61 29 20 28 74 65 73 74 64 61 74 2d  ate a) (testdat-
1690: 73 74 61 74 65 20 62 29 29 29 29 29 29 29 29 20  state b)))))))) 
16a0: 3b 3b 20 22 43 4f 4d 50 4c 45 54 45 44 22 29 0a  ;; "COMPLETED").
16b0: 20 20 20 20 3b 3b 20 28 65 71 75 61 6c 3f 20 28      ;; (equal? (
16c0: 74 65 73 74 64 61 74 2d 73 74 61 74 65 20 62 29  testdat-state b)
16d0: 20 22 43 4f 4d 50 4c 45 54 45 44 22 29 29 29 29   "COMPLETED"))))
16e0: 29 29 29 0a 20 20 20 20 28 69 66 20 28 6e 6f 74  ))).    (if (not
16f0: 20 28 6e 75 6c 6c 3f 20 74 71 75 65 75 65 29 29   (null? tqueue))
1700: 0a 20 20 20 20 20 20 20 20 28 68 61 73 68 2d 74  .        (hash-t
1710: 61 62 6c 65 2d 73 65 74 21 0a 20 20 20 20 20 20  able-set!.      
1720: 20 20 20 64 61 74 61 0a 20 20 20 20 20 20 20 20     data.        
1730: 20 27 74 71 75 65 75 65 0a 20 20 20 20 20 20 20   'tqueue.       
1740: 20 20 28 6c 65 74 20 6c 6f 6f 70 20 28 28 68 65    (let loop ((he
1750: 64 20 28 63 61 72 20 74 71 75 65 75 65 29 29 20  d (car tqueue)) 
1760: 3b 3b 20 62 79 20 74 68 69 73 20 70 6f 69 6e 74  ;; by this point
1770: 20 61 6c 6c 20 64 75 70 6c 69 63 61 74 65 73 20   all duplicates 
1780: 62 79 20 73 74 61 74 65 20 43 4f 4d 50 4c 45 54  by state COMPLET
1790: 45 44 20 61 72 65 20 72 65 6d 6f 76 65 64 0a 20  ED are removed. 
17a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17b0: 20 20 20 28 74 61 6c 20 28 63 64 72 20 74 71 75     (tal (cdr tqu
17c0: 65 75 65 29 29 0a 20 20 20 20 20 20 20 20 20 20  eue)).          
17d0: 20 20 20 20 20 20 20 20 20 20 28 72 65 6d 20 27            (rem '
17e0: 28 29 29 29 0a 20 20 20 20 20 20 20 20 20 20 20  ())).           
17f0: 28 69 66 20 28 3e 20 70 72 69 6e 74 2d 74 69 6d  (if (> print-tim
1800: 65 20 28 74 65 73 74 64 61 74 2d 65 76 65 6e 74  e (testdat-event
1810: 2d 74 69 6d 65 20 68 65 64 29 29 20 3b 3b 20 65  -time hed)) ;; e
1820: 76 65 6e 74 20 68 61 70 70 65 6e 65 64 20 6f 76  vent happened ov
1830: 65 72 20 31 35 20 73 65 63 6f 6e 64 73 20 61 67  er 15 seconds ag
1840: 6f 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  o.              
1850: 20 28 62 65 67 69 6e 0a 20 20 20 20 20 20 20 20   (begin.        
1860: 20 20 20 20 20 20 20 20 20 28 74 63 6d 74 3a 70           (tcmt:p
1870: 72 69 6e 74 20 68 65 64 20 66 6c 75 73 68 2d 6d  rint hed flush-m
1880: 6f 64 65 29 0a 20 20 20 20 20 20 20 20 20 20 20  ode).           
1890: 20 20 20 20 20 20 28 69 66 20 28 6e 75 6c 6c 3f        (if (null?
18a0: 20 74 61 6c 29 0a 20 20 20 20 20 20 20 20 20 20   tal).          
18b0: 20 20 20 20 20 20 20 20 20 20 20 72 65 6d 20 3b             rem ;
18c0: 3b 20 72 65 74 75 72 6e 20 72 65 6d 20 74 6f 20  ; return rem to 
18d0: 62 65 20 70 72 6f 63 65 73 73 65 64 20 69 6e 20  be processed in 
18e0: 74 68 65 20 66 75 74 75 72 65 0a 20 20 20 20 20  the future.     
18f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1900: 28 6c 6f 6f 70 20 28 63 61 72 20 74 61 6c 29 28  (loop (car tal)(
1910: 63 64 72 20 74 61 6c 29 20 72 65 6d 29 29 29 0a  cdr tal) rem))).
1920: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28                 (
1930: 69 66 20 28 6e 75 6c 6c 3f 20 74 61 6c 29 0a 20  if (null? tal). 
1940: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1950: 20 20 28 63 6f 6e 73 20 68 65 64 20 72 65 6d 29    (cons hed rem)
1960: 20 3b 3b 20 72 65 74 75 72 6e 20 72 65 6d 20 2b   ;; return rem +
1970: 20 68 65 64 20 66 6f 72 20 66 75 74 75 72 65 20   hed for future 
1980: 70 72 6f 63 65 73 73 69 6e 67 0a 20 20 20 20 20  processing.     
1990: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 6c                (l
19a0: 6f 6f 70 20 28 63 61 72 20 74 61 6c 29 28 63 64  oop (car tal)(cd
19b0: 72 20 74 61 6c 29 28 63 6f 6e 73 20 68 65 64 20  r tal)(cons hed 
19c0: 72 65 6d 29 29 29 29 29 29 29 29 29 0a 0a 3b 3b  rem)))))))))..;;
19d0: 20 23 23 74 65 61 6d 63 69 74 79 5b 74 65 73 74   ##teamcity[test
19e0: 53 74 61 72 74 65 64 20 6e 61 6d 65 3d 27 73 75  Started name='su
19f0: 69 74 65 2e 74 65 73 74 4e 61 6d 65 27 5d 0a 3b  ite.testName'].;
1a00: 3b 20 23 23 74 65 61 6d 63 69 74 79 5b 74 65 73  ; ##teamcity[tes
1a10: 74 53 74 64 4f 75 74 20 6e 61 6d 65 3d 27 73 75  tStdOut name='su
1a20: 69 74 65 2e 74 65 73 74 4e 61 6d 65 27 20 6f 75  ite.testName' ou
1a30: 74 3d 27 74 65 78 74 27 5d 0a 3b 3b 20 23 23 74  t='text'].;; ##t
1a40: 65 61 6d 63 69 74 79 5b 74 65 73 74 53 74 64 45  eamcity[testStdE
1a50: 72 72 20 6e 61 6d 65 3d 27 73 75 69 74 65 2e 74  rr name='suite.t
1a60: 65 73 74 4e 61 6d 65 27 20 6f 75 74 3d 27 65 72  estName' out='er
1a70: 72 6f 72 20 74 65 78 74 27 5d 0a 3b 3b 20 23 23  ror text'].;; ##
1a80: 74 65 61 6d 63 69 74 79 5b 74 65 73 74 46 61 69  teamcity[testFai
1a90: 6c 65 64 20 6e 61 6d 65 3d 27 73 75 69 74 65 2e  led name='suite.
1aa0: 74 65 73 74 4e 61 6d 65 27 20 6d 65 73 73 61 67  testName' messag
1ab0: 65 3d 27 66 61 69 6c 75 72 65 20 6d 65 73 73 61  e='failure messa
1ac0: 67 65 27 20 64 65 74 61 69 6c 73 3d 27 6d 65 73  ge' details='mes
1ad0: 73 61 67 65 20 61 6e 64 20 73 74 61 63 6b 20 74  sage and stack t
1ae0: 72 61 63 65 27 5d 0a 3b 3b 20 23 23 74 65 61 6d  race'].;; ##team
1af0: 63 69 74 79 5b 74 65 73 74 46 69 6e 69 73 68 65  city[testFinishe
1b00: 64 20 6e 61 6d 65 3d 27 73 75 69 74 65 2e 74 65  d name='suite.te
1b10: 73 74 4e 61 6d 65 27 20 64 75 72 61 74 69 6f 6e  stName' duration
1b20: 3d 27 35 30 27 5d 0a 3b 3b 20 0a 3b 3b 20 66 6c  ='50'].;; .;; fl
1b30: 75 73 68 3b 20 23 66 2c 20 6e 6f 72 6d 61 6c 20  ush; #f, normal 
1b40: 63 61 6c 6c 2e 20 23 74 2c 20 6c 61 73 74 20 63  call. #t, last c
1b50: 61 6c 6c 2c 20 70 72 69 6e 74 20 6f 75 74 20 73  all, print out s
1b60: 6f 6d 65 74 68 69 6e 67 20 66 6f 72 20 4e 4f 54  omething for NOT
1b70: 5f 53 54 41 52 54 45 44 2c 20 65 74 63 2e 0a 3b  _STARTED, etc..;
1b80: 3b 0a 0a 3b 3b 3b 3b 3b 3b 3b 20 20 20 28 62 65  ;..;;;;;;;   (be
1b90: 67 69 6e 0a 3b 3b 3b 3b 3b 3b 3b 20 20 20 20 20  gin.;;;;;;;     
1ba0: 28 63 61 73 65 20 28 73 74 72 69 6e 67 2d 3e 73  (case (string->s
1bb0: 79 6d 62 6f 6c 20 6e 65 77 73 74 61 74 29 0a 3b  ymbol newstat).;
1bc0: 3b 3b 3b 3b 3b 3b 20 20 20 20 20 20 20 28 28 55  ;;;;;;       ((U
1bd0: 4e 4b 29 20 20 20 20 20 20 20 29 20 3b 3b 20 64  NK)       ) ;; d
1be0: 6f 20 6e 6f 74 68 69 6e 67 0a 3b 3b 3b 3b 3b 3b  o nothing.;;;;;;
1bf0: 3b 20 20 20 20 20 20 20 28 28 52 55 4e 4e 49 4e  ;       ((RUNNIN
1c00: 47 29 20 20 20 28 70 72 69 6e 74 20 22 23 23 74  G)   (print "##t
1c10: 65 61 6d 63 69 74 79 5b 74 65 73 74 53 74 61 72  eamcity[testStar
1c20: 74 65 64 20 6e 61 6d 65 3d 27 22 20 74 63 74 6e  ted name='" tctn
1c30: 61 6d 65 20 22 27 20 66 6c 6f 77 49 64 3d 27 22  ame "' flowId='"
1c40: 20 66 6c 6f 77 69 64 20 22 27 5d 22 29 29 0a 3b   flowid "']")).;
1c50: 3b 3b 3b 3b 3b 3b 20 20 20 20 20 20 20 28 28 50  ;;;;;;       ((P
1c60: 41 53 53 20 53 4b 49 50 20 57 41 52 4e 20 57 41  ASS SKIP WARN WA
1c70: 49 56 45 44 29 20 28 70 72 69 6e 74 20 22 23 23  IVED) (print "##
1c80: 74 65 61 6d 63 69 74 79 5b 74 65 73 74 46 69 6e  teamcity[testFin
1c90: 69 73 68 65 64 20 6e 61 6d 65 3d 27 22 20 74 63  ished name='" tc
1ca0: 74 6e 61 6d 65 20 22 27 20 64 75 72 61 74 69 6f  tname "' duratio
1cb0: 6e 3d 27 22 20 28 2a 20 31 65 33 20 64 75 72 61  n='" (* 1e3 dura
1cc0: 74 69 6f 6e 29 20 22 27 22 20 63 6d 74 73 74 72  tion) "'" cmtstr
1cd0: 20 64 65 74 61 69 6c 73 20 22 20 66 6c 6f 77 49   details " flowI
1ce0: 64 3d 27 22 20 66 6c 6f 77 69 64 20 22 27 5d 22  d='" flowid "']"
1cf0: 29 29 0a 3b 3b 3b 3b 3b 3b 3b 20 20 20 20 20 20  )).;;;;;;;      
1d00: 20 28 65 6c 73 65 0a 3b 3b 3b 3b 3b 3b 3b 20 09   (else.;;;;;;; .
1d10: 28 70 72 69 6e 74 20 22 23 23 74 65 61 6d 63 69  (print "##teamci
1d20: 74 79 5b 74 65 73 74 46 61 69 6c 65 64 20 6e 61  ty[testFailed na
1d30: 6d 65 3d 27 22 20 74 63 74 6e 61 6d 65 20 22 27  me='" tctname "'
1d40: 20 22 20 63 6d 74 73 74 72 20 64 65 74 61 69 6c   " cmtstr detail
1d50: 73 20 22 20 66 6c 6f 77 49 64 3d 27 22 20 66 6c  s " flowId='" fl
1d60: 6f 77 69 64 20 22 27 5d 22 29 29 29 0a 3b 3b 3b  owid "']"))).;;;
1d70: 3b 3b 3b 3b 20 20 20 20 20 28 66 6c 75 73 68 2d  ;;;;     (flush-
1d80: 6f 75 74 70 75 74 29 0a 0a 3b 3b 20 28 74 72 61  output)..;; (tra
1d90: 63 65 20 72 6d 74 3a 67 65 74 2d 74 65 73 74 73  ce rmt:get-tests
1da0: 2d 66 6f 72 2d 72 75 6e 29 0a 0a 28 64 65 66 69  -for-run)..(defi
1db0: 6e 65 20 28 75 70 64 61 74 65 2d 71 75 65 75 65  ne (update-queue
1dc0: 2d 73 69 6e 63 65 20 64 61 74 61 20 72 75 6e 2d  -since data run-
1dd0: 69 64 73 20 6c 61 73 74 2d 75 70 64 61 74 65 20  ids last-update 
1de0: 74 73 6e 61 6d 65 20 74 61 72 67 65 74 20 72 75  tsname target ru
1df0: 6e 6e 61 6d 65 20 66 6c 6f 77 69 64 20 66 6c 75  nname flowid flu
1e00: 73 68 20 23 21 6b 65 79 20 28 64 65 6c 61 79 2d  sh #!key (delay-
1e10: 66 6c 61 67 20 23 74 29 29 20 3b 3b 20 0a 20 20  flag #t)) ;; .  
1e20: 28 6c 65 74 20 28 28 6e 6f 77 20 20 20 20 20 20  (let ((now      
1e30: 20 20 20 20 20 28 63 75 72 72 65 6e 74 2d 73 65       (current-se
1e40: 63 6f 6e 64 73 29 29 0a 09 28 73 74 69 6c 6c 2d  conds))..(still-
1e50: 72 75 6e 6e 69 6e 67 20 23 66 29 29 0a 3b 3b 20  running #f)).;; 
1e60: 28 68 61 6e 64 6c 65 2d 65 78 63 65 70 74 69 6f  (handle-exceptio
1e70: 6e 73 0a 3b 3b 20 09 65 78 6e 0a 3b 3b 20 09 28  ns.;; .exn.;; .(
1e80: 62 65 67 69 6e 20 28 70 72 69 6e 74 2d 63 61 6c  begin (print-cal
1e90: 6c 2d 63 68 61 69 6e 29 20 28 70 72 69 6e 74 20  l-chain) (print 
1ea0: 22 45 72 72 6f 72 20 6d 65 73 73 61 67 65 3a 20  "Error message: 
1eb0: 22 20 28 28 63 6f 6e 64 69 74 69 6f 6e 2d 70 72  " ((condition-pr
1ec0: 6f 70 65 72 74 79 2d 61 63 63 65 73 73 6f 72 20  operty-accessor 
1ed0: 27 65 78 6e 20 27 6d 65 73 73 61 67 65 29 20 65  'exn 'message) e
1ee0: 78 6e 29 29 29 0a 20 20 20 20 20 20 28 66 6f 72  xn))).      (for
1ef0: 2d 65 61 63 68 0a 20 20 20 20 20 20 20 28 6c 61  -each.       (la
1f00: 6d 62 64 61 20 28 72 75 6e 2d 69 64 29 0a 09 20  mbda (run-id).. 
1f10: 28 6c 65 74 2a 20 28 28 74 65 73 74 73 20 28 72  (let* ((tests (r
1f20: 6d 74 3a 67 65 74 2d 74 65 73 74 73 2d 66 6f 72  mt:get-tests-for
1f30: 2d 72 75 6e 20 72 75 6e 2d 69 64 20 22 25 22 20  -run run-id "%" 
1f40: 27 28 29 20 27 28 29 20 23 66 20 23 66 20 23 66  '() '() #f #f #f
1f50: 20 23 66 20 23 66 20 23 66 20 6c 61 73 74 2d 75   #f #f #f last-u
1f60: 70 64 61 74 65 20 23 66 29 29 29 0a 09 20 20 20  pdate #f)))..   
1f70: 3b 3b 20 28 70 72 69 6e 74 20 22 44 45 42 55 47  ;; (print "DEBUG
1f80: 3a 20 67 6f 74 20 74 65 73 74 73 3d 22 20 74 65  : got tests=" te
1f90: 73 74 73 29 0a 09 20 20 20 28 66 6f 72 2d 65 61  sts)..   (for-ea
1fa0: 63 68 0a 09 20 20 20 20 28 6c 61 6d 62 64 61 20  ch..    (lambda 
1fb0: 28 74 65 73 74 2d 72 65 63 29 0a 09 20 20 20 20  (test-rec)..    
1fc0: 20 20 28 6c 65 74 2a 20 28 28 74 71 75 65 75 65    (let* ((tqueue
1fd0: 20 20 20 28 68 61 73 68 2d 74 61 62 6c 65 2d 72     (hash-table-r
1fe0: 65 66 2f 64 65 66 61 75 6c 74 20 64 61 74 61 20  ef/default data 
1ff0: 27 74 71 75 65 75 65 20 27 28 29 29 29 20 3b 3b  'tqueue '())) ;;
2000: 20 4e 4f 54 45 3a 20 74 68 65 20 6b 65 79 20 69   NOTE: the key i
2010: 73 20 61 20 73 79 6d 62 6f 6c 21 20 54 68 69 73  s a symbol! This
2020: 20 61 6c 6c 6f 77 73 20 6b 65 65 70 69 6e 67 20   allows keeping 
2030: 64 69 73 70 61 72 61 74 65 20 69 6e 66 6f 20 69  disparate info i
2040: 6e 20 74 68 65 20 6f 6e 65 20 68 61 73 68 2c 20  n the one hash, 
2050: 6c 61 7a 79 20 62 75 74 20 61 20 71 75 69 63 6b  lazy but a quick
2060: 20 73 6f 6c 75 74 69 6f 6e 20 66 6f 72 20 72 69   solution for ri
2070: 67 68 74 20 6e 6f 77 2e 0a 09 09 20 20 20 20 20  ght now....     
2080: 28 69 73 2d 74 6f 70 20 20 20 28 64 62 3a 74 65  (is-top   (db:te
2090: 73 74 2d 67 65 74 2d 69 73 2d 74 6f 70 6c 65 76  st-get-is-toplev
20a0: 65 6c 20 20 74 65 73 74 2d 72 65 63 29 29 0a 09  el  test-rec))..
20b0: 09 20 20 20 20 20 28 74 6e 61 6d 65 20 20 20 20  .     (tname    
20c0: 28 64 62 3a 74 65 73 74 2d 67 65 74 2d 66 75 6c  (db:test-get-ful
20d0: 6c 6e 61 6d 65 20 20 20 20 20 74 65 73 74 2d 72  lname     test-r
20e0: 65 63 29 29 0a 09 09 20 20 20 20 20 28 74 65 73  ec))...     (tes
20f0: 74 6e 61 6d 65 20 28 64 62 3a 74 65 73 74 2d 67  tname (db:test-g
2100: 65 74 2d 74 65 73 74 6e 61 6d 65 20 20 20 20 20  et-testname     
2110: 74 65 73 74 2d 72 65 63 29 29 0a 09 09 20 20 20  test-rec))...   
2120: 20 20 28 69 74 65 6d 70 61 74 68 20 28 64 62 3a    (itempath (db:
2130: 74 65 73 74 2d 67 65 74 2d 69 74 65 6d 2d 70 61  test-get-item-pa
2140: 74 68 20 20 20 20 74 65 73 74 2d 72 65 63 29 29  th    test-rec))
2150: 0a 09 09 20 20 20 20 20 28 74 63 74 6e 61 6d 65  ...     (tctname
2160: 20 20 28 69 66 20 28 73 74 72 69 6e 67 3d 3f 20    (if (string=? 
2170: 69 74 65 6d 70 61 74 68 20 22 22 29 20 74 65 73  itempath "") tes
2180: 74 6e 61 6d 65 20 28 63 6f 6e 63 20 74 65 73 74  tname (conc test
2190: 6e 61 6d 65 20 22 2e 22 20 28 73 74 72 69 6e 67  name "." (string
21a0: 2d 74 72 61 6e 73 6c 61 74 65 20 69 74 65 6d 70  -translate itemp
21b0: 61 74 68 20 22 2f 22 20 22 2e 22 29 29 29 29 0a  ath "/" ".")))).
21c0: 09 09 20 20 20 20 20 28 73 74 61 74 65 20 20 20  ..     (state   
21d0: 20 28 64 62 3a 74 65 73 74 2d 67 65 74 2d 73 74   (db:test-get-st
21e0: 61 74 65 20 20 20 20 20 20 20 20 74 65 73 74 2d  ate        test-
21f0: 72 65 63 29 29 0a 09 09 20 20 20 20 20 28 73 74  rec))...     (st
2200: 61 74 75 73 20 20 20 28 64 62 3a 74 65 73 74 2d  atus   (db:test-
2210: 67 65 74 2d 73 74 61 74 75 73 20 20 20 20 20 20  get-status      
2220: 20 74 65 73 74 2d 72 65 63 29 29 0a 09 09 20 20   test-rec))...  
2230: 20 20 20 28 65 74 69 6d 65 20 20 20 20 28 64 62     (etime    (db
2240: 3a 74 65 73 74 2d 67 65 74 2d 65 76 65 6e 74 5f  :test-get-event_
2250: 74 69 6d 65 20 20 20 74 65 73 74 2d 72 65 63 29  time   test-rec)
2260: 29 0a 09 09 20 20 20 20 20 28 64 75 72 61 74 69  )...     (durati
2270: 6f 6e 20 28 6f 72 20 28 61 6e 79 2d 3e 6e 75 6d  on (or (any->num
2280: 62 65 72 20 28 64 62 3a 74 65 73 74 2d 67 65 74  ber (db:test-get
2290: 2d 72 75 6e 5f 64 75 72 61 74 69 6f 6e 20 74 65  -run_duration te
22a0: 73 74 2d 72 65 63 29 29 20 30 29 29 0a 09 09 20  st-rec)) 0))... 
22b0: 20 20 20 20 28 63 6f 6d 6d 65 6e 74 20 20 28 64      (comment  (d
22c0: 62 3a 74 65 73 74 2d 67 65 74 2d 63 6f 6d 6d 65  b:test-get-comme
22d0: 6e 74 20 20 20 20 20 20 74 65 73 74 2d 72 65 63  nt      test-rec
22e0: 29 29 0a 09 09 20 20 20 20 20 28 6c 6f 67 66 69  ))...     (logfi
22f0: 6c 65 20 20 28 64 62 3a 74 65 73 74 2d 67 65 74  le  (db:test-get
2300: 2d 66 69 6e 61 6c 5f 6c 6f 67 66 20 20 20 74 65  -final_logf   te
2310: 73 74 2d 72 65 63 29 29 0a 20 20 20 20 20 20 20  st-rec)).       
2320: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 68                (h
2330: 6f 73 74 6e 20 20 20 20 28 64 62 3a 74 65 73 74  ostn    (db:test
2340: 2d 67 65 74 2d 68 6f 73 74 20 20 20 20 20 20 20  -get-host       
2350: 20 20 74 65 73 74 2d 72 65 63 29 29 0a 20 20 20    test-rec)).   
2360: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2370: 20 20 28 70 69 64 20 20 20 20 20 20 28 64 62 3a    (pid      (db:
2380: 74 65 73 74 2d 67 65 74 2d 70 72 6f 63 65 73 73  test-get-process
2390: 5f 69 64 20 20 20 74 65 73 74 2d 72 65 63 29 29  _id   test-rec))
23a0: 0a 09 09 20 20 20 20 20 28 74 65 73 74 2d 63 6f  ...     (test-co
23b0: 6e 74 20 28 3e 20 28 2b 20 65 74 69 6d 65 20 64  nt (> (+ etime d
23c0: 75 72 61 74 69 6f 6e 20 34 30 29 20 28 63 75 72  uration 40) (cur
23d0: 72 65 6e 74 2d 73 65 63 6f 6e 64 73 29 29 29 20  rent-seconds))) 
23e0: 3b 3b 20 74 65 73 74 20 68 61 73 20 6e 6f 74 20  ;; test has not 
23f0: 62 65 65 6e 20 6f 76 65 72 20 66 6f 72 20 6d 6f  been over for mo
2400: 72 65 20 74 68 61 6e 20 32 30 20 73 65 63 6f 6e  re than 20 secon
2410: 64 73 0a 09 09 20 20 20 20 20 28 61 64 6a 2d 73  ds...     (adj-s
2420: 74 61 74 65 20 28 69 66 20 64 65 6c 61 79 2d 66  tate (if delay-f
2430: 6c 61 67 0a 09 09 09 09 20 20 20 20 28 69 66 20  lag.....    (if 
2440: 74 65 73 74 2d 63 6f 6e 74 0a 09 09 09 09 09 28  test-cont......(
2450: 62 65 67 69 6e 0a 09 09 09 09 09 20 20 28 73 65  begin......  (se
2460: 74 21 20 73 74 69 6c 6c 2d 72 75 6e 6e 69 6e 67  t! still-running
2470: 20 23 74 29 0a 09 09 09 09 09 20 20 22 52 55 4e   #t)......  "RUN
2480: 4e 49 4e 47 22 29 0a 09 09 09 09 09 73 74 61 74  NING")......stat
2490: 65 29 0a 09 09 09 09 20 20 20 20 73 74 61 74 65  e).....    state
24a0: 29 29 0a 09 09 20 20 20 20 20 28 6e 65 77 73 74  ))...     (newst
24b0: 61 74 20 20 28 63 6f 6e 64 0a 20 20 20 20 20 20  at  (cond.      
24c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24d0: 20 20 20 20 20 20 20 20 20 20 3b 3b 20 28 28 6f            ;; ((o
24e0: 72 20 28 6e 6f 74 20 64 65 6c 61 79 2d 66 6c 61  r (not delay-fla
24f0: 67 29 0a 09 09 09 09 3b 3b 20 20 20 20 20 20 28  g).....;;      (
2500: 3c 20 28 2b 20 65 74 69 6d 65 20 64 75 72 61 74  < (+ etime durat
2510: 69 6f 6e 29 0a 09 09 09 09 3b 3b 20 09 28 2d 20  ion).....;; .(- 
2520: 28 63 75 72 72 65 6e 74 2d 73 65 63 6f 6e 64 73  (current-seconds
2530: 29 20 31 30 29 29 29 0a 09 09 09 09 3b 3b 20 09  ) 10))).....;; .
2540: 28 70 72 69 6e 74 20 22 53 6b 69 70 70 69 6e 67  (print "Skipping
2550: 20 61 73 20 64 65 6c 61 79 20 68 61 73 6e 27 74   as delay hasn't
2560: 20 68 69 74 22 29 20 22 52 55 4e 4e 49 4e 47 22   hit") "RUNNING"
2570: 29 20 0a 09 09 09 09 28 28 65 71 75 61 6c 3f 20  ) .....((equal? 
2580: 61 64 6a 2d 73 74 61 74 65 20 22 52 55 4e 4e 49  adj-state "RUNNI
2590: 4e 47 22 29 0a 09 09 09 09 20 28 73 65 74 21 20  NG")..... (set! 
25a0: 73 74 69 6c 6c 2d 72 75 6e 6e 69 6e 67 20 23 74  still-running #t
25b0: 29 0a 09 09 09 09 20 22 52 55 4e 4e 49 4e 47 22  )..... "RUNNING"
25c0: 29 0a 09 09 09 09 28 28 65 71 75 61 6c 3f 20 61  ).....((equal? a
25d0: 64 6a 2d 73 74 61 74 65 20 22 43 4f 4d 50 4c 45  dj-state "COMPLE
25e0: 54 45 44 22 29 0a 09 09 09 09 20 73 74 61 74 75  TED")..... statu
25f0: 73 29 0a 09 09 09 09 28 66 6c 75 73 68 20 20 20  s).....(flush   
2600: 28 63 6f 6e 63 20 73 74 61 74 65 20 22 2f 22 20  (conc state "/" 
2610: 73 74 61 74 75 73 29 29 0a 09 09 09 09 28 65 6c  status)).....(el
2620: 73 65 20 22 55 4e 4b 22 29 29 29 0a 09 09 20 20  se "UNK")))...  
2630: 20 20 20 28 63 6d 74 73 74 72 20 20 20 28 69 66     (cmtstr   (if
2640: 20 28 61 6e 64 20 28 6e 6f 74 20 66 6c 75 73 68   (and (not flush
2650: 29 20 63 6f 6d 6d 65 6e 74 29 0a 09 09 09 09 20  ) comment)..... 
2660: 20 20 63 6f 6d 6d 65 6e 74 0a 09 09 09 09 20 20    comment.....  
2670: 20 28 69 66 20 66 6c 75 73 68 0a 09 09 09 09 20   (if flush..... 
2680: 20 20 20 20 20 20 28 63 6f 6e 63 20 22 54 65 73        (conc "Tes
2690: 74 20 65 6e 64 65 64 20 69 6e 20 73 74 61 74 65  t ended in state
26a0: 2f 73 74 61 74 75 73 3d 22 0a 09 09 09 09 09 20  /status="...... 
26b0: 20 20 20 20 73 74 61 74 65 20 22 2f 22 20 73 74      state "/" st
26c0: 61 74 75 73 0a 09 09 09 09 09 20 20 20 20 20 28  atus......     (
26d0: 69 66 20 20 28 73 74 72 69 6e 67 2d 6d 61 74 63  if  (string-matc
26e0: 68 20 22 5e 5c 5c 73 2a 24 22 20 63 6f 6d 6d 65  h "^\\s*$" comme
26f0: 6e 74 29 0a 09 09 09 09 09 09 20 20 22 2c 20 6e  nt).......  ", n
2700: 6f 20 4d 65 67 61 74 65 73 74 20 63 6f 6d 6d 65  o Megatest comme
2710: 6e 74 20 66 6f 75 6e 64 2e 22 0a 09 09 09 09 09  nt found."......
2720: 09 20 20 28 63 6f 6e 63 20 22 2c 20 4d 65 67 61  .  (conc ", Mega
2730: 74 65 73 74 20 63 6f 6d 6d 65 6e 74 3d 5c 22 22  test comment=\""
2740: 20 63 6f 6d 6d 65 6e 74 20 22 5c 22 22 29 29 29   comment "\"")))
2750: 20 3b 3b 20 73 70 65 63 69 61 6c 20 63 61 73 65   ;; special case
2760: 2c 20 77 65 20 61 72 65 20 68 61 6e 64 6c 69 6e  , we are handlin
2770: 67 20 73 74 72 61 67 67 6c 65 72 73 0a 09 09 09  g stragglers....
2780: 09 20 20 20 20 20 20 20 23 66 29 29 29 0a 09 09  .       #f)))...
2790: 20 20 20 20 20 28 64 65 74 61 69 6c 73 20 20 28       (details  (
27a0: 69 66 20 28 73 74 72 69 6e 67 2d 6d 61 74 63 68  if (string-match
27b0: 20 22 2e 2a 68 74 6d 6c 24 22 20 6c 6f 67 66 69   ".*html$" logfi
27c0: 6c 65 29 0a 09 09 09 09 20 20 20 28 63 6f 6e 63  le).....   (conc
27d0: 20 2a 74 6f 70 70 61 74 68 2a 20 22 2f 6c 74 2f   *toppath* "/lt/
27e0: 22 20 74 61 72 67 65 74 20 22 2f 22 20 72 75 6e  " target "/" run
27f0: 6e 61 6d 65 20 22 2f 22 20 74 65 73 74 6e 61 6d  name "/" testnam
2800: 65 0a 09 09 09 09 09 20 28 69 66 20 28 65 71 75  e...... (if (equ
2810: 61 6c 3f 20 69 74 65 6d 70 61 74 68 20 22 22 29  al? itempath "")
2820: 20 22 2f 22 20 28 63 6f 6e 63 20 22 2f 22 20 69   "/" (conc "/" i
2830: 74 65 6d 70 61 74 68 20 22 2f 22 29 29 0a 09 09  tempath "/"))...
2840: 09 09 09 20 6c 6f 67 66 69 6c 65 29 0a 09 09 09  ... logfile)....
2850: 09 20 20 20 23 66 29 29 0a 09 09 20 20 20 20 20  .   #f))...     
2860: 28 70 72 65 76 2d 74 64 61 74 20 28 68 61 73 68  (prev-tdat (hash
2870: 2d 74 61 62 6c 65 2d 72 65 66 2f 64 65 66 61 75  -table-ref/defau
2880: 6c 74 20 64 61 74 61 20 74 6e 61 6d 65 20 23 66  lt data tname #f
2890: 29 29 20 0a 09 09 20 20 20 20 20 28 74 64 61 74  )) ...     (tdat
28a0: 20 20 20 20 20 20 28 69 66 20 69 73 2d 74 6f 70        (if is-top
28b0: 0a 09 09 09 09 20 20 20 20 23 66 0a 09 09 09 09  .....    #f.....
28c0: 20 20 20 20 28 6c 65 74 20 28 28 6e 65 77 20 28      (let ((new (
28d0: 6f 72 20 70 72 65 76 2d 74 64 61 74 20 28 6d 61  or prev-tdat (ma
28e0: 6b 65 2d 74 65 73 74 64 61 74 29 29 29 29 20 3b  ke-testdat)))) ;
28f0: 3b 20 72 65 63 79 63 6c 65 20 74 68 65 20 72 65  ; recycle the re
2900: 63 6f 72 64 20 73 6f 20 77 65 20 6b 65 65 70 20  cord so we keep 
2910: 74 72 61 63 6b 20 6f 66 20 61 6c 72 65 61 64 79  track of already
2920: 20 70 72 69 6e 74 65 64 20 69 74 65 6d 73 0a 09   printed items..
2930: 09 09 09 20 20 20 20 20 20 28 74 65 73 74 64 61  ...      (testda
2940: 74 2d 66 6c 6f 77 69 64 2d 73 65 74 21 20 20 20  t-flowid-set!   
2950: 20 20 6e 65 77 20 28 6f 72 20 28 74 65 73 74 64    new (or (testd
2960: 61 74 2d 66 6c 6f 77 69 64 20 6e 65 77 29 0a 20  at-flowid new). 
2970: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2980: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2990: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29b0: 20 20 20 20 20 20 28 69 66 20 28 65 71 3f 20 70        (if (eq? p
29c0: 69 64 20 30 29 0a 20 20 20 20 20 20 20 20 20 20  id 0).          
29d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a10: 20 74 63 74 6e 61 6d 65 0a 20 20 20 20 20 20 20   tctname.       
2a20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a60: 20 20 20 20 28 63 6f 6e 63 20 68 6f 73 74 6e 20      (conc hostn 
2a70: 22 2d 22 20 70 69 64 29 29 29 29 0a 09 09 09 09  "-" pid)))).....
2a80: 20 20 20 20 20 20 28 74 65 73 74 64 61 74 2d 74        (testdat-t
2a90: 63 74 6e 61 6d 65 2d 73 65 74 21 20 20 20 20 6e  ctname-set!    n
2aa0: 65 77 20 74 63 74 6e 61 6d 65 29 0a 09 09 09 09  ew tctname).....
2ab0: 20 20 20 20 20 20 28 74 65 73 74 64 61 74 2d 74        (testdat-t
2ac0: 6e 61 6d 65 2d 73 65 74 21 20 20 20 20 20 20 6e  name-set!      n
2ad0: 65 77 20 74 6e 61 6d 65 29 0a 09 09 09 09 20 20  ew tname).....  
2ae0: 20 20 20 20 28 74 65 73 74 64 61 74 2d 73 74 61      (testdat-sta
2af0: 74 65 2d 73 65 74 21 20 20 20 20 20 20 6e 65 77  te-set!      new
2b00: 20 61 64 6a 2d 73 74 61 74 65 29 0a 09 09 09 09   adj-state).....
2b10: 20 20 20 20 20 20 28 74 65 73 74 64 61 74 2d 73        (testdat-s
2b20: 74 61 74 75 73 2d 73 65 74 21 20 20 20 20 20 6e  tatus-set!     n
2b30: 65 77 20 73 74 61 74 75 73 29 0a 09 09 09 09 20  ew status)..... 
2b40: 20 20 20 20 20 28 74 65 73 74 64 61 74 2d 63 6f       (testdat-co
2b50: 6d 6d 65 6e 74 2d 73 65 74 21 20 20 20 20 6e 65  mment-set!    ne
2b60: 77 20 63 6d 74 73 74 72 29 0a 09 09 09 09 20 20  w cmtstr).....  
2b70: 20 20 20 20 28 74 65 73 74 64 61 74 2d 64 65 74      (testdat-det
2b80: 61 69 6c 73 2d 73 65 74 21 20 20 20 20 6e 65 77  ails-set!    new
2b90: 20 64 65 74 61 69 6c 73 29 0a 09 09 09 09 20 20   details).....  
2ba0: 20 20 20 20 28 74 65 73 74 64 61 74 2d 64 75 72      (testdat-dur
2bb0: 61 74 69 6f 6e 2d 73 65 74 21 20 20 20 6e 65 77  ation-set!   new
2bc0: 20 64 75 72 61 74 69 6f 6e 29 0a 09 09 09 09 20   duration)..... 
2bd0: 20 20 20 20 20 28 74 65 73 74 64 61 74 2d 65 76       (testdat-ev
2be0: 65 6e 74 2d 74 69 6d 65 2d 73 65 74 21 20 6e 65  ent-time-set! ne
2bf0: 77 20 65 74 69 6d 65 29 20 3b 3b 20 28 63 75 72  w etime) ;; (cur
2c00: 72 65 6e 74 2d 73 65 63 6f 6e 64 73 29 29 0a 09  rent-seconds))..
2c10: 09 09 09 20 20 20 20 20 20 28 74 65 73 74 64 61  ...      (testda
2c20: 74 2d 6f 76 65 72 61 6c 6c 2d 73 65 74 21 20 20  t-overall-set!  
2c30: 20 20 6e 65 77 20 6e 65 77 73 74 61 74 29 0a 09    new newstat)..
2c40: 09 09 09 20 20 20 20 20 20 28 68 61 73 68 2d 74  ...      (hash-t
2c50: 61 62 6c 65 2d 73 65 74 21 20 64 61 74 61 20 74  able-set! data t
2c60: 6e 61 6d 65 20 6e 65 77 29 0a 09 09 09 09 20 20  name new).....  
2c70: 20 20 20 20 6e 65 77 29 29 29 29 0a 09 09 28 69      new))))...(i
2c80: 66 20 28 6e 6f 74 20 69 73 2d 74 6f 70 29 0a 09  f (not is-top)..
2c90: 09 20 20 20 20 28 68 61 73 68 2d 74 61 62 6c 65  .    (hash-table
2ca0: 2d 73 65 74 21 20 64 61 74 61 20 27 74 71 75 65  -set! data 'tque
2cb0: 75 65 20 28 63 6f 6e 73 20 74 64 61 74 20 74 71  ue (cons tdat tq
2cc0: 75 65 75 65 29 29 29 20 0a 20 20 20 20 20 20 20  ueue))) .       
2cd0: 20 20 20 20 20 20 20 20 20 28 68 61 73 68 2d 74           (hash-t
2ce0: 61 62 6c 65 2d 73 65 74 21 20 64 61 74 61 20 74  able-set! data t
2cf0: 6e 61 6d 65 20 74 64 61 74 29 0a 20 20 20 20 20  name tdat).     
2d00: 20 20 20 20 20 20 20 20 20 20 20 29 29 0a 20 20             )).  
2d10: 20 20 20 20 20 20 20 20 20 20 74 65 73 74 73 29            tests)
2d20: 29 29 0a 20 20 20 20 20 20 20 72 75 6e 2d 69 64  )).       run-id
2d30: 73 29 0a 20 20 20 20 20 20 28 6c 69 73 74 20 6e  s).      (list n
2d40: 6f 77 20 73 74 69 6c 6c 2d 72 75 6e 6e 69 6e 67  ow still-running
2d50: 29 29 29 0a 0a 28 64 65 66 69 6e 65 20 28 6d 6f  )))..(define (mo
2d60: 6e 69 74 6f 72 20 70 69 64 29 0a 20 20 28 6c 65  nitor pid).  (le
2d70: 74 2a 20 28 28 72 75 6e 2d 69 64 73 20 27 28 29  t* ((run-ids '()
2d80: 29 0a 09 20 28 74 65 73 74 64 61 74 73 20 28 6d  ).. (testdats (m
2d90: 61 6b 65 2d 68 61 73 68 2d 74 61 62 6c 65 29 29  ake-hash-table))
2da0: 20 20 3b 3b 20 65 61 63 68 20 65 6e 74 72 79 20    ;; each entry 
2db0: 69 73 20 61 20 6c 69 73 74 20 6f 66 20 74 65 73  is a list of tes
2dc0: 74 64 61 74 20 73 74 72 75 63 74 73 0a 09 20 28  tdat structs.. (
2dd0: 6b 65 79 73 20 20 20 20 23 66 29 0a 09 20 28 6c  keys    #f).. (l
2de0: 61 73 74 2d 75 70 64 61 74 65 20 30 29 0a 09 20  ast-update 0).. 
2df0: 28 74 61 72 67 65 74 20 20 28 6f 72 20 28 61 72  (target  (or (ar
2e00: 67 73 3a 67 65 74 2d 61 72 67 20 22 2d 74 61 72  gs:get-arg "-tar
2e10: 67 65 74 22 29 0a 09 09 20 20 20 20 20 20 28 61  get")...      (a
2e20: 72 67 73 3a 67 65 74 2d 61 72 67 20 22 2d 72 65  rgs:get-arg "-re
2e30: 71 74 61 72 67 22 29 29 29 0a 09 20 28 72 75 6e  qtarg"))).. (run
2e40: 6e 61 6d 65 20 28 61 72 67 73 3a 67 65 74 2d 61  name (args:get-a
2e50: 72 67 20 22 2d 72 75 6e 6e 61 6d 65 22 29 29 0a  rg "-runname")).
2e60: 09 20 28 74 73 6e 61 6d 65 20 20 23 66 29 0a 09  . (tsname  #f)..
2e70: 20 28 66 6c 6f 77 69 64 20 20 28 63 6f 6e 63 20   (flowid  (conc 
2e80: 74 61 72 67 65 74 20 22 2f 22 20 72 75 6e 6e 61  target "/" runna
2e90: 6d 65 29 29 0a 09 20 28 74 64 65 6c 61 79 20 20  me)).. (tdelay  
2ea0: 28 73 74 72 69 6e 67 2d 3e 6e 75 6d 62 65 72 20  (string->number 
2eb0: 28 6f 72 20 28 61 72 67 73 3a 67 65 74 2d 61 72  (or (args:get-ar
2ec0: 67 20 22 2d 64 65 6c 61 79 22 29 20 22 31 35 22  g "-delay") "15"
2ed0: 29 29 29 29 0a 20 20 20 20 28 69 66 20 28 61 6e  )))).    (if (an
2ee0: 64 20 74 61 72 67 65 74 20 72 75 6e 6e 61 6d 65  d target runname
2ef0: 29 0a 09 28 62 65 67 69 6e 0a 09 20 20 28 6c 61  )..(begin..  (la
2f00: 75 6e 63 68 3a 73 65 74 75 70 29 0a 09 20 20 28  unch:setup)..  (
2f10: 73 65 74 21 20 6b 65 79 73 20 28 72 6d 74 3a 67  set! keys (rmt:g
2f20: 65 74 2d 6b 65 79 73 29 29 29 29 0a 20 20 20 20  et-keys)))).    
2f30: 28 73 65 74 21 20 74 73 6e 61 6d 65 20 20 28 63  (set! tsname  (c
2f40: 6f 6d 6d 6f 6e 3a 67 65 74 2d 74 65 73 74 73 75  ommon:get-testsu
2f50: 69 74 65 2d 6e 61 6d 65 29 29 0a 20 20 20 20 28  ite-name)).    (
2f60: 70 72 69 6e 74 20 22 54 43 4d 54 3a 20 66 6f 72  print "TCMT: for
2f70: 20 74 65 73 74 73 75 69 74 65 3d 22 20 74 73 6e   testsuite=" tsn
2f80: 61 6d 65 20 22 20 66 6f 75 6e 64 20 72 75 6e 6e  ame " found runn
2f90: 61 6d 65 3d 22 20 72 75 6e 6e 61 6d 65 20 22 2c  ame=" runname ",
2fa0: 20 74 61 72 67 65 74 3d 22 20 74 61 72 67 65 74   target=" target
2fb0: 20 22 2c 20 6b 65 79 73 3d 22 20 6b 65 79 73 20   ", keys=" keys 
2fc0: 22 20 61 6e 64 20 73 75 63 63 65 73 73 66 75 6c  " and successful
2fd0: 6c 79 20 72 61 6e 20 6c 61 75 6e 63 68 3a 73 65  ly ran launch:se
2fe0: 74 75 70 2e 20 55 73 69 6e 67 20 22 20 66 6c 6f  tup. Using " flo
2ff0: 77 69 64 20 22 20 61 73 20 74 68 65 20 66 6c 6f  wid " as the flo
3000: 77 49 64 2e 22 29 0a 20 20 20 20 28 6c 65 74 20  wId.").    (let 
3010: 6c 6f 6f 70 20 28 29 0a 20 20 20 20 20 20 3b 3b  loop ().      ;;
3020: 3b 3b 3b 3b 20 28 68 61 6e 64 6c 65 2d 65 78 63  ;;;; (handle-exc
3030: 65 70 74 69 6f 6e 73 0a 20 20 20 20 20 20 3b 3b  eptions.      ;;
3040: 3b 3b 3b 3b 20 20 65 78 6e 0a 20 20 20 20 20 20  ;;;;  exn.      
3050: 3b 3b 3b 3b 3b 3b 20 20 3b 3b 20 28 70 72 69 6e  ;;;;;;  ;; (prin
3060: 74 20 22 50 72 6f 63 65 73 73 20 64 6f 6e 65 2e  t "Process done.
3070: 22 29 0a 20 20 20 20 20 20 3b 3b 3b 3b 3b 3b 20  ").      ;;;;;; 
3080: 20 28 62 65 67 69 6e 20 28 70 72 69 6e 74 2d 63   (begin (print-c
3090: 61 6c 6c 2d 63 68 61 69 6e 29 20 28 70 72 69 6e  all-chain) (prin
30a0: 74 20 22 45 72 72 6f 72 20 6d 65 73 73 61 67 65  t "Error message
30b0: 3a 20 22 20 28 28 63 6f 6e 64 69 74 69 6f 6e 2d  : " ((condition-
30c0: 70 72 6f 70 65 72 74 79 2d 61 63 63 65 73 73 6f  property-accesso
30d0: 72 20 27 65 78 6e 20 27 6d 65 73 73 61 67 65 29  r 'exn 'message)
30e0: 20 65 78 6e 29 29 29 0a 20 20 20 20 20 20 20 28   exn))).       (
30f0: 6c 65 74 2d 76 61 6c 75 65 73 20 28 28 28 70 69  let-values (((pi
3100: 64 72 65 73 20 65 78 69 74 74 79 70 65 20 65 78  dres exittype ex
3110: 69 74 73 74 61 74 75 73 29 0a 09 09 20 20 20 20  itstatus)...    
3120: 20 28 70 72 6f 63 65 73 73 2d 77 61 69 74 20 70   (process-wait p
3130: 69 64 20 23 74 29 29 29 0a 09 20 28 69 66 20 28  id #t))).. (if (
3140: 61 6e 64 20 6b 65 79 73 0a 09 09 20 20 28 6f 72  and keys...  (or
3150: 20 28 6e 6f 74 20 72 75 6e 2d 69 64 73 29 0a 09   (not run-ids)..
3160: 09 20 20 20 20 20 20 28 6e 75 6c 6c 3f 20 72 75  .      (null? ru
3170: 6e 2d 69 64 73 29 29 29 0a 09 20 20 20 20 20 28  n-ids)))..     (
3180: 6c 65 74 2a 20 28 28 72 75 6e 73 20 28 72 6d 74  let* ((runs (rmt
3190: 3a 67 65 74 2d 72 75 6e 73 2d 62 79 2d 70 61 74  :get-runs-by-pat
31a0: 74 20 6b 65 79 73 0a 09 09 09 09 09 09 72 75 6e  t keys.......run
31b0: 6e 61 6d 65 20 0a 09 09 09 09 09 09 74 61 72 67  name .......targ
31c0: 65 74 0a 09 09 09 09 09 09 23 66 20 3b 3b 20 6f  et.......#f ;; o
31d0: 66 66 73 65 74 0a 09 09 09 09 09 09 23 66 20 3b  ffset.......#f ;
31e0: 3b 20 6c 69 6d 69 74 0a 09 09 09 09 09 09 23 66  ; limit.......#f
31f0: 20 3b 3b 20 66 69 65 6c 64 73 0a 09 09 09 09 09   ;; fields......
3200: 09 30 20 20 3b 3b 20 6c 61 73 74 2d 75 70 64 61  .0  ;; last-upda
3210: 74 65 0a 09 09 09 09 09 09 29 29 0a 09 09 20 20  te.......))...  
3220: 20 20 28 68 65 61 64 65 72 20 28 64 62 3a 67 65    (header (db:ge
3230: 74 2d 68 65 61 64 65 72 20 72 75 6e 73 29 29 0a  t-header runs)).
3240: 09 09 20 20 20 20 28 72 6f 77 73 20 20 20 28 64  ..    (rows   (d
3250: 62 3a 67 65 74 2d 72 6f 77 73 20 20 20 72 75 6e  b:get-rows   run
3260: 73 29 29 0a 09 09 20 20 20 20 28 72 75 6e 2d 69  s))...    (run-i
3270: 64 73 2d 69 6e 20 28 6d 61 70 20 28 6c 61 6d 62  ds-in (map (lamb
3280: 64 61 20 28 72 6f 77 29 0a 09 09 09 09 20 20 20  da (row).....   
3290: 20 20 20 20 28 64 62 3a 67 65 74 2d 76 61 6c 75      (db:get-valu
32a0: 65 2d 62 79 2d 68 65 61 64 65 72 20 72 6f 77 20  e-by-header row 
32b0: 68 65 61 64 65 72 20 22 69 64 22 29 29 0a 09 09  header "id"))...
32c0: 09 09 20 20 20 20 20 72 6f 77 73 29 29 29 0a 09  ..     rows)))..
32d0: 20 20 20 20 20 20 20 28 73 65 74 21 20 72 75 6e         (set! run
32e0: 2d 69 64 73 20 72 75 6e 2d 69 64 73 2d 69 6e 29  -ids run-ids-in)
32f0: 29 29 0a 09 20 3b 3b 20 28 70 72 69 6e 74 20 22  )).. ;; (print "
3300: 54 43 4d 54 3a 20 70 69 64 72 65 73 3d 22 20 70  TCMT: pidres=" p
3310: 69 64 72 65 73 20 22 20 65 78 69 74 74 79 70 65  idres " exittype
3320: 3d 22 20 65 78 69 74 74 79 70 65 20 22 20 65 78  =" exittype " ex
3330: 69 74 73 74 61 74 75 73 3d 22 20 65 78 69 74 73  itstatus=" exits
3340: 74 61 74 75 73 20 22 20 72 75 6e 2d 69 64 73 3d  tatus " run-ids=
3350: 22 20 72 75 6e 2d 69 64 73 29 0a 09 20 28 69 66  " run-ids).. (if
3360: 20 28 65 71 3f 20 70 69 64 72 65 73 20 30 29 0a   (eq? pidres 0).
3370: 09 20 20 20 20 20 28 62 65 67 69 6e 0a 09 20 20  .     (begin..  
3380: 20 20 20 20 20 28 69 66 20 6b 65 79 73 0a 20 20       (if keys.  
3390: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33a0: 20 28 62 65 67 69 6e 0a 20 20 20 20 20 20 20 20   (begin.        
33b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 28 73 65               (se
33c0: 74 21 20 6c 61 73 74 2d 75 70 64 61 74 65 20 28  t! last-update (
33d0: 2d 20 28 63 61 72 20 28 75 70 64 61 74 65 2d 71  - (car (update-q
33e0: 75 65 75 65 2d 73 69 6e 63 65 20 74 65 73 74 64  ueue-since testd
33f0: 61 74 73 20 72 75 6e 2d 69 64 73 20 6c 61 73 74  ats run-ids last
3400: 2d 75 70 64 61 74 65 20 74 73 6e 61 6d 65 20 74  -update tsname t
3410: 61 72 67 65 74 20 72 75 6e 6e 61 6d 65 20 66 6c  arget runname fl
3420: 6f 77 69 64 20 23 66 20 64 65 6c 61 79 2d 66 6c  owid #f delay-fl
3430: 61 67 3a 20 23 74 29 29 20 35 29 29 0a 20 20 20  ag: #t)) 5)).   
3440: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3450: 20 20 28 70 72 6f 63 65 73 73 2d 71 75 65 75 65    (process-queue
3460: 20 74 65 73 74 64 61 74 73 20 74 64 65 6c 61 79   testdats tdelay
3470: 20 23 66 29 29 29 0a 20 20 20 20 20 20 20 20 20   #f))).         
3480: 20 20 20 20 20 20 28 74 68 72 65 61 64 2d 73 6c        (thread-sl
3490: 65 65 70 21 20 33 29 0a 09 20 20 20 20 20 20 20  eep! 3)..       
34a0: 28 6c 6f 6f 70 29 29 29 29 29 0a 20 20 20 20 3b  (loop))))).    ;
34b0: 3b 20 74 68 65 20 6d 65 67 61 74 65 73 74 20 72  ; the megatest r
34c0: 75 6e 6e 65 72 20 69 73 20 64 6f 6e 65 20 2d 20  unner is done - 
34d0: 6e 6f 77 20 77 61 69 74 20 66 6f 72 20 61 6c 6c  now wait for all
34e0: 20 70 72 6f 63 65 73 73 65 73 20 74 6f 20 62 65   processes to be
34f0: 20 43 4f 4d 50 4c 45 54 45 44 20 6f 72 20 4e 4f   COMPLETED or NO
3500: 20 50 72 6f 63 65 73 73 65 73 20 74 6f 20 62 65   Processes to be
3510: 20 52 55 4e 4e 49 4e 47 20 3e 20 31 20 6d 69 6e   RUNNING > 1 min
3520: 75 74 65 0a 20 20 20 20 28 6c 65 74 20 6c 6f 6f  ute.    (let loo
3530: 70 20 28 29 0a 20 20 20 20 20 20 28 6c 65 74 2a  p ().      (let*
3540: 20 28 28 6e 65 77 2d 6c 61 73 74 2d 75 70 64 61   ((new-last-upda
3550: 74 65 2d 69 6e 66 6f 20 28 75 70 64 61 74 65 2d  te-info (update-
3560: 71 75 65 75 65 2d 73 69 6e 63 65 20 74 65 73 74  queue-since test
3570: 64 61 74 73 20 72 75 6e 2d 69 64 73 20 6c 61 73  dats run-ids las
3580: 74 2d 75 70 64 61 74 65 20 74 73 6e 61 6d 65 20  t-update tsname 
3590: 74 61 72 67 65 74 20 72 75 6e 6e 61 6d 65 20 66  target runname f
35a0: 6c 6f 77 69 64 20 23 66 20 64 65 6c 61 79 2d 66  lowid #f delay-f
35b0: 6c 61 67 3a 20 23 74 29 29 0a 09 20 20 20 20 20  lag: #t))..     
35c0: 28 73 74 69 6c 6c 2d 72 75 6e 6e 69 6e 67 20 20  (still-running  
35d0: 20 20 20 20 20 20 28 63 61 64 72 20 6e 65 77 2d        (cadr new-
35e0: 6c 61 73 74 2d 75 70 64 61 74 65 2d 69 6e 66 6f  last-update-info
35f0: 29 29 0a 09 20 20 20 20 20 28 6e 65 77 2d 6c 61  ))..     (new-la
3600: 73 74 2d 75 70 64 61 74 65 20 20 20 20 20 20 28  st-update      (
3610: 2d 20 28 63 61 72 20 6e 65 77 2d 6c 61 73 74 2d  - (car new-last-
3620: 75 70 64 61 74 65 2d 69 6e 66 6f 29 20 35 29 29  update-info) 5))
3630: 29 0a 09 28 70 72 6f 63 65 73 73 2d 71 75 65 75  )..(process-queu
3640: 65 20 74 65 73 74 64 61 74 73 20 74 64 65 6c 61  e testdats tdela
3650: 79 20 23 66 29 0a 09 28 69 66 20 73 74 69 6c 6c  y #f)..(if still
3660: 2d 72 75 6e 6e 69 6e 67 0a 09 20 20 20 20 28 62  -running..    (b
3670: 65 67 69 6e 0a 09 20 20 20 20 20 20 28 70 72 69  egin..      (pri
3680: 6e 74 20 22 54 43 4d 54 3a 20 54 65 73 74 73 20  nt "TCMT: Tests 
3690: 73 74 69 6c 6c 20 72 75 6e 6e 69 6e 67 2c 20 6b  still running, k
36a0: 65 65 70 20 77 61 74 63 68 69 6e 67 2e 2e 2e 22  eep watching..."
36b0: 29 0a 09 20 20 20 20 20 20 28 74 68 72 65 61 64  )..      (thread
36c0: 2d 73 6c 65 65 70 21 20 33 29 0a 09 20 20 20 20  -sleep! 3)..    
36d0: 20 20 28 6c 6f 6f 70 29 29 29 29 29 0a 20 20 20    (loop))))).   
36e0: 20 0a 20 20 20 20 3b 3b 20 28 70 72 69 6e 74 20   .    ;; (print 
36f0: 22 54 43 4d 54 3a 20 70 69 64 72 65 73 3d 22 20  "TCMT: pidres=" 
3700: 70 69 64 72 65 73 20 22 20 65 78 69 74 74 79 70  pidres " exittyp
3710: 65 3d 22 20 65 78 69 74 74 79 70 65 20 22 20 65  e=" exittype " e
3720: 78 69 74 73 74 61 74 75 73 3d 22 20 65 78 69 74  xitstatus=" exit
3730: 73 74 61 74 75 73 20 22 20 72 75 6e 2d 69 64 73  status " run-ids
3740: 3d 22 20 72 75 6e 2d 69 64 73 29 0a 20 20 20 20  =" run-ids).    
3750: 28 70 72 69 6e 74 20 22 54 43 4d 54 3a 20 70 72  (print "TCMT: pr
3760: 6f 63 65 73 73 69 6e 67 20 61 6e 79 20 74 65 73  ocessing any tes
3770: 74 73 20 74 68 61 74 20 64 69 64 20 6e 6f 74 20  ts that did not 
3780: 66 6f 72 6d 61 6c 6c 79 20 63 6f 6d 70 6c 65 74  formally complet
3790: 65 2e 22 29 0a 20 20 20 20 28 75 70 64 61 74 65  e.").    (update
37a0: 2d 71 75 65 75 65 2d 73 69 6e 63 65 20 74 65 73  -queue-since tes
37b0: 74 64 61 74 73 20 72 75 6e 2d 69 64 73 20 30 20  tdats run-ids 0 
37c0: 74 73 6e 61 6d 65 20 74 61 72 67 65 74 20 72 75  tsname target ru
37d0: 6e 6e 61 6d 65 20 66 6c 6f 77 69 64 20 23 74 20  nname flowid #t 
37e0: 23 66 20 64 65 6c 61 79 2d 66 6c 61 67 3a 20 23  #f delay-flag: #
37f0: 66 29 20 3b 3b 20 63 61 6c 6c 20 69 6e 20 66 6c  f) ;; call in fl
3800: 75 73 68 20 6d 6f 64 65 0a 20 20 20 20 28 70 72  ush mode.    (pr
3810: 6f 63 65 73 73 2d 71 75 65 75 65 20 74 65 73 74  ocess-queue test
3820: 64 61 74 73 20 30 20 23 74 29 0a 20 20 20 20 28  dats 0 #t).    (
3830: 70 72 69 6e 74 20 22 54 43 4d 54 3a 20 41 6c 6c  print "TCMT: All
3840: 20 64 6f 6e 65 2e 22 29 0a 20 20 20 20 29 29 0a   done.").    )).
3850: 0a 3b 3b 3b 3b 3b 20 29 0a 0a 3b 3b 20 28 74 72  .;;;;; )..;; (tr
3860: 61 63 65 20 70 72 69 6e 74 2d 63 68 61 6e 67 65  ace print-change
3870: 73 2d 73 69 6e 63 65 29 0a 0a 3b 3b 20 28 69 66  s-since)..;; (if
3880: 20 28 6e 6f 74 20 28 65 71 3f 20 70 69 64 72 65   (not (eq? pidre
3890: 73 20 30 29 29 09 20 20 3b 3b 20 28 6e 6f 74 20  s 0)).  ;; (not 
38a0: 65 78 69 74 73 74 61 74 75 73 29 29 0a 3b 3b 20  exitstatus)).;; 
38b0: 09 20 20 28 62 65 67 69 6e 0a 3b 3b 20 09 20 20  .  (begin.;; .  
38c0: 20 20 28 74 68 72 65 61 64 2d 73 6c 65 65 70 21    (thread-sleep!
38d0: 20 33 29 0a 3b 3b 20 09 20 20 20 20 28 6c 6f 6f   3).;; .    (loo
38e0: 70 29 29 0a 3b 3b 20 09 20 20 28 70 72 69 6e 74  p)).;; .  (print
38f0: 20 22 50 72 6f 63 65 73 73 3a 20 6d 65 67 61 74   "Process: megat
3900: 65 73 74 20 22 20 28 73 74 72 69 6e 67 2d 69 6e  est " (string-in
3910: 74 65 72 73 70 65 72 73 65 20 6f 72 69 67 61 72  tersperse origar
3920: 67 73 20 22 20 22 29 20 22 20 69 73 20 64 6f 6e  gs " ") " is don
3930: 65 2e 22 29 29 29 29 29 0a 0a 28 69 66 20 28 66  e.")))))..(if (f
3940: 69 6c 65 2d 65 78 69 73 74 73 3f 20 22 2e 74 63  ile-exists? ".tc
3950: 6d 74 72 63 22 29 0a 20 20 20 20 28 6c 6f 61 64  mtrc").    (load
3960: 20 22 2e 74 63 6d 74 72 63 22 29 29 0a 0a 28 64   ".tcmtrc"))..(d
3970: 65 66 69 6e 65 20 28 6d 61 69 6e 29 0a 20 20 28  efine (main).  (
3980: 6c 65 74 2a 20 28 28 6d 74 2d 64 6f 6e 65 20 23  let* ((mt-done #
3990: 66 29 0a 09 20 28 70 69 64 20 20 20 20 20 23 66  f).. (pid     #f
39a0: 29 0a 09 20 28 74 68 31 20 20 20 20 20 28 6d 61  ).. (th1     (ma
39b0: 6b 65 2d 74 68 72 65 61 64 20 28 6c 61 6d 62 64  ke-thread (lambd
39c0: 61 20 28 29 0a 09 09 09 09 20 28 70 72 69 6e 74  a ()..... (print
39d0: 20 22 52 75 6e 6e 69 6e 67 20 6d 65 67 61 74 65   "Running megate
39e0: 73 74 20 22 20 28 73 74 72 69 6e 67 2d 69 6e 74  st " (string-int
39f0: 65 72 73 70 65 72 73 65 20 6f 72 69 67 61 72 67  ersperse origarg
3a00: 73 20 22 20 22 29 29 0a 09 09 09 09 20 28 73 65  s " "))..... (se
3a10: 74 21 20 70 69 64 20 28 70 72 6f 63 65 73 73 2d  t! pid (process-
3a20: 72 75 6e 20 22 6d 65 67 61 74 65 73 74 22 20 6f  run "megatest" o
3a30: 72 69 67 61 72 67 73 29 29 29 0a 09 09 09 20 20  rigargs)))....  
3a40: 20 20 20 20 20 22 4d 65 67 61 74 65 73 74 20 6a       "Megatest j
3a50: 6f 62 22 29 29 0a 09 20 28 74 68 32 20 20 20 20  ob")).. (th2    
3a60: 20 28 6d 61 6b 65 2d 74 68 72 65 61 64 20 28 6c   (make-thread (l
3a70: 61 6d 62 64 61 20 28 29 0a 09 09 09 09 20 28 6d  ambda ()..... (m
3a80: 6f 6e 69 74 6f 72 20 70 69 64 29 29 0a 09 09 09  onitor pid))....
3a90: 20 20 20 20 20 20 20 22 4d 6f 6e 69 74 6f 72 20         "Monitor 
3aa0: 6a 6f 62 22 29 29 29 0a 20 20 20 20 28 74 68 72  job"))).    (thr
3ab0: 65 61 64 2d 73 74 61 72 74 21 20 74 68 31 29 0a  ead-start! th1).
3ac0: 20 20 20 20 28 74 68 72 65 61 64 2d 73 6c 65 65      (thread-slee
3ad0: 70 21 20 31 29 20 3b 3b 20 67 69 76 65 20 74 68  p! 1) ;; give th
3ae0: 65 20 70 72 6f 63 65 73 73 20 74 69 6d 65 20 74  e process time t
3af0: 6f 20 67 65 74 20 67 6f 69 6e 67 0a 20 20 20 20  o get going.    
3b00: 28 74 68 72 65 61 64 2d 73 74 61 72 74 21 20 74  (thread-start! t
3b10: 68 32 29 0a 20 20 20 20 28 74 68 72 65 61 64 2d  h2).    (thread-
3b20: 6a 6f 69 6e 21 20 74 68 32 29 29 29 0a 0a 28 69  join! th2)))..(i
3b30: 66 20 28 61 72 67 73 3a 67 65 74 2d 61 72 67 20  f (args:get-arg 
3b40: 22 2d 74 63 2d 72 65 70 6c 22 29 0a 20 20 20 20  "-tc-repl").    
3b50: 28 72 65 70 6c 29 0a 20 20 20 20 28 6d 61 69 6e  (repl).    (main
3b60: 29 29 0a 0a 3b 3b 20 28 70 72 6f 63 65 73 73 2d  ))..;; (process-
3b70: 77 61 69 74 29 0a 0a                             wait)..