Modified api.scm
from [ef0a5aac98]
to [5db5b30c9b].
︙ | | |
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
|
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
|
-
+
+
|
;; TESTS
test-set-state-status-by-id
delete-test-records
delete-old-deleted-test-records
test-set-status-state
test-set-top-process-pid
roll-up-pass-fail-counts
update-fail-pass-counts
update-pass-fail-counts
top-test-set-per-pf-counts ;; (db:top-test-set-per-pf-counts (db:get-db *db* 5) 5 "runfirst")
;; RUNS
register-run
set-tests-state-status
delete-run
lock/unlock-run
update-run-event_time
|
︙ | | |
131
132
133
134
135
136
137
138
139
140
141
142
143
144
|
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
|
+
|
((test-set-state-status-by-id) (apply db:test-set-state-status-by-id dbstruct params))
((delete-test-records) (apply db:delete-test-records dbstruct params))
((delete-old-deleted-test-records) (apply db:delete-old-deleted-test-records dbstruct params))
((test-set-status-state) (apply db:test-set-status-state dbstruct params))
((test-set-top-process-pid) (apply db:test-set-top-process-pid dbstruct params))
((roll-up-pass-fail-counts) (apply db:roll-up-pass-fail-counts dbstruct params))
((update-pass-fail-counts) (apply db:general-call dbstruct 'update-pass-fail-counts params))
((top-test-set-per-pf-counts) (apply db:top-test-set-per-pf-counts dbstruct params))
((test-set-archive-block-id) (apply db:test-set-archive-block-id dbstruct params))
;; RUNS
((register-run) (apply db:register-run dbstruct params))
((set-tests-state-status) (apply db:set-tests-state-status dbstruct params))
((delete-run) (apply db:delete-run dbstruct params))
((lock/unlock-run) (apply db:lock/unlock-run dbstruct params))
|
︙ | | |
Modified archive.scm
from [1e200bee3b]
to [fc2c9e1ed0].
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
-
+
|
;; Copyright 2006-2014, Matthew Welland.
;;
;; This program is made available under the GNU GPL version 2.0 or
;; greater. See the accompanying file COPYING for details.
;;
;; This program is distributed WITHOUT ANY WARRANTY; without even the
;; implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
;; PURPOSE.
;; strftime('%m/%d/%Y %H:%M:%S','now','localtime')
(use sqlite3 srfi-1 posix regex regex-case srfi-69 dot-locking format md5 message-digest)
(use sqlite3 srfi-1 posix regex regex-case srfi-69 dot-locking format md5 message-digest srfi-18)
(import (prefix sqlite3 sqlite3:))
(declare (unit archive))
(declare (uses db))
(declare (uses common))
(include "common_records.scm")
|
︙ | | |
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
|
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
|
-
+
|
;; archive - run bup
;;
;; 1. create the bup dir if not exists
;; 2. start the du of each directory
;; 3. gen index
;; 4. save
;;
(define (archive:run-bup archive-command run-id run-name tests)
(define (archive:run-bup archive-command run-id run-name tests rp-mutex bup-mutex)
;; move the getting of archive space down into the below block so that a single run can
;; allocate as needed should a disk fill up
;;
(let* ((min-space (string->number (or (configf:lookup *configdat* "archive" "minspace") "1000")))
(archive-info (archive:allocate-new-archive-block *toppath* (common:get-testsuite-name) min-space))
(archive-dir (if archive-info (cdr archive-info) #f))
(archive-id (if archive-info (car archive-info) -1))
|
︙ | | |
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
|
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
|
+
-
+
+
+
+
+
-
-
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
|
(target (string-intersperse (map cadr (rmt:get-key-val-pairs run-id)) "/"))
(toplevel/children (and (db:test-get-is-toplevel test-dat)
(> (rmt:test-toplevel-num-items run-id test-name) 0)))
(test-partial-path (conc target "/" run-name "/" (db:test-make-full-name test-name item-path)))
;; note the trailing slash to get the dir inspite of it being a link
(test-path (conc linktree "/" test-partial-path))
(mutex-lock! rp-mutex)
(test-physical-path (if (file-exists? test-path) (read-symbolic-link test-path #t) #f))
(test-physical-path (if (file-exists? test-path)
(common:real-path test-path)
#f))
(mutex-unlock! rp-mutex)
(partial-path-index (if test-physical-path (substring-index test-partial-path test-physical-path) #f))
(test-base (if (and partial-path-index
test-physical-path )
(substring test-physical-path
0
partial-path-index)
#f)))
(cond
(if (or toplevel/children
(not (file-exists? test-path)))
(toplevel/children
(debug:print 0 "WARNING: cannot archive " test-name " with id " test-id " as it is a toplevel test with children"))
((not (file-exists? test-path))
#f
(begin
(debug:print 0
"From test-dat=" test-dat " derived the following:\n"
"test-partial-path = " test-partial-path "\n"
"test-path = " test-path "\n"
"test-physical-path = " test-physical-path "\n"
"partial-path-index = " partial-path-index "\n"
"test-base = " test-base)
(hash-table-set! disk-groups test-base (cons test-physical-path (hash-table-ref/default disk-groups test-base '())))
(hash-table-set! test-groups test-base (cons test-dat (hash-table-ref/default test-groups test-base '())))
test-path))))
(debug:print 0 "WARNING: Cannot archive " test-name "/" item-path " as path " test-path " does not exist"))
(else
(debug:print 0
"From test-dat=" test-dat " derived the following:\n"
"test-partial-path = " test-partial-path "\n"
"test-path = " test-path "\n"
"test-physical-path = " test-physical-path "\n"
"partial-path-index = " partial-path-index "\n"
"test-base = " test-base)
(hash-table-set! disk-groups test-base (cons test-physical-path (hash-table-ref/default disk-groups test-base '())))
(hash-table-set! test-groups test-base (cons test-dat (hash-table-ref/default test-groups test-base '())))
test-path))))
tests)
;; for each disk-group
(for-each
(lambda (disk-group)
(debug:print 0 "Processing disk-group " disk-group)
(let* ((test-paths (hash-table-ref disk-groups disk-group))
;; ((string-intersperse (map cadr (rmt:get-key-val-pairs 1)) "-")
|
︙ | | |
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
|
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
|
+
-
+
+
+
+
+
-
+
-
+
+
-
-
+
+
+
+
+
|
(print-prefix #f)) ;; "Running: ")) ;; change to #f to turn off printing
(if (not (file-exists? archive-dir))
(create-directory archive-dir #t))
(if (not (file-exists? (conc archive-dir "/HEAD")))
(begin
;; replace this with jobrunner stuff enventually
(debug:print-info 0 "Init bup in " archive-dir)
;; (mutex-lock! bup-mutex)
(run-n-wait bup-exe params: bup-init-params print-cmd: print-prefix)))
(run-n-wait bup-exe params: bup-init-params print-cmd: print-prefix)
;; (mutex-unlock! bup-mutex)
))
(debug:print-info 0 "Indexing data to be archived")
;; (mutex-lock! bup-mutex)
(run-n-wait bup-exe params: bup-index-params print-cmd: print-prefix)
(debug:print-info 0 "Archiving data with bup")
(run-n-wait bup-exe params: bup-save-params print-cmd: print-prefix)
;; (mutex-unlock! bup-mutex)
(for-each
(lambda (test-dat)
(let ((test-id (db:test-get-id test-dat))
(run-id (db:test-get-run_id test-dat)))
(rmt:test-set-archive-block-id run-id test-id archive-id)
(if (member archive-command '("save-remove"))
(runs:remove-test-directory test-dat 'archive-remove))))
(hash-table-ref test-groups disk-group))))
(hash-table-keys disk-groups))
#t))
(define (archive:bup-restore archive-command run-id run-name tests) ;; move the getting of archive space down into the below block so that a single run can
(define (archive:bup-restore archive-command run-id run-name tests rp-mutex bup-mutex) ;; move the getting of archive space down into the below block so that a single run can
;; allocate as needed should a disk fill up
;;
(let* ((bup-exe (or (configf:lookup *configdat* "archive" "bup") "bup"))
(linktree (configf:lookup *configdat* "setup" "linktree")))
;; from the test info bin the path to the test by stem
;;
(for-each
(lambda (test-dat)
;; When restoring test-dat will initially contain an old and invalid path to the test
(let* ((best-disk (get-best-disk *configdat*))
(let* ((best-disk (get-best-disk *configdat* #f)) ;; BUG: get the testconfig and use it here. Otherwise data pulled out of archive could end up on the wrong kind of disk.
(item-path (db:test-get-item-path test-dat))
(test-name (db:test-get-testname test-dat))
(test-id (db:test-get-id test-dat))
(run-id (db:test-get-run_id test-dat))
(keyvals (rmt:get-key-val-pairs run-id))
(target (string-intersperse (map cadr keyvals) "/"))
(toplevel/children (and (db:test-get-is-toplevel test-dat)
(> (rmt:test-toplevel-num-items run-id test-name) 0)))
(test-partial-path (conc target "/" run-name "/" (db:test-make-full-name test-name item-path)))
;; note the trailing slash to get the dir inspite of it being a link
(test-path (conc linktree "/" test-partial-path))
;; if the old path was not deleted then prev-test-physical-path will end up pointing to a real directory
(mutex-lock! rp-mutex)
(prev-test-physical-path (if (file-exists? test-path) (read-symbolic-link test-path #t) #f))
(prev-test-physical-path (if (file-exists? test-path)
;; (read-symbolic-link test-path #t)
(common:real-path test-path)
#f))
(mutex-unlock! rp-mutex)
(new-test-physical-path (conc best-disk "/" test-partial-path))
(archive-block-id (db:test-get-archived test-dat))
(archive-block-info (rmt:test-get-archive-block-info archive-block-id))
(archive-path (if (vector? archive-block-info)
(vector-ref archive-block-info 2) ;; look in db.scm for test-get-archive-block-info for the vector record info
#f)) ;; no archive found?
(archive-internal-path (conc (common:get-testsuite-name) "-" run-id "/latest/" test-partial-path)))
|
︙ | | |
264
265
266
267
268
269
270
271
272
273
274
275
|
279
280
281
282
283
284
285
286
287
288
289
290
291
292
|
+
+
|
(db:test-get-rundir new-test-dat)
(begin
(debug:print 0 "ERROR: unable to get data for run-id=" run-id ", test-id=" test-id)
(exit 1))))
;; new-test-path won't work - must use best-disk instead? Nope, new-test-path but tack on /..
(bup-restore-params (list "-d" archive-path "restore" "-C" (conc new-test-path "/..") archive-internal-path)))
(debug:print-info 0 "Restoring archived data to " new-test-physical-path " from archive in " archive-path " ... " archive-internal-path)
;; (mutex-lock! bup-mutex)
(run-n-wait bup-exe params: bup-restore-params print-cmd: #f)
;; (mutex-unlock! bup-mutex)
(mt:test-set-state-status-by-id run-id test-id "COMPLETED" #f #f)))
(debug:print 0 "ERROR: No archive path in the record for run-id=" run-id " test-id=" test-id))))
(filter vector? tests))))
|
Modified common.scm
from [62a7dd9755]
to [ed7431fe23].
︙ | | |
585
586
587
588
589
590
591
592
593
594
595
596
597
598
|
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
|
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
|
(define (get-uname . params)
(let* ((uname-res (cmd-run->list (conc "uname " (if (null? params) "-a" (car params)))))
(uname #f))
(if (null? (car uname-res))
"unknown"
(caar uname-res))))
;; for reasons I don't understand multiple calls to real-path in parallel threads
;; must be protected by mutexes
;;
(define (common:real-path inpath)
;; (cmd-run-with-stderr->list "readlink" "-f" inpath)) ;; cmd . params)
;; (let-values
;; (((inp oup pid) (process "readlink" (list "-f" inpath))))
;; (with-input-from-port inp
;; (let loop ((inl (read-line))
;; (res #f))
;; (print "inl=" inl)
;; (if (eof-object? inl)
;; (begin
;; (close-input-port inp)
;; (close-output-port oup)
;; ;; (process-wait pid)
;; res)
;; (loop (read-line) inl))))))
(with-input-from-pipe (conc "readlink -f " inpath) read-line))
;;======================================================================
;; D I S K S P A C E
;;======================================================================
(define (common:get-disk-space-used fpath)
(with-input-from-pipe (conc "/usr/bin/du -s " fpath) read))
|
︙ | | |
Modified datashare-testing/.sd.config
from [3db28d187c]
to [567a2bce44].
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
-
+
|
# Read in the users vars first (so the offical data cannot be overridden
[include ~/.datashare.config]
# Read in local overrides
[include datashare.config]
# Replace [storage] with settings entry - more secure
[settings]
storage /tmp/#{getenv USER}/datashare/disk1 \
/tmp/#{getenv USER}/datashare/disk2
basepath #{getenv BASEPATH}
basepath #{scheme (or (getenv "BASEPATH") "/tmp/#{getenv USER}")}
[areas]
synthesis asic/synthesis
verilog asic/verilog
customlibs custom/oalibs
megatest tools/megatest
|
︙ | | |
Modified datashare.scm
from [2abd8aec1c]
to [578f007a04].
︙ | | |
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
|
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
|
-
+
|
(iup:button "Pushme"
#:expand "YES"
))))
(define (datashare:gui configdat)
(iup:show
(iup:dialog
#:title (conc "DataShare dashboard " (current-user-name) ":" (current-directory))
#:title (conc "DataShare dashboard " (current-user-name) ":" (current-directory))
#:menu (datashare:main-menu)
(let* ((tabs (iup:tabs
#:tabchangepos-cb (lambda (obj curr prev)
(set! *datashare:current-tab-number* curr))
(datashare:publish-view configdat)
(datashare:get-view configdat)
(datashare:manage-view configdat)
|
︙ | | |
Modified db.scm
from [ed28b97a1a]
to [5b045adee9].
︙ | | |
1336
1337
1338
1339
1340
1341
1342
1343
1344
1345
1346
1347
1348
1349
1350
1351
1352
1353
1354
|
1336
1337
1338
1339
1340
1341
1342
1343
1344
1345
1346
1347
1348
1349
1350
1351
1352
1353
1354
|
-
+
-
-
+
+
|
;; Now do rollups for the toplevel tests
;;
(db:delay-if-busy dbdat)
(for-each
(lambda (toptest)
(let ((test-name (list-ref toptest 3)))
;; (run-id (list-ref toptest 5)))
(db:top-test-set-per-pf-counts dbdat run-id test-name)))
(db:top-test-set-per-pf-counts dbstruct run-id test-name)))
toplevels)))
(define (db:top-test-set-per-pf-counts dbdat run-id test-name)
(db:general-call dbdat 'top-test-set-per-pf-counts (list test-name test-name test-name test-name test-name test-name test-name test-name test-name test-name test-name test-name test-name test-name test-name test-name test-name)))
(define (db:top-test-set-per-pf-counts dbstruct run-id test-name)
(db:general-call (db:get-db dbstruct run-id) 'top-test-set-per-pf-counts (list test-name test-name test-name test-name test-name test-name test-name test-name test-name test-name test-name test-name test-name test-name test-name test-name test-name)))
;; Clean out old junk and vacuum the database
;;
;; Ultimately do something like this:
;;
;; 1. Look at test records either deleted or part of deleted run:
|
︙ | | |
2154
2155
2156
2157
2158
2159
2160
2161
2162
2163
2164
2165
2166
2167
2168
|
2154
2155
2156
2157
2158
2159
2160
2161
2162
2163
2164
2165
2166
2167
|
-
|
(vector-ref inrec 2) ;; testname
(vector-ref inrec 4) ;; state
(vector-ref inrec 5) ;; status
-1 "" -1 -1 "" "-"
(vector-ref inrec 3) ;; item-path
-1 "-" "-"))
(define (db:get-tests-for-run-state-status dbstruct run-id testpatt)
(let* ((res '())
(tests-match-qry (tests:match->sqlqry testpatt))
(qry (conc "SELECT id,testname,item_path,state,status FROM tests WHERE run_id=? "
(if tests-match-qry (conc " AND (" tests-match-qry ") ") ""))))
(debug:print-info 8 "db:get-tests-for-run qry=" qry)
(db:with-db dbstruct run-id #f
|
︙ | | |
2241
2242
2243
2244
2245
2246
2247
2248
2249
2250
2251
2252
2253
2254
2255
2256
2257
2258
2259
2260
2261
2262
2263
2264
2265
2266
2267
2268
2269
2270
2271
|
2240
2241
2242
2243
2244
2245
2246
2247
2248
2249
2250
2251
2252
2253
2254
2255
2256
2257
2258
2259
2260
2261
2262
2263
2264
2265
2266
2267
2268
2269
2270
2271
2272
2273
|
-
-
-
-
+
+
+
+
+
+
+
-
-
+
+
|
(sqlite3:execute db "DELETE FROM tests WHERE state='DELETED' AND event_time<?;" targtime))))
run-ids)))
;; set tests with state currstate and status currstatus to newstate and newstatus
;; use currstate = #f and or currstatus = #f to apply to any state or status respectively
;; WARNING: SQL injection risk. NB// See new but not yet used "faster" version below
;;
;; AND NOT (item_path='' AND testname in (SELECT DISTINCT testname FROM tests WHERE testname=? AND item_path != ''));")))
;;(debug:print 0 "QRY: " qry)
;; (db:delay-if-busy)
;; AND NOT (item_path='' AND testname in (SELECT DISTINCT testname FROM tests WHERE testname=? AND item_path != ''));")))
;; (debug:print 0 "QRY: " qry)
;; (db:delay-if-busy)
;;
;; NB// This call only operates on toplevel tests. Consider replacing it with more general call
;;
(define (db:set-tests-state-status dbstruct run-id testnames currstate currstatus newstate newstatus)
(for-each (lambda (testname)
(let ((qry (conc "UPDATE tests SET state=?,status=? WHERE "
(if currstate (conc "state='" currstate "' AND ") "")
(if currstatus (conc "status='" currstatus "' AND ") "")
" run_id=? AND testname LIKE ?;")))
(db:with-db
dbstruct
run-id
#t
(lambda (db)
(let ((test-id (db:get-test-id dbstruct run-id testname "")))
(sqlite3:execute db qry newstate newstatus run-id testname)
(mt:process-triggers run-id test-id newstate newstatus)
(sqlite3:execute db qry newstate newstatus run-id testname)
(if test-id (mt:process-triggers run-id test-id newstate newstatus)))
))))
testnames))
;; speed up for common cases with a little logic
;; NB// Ultimately this will be deprecated in deference to mt:test-set-state-status-by-id
;;
(define (db:test-set-state-status-by-id dbstruct run-id test-id newstate newstatus newcomment)
|
︙ | | |
2839
2840
2841
2842
2843
2844
2845
2846
2847
2848
2849
2850
2851
2852
2853
|
2841
2842
2843
2844
2845
2846
2847
2848
2849
2850
2851
2852
2853
2854
2855
|
-
+
|
;; call with state = #f to roll up with out accounting for state/status of this item
;;
(define (db:roll-up-pass-fail-counts dbstruct run-id test-name item-path state status)
(if (not (equal? item-path ""))
(let ((dbdat (db:get-db dbstruct run-id)))
;; (db (db:dbdat-get-db dbdat)))
(db:general-call dbdat 'update-pass-fail-counts (list test-name test-name test-name))
(db:top-test-set-per-pf-counts dbdat run-id test-name))))
(db:top-test-set-per-pf-counts dbstruct run-id test-name))))
;; (case (string->symbol status)
;; ((RUNNING) (db:general-call dbdat 'top-test-set-running (list test-name)))
;; ((LAUNCHED) (db:general-call dbdat 'top-test-set (list "LAUNCHED" test-name)))
;; ((ABORT INCOMPLETE) (db:general-call dbdat 'top-test-set (list status test-name))))
;; (if (or (not state)
|
︙ | | |
2939
2940
2941
2942
2943
2944
2945
2946
2947
2948
2949
2950
2951
2952
2953
|
2941
2942
2943
2944
2945
2946
2947
2948
2949
2950
2951
2952
2953
2954
2955
|
-
+
|
;;
'(top-test-set-per-pf-counts "UPDATE tests
SET state=CASE
WHEN (SELECT count(id) FROM tests
WHERE testname=?
AND item_path != ''
AND status IN ('INCOMPLETE')
AND state in ('RUNNING','NOT_STARTED','LAUNCHED','REMOTEHOSTSTART')) > 0 THEN 'INCOMPLETE'
AND state in ('RUNNING','NOT_STARTED','LAUNCHED','REMOTEHOSTSTART')) > 0 THEN 'RUNNING'
WHEN (SELECT count(id) FROM tests
WHERE testname=?
AND item_path != ''
AND status NOT IN ('TEN_STRIKES','BLOCKED')
AND state in ('RUNNING','NOT_STARTED','LAUNCHED','REMOTEHOSTSTART')) > 0 THEN 'RUNNING'
WHEN (SELECT count(id) FROM tests
WHERE testname=?
|
︙ | | |
2964
2965
2966
2967
2968
2969
2970
2971
2972
2973
2974
2975
2976
2977
2978
|
2966
2967
2968
2969
2970
2971
2972
2973
2974
2975
2976
2977
2978
2979
2980
|
-
+
|
WHERE testname=?
AND item_path != ''
AND state IN ('BLOCKED','INCOMPLETE')) > 0 THEN 'FAIL'
WHEN (SELECT count(id) FROM tests
WHERE testname=?
AND item_path != ''
AND state NOT IN ('DELETED')
AND status = 'ABORT') > 0 THEN 'ABORT'
AND status IN ('INCOMPLETE','ABORT')) > 0 THEN 'ABORT'
WHEN (SELECT count(id) FROM tests
WHERE testname=?
AND item_path != ''
AND state NOT IN ('DELETED')
AND status = 'AUTO') > 0 THEN 'AUTO'
WHEN (SELECT count(id) FROM tests
WHERE testname=?
|
︙ | | |
3262
3263
3264
3265
3266
3267
3268
3269
3270
3271
3272
3273
3274
3275
3276
3277
3278
3279
3280
3281
3282
3283
3284
3285
3286
3287
|
3264
3265
3266
3267
3268
3269
3270
3271
3272
3273
3274
3275
3276
3277
3278
3279
3280
3281
3282
3283
3284
3285
3286
3287
3288
3289
3290
3291
3292
3293
3294
3295
3296
3297
3298
3299
3300
3301
3302
3303
3304
3305
3306
3307
3308
3309
3310
3311
3312
3313
3314
3315
3316
3317
3318
3319
3320
3321
3322
3323
3324
3325
3326
|
+
+
+
+
+
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
+
|
;; M I S C M A N A G E M E N T I T E M S
;;======================================================================
;; A routine to map itempaths using a itemmap
(define (db:compare-itempaths patha pathb itemmap)
(debug:print-info 6 "ITEMMAP is " itemmap)
(if itemmap
(let ((path-b-mapped (db:convert-test-itempath pathb itemmap)))
(debug:print-info 6 "ITEMMAP is " itemmap ", path: " pathb ", mapped path: " path-b-mapped)
(equal? patha pathb))
(equal? patha pathb)))
(let* ((mapparts (string-split itemmap))
(pattern (car mapparts))
(replacement (if (> (length mapparts) 1) (cadr mapparts) "")))
(if replacement
(equal? (string-substitute pattern replacement patha)
(string-substitute pattern replacement pathb))
(equal? (string-substitute pattern "" patha)
(string-substitute pattern "" pathb))))
(equal? patha pathb)))
;; (let* ((mapparts (string-split itemmap))
;; (pattern (car mapparts))
;; (replacement (if (> (length mapparts) 1) (cadr mapparts) "")))
;; (if replacement
;; (equal? (string-substitute pattern replacement patha)
;; (string-substitute pattern replacement pathb))
;; (equal? (string-substitute pattern "" patha)
;; (string-substitute pattern "" pathb))))
;; A routine to convert test/itempath using a itemmap
(define (db:convert-test-itempath path-in itemmap)
(debug:print-info 6 "ITEMMAP is " itemmap)
(let* ((path-parts (string-split path-in "/"))
(test-name (if (null? path-parts) "" (car path-parts)))
(item-path (string-intersperse (if (null? path-parts) '() (cdr path-parts)) "/")))
(conc test-name "/"
(db:multi-pattern-apply item-path itemmap))))
;; patterns are:
;; "rx1" "replacement1"\n
;; "rx2" "replacement2"
;; etc.
;;
(define (db:multi-pattern-apply item-path itemmap)
(let ((all-patts (string-split itemmap "\n")))
(if (null? all-patts)
item-path
(let loop ((hed (car all-patts))
(tal (cdr all-patts))
(res item-path))
(let* ((parts (string-split hed))
(patt (car parts))
(repl (if (> (length parts) 1)(cadr parts) ""))
(newr (if (and patt repl)
(string-substitute patt repl res)
(begin
(debug:print 0 "WARNING: itemmap has problem \"" itemmap "\", patt: " patt ", repl: " repl)
res))))
(if (null? tal)
newr
(loop (car tal)(cdr tal) newr)))))))
;; the new prereqs calculation, looks also at itempath if specified
;; all prereqs must be met:
;; all prereqs must be met
;; if prereq test with itempath='' is COMPLETED and PASS, WARN, CHECK, or WAIVED then prereq is met
;; if prereq test with itempath=ref-item-path and COMPLETED with PASS, WARN, CHECK, or WAIVED then prereq is met
;;
;; Note: mode 'normal means that tests must be COMPLETED and ok (i.e. PASS, WARN, CHECK, SKIP or WAIVED)
;; mode 'toplevel means that tests must be COMPLETED only
;; mode 'itemmatch or 'itemwait means that tests items must be COMPLETED and (PASS|WARN|WAIVED|CHECK) [[ NB// NOT IMPLEMENTED YET ]]
;;
|
︙ | | |
Modified docs/manual/howto.txt
from [b40c89ffa6]
to [8d66a8b9b7].
︙ | | |
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
|
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
|
-
+
|
launcher bsub
# if defined and not "no" flexi-launcher will bypass launcher unless there is no
# match.
flexi-launcher yes
------------------------
Tricks
------
======
This section is a compendium of a various useful tricks for debugging,
configuring and generally getting the most out of Megatest.
Limiting your running jobs
--------------------------
|
︙ | | |
Modified docs/manual/megatest_manual.html
from [144ffa8085]
to [25fe0b3f9e].
︙ | | |
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
|
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
|
-
-
+
-
-
-
|
# if defined and not "no" flexi-launcher will bypass launcher unless there is no
# match.
flexi-launcher yes</pre>
</div></div>
</div>
</div>
</div>
<div class="sect1">
<h2 id="_tricks">Tricks</h2>
<h1 id="_tricks">Tricks</h1>
<div class="sectionbody">
<div class="paragraph"><p>This section is a compendium of a various useful tricks for debugging,
configuring and generally getting the most out of Megatest.</p></div>
</div>
</div>
<div class="sect1">
<h2 id="_limiting_your_running_jobs">Limiting your running jobs</h2>
<div class="sectionbody">
<div class="paragraph"><p>The following example will limit a test in the jobgroup "group1" to no more than 10 tests simultaneously.</p></div>
<div class="paragraph"><p>In your testconfig:</p></div>
<div class="listingblock">
<div class="content monospaced">
|
︙ | | |
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
|
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
|
+
+
+
+
+
+
+
+
+
+
|
<div class="sect3">
<h4 id="_launchers">launchers</h4>
<div class="listingblock">
<div class="title">test/itempath ⇒ host-type</div>
<div class="content monospaced">
<pre>runfirst/sum% remote</pre>
</div></div>
</div>
<div class="sect3">
<h4 id="_miscellaneous_setup_items">Miscellaneous Setup Items</h4>
<div class="paragraph"><p>Attempt to rerun tests in "STUCK/DEAD", "n/a", "ZERO_ITEMS" states.</p></div>
<div class="listingblock">
<div class="title">In megatest.config</div>
<div class="content monospaced">
<pre>[setup]
reruns 5</pre>
</div></div>
</div>
</div>
</div>
</div>
<div class="sect1">
<h2 id="_the_testconfig_file">The testconfig File</h2>
<div class="sectionbody">
|
︙ | | |
1280
1281
1282
1283
1284
1285
1286
1287
1288
1289
1290
1291
1292
1293
|
1286
1287
1288
1289
1290
1291
1292
1293
1294
1295
1296
1297
1298
1299
1300
1301
1302
1303
1304
1305
|
+
+
+
+
+
+
|
<h4 id="_skip_if_test_ran_more_recently_than_specified_time">Skip if test ran more recently than specified time</h4>
<div class="listingblock">
<div class="title">Skip if this test has been run in the past fifteen minutes and 15 seconds.</div>
<div class="content monospaced">
<pre>[skip]
rundelay 15m 15s</pre>
</div></div>
</div>
<div class="sect3">
<h4 id="_disks">Disks</h4>
<div class="paragraph"><p>A disks section in testconfig will override the disks section in
megatest.config. This can be used to allocate disks on a per-test or per item
basis.</p></div>
</div>
<div class="sect3">
<h4 id="_controlled_waiver_propagation">Controlled waiver propagation</h4>
<div class="paragraph"><p>If test is FAIL and previous test in run with same MT_TARGET is WAIVED then apply the following rules from the testconfig:
If a waiver check is specified in the testconfig apply the check and if it passes then set this FAIL to WAIVED</p></div>
<div class="paragraph"><p>Waiver check has two parts, 1) a list of waiver, rulename, filepatterns and 2) the rulename script spec (note that "diff" and "logpro" are predefined)</p></div>
<div class="listingblock">
|
︙ | | |
1308
1309
1310
1311
1312
1313
1314
1315
1316
1317
1318
1319
1320
1321
|
1320
1321
1322
1323
1324
1325
1326
1327
1328
1329
1330
1331
1332
1333
1334
1335
1336
1337
1338
1339
1340
1341
1342
1343
1344
|
+
+
+
+
+
+
+
+
+
+
+
|
# This builtin rule is applied if a <waivername>.logpro file exists
# logpro diff %file1% %file2% | logpro %waivername%.logpro %waivername%.html</pre>
</div></div>
</div>
</div>
<div class="sect2">
<h3 id="_ezsteps">Ezsteps</h3>
<div class="listingblock">
<div class="title">Example ezsteps with logpro rules</div>
<div class="content monospaced">
<pre>[ezsteps]
lookittmp ls /tmp
[logpro]
lookittmp ;; Note: config file format supports multi-line entries where leading whitespace is removed from each line
;; a blank line indicates the end of the block of text
(expect:required in "LogFileBody" > 0 "A file name that should never exist!" #/This is a awfully stupid file name that should never be found in the temp dir/)</pre>
</div></div>
<div class="paragraph"><p>To transfer the environment to the next step you can do the following:</p></div>
<div class="listingblock">
<div class="content monospaced">
<pre>$MT_MEGATEST -env2file .ezsteps/${stepname}</pre>
</div></div>
</div>
<div class="sect2">
|
︙ | | |
1553
1554
1555
1556
1557
1558
1559
1560
1561
1562
1563
1564
|
1576
1577
1578
1579
1580
1581
1582
1583
1584
1585
1586
1587
|
-
+
|
</div>
</div>
<div id="footnotes"><hr></div>
<div id="footer">
<div id="footer-text">
Version 1.0<br>
Last updated
2015-07-07 22:48:26 MST
2015-08-24 19:48:43 MST
</div>
</div>
</body>
</html>
|
Modified docs/manual/reference.txt
from [b28fdfce18]
to [2b7b55d46c].
︙ | | |
44
45
46
47
48
49
50
51
52
53
54
55
56
57
|
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
|
+
+
+
+
+
+
+
+
+
+
+
|
launchers
^^^^^^^^^
.test/itempath => host-type
------------
runfirst/sum% remote
------------
Miscellaneous Setup Items
^^^^^^^^^^^^^^^^^^^^^^^^^
Attempt to rerun tests in "STUCK/DEAD", "n/a", "ZERO_ITEMS" states.
.In megatest.config
------------------
[setup]
reruns 5
------------------
The testconfig File
-------------------
Setup section
~~~~~~~~~~~~~
|
︙ | | |
193
194
195
196
197
198
199
200
201
202
203
204
205
206
|
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
|
+
+
+
+
+
+
+
|
.Skip if this test has been run in the past fifteen minutes and 15 seconds.
-----------------
[skip]
rundelay 15m 15s
-----------------
Disks
^^^^^
A disks section in testconfig will override the disks section in
megatest.config. This can be used to allocate disks on a per-test or per item
basis.
Controlled waiver propagation
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
If test is FAIL and previous test in run with same MT_TARGET is WAIVED then apply the following rules from the testconfig:
If a waiver check is specified in the testconfig apply the check and if it passes then set this FAIL to WAIVED
Waiver check has two parts, 1) a list of waiver, rulename, filepatterns and 2) the rulename script spec (note that "diff" and "logpro" are predefined)
|
︙ | | |
221
222
223
224
225
226
227
228
229
230
231
232
233
234
|
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
|
+
+
+
+
+
+
+
+
+
+
+
+
|
# This builtin rule is applied if a <waivername>.logpro file exists
# logpro diff %file1% %file2% | logpro %waivername%.logpro %waivername%.html
-----------------
Ezsteps
~~~~~~~
.Example ezsteps with logpro rules
-----------------
[ezsteps]
lookittmp ls /tmp
[logpro]
lookittmp ;; Note: config file format supports multi-line entries where leading whitespace is removed from each line
;; a blank line indicates the end of the block of text
(expect:required in "LogFileBody" > 0 "A file name that should never exist!" #/This is a awfully stupid file name that should never be found in the temp dir/)
-----------------
To transfer the environment to the next step you can do the following:
----------------------------
$MT_MEGATEST -env2file .ezsteps/${stepname}
----------------------------
|
︙ | | |
Modified launch.scm
from [704d9ac900]
to [b358323d9c].
︙ | | |
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
|
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
|
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
|
(define (launch:get-cmdinfo-assoc-list #!key (encoded-cmd #f))
(let ((enccmd (if encoded-cmd encoded-cmd (getenv "MT_CMDINFO"))))
(if enccmd
(common:read-encoded-string enccmd)
'())))
(define (launch:runstep ezstep run-id test-id exit-info m tal)
(let* ((stepname (car ezstep)) ;; do stuff to run the step
(stepinfo (cadr ezstep))
(stepparts (string-match (regexp "^(\\{([^\\}]*)\\}\\s*|)(.*)$") stepinfo))
(stepparms (list-ref stepparts 2)) ;; for future use, {VAR=1,2,3}, run step for each
(stepcmd (list-ref stepparts 3))
(script "") ; "#!/bin/bash\n") ;; yep, we depend on bin/bash FIXME!!!\
(logpro-file (conc stepname ".logpro"))
(html-file (conc stepname ".html"))
(logpro-used (file-exists? logpro-file)))
(define (launch:runstep ezstep run-id test-id exit-info m tal testconfig)
(let* ((stepname (car ezstep)) ;; do stuff to run the step
(stepinfo (cadr ezstep))
(stepparts (string-match (regexp "^(\\{([^\\}]*)\\}\\s*|)(.*)$") stepinfo))
(stepparms (list-ref stepparts 2)) ;; for future use, {VAR=1,2,3}, run step for each
(stepcmd (list-ref stepparts 3))
(script "") ; "#!/bin/bash\n") ;; yep, we depend on bin/bash FIXME!!!\
(logpro-file (conc stepname ".logpro"))
(html-file (conc stepname ".html"))
(tconfig-logpro (configf:lookup testconfig "logpro" stepname))
(logpro-used (file-exists? logpro-file)))
(if (and tconfig-logpro
(not logpro-used)) ;; no logpro file found but have a defn in the testconfig
(begin
(with-output-to-file logpro-file
(lambda ()
(print ";; logpro file extracted from testconfig\n"
";;")
(print tconfig-logpro)))
(set! logpro-used #t)))
;; NB// can safely assume we are in test-area directory
(debug:print 4 "ezsteps:\n stepname: " stepname " stepinfo: " stepinfo " stepparts: " stepparts
" stepparms: " stepparms " stepcmd: " stepcmd)
;; ;; first source the previous environment
;; (let ((prev-env (conc ".ezsteps/" prevstep (if (string-search (regexp "csh")
;; (get-environment-variable "SHELL")) ".csh" ".sh"))))
|
︙ | | |
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
|
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
|
-
+
|
(if (not (> (length ezstepslst) 0))
(debug:print 0 "ERROR: ezsteps defined but ezstepslst is zero length")
(let loop ((ezstep (car ezstepslst))
(tal (cdr ezstepslst))
(prevstep #f))
;; check exit-info (vector-ref exit-info 1)
(if (vector-ref exit-info 1)
(let ((logpro-used (launch:runstep ezstep run-id test-id exit-info m tal)))
(let ((logpro-used (launch:runstep ezstep run-id test-id exit-info m tal testconfig)))
(if (and (steprun-good? logpro-used (vector-ref exit-info 2))
(not (null? tal)))
(loop (car tal) (cdr tal) stepname)))
(debug:print 4 "WARNING: a prior step failed, stopping at " ezstep))))))))
(monitorjob (lambda ()
(let* ((start-seconds (current-seconds))
(calc-minutes (lambda ()
|
︙ | | |
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
|
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
|
-
+
+
-
+
|
;; need to update the top test record if PASS or FAIL and this is a subtest
;; NO NEED TO CALL roll-up-pass-fail-counts HERE, THIS IS DONE IN roll-up-pass-fail-counts called by tests:test-set-status!
))
;; for automated creation of the rollup html file this is a good place...
;; (if (and (not (equal? item-path ""))
;; (< (random (rmt:get-count-tests-running-for-testname run-id test-name)) 5))
(tests:summarize-items run-id test-id test-name #f)
(tests:summarize-test run-id test-id)) ;; don't force - just update if no
(tests:summarize-test run-id test-id) ;; don't force - just update if no
)
(mutex-unlock! m)
(debug:print 2 "Output from running " fullrunscript ", pid " (vector-ref exit-info 0) " in work area "
work-area ":\n====\n exit code " (vector-ref exit-info 2) "\n" "====\n")
(if (not (vector-ref exit-info 1))
(exit 4)))))))
;; set up the very basics needed for doing anything here.
(define (launch:setup-for-run #!key (force #f))
;; would set values for KEYS in the environment here for better support of env-override but
;; have chicken/egg scenario. need to read megatest.config then read it again. Going to
;; pass on that idea for now
;; special case
(if (or force (not (hash-table? *configdat*))) ;; no need to re-open on every call
(begin
(set! *configinfo* (or (if (get-environment-variable "MT_CMDINFO") ;; we are inside a test - do not reprocess configs
(let ((alistconfig (conc (get-environment-variable "MT_LINKTREE") "/"
(get-environment-variable "MT_TARGET") "/"
(get-environment-variable "MT_RUNNAME") "/"
".megatest.cfg")))
".megatest.cfg-" megatest-version "-" megatest-fossil-hash)))
(if (file-exists? alistconfig)
(list (configf:read-alist alistconfig)
(get-environment-variable "MT_RUN_AREA_HOME"))
#f))
#f) ;; no config cached - give up
(let ((runname (or (args:get-arg "-runname")(args:get-arg ":runname"))))
(if runname (setenv "MT_RUNNAME" runname))
|
︙ | | |
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
|
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
|
-
+
-
-
+
+
+
|
(begin
(if (not (file-exists? fulldir))
(create-directory fulldir #t)) ;; need to protect with exception handler
(if (and target
runname
(file-exists? fulldir))
(let ((tmpfile (conc fulldir "/.megatest.cfg." (current-seconds)))
(targfile (conc fulldir "/.megatest.cfg")))
(targfile (conc fulldir "/.megatest.cfg-" megatest-version "-" megatest-fossil-hash)))
(debug:print-info 0 "Caching megatest.config in " fulldir "/.megatest.cfg")
(configf:write-alist *configdat* tmpfile)
(system (conc "ln -sf " tmpfile " " targfile))
)))))))
(define (get-best-disk confdat)
(let* ((disks (hash-table-ref/default confdat "disks" #f))
(define (get-best-disk confdat testconfig)
(let* ((disks (or (and testconfig (hash-table-ref/default testconfig "disks" #f))
(hash-table-ref/default confdat "disks" #f)))
(minspace (let ((m (configf:lookup confdat "setup" "minspace")))
(string->number (or m "10000")))))
(if disks
(let ((res (common:get-disk-with-most-free-space disks minspace))) ;; min size of 1000, seems tad dumb
(if res
(cdr res)
(begin
|
︙ | | |
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
|
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
|
-
+
|
(debug:print-info 0 "attempting to preclean directory " (db:test-get-rundir testinfo) " for test " test-name "/" item-path)
(runs:remove-test-directory testinfo 'remove-data-only))) ;; remove data only, do not perturb the record
;; prevent overlapping actions - set to LAUNCHED as early as possible
;;
(tests:test-set-status! run-id test-id "LAUNCHED" "n/a" #f #f) ;; (if launch-results launch-results "FAILED"))
(rmt:roll-up-pass-fail-counts run-id test-name item-path #f "LAUNCHED")
(set! diskpath (get-best-disk *configdat*))
(set! diskpath (get-best-disk *configdat* test-conf))
(if diskpath
(let ((dat (create-work-area run-id run-info keyvals test-id test-path diskpath test-name itemdat)))
(set! work-area (car dat))
(set! toptest-work-area (cadr dat))
(debug:print-info 2 "Using work area " work-area))
(begin
(set! work-area (conc test-path "/tmp_run"))
|
︙ | | |
Modified megatest-version.scm
from [b37c417062]
to [84dff703f2].
1
2
3
4
5
6
7
|
1
2
3
4
5
6
7
|
-
+
|
;; Always use two or four digit decimal
;; 1.01, 1.02...1.10,1.11,1,1101 ... 1.99,2.00..
(declare (unit megatest-version))
(define megatest-version 1.6019)
(define megatest-version 1.6023)
|
Modified megatest.scm
from [6d1c1e566e]
to [a40689f4ed].
︙ | | |
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
|
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
|
-
+
+
|
(let ((tl (launch:setup-for-run)))
(push-directory *toppath*)
(let ((data (full-runconfigs-read)))
;; keep this one local
(cond
((and (args:get-arg "-section")
(args:get-arg "-var"))
(let ((val (configf:lookup data (args:get-arg "-section")(args:get-arg "-var"))))
(let ((val (or (configf:lookup data (args:get-arg "-section")(args:get-arg "-var"))
(configf:lookup data "default" (args:get-arg "-var")))))
(if val (print val))))
((not (args:get-arg "-dumpmode"))
(pp (hash-table->alist data)))
((string=? (args:get-arg "-dumpmode") "json")
(json-write data))
(else
(debug:print 0 "ERROR: -dumpmode of " (args:get-arg "-dumpmode") " not recognised")))
|
︙ | | |
Modified multi-dboard.scm
from [a922f9abf1]
to [e9e822b1ad].
︙ | | |
66
67
68
69
70
71
72
73
74
75
76
77
78
79
|
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
|
+
|
;; (client:launch))
;; (client:launch))
(define *runremote* #f)
(define *windows* (make-hash-table))
(define *changed-main* (make-hash-table)) ;; set path/... => #t
(define *changed-mutex* (make-mutex)) ;; use for all incoming change requests
(define *searchpatts* (make-hash-table))
(debug:setup)
(define *tim* (iup:timer))
(define *ord* #f)
(iup:attribute-set! *tim* "TIME" 300)
|
︙ | | |
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
|
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
|
-
-
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
|
#f ;; redraw needed for current tab id
(make-hash-table) ;; tab-id -> areaname
)))
(hash-table-set! *windows* window-id data)
(iup:show (dashboard:main-panel data window-id))
(iup:main-loop)))
;; ease debugging by loading ~/.dashboardrc
(let ((debugcontrolf (conc (get-environment-variable "HOME") "/.dashboardrc")))
(if (file-exists? debugcontrolf)
(load debugcontrolf)))
(define (main)
(let-values
(((con port)(dboard:server-start #f)))
(let ((portnum (if (string? port)(string->number port) port)))
;; got here, monitor/dashboard was started
(mddb:register-dashboard portnum)
(thread-start! (make-thread (lambda ()(dboard:server-service con portnum)) "server service"))
(thread-start! (make-thread (lambda ()
(let loop ()
(dboard:general-updater con portnum)
(thread-sleep! 1)
(loop))) "general updater"))
(dboard:make-window 0)
(mddb:unregister-dashboard (get-host-name) portnum)
(dboard:server-close con port)))
(let-values
(((con port)(dboard:server-start #f)))
(let ((portnum (if (string? port)(string->number port) port)))
;; got here, monitor/dashboard was started
(mddb:register-dashboard portnum)
(thread-start! (make-thread (lambda ()(dboard:server-service con portnum)) "server service"))
(thread-start! (make-thread (lambda ()
(let loop ()
(dboard:general-updater con portnum)
(thread-sleep! 1)
(loop))) "general updater"))
(dboard:make-window 0)
(mddb:unregister-dashboard (get-host-name) portnum)
(dboard:server-close con port))))
|
Modified rmt.scm
from [0f735396a5]
to [592faf391b].
︙ | | |
527
528
529
530
531
532
533
534
535
536
537
538
539
540
|
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
|
+
+
+
|
;;
(define (rmt:roll-up-pass-fail-counts run-id test-name item-path state status)
(rmt:send-receive 'roll-up-pass-fail-counts run-id (list run-id test-name item-path state status)))
(define (rmt:update-pass-fail-counts run-id test-name)
(rmt:general-call 'update-pass-fail-counts run-id (list run-id test-name run-id test-name run-id test-name)))
(define (rmt:top-test-set-per-pf-counts run-id test-name)
(rmt:general-call 'top-test-set-per-pf-counts run-id (list run-id test-name)))
;;======================================================================
;; R U N S
;;======================================================================
(define (rmt:get-run-info run-id)
(rmt:send-receive 'get-run-info run-id (list run-id)))
|
︙ | | |
Modified runs.scm
from [76f6f46a09]
to [17a0e725ee].
︙ | | |
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
|
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
|
-
+
+
+
+
+
+
+
+
|
(test-records (make-hash-table))
;; need to process runconfigs before generating these lists
(all-tests-registry #f) ;; (tests:get-all)) ;; (tests:get-valid-tests (make-hash-table) test-search-path)) ;; all valid tests to check waiton names
(all-test-names #f) ;; (hash-table-keys all-tests-registry))
(test-names #f) ;; (tests:filter-test-names all-test-names test-patts))
(required-tests #f) ;; Put fully qualified test/testpath names in this list to be done
(task-key (conc (hash-table->alist flags) " " (get-host-name) " " (current-process-id)))
(tdbdat (tasks:open-db)))
(tdbdat (tasks:open-db))
(config-reruns (let ((x (configf:lookup *configdat* "setup" "reruns")))
(if x (string->number x) #f))))
;; override the number of reruns from the configs
(if (and config-reruns
(> run-count config-reruns))
(set! run-count config-reruns))
(if (tasks:need-server run-id)(tasks:start-and-wait-for-server tdbdat run-id 10))
(let ((sighand (lambda (signum)
;; (signal-mask! signum) ;; to mask or not? seems to cause issues in exiting
(if (eq? signum signal/stop)
(debug:print 0 "ERROR: attempt to STOP process. Exiting."))
(set! *time-to-exit* #t)
|
︙ | | |
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
|
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
|
-
-
+
-
+
+
+
|
(else #f))) ;; not iterated
#f ;; itemsdat 5
#f ;; spare - used for item-path
)))
(for-each
(lambda (waiton)
(if (and waiton (not (member waiton test-names)))
(let* ((new-test-patts (tests:extend-test-patts test-patts hed waiton #f))
(waiton-record (hash-table-ref/default test-records waiton #f))
(let* ((waiton-record (hash-table-ref/default test-records waiton #f))
(waiton-tconfig (if waiton-record (vector-ref waiton-record 1) #f))
(waiton-itemized (and waiton-tconfig
(or (hash-table-ref/default waiton-tconfig "items" #f)
(hash-table-ref/default waiton-tconfig "itemstable" #f)))))
(hash-table-ref/default waiton-tconfig "itemstable" #f))))
(itemmap (configf:lookup config "requirements" "itemmap"))
(new-test-patts (tests:extend-test-patts test-patts hed waiton itemmap)))
(debug:print-info 0 "Test " waiton " has " (if waiton-record "a" "no") " waiton-record and" (if waiton-itemized " " " no ") "items")
;; need to account for test-patt here, if I am test "a", selected with a test-patt of "hed/b%"
;; and we are waiting on "waiton" we need to add "waiton/,waiton/b%" to test-patt
;; is this satisfied by merely appending "/" to the waiton name added to the list?
;;
;; This approach causes all of the items in an upstream test to be run
|
︙ | | |
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
|
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
|
-
+
+
|
(if waiton-itemized
(begin
(debug:print-info 0 "New test patts: " new-test-patts ", prev test patts: " test-patts)
(set! required-tests (cons (conc waiton "/") required-tests))
(set! test-patts new-test-patts))
(begin
(debug:print-info 0 "Adding non-itemized test " waiton " to required-tests")
(set! required-tests (cons waiton required-tests)))))
(set! required-tests (cons waiton required-tests))
(set! test-patts new-test-patts))))
(begin
(debug:print-info 0 "No testconfig info yet for " waiton ", setting up to re-process it")
(set! tal (append (cons waiton tal)(list hed))))) ;; (cons (conc waiton "/") required-tests))
;; NOPE: didn't work. required needs to be plain test names. Try tacking on to test-patts
;; - doesn't work
;; (set! test-patts (conc test-patts "," waiton "/"))
|
︙ | | |
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
|
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
|
-
+
|
"runs: mark-incompletes")))
(thread-start! th1)
(thread-start! th2)
(thread-join! th1)
(set! keep-going #f)
(thread-join! th2)
;; if run-count > 0 call, set -preclean and -rerun STUCK/DEAD
(if (> run-count 0)
(if (> run-count 0) ;; handle reruns
(begin
(if (not (hash-table-ref/default flags "-preclean" #f))
(hash-table-set! flags "-preclean" #t))
(if (not (hash-table-ref/default flags "-rerun" #f))
(hash-table-set! flags "-rerun" "STUCK/DEAD,n/a,ZERO_ITEMS"))
;; recursive call to self
(runs:run-tests target runname test-patts user flags run-count: (- run-count 1)))))
|
︙ | | |
1521
1522
1523
1524
1525
1526
1527
1528
1529
1530
1531
1532
1533
1534
1535
|
1530
1531
1532
1533
1534
1535
1536
1537
1538
1539
1540
1541
1542
1543
1544
1545
1546
|
-
+
+
+
|
(tdbdat (tasks:open-db))
(keys (rmt:get-keys))
(rundat (mt:get-runs-by-patt keys runnamepatt target))
(header (vector-ref rundat 0))
(runs (vector-ref rundat 1))
(states (if state (string-split state ",") '()))
(statuses (if status (string-split status ",") '()))
(state-status (if (string? new-state-status) (string-split new-state-status ",") '(#f #f))))
(state-status (if (string? new-state-status) (string-split new-state-status ",") '(#f #f)))
(rp-mutex (make-mutex))
(bup-mutex (make-mutex)))
(debug:print-info 4 "runs:operate-on => Header: " header " action: " action " new-state-status: " new-state-status)
(if (> 2 (length state-status))
(begin
(debug:print 0 "ERROR: the parameter to -set-state-status is a comma delimited string. E.g. COMPLETED,FAIL")
(exit)))
(for-each
(lambda (run)
|
︙ | | |
1554
1555
1556
1557
1558
1559
1560
1561
1562
1563
1564
1565
1566
1567
1568
1569
1570
1571
1572
1573
1574
1575
1576
1577
1578
1579
1580
1581
1582
1583
1584
1585
|
1565
1566
1567
1568
1569
1570
1571
1572
1573
1574
1575
1576
1577
1578
1579
1580
1581
1582
1583
1584
1585
1586
1587
1588
1589
1590
1591
1592
1593
1594
1595
1596
|
-
-
-
+
+
+
-
-
+
+
|
(debug:print-info 4 "runs:operate-on run=" run ", header=" header)
(if (not (null? tests))
(begin
(case action
((remove-runs)
(if (tasks:need-server run-id)(tasks:start-and-wait-for-server tdbdat run-id 10))
;; seek and kill in flight -runtests with % as testpatt here
(if (equal? testpatt "%")
(tasks:kill-runner target run-name)
(debug:print 0 "not attempting to kill any run launcher processes as testpatt is " testpatt))
;; (if (equal? testpatt "%")
(tasks:kill-runner target run-name testpatt)
;; (debug:print 0 "not attempting to kill any run launcher processes as testpatt is " testpatt))
(debug:print 1 "Removing tests for run: " runkey " " (db:get-value-by-header run header "runname")))
((set-state-status)
(if (tasks:need-server run-id)(tasks:start-and-wait-for-server tdbdat run-id 10))
(debug:print 1 "Modifying state and staus for tests for run: " runkey " " (db:get-value-by-header run header "runname")))
((print-run)
(debug:print 1 "Printing info for run " runkey ", run=" run ", tests=" tests ", header=" header)
action)
((run-wait)
(debug:print 1 "Waiting for run " runkey ", run=" runnamepatt " to complete"))
((archive)
(debug:print 1 "Archiving/restoring (" (args:get-arg "-archive") ") data for run: " runkey " " (db:get-value-by-header run header "runname"))
(set! worker-thread (make-thread (lambda ()
(case (string->symbol (args:get-arg "-archive"))
((save save-remove keep-html)(archive:run-bup (args:get-arg "-archive") run-id run-name tests))
((restore)(archive:bup-restore (args:get-arg "-archive") run-id run-name tests))
((save save-remove keep-html)(archive:run-bup (args:get-arg "-archive") run-id run-name tests rp-mutex bup-mutex))
((restore)(archive:bup-restore (args:get-arg "-archive") run-id run-name tests rp-mutex bup-mutex))
(else
(debug:print 0 "ERROR: unrecognised sub command to -archive. Run \"megatest\" to see help")
(exit))))
"archive-bup-thread"))
(thread-start! worker-thread))
(else
(debug:print-info 0 "action not recognised " action)))
|
︙ | | |
Modified tasks.scm
from [7cea7f81b2]
to [2559bee69c].
︙ | | |
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
|
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
|
-
-
-
+
+
-
+
|
(handle-exceptions
exn
'()
(sqlite3:first-row db "SELECT id,action,owner,state,target,name,testpatt,keylock,params WHERE
params LIKE ? AND state LIKE ? AND action LIKE ? AND testpatt LIKE ?;"
param-key state-patt action-patt test-patt)))))
(define (tasks:find-task-queue-records dbstruct target run-name test-patt state-patt action-patt)
;; (handle-exceptions
;; exn
;; '()
;; (sqlite3:first-row
(let ((db (db:delay-if-busy (db:get-db dbstruct #f)))
(res '()))
(sqlite3:for-each-row
(lambda (a . b)
(set! res (cons (cons a b) res)))
db "SELECT id,action,owner,state,target,name,testpatt,keylock,params FROM tasks_queue
WHERE
target = ? AND name = ? AND state LIKE ? AND action LIKE ? AND testpatt LIKE ?;"
target run-name state-patt action-patt test-patt)
res)) ;; )
;; kill any runner processes (i.e. processes handling -runtests) that match target/runname
;;
;; do a remote call to get the task queue info but do the killing as self here.
;;
(define (tasks:kill-runner target run-name)
(let ((records (rmt:tasks-find-task-queue-records target run-name "%" "running" "run-tests"))
(define (tasks:kill-runner target run-name testpatt)
(let ((records (rmt:tasks-find-task-queue-records target run-name testpatt "running" "run-tests"))
(hostpid-rx (regexp "\\s+(\\w+)\\s+(\\d+)$"))) ;; host pid is at end of param string
(if (null? records)
(debug:print 0 "No run launching processes found for " target " / " run-name)
(debug:print 0 "No run launching processes found for " target " / " run-name " with testpatt " (or testpatt "* no testpatt specified! *"))
(debug:print 0 "Found " (length records) " run(s) to kill."))
(for-each
(lambda (record)
(let* ((param-key (list-ref record 8))
(match-dat (string-search hostpid-rx param-key)))
(if match-dat
(let ((hostname (cadr match-dat))
|
︙ | | |
Modified tests.scm
from [40378522a7]
to [e76dcf1b44].
︙ | | |
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
|
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
|
+
+
+
+
+
+
+
+
+
+
-
+
|
(delete-duplicates
(filter (lambda (testname)
(tests:match test-patts testname #f))
test-names)))
;; given test-b that is waiting on test-a extend test-patt appropriately
;;
;; genlib/testconfig sim/testconfig
;; genlib/sch sim/sch/cell1
;;
;; [requirements] [requirements]
;; mode itemwait
;; # trim off the cell to determine what to run for genlib
;; itemmap /.*
;;
;; test-a is waiting on test-b so we need to create a pattern for test-b given test-a and itemmap
(define (tests:extend-test-patts test-patt test-b test-a itemmap)
(let* ((patts (string-split test-patt ","))
(test-b-len (+ (string-length test-b) 1))
(patts-b (map (lambda (x)
(let* ((modpatt (if itemmap (db:convert-test-itempath x itemmap) x))
(let ((newpatt (conc test-a "/" (substring x test-b-len (string-length x)))))
(newpatt (conc test-a "/," test-a "/" (substring modpatt test-b-len (string-length modpatt)))))
;; (print "in map, x=" x ", newpatt=" newpatt)
newpatt))
(filter (lambda (x)
(eq? (substring-index (conc test-b "/") x) 0))
patts))))
(string-intersperse (delete-duplicates (append patts (if (null? patts-b)
(list (conc test-a "/%"))
|
︙ | | |
348
349
350
351
352
353
354
355
356
357
358
359
360
361
|
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
|
+
|
(lockf (conc outputfilename ".lock")))
(let loop ((have-lock (common:simple-file-lock lockf)))
(if have-lock
(let ((script (configf:lookup *configdat* "testrollup" test-name)))
(print "Obtained lock for " outputfilename)
;; (rmt:top-test-set-per-pf-counts run-id test-name)
(rmt:roll-up-pass-fail-counts run-id test-name "" #f #f)
(rmt:top-test-set-per-pf-counts run-id test-name)
(if script
(system (conc script " > " outputfilename " & "))
(tests:generate-html-summary-for-iterated-test run-id test-id test-name outputfilename))
(common:simple-file-release-lock lockf)
(change-directory orig-dir)
;; NB// tests:test-set-toplog! is remote internal...
(tests:test-set-toplog! run-id test-name outputfilename))
|
︙ | | |
Added tests/dep-tests/common.testconfig version [382c89b27d].
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
|
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
|
[ezsteps]
delay sleep $SPEED;echo "Delayed $SPEED seconds"
# lookup table for waitons
#
[std]
genlib setup
test1 genlib
aggregate test1
test2 aggregate
results test2
# simple removes the challenging "aggregate" dependency between test1 and test2.
# and the itempatt irregularity from genlib -> test1
#
[simple]
test1 setup
test2 test1
results test2
[test_meta]
author matt
owner matt
description This is a common testconfig shared by all the tests
[logpro]
delay ;; Delay step logpro
(expect:required in "LogFileBody" > 0 "Delayed message" #/Delayed \d+ seconds/)
reviewed 09/10/2011, by Matt
[requirements]
mode itemwait
|
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
Added tests/dep-tests/common_itemstable.testconfig version [64419eaa4a].
|
1
2
3
4
|
+
+
+
+
|
[itemstable]
VIEW layout layout layout schematic schematic schematic
CELL ntran ptran diode ntran ptran diode
|
| | |
Added tests/dep-tests/megatest.config version [b96d033fe9].
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
|
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
|
[fields]
# this field changes the dep tree
DEPS TEXT
# this field changes the test run time; 0 .. N or random
SPEED TEXT
[dashboard]
pre-command xterm -geometry 180x20 -e "
post-command |& tee results.log ;echo Press any key to continue;bash -c 'read -n 1 -s'" &
testsort -event_time
[misc]
home #{shell readlink -f $MT_RUN_AREA_HOME}
parent #{shell readlink -f $MT_RUN_AREA_HOME/..}
[setup]
linktree #{get misc parent}/links
max_concurrent_jobs 100000
# It is possible (but not recommended) to override the rsync command used
# to populate the test directories. For test development the following
# example can be useful
#
testcopycmd cp --remove-destination -rsv TEST_SRC_PATH/. TEST_TARG_PATH/. >> TEST_TARG_PATH/mt_launch.log 2>> TEST_TARG_PATH/mt_launch.log
# or for hard links
# testcopycmd cp --remove-destination -rlv TEST_SRC_PATH/. TEST_TARG_PATH/.
# override the logview command
#
logviewer (%MTCMD%) 2> /dev/null > /dev/null
# override the html viewer launch command
#
# htmlviewercmd firefox -new-window
htmlviewercmd arora
[env-override]
# MT_XTERM_CMD overrides the terminal command
# MT_XTERM_CMD xterm -bg lightgreen -fg black
## disks are:
## name host:/path/to/area
## -or-
## name /path/to/area
[disks]
disk0 #{get misc parent}/runs
#======================================================================
# Machine flavors
#
# These specify lists of hosts or scripts to use or call for various
# flavors of task.
#
#======================================================================
[flavors]
plain hosts: xena, phoebe
strong command: NBFAKE_HOST=zeus nbfake
arm hosts: cubian
# Uncomment these to emulate a job queue with a long time (look in bin/sleeprunner for the time)
[jobtools]
launcher nbfake
maxload 2.0
|
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
Added tests/dep-tests/runconfigs.config version [9ccccd23c7].
|
1
2
3
4
5
6
7
8
|
+
+
+
+
+
+
+
+
|
[default]
# [DEPS/SPEED]
[simple/0]
[std/0]
|
| | | | | | |
Added tests/dep-tests/tests/aggregate/testconfig version [fa95f0ff55].
|
1
2
3
4
|
+
+
+
+
|
[include #{getenv MT_RUN_AREA_HOME}/common.testconfig]
[requirements]
waiton #{get #{getenv DEPS} aggregate}
|
| | |
Added tests/dep-tests/tests/genlib/testconfig version [5997267de8].
|
1
2
3
4
5
6
7
8
|
+
+
+
+
+
+
+
+
|
[include #{getenv MT_RUN_AREA_HOME}/common.testconfig]
[itemstable]
VIEWTYPE layout schematic
[requirements]
waiton #{get #{getenv DEPS} genlib}
# itemmap /.*
|
| | | | | | |
Added tests/dep-tests/tests/results/testconfig version [33e68a628c].
|
1
2
3
4
5
|
+
+
+
+
+
|
[include #{getenv MT_RUN_AREA_HOME}/common.testconfig]
[requirements]
waiton #{get #{getenv DEPS} results}
|
| | | |
Added tests/dep-tests/tests/setup/testconfig version [c2dea9e96c].
|
1
2
|
+
+
|
[include #{getenv MT_RUN_AREA_HOME}/common.testconfig]
|
|
Added tests/dep-tests/tests/test1/testconfig version [d6e3a28a40].
|
1
2
3
4
5
6
7
8
9
10
11
|
+
+
+
+
+
+
+
+
+
+
+
|
[include #{getenv MT_RUN_AREA_HOME}/common.testconfig]
[include #{getenv MT_RUN_AREA_HOME}/common_itemstable.testconfig]
[requirements]
waiton #{get #{getenv DEPS} test1}
# itemmap maps these items back to previous test
# NB// mapping is in reverse - NOT forwards!
#
itemmap /.*
|
| | | | | | | | | |
Added tests/dep-tests/tests/test2/testconfig version [536ee9f06b].
|
1
2
3
4
5
6
7
|
+
+
+
+
+
+
+
|
[include #{getenv MT_RUN_AREA_HOME}/common.testconfig]
[include #{getenv MT_RUN_AREA_HOME}/common_itemstable.testconfig]
[requirements]
waiton #{get #{getenv DEPS} test2}
|
| | | | | |
Added tests/dynamic-waiton-example/common.testconfig version [c4b44c24a4].
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
|
[ezsteps]
delay sleep $SPEED;echo "Delayed $SPEED seconds"
[requirements]
#{getenv WAITON_#{getenv MT_TEST_NAME}}
[test_meta]
author matt
owner matt
description This is a common testconfig shared by all the tests
[logpro]
delay ;; Delay step logpro
(expect:required in "LogFileBody" > 0 "Delayed message" #/Delayed \d+ seconds/)
reviewed 09/10/2011, by Matt
|
| | | | | | | | | | | | | | |
Added tests/dynamic-waiton-example/common_itemstable.testconfig version [64419eaa4a].
|
1
2
3
4
|
+
+
+
+
|
[itemstable]
VIEW layout layout layout schematic schematic schematic
CELL ntran ptran diode ntran ptran diode
|
| | |
Added tests/dynamic-waiton-example/megatest.config version [b96d033fe9].
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
|
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
|
[fields]
# this field changes the dep tree
DEPS TEXT
# this field changes the test run time; 0 .. N or random
SPEED TEXT
[dashboard]
pre-command xterm -geometry 180x20 -e "
post-command |& tee results.log ;echo Press any key to continue;bash -c 'read -n 1 -s'" &
testsort -event_time
[misc]
home #{shell readlink -f $MT_RUN_AREA_HOME}
parent #{shell readlink -f $MT_RUN_AREA_HOME/..}
[setup]
linktree #{get misc parent}/links
max_concurrent_jobs 100000
# It is possible (but not recommended) to override the rsync command used
# to populate the test directories. For test development the following
# example can be useful
#
testcopycmd cp --remove-destination -rsv TEST_SRC_PATH/. TEST_TARG_PATH/. >> TEST_TARG_PATH/mt_launch.log 2>> TEST_TARG_PATH/mt_launch.log
# or for hard links
# testcopycmd cp --remove-destination -rlv TEST_SRC_PATH/. TEST_TARG_PATH/.
# override the logview command
#
logviewer (%MTCMD%) 2> /dev/null > /dev/null
# override the html viewer launch command
#
# htmlviewercmd firefox -new-window
htmlviewercmd arora
[env-override]
# MT_XTERM_CMD overrides the terminal command
# MT_XTERM_CMD xterm -bg lightgreen -fg black
## disks are:
## name host:/path/to/area
## -or-
## name /path/to/area
[disks]
disk0 #{get misc parent}/runs
#======================================================================
# Machine flavors
#
# These specify lists of hosts or scripts to use or call for various
# flavors of task.
#
#======================================================================
[flavors]
plain hosts: xena, phoebe
strong command: NBFAKE_HOST=zeus nbfake
arm hosts: cubian
# Uncomment these to emulate a job queue with a long time (look in bin/sleeprunner for the time)
[jobtools]
launcher nbfake
maxload 2.0
|
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
Added tests/dynamic-waiton-example/runconfigs.config version [81e449a935].
|
1
2
3
4
5
6
7
8
9
10
11
|
+
+
+
+
+
+
+
+
+
+
+
|
[default]
WAITON_setup
WAITON_genlib waiton setup
WAITON_test1 waiton genlib
WAITON_aggregate waiton test1
WAITON_test2 waiton aggregate
# [DEPS/SPEED]
[std/0]
|
| | | | | | | | | |
Added tests/dynamic-waiton-example/tests/aggregate/testconfig version [c2dea9e96c].
|
1
2
|
+
+
|
[include #{getenv MT_RUN_AREA_HOME}/common.testconfig]
|
|
Added tests/dynamic-waiton-example/tests/genlib/testconfig version [e2cba0fe56].
|
1
2
3
4
5
|
+
+
+
+
+
|
[include #{getenv MT_RUN_AREA_HOME}/common.testconfig]
[itemstable]
VIEWTYPE layout schematic
|
| | | |
Added tests/dynamic-waiton-example/tests/results/testconfig version [c2dea9e96c].
|
1
2
|
+
+
|
[include #{getenv MT_RUN_AREA_HOME}/common.testconfig]
|
|
Added tests/dynamic-waiton-example/tests/setup/testconfig version [c2dea9e96c].
|
1
2
|
+
+
|
[include #{getenv MT_RUN_AREA_HOME}/common.testconfig]
|
|
Added tests/dynamic-waiton-example/tests/test1/testconfig version [a1ac7fb924].
|
1
2
3
|
+
+
+
|
[include #{getenv MT_RUN_AREA_HOME}/common.testconfig]
[include #{getenv MT_RUN_AREA_HOME}/common_itemstable.testconfig]
|
| |
Added tests/dynamic-waiton-example/tests/test2/testconfig version [a1ac7fb924].
|
1
2
3
|
+
+
+
|
[include #{getenv MT_RUN_AREA_HOME}/common.testconfig]
[include #{getenv MT_RUN_AREA_HOME}/common_itemstable.testconfig]
|
| |
Modified tests/fdktestqa/testqa/configs/megatest.def.config
from [1df0e5e24a]
to [11f50463c8].
1
2
3
4
5
6
7
8
|
1
2
3
4
5
6
7
8
|
-
+
|
# You can override environment variables for all your tests here
[env-override]
EXAMPLE_VAR example value
# As you run more tests you may need to add additional disks, the names are arbitrary but must be unique
[disks]
disk0 #{scheme (nice-path "#{getenv MT_RUN_AREA_HOME}/../simpleruns")}
disk0 #{scheme (create-directory (nice-path "#{getenv MT_RUN_AREA_HOME}/../simpleruns") #t)}
|
Modified tests/fullrun/megatest.config
from [7fbae1ffea]
to [007216e935].
︙ | | |
14
15
16
17
18
19
20
21
22
23
24
25
26
27
|
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
|
+
|
pre-command xterm -geometry 180x20 -e "
post-command |& tee results.log ;echo Press any key to continue;bash -c 'read -n 1 -s'" &
testsort -event_time
[misc]
home #{shell readlink -f $MT_RUN_AREA_HOME}
parent #{shell readlink -f $MT_RUN_AREA_HOME/..}
testsuite #{shell basename $MT_RUN_AREA_HOME}
[tests-paths]
1 #{get misc parent}/simplerun/tests
[setup]
# turn off faststart, put monitor.db in MT_RUN_AREA_HOME/db
|
︙ | | |
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
|
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
|
-
+
-
+
-
-
+
+
-
|
# XTERM [system xterm]
# RUNDEAD [system exit 56]
[server]
# force use of server always
required yes
# required yes
# Use http instead of direct filesystem access
transport http
# transport fs
# transport nmsg
synchronous 0
# If the server can't be started on this port it will try the next port until
# it succeeds
port 9080
# This server will keep running this number of hours after last access.
# Three minutes is 0.05 hours
# timeout 0.025
timeout 0.061
timeout 0.01
# faststart; unless no, start server but proceed with writes until server started
faststart no
# faststart yes
# faststart no
faststart yes
# Start server when average query takes longer than this
# server-query-threshold 55500
server-query-threshold 1000
timeout 0.01
# daemonize yes
# hostname #{scheme (get-host-name)}
## disks are:
## name host:/path/to/area
## -or-
|
︙ | | |
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
|
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
|
-
-
-
-
+
+
+
+
+
-
+
-
+
|
# <testsuite>/<creationdate>
# Within the archive the data is structured like this:
# <target>/<runname>/<test>/
disk0 /tmp/#{getenv USER}/adisk1
# Uncomment these to emulate a job queue with a long time (look in bin/sleeprunner for the time)
[jobtools]
# launcher #{ scheme (case (string->symbol (conc (getenv "datapath"))) \
# ((none) "nbfake") \
# ((openlava) "bsub") \
# (else "sleeprunner"))}
launcher #{scheme (case (string->symbol (conc (getenv "datapath"))) \
((none) "nbfake") \
((openlava) "bsub -o $MT_LINKTREE/$MT_TARGET/$MT_RUNNAME.$MT_TESTNAME-$MT_ITEM_PATH.log") \
((sleeprunner) "sleeprunner") \
(else "nbfake"))}
# launcher bsub -q priority -o $MT_TEST_RUN_DIR/openlava.log
# launcher #{shell if which bsub > /dev/null;then echo bsub -q priority -o openlava.log;else echo sleeprunner;fi}
launcher nbfake
# launcher nbfake
[configf:settings trim-trailing-spaces yes]
# Override the rollup for specific tests
[testrollup]
runfirst ls
[test]
# VAL1 has trailing spaces
VAL1 Foo
VAL2 ==>#{get test VAL1}Bar<== no spaces between Foo and Bar to pass
ltest #{scheme (case (string->symbol (conc (getenv "datapath"))) \
((none) "nbfake") \
((openlava) "bsub") \
((openlava) "bsub -o $MT_LINKTREE/$MT_TARGET/$MT_RUNNAME.$MT_TESTNAME-$MT_ITEM_PATH.log") \
(else "sleeprunner"))}
#================================================================
# Flexi-launcher
#================================================================
#
# [host-types]
|
︙ | | |
283
284
285
286
287
288
289
290
291
292
293
294
|
284
285
286
287
288
289
290
291
292
293
294
295
296
297
|
+
+
-
+
-
+
|
# flexi-launcher yes
[jobtools]
flexi-launcher yes
[host-types]
general nbfake
alt #{get jobtools launcher}
local nbfake
remote bsub
remote #{get jobtools launcher}
[launchers]
runfirst/sum% remote
% general
|
Added tests/fullrun/multi-dboard-load-all.scm version [929c778374].
|
1
2
3
4
5
6
7
8
9
10
11
12
13
|
+
+
+
+
+
+
+
+
+
+
+
+
+
|
(require-library margs)
(load "../../common.scm")
(load "../../common_records.scm")
(load "../../margs.scm")
(load "../../megatest-version.scm")
(load "../../portlogger.scm")
(load "../../tasks.scm")
(load "../../db.scm")
(load "../../configf.scm")
(load "../../keys.scm")
(load "../../tree.scm")
(load "../../multi-dboard.scm")
|
| | | | | | | | | | | |
Added tests/fullrun/multi-dboard.sh version [f73dd06f1d].
|
1
2
3
|
+
+
+
|
#!/bin/bash
csi -I ../.. multi-dboard-load-all.scm
|
| |
Deleted tests/fullrun/tests/logpro_required_fail/lookittmp.logpro version [312a36066e].
1
2
3
4
5
6
7
8
|
|
-
-
-
-
-
-
-
-
|
;; (c) 2006,2007,2008,2009 Matthew Welland matt@kiatoa.com
;;
;; License GPL.
(expect:required in "LogFileBody" > 0 "A file name that should never exist!" #/This is a awfully stupid file name that should never be found in the temp dir/)
;; (expect:warning in "LogFileBody" = 0 "Any warning" #/WARNING/)
;; (expect:error in "LogFileBody" = 0 "Any error" (list #/ERROR/ #/.*/)) ;; force an error
|
Modified tests/fullrun/tests/logpro_required_fail/testconfig
from [e006dc1513]
to [ec159a2f12].
1
2
3
4
5
6
7
8
9
10
11
12
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
+
+
+
+
+
+
+
+
+
+
+
|
[setup]
[ezsteps]
lookittmp ls /tmp
[test_meta]
author matt
owner bob
description This test runs two ezstep, the first of which is expected to fail using a simple logpro file.
[logpro]
lookittmp ;; (c) 2006,2007,2008,2009 Matthew Welland matt@kiatoa.com
;;
;; License GPL.
;;
(expect:required in "LogFileBody" > 0 "A file name that should never exist!" #/This is a awfully stupid file name that should never be found in the temp dir/)
;;
;; (expect:warning in "LogFileBody" = 0 "Any warning" #/WARNING/)
;; (expect:error in "LogFileBody" = 0 "Any error" (list #/ERROR/ #/.*/)) ;; force an error
tags logpro
reviewed 09/10/2011, by Matt
|
Added tests/release/tests/dependencies/simpleresults.logpro version [cdf9db5b94].