Forcibly fail frlock.1 on Windows by means of a timeout
authorDavid Lichteblau <david@lichteblau.com>
Tue, 13 Nov 2012 17:13:08 +0000 (18:13 +0100)
committerDavid Lichteblau <david@lichteblau.com>
Tue, 13 Nov 2012 17:42:02 +0000 (18:42 +0100)
Presumably due to windows sb-thread bugs, this test often hangs on
Windows.  For now, establish a timeout, and mark the test as a known
failure on this platform.

contrib/sb-concurrency/sb-concurrency.asd
contrib/sb-concurrency/tests/test-frlock.lisp

index ba901c8..913f078 100644 (file)
 
 (defmethod asdf:perform ((o asdf:test-op)
                          (c (eql (asdf:find-system :sb-concurrency-tests))))
-  (or (funcall (intern "DO-TESTS" (find-package "SB-RT")))
-      (error "~S failed" 'asdf:test-op)))
+  (multiple-value-bind (soft strict pending)
+      (funcall (intern "DO-TESTS" (find-package "SB-RT")))
+    (fresh-line)
+    (unless strict
+      #+sb-testing-contrib
+      ;; We create TEST-PASSED from a shell script if tests passed.  But
+      ;; since the shell script only `touch'es it, we can actually create
+      ;; it ahead of time -- as long as we're certain that tests truly
+      ;; passed, hence the check for SOFT.
+      (when soft
+        (with-open-file (s #p"SYS:CONTRIB;SB-CONCURRENCY;TEST-PASSED"
+                           :direction :output)
+          (dolist (pend pending)
+            (format s "Expected failure: ~A~%" pend))))
+      (warn "ignoring expected failures in test-op"))
+    (unless soft
+      (error "test-op failed with unexpected failures"))))
index 466ce8a..dc38082 100644 (file)
 
 (in-package :sb-concurrency-test)
 
+(defmacro deftest* ((name &key fails-on) form &rest results)
+  `(progn
+     (when (sb-impl::featurep ',fails-on)
+       (pushnew ',name sb-rt::*expected-failures*))
+     (deftest ,name ,form ,@results)))
+
 (defun test-frlocks (&key (reader-count 100) (read-count 1000000)
                           (outer-read-pause 0) (inner-read-pause 0)
                           (writer-count 10) (write-count 10000)
                 nil))))
       (values (cdr w-e!) (cdr r-e!))))
 
-(deftest frlock.1
-    (test-frlocks)
+(deftest* (frlock.1 :fails-on :win32)
+    (handler-case
+        (sb-ext:with-timeout 60 (test-frlocks))
+      (sb-ext:timeout (c)
+        (error "~A" c)))
   nil
   nil)