Megatest

Check-in [b88e2e296b]
Login
Overview
Comment:Fixed typos's etc.
Downloads: Tarball | ZIP archive | SQL archive
Timelines: family | ancestors | descendants | both | test-broken-up-queries
Files: files | file ages | folders
SHA1: b88e2e296bdb8c9c7c884ad45e401479ef36ceea
User & Date: matt on 2013-10-31 02:01:09
Other Links: branch diff | manifest | tags
Context
2013-10-31
09:01
Don't update central with run time - do it once test is completed or deprecate that field in tests forever.

NOTE: This didn't make any substantial difference to throughput. Closed-Leaf check-in: 461f5cc510 user: matt tags: test-broken-up-queries

02:01
Fixed typos's etc. check-in: b88e2e296b user: matt tags: test-broken-up-queries
00:59
Testing broken up queries vs. monolithic queries check-in: bdf6223bb0 user: matt tags: test-broken-up-queries
Changes

Modified db.scm from [da1307725b] to [1a94c53bbb].

1215
1216
1217
1218
1219
1220
1221
1222

1223
1224
1225
1226
1227
1228
1229
1230
1231
1232

1233
1234
1235
1236
1237
1238
1239
;;
(define (db:get-count-test-items-running db run-id testname)
  (let ((res 0))
    (sqlite3:for-each-row
     (lambda (count)
       (set! res count))
     db
     "SELECT count(id) FROM tests WHERE state in ('RUNNING','NOT_STARTED','LAUNCHED','REMOTEHOSTSTART') AND run_id=? AND testname=? AND item_path !='';")

    res))

;; For an itemized test get the count of items matching status
(define (db:get-count-test-items-matching-status db run-id testname status)
  (let ((res 0))
    (sqlite3:for-each-row
     (lambda (count)
       (set! res count))
     db
     "SELECT count(id) FROM tests WHERE status=? AND run_id=? AND testname=? AND item_path !='';")

    res))

