Tests is frozen on ABCL and CCL on macOS
An attempt to run test on ABCL on macOS leads to inifity freez. Console output:
Armed Bear Common Lisp 1.9.2
Java 11.0.20 MacPorts
OpenJDK 64-Bit Server VM
Low-level initialization completed in 0.177 seconds.
Startup completed in 0.97 seconds.
Doing 33 pending tests of 33 tests total.
USOCKET-TEST::MAKE-SOCKET.1 USOCKET-TEST::MAKE-SOCKET.2
USOCKET-TEST::SOCKET-NO-CONNECT.1 USOCKET-TEST::SOCKET-NO-CONNECT.2
USOCKET-TEST::SOCKET-NO-CONNECT.3 USOCKET-TEST::SOCKET-FAILURE.1#<USOCKET:NETWORK-UNREACHABLE-ERROR {33386BBA}> is an instance of #<STANDARD-CLASS USOCKET:NETWORK-UNREACHABLE-ERROR {2DAD3960}>.
The following slots have :INSTANCE allocation:
FORMAT-CONTROL unbound
FORMAT-ARGUMENTS NIL
SOCKET NIL
Test USOCKET-TEST::SOCKET-FAILURE.2 failed
Form: (USOCKET-TEST::WITH-CAUGHT-CONDITIONS (USOCKET:TIMEOUT-ERROR NIL) (USOCKET:SOCKET-CONNECT USOCKET-TEST::+NON-EXISTING-HOST+ 80 :TIMEOUT 1) :UNREACH)
Expected value: NIL
Actual value: #<USOCKET:NETWORK-UNREACHABLE-ERROR {33386BBA}>.
USOCKET-TEST::SOCKET-CONNECT.1 USOCKET-TEST::SOCKET-CONNECT.2
USOCKET-TEST::SOCKET-CONNECT.3 USOCKET-TEST::SOCKET-STREAM.1
USOCKET-TEST::SOCKET-NAME.1 USOCKET-TEST::SOCKET-NAME.2
USOCKET-TEST::SOCKET-NAME.3 USOCKET-TEST::SOCKET-SHUTDOWN.1
USOCKET-TEST::SOCKET-SHUTDOWN.2 USOCKET-TEST::SOCKET-SHUTDOWN.3#<TYPE-ERROR {798BB63}> is an instance of #<STANDARD-CLASS TYPE-ERROR {3BD22695}>.
The following slots have :INSTANCE allocation:
FORMAT-CONTROL unbound
FORMAT-ARGUMENTS NIL
DATUM #<sun.nio.ch.SocketAdaptor Socket[unconnected] {25177465}>
EXPECTED-TYPE STREAM
Test USOCKET-TEST::SOCKET-LISTEN.1 failed
Form: (USOCKET-TEST::WITH-CAUGHT-CONDITIONS (NIL NIL) (USOCKET:WITH-SOCKET-LISTENER (LISTEN "localhost" 9999 :ELEMENT-TYPE (QUOTE (UNSIGNED-BYTE 8)) :REUSEADDRESS T :BACKLOG 1) (USOCKET:WITH-CLIENT-SOCKET (USOCKET-TEST::CLIENT USOCKET-TEST::CLIENT-STREAM "localhost" 9999 :ELEMENT-TYPE (QUOTE (UNSIGNED-BYTE 8))) (USOCKET:WITH-SERVER-SOCKET (USOCKET-TEST::SERVER (USOCKET:SOCKET-ACCEPT LISTEN)) (WRITE-BYTE 42 USOCKET-TEST::CLIENT-STREAM) (FORCE-OUTPUT USOCKET-TEST::CLIENT-STREAM) (READ-BYTE (USOCKET:SOCKET USOCKET-TEST::SERVER))))))
Expected value: 42
Actual value: #<TYPE-ERROR {798BB63}>.
#<TYPE-ERROR {4AD46DAE}> is an instance of #<STANDARD-CLASS TYPE-ERROR {3BD22695}>.
The following slots have :INSTANCE allocation:
FORMAT-CONTROL unbound
FORMAT-ARGUMENTS NIL
DATUM #<sun.nio.ch.SocketAdaptor Socket[unconnected] {794A1C7F}>
EXPECTED-TYPE STREAM
Test USOCKET-TEST::SOCKET-LISTEN.2 failed
Form: (USOCKET-TEST::WITH-CAUGHT-CONDITIONS (NIL NIL) (USOCKET:WITH-SOCKET-LISTENER (LISTEN "0.0.0.0" 9999 :ELEMENT-TYPE (QUOTE (UNSIGNED-BYTE 8)) :REUSEADDRESS T :BACKLOG 1) (USOCKET:WITH-CLIENT-SOCKET (USOCKET-TEST::CLIENT USOCKET-TEST::CLIENT-STREAM "localhost" 9999 :ELEMENT-TYPE (QUOTE (UNSIGNED-BYTE 8))) (USOCKET:WITH-SERVER-SOCKET (USOCKET-TEST::SERVER (USOCKET:SOCKET-ACCEPT LISTEN)) (WRITE-BYTE 42 USOCKET-TEST::CLIENT-STREAM) (FORCE-OUTPUT USOCKET-TEST::CLIENT-STREAM) (READ-BYTE (USOCKET:SOCKET USOCKET-TEST::SERVER))))))
Expected value: 42
Actual value: #<TYPE-ERROR {4AD46DAE}>.
#<JAVA-EXCEPTION java.net.UnknownHostException: xxx: nodename nor servname provided, or not known {38A29C85}> is an instance of #<STANDARD-CLASS JAVA-EXCEPTION {7C551505}>.
The following slots have :INSTANCE allocation:
FORMAT-CONTROL "Java exception: ~A."
FORMAT-ARGUMENTS (#<java.net.UnknownHostException java.net.UnknownHostException: x.... {3372C61C}>)
CAUSE #<java.net.UnknownHostException java.net.UnknownHostException: x.... {62458289}>
Test USOCKET-TEST::NS-HOST-NOT-FOUND-ERROR.1 failed
Form: (USOCKET-TEST::WITH-CAUGHT-CONDITIONS (USOCKET:NS-HOST-NOT-FOUND-ERROR NIL) (USOCKET:SOCKET-CONNECT "xxx" 123) T)
Expected value: NIL
Actual value: #<JAVA-EXCEPTION java.net.UnknownHostException: xxx: nodename nor servname provided, or not known {38A29C85}>.
#<USOCKET:CONNECTION-REFUSED-ERROR {47A2EAFB}> is an instance of #<STANDARD-CLASS USOCKET:CONNECTION-REFUSED-ERROR {59CE2A5F}>.
The following slots have :INSTANCE allocation:
FORMAT-CONTROL unbound
FORMAT-ARGUMENTS NIL
SOCKET NIL
Test USOCKET-TEST::TIMEOUT-ERROR.1 failed
Form: (USOCKET-TEST::WITH-CAUGHT-CONDITIONS (USOCKET:TIMEOUT-ERROR NIL) (USOCKET:SOCKET-CONNECT "common-lisp.net" 81 :TIMEOUT 0) T)
Expected value: NIL
Actual value: #<USOCKET:CONNECTION-REFUSED-ERROR {47A2EAFB}>.
USOCKET-TEST::CONNECTION-REFUSED-ERROR.1#<USOCKET:SOCKET-TYPE-NOT-SUPPORTED-ERROR {1B2C917A}> is an instance of #<STANDARD-CLASS USOCKET:SOCKET-TYPE-NOT-SUPPORTED-ERROR {48698A8C}>.
The following slots have :INSTANCE allocation:
FORMAT-CONTROL unbound
FORMAT-ARGUMENTS NIL
SOCKET #<sun.nio.ch.ServerSocketAdaptor ServerSocket[unbound] {1D20D5C}>
Test USOCKET-TEST::OPERATION-NOT-PERMITTED-ERROR.1 failed
Form: (USOCKET-TEST::WITH-CAUGHT-CONDITIONS (USOCKET:OPERATION-NOT-PERMITTED-ERROR NIL) (USOCKET:SOCKET-LISTEN "127.0.0.1" 81) T)
Expected value: NIL
Actual value: #<USOCKET:SOCKET-TYPE-NOT-SUPPORTED-ERROR {1B2C917A}>.
USOCKET-TEST::UDP-SEND.1 USOCKET-TEST::UDP-SEND.2
USOCKET-TEST::MARK-H-DAVID#<USOCKET:PROTOCOL-NOT-SUPPORTED-ERROR {43DFBD2B}> is an instance of #<STANDARD-CLASS USOCKET:PROTOCOL-NOT-SUPPORTED-ERROR {37ADF558}>.
The following slots have :INSTANCE allocation:
FORMAT-CONTROL unbound
FORMAT-ARGUMENTS NIL
SOCKET #<USOCKET:DATAGRAM-USOCKET {6CDB8E03}>
Test USOCKET-TEST::FRANK-JAMES failed
Form: (USOCKET-TEST::WITH-CAUGHT-CONDITIONS (USOCKET:CONNECTION-REFUSED-ERROR NIL) (LET ((USOCKET-TEST::SOCK (USOCKET:SOCKET-CONNECT "localhost" 1234 :PROTOCOL (QUOTE :DATAGRAM) :ELEMENT-TYPE (QUOTE (UNSIGNED-BYTE 8))))) (UNWIND-PROTECT (PROGN (USOCKET:SOCKET-SEND USOCKET-TEST::SOCK (MAKE-ARRAY 16 :ELEMENT-TYPE (QUOTE (UNSIGNED-BYTE 8)) :INITIAL-ELEMENT 0) 16) (LET ((USOCKET-TEST::BUFFER (MAKE-ARRAY 16 :ELEMENT-TYPE (QUOTE (UNSIGNED-BYTE 8)) :INITIAL-ELEMENT 0))) (USOCKET:SOCKET-RECEIVE USOCKET-TEST::SOCK USOCKET-TEST::BUFFER 16))) (USOCKET:SOCKET-CLOSE USOCKET-TEST::SOCK))))
Expected value: NIL
Actual value: #<USOCKET:PROTOCOL-NOT-SUPPORTED-ERROR {43DFBD2B}>.
CCL blocks much faster:
Doing 33 pending tests of 33 tests total.
USOCKET-TEST::MAKE-SOCKET.1 USOCKET-TEST::MAKE-SOCKET.2
USOCKET-TEST::SOCKET-NO-CONNECT.1 USOCKET-TEST::SOCKET-NO-CONNECT.2
USOCKET-TEST::SOCKET-NO-CONNECT.3 USOCKET-TEST::SOCKET-FAILURE.1#<USOCKET:HOST-UNREACHABLE-ERROR #x302000ABBBED>
Class: #<STANDARD-CLASS USOCKET:HOST-UNREACHABLE-ERROR>
Wrapper: #<CCL::CLASS-WRAPPER USOCKET:HOST-UNREACHABLE-ERROR #x3020008B578D>
Instance slots
USOCKET:SOCKET: NIL
Test USOCKET-TEST::SOCKET-FAILURE.2 failed
Form: (USOCKET-TEST::WITH-CAUGHT-CONDITIONS (USOCKET:TIMEOUT-ERROR NIL) (USOCKET:SOCKET-CONNECT USOCKET-TEST::+NON-EXISTING-HOST+ 80 :TIMEOUT 1) :UNREACH)
Expected value: NIL
Actual value: #<USOCKET:HOST-UNREACHABLE-ERROR #x302000ABBBED>.
USOCKET-TEST::SOCKET-CONNECT.1 USOCKET-TEST::SOCKET-CONNECT.2
USOCKET-TEST::SOCKET-CONNECT.3 USOCKET-TEST::SOCKET-STREAM.1
USOCKET-TEST::SOCKET-NAME.1 USOCKET-TEST::SOCKET-NAME.2
Sorry, the regression tests were not well-maintained for all OS/CL combinations. I will see what I can do.
As of the change mentioned in https://github.com/Clozure/ccl/issues/508, all of the usocket 0.8.7 tests pass on CCL.
Oh, I forgot to add that I made this minor local change to usocket:
diff --git a/backend/openmcl.lisp b/backend/openmcl.lisp
index 785bca9..b3f3321 100644
--- a/backend/openmcl.lisp
+++ b/backend/openmcl.lisp
@@ -66,6 +66,8 @@
#+ccl-1.12
(ccl::stream-is-closed-error
(error 'invalid-socket-stream-error :socket socket))
+ (ccl:output-timeout
+ (error 'timeout-error :socket socket))
(ccl:input-timeout
(error 'timeout-error :socket socket))
(ccl:communication-deadline-expired
Not sure if that's right, but it made all the tests pass on my Mac.
Oh, I forgot to add that I made this minor local change to usocket:
diff --git a/backend/openmcl.lisp b/backend/openmcl.lisp index 785bca9..b3f3321 100644 --- a/backend/openmcl.lisp +++ b/backend/openmcl.lisp @@ -66,6 +66,8 @@ #+ccl-1.12 (ccl::stream-is-closed-error (error 'invalid-socket-stream-error :socket socket)) + (ccl:output-timeout + (error 'timeout-error :socket socket)) (ccl:input-timeout (error 'timeout-error :socket socket)) (ccl:communication-deadline-expiredNot sure if that's right, but it made all the tests pass on my Mac.
I will merge this patch. Thanks!