Megatest

Hex Artifact Content
Login

Artifact a53986c024dc3d967a836a40debc48ead4fa8840:


0000: 28 75 73 65 20 73 71 6c 69 74 65 33 20 73 72 66  (use sqlite3 srf
0010: 69 2d 31 20 70 6f 73 69 78 20 72 65 67 65 78 20  i-1 posix regex 
0020: 72 65 67 65 78 2d 63 61 73 65 20 73 72 66 69 2d  regex-case srfi-
0030: 36 39 20 64 6f 74 2d 6c 6f 63 6b 69 6e 67 29 0a  69 dot-locking).
0040: 28 69 6d 70 6f 72 74 20 28 70 72 65 66 69 78 20  (import (prefix 
0050: 73 71 6c 69 74 65 33 20 73 71 6c 69 74 65 33 3a  sqlite3 sqlite3:
0060: 29 29 0a 0a 28 64 65 63 6c 61 72 65 20 28 75 6e  ))..(declare (un
0070: 69 74 20 74 65 73 74 73 29 29 0a 28 64 65 63 6c  it tests)).(decl
0080: 61 72 65 20 28 75 73 65 73 20 64 62 29 29 0a 28  are (uses db)).(
0090: 64 65 63 6c 61 72 65 20 28 75 73 65 73 20 63 6f  declare (uses co
00a0: 6d 6d 6f 6e 29 29 0a 28 64 65 63 6c 61 72 65 20  mmon)).(declare 
00b0: 28 75 73 65 73 20 69 74 65 6d 73 29 29 0a 28 64  (uses items)).(d
00c0: 65 63 6c 61 72 65 20 28 75 73 65 73 20 72 75 6e  eclare (uses run
00d0: 63 6f 6e 66 69 67 29 29 0a 0a 28 69 6e 63 6c 75  config))..(inclu
00e0: 64 65 20 22 63 6f 6d 6d 6f 6e 5f 72 65 63 6f 72  de "common_recor
00f0: 64 73 2e 73 63 6d 22 29 0a 28 69 6e 63 6c 75 64  ds.scm").(includ
0100: 65 20 22 6b 65 79 5f 72 65 63 6f 72 64 73 2e 73  e "key_records.s
0110: 63 6d 22 29 0a 28 69 6e 63 6c 75 64 65 20 22 64  cm").(include "d
0120: 62 5f 72 65 63 6f 72 64 73 2e 73 63 6d 22 29 0a  b_records.scm").
0130: 28 69 6e 63 6c 75 64 65 20 22 72 75 6e 5f 72 65  (include "run_re
0140: 63 6f 72 64 73 2e 73 63 6d 22 29 0a 28 69 6e 63  cords.scm").(inc
0150: 6c 75 64 65 20 22 74 65 73 74 5f 72 65 63 6f 72  lude "test_recor
0160: 64 73 2e 73 63 6d 22 29 0a 0a 28 64 65 66 69 6e  ds.scm")..(defin
0170: 65 20 28 72 65 67 69 73 74 65 72 2d 74 65 73 74  e (register-test
0180: 20 64 62 20 72 75 6e 2d 69 64 20 74 65 73 74 2d   db run-id test-
0190: 6e 61 6d 65 20 69 74 65 6d 2d 70 61 74 68 29 0a  name item-path).
01a0: 20 20 28 6c 65 74 20 28 28 69 74 65 6d 2d 70 61    (let ((item-pa
01b0: 74 68 73 20 28 69 66 20 28 65 71 75 61 6c 3f 20  ths (if (equal? 
01c0: 69 74 65 6d 2d 70 61 74 68 20 22 22 29 0a 09 09  item-path "")...
01d0: 09 28 6c 69 73 74 20 69 74 65 6d 2d 70 61 74 68  .(list item-path
01e0: 29 0a 09 09 09 28 6c 69 73 74 20 69 74 65 6d 2d  )....(list item-
01f0: 70 61 74 68 20 22 22 29 29 29 29 0a 20 20 20 20  path "")))).    
0200: 28 66 6f 72 2d 65 61 63 68 20 0a 20 20 20 20 20  (for-each .     
0210: 28 6c 61 6d 62 64 61 20 28 70 74 68 29 0a 20 20  (lambda (pth).  
0220: 20 20 20 20 20 28 73 71 6c 69 74 65 33 3a 65 78       (sqlite3:ex
0230: 65 63 75 74 65 20 64 62 20 22 49 4e 53 45 52 54  ecute db "INSERT
0240: 20 4f 52 20 49 47 4e 4f 52 45 20 49 4e 54 4f 20   OR IGNORE INTO 
0250: 74 65 73 74 73 20 28 72 75 6e 5f 69 64 2c 74 65  tests (run_id,te
0260: 73 74 6e 61 6d 65 2c 65 76 65 6e 74 5f 74 69 6d  stname,event_tim
0270: 65 2c 69 74 65 6d 5f 70 61 74 68 2c 73 74 61 74  e,item_path,stat
0280: 65 2c 73 74 61 74 75 73 29 20 56 41 4c 55 45 53  e,status) VALUES
0290: 20 28 3f 2c 3f 2c 73 74 72 66 74 69 6d 65 28 27   (?,?,strftime('
02a0: 25 73 27 2c 27 6e 6f 77 27 29 2c 3f 2c 27 4e 4f  %s','now'),?,'NO
02b0: 54 5f 53 54 41 52 54 45 44 27 2c 27 6e 2f 61 27  T_STARTED','n/a'
02c0: 29 3b 22 20 0a 09 09 09 72 75 6e 2d 69 64 20 0a  );" ....run-id .
02d0: 09 09 09 74 65 73 74 2d 6e 61 6d 65 0a 09 09 09  ...test-name....
02e0: 70 74 68 20 0a 09 09 09 3b 3b 20 28 63 6f 6e 63  pth ....;; (conc
02f0: 20 22 2c 22 20 28 73 74 72 69 6e 67 2d 69 6e 74   "," (string-int
0300: 65 72 73 70 65 72 73 65 20 74 61 67 73 20 22 2c  ersperse tags ",
0310: 22 29 20 22 2c 22 29 0a 09 09 09 29 29 0a 20 20  ") ",")....)).  
0320: 20 20 20 69 74 65 6d 2d 70 61 74 68 73 20 29 29     item-paths ))
0330: 29 0a 0a 3b 3b 20 67 65 74 20 74 68 65 20 70 72  )..;; get the pr
0340: 65 76 69 6f 75 73 20 72 65 63 6f 72 64 20 66 6f  evious record fo
0350: 72 20 77 68 65 6e 20 74 68 69 73 20 74 65 73 74  r when this test
0360: 20 77 61 73 20 72 75 6e 20 77 68 65 72 65 20 61   was run where a
0370: 6c 6c 20 6b 65 79 73 20 6d 61 74 63 68 20 62 75  ll keys match bu
0380: 74 20 72 75 6e 6e 61 6d 65 0a 3b 3b 20 72 65 74  t runname.;; ret
0390: 75 72 6e 73 20 23 66 20 69 66 20 6e 6f 20 73 75  urns #f if no su
03a0: 63 68 20 74 65 73 74 20 66 6f 75 6e 64 2c 20 72  ch test found, r
03b0: 65 74 75 72 6e 73 20 61 20 73 69 6e 67 6c 65 20  eturns a single 
03c0: 74 65 73 74 20 72 65 63 6f 72 64 20 69 66 20 66  test record if f
03d0: 6f 75 6e 64 0a 28 64 65 66 69 6e 65 20 28 74 65  ound.(define (te
03e0: 73 74 3a 67 65 74 2d 70 72 65 76 69 6f 75 73 2d  st:get-previous-
03f0: 74 65 73 74 2d 72 75 6e 2d 72 65 63 6f 72 64 20  test-run-record 
0400: 64 62 20 72 75 6e 2d 69 64 20 74 65 73 74 2d 6e  db run-id test-n
0410: 61 6d 65 20 69 74 65 6d 2d 70 61 74 68 29 0a 20  ame item-path). 
0420: 20 28 6c 65 74 2a 20 28 28 6b 65 79 73 20 20 20   (let* ((keys   
0430: 20 28 64 62 3a 67 65 74 2d 6b 65 79 73 20 64 62   (db:get-keys db
0440: 29 29 0a 09 20 28 73 65 6c 73 74 72 20 20 28 73  )).. (selstr  (s
0450: 74 72 69 6e 67 2d 69 6e 74 65 72 73 70 65 72 73  tring-interspers
0460: 65 20 28 6d 61 70 20 28 6c 61 6d 62 64 61 20 28  e (map (lambda (
0470: 78 29 28 76 65 63 74 6f 72 2d 72 65 66 20 78 20  x)(vector-ref x 
0480: 30 29 29 20 6b 65 79 73 29 20 22 2c 22 29 29 0a  0)) keys) ",")).
0490: 09 20 28 71 72 79 73 74 72 20 20 28 73 74 72 69  . (qrystr  (stri
04a0: 6e 67 2d 69 6e 74 65 72 73 70 65 72 73 65 20 28  ng-intersperse (
04b0: 6d 61 70 20 28 6c 61 6d 62 64 61 20 28 78 29 28  map (lambda (x)(
04c0: 63 6f 6e 63 20 28 76 65 63 74 6f 72 2d 72 65 66  conc (vector-ref
04d0: 20 78 20 30 29 20 22 3d 3f 22 29 29 20 6b 65 79   x 0) "=?")) key
04e0: 73 29 20 22 20 41 4e 44 20 22 29 29 0a 09 20 28  s) " AND ")).. (
04f0: 6b 65 79 76 61 6c 73 20 23 66 29 29 0a 20 20 20  keyvals #f)).   
0500: 20 3b 3b 20 66 69 72 73 74 20 6c 6f 6f 6b 20 75   ;; first look u
0510: 70 20 74 68 65 20 6b 65 79 20 76 61 6c 75 65 73  p the key values
0520: 20 66 72 6f 6d 20 74 68 65 20 72 75 6e 20 73 65   from the run se
0530: 6c 65 63 74 65 64 20 62 79 20 72 75 6e 2d 69 64  lected by run-id
0540: 0a 20 20 20 20 28 73 71 6c 69 74 65 33 3a 66 6f  .    (sqlite3:fo
0550: 72 2d 65 61 63 68 2d 72 6f 77 20 0a 20 20 20 20  r-each-row .    
0560: 20 28 6c 61 6d 62 64 61 20 28 61 20 2e 20 62 29   (lambda (a . b)
0570: 0a 20 20 20 20 20 20 20 28 73 65 74 21 20 6b 65  .       (set! ke
0580: 79 76 61 6c 73 20 28 63 6f 6e 73 20 61 20 62 29  yvals (cons a b)
0590: 29 29 0a 20 20 20 20 20 64 62 0a 20 20 20 20 20  )).     db.     
05a0: 28 63 6f 6e 63 20 22 53 45 4c 45 43 54 20 22 20  (conc "SELECT " 
05b0: 73 65 6c 73 74 72 20 22 20 46 52 4f 4d 20 72 75  selstr " FROM ru
05c0: 6e 73 20 57 48 45 52 45 20 69 64 3d 3f 20 4f 52  ns WHERE id=? OR
05d0: 44 45 52 20 42 59 20 65 76 65 6e 74 5f 74 69 6d  DER BY event_tim
05e0: 65 20 44 45 53 43 3b 22 29 20 72 75 6e 2d 69 64  e DESC;") run-id
05f0: 29 0a 20 20 20 20 28 69 66 20 28 6e 6f 74 20 6b  ).    (if (not k
0600: 65 79 76 61 6c 73 29 0a 09 23 66 0a 09 28 6c 65  eyvals)..#f..(le
0610: 74 20 28 28 70 72 65 76 2d 72 75 6e 2d 69 64 73  t ((prev-run-ids
0620: 20 27 28 29 29 29 0a 09 20 20 28 61 70 70 6c 79   '()))..  (apply
0630: 20 73 71 6c 69 74 65 33 3a 66 6f 72 2d 65 61 63   sqlite3:for-eac
0640: 68 2d 72 6f 77 0a 09 09 20 28 6c 61 6d 62 64 61  h-row... (lambda
0650: 20 28 69 64 29 0a 09 09 20 20 20 28 73 65 74 21   (id)...   (set!
0660: 20 70 72 65 76 2d 72 75 6e 2d 69 64 73 20 28 63   prev-run-ids (c
0670: 6f 6e 73 20 69 64 20 70 72 65 76 2d 72 75 6e 2d  ons id prev-run-
0680: 69 64 73 29 29 29 0a 09 09 20 64 62 0a 09 09 20  ids)))... db... 
0690: 28 63 6f 6e 63 20 22 53 45 4c 45 43 54 20 69 64  (conc "SELECT id
06a0: 20 46 52 4f 4d 20 72 75 6e 73 20 57 48 45 52 45   FROM runs WHERE
06b0: 20 22 20 71 72 79 73 74 72 20 22 20 41 4e 44 20   " qrystr " AND 
06c0: 69 64 20 21 3d 20 3f 3b 22 29 20 28 61 70 70 65  id != ?;") (appe
06d0: 6e 64 20 6b 65 79 76 61 6c 73 20 28 6c 69 73 74  nd keyvals (list
06e0: 20 72 75 6e 2d 69 64 29 29 29 0a 09 20 20 3b 3b   run-id)))..  ;;
06f0: 20 66 6f 72 20 65 61 63 68 20 72 75 6e 20 73 74   for each run st
0700: 61 72 74 69 6e 67 20 77 69 74 68 20 74 68 65 20  arting with the 
0710: 6d 6f 73 74 20 72 65 63 65 6e 74 20 6c 6f 6f 6b  most recent look
0720: 20 74 6f 20 73 65 65 20 69 66 20 74 68 65 72 65   to see if there
0730: 20 69 73 20 61 20 6d 61 74 63 68 69 6e 67 20 74   is a matching t
0740: 65 73 74 0a 09 20 20 3b 3b 20 69 66 20 66 6f 75  est..  ;; if fou
0750: 6e 64 20 74 68 65 6e 20 72 65 74 75 72 6e 20 74  nd then return t
0760: 68 61 74 20 6d 61 74 63 68 69 6e 67 20 74 65 73  hat matching tes
0770: 74 20 72 65 63 6f 72 64 0a 09 20 20 28 64 65 62  t record..  (deb
0780: 75 67 3a 70 72 69 6e 74 20 34 20 22 73 65 6c 73  ug:print 4 "sels
0790: 74 72 3a 20 22 20 73 65 6c 73 74 72 20 22 2c 20  tr: " selstr ", 
07a0: 71 72 79 73 74 72 3a 20 22 20 71 72 79 73 74 72  qrystr: " qrystr
07b0: 20 22 2c 20 6b 65 79 76 61 6c 73 3a 20 22 20 6b   ", keyvals: " k
07c0: 65 79 76 61 6c 73 20 22 2c 20 70 72 65 76 69 6f  eyvals ", previo
07d0: 75 73 20 72 75 6e 20 69 64 73 20 66 6f 75 6e 64  us run ids found
07e0: 3a 20 22 20 70 72 65 76 2d 72 75 6e 2d 69 64 73  : " prev-run-ids
07f0: 29 0a 09 20 20 28 69 66 20 28 6e 75 6c 6c 3f 20  )..  (if (null? 
0800: 70 72 65 76 2d 72 75 6e 2d 69 64 73 29 20 23 66  prev-run-ids) #f
0810: 0a 09 20 20 20 20 20 20 28 6c 65 74 20 6c 6f 6f  ..      (let loo
0820: 70 20 28 28 68 65 64 20 28 63 61 72 20 70 72 65  p ((hed (car pre
0830: 76 2d 72 75 6e 2d 69 64 73 29 29 0a 09 09 09 20  v-run-ids)).... 
0840: 28 74 61 6c 20 28 63 64 72 20 70 72 65 76 2d 72  (tal (cdr prev-r
0850: 75 6e 2d 69 64 73 29 29 29 0a 09 09 28 6c 65 74  un-ids)))...(let
0860: 20 28 28 72 65 73 75 6c 74 73 20 28 64 62 2d 67   ((results (db-g
0870: 65 74 2d 74 65 73 74 73 2d 66 6f 72 2d 72 75 6e  et-tests-for-run
0880: 20 64 62 20 68 65 64 20 74 65 73 74 2d 6e 61 6d   db hed test-nam
0890: 65 20 69 74 65 6d 2d 70 61 74 68 20 27 28 29 20  e item-path '() 
08a0: 27 28 29 29 29 29 0a 09 09 20 20 28 64 65 62 75  '())))...  (debu
08b0: 67 3a 70 72 69 6e 74 20 34 20 22 47 6f 74 20 74  g:print 4 "Got t
08c0: 65 73 74 73 20 66 6f 72 20 72 75 6e 2d 69 64 20  ests for run-id 
08d0: 22 20 72 75 6e 2d 69 64 20 22 2c 20 74 65 73 74  " run-id ", test
08e0: 2d 6e 61 6d 65 20 22 20 74 65 73 74 2d 6e 61 6d  -name " test-nam
08f0: 65 20 22 2c 20 69 74 65 6d 2d 70 61 74 68 20 22  e ", item-path "
0900: 20 69 74 65 6d 2d 70 61 74 68 20 22 3a 20 22 20   item-path ": " 
0910: 72 65 73 75 6c 74 73 29 0a 09 09 20 20 28 69 66  results)...  (if
0920: 20 28 61 6e 64 20 28 6e 75 6c 6c 3f 20 72 65 73   (and (null? res
0930: 75 6c 74 73 29 0a 09 09 09 20 20 20 28 6e 6f 74  ults)....   (not
0940: 20 28 6e 75 6c 6c 3f 20 74 61 6c 29 29 29 0a 09   (null? tal)))..
0950: 09 20 20 20 20 20 20 28 6c 6f 6f 70 20 28 63 61  .      (loop (ca
0960: 72 20 74 61 6c 29 28 63 64 72 20 74 61 6c 29 29  r tal)(cdr tal))
0970: 0a 09 09 20 20 20 20 20 20 28 69 66 20 28 6e 75  ...      (if (nu
0980: 6c 6c 3f 20 72 65 73 75 6c 74 73 29 20 23 66 0a  ll? results) #f.
0990: 09 09 09 20 20 28 63 61 72 20 72 65 73 75 6c 74  ...  (car result
09a0: 73 29 29 29 29 29 29 29 29 29 29 0a 20 20 20 20  s)))))))))).    
09b0: 0a 3b 3b 20 67 65 74 20 74 68 65 20 70 72 65 76  .;; get the prev
09c0: 69 6f 75 73 20 72 65 63 6f 72 64 73 20 66 6f 72  ious records for
09d0: 20 77 68 65 6e 20 74 68 65 73 65 20 74 65 73 74   when these test
09e0: 73 20 77 65 72 65 20 72 75 6e 20 77 68 65 72 65  s were run where
09f0: 20 61 6c 6c 20 6b 65 79 73 20 6d 61 74 63 68 20   all keys match 
0a00: 62 75 74 20 72 75 6e 6e 61 6d 65 0a 3b 3b 20 4e  but runname.;; N
0a10: 42 2f 2f 20 4d 65 72 67 65 20 74 68 69 73 20 77  B// Merge this w
0a20: 69 74 68 20 74 65 73 74 3a 67 65 74 2d 70 72 65  ith test:get-pre
0a30: 76 69 6f 75 73 2d 74 65 73 74 2d 72 75 6e 2d 72  vious-test-run-r
0a40: 65 63 6f 72 64 73 3f 20 54 68 69 73 20 6f 6e 65  ecords? This one
0a50: 20 6c 6f 6f 6b 73 20 66 6f 72 20 61 6c 6c 20 6d   looks for all m
0a60: 61 74 63 68 69 6e 67 20 74 65 73 74 73 0a 3b 3b  atching tests.;;
0a70: 20 63 61 6e 20 75 73 65 20 77 69 6c 64 63 61 72   can use wildcar
0a80: 64 73 2e 20 0a 28 64 65 66 69 6e 65 20 28 74 65  ds. .(define (te
0a90: 73 74 3a 67 65 74 2d 6d 61 74 63 68 69 6e 67 2d  st:get-matching-
0aa0: 70 72 65 76 69 6f 75 73 2d 74 65 73 74 2d 72 75  previous-test-ru
0ab0: 6e 2d 72 65 63 6f 72 64 73 20 64 62 20 72 75 6e  n-records db run
0ac0: 2d 69 64 20 74 65 73 74 2d 6e 61 6d 65 20 69 74  -id test-name it
0ad0: 65 6d 2d 70 61 74 68 29 0a 20 20 28 6c 65 74 2a  em-path).  (let*
0ae0: 20 28 28 6b 65 79 73 20 20 20 20 28 64 62 3a 67   ((keys    (db:g
0af0: 65 74 2d 6b 65 79 73 20 64 62 29 29 0a 09 20 28  et-keys db)).. (
0b00: 73 65 6c 73 74 72 20 20 28 73 74 72 69 6e 67 2d  selstr  (string-
0b10: 69 6e 74 65 72 73 70 65 72 73 65 20 28 6d 61 70  intersperse (map
0b20: 20 28 6c 61 6d 62 64 61 20 28 78 29 28 76 65 63   (lambda (x)(vec
0b30: 74 6f 72 2d 72 65 66 20 78 20 30 29 29 20 6b 65  tor-ref x 0)) ke
0b40: 79 73 29 20 22 2c 22 29 29 0a 09 20 28 71 72 79  ys) ",")).. (qry
0b50: 73 74 72 20 20 28 73 74 72 69 6e 67 2d 69 6e 74  str  (string-int
0b60: 65 72 73 70 65 72 73 65 20 28 6d 61 70 20 28 6c  ersperse (map (l
0b70: 61 6d 62 64 61 20 28 78 29 28 63 6f 6e 63 20 28  ambda (x)(conc (
0b80: 76 65 63 74 6f 72 2d 72 65 66 20 78 20 30 29 20  vector-ref x 0) 
0b90: 22 3d 3f 22 29 29 20 6b 65 79 73 29 20 22 20 41  "=?")) keys) " A
0ba0: 4e 44 20 22 29 29 0a 09 20 28 6b 65 79 76 61 6c  ND ")).. (keyval
0bb0: 73 20 23 66 29 0a 09 20 28 74 65 73 74 73 2d 68  s #f).. (tests-h
0bc0: 61 73 68 20 28 6d 61 6b 65 2d 68 61 73 68 2d 74  ash (make-hash-t
0bd0: 61 62 6c 65 29 29 29 0a 20 20 20 20 3b 3b 20 66  able))).    ;; f
0be0: 69 72 73 74 20 6c 6f 6f 6b 20 75 70 20 74 68 65  irst look up the
0bf0: 20 6b 65 79 20 76 61 6c 75 65 73 20 66 72 6f 6d   key values from
0c00: 20 74 68 65 20 72 75 6e 20 73 65 6c 65 63 74 65   the run selecte
0c10: 64 20 62 79 20 72 75 6e 2d 69 64 0a 20 20 20 20  d by run-id.    
0c20: 28 73 71 6c 69 74 65 33 3a 66 6f 72 2d 65 61 63  (sqlite3:for-eac
0c30: 68 2d 72 6f 77 20 0a 20 20 20 20 20 28 6c 61 6d  h-row .     (lam
0c40: 62 64 61 20 28 61 20 2e 20 62 29 0a 20 20 20 20  bda (a . b).    
0c50: 20 20 20 28 73 65 74 21 20 6b 65 79 76 61 6c 73     (set! keyvals
0c60: 20 28 63 6f 6e 73 20 61 20 62 29 29 29 0a 20 20   (cons a b))).  
0c70: 20 20 20 64 62 0a 20 20 20 20 20 28 63 6f 6e 63     db.     (conc
0c80: 20 22 53 45 4c 45 43 54 20 22 20 73 65 6c 73 74   "SELECT " selst
0c90: 72 20 22 20 46 52 4f 4d 20 72 75 6e 73 20 57 48  r " FROM runs WH
0ca0: 45 52 45 20 69 64 3d 3f 20 4f 52 44 45 52 20 42  ERE id=? ORDER B
0cb0: 59 20 65 76 65 6e 74 5f 74 69 6d 65 20 44 45 53  Y event_time DES
0cc0: 43 3b 22 29 20 72 75 6e 2d 69 64 29 0a 20 20 20  C;") run-id).   
0cd0: 20 28 69 66 20 28 6e 6f 74 20 6b 65 79 76 61 6c   (if (not keyval
0ce0: 73 29 0a 09 27 28 29 0a 09 28 6c 65 74 20 28 28  s)..'()..(let ((
0cf0: 70 72 65 76 2d 72 75 6e 2d 69 64 73 20 27 28 29  prev-run-ids '()
0d00: 29 29 0a 09 20 20 28 61 70 70 6c 79 20 73 71 6c  ))..  (apply sql
0d10: 69 74 65 33 3a 66 6f 72 2d 65 61 63 68 2d 72 6f  ite3:for-each-ro
0d20: 77 0a 09 09 20 28 6c 61 6d 62 64 61 20 28 69 64  w... (lambda (id
0d30: 29 0a 09 09 20 20 20 28 73 65 74 21 20 70 72 65  )...   (set! pre
0d40: 76 2d 72 75 6e 2d 69 64 73 20 28 63 6f 6e 73 20  v-run-ids (cons 
0d50: 69 64 20 70 72 65 76 2d 72 75 6e 2d 69 64 73 29  id prev-run-ids)
0d60: 29 29 0a 09 09 20 64 62 0a 09 09 20 28 63 6f 6e  ))... db... (con
0d70: 63 20 22 53 45 4c 45 43 54 20 69 64 20 46 52 4f  c "SELECT id FRO
0d80: 4d 20 72 75 6e 73 20 57 48 45 52 45 20 22 20 71  M runs WHERE " q
0d90: 72 79 73 74 72 20 22 20 41 4e 44 20 69 64 20 21  rystr " AND id !
0da0: 3d 20 3f 3b 22 29 20 28 61 70 70 65 6e 64 20 6b  = ?;") (append k
0db0: 65 79 76 61 6c 73 20 28 6c 69 73 74 20 72 75 6e  eyvals (list run
0dc0: 2d 69 64 29 29 29 0a 09 20 20 3b 3b 20 63 6f 6c  -id)))..  ;; col
0dd0: 6c 65 63 74 20 61 6c 6c 20 6d 61 74 63 68 69 6e  lect all matchin
0de0: 67 20 74 65 73 74 73 20 66 6f 72 20 74 68 65 20  g tests for the 
0df0: 72 75 6e 73 20 74 68 65 6e 0a 09 20 20 3b 3b 20  runs then..  ;; 
0e00: 65 78 74 72 61 63 74 20 74 68 65 20 6d 6f 73 74  extract the most
0e10: 20 72 65 63 65 6e 74 20 74 65 73 74 20 61 6e 64   recent test and
0e20: 20 72 65 74 75 72 6e 20 74 68 61 74 2e 0a 09 20   return that... 
0e30: 20 28 64 65 62 75 67 3a 70 72 69 6e 74 20 34 20   (debug:print 4 
0e40: 22 73 65 6c 73 74 72 3a 20 22 20 73 65 6c 73 74  "selstr: " selst
0e50: 72 20 22 2c 20 71 72 79 73 74 72 3a 20 22 20 71  r ", qrystr: " q
0e60: 72 79 73 74 72 20 22 2c 20 6b 65 79 76 61 6c 73  rystr ", keyvals
0e70: 3a 20 22 20 6b 65 79 76 61 6c 73 20 0a 09 09 20  : " keyvals ... 
0e80: 20 20 20 20 20 20 22 2c 20 70 72 65 76 69 6f 75        ", previou
0e90: 73 20 72 75 6e 20 69 64 73 20 66 6f 75 6e 64 3a  s run ids found:
0ea0: 20 22 20 70 72 65 76 2d 72 75 6e 2d 69 64 73 29   " prev-run-ids)
0eb0: 0a 09 20 20 28 69 66 20 28 6e 75 6c 6c 3f 20 70  ..  (if (null? p
0ec0: 72 65 76 2d 72 75 6e 2d 69 64 73 29 20 27 28 29  rev-run-ids) '()
0ed0: 20 20 3b 3b 20 6e 6f 20 70 72 65 76 69 6f 75 73    ;; no previous
0ee0: 20 72 75 6e 73 3f 20 72 65 74 75 72 6e 20 6e 75   runs? return nu
0ef0: 6c 6c 0a 09 20 20 20 20 20 20 28 6c 65 74 20 6c  ll..      (let l
0f00: 6f 6f 70 20 28 28 68 65 64 20 28 63 61 72 20 70  oop ((hed (car p
0f10: 72 65 76 2d 72 75 6e 2d 69 64 73 29 29 0a 09 09  rev-run-ids))...
0f20: 09 20 28 74 61 6c 20 28 63 64 72 20 70 72 65 76  . (tal (cdr prev
0f30: 2d 72 75 6e 2d 69 64 73 29 29 29 0a 09 09 28 6c  -run-ids)))...(l
0f40: 65 74 20 28 28 72 65 73 75 6c 74 73 20 28 64 62  et ((results (db
0f50: 2d 67 65 74 2d 74 65 73 74 73 2d 66 6f 72 2d 72  -get-tests-for-r
0f60: 75 6e 20 64 62 20 68 65 64 20 74 65 73 74 2d 6e  un db hed test-n
0f70: 61 6d 65 20 69 74 65 6d 2d 70 61 74 68 20 27 28  ame item-path '(
0f80: 29 20 27 28 29 29 29 29 0a 09 09 20 20 28 64 65  ) '())))...  (de
0f90: 62 75 67 3a 70 72 69 6e 74 20 34 20 22 47 6f 74  bug:print 4 "Got
0fa0: 20 74 65 73 74 73 20 66 6f 72 20 72 75 6e 2d 69   tests for run-i
0fb0: 64 20 22 20 72 75 6e 2d 69 64 20 22 2c 20 74 65  d " run-id ", te
0fc0: 73 74 2d 6e 61 6d 65 20 22 20 74 65 73 74 2d 6e  st-name " test-n
0fd0: 61 6d 65 20 0a 09 09 09 20 20 20 20 20 20 20 22  ame ....       "
0fe0: 2c 20 69 74 65 6d 2d 70 61 74 68 20 22 20 69 74  , item-path " it
0ff0: 65 6d 2d 70 61 74 68 20 22 20 72 65 73 75 6c 74  em-path " result
1000: 73 3a 20 22 20 28 69 6e 74 65 72 73 70 65 72 73  s: " (interspers
1010: 65 20 72 65 73 75 6c 74 73 20 22 5c 6e 22 29 29  e results "\n"))
1020: 0a 09 09 20 20 3b 3b 20 4b 65 65 70 20 6f 6e 6c  ...  ;; Keep onl
1030: 79 20 74 68 65 20 79 6f 75 6e 67 65 73 74 20 6f  y the youngest o
1040: 66 20 61 6e 79 20 74 65 73 74 2f 69 74 65 6d 20  f any test/item 
1050: 63 6f 6d 62 69 6e 61 74 69 6f 6e 0a 09 09 20 20  combination...  
1060: 28 66 6f 72 2d 65 61 63 68 20 0a 09 09 20 20 20  (for-each ...   
1070: 28 6c 61 6d 62 64 61 20 28 74 65 73 74 64 61 74  (lambda (testdat
1080: 29 0a 09 09 20 20 20 20 20 28 6c 65 74 2a 20 28  )...     (let* (
1090: 28 66 75 6c 6c 2d 74 65 73 74 6e 61 6d 65 20 28  (full-testname (
10a0: 63 6f 6e 63 20 28 64 62 3a 74 65 73 74 2d 67 65  conc (db:test-ge
10b0: 74 2d 74 65 73 74 6e 61 6d 65 20 74 65 73 74 64  t-testname testd
10c0: 61 74 29 20 22 2f 22 20 28 64 62 3a 74 65 73 74  at) "/" (db:test
10d0: 2d 67 65 74 2d 69 74 65 6d 2d 70 61 74 68 20 74  -get-item-path t
10e0: 65 73 74 64 61 74 29 29 29 0a 09 09 09 20 20 20  estdat)))....   
10f0: 20 28 73 74 6f 72 65 64 2d 74 65 73 74 20 20 20   (stored-test   
1100: 28 68 61 73 68 2d 74 61 62 6c 65 2d 72 65 66 2f  (hash-table-ref/
1110: 64 65 66 61 75 6c 74 20 74 65 73 74 73 2d 68 61  default tests-ha
1120: 73 68 20 66 75 6c 6c 2d 74 65 73 74 6e 61 6d 65  sh full-testname
1130: 20 23 66 29 29 29 0a 09 09 20 20 20 20 20 20 20   #f)))...       
1140: 28 69 66 20 28 6f 72 20 28 6e 6f 74 20 73 74 6f  (if (or (not sto
1150: 72 65 64 2d 74 65 73 74 29 0a 09 09 09 20 20 20  red-test)....   
1160: 20 20 20 20 28 61 6e 64 20 73 74 6f 72 65 64 2d      (and stored-
1170: 74 65 73 74 0a 09 09 09 09 20 20 20 20 28 3e 20  test.....    (> 
1180: 28 64 62 3a 74 65 73 74 2d 67 65 74 2d 65 76 65  (db:test-get-eve
1190: 6e 74 5f 74 69 6d 65 20 74 65 73 74 64 61 74 29  nt_time testdat)
11a0: 28 64 62 3a 74 65 73 74 2d 67 65 74 2d 65 76 65  (db:test-get-eve
11b0: 6e 74 5f 74 69 6d 65 20 73 74 6f 72 65 64 2d 74  nt_time stored-t
11c0: 65 73 74 29 29 29 29 0a 09 09 09 20 20 20 3b 3b  est))))....   ;;
11d0: 20 74 68 69 73 20 74 65 73 74 20 69 73 20 79 6f   this test is yo
11e0: 75 6e 67 65 72 2c 20 73 74 6f 72 65 20 69 74 20  unger, store it 
11f0: 69 6e 20 74 68 65 20 68 61 73 68 0a 09 09 09 20  in the hash.... 
1200: 20 20 28 68 61 73 68 2d 74 61 62 6c 65 2d 73 65    (hash-table-se
1210: 74 21 20 74 65 73 74 73 2d 68 61 73 68 20 66 75  t! tests-hash fu
1220: 6c 6c 2d 74 65 73 74 6e 61 6d 65 20 74 65 73 74  ll-testname test
1230: 64 61 74 29 29 29 29 0a 09 09 20 20 20 72 65 73  dat))))...   res
1240: 75 6c 74 73 29 0a 09 09 20 20 28 69 66 20 28 6e  ults)...  (if (n
1250: 75 6c 6c 3f 20 74 61 6c 29 0a 09 09 20 20 20 20  ull? tal)...    
1260: 20 20 28 6d 61 70 20 63 64 72 20 28 68 61 73 68    (map cdr (hash
1270: 2d 74 61 62 6c 65 2d 3e 61 6c 69 73 74 20 74 65  -table->alist te
1280: 73 74 73 2d 68 61 73 68 29 29 20 3b 3b 20 72 65  sts-hash)) ;; re
1290: 74 75 72 6e 20 61 20 6c 69 73 74 20 6f 66 20 74  turn a list of t
12a0: 68 65 20 6d 6f 73 74 20 72 65 63 65 6e 74 20 74  he most recent t
12b0: 65 73 74 73 0a 09 09 20 20 20 20 20 20 28 6c 6f  ests...      (lo
12c0: 6f 70 20 28 63 61 72 20 74 61 6c 29 28 63 64 72  op (car tal)(cdr
12d0: 20 74 61 6c 29 29 29 29 29 29 29 29 29 29 0a 0a   tal))))))))))..
12e0: 3b 3b 20 0a 28 64 65 66 69 6e 65 20 28 74 65 73  ;; .(define (tes
12f0: 74 2d 73 65 74 2d 73 74 61 74 75 73 21 20 64 62  t-set-status! db
1300: 20 72 75 6e 2d 69 64 20 74 65 73 74 2d 6e 61 6d   run-id test-nam
1310: 65 20 73 74 61 74 65 20 73 74 61 74 75 73 20 69  e state status i
1320: 74 65 6d 64 61 74 2d 6f 72 2d 70 61 74 68 20 63  temdat-or-path c
1330: 6f 6d 6d 65 6e 74 20 64 61 74 29 0a 20 20 28 6c  omment dat).  (l
1340: 65 74 2a 20 28 28 72 65 61 6c 2d 73 74 61 74 75  et* ((real-statu
1350: 73 20 73 74 61 74 75 73 29 0a 09 20 28 69 74 65  s status).. (ite
1360: 6d 2d 70 61 74 68 20 20 20 28 69 66 20 28 73 74  m-path   (if (st
1370: 72 69 6e 67 3f 20 69 74 65 6d 64 61 74 2d 6f 72  ring? itemdat-or
1380: 2d 70 61 74 68 29 20 69 74 65 6d 64 61 74 2d 6f  -path) itemdat-o
1390: 72 2d 70 61 74 68 20 28 69 74 65 6d 2d 6c 69 73  r-path (item-lis
13a0: 74 2d 3e 70 61 74 68 20 69 74 65 6d 64 61 74 2d  t->path itemdat-
13b0: 6f 72 2d 70 61 74 68 29 29 29 0a 09 20 28 74 65  or-path))).. (te
13c0: 73 74 64 61 74 20 20 20 20 20 28 64 62 3a 67 65  stdat     (db:ge
13d0: 74 2d 74 65 73 74 2d 69 6e 66 6f 20 64 62 20 72  t-test-info db r
13e0: 75 6e 2d 69 64 20 74 65 73 74 2d 6e 61 6d 65 20  un-id test-name 
13f0: 69 74 65 6d 2d 70 61 74 68 29 29 0a 09 20 28 74  item-path)).. (t
1400: 65 73 74 2d 69 64 20 20 20 20 20 28 69 66 20 74  est-id     (if t
1410: 65 73 74 64 61 74 20 28 64 62 3a 74 65 73 74 2d  estdat (db:test-
1420: 67 65 74 2d 69 64 20 74 65 73 74 64 61 74 29 20  get-id testdat) 
1430: 23 66 29 29 0a 09 20 28 6f 74 68 65 72 64 61 74  #f)).. (otherdat
1440: 20 20 20 20 28 69 66 20 64 61 74 20 64 61 74 20      (if dat dat 
1450: 28 6d 61 6b 65 2d 68 61 73 68 2d 74 61 62 6c 65  (make-hash-table
1460: 29 29 29 0a 09 20 3b 3b 20 62 65 66 6f 72 65 20  ))).. ;; before 
1470: 70 72 6f 63 65 65 64 69 6e 67 20 77 65 20 6d 75  proceeding we mu
1480: 73 74 20 66 69 6e 64 20 6f 75 74 20 69 66 20 74  st find out if t
1490: 68 65 20 70 72 65 76 69 6f 75 73 20 74 65 73 74  he previous test
14a0: 20 28 77 68 65 72 65 20 61 6c 6c 20 6b 65 79 73   (where all keys
14b0: 20 6d 61 74 63 68 65 64 20 65 78 63 65 70 74 20   matched except 
14c0: 72 75 6e 6e 61 6d 65 29 0a 09 20 3b 3b 20 77 61  runname).. ;; wa
14d0: 73 20 57 41 49 56 45 44 20 69 66 20 74 68 69 73  s WAIVED if this
14e0: 20 74 65 73 74 20 69 73 20 46 41 49 4c 0a 09 20   test is FAIL.. 
14f0: 28 77 61 69 76 65 64 20 20 20 28 69 66 20 28 65  (waived   (if (e
1500: 71 75 61 6c 3f 20 73 74 61 74 75 73 20 22 46 41  qual? status "FA
1510: 49 4c 22 29 0a 09 09 20 20 20 20 20 20 20 28 6c  IL")...       (l
1520: 65 74 20 28 28 70 72 65 76 2d 74 65 73 74 20 28  et ((prev-test (
1530: 74 65 73 74 3a 67 65 74 2d 70 72 65 76 69 6f 75  test:get-previou
1540: 73 2d 74 65 73 74 2d 72 75 6e 2d 72 65 63 6f 72  s-test-run-recor
1550: 64 20 64 62 20 72 75 6e 2d 69 64 20 74 65 73 74  d db run-id test
1560: 2d 6e 61 6d 65 20 69 74 65 6d 2d 70 61 74 68 29  -name item-path)
1570: 29 29 0a 09 09 09 20 28 69 66 20 70 72 65 76 2d  )).... (if prev-
1580: 74 65 73 74 20 3b 3b 20 74 72 75 65 20 69 66 20  test ;; true if 
1590: 77 65 20 66 6f 75 6e 64 20 61 20 70 72 65 76 69  we found a previ
15a0: 6f 75 73 20 74 65 73 74 20 69 6e 20 74 68 69 73  ous test in this
15b0: 20 72 75 6e 20 73 65 72 69 65 73 0a 09 09 09 20   run series.... 
15c0: 20 20 20 20 28 6c 65 74 20 28 28 70 72 65 76 2d      (let ((prev-
15d0: 73 74 61 74 75 73 20 28 64 62 3a 74 65 73 74 2d  status (db:test-
15e0: 67 65 74 2d 73 74 61 74 75 73 20 20 20 70 72 65  get-status   pre
15f0: 76 2d 74 65 73 74 29 29 0a 09 09 09 09 20 20 20  v-test)).....   
1600: 28 70 72 65 76 2d 73 74 61 74 65 20 20 28 64 62  (prev-state  (db
1610: 3a 74 65 73 74 2d 67 65 74 2d 73 74 61 74 65 20  :test-get-state 
1620: 20 20 20 70 72 65 76 2d 74 65 73 74 29 29 0a 09     prev-test))..
1630: 09 09 09 20 20 20 28 70 72 65 76 2d 63 6f 6d 6d  ...   (prev-comm
1640: 65 6e 74 20 28 64 62 3a 74 65 73 74 2d 67 65 74  ent (db:test-get
1650: 2d 63 6f 6d 6d 65 6e 74 20 70 72 65 76 2d 74 65  -comment prev-te
1660: 73 74 29 29 29 0a 09 09 09 20 20 20 20 20 20 20  st)))....       
1670: 28 64 65 62 75 67 3a 70 72 69 6e 74 20 34 20 22  (debug:print 4 "
1680: 70 72 65 76 2d 73 74 61 74 75 73 20 22 20 70 72  prev-status " pr
1690: 65 76 2d 73 74 61 74 75 73 20 22 2c 20 70 72 65  ev-status ", pre
16a0: 76 2d 73 74 61 74 65 20 22 20 70 72 65 76 2d 73  v-state " prev-s
16b0: 74 61 74 65 20 22 2c 20 70 72 65 76 2d 63 6f 6d  tate ", prev-com
16c0: 6d 65 6e 74 20 22 20 70 72 65 76 2d 63 6f 6d 6d  ment " prev-comm
16d0: 65 6e 74 29 0a 09 09 09 20 20 20 20 20 20 20 28  ent)....       (
16e0: 69 66 20 28 61 6e 64 20 28 65 71 75 61 6c 3f 20  if (and (equal? 
16f0: 70 72 65 76 2d 73 74 61 74 65 20 20 22 43 4f 4d  prev-state  "COM
1700: 50 4c 45 54 45 44 22 29 0a 09 09 09 09 09 28 65  PLETED")......(e
1710: 71 75 61 6c 3f 20 70 72 65 76 2d 73 74 61 74 75  qual? prev-statu
1720: 73 20 22 57 41 49 56 45 44 22 29 29 0a 09 09 09  s "WAIVED"))....
1730: 09 20 20 20 70 72 65 76 2d 63 6f 6d 6d 65 6e 74  .   prev-comment
1740: 20 3b 3b 20 77 61 69 76 65 64 20 69 73 20 65 69   ;; waived is ei
1750: 74 68 65 72 20 74 68 65 20 63 6f 6d 6d 65 6e 74  ther the comment
1760: 20 6f 72 20 23 66 0a 09 09 09 09 20 20 20 23 66   or #f.....   #f
1770: 29 29 0a 09 09 09 20 20 20 20 20 23 66 29 29 0a  ))....     #f)).
1780: 09 09 20 20 20 20 20 20 20 23 66 29 29 29 0a 20  ..       #f))). 
1790: 20 20 20 28 69 66 20 77 61 69 76 65 64 20 28 73     (if waived (s
17a0: 65 74 21 20 72 65 61 6c 2d 73 74 61 74 75 73 20  et! real-status 
17b0: 22 57 41 49 56 45 44 22 29 29 0a 20 20 20 20 28  "WAIVED")).    (
17c0: 64 65 62 75 67 3a 70 72 69 6e 74 20 34 20 22 72  debug:print 4 "r
17d0: 65 61 6c 2d 73 74 61 74 75 73 20 22 20 72 65 61  eal-status " rea
17e0: 6c 2d 73 74 61 74 75 73 20 22 2c 20 77 61 69 76  l-status ", waiv
17f0: 65 64 20 22 20 77 61 69 76 65 64 20 22 2c 20 73  ed " waived ", s
1800: 74 61 74 75 73 20 22 20 73 74 61 74 75 73 29 0a  tatus " status).
1810: 0a 20 20 20 20 3b 3b 20 75 70 64 61 74 65 20 74  .    ;; update t
1820: 68 65 20 70 72 69 6d 61 72 79 20 72 65 63 6f 72  he primary recor
1830: 64 20 49 46 20 73 74 61 74 65 20 41 4e 44 20 73  d IF state AND s
1840: 74 61 74 75 73 20 61 72 65 20 64 65 66 69 6e 65  tatus are define
1850: 64 0a 20 20 20 20 28 69 66 20 28 61 6e 64 20 73  d.    (if (and s
1860: 74 61 74 65 20 73 74 61 74 75 73 29 0a 09 28 64  tate status)..(d
1870: 62 3a 74 65 73 74 2d 73 65 74 2d 73 74 61 74 65  b:test-set-state
1880: 2d 73 74 61 74 75 73 2d 62 79 2d 72 75 6e 2d 69  -status-by-run-i
1890: 64 2d 74 65 73 74 6e 61 6d 65 20 64 62 20 72 75  d-testname db ru
18a0: 6e 2d 69 64 20 74 65 73 74 2d 6e 61 6d 65 20 69  n-id test-name i
18b0: 74 65 6d 2d 70 61 74 68 20 72 65 61 6c 2d 73 74  tem-path real-st
18c0: 61 74 75 73 20 73 74 61 74 65 29 29 0a 0a 20 20  atus state))..  
18d0: 20 20 3b 3b 20 69 66 20 73 74 61 74 75 73 20 69    ;; if status i
18e0: 73 20 22 41 55 54 4f 22 20 74 68 65 6e 20 63 61  s "AUTO" then ca
18f0: 6c 6c 20 72 6f 6c 6c 75 70 0a 20 20 20 20 28 69  ll rollup.    (i
1900: 66 20 28 61 6e 64 20 74 65 73 74 2d 69 64 20 73  f (and test-id s
1910: 74 61 74 65 20 73 74 61 74 75 73 20 28 65 71 75  tate status (equ
1920: 61 6c 3f 20 73 74 61 74 75 73 20 22 41 55 54 4f  al? status "AUTO
1930: 22 29 29 20 0a 09 28 64 62 3a 74 65 73 74 2d 64  ")) ..(db:test-d
1940: 61 74 61 2d 72 6f 6c 6c 75 70 20 64 62 20 74 65  ata-rollup db te
1950: 73 74 2d 69 64 20 73 74 61 74 75 73 29 29 0a 0a  st-id status))..
1960: 20 20 20 20 3b 3b 20 61 64 64 20 6d 65 74 61 64      ;; add metad
1970: 61 74 61 20 28 6e 65 65 64 20 74 6f 20 64 6f 20  ata (need to do 
1980: 74 68 69 73 20 77 61 79 20 74 6f 20 61 76 6f 69  this way to avoi
1990: 64 20 53 51 4c 20 69 6e 6a 65 63 74 69 6f 6e 20  d SQL injection 
19a0: 69 73 73 75 65 73 29 0a 0a 20 20 20 20 3b 3b 20  issues)..    ;; 
19b0: 3a 66 69 72 73 74 5f 65 72 72 0a 20 20 20 20 3b  :first_err.    ;
19c0: 3b 20 28 6c 65 74 20 28 28 76 61 6c 20 28 68 61  ; (let ((val (ha
19d0: 73 68 2d 74 61 62 6c 65 2d 72 65 66 2f 64 65 66  sh-table-ref/def
19e0: 61 75 6c 74 20 6f 74 68 65 72 64 61 74 20 22 3a  ault otherdat ":
19f0: 66 69 72 73 74 5f 65 72 72 22 20 23 66 29 29 29  first_err" #f)))
1a00: 0a 20 20 20 20 3b 3b 20 20 20 28 69 66 20 76 61  .    ;;   (if va
1a10: 6c 0a 20 20 20 20 3b 3b 20 20 20 20 20 20 20 28  l.    ;;       (
1a20: 73 71 6c 69 74 65 33 3a 65 78 65 63 75 74 65 20  sqlite3:execute 
1a30: 64 62 20 22 55 50 44 41 54 45 20 74 65 73 74 73  db "UPDATE tests
1a40: 20 53 45 54 20 66 69 72 73 74 5f 65 72 72 3d 3f   SET first_err=?
1a50: 20 57 48 45 52 45 20 72 75 6e 5f 69 64 3d 3f 20   WHERE run_id=? 
1a60: 41 4e 44 20 74 65 73 74 6e 61 6d 65 3d 3f 20 41  AND testname=? A
1a70: 4e 44 20 69 74 65 6d 5f 70 61 74 68 3d 3f 3b 22  ND item_path=?;"
1a80: 20 76 61 6c 20 72 75 6e 2d 69 64 20 74 65 73 74   val run-id test
1a90: 2d 6e 61 6d 65 20 69 74 65 6d 2d 70 61 74 68 29  -name item-path)
1aa0: 29 29 0a 20 20 20 20 3b 3b 20 0a 20 20 20 20 3b  )).    ;; .    ;
1ab0: 3b 20 3b 3b 20 3a 66 69 72 73 74 5f 77 61 72 6e  ; ;; :first_warn
1ac0: 0a 20 20 20 20 3b 3b 20 28 6c 65 74 20 28 28 76  .    ;; (let ((v
1ad0: 61 6c 20 28 68 61 73 68 2d 74 61 62 6c 65 2d 72  al (hash-table-r
1ae0: 65 66 2f 64 65 66 61 75 6c 74 20 6f 74 68 65 72  ef/default other
1af0: 64 61 74 20 22 3a 66 69 72 73 74 5f 77 61 72 6e  dat ":first_warn
1b00: 22 20 23 66 29 29 29 0a 20 20 20 20 3b 3b 20 20  " #f))).    ;;  
1b10: 20 28 69 66 20 76 61 6c 0a 20 20 20 20 3b 3b 20   (if val.    ;; 
1b20: 20 20 20 20 20 20 28 73 71 6c 69 74 65 33 3a 65        (sqlite3:e
1b30: 78 65 63 75 74 65 20 64 62 20 22 55 50 44 41 54  xecute db "UPDAT
1b40: 45 20 74 65 73 74 73 20 53 45 54 20 66 69 72 73  E tests SET firs
1b50: 74 5f 77 61 72 6e 3d 3f 20 57 48 45 52 45 20 72  t_warn=? WHERE r
1b60: 75 6e 5f 69 64 3d 3f 20 41 4e 44 20 74 65 73 74  un_id=? AND test
1b70: 6e 61 6d 65 3d 3f 20 41 4e 44 20 69 74 65 6d 5f  name=? AND item_
1b80: 70 61 74 68 3d 3f 3b 22 20 76 61 6c 20 72 75 6e  path=?;" val run
1b90: 2d 69 64 20 74 65 73 74 2d 6e 61 6d 65 20 69 74  -id test-name it
1ba0: 65 6d 2d 70 61 74 68 29 29 29 0a 0a 20 20 20 20  em-path)))..    
1bb0: 28 6c 65 74 20 28 28 63 61 74 65 67 6f 72 79 20  (let ((category 
1bc0: 28 68 61 73 68 2d 74 61 62 6c 65 2d 72 65 66 2f  (hash-table-ref/
1bd0: 64 65 66 61 75 6c 74 20 6f 74 68 65 72 64 61 74  default otherdat
1be0: 20 22 3a 63 61 74 65 67 6f 72 79 22 20 22 22 29   ":category" "")
1bf0: 29 0a 09 20 20 28 76 61 72 69 61 62 6c 65 20 28  )..  (variable (
1c00: 68 61 73 68 2d 74 61 62 6c 65 2d 72 65 66 2f 64  hash-table-ref/d
1c10: 65 66 61 75 6c 74 20 6f 74 68 65 72 64 61 74 20  efault otherdat 
1c20: 22 3a 76 61 72 69 61 62 6c 65 22 20 22 22 29 29  ":variable" ""))
1c30: 0a 09 20 20 28 76 61 6c 75 65 20 20 20 20 28 68  ..  (value    (h
1c40: 61 73 68 2d 74 61 62 6c 65 2d 72 65 66 2f 64 65  ash-table-ref/de
1c50: 66 61 75 6c 74 20 6f 74 68 65 72 64 61 74 20 22  fault otherdat "
1c60: 3a 76 61 6c 75 65 22 20 20 20 20 23 66 29 29 0a  :value"    #f)).
1c70: 09 20 20 28 65 78 70 65 63 74 65 64 20 28 68 61  .  (expected (ha
1c80: 73 68 2d 74 61 62 6c 65 2d 72 65 66 2f 64 65 66  sh-table-ref/def
1c90: 61 75 6c 74 20 6f 74 68 65 72 64 61 74 20 22 3a  ault otherdat ":
1ca0: 65 78 70 65 63 74 65 64 22 20 23 66 29 29 0a 09  expected" #f))..
1cb0: 20 20 28 74 6f 6c 20 20 20 20 20 20 28 68 61 73    (tol      (has
1cc0: 68 2d 74 61 62 6c 65 2d 72 65 66 2f 64 65 66 61  h-table-ref/defa
1cd0: 75 6c 74 20 6f 74 68 65 72 64 61 74 20 22 3a 74  ult otherdat ":t
1ce0: 6f 6c 22 20 20 20 20 20 20 23 66 29 29 0a 09 20  ol"      #f)).. 
1cf0: 20 28 75 6e 69 74 73 20 20 20 20 28 68 61 73 68   (units    (hash
1d00: 2d 74 61 62 6c 65 2d 72 65 66 2f 64 65 66 61 75  -table-ref/defau
1d10: 6c 74 20 6f 74 68 65 72 64 61 74 20 22 3a 75 6e  lt otherdat ":un
1d20: 69 74 73 22 20 20 20 20 22 22 29 29 0a 09 20 20  its"    ""))..  
1d30: 28 74 79 70 65 20 20 20 20 20 28 68 61 73 68 2d  (type     (hash-
1d40: 74 61 62 6c 65 2d 72 65 66 2f 64 65 66 61 75 6c  table-ref/defaul
1d50: 74 20 6f 74 68 65 72 64 61 74 20 22 3a 74 79 70  t otherdat ":typ
1d60: 65 22 20 20 20 20 20 22 22 29 29 0a 09 20 20 28  e"     ""))..  (
1d70: 64 63 6f 6d 6d 65 6e 74 20 28 68 61 73 68 2d 74  dcomment (hash-t
1d80: 61 62 6c 65 2d 72 65 66 2f 64 65 66 61 75 6c 74  able-ref/default
1d90: 20 6f 74 68 65 72 64 61 74 20 22 3a 63 6f 6d 6d   otherdat ":comm
1da0: 65 6e 74 22 20 20 22 22 29 29 29 0a 20 20 20 20  ent"  ""))).    
1db0: 20 20 28 64 65 62 75 67 3a 70 72 69 6e 74 20 34    (debug:print 4
1dc0: 20 0a 09 09 20 20 20 22 63 61 74 65 67 6f 72 79   ...   "category
1dd0: 3a 20 22 20 63 61 74 65 67 6f 72 79 20 22 2c 20  : " category ", 
1de0: 76 61 72 69 61 62 6c 65 3a 20 22 20 76 61 72 69  variable: " vari
1df0: 61 62 6c 65 20 22 2c 20 76 61 6c 75 65 3a 20 22  able ", value: "
1e00: 20 76 61 6c 75 65 0a 09 09 20 20 20 22 2c 20 65   value...   ", e
1e10: 78 70 65 63 74 65 64 3a 20 22 20 65 78 70 65 63  xpected: " expec
1e20: 74 65 64 20 22 2c 20 74 6f 6c 3a 20 22 20 74 6f  ted ", tol: " to
1e30: 6c 20 22 2c 20 75 6e 69 74 73 3a 20 22 20 75 6e  l ", units: " un
1e40: 69 74 73 29 0a 20 20 20 20 20 20 28 69 66 20 28  its).      (if (
1e50: 61 6e 64 20 76 61 6c 75 65 20 65 78 70 65 63 74  and value expect
1e60: 65 64 20 74 6f 6c 29 20 3b 3b 20 61 6c 6c 20 74  ed tol) ;; all t
1e70: 68 72 65 65 20 72 65 71 75 69 72 65 64 0a 09 20  hree required.. 
1e80: 20 28 64 62 3a 63 73 76 2d 3e 74 65 73 74 2d 64   (db:csv->test-d
1e90: 61 74 61 20 64 62 20 74 65 73 74 2d 69 64 20 0a  ata db test-id .
1ea0: 09 09 09 20 20 20 20 20 28 63 6f 6e 63 20 63 61  ...     (conc ca
1eb0: 74 65 67 6f 72 79 20 22 2c 22 0a 09 09 09 09 20  tegory ","..... 
1ec0: 20 20 76 61 72 69 61 62 6c 65 20 22 2c 22 0a 09    variable ","..
1ed0: 09 09 09 20 20 20 76 61 6c 75 65 20 20 20 20 22  ...   value    "
1ee0: 2c 22 0a 09 09 09 09 20 20 20 65 78 70 65 63 74  ,".....   expect
1ef0: 65 64 20 22 2c 22 0a 09 09 09 09 20 20 20 74 6f  ed ",".....   to
1f00: 6c 20 20 20 20 20 20 22 2c 22 0a 09 09 09 09 20  l      ","..... 
1f10: 20 20 75 6e 69 74 73 20 20 20 20 22 2c 22 0a 09    units    ","..
1f20: 09 09 09 20 20 20 64 63 6f 6d 6d 65 6e 74 20 22  ...   dcomment "
1f30: 2c 2c 22 20 3b 3b 20 65 78 74 72 61 20 63 6f 6d  ,," ;; extra com
1f40: 6d 61 20 66 6f 72 20 73 74 61 74 75 73 0a 09 09  ma for status...
1f50: 09 09 20 20 20 74 79 70 65 20 20 20 20 20 29 29  ..   type     ))
1f60: 29 29 0a 09 09 09 09 20 20 20 0a 20 20 20 20 3b  )).....   .    ;
1f70: 3b 20 6e 65 65 64 20 74 6f 20 75 70 64 61 74 65  ; need to update
1f80: 20 74 68 65 20 74 6f 70 20 74 65 73 74 20 72 65   the top test re
1f90: 63 6f 72 64 20 69 66 20 50 41 53 53 20 6f 72 20  cord if PASS or 
1fa0: 46 41 49 4c 20 61 6e 64 20 74 68 69 73 20 69 73  FAIL and this is
1fb0: 20 61 20 73 75 62 74 65 73 74 0a 20 20 20 20 28   a subtest.    (
1fc0: 69 66 20 28 61 6e 64 20 28 6e 6f 74 20 28 65 71  if (and (not (eq
1fd0: 75 61 6c 3f 20 69 74 65 6d 2d 70 61 74 68 20 22  ual? item-path "
1fe0: 22 29 29 0a 09 20 20 20 20 20 28 6f 72 20 28 65  "))..     (or (e
1ff0: 71 75 61 6c 3f 20 73 74 61 74 75 73 20 22 50 41  qual? status "PA
2000: 53 53 22 29 0a 09 09 20 28 65 71 75 61 6c 3f 20  SS")... (equal? 
2010: 73 74 61 74 75 73 20 22 57 41 52 4e 22 29 0a 09  status "WARN")..
2020: 09 20 28 65 71 75 61 6c 3f 20 73 74 61 74 75 73  . (equal? status
2030: 20 22 46 41 49 4c 22 29 0a 09 09 20 28 65 71 75   "FAIL")... (equ
2040: 61 6c 3f 20 73 74 61 74 75 73 20 22 57 41 49 56  al? status "WAIV
2050: 45 44 22 29 0a 09 09 20 28 65 71 75 61 6c 3f 20  ED")... (equal? 
2060: 73 74 61 74 75 73 20 22 52 55 4e 4e 49 4e 47 22  status "RUNNING"
2070: 29 29 29 0a 09 28 62 65 67 69 6e 0a 09 20 20 28  )))..(begin..  (
2080: 73 71 6c 69 74 65 33 3a 65 78 65 63 75 74 65 20  sqlite3:execute 
2090: 0a 09 20 20 20 64 62 0a 09 20 20 20 22 55 50 44  ..   db..   "UPD
20a0: 41 54 45 20 74 65 73 74 73 20 0a 20 20 20 20 20  ATE tests .     
20b0: 20 20 20 20 20 20 20 20 53 45 54 20 66 61 69 6c          SET fail
20c0: 5f 63 6f 75 6e 74 3d 28 53 45 4c 45 43 54 20 63  _count=(SELECT c
20d0: 6f 75 6e 74 28 69 64 29 20 46 52 4f 4d 20 74 65  ount(id) FROM te
20e0: 73 74 73 20 57 48 45 52 45 20 72 75 6e 5f 69 64  sts WHERE run_id
20f0: 3d 3f 20 41 4e 44 20 74 65 73 74 6e 61 6d 65 3d  =? AND testname=
2100: 3f 20 41 4e 44 20 69 74 65 6d 5f 70 61 74 68 20  ? AND item_path 
2110: 21 3d 20 27 27 20 41 4e 44 20 73 74 61 74 75 73  != '' AND status
2120: 3d 27 46 41 49 4c 27 29 2c 0a 20 20 20 20 20 20  ='FAIL'),.      
2130: 20 20 20 20 20 20 20 20 20 20 20 70 61 73 73 5f             pass_
2140: 63 6f 75 6e 74 3d 28 53 45 4c 45 43 54 20 63 6f  count=(SELECT co
2150: 75 6e 74 28 69 64 29 20 46 52 4f 4d 20 74 65 73  unt(id) FROM tes
2160: 74 73 20 57 48 45 52 45 20 72 75 6e 5f 69 64 3d  ts WHERE run_id=
2170: 3f 20 41 4e 44 20 74 65 73 74 6e 61 6d 65 3d 3f  ? AND testname=?
2180: 20 41 4e 44 20 69 74 65 6d 5f 70 61 74 68 20 21   AND item_path !
2190: 3d 20 27 27 20 41 4e 44 20 28 73 74 61 74 75 73  = '' AND (status
21a0: 3d 27 50 41 53 53 27 20 4f 52 20 73 74 61 74 75  ='PASS' OR statu
21b0: 73 3d 27 57 41 52 4e 27 20 4f 52 20 73 74 61 74  s='WARN' OR stat
21c0: 75 73 3d 27 57 41 49 56 45 44 27 29 29 0a 20 20  us='WAIVED')).  
21d0: 20 20 20 20 20 20 20 20 20 20 20 57 48 45 52 45             WHERE
21e0: 20 72 75 6e 5f 69 64 3d 3f 20 41 4e 44 20 74 65   run_id=? AND te
21f0: 73 74 6e 61 6d 65 3d 3f 20 41 4e 44 20 69 74 65  stname=? AND ite
2200: 6d 5f 70 61 74 68 3d 27 27 3b 22 0a 09 20 20 20  m_path='';"..   
2210: 72 75 6e 2d 69 64 20 74 65 73 74 2d 6e 61 6d 65  run-id test-name
2220: 20 72 75 6e 2d 69 64 20 74 65 73 74 2d 6e 61 6d   run-id test-nam
2230: 65 20 72 75 6e 2d 69 64 20 74 65 73 74 2d 6e 61  e run-id test-na
2240: 6d 65 29 0a 09 20 20 28 69 66 20 28 65 71 75 61  me)..  (if (equa
2250: 6c 3f 20 73 74 61 74 75 73 20 22 52 55 4e 4e 49  l? status "RUNNI
2260: 4e 47 22 29 20 3b 3b 20 72 75 6e 6e 69 6e 67 20  NG") ;; running 
2270: 74 61 6b 65 73 20 70 72 69 6f 72 69 74 79 20 6f  takes priority o
2280: 76 65 72 20 61 6c 6c 20 6f 74 68 65 72 20 73 74  ver all other st
2290: 61 74 65 73 2c 20 66 6f 72 63 65 20 74 68 65 20  ates, force the 
22a0: 74 65 73 74 20 73 74 61 74 65 20 74 6f 20 52 55  test state to RU
22b0: 4e 4e 49 4e 47 0a 09 20 20 20 20 20 20 28 73 71  NNING..      (sq
22c0: 6c 69 74 65 33 3a 65 78 65 63 75 74 65 20 64 62  lite3:execute db
22d0: 20 22 55 50 44 41 54 45 20 74 65 73 74 73 20 53   "UPDATE tests S
22e0: 45 54 20 73 74 61 74 65 3d 3f 20 57 48 45 52 45  ET state=? WHERE
22f0: 20 72 75 6e 5f 69 64 3d 3f 20 41 4e 44 20 74 65   run_id=? AND te
2300: 73 74 6e 61 6d 65 3d 3f 20 41 4e 44 20 69 74 65  stname=? AND ite
2310: 6d 5f 70 61 74 68 3d 27 27 3b 22 20 22 52 55 4e  m_path='';" "RUN
2320: 4e 49 4e 47 22 20 72 75 6e 2d 69 64 20 74 65 73  NING" run-id tes
2330: 74 2d 6e 61 6d 65 29 0a 09 20 20 20 20 20 20 28  t-name)..      (
2340: 73 71 6c 69 74 65 33 3a 65 78 65 63 75 74 65 0a  sqlite3:execute.
2350: 09 20 20 20 20 20 20 20 64 62 0a 09 20 20 20 20  .       db..    
2360: 20 20 20 22 55 50 44 41 54 45 20 74 65 73 74 73     "UPDATE tests
2370: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2380: 20 20 20 20 20 20 20 20 53 45 54 20 73 74 61 74          SET stat
2390: 65 3d 43 41 53 45 20 57 48 45 4e 20 28 53 45 4c  e=CASE WHEN (SEL
23a0: 45 43 54 20 63 6f 75 6e 74 28 69 64 29 20 46 52  ECT count(id) FR
23b0: 4f 4d 20 74 65 73 74 73 20 57 48 45 52 45 20 72  OM tests WHERE r
23c0: 75 6e 5f 69 64 3d 3f 20 41 4e 44 20 74 65 73 74  un_id=? AND test
23d0: 6e 61 6d 65 3d 3f 20 41 4e 44 20 69 74 65 6d 5f  name=? AND item_
23e0: 70 61 74 68 20 21 3d 20 27 27 20 41 4e 44 20 73  path != '' AND s
23f0: 74 61 74 65 20 69 6e 20 28 27 52 55 4e 4e 49 4e  tate in ('RUNNIN
2400: 47 27 2c 27 4e 4f 54 5f 53 54 41 52 54 45 44 27  G','NOT_STARTED'
2410: 29 29 20 3e 20 30 20 54 48 45 4e 20 0a 20 20 20  )) > 0 THEN .   
2420: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2430: 20 20 20 20 20 20 20 27 52 55 4e 4e 49 4e 47 27         'RUNNING'
2440: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2450: 20 20 20 20 20 20 20 20 45 4c 53 45 20 27 43 4f          ELSE 'CO
2460: 4d 50 4c 45 54 45 44 27 20 45 4e 44 2c 0a 20 20  MPLETED' END,.  
2470: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2480: 20 20 20 20 20 20 20 20 73 74 61 74 75 73 3d 43          status=C
2490: 41 53 45 20 57 48 45 4e 20 66 61 69 6c 5f 63 6f  ASE WHEN fail_co
24a0: 75 6e 74 20 3e 20 30 20 54 48 45 4e 20 27 46 41  unt > 0 THEN 'FA
24b0: 49 4c 27 20 57 48 45 4e 20 70 61 73 73 5f 63 6f  IL' WHEN pass_co
24c0: 75 6e 74 20 3e 20 30 20 41 4e 44 20 66 61 69 6c  unt > 0 AND fail
24d0: 5f 63 6f 75 6e 74 3d 30 20 54 48 45 4e 20 27 50  _count=0 THEN 'P
24e0: 41 53 53 27 20 45 4c 53 45 20 27 55 4e 4b 4e 4f  ASS' ELSE 'UNKNO
24f0: 57 4e 27 20 45 4e 44 0a 20 20 20 20 20 20 20 20  WN' END.        
2500: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 57                 W
2510: 48 45 52 45 20 72 75 6e 5f 69 64 3d 3f 20 41 4e  HERE run_id=? AN
2520: 44 20 74 65 73 74 6e 61 6d 65 3d 3f 20 41 4e 44  D testname=? AND
2530: 20 69 74 65 6d 5f 70 61 74 68 3d 27 27 3b 22 0a   item_path='';".
2540: 09 20 20 20 20 20 20 20 72 75 6e 2d 69 64 20 74  .       run-id t
2550: 65 73 74 2d 6e 61 6d 65 20 72 75 6e 2d 69 64 20  est-name run-id 
2560: 74 65 73 74 2d 6e 61 6d 65 29 29 29 29 0a 20 20  test-name)))).  
2570: 20 20 28 69 66 20 28 6f 72 20 28 61 6e 64 20 28    (if (or (and (
2580: 73 74 72 69 6e 67 3f 20 63 6f 6d 6d 65 6e 74 29  string? comment)
2590: 0a 09 09 20 28 73 74 72 69 6e 67 2d 6d 61 74 63  ... (string-matc
25a0: 68 20 28 72 65 67 65 78 70 20 22 5c 5c 53 2b 22  h (regexp "\\S+"
25b0: 29 20 63 6f 6d 6d 65 6e 74 29 29 0a 09 20 20 20  ) comment))..   
25c0: 20 77 61 69 76 65 64 29 0a 09 28 73 71 6c 69 74   waived)..(sqlit
25d0: 65 33 3a 65 78 65 63 75 74 65 20 64 62 20 22 55  e3:execute db "U
25e0: 50 44 41 54 45 20 74 65 73 74 73 20 53 45 54 20  PDATE tests SET 
25f0: 63 6f 6d 6d 65 6e 74 3d 3f 20 57 48 45 52 45 20  comment=? WHERE 
2600: 72 75 6e 5f 69 64 3d 3f 20 41 4e 44 20 74 65 73  run_id=? AND tes
2610: 74 6e 61 6d 65 3d 3f 20 41 4e 44 20 69 74 65 6d  tname=? AND item
2620: 5f 70 61 74 68 3d 3f 3b 22 0a 09 09 09 20 28 69  _path=?;".... (i
2630: 66 20 77 61 69 76 65 64 20 77 61 69 76 65 64 20  f waived waived 
2640: 63 6f 6d 6d 65 6e 74 29 20 72 75 6e 2d 69 64 20  comment) run-id 
2650: 74 65 73 74 2d 6e 61 6d 65 20 69 74 65 6d 2d 70  test-name item-p
2660: 61 74 68 29 29 0a 20 20 20 20 29 29 0a 0a 28 64  ath)).    ))..(d
2670: 65 66 69 6e 65 20 28 74 65 73 74 2d 73 65 74 2d  efine (test-set-
2680: 6c 6f 67 21 20 64 62 20 72 75 6e 2d 69 64 20 74  log! db run-id t
2690: 65 73 74 2d 6e 61 6d 65 20 69 74 65 6d 64 61 74  est-name itemdat
26a0: 20 6c 6f 67 66 29 20 0a 20 20 28 6c 65 74 20 28   logf) .  (let (
26b0: 28 69 74 65 6d 2d 70 61 74 68 20 28 69 74 65 6d  (item-path (item
26c0: 2d 6c 69 73 74 2d 3e 70 61 74 68 20 69 74 65 6d  -list->path item
26d0: 64 61 74 29 29 29 0a 20 20 20 20 28 73 71 6c 69  dat))).    (sqli
26e0: 74 65 33 3a 65 78 65 63 75 74 65 20 64 62 20 22  te3:execute db "
26f0: 55 50 44 41 54 45 20 74 65 73 74 73 20 53 45 54  UPDATE tests SET
2700: 20 66 69 6e 61 6c 5f 6c 6f 67 66 3d 3f 20 57 48   final_logf=? WH
2710: 45 52 45 20 72 75 6e 5f 69 64 3d 3f 20 41 4e 44  ERE run_id=? AND
2720: 20 74 65 73 74 6e 61 6d 65 3d 3f 20 41 4e 44 20   testname=? AND 
2730: 69 74 65 6d 5f 70 61 74 68 3d 3f 3b 22 20 0a 09  item_path=?;" ..
2740: 09 20 20 20 20 20 6c 6f 67 66 20 72 75 6e 2d 69  .     logf run-i
2750: 64 20 74 65 73 74 2d 6e 61 6d 65 20 69 74 65 6d  d test-name item
2760: 2d 70 61 74 68 29 29 29 0a 0a 28 64 65 66 69 6e  -path)))..(defin
2770: 65 20 28 74 65 73 74 2d 73 65 74 2d 74 6f 70 6c  e (test-set-topl
2780: 6f 67 21 20 64 62 20 72 75 6e 2d 69 64 20 74 65  og! db run-id te
2790: 73 74 2d 6e 61 6d 65 20 6c 6f 67 66 29 20 0a 20  st-name logf) . 
27a0: 20 28 73 71 6c 69 74 65 33 3a 65 78 65 63 75 74   (sqlite3:execut
27b0: 65 20 64 62 20 22 55 50 44 41 54 45 20 74 65 73  e db "UPDATE tes
27c0: 74 73 20 53 45 54 20 66 69 6e 61 6c 5f 6c 6f 67  ts SET final_log
27d0: 66 3d 3f 20 57 48 45 52 45 20 72 75 6e 5f 69 64  f=? WHERE run_id
27e0: 3d 3f 20 41 4e 44 20 74 65 73 74 6e 61 6d 65 3d  =? AND testname=
27f0: 3f 20 41 4e 44 20 69 74 65 6d 5f 70 61 74 68 3d  ? AND item_path=
2800: 27 27 3b 22 20 0a 09 09 20 20 20 6c 6f 67 66 20  '';" ...   logf 
2810: 72 75 6e 2d 69 64 20 74 65 73 74 2d 6e 61 6d 65  run-id test-name
2820: 29 29 0a 0a 28 64 65 66 69 6e 65 20 28 74 65 73  ))..(define (tes
2830: 74 73 3a 73 75 6d 6d 61 72 69 7a 65 2d 69 74 65  ts:summarize-ite
2840: 6d 73 20 64 62 20 72 75 6e 2d 69 64 20 74 65 73  ms db run-id tes
2850: 74 2d 6e 61 6d 65 20 66 6f 72 63 65 29 0a 20 20  t-name force).  
2860: 3b 3b 20 69 66 20 6e 6f 74 20 66 6f 72 63 65 20  ;; if not force 
2870: 74 68 65 6e 20 6f 6e 6c 79 20 75 70 64 61 74 65  then only update
2880: 20 74 68 65 20 72 65 63 6f 72 64 20 69 66 20 6f   the record if o
2890: 6e 65 20 6f 66 20 74 68 65 73 65 20 69 73 20 74  ne of these is t
28a0: 72 75 65 3a 0a 20 20 3b 3b 20 20 20 31 2e 20 6c  rue:.  ;;   1. l
28b0: 6f 67 66 20 69 73 20 22 6c 6f 67 2f 66 69 6e 61  ogf is "log/fina
28c0: 6c 2e 6c 6f 67 0a 20 20 3b 3b 20 20 20 32 2e 20  l.log.  ;;   2. 
28d0: 6c 6f 67 66 20 69 73 20 73 61 6d 65 20 61 73 20  logf is same as 
28e0: 6f 75 74 70 75 74 66 69 6c 65 6e 61 6d 65 0a 20  outputfilename. 
28f0: 20 28 6c 65 74 20 28 28 6f 75 74 70 75 74 66 69   (let ((outputfi
2900: 6c 65 6e 61 6d 65 20 28 63 6f 6e 63 20 22 6d 65  lename (conc "me
2910: 67 61 74 65 73 74 2d 72 6f 6c 6c 75 70 2d 22 20  gatest-rollup-" 
2920: 74 65 73 74 2d 6e 61 6d 65 20 22 2e 68 74 6d 6c  test-name ".html
2930: 22 29 29 0a 09 28 6f 72 69 67 2d 64 69 72 20 20  "))..(orig-dir  
2940: 20 20 20 20 20 28 63 75 72 72 65 6e 74 2d 64 69       (current-di
2950: 72 65 63 74 6f 72 79 29 29 0a 09 28 6c 6f 67 66  rectory))..(logf
2960: 20 20 20 20 20 20 20 20 20 20 20 23 66 29 29 0a             #f)).
2970: 20 20 20 20 28 73 71 6c 69 74 65 33 3a 66 6f 72      (sqlite3:for
2980: 2d 65 61 63 68 2d 72 6f 77 20 0a 20 20 20 20 20  -each-row .     
2990: 28 6c 61 6d 62 64 61 20 28 70 61 74 68 20 66 69  (lambda (path fi
29a0: 6e 61 6c 5f 6c 6f 67 66 29 0a 20 20 20 20 20 20  nal_logf).      
29b0: 20 28 73 65 74 21 20 6c 6f 67 66 20 66 69 6e 61   (set! logf fina
29c0: 6c 5f 6c 6f 67 66 29 0a 20 20 20 20 20 20 20 28  l_logf).       (
29d0: 69 66 20 28 64 69 72 65 63 74 6f 72 79 3f 20 70  if (directory? p
29e0: 61 74 68 29 0a 09 20 20 20 28 62 65 67 69 6e 0a  ath)..   (begin.
29f0: 09 20 20 20 20 20 28 70 72 69 6e 74 20 22 46 6f  .     (print "Fo
2a00: 75 6e 64 20 70 61 74 68 3a 20 22 20 70 61 74 68  und path: " path
2a10: 29 0a 09 20 20 20 20 20 28 63 68 61 6e 67 65 2d  )..     (change-
2a20: 64 69 72 65 63 74 6f 72 79 20 70 61 74 68 29 29  directory path))
2a30: 0a 09 20 20 20 20 20 3b 3b 20 28 73 65 74 21 20  ..     ;; (set! 
2a40: 6f 75 74 70 75 74 66 69 6c 65 6e 61 6d 65 20 28  outputfilename (
2a50: 63 6f 6e 63 20 70 61 74 68 20 22 2f 22 20 6f 75  conc path "/" ou
2a60: 74 70 75 74 66 69 6c 65 6e 61 6d 65 29 29 29 0a  tputfilename))).
2a70: 09 20 20 20 28 70 72 69 6e 74 20 22 4e 6f 20 73  .   (print "No s
2a80: 75 63 68 20 70 61 74 68 3a 20 22 20 70 61 74 68  uch path: " path
2a90: 29 29 29 0a 20 20 20 20 20 64 62 20 0a 20 20 20  ))).     db .   
2aa0: 20 20 22 53 45 4c 45 43 54 20 72 75 6e 64 69 72    "SELECT rundir
2ab0: 2c 66 69 6e 61 6c 5f 6c 6f 67 66 20 46 52 4f 4d  ,final_logf FROM
2ac0: 20 74 65 73 74 73 20 57 48 45 52 45 20 72 75 6e   tests WHERE run
2ad0: 5f 69 64 3d 3f 20 41 4e 44 20 74 65 73 74 6e 61  _id=? AND testna
2ae0: 6d 65 3d 3f 20 41 4e 44 20 69 74 65 6d 5f 70 61  me=? AND item_pa
2af0: 74 68 3d 27 27 3b 22 0a 20 20 20 20 20 72 75 6e  th='';".     run
2b00: 2d 69 64 20 74 65 73 74 2d 6e 61 6d 65 29 0a 20  -id test-name). 
2b10: 20 20 20 28 70 72 69 6e 74 20 22 73 75 6d 6d 61     (print "summa
2b20: 72 69 7a 65 2d 69 74 65 6d 73 20 77 69 74 68 20  rize-items with 
2b30: 6c 6f 67 66 20 22 20 6c 6f 67 66 29 0a 20 20 20  logf " logf).   
2b40: 20 28 69 66 20 28 6f 72 20 28 65 71 75 61 6c 3f   (if (or (equal?
2b50: 20 6c 6f 67 66 20 22 6c 6f 67 73 2f 66 69 6e 61   logf "logs/fina
2b60: 6c 2e 6c 6f 67 22 29 0a 09 20 20 20 20 28 65 71  l.log")..    (eq
2b70: 75 61 6c 3f 20 6c 6f 67 66 20 6f 75 74 70 75 74  ual? logf output
2b80: 66 69 6c 65 6e 61 6d 65 29 0a 09 20 20 20 20 66  filename)..    f
2b90: 6f 72 63 65 29 0a 09 28 62 65 67 69 6e 0a 09 20  orce)..(begin.. 
2ba0: 20 28 69 66 20 28 6f 62 74 61 69 6e 2d 64 6f 74   (if (obtain-dot
2bb0: 2d 6c 6f 63 6b 20 6f 75 74 70 75 74 66 69 6c 65  -lock outputfile
2bc0: 6e 61 6d 65 20 31 20 32 30 20 33 30 29 20 3b 3b  name 1 20 30) ;;
2bd0: 20 72 65 74 72 79 20 65 76 65 72 79 20 73 65 63   retry every sec
2be0: 6f 6e 64 20 66 6f 72 20 32 30 20 73 65 63 6f 6e  ond for 20 secon
2bf0: 64 73 2c 20 63 61 6c 6c 20 69 74 20 64 65 61 64  ds, call it dead
2c00: 20 61 66 74 65 72 20 33 30 20 73 65 63 6f 6e 64   after 30 second
2c10: 73 20 61 6e 64 20 73 74 65 61 6c 20 74 68 65 20  s and steal the 
2c20: 6c 6f 63 6b 0a 09 20 20 20 20 20 20 28 70 72 69  lock..      (pri
2c30: 6e 74 20 22 4f 62 74 61 69 6e 65 64 20 6c 6f 63  nt "Obtained loc
2c40: 6b 20 66 6f 72 20 22 20 6f 75 74 70 75 74 66 69  k for " outputfi
2c50: 6c 65 6e 61 6d 65 29 0a 09 20 20 20 20 20 20 28  lename)..      (
2c60: 70 72 69 6e 74 20 22 46 61 69 6c 65 64 20 74 6f  print "Failed to
2c70: 20 6f 62 74 61 69 6e 20 6c 6f 63 6b 20 66 6f 72   obtain lock for
2c80: 20 22 20 6f 75 74 70 75 74 66 69 6c 65 6e 61 6d   " outputfilenam
2c90: 65 29 29 0a 09 20 20 28 6c 65 74 20 28 28 6f 75  e))..  (let ((ou
2ca0: 70 20 20 20 20 28 6f 70 65 6e 2d 6f 75 74 70 75  p    (open-outpu
2cb0: 74 2d 66 69 6c 65 20 6f 75 74 70 75 74 66 69 6c  t-file outputfil
2cc0: 65 6e 61 6d 65 29 29 0a 09 09 28 63 6f 75 6e 74  ename))...(count
2cd0: 73 20 28 6d 61 6b 65 2d 68 61 73 68 2d 74 61 62  s (make-hash-tab
2ce0: 6c 65 29 29 0a 09 09 28 73 74 61 74 65 63 6f 75  le))...(statecou
2cf0: 6e 74 73 20 28 6d 61 6b 65 2d 68 61 73 68 2d 74  nts (make-hash-t
2d00: 61 62 6c 65 29 29 0a 09 09 28 6f 75 74 74 78 74  able))...(outtxt
2d10: 20 22 22 29 0a 09 09 28 74 6f 74 20 20 20 20 30   "")...(tot    0
2d20: 29 29 0a 09 20 20 20 20 28 77 69 74 68 2d 6f 75  ))..    (with-ou
2d30: 74 70 75 74 2d 74 6f 2d 70 6f 72 74 0a 09 09 6f  tput-to-port...o
2d40: 75 70 0a 09 20 20 20 20 20 20 28 6c 61 6d 62 64  up..      (lambd
2d50: 61 20 28 29 0a 09 09 28 73 65 74 21 20 6f 75 74  a ()...(set! out
2d60: 74 78 74 20 28 63 6f 6e 63 20 6f 75 74 74 78 74  txt (conc outtxt
2d70: 20 22 3c 68 74 6d 6c 3e 3c 74 69 74 6c 65 3e 53   "<html><title>S
2d80: 75 6d 6d 61 72 79 3a 20 22 20 74 65 73 74 2d 6e  ummary: " test-n
2d90: 61 6d 65 20 0a 09 09 09 09 20 20 20 22 3c 2f 74  ame .....   "</t
2da0: 69 74 6c 65 3e 3c 62 6f 64 79 3e 3c 68 32 3e 53  itle><body><h2>S
2db0: 75 6d 6d 61 72 79 20 66 6f 72 20 22 20 74 65 73  ummary for " tes
2dc0: 74 2d 6e 61 6d 65 20 22 3c 2f 68 32 3e 22 29 29  t-name "</h2>"))
2dd0: 0a 09 09 28 73 71 6c 69 74 65 33 3a 66 6f 72 2d  ...(sqlite3:for-
2de0: 65 61 63 68 2d 72 6f 77 20 0a 09 09 20 28 6c 61  each-row ... (la
2df0: 6d 62 64 61 20 28 69 64 20 69 74 65 6d 70 61 74  mbda (id itempat
2e00: 68 20 73 74 61 74 65 20 73 74 61 74 75 73 20 72  h state status r
2e10: 75 6e 5f 64 75 72 61 74 69 6f 6e 20 6c 6f 67 66  un_duration logf
2e20: 20 63 6f 6d 6d 65 6e 74 29 0a 09 09 20 20 20 28   comment)...   (
2e30: 68 61 73 68 2d 74 61 62 6c 65 2d 73 65 74 21 20  hash-table-set! 
2e40: 63 6f 75 6e 74 73 20 73 74 61 74 75 73 20 28 2b  counts status (+
2e50: 20 31 20 28 68 61 73 68 2d 74 61 62 6c 65 2d 72   1 (hash-table-r
2e60: 65 66 2f 64 65 66 61 75 6c 74 20 63 6f 75 6e 74  ef/default count
2e70: 73 20 73 74 61 74 75 73 20 30 29 29 29 0a 09 09  s status 0)))...
2e80: 20 20 20 28 68 61 73 68 2d 74 61 62 6c 65 2d 73     (hash-table-s
2e90: 65 74 21 20 73 74 61 74 65 63 6f 75 6e 74 73 20  et! statecounts 
2ea0: 73 74 61 74 65 20 28 2b 20 31 20 28 68 61 73 68  state (+ 1 (hash
2eb0: 2d 74 61 62 6c 65 2d 72 65 66 2f 64 65 66 61 75  -table-ref/defau
2ec0: 6c 74 20 73 74 61 74 65 63 6f 75 6e 74 73 20 73  lt statecounts s
2ed0: 74 61 74 65 20 30 29 29 29 0a 09 09 20 20 20 28  tate 0)))...   (
2ee0: 73 65 74 21 20 6f 75 74 74 78 74 20 28 63 6f 6e  set! outtxt (con
2ef0: 63 20 6f 75 74 74 78 74 20 22 3c 74 72 3e 22 0a  c outtxt "<tr>".
2f00: 09 09 09 09 20 20 20 20 20 20 22 3c 74 64 3e 3c  ....      "<td><
2f10: 61 20 68 72 65 66 3d 5c 22 22 20 69 74 65 6d 70  a href=\"" itemp
2f20: 61 74 68 20 22 2f 22 20 6c 6f 67 66 20 22 5c 22  ath "/" logf "\"
2f30: 3e 20 22 20 69 74 65 6d 70 61 74 68 20 22 3c 2f  > " itempath "</
2f40: 61 3e 3c 2f 74 64 3e 22 20 0a 09 09 09 09 20 20  a></td>" .....  
2f50: 20 20 20 20 22 3c 74 64 3e 22 20 73 74 61 74 65      "<td>" state
2f60: 20 20 20 20 22 3c 2f 74 64 3e 22 20 0a 09 09 09      "</td>" ....
2f70: 09 20 20 20 20 20 20 22 3c 74 64 3e 3c 66 6f 6e  .      "<td><fon
2f80: 74 20 63 6f 6c 6f 72 3d 22 20 28 63 6f 6d 6d 6f  t color=" (commo
2f90: 6e 3a 67 65 74 2d 63 6f 6c 6f 72 2d 66 72 6f 6d  n:get-color-from
2fa0: 2d 73 74 61 74 75 73 20 73 74 61 74 75 73 29 0a  -status status).
2fb0: 09 09 09 09 20 20 20 20 20 20 22 3e 22 20 20 20  ....      ">"   
2fc0: 73 74 61 74 75 73 20 20 20 22 3c 2f 66 6f 6e 74  status   "</font
2fd0: 3e 3c 2f 74 64 3e 22 0a 09 09 09 09 20 20 20 20  ></td>".....    
2fe0: 20 20 22 3c 74 64 3e 22 20 28 69 66 20 28 65 71    "<td>" (if (eq
2ff0: 75 61 6c 3f 20 63 6f 6d 6d 65 6e 74 20 22 22 29  ual? comment "")
3000: 0a 09 09 09 09 09 09 20 22 26 6e 62 73 70 3b 22  ....... "&nbsp;"
3010: 0a 09 09 09 09 09 09 20 63 6f 6d 6d 65 6e 74 29  ....... comment)
3020: 20 22 3c 2f 74 64 3e 22 0a 09 09 09 09 09 09 20   "</td>"....... 
3030: 22 3c 2f 74 72 3e 22 29 29 29 0a 09 09 20 64 62  "</tr>")))... db
3040: 0a 09 09 20 22 53 45 4c 45 43 54 20 69 64 2c 69  ... "SELECT id,i
3050: 74 65 6d 5f 70 61 74 68 2c 73 74 61 74 65 2c 73  tem_path,state,s
3060: 74 61 74 75 73 2c 72 75 6e 5f 64 75 72 61 74 69  tatus,run_durati
3070: 6f 6e 2c 66 69 6e 61 6c 5f 6c 6f 67 66 2c 63 6f  on,final_logf,co
3080: 6d 6d 65 6e 74 20 46 52 4f 4d 20 74 65 73 74 73  mment FROM tests
3090: 20 57 48 45 52 45 20 72 75 6e 5f 69 64 3d 3f 20   WHERE run_id=? 
30a0: 41 4e 44 20 74 65 73 74 6e 61 6d 65 3d 3f 20 41  AND testname=? A
30b0: 4e 44 20 69 74 65 6d 5f 70 61 74 68 20 21 3d 20  ND item_path != 
30c0: 27 27 3b 22 0a 09 09 20 72 75 6e 2d 69 64 20 74  '';"... run-id t
30d0: 65 73 74 2d 6e 61 6d 65 29 0a 0a 09 09 28 70 72  est-name)....(pr
30e0: 69 6e 74 20 22 3c 74 61 62 6c 65 3e 3c 74 72 3e  int "<table><tr>
30f0: 3c 74 64 20 76 61 6c 69 67 6e 3d 5c 22 74 6f 70  <td valign=\"top
3100: 5c 22 3e 22 29 0a 09 09 3b 3b 20 50 72 69 6e 74  \">")...;; Print
3110: 20 6f 75 74 20 73 74 61 74 73 20 66 6f 72 20 73   out stats for s
3120: 74 61 74 75 73 0a 09 09 28 73 65 74 21 20 74 6f  tatus...(set! to
3130: 74 20 30 29 0a 09 09 28 70 72 69 6e 74 20 22 3c  t 0)...(print "<
3140: 74 61 62 6c 65 20 63 65 6c 6c 73 70 61 63 69 6e  table cellspacin
3150: 67 3d 5c 22 30 5c 22 20 62 6f 72 64 65 72 3d 5c  g=\"0\" border=\
3160: 22 31 5c 22 3e 3c 74 72 3e 3c 74 64 20 63 6f 6c  "1\"><tr><td col
3170: 73 70 61 6e 3d 5c 22 32 5c 22 3e 3c 68 32 3e 53  span=\"2\"><h2>S
3180: 74 61 74 65 20 73 74 61 74 73 3c 2f 68 32 3e 3c  tate stats</h2><
3190: 2f 74 64 3e 3c 2f 74 72 3e 22 29 0a 09 09 28 66  /td></tr>")...(f
31a0: 6f 72 2d 65 61 63 68 20 28 6c 61 6d 62 64 61 20  or-each (lambda 
31b0: 28 73 74 61 74 65 29 0a 09 09 09 20 20 20 20 28  (state)....    (
31c0: 73 65 74 21 20 74 6f 74 20 28 2b 20 74 6f 74 20  set! tot (+ tot 
31d0: 28 68 61 73 68 2d 74 61 62 6c 65 2d 72 65 66 20  (hash-table-ref 
31e0: 73 74 61 74 65 63 6f 75 6e 74 73 20 73 74 61 74  statecounts stat
31f0: 65 29 29 29 0a 09 09 09 20 20 20 20 28 70 72 69  e)))....    (pri
3200: 6e 74 20 22 3c 74 72 3e 3c 74 64 3e 22 20 73 74  nt "<tr><td>" st
3210: 61 74 65 20 22 3c 2f 74 64 3e 3c 74 64 3e 22 20  ate "</td><td>" 
3220: 28 68 61 73 68 2d 74 61 62 6c 65 2d 72 65 66 20  (hash-table-ref 
3230: 73 74 61 74 65 63 6f 75 6e 74 73 20 73 74 61 74  statecounts stat
3240: 65 29 20 22 3c 2f 74 64 3e 3c 2f 74 72 3e 22 29  e) "</td></tr>")
3250: 29 0a 09 09 09 20 20 28 68 61 73 68 2d 74 61 62  )....  (hash-tab
3260: 6c 65 2d 6b 65 79 73 20 73 74 61 74 65 63 6f 75  le-keys statecou
3270: 6e 74 73 29 29 0a 09 09 28 70 72 69 6e 74 20 22  nts))...(print "
3280: 3c 74 72 3e 3c 74 64 3e 54 6f 74 61 6c 3c 2f 74  <tr><td>Total</t
3290: 64 3e 3c 74 64 3e 22 20 74 6f 74 20 22 3c 2f 74  d><td>" tot "</t
32a0: 64 3e 3c 2f 74 72 3e 3c 2f 74 61 62 6c 65 3e 22  d></tr></table>"
32b0: 29 0a 09 09 28 70 72 69 6e 74 20 22 3c 2f 74 64  )...(print "</td
32c0: 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 5c 22 74 6f  ><td valign=\"to
32d0: 70 5c 22 3e 22 29 0a 09 09 3b 3b 20 50 72 69 6e  p\">")...;; Prin
32e0: 74 20 6f 75 74 20 73 74 61 74 73 20 66 6f 72 20  t out stats for 
32f0: 73 74 61 74 65 0a 09 09 28 73 65 74 21 20 74 6f  state...(set! to
3300: 74 20 30 29 0a 09 09 28 70 72 69 6e 74 20 22 3c  t 0)...(print "<
3310: 74 61 62 6c 65 20 63 65 6c 6c 73 70 61 63 69 6e  table cellspacin
3320: 67 3d 5c 22 30 5c 22 20 62 6f 72 64 65 72 3d 5c  g=\"0\" border=\
3330: 22 31 5c 22 3e 3c 74 72 3e 3c 74 64 20 63 6f 6c  "1\"><tr><td col
3340: 73 70 61 6e 3d 5c 22 32 5c 22 3e 3c 68 32 3e 53  span=\"2\"><h2>S
3350: 74 61 74 75 73 20 73 74 61 74 73 3c 2f 68 32 3e  tatus stats</h2>
3360: 3c 2f 74 64 3e 3c 2f 74 72 3e 22 29 0a 09 09 28  </td></tr>")...(
3370: 66 6f 72 2d 65 61 63 68 20 28 6c 61 6d 62 64 61  for-each (lambda
3380: 20 28 73 74 61 74 75 73 29 0a 09 09 09 20 20 20   (status)....   
3390: 20 28 73 65 74 21 20 74 6f 74 20 28 2b 20 74 6f   (set! tot (+ to
33a0: 74 20 28 68 61 73 68 2d 74 61 62 6c 65 2d 72 65  t (hash-table-re
33b0: 66 20 63 6f 75 6e 74 73 20 73 74 61 74 75 73 29  f counts status)
33c0: 29 29 0a 09 09 09 20 20 20 20 28 70 72 69 6e 74  ))....    (print
33d0: 20 22 3c 74 72 3e 3c 74 64 3e 3c 66 6f 6e 74 20   "<tr><td><font 
33e0: 63 6f 6c 6f 72 3d 5c 22 22 20 28 63 6f 6d 6d 6f  color=\"" (commo
33f0: 6e 3a 67 65 74 2d 63 6f 6c 6f 72 2d 66 72 6f 6d  n:get-color-from
3400: 2d 73 74 61 74 75 73 20 73 74 61 74 75 73 29 20  -status status) 
3410: 22 5c 22 3e 22 20 73 74 61 74 75 73 0a 09 09 09  "\">" status....
3420: 09 20 20 20 22 3c 2f 66 6f 6e 74 3e 3c 2f 74 64  .   "</font></td
3430: 3e 3c 74 64 3e 22 20 28 68 61 73 68 2d 74 61 62  ><td>" (hash-tab
3440: 6c 65 2d 72 65 66 20 63 6f 75 6e 74 73 20 73 74  le-ref counts st
3450: 61 74 75 73 29 20 22 3c 2f 74 64 3e 3c 2f 74 72  atus) "</td></tr
3460: 3e 22 29 29 0a 09 09 09 20 20 28 68 61 73 68 2d  >"))....  (hash-
3470: 74 61 62 6c 65 2d 6b 65 79 73 20 63 6f 75 6e 74  table-keys count
3480: 73 29 29 0a 09 09 28 70 72 69 6e 74 20 22 3c 74  s))...(print "<t
3490: 72 3e 3c 74 64 3e 54 6f 74 61 6c 3c 2f 74 64 3e  r><td>Total</td>
34a0: 3c 74 64 3e 22 20 74 6f 74 20 22 3c 2f 74 64 3e  <td>" tot "</td>
34b0: 3c 2f 74 72 3e 3c 2f 74 61 62 6c 65 3e 22 29 0a  </tr></table>").
34c0: 09 09 28 70 72 69 6e 74 20 22 3c 2f 74 64 3e 3c  ..(print "</td><
34d0: 2f 74 64 3e 3c 2f 74 72 3e 3c 2f 74 61 62 6c 65  /td></tr></table
34e0: 3e 22 29 0a 0a 09 09 28 70 72 69 6e 74 20 22 3c  >")....(print "<
34f0: 74 61 62 6c 65 20 63 65 6c 6c 73 70 61 63 69 6e  table cellspacin
3500: 67 3d 5c 22 30 5c 22 20 62 6f 72 64 65 72 3d 5c  g=\"0\" border=\
3510: 22 31 5c 22 3e 22 20 0a 09 09 20 20 20 20 20 20  "1\">" ...      
3520: 20 22 3c 74 72 3e 3c 74 64 3e 49 74 65 6d 3c 2f   "<tr><td>Item</
3530: 74 64 3e 3c 74 64 3e 53 74 61 74 65 3c 2f 74 64  td><td>State</td
3540: 3e 3c 74 64 3e 53 74 61 74 75 73 3c 2f 74 64 3e  ><td>Status</td>
3550: 3c 74 64 3e 43 6f 6d 6d 65 6e 74 3c 2f 74 64 3e  <td>Comment</td>
3560: 22 0a 09 09 20 20 20 20 20 20 20 6f 75 74 74 78  "...       outtx
3570: 74 20 22 3c 2f 74 61 62 6c 65 3e 3c 2f 62 6f 64  t "</table></bod
3580: 79 3e 3c 2f 68 74 6d 6c 3e 22 29 0a 09 09 28 72  y></html>")...(r
3590: 65 6c 65 61 73 65 2d 64 6f 74 2d 6c 6f 63 6b 20  elease-dot-lock 
35a0: 6f 75 74 70 75 74 66 69 6c 65 6e 61 6d 65 29 29  outputfilename))
35b0: 29 0a 09 20 20 20 20 28 63 6c 6f 73 65 2d 6f 75  )..    (close-ou
35c0: 74 70 75 74 2d 70 6f 72 74 20 6f 75 70 29 0a 09  tput-port oup)..
35d0: 20 20 20 20 28 63 68 61 6e 67 65 2d 64 69 72 65      (change-dire
35e0: 63 74 6f 72 79 20 6f 72 69 67 2d 64 69 72 29 0a  ctory orig-dir).
35f0: 09 20 20 20 20 28 74 65 73 74 2d 73 65 74 2d 74  .    (test-set-t
3600: 6f 70 6c 6f 67 21 20 64 62 20 72 75 6e 2d 69 64  oplog! db run-id
3610: 20 74 65 73 74 2d 6e 61 6d 65 20 6f 75 74 70 75   test-name outpu
3620: 74 66 69 6c 65 6e 61 6d 65 29 0a 09 20 20 20 20  tfilename)..    
3630: 29 29 29 29 29 0a 0a 28 64 65 66 69 6e 65 20 28  )))))..(define (
3640: 67 65 74 2d 61 6c 6c 2d 6c 65 67 61 6c 2d 74 65  get-all-legal-te
3650: 73 74 73 29 0a 20 20 28 6c 65 74 2a 20 28 28 74  sts).  (let* ((t
3660: 65 73 74 73 20 20 28 67 6c 6f 62 20 28 63 6f 6e  ests  (glob (con
3670: 63 20 2a 74 6f 70 70 61 74 68 2a 20 22 2f 74 65  c *toppath* "/te
3680: 73 74 73 2f 2a 22 29 29 29 0a 09 20 28 72 65 73  sts/*"))).. (res
3690: 20 20 20 20 27 28 29 29 29 0a 20 20 20 20 28 64      '())).    (d
36a0: 65 62 75 67 3a 70 72 69 6e 74 20 34 20 22 49 4e  ebug:print 4 "IN
36b0: 46 4f 3a 20 4c 6f 6f 6b 69 6e 67 20 61 74 20 74  FO: Looking at t
36c0: 65 73 74 73 20 22 20 28 73 74 72 69 6e 67 2d 69  ests " (string-i
36d0: 6e 74 65 72 73 70 65 72 73 65 20 74 65 73 74 73  ntersperse tests
36e0: 20 22 2c 22 29 29 0a 20 20 20 20 28 66 6f 72 2d   ",")).    (for-
36f0: 65 61 63 68 20 28 6c 61 6d 62 64 61 20 28 74 65  each (lambda (te
3700: 73 74 70 61 74 68 29 0a 09 09 28 69 66 20 28 66  stpath)...(if (f
3710: 69 6c 65 2d 65 78 69 73 74 73 3f 20 28 63 6f 6e  ile-exists? (con
3720: 63 20 74 65 73 74 70 61 74 68 20 22 2f 74 65 73  c testpath "/tes
3730: 74 63 6f 6e 66 69 67 22 29 29 0a 09 09 20 20 20  tconfig"))...   
3740: 20 28 73 65 74 21 20 72 65 73 20 28 63 6f 6e 73   (set! res (cons
3750: 20 28 6c 61 73 74 20 28 73 74 72 69 6e 67 2d 73   (last (string-s
3760: 70 6c 69 74 20 74 65 73 74 70 61 74 68 20 22 2f  plit testpath "/
3770: 22 29 29 20 72 65 73 29 29 29 29 0a 09 20 20 20  ")) res))))..   
3780: 20 20 20 74 65 73 74 73 29 0a 20 20 20 20 72 65     tests).    re
3790: 73 29 29 0a 0a 28 64 65 66 69 6e 65 20 28 74 65  s))..(define (te
37a0: 73 74 3a 67 65 74 2d 74 65 73 74 63 6f 6e 66 69  st:get-testconfi
37b0: 67 20 74 65 73 74 2d 6e 61 6d 65 20 73 79 73 74  g test-name syst
37c0: 65 6d 2d 61 6c 6c 6f 77 65 64 29 0a 20 20 28 6c  em-allowed).  (l
37d0: 65 74 2a 20 28 28 74 65 73 74 2d 70 61 74 68 20  et* ((test-path 
37e0: 20 20 20 28 63 6f 6e 63 20 2a 74 6f 70 70 61 74     (conc *toppat
37f0: 68 2a 20 22 2f 74 65 73 74 73 2f 22 20 74 65 73  h* "/tests/" tes
3800: 74 2d 6e 61 6d 65 29 29 0a 09 20 28 74 65 73 74  t-name)).. (test
3810: 2d 63 6f 6e 66 69 67 66 20 28 63 6f 6e 63 20 74  -configf (conc t
3820: 65 73 74 2d 70 61 74 68 20 22 2f 74 65 73 74 63  est-path "/testc
3830: 6f 6e 66 69 67 22 29 29 0a 09 20 28 74 65 73 74  onfig")).. (test
3840: 65 78 69 73 74 73 20 20 20 28 61 6e 64 20 28 66  exists   (and (f
3850: 69 6c 65 2d 65 78 69 73 74 73 3f 20 74 65 73 74  ile-exists? test
3860: 2d 63 6f 6e 66 69 67 66 29 28 66 69 6c 65 2d 72  -configf)(file-r
3870: 65 61 64 2d 61 63 63 65 73 73 3f 20 74 65 73 74  ead-access? test
3880: 2d 63 6f 6e 66 69 67 66 29 29 29 29 0a 20 20 20  -configf)))).   
3890: 20 28 69 66 20 74 65 73 74 65 78 69 73 74 73 0a   (if testexists.
38a0: 09 28 72 65 61 64 2d 63 6f 6e 66 69 67 20 74 65  .(read-config te
38b0: 73 74 2d 63 6f 6e 66 69 67 66 20 23 66 20 73 79  st-configf #f sy
38c0: 73 74 65 6d 2d 61 6c 6c 6f 77 65 64 20 65 6e 76  stem-allowed env
38d0: 69 72 6f 6e 2d 70 61 74 74 3a 20 28 69 66 20 73  iron-patt: (if s
38e0: 79 73 74 65 6d 2d 61 6c 6c 6f 77 65 64 0a 09 09  ystem-allowed...
38f0: 09 09 09 09 09 09 20 20 20 20 20 20 22 70 72 65  ......      "pre
3900: 2d 6c 61 75 6e 63 68 2d 65 6e 76 2d 76 61 72 73  -launch-env-vars
3910: 22 0a 09 09 09 09 09 09 09 09 20 20 20 20 20 20  ".........      
3920: 23 66 29 29 0a 09 23 66 29 29 29 0a 20 20 0a 3b  #f))..#f))).  .;
3930: 3b 20 73 6f 72 74 20 74 65 73 74 73 20 62 79 20  ; sort tests by 
3940: 70 72 69 6f 72 69 74 79 20 61 6e 64 20 77 61 69  priority and wai
3950: 74 6f 6e 0a 3b 3b 20 4d 6f 76 65 20 74 65 73 74  ton.;; Move test
3960: 20 73 70 65 63 69 66 69 63 20 73 74 75 66 66 20   specific stuff 
3970: 74 6f 20 61 20 74 65 73 74 20 75 6e 69 74 20 46  to a test unit F
3980: 49 58 4d 45 20 6f 6e 65 20 6f 66 20 74 68 65 73  IXME one of thes
3990: 65 20 64 61 79 73 0a 28 64 65 66 69 6e 65 20 28  e days.(define (
39a0: 74 65 73 74 73 3a 73 6f 72 74 2d 62 79 2d 70 72  tests:sort-by-pr
39b0: 69 6f 72 69 74 79 2d 61 6e 64 2d 77 61 69 74 6f  iority-and-waito
39c0: 6e 20 74 65 73 74 2d 72 65 63 6f 72 64 73 29 0a  n test-records).
39d0: 20 20 28 6c 65 74 20 28 28 6d 75 6e 67 65 70 72    (let ((mungepr
39e0: 69 6f 72 69 74 79 20 28 6c 61 6d 62 64 61 20 28  iority (lambda (
39f0: 70 72 69 6f 72 69 74 79 29 0a 09 09 09 20 28 69  priority).... (i
3a00: 66 20 70 72 69 6f 72 69 74 79 0a 09 09 09 20 20  f priority....  
3a10: 20 20 20 28 6c 65 74 20 28 28 74 6d 70 20 28 61     (let ((tmp (a
3a20: 6e 79 2d 3e 6e 75 6d 62 65 72 20 70 72 69 6f 72  ny->number prior
3a30: 69 74 79 29 29 29 0a 09 09 09 20 20 20 20 20 20  ity)))....      
3a40: 20 28 69 66 20 74 6d 70 20 74 6d 70 20 28 62 65   (if tmp tmp (be
3a50: 67 69 6e 20 28 64 65 62 75 67 3a 70 72 69 6e 74  gin (debug:print
3a60: 20 30 20 22 45 52 52 4f 52 3a 20 62 61 64 20 70   0 "ERROR: bad p
3a70: 72 69 6f 72 69 74 79 20 76 61 6c 75 65 20 22 20  riority value " 
3a80: 70 72 69 6f 72 69 74 79 20 22 2c 20 75 73 69 6e  priority ", usin
3a90: 67 20 30 22 29 20 30 29 29 29 0a 09 09 09 20 20  g 0") 0)))....  
3aa0: 20 20 20 30 29 29 29 29 0a 20 20 20 20 28 73 6f     0)))).    (so
3ab0: 72 74 20 0a 20 20 20 20 20 28 68 61 73 68 2d 74  rt .     (hash-t
3ac0: 61 62 6c 65 2d 6b 65 79 73 20 74 65 73 74 2d 72  able-keys test-r
3ad0: 65 63 6f 72 64 73 29 20 3b 3b 20 61 76 6f 69 64  ecords) ;; avoid
3ae0: 20 64 65 61 6c 69 6e 67 20 77 69 74 68 20 64 65   dealing with de
3af0: 6c 65 74 65 64 20 74 65 73 74 73 2c 20 6c 6f 6f  leted tests, loo
3b00: 6b 20 61 74 20 74 68 65 20 68 61 73 68 20 74 61  k at the hash ta
3b10: 62 6c 65 0a 20 20 20 20 20 28 6c 61 6d 62 64 61  ble.     (lambda
3b20: 20 28 61 20 62 29 0a 20 20 20 20 20 20 20 28 6c   (a b).       (l
3b30: 65 74 2a 20 28 28 61 2d 72 65 63 6f 72 64 20 20  et* ((a-record  
3b40: 20 28 68 61 73 68 2d 74 61 62 6c 65 2d 72 65 66   (hash-table-ref
3b50: 20 74 65 73 74 2d 72 65 63 6f 72 64 73 20 61 29   test-records a)
3b60: 29 0a 09 20 20 20 20 20 20 28 62 2d 72 65 63 6f  )..      (b-reco
3b70: 72 64 20 20 20 28 68 61 73 68 2d 74 61 62 6c 65  rd   (hash-table
3b80: 2d 72 65 66 20 74 65 73 74 2d 72 65 63 6f 72 64  -ref test-record
3b90: 73 20 62 29 29 0a 09 20 20 20 20 20 20 28 61 2d  s b))..      (a-
3ba0: 77 61 69 74 6f 6e 73 20 20 28 74 65 73 74 73 3a  waitons  (tests:
3bb0: 74 65 73 74 71 75 65 75 65 2d 67 65 74 2d 77 61  testqueue-get-wa
3bc0: 69 74 6f 6e 73 20 61 2d 72 65 63 6f 72 64 29 29  itons a-record))
3bd0: 0a 09 20 20 20 20 20 20 28 62 2d 77 61 69 74 6f  ..      (b-waito
3be0: 6e 73 20 20 28 74 65 73 74 73 3a 74 65 73 74 71  ns  (tests:testq
3bf0: 75 65 75 65 2d 67 65 74 2d 77 61 69 74 6f 6e 73  ueue-get-waitons
3c00: 20 62 2d 72 65 63 6f 72 64 29 29 0a 09 20 20 20   b-record))..   
3c10: 20 20 20 28 61 2d 63 6f 6e 66 69 67 20 20 20 28     (a-config   (
3c20: 74 65 73 74 73 3a 74 65 73 74 71 75 65 75 65 2d  tests:testqueue-
3c30: 67 65 74 2d 74 65 73 74 63 6f 6e 66 69 67 20 20  get-testconfig  
3c40: 61 2d 72 65 63 6f 72 64 29 29 0a 09 20 20 20 20  a-record))..    
3c50: 20 20 28 62 2d 63 6f 6e 66 69 67 20 20 20 28 74    (b-config   (t
3c60: 65 73 74 73 3a 74 65 73 74 71 75 65 75 65 2d 67  ests:testqueue-g
3c70: 65 74 2d 74 65 73 74 63 6f 6e 66 69 67 20 20 62  et-testconfig  b
3c80: 2d 72 65 63 6f 72 64 29 29 0a 09 20 20 20 20 20  -record))..     
3c90: 20 28 61 2d 72 61 77 2d 70 72 69 20 20 28 63 6f   (a-raw-pri  (co
3ca0: 6e 66 69 67 2d 6c 6f 6f 6b 75 70 20 61 2d 63 6f  nfig-lookup a-co
3cb0: 6e 66 69 67 20 22 72 65 71 75 69 72 65 6d 65 6e  nfig "requiremen
3cc0: 74 73 22 20 22 70 72 69 6f 72 69 74 79 22 29 29  ts" "priority"))
3cd0: 0a 09 20 20 20 20 20 20 28 62 2d 72 61 77 2d 70  ..      (b-raw-p
3ce0: 72 69 20 20 28 63 6f 6e 66 69 67 2d 6c 6f 6f 6b  ri  (config-look
3cf0: 75 70 20 62 2d 63 6f 6e 66 69 67 20 22 72 65 71  up b-config "req
3d00: 75 69 72 65 6d 65 6e 74 73 22 20 22 70 72 69 6f  uirements" "prio
3d10: 72 69 74 79 22 29 29 0a 09 20 20 20 20 20 20 28  rity"))..      (
3d20: 61 2d 70 72 69 6f 72 69 74 79 20 28 6d 75 6e 67  a-priority (mung
3d30: 65 70 72 69 6f 72 69 74 79 20 61 2d 72 61 77 2d  epriority a-raw-
3d40: 70 72 69 29 29 0a 09 20 20 20 20 20 20 28 62 2d  pri))..      (b-
3d50: 70 72 69 6f 72 69 74 79 20 28 6d 75 6e 67 65 70  priority (mungep
3d60: 72 69 6f 72 69 74 79 20 62 2d 72 61 77 2d 70 72  riority b-raw-pr
3d70: 69 29 29 29 0a 09 3b 3b 20 20 28 64 65 62 75 67  i)))..;;  (debug
3d80: 3a 70 72 69 6e 74 20 35 20 22 73 6f 72 74 2d 62  :print 5 "sort-b
3d90: 79 2d 70 72 69 6f 72 69 74 79 2d 61 6e 64 2d 77  y-priority-and-w
3da0: 61 69 74 6f 6e 2c 20 61 3a 20 22 20 61 20 22 20  aiton, a: " a " 
3db0: 62 3a 20 22 20 62 0a 09 3b 3b 20 09 20 20 20 20  b: " b..;; .    
3dc0: 20 20 22 5c 6e 20 20 20 20 20 61 2d 72 65 63 6f    "\n     a-reco
3dd0: 72 64 3a 20 20 20 22 20 61 2d 72 65 63 6f 72 64  rd:   " a-record
3de0: 20 0a 09 3b 3b 20 09 20 20 20 20 20 20 22 5c 6e   ..;; .      "\n
3df0: 20 20 20 20 20 62 2d 72 65 63 6f 72 64 3a 20 20       b-record:  
3e00: 20 22 20 62 2d 72 65 63 6f 72 64 0a 09 3b 3b 20   " b-record..;; 
3e10: 09 20 20 20 20 20 20 22 5c 6e 20 20 20 20 20 61  .      "\n     a
3e20: 2d 77 61 69 74 6f 6e 73 3a 20 20 22 20 61 2d 77  -waitons:  " a-w
3e30: 61 69 74 6f 6e 73 0a 09 3b 3b 20 09 20 20 20 20  aitons..;; .    
3e40: 20 20 22 5c 6e 20 20 20 20 20 62 2d 77 61 69 74    "\n     b-wait
3e50: 6f 6e 73 3a 20 20 22 20 62 2d 77 61 69 74 6f 6e  ons:  " b-waiton
3e60: 73 0a 09 3b 3b 20 09 20 20 20 20 20 20 22 5c 6e  s..;; .      "\n
3e70: 20 20 20 20 20 61 2d 63 6f 6e 66 69 67 3a 20 20       a-config:  
3e80: 20 22 20 28 68 61 73 68 2d 74 61 62 6c 65 2d 3e   " (hash-table->
3e90: 61 6c 69 73 74 20 61 2d 63 6f 6e 66 69 67 29 0a  alist a-config).
3ea0: 09 3b 3b 20 09 20 20 20 20 20 20 22 5c 6e 20 20  .;; .      "\n  
3eb0: 20 20 20 62 2d 63 6f 6e 66 69 67 3a 20 20 20 22     b-config:   "
3ec0: 20 28 68 61 73 68 2d 74 61 62 6c 65 2d 3e 61 6c   (hash-table->al
3ed0: 69 73 74 20 62 2d 63 6f 6e 66 69 67 29 0a 09 3b  ist b-config)..;
3ee0: 3b 20 09 20 20 20 20 20 20 22 5c 6e 20 20 20 20  ; .      "\n    
3ef0: 20 61 2d 72 61 77 2d 70 72 69 3a 20 20 22 20 61   a-raw-pri:  " a
3f00: 2d 72 61 77 2d 70 72 69 0a 09 3b 3b 20 09 20 20  -raw-pri..;; .  
3f10: 20 20 20 20 22 5c 6e 20 20 20 20 20 62 2d 72 61      "\n     b-ra
3f20: 77 2d 70 72 69 3a 20 20 22 20 62 2d 72 61 77 2d  w-pri:  " b-raw-
3f30: 70 72 69 0a 09 3b 3b 20 09 20 20 20 20 20 20 22  pri..;; .      "
3f40: 5c 6e 20 20 20 20 20 61 2d 70 72 69 6f 72 69 74  \n     a-priorit
3f50: 79 3a 20 22 20 61 2d 70 72 69 6f 72 69 74 79 0a  y: " a-priority.
3f60: 09 3b 3b 20 09 20 20 20 20 20 20 22 5c 6e 20 20  .;; .      "\n  
3f70: 20 20 20 62 2d 70 72 69 6f 72 69 74 79 3a 20 22     b-priority: "
3f80: 20 62 2d 70 72 69 6f 72 69 74 79 29 0a 09 20 28   b-priority).. (
3f90: 74 65 73 74 73 3a 74 65 73 74 71 75 65 75 65 2d  tests:testqueue-
3fa0: 73 65 74 2d 70 72 69 6f 72 69 74 79 21 20 61 2d  set-priority! a-
3fb0: 72 65 63 6f 72 64 20 61 2d 70 72 69 6f 72 69 74  record a-priorit
3fc0: 79 29 0a 09 20 28 74 65 73 74 73 3a 74 65 73 74  y).. (tests:test
3fd0: 71 75 65 75 65 2d 73 65 74 2d 70 72 69 6f 72 69  queue-set-priori
3fe0: 74 79 21 20 62 2d 72 65 63 6f 72 64 20 62 2d 70  ty! b-record b-p
3ff0: 72 69 6f 72 69 74 79 29 0a 09 20 28 69 66 20 28  riority).. (if (
4000: 61 6e 64 20 61 2d 77 61 69 74 6f 6e 73 20 28 6d  and a-waitons (m
4010: 65 6d 62 65 72 20 28 74 65 73 74 73 3a 74 65 73  ember (tests:tes
4020: 74 71 75 65 75 65 2d 67 65 74 2d 74 65 73 74 6e  tqueue-get-testn
4030: 61 6d 65 20 62 2d 72 65 63 6f 72 64 29 20 61 2d  ame b-record) a-
4040: 77 61 69 74 6f 6e 73 29 29 0a 09 20 20 20 20 20  waitons))..     
4050: 23 66 20 3b 3b 20 63 61 6e 6e 6f 74 20 68 61 76  #f ;; cannot hav
4060: 65 20 61 20 77 68 69 63 68 20 69 73 20 77 61 69  e a which is wai
4070: 74 69 6e 67 20 6f 6e 20 62 20 68 61 70 70 65 6e  ting on b happen
4080: 69 6e 67 20 62 65 66 6f 72 65 20 62 0a 09 20 20  ing before b..  
4090: 20 20 20 28 69 66 20 28 61 6e 64 20 62 2d 77 61     (if (and b-wa
40a0: 69 74 6f 6e 73 20 28 6d 65 6d 62 65 72 20 28 74  itons (member (t
40b0: 65 73 74 73 3a 74 65 73 74 71 75 65 75 65 2d 67  ests:testqueue-g
40c0: 65 74 2d 74 65 73 74 6e 61 6d 65 20 61 2d 72 65  et-testname a-re
40d0: 63 6f 72 64 29 20 62 2d 77 61 69 74 6f 6e 73 29  cord) b-waitons)
40e0: 29 0a 09 09 20 23 74 20 3b 3b 20 74 68 69 73 20  )... #t ;; this 
40f0: 69 73 20 74 68 65 20 63 6f 72 72 65 63 74 20 6f  is the correct o
4100: 72 64 65 72 2c 20 62 20 69 73 20 77 61 69 74 69  rder, b is waiti
4110: 6e 67 20 6f 6e 20 61 20 61 6e 64 20 62 20 69 73  ng on a and b is
4120: 20 62 65 66 6f 72 65 20 61 0a 09 09 20 28 69 66   before a... (if
4130: 20 28 3e 20 61 2d 70 72 69 6f 72 69 74 79 20 62   (> a-priority b
4140: 2d 70 72 69 6f 72 69 74 79 29 0a 09 09 20 20 20  -priority)...   
4150: 20 20 23 74 20 3b 3b 20 69 66 20 61 20 69 73 20    #t ;; if a is 
4160: 61 20 68 69 67 68 65 72 20 70 72 69 6f 72 69 74  a higher priorit
4170: 79 20 74 68 61 6e 20 62 20 74 68 65 6e 20 77 65  y than b then we
4180: 20 61 72 65 20 67 6f 6f 64 20 74 6f 20 67 6f 0a   are good to go.
4190: 09 09 20 20 20 20 20 23 66 29 29 29 29 29 29 29  ..     #f)))))))
41a0: 29 0a 0a 0a 3b 3b 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  )...;;==========
41b0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
41c0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
41d0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
41e0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 3b 3b 20  ============.;; 
41f0: 74 65 73 74 20 73 74 65 70 73 0a 3b 3b 3d 3d 3d  test steps.;;===
4200: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
4210: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
4220: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
4230: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
4240: 3d 3d 3d 0a 0a 3b 3b 20 74 65 73 74 73 74 65 70  ===..;; teststep
4250: 2d 73 65 74 2d 73 74 61 74 75 73 21 20 75 73 65  -set-status! use
4260: 64 20 74 6f 20 62 65 20 68 65 72 65 0a 0a 28 64  d to be here..(d
4270: 65 66 69 6e 65 20 28 74 65 73 74 2d 67 65 74 2d  efine (test-get-
4280: 6b 69 6c 6c 2d 72 65 71 75 65 73 74 20 64 62 20  kill-request db 
4290: 72 75 6e 2d 69 64 20 74 65 73 74 2d 6e 61 6d 65  run-id test-name
42a0: 20 69 74 65 6d 64 61 74 29 0a 20 20 28 6c 65 74   itemdat).  (let
42b0: 2a 20 28 28 69 74 65 6d 2d 70 61 74 68 20 28 69  * ((item-path (i
42c0: 74 65 6d 2d 6c 69 73 74 2d 3e 70 61 74 68 20 69  tem-list->path i
42d0: 74 65 6d 64 61 74 29 29 0a 09 20 28 74 65 73 74  temdat)).. (test
42e0: 64 61 74 20 20 20 28 64 62 3a 67 65 74 2d 74 65  dat   (db:get-te
42f0: 73 74 2d 69 6e 66 6f 20 64 62 20 72 75 6e 2d 69  st-info db run-i
4300: 64 20 74 65 73 74 2d 6e 61 6d 65 20 69 74 65 6d  d test-name item
4310: 2d 70 61 74 68 29 29 29 0a 20 20 20 20 28 65 71  -path))).    (eq
4320: 75 61 6c 3f 20 28 74 65 73 74 3a 67 65 74 2d 73  ual? (test:get-s
4330: 74 61 74 65 20 74 65 73 74 64 61 74 29 20 22 4b  tate testdat) "K
4340: 49 4c 4c 52 45 51 22 29 29 29 0a 0a 28 64 65 66  ILLREQ")))..(def
4350: 69 6e 65 20 28 74 65 73 74 2d 73 65 74 2d 6d 65  ine (test-set-me
4360: 74 61 2d 69 6e 66 6f 20 64 62 20 72 75 6e 2d 69  ta-info db run-i
4370: 64 20 74 65 73 74 6e 61 6d 65 20 69 74 65 6d 64  d testname itemd
4380: 61 74 29 0a 20 20 28 6c 65 74 20 28 28 69 74 65  at).  (let ((ite
4390: 6d 2d 70 61 74 68 20 28 69 74 65 6d 2d 6c 69 73  m-path (item-lis
43a0: 74 2d 3e 70 61 74 68 20 69 74 65 6d 64 61 74 29  t->path itemdat)
43b0: 29 0a 09 28 63 70 75 6c 6f 61 64 20 20 28 67 65  )..(cpuload  (ge
43c0: 74 2d 63 70 75 2d 6c 6f 61 64 29 29 0a 09 28 68  t-cpu-load))..(h
43d0: 6f 73 74 6e 61 6d 65 20 28 67 65 74 2d 68 6f 73  ostname (get-hos
43e0: 74 2d 6e 61 6d 65 29 29 0a 09 28 64 69 73 6b 66  t-name))..(diskf
43f0: 72 65 65 20 28 67 65 74 2d 64 66 20 28 63 75 72  ree (get-df (cur
4400: 72 65 6e 74 2d 64 69 72 65 63 74 6f 72 79 29 29  rent-directory))
4410: 29 0a 09 28 75 6e 61 6d 65 20 20 20 20 28 67 65  )..(uname    (ge
4420: 74 2d 75 6e 61 6d 65 20 22 2d 73 72 76 70 69 6f  t-uname "-srvpio
4430: 22 29 29 0a 09 28 72 75 6e 70 61 74 68 20 20 28  "))..(runpath  (
4440: 63 75 72 72 65 6e 74 2d 64 69 72 65 63 74 6f 72  current-director
4450: 79 29 29 29 0a 20 20 20 20 28 73 71 6c 69 74 65  y))).    (sqlite
4460: 33 3a 65 78 65 63 75 74 65 20 64 62 20 22 55 50  3:execute db "UP
4470: 44 41 54 45 20 74 65 73 74 73 20 53 45 54 20 68  DATE tests SET h
4480: 6f 73 74 3d 3f 2c 63 70 75 6c 6f 61 64 3d 3f 2c  ost=?,cpuload=?,
4490: 64 69 73 6b 66 72 65 65 3d 3f 2c 75 6e 61 6d 65  diskfree=?,uname
44a0: 3d 3f 2c 72 75 6e 64 69 72 3d 3f 20 57 48 45 52  =?,rundir=? WHER
44b0: 45 20 72 75 6e 5f 69 64 3d 3f 20 41 4e 44 20 74  E run_id=? AND t
44c0: 65 73 74 6e 61 6d 65 3d 3f 20 41 4e 44 20 69 74  estname=? AND it
44d0: 65 6d 5f 70 61 74 68 3d 3f 3b 22 0a 09 09 20 20  em_path=?;"...  
44e0: 68 6f 73 74 6e 61 6d 65 0a 09 09 20 20 63 70 75  hostname...  cpu
44f0: 6c 6f 61 64 0a 09 09 20 20 64 69 73 6b 66 72 65  load...  diskfre
4500: 65 0a 09 09 20 20 75 6e 61 6d 65 0a 09 09 20 20  e...  uname...  
4510: 72 75 6e 70 61 74 68 0a 09 09 20 20 72 75 6e 2d  runpath...  run-
4520: 69 64 0a 09 09 20 20 74 65 73 74 6e 61 6d 65 0a  id...  testname.
4530: 09 09 20 20 69 74 65 6d 2d 70 61 74 68 29 29 29  ..  item-path)))
4540: 0a 0a 3b 3b 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ..;;============
4550: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
4560: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
4570: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
4580: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 3b 3b 20 41 20  ==========.;; A 
4590: 52 20 43 20 48 20 49 20 56 20 49 20 4e 20 47 0a  R C H I V I N G.
45a0: 3b 3b 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ;;==============
45b0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
45c0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
45d0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
45e0: 3d 3d 3d 3d 3d 3d 3d 3d 0a 0a 28 64 65 66 69 6e  ========..(defin
45f0: 65 20 28 74 65 73 74 3a 61 72 63 68 69 76 65 20  e (test:archive 
4600: 64 62 20 74 65 73 74 2d 69 64 29 0a 20 20 23 66  db test-id).  #f
4610: 29 0a 0a 28 64 65 66 69 6e 65 20 28 74 65 73 74  )..(define (test
4620: 3a 61 72 63 68 69 76 65 2d 74 65 73 74 73 20 64  :archive-tests d
4630: 62 20 6b 65 79 6e 61 6d 65 73 20 74 61 72 67 65  b keynames targe
4640: 74 29 0a 20 20 23 66 29 0a                       t).  #f).