(define (db:get-running-stats db)
  (let ((res '()))
    (sqlite3:for-each-row
     (lambda (state count)
       (set! res (cons (list state count) res)))







|
>









|
>







1215
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231
1232
1233
1234
1235
1236
1237
1238
1239
1240
1241
;;
(define (db:get-count-test-items-running db run-id testname)
  (let ((res 0))
    (sqlite3:for-each-row
     (lambda (count)
       (set! res count))
     db
     "SELECT count(id) FROM tests WHERE state in ('RUNNING','NOT_STARTED','LAUNCHED','REMOTEHOSTSTART') AND run_id=? AND testname=? AND item_path !='';"
     run-id testname)
    res))

;; For an itemized test get the count of items matching status
(define (db:get-count-test-items-matching-status db run-id testname status)
  (let ((res 0))
    (sqlite3:for-each-row
     (lambda (count)
       (set! res count))
     db
     "SELECT count(id) FROM tests WHERE status=? AND run_id=? AND testname=? AND item_path !='';"
     status run-id testname)
    res))

(define (db:get-running-stats db)
  (let ((res '()))
    (sqlite3:for-each-row
     (lambda (state count)
       (set! res (cons (list state count) res)))
1641
1642
1643
1644
1645
1646
1647
1648
1649
1650
1651
1652
1653
1654
1655
1656
(define (cdb:test-set-status-state serverdat test-id status state msg)
  (if (member state '("LAUNCHED" "REMOTEHOSTSTART"))
      (cdb:client-call serverdat 'set-test-start-time #t *default-numtries* test-id))
  (if msg
      (cdb:client-call serverdat 'state-status-msg #t *default-numtries* state status msg test-id)
      (cdb:client-call serverdat 'state-status #t *default-numtries* state status test-id))) ;; run-id test-name item-path minutes cpuload diskfree tmpfree) 

(define (cdb:test-set-state-status-by-name serverdat state status testname item-path)
  (cdb:client-call serverdat 'state-status-by-name state status testname item-path))

(define (cdb:test-rollup-test_data-pass-fail serverdat test-id)
  (cdb:client-call serverdat 'test_data-pf-rollup #t *default-numtries* test-id test-id test-id test-id))

(define (cdb:pass-fail-counts serverdat test-id fail-count pass-count)
  (cdb:client-call serverdat 'pass-fail-counts #t *default-numtries* fail-count pass-count test-id))








|
|







1643
1644
1645
1646
1647
1648
1649
1650
1651
1652
1653
1654
1655
1656
1657
1658
(define (cdb:test-set-status-state serverdat test-id status state msg)
  (if (member state '("LAUNCHED" "REMOTEHOSTSTART"))
      (cdb:client-call serverdat 'set-test-start-time #t *default-numtries* test-id))
  (if msg
      (cdb:client-call serverdat 'state-status-msg #t *default-numtries* state status msg test-id)
      (cdb:client-call serverdat 'state-status #t *default-numtries* state status test-id))) ;; run-id test-name item-path minutes cpuload diskfree tmpfree) 

(define (cdb:test-set-state-status-by-name serverdat state status run-id testname item-path)
  (cdb:client-call serverdat 'state-status-by-name #t *default-numtries* state status run-id testname item-path))

(define (cdb:test-rollup-test_data-pass-fail serverdat test-id)
  (cdb:client-call serverdat 'test_data-pf-rollup #t *default-numtries* test-id test-id test-id test-id))

(define (cdb:pass-fail-counts serverdat test-id fail-count pass-count)
  (cdb:client-call serverdat 'pass-fail-counts #t *default-numtries* fail-count pass-count test-id))

1710
1711
1712
1713
1714
1715
1716
1717
1718
1719
1720
1721
1722
1723
1724

(define db:queries 
  (list '(register-test          "INSERT OR IGNORE INTO tests (run_id,testname,event_time,item_path,state,status) VALUES (?,?,strftime('%s','now'),?,'NOT_STARTED','n/a');")
	;; Test state and status
	'(set-test-state         "UPDATE tests SET state=?   WHERE id=?;")
	'(set-test-status        "UPDATE tests SET state=?   WHERE id=?;")
	'(state-status           "UPDATE tests SET state=?,status=? WHERE id=?;")
	'(state-status-by-name   "UPDATE tests SET state=?,status=? WHERE testname=? AND item_path=?;")
	'(state-status-msg       "UPDATE tests SET state=?,status=?,comment=? WHERE id=?;")
	;; Test comment
	'(set-test-comment       "UPDATE tests SET comment=? WHERE id=?;")
	'(set-test-start-time    "UPDATE tests SET event_time=strftime('%s','now') WHERE id=?;")
	'(pass-fail-counts       "UPDATE tests SET fail_count=?,pass_count=? WHERE id=?;")

	;; test_data-pf-rollup is used to set a tests PASS/FAIL based on the pass/fail info from the steps







|







1712
1713
1714
1715
1716
1717
1718
1719
1720
1721
1722
1723
1724
1725
1726

(define db:queries 
  (list '(register-test          "INSERT OR IGNORE INTO tests (run_id,testname,event_time,item_path,state,status) VALUES (?,?,strftime('%s','now'),?,'NOT_STARTED','n/a');")
	;; Test state and status
	'(set-test-state         "UPDATE tests SET state=?   WHERE id=?;")
	'(set-test-status        "UPDATE tests SET state=?   WHERE id=?;")
	'(state-status           "UPDATE tests SET state=?,status=? WHERE id=?;")
	'(state-status-by-name   "UPDATE tests SET state=?,status=? WHERE run_id=? AND testname=? AND item_path=?;")
	'(state-status-msg       "UPDATE tests SET state=?,status=?,comment=? WHERE id=?;")
	;; Test comment
	'(set-test-comment       "UPDATE tests SET comment=? WHERE id=?;")
	'(set-test-start-time    "UPDATE tests SET event_time=strftime('%s','now') WHERE id=?;")
	'(pass-fail-counts       "UPDATE tests SET fail_count=?,pass_count=? WHERE id=?;")

	;; test_data-pf-rollup is used to set a tests PASS/FAIL based on the pass/fail info from the steps
2141
2142
2143
2144
2145
2146
2147
2148
2149
2150
2151
2152
2153
2154
2155
2156
2157
2158
2159
2160
2161
2162
2163
2164
2165
2166

(define (db:test-get-id-state-status-pass-fail-count db testname item-path)
  (let ((res #f))
    ;; First get the pass count
    (sqlite3:for-each-row
     (lambda (id state status pcount fcount)
       ;;          0   1      2      3     4      5
       (set! res (id vector state status pcount fcount)))
     db
     "SELECT id,state,status,pass_count,fail_count FROM tests WHERE testname=? AND item_path=?;" 
     testname item-path)
    res))

(define (db:test-get-testname-item_patt-state-status-pass-fail-count db test-id)
  (let ((res #f))
    ;; First get the pass count
    (sqlite3:for-each-row
     (lambda (testname item-path state status pcount fcount)
       (set! res (testname item-path vector state status pcount fcount)))
     db
     "SELECT testname,item_path,state,status,pass_count,fail_count FROM tests WHERE id=?;" 
     test-id)
    res))

;; This is NON-ACID compliant, does it matter?
;;







|










|







2143
2144
2145
2146
2147
2148
2149
2150
2151
2152
2153
2154
2155
2156
2157
2158
2159
2160
2161
2162
2163
2164
2165
2166
2167
2168

(define (db:test-get-id-state-status-pass-fail-count db testname item-path)
  (let ((res #f))
    ;; First get the pass count
    (sqlite3:for-each-row
     (lambda (id state status pcount fcount)
       ;;          0   1      2      3     4      5
       (set! res (vector id state status pcount fcount)))
     db
     "SELECT id,state,status,pass_count,fail_count FROM tests WHERE testname=? AND item_path=?;" 
     testname item-path)
    res))

(define (db:test-get-testname-item_patt-state-status-pass-fail-count db test-id)
  (let ((res #f))
    ;; First get the pass count
    (sqlite3:for-each-row
     (lambda (testname item-path state status pcount fcount)
       (set! res (vector testname item-path vector state status pcount fcount)))
     db
     "SELECT testname,item_path,state,status,pass_count,fail_count FROM tests WHERE id=?;" 
     test-id)
    res))

;; This is NON-ACID compliant, does it matter?
;;

Modified mt.scm from [706b3d5b6a] to [d277943dd0].

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
182
183
184
(define (mt:roll-up-pass-fail-counts run-id test-name item-path status)
  (if (and (not (equal? item-path ""))
	   (member status '("PASS" "WARN" "FAIL" "WAIVED" "RUNNING" "CHECK" "SKIP")))
      (begin
	(cdb:update-pass-fail-counts *runremote* run-id test-name)
	(if (equal? status "RUNNING")
	    ;; This test is RUNNING, if the top test is not set to RUNNING then set it to RUNNING
	    (let ((state-status (cdb:remote-run db:test-get-state-status #f run-id test-name '')))
	      (if (not (equal? (vector-ref state-status 1) "RUNNING"))
		  (cdb:top-test-set-running *runremote* run-id test-name)))
	    ;; This following is a "big" query. Replace it with the multi-step sequence
	    ;; The fact that the replacement is not ACID may be a concern.
	    ;; (cdb:top-test-set-per-pf-counts *runremote* run-id test-name))
	    (let* ((num-running       0)
		   (num-items-running (cdb:remote-run db:get-count-test-items-running #f run-id test-name))
		   (num-items-skip    (cdb:remote-run db:get-count-test-items-matching-status #f run-id test-name "SKIP"))
		   (new-state         (if (> num-items-running 0) "RUNNING" "COMPLETED"))
		   (testinfo          (cdb:remote-run db:test-get-id-state-status-pass-fail-count #f testname ''))
		   (curr-state        (vector-ref testinfo 2))
		   (curr-status       (vector-ref testinfo 3))
		   (pcount            (vector-ref testinfo 4))
		   (fcount            (vector-ref testinfo 5))
		   (newstatus         #f))
	      (set! newstatus
		    (cond
		     ((> fcount 0)         "FAIL")
		     ((> num-items-skip 0) "SKIP")
		     ((> pass-count 0)     "PASS")))
	      (if (or (not (equal? curr-state new-state))
		      (not (equal? curr-status new-status)))
		  (cdb:test-set-state-status-by-name serverdat  status state msg)))))
	#f)
      #f)

;; speed up for common cases with a little logic
(define (mt:test-set-state-status-by-id test-id newstate newstatus newcomment)
  (cond
   ((and newstate newstatus newcomment)







|









|
|
|
|
|
|
|



|


|







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
182
183
184
(define (mt:roll-up-pass-fail-counts run-id test-name item-path status)
  (if (and (not (equal? item-path ""))
	   (member status '("PASS" "WARN" "FAIL" "WAIVED" "RUNNING" "CHECK" "SKIP")))
      (begin
	(cdb:update-pass-fail-counts *runremote* run-id test-name)
	(if (equal? status "RUNNING")
	    ;; This test is RUNNING, if the top test is not set to RUNNING then set it to RUNNING
	    (let ((state-status (cdb:remote-run db:test-get-state-status #f run-id test-name "")))
	      (if (not (equal? (vector-ref state-status 1) "RUNNING"))
		  (cdb:top-test-set-running *runremote* run-id test-name)))
	    ;; This following is a "big" query. Replace it with the multi-step sequence
	    ;; The fact that the replacement is not ACID may be a concern.
	    ;; (cdb:top-test-set-per-pf-counts *runremote* run-id test-name))
	    (let* ((num-running       0)
		   (num-items-running (cdb:remote-run db:get-count-test-items-running #f run-id test-name))
		   (num-items-skip    (cdb:remote-run db:get-count-test-items-matching-status #f run-id test-name "SKIP"))
		   (new-state         (if (> num-items-running 0) "RUNNING" "COMPLETED"))
		   (testinfo          (cdb:remote-run db:test-get-id-state-status-pass-fail-count #f test-name ""))
		   (curr-state        (vector-ref testinfo 1))
		   (curr-status       (vector-ref testinfo 2))
		   (pcount            (vector-ref testinfo 3))
		   (fcount            (vector-ref testinfo 4))
		   (new-status        #f))
	      (set! new-status
		    (cond
		     ((> fcount 0)         "FAIL")
		     ((> num-items-skip 0) "SKIP")
		     ((> pcount 0)         "PASS")))
	      (if (or (not (equal? curr-state new-state))
		      (not (equal? curr-status new-status)))
		  (cdb:test-set-state-status-by-name *runremote* new-state new-status run-id test-name "")))))
	#f)
      #f)

;; speed up for common cases with a little logic
(define (mt:test-set-state-status-by-id test-id newstate newstatus newcomment)
  (cond
   ((and newstate newstatus newcomment)