Index: db.scm ================================================================== --- db.scm +++ db.scm @@ -569,18 +569,19 @@ (begin (debug:print 4 lin) (db:csv->test-data db test-id lin) (loop (read-line)))))) ;; roll up the current results. - (db:test-data-rollup db test-id))) + ;; FIXME: Add the status to + (db:test-data-rollup db test-id #f))) ;; WARNING: Do NOT call this for the parent test on an iterated test ;; Roll up test_data pass/fail results ;; look at the test_data status field, ;; if all are pass (any case) and the test status is PASS or NULL or '' then set test status to PASS. ;; if one or more are fail (any case) then set test status to PASS, non "pass" or "fail" are ignored -(define (db:test-data-rollup db test-id) +(define (db:test-data-rollup db test-id status) (sqlite3:execute db "UPDATE tests SET fail_count=(SELECT count(id) FROM test_data WHERE test_id=? AND status like 'fail'), pass_count=(SELECT count(id) FROM test_data WHERE test_id=? AND status like 'pass') @@ -591,11 +592,12 @@ (sqlite3:execute db "UPDATE tests SET status=CASE WHEN (SELECT fail_count FROM tests WHERE id=?) > 0 THEN 'FAIL' - WHEN (SELECT pass_count FROM tests WHERE id=?) > 0 + WHEN (SELECT pass_count FROM tests WHERE id=?) > 0 AND + (SELECT status FROM tests WHERE id=?) NOT IN ('WARN','FAIL') THEN 'PASS' ELSE status END WHERE id=?;" test-id test-id test-id)) Index: launch.scm ================================================================== --- launch.scm +++ launch.scm @@ -302,13 +302,17 @@ ;; "FAIL") ;; "FAIL") ;; New logic based on rollup-status (cond ((not (vector-ref exit-info 1)) "FAIL") ;; job failed to run - ((eq? rollup-status 0) "PASS") + ((eq? rollup-status 0) + ;; if the current status is AUTO the defer to the calculated value (i.e. leave this AUTO) + (if (equal? (db:test-get-status testinfo) "AUTO") "AUTO" "PASS")) ((eq? rollup-status 1) "FAIL") - ((eq? rollup-status 2) "WARN") + ((eq? rollup-status 2) + ;; if the current status is AUTO the defer to the calculated value but qualify (i.e. make this AUTO-WARN) + (if (equal? (db:test-get-status testinfo) "AUTO") "AUTO-WARN" "WARN")) (else "FAIL")) itemdat (args:get-arg "-m") #f))) ;; for automated creation of the rollup html file this is a good place... (if (not (equal? item-path "")) (tests:summarize-items db run-id test-name #f)) ;; don't force - just update if no Index: runs.scm ================================================================== --- runs.scm +++ runs.scm @@ -214,12 +214,12 @@ (if (and state status) (sqlite3:execute db "UPDATE tests SET state=?,status=?,event_time=strftime('%s','now') WHERE run_id=? AND testname=? AND item_path=?;" state real-status run-id test-name item-path)) ;; if status is "AUTO" then call rollup - (if (and test-id state status (equal? status "AUTO")) - (db:test-data-rollup db test-id)) + (if (and test-id state status (or (equal? status "AUTO")(equal? status "AUTO-WARN"))) + (db:test-data-rollup db test-id status)) ;; add metadata (need to do this way to avoid SQL injection issues) ;; :first_err ;; (let ((val (hash-table-ref/default otherdat ":first_err" #f))) ADDED tests/tests/ezlog_fail_then_pass/firststep.logpro Index: tests/tests/ezlog_fail_then_pass/firststep.logpro ================================================================== --- /dev/null +++ tests/tests/ezlog_fail_then_pass/firststep.logpro @@ -0,0 +1,10 @@ +;; (c) 2006,2007,2008,2009 Matthew Welland matt@kiatoa.com +;; +;; License GPL. + + +(expect:required in "LogFileBody" > 0 "Must be some files in the dir" #/.*/) + +(expect:ignore in "LogFileBody" < 99 "Ignore the word error in comments" #/^\/\/.*error/) +(expect:warning in "LogFileBody" = 0 "Any warning" #/WARNING/) +(expect:error in "LogFileBody" = 0 "Any error" (list #/ERROR/ #/error/)) ;; but disallow any other errors ADDED tests/tests/ezlog_fail_then_pass/main.sh Index: tests/tests/ezlog_fail_then_pass/main.sh ================================================================== --- /dev/null +++ tests/tests/ezlog_fail_then_pass/main.sh @@ -0,0 +1,11 @@ +#!/bin/bash + +megatest -step yepstep :state start :status n/a +ls /tmp +megatest -step yepstep :state end :status $? + +megatest -load-test-data << EOF +OPER,du, 1.2, 1.2, < , GBytes ,System didn't use too much space +EOF + +megatest -test-status :state COMPLETED :status AUTO ADDED tests/tests/ezlog_fail_then_pass/testconfig Index: tests/tests/ezlog_fail_then_pass/testconfig ================================================================== --- /dev/null +++ tests/tests/ezlog_fail_then_pass/testconfig @@ -0,0 +1,13 @@ +[setup] + +[ezsteps] +firststep main.sh + +[test_meta] +author matt +owner bob +description This test runs a single ezstep which is logpro clean + but fails based on -test-data loaded. + +tags first,single +reviewed 09/10/2011, by Matt