Skip to content

Commit d1aeae8

Browse files
save results in .tg for later analysis
1 parent f2ba32f commit d1aeae8

6 files changed

Lines changed: 78 additions & 43 deletions

File tree

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1 +1,2 @@
11
target
2+
.tg/*

bin/repl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,6 @@
22
# Note: First you must run mvn dependency:build-classpath -Dmdep.outputFile=bin/maven-classpath
33
CLASSPATH=src/main/clojure:src/test/clojure:src/examples/clojure:`cat bin/maven-classpath`
44

5-
java -server -Xmx2GB -cp $CLASSPATH clojure.main "$@"
5+
java -server -Xmx2GB $CTG_JAVA_OPTS -cp $CLASSPATH clojure.main "$@"
66

77

data-model.org

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,6 @@
4242
| :test/group | x | x | | | | | info |
4343
| :test/iter | | | x | | | | info |
4444
| :test/test | x | x | | | x | | info |
45-
| :test/seed | | | | | | | info |
4645
| :test/fail | | | | | | x | warn |
4746
| :test/pass | | | | | | | info |
4847
| :assert/pass | | | | | | | debug |

src/main/clojure/clojure/test/generative/event.clj

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,15 @@
3131
(symbol (str ns "/" (.sym v)))
3232
(.sym v))))
3333

34+
(defn level-enabled?
35+
"Is the event-level enabled?"
36+
[event-level enable-level]
37+
(case enable-level
38+
:error (case event-level (:error) true false)
39+
:warn (case event-level (:error :warn) true false)
40+
:info (case event-level (:error :warn :info) true false)
41+
:debug true))
42+
3443
(def ^long pid
3544
"Process id"
3645
(read-string (.getName (java.lang.management.ManagementFactory/getRuntimeMXBean))))

src/main/clojure/clojure/test/generative/io.clj

Lines changed: 13 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -22,12 +22,17 @@
2222
(defn serialized
2323
"Returns a function that calls f for side effects, async,
2424
serialized by an agent"
25-
[f]
26-
(fn [& args]
27-
(send-off serializer
28-
(fn [_]
29-
(apply f args)
30-
nil))))
25+
([f] (serialized f serializer))
26+
([f agt]
27+
(fn [& args]
28+
(send-off agt
29+
(fn [_]
30+
(try
31+
(apply f args)
32+
(catch Throwable t
33+
(.printStackTrace t)))
34+
nil))
35+
nil)))
3136

3237
;; TODO set from Java property?
3338
(def ^:private event-print-length 100)
@@ -41,31 +46,18 @@
4146
(clojure.core/pr-str s)))
4247

4348
(def println
44-
"Print with event print settings"
49+
"threadsafe print with event print settings"
4550
(serialized clojure.core/println))
4651

4752
(def pprint
48-
"Print with event print settings"
53+
"threadsafe pprint with event print settings"
4954
(serialized
5055
(fn [s]
5156
(binding [*print-length* event-print-length
5257
*print-level* event-print-level]
5358
(pprint/pprint s)
5459
(flush)))))
5560

56-
(def last-dot (atom 0))
57-
58-
#_(defn dot-progress
59-
"Prints a dot per event, throttled to ten dots/sec."
60-
[{:keys [tstamp]}]
61-
(when (< 100 (- tstamp @last-dot))
62-
(reset! last-dot tstamp)
63-
(send-off serializer
64-
(fn [_]
65-
(print ".")
66-
(flush)
67-
nil))))
68-
6961
(def report-hierarchy
7062
(reduce
7163
#(apply derive %1 %2)
@@ -78,7 +70,6 @@
7870

7971
(defmulti console-reporter :type :hierarchy #'report-hierarchy)
8072

81-
#_(defmethod console-reporter :progress [m] (dot-progress m))
8273
(defmethod console-reporter :ignore [_])
8374
(defmethod console-reporter :test/test
8475
[{:keys [tags msec count] :as m}]

src/main/clojure/clojure/test/generative/runner.clj

Lines changed: 54 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,8 @@
99

1010
(ns clojure.test.generative.runner
1111
(:require
12+
[clojure.java.io :as jio]
13+
[clojure.pprint :as pprint]
1214
[clojure.tools.namespace :as ns]
1315
[clojure.test.generative.config :as config]
1416
[clojure.test.generative.event :as event]
@@ -48,11 +50,11 @@
4850
(let [name (test-name test)
4951
f (test-fn test)
5052
input (test-input test)]
51-
(event/report :test/iter :name name :args input :tags #{:begin})
53+
(event/report :test/iter :level :debug :name name :args input :tags #{:begin})
5254
(try
5355
(let [result (apply f input)]
5456
(when-not (realized? *failed*)
55-
(event/report :test/iter :name name :return result :tags #{:end})))
57+
(event/report :test/iter :level :debug :name name :return result :tags #{:end})))
5658
(catch Throwable t
5759
(deliver *failed* :error)
5860
(event/report :error :name name :exception t)))))
@@ -66,11 +68,10 @@
6668
(map
6769
#(future
6870
(try
69-
(event/report :test/seed :test/seed (+ % 42))
7071
(binding [gen/*seed* (+ % 42)
7172
gen/*rnd* (java.util.Random. gen/*seed*)
7273
*failed* (promise)]
73-
(event/report :test/test :tags #{:begin})
74+
(event/report :test/test :tags #{:begin} :test/seed (+ % 42) :name (test-name test))
7475
(loop [iter 0]
7576
(let [result (run-iter test)
7677
now (System/currentTimeMillis)
@@ -184,26 +185,60 @@
184185
(:test/fail result)
185186
(:error result)))
186187

188+
(def process-id
189+
(delay
190+
(java.util.UUID/randomUUID)))
191+
192+
(def storage-writer
193+
(delay
194+
(let [f (str ".tg/" @process-id)]
195+
(jio/make-parents f)
196+
(jio/writer f :append true))))
197+
198+
(def store-agent (agent nil))
199+
200+
(def store
201+
"store data in .tg/{process-id}"
202+
(io/serialized
203+
(fn [e]
204+
(binding [*print-length* nil
205+
*print-level* nil
206+
*out* @storage-writer]
207+
(println e)))
208+
store-agent))
209+
210+
(defn save
211+
"Save results at info level or higher, using store."
212+
[e]
213+
(when (event/level-enabled? (:level e) :info)
214+
(store e)))
215+
216+
(defn test-dirs
217+
"Runs tests in dirs, returning a map of test lib keyword
218+
to summary data"
219+
[& dirs]
220+
(let [nses (mapcat #(ns/find-namespaces-in-dir (java.io.File. ^String %)) dirs)
221+
conf (config/config)]
222+
(doseq [ns nses] (require ns))
223+
(event/install-default-handlers)
224+
(run-all-tests nses (:threads conf) (:msec conf))))
225+
187226
(defn -main
188227
"Command line entry point, runs all tests in dirs using clojure.test and
189228
test.generative. Calls System.exit!"
190229
[& dirs]
191230
(if (seq dirs)
192-
(let [nses (mapcat #(ns/find-namespaces-in-dir (java.io.File. ^String %)) dirs)
193-
conf (config/config)]
194-
(doseq [ns nses] (require ns))
195-
(event/install-default-handlers)
196-
(try
197-
(let [results (run-all-tests nses (:threads conf) (:msec conf))]
198-
(doseq [[k v] results]
199-
(println (str "\nFramework " k))
200-
(println v))
201-
(System/exit (if (some failed? (vals results)) 1 0)))
202-
(catch Throwable t
203-
(.printStackTrace t)
204-
(System/exit -1))
205-
(finally
206-
(shutdown-agents))))
231+
(try
232+
(let [results (apply test-dirs dirs)]
233+
(doseq [[k v] results]
234+
(println (str "\nFramework " k))
235+
(println v))
236+
(System/exit (if (some failed? (vals results)) 1 0)))
237+
(catch Throwable t
238+
(.printStackTrace t)
239+
(System/exit -1))
240+
(finally
241+
(shutdown-agents)))
207242
(do
208243
(println "Specify at least one directory with tests")
209244
(System/exit -1))))

0 commit comments

Comments
 (0)