Author: philharveyonline
Date: Mon Jan 21 17:15:09 2013
New Revision: 1436493

URL: http://svn.apache.org/viewvc?rev=1436493&view=rev
Log:
PROTON-192: Changes to the Java/Python thunking layer and JNI implementations 
to allow more system
tests to pass (all passing except message tests).

Modified:
    
qpid/proton/branches/jni-binding/proton-c/bindings/java/jni/src/main/java/org/apache/qpid/proton/engine/jni/JNIEngineFactory.java
    
qpid/proton/branches/jni-binding/proton-c/bindings/java/jni/src/main/java/org/apache/qpid/proton/engine/jni/JNISslDomain.java
    
qpid/proton/branches/jni-binding/proton-c/bindings/java/jni/src/main/java/org/apache/qpid/proton/engine/jni/JNITransport.java
    
qpid/proton/branches/jni-binding/proton-c/bindings/java/jni/src/main/java/org/apache/qpid/proton/jni/JNIFactory.java
    
qpid/proton/branches/jni-binding/proton-j/proton-api/src/main/java/org/apache/qpid/proton/ProtonFactoryLoader.java
    
qpid/proton/branches/jni-binding/proton-j/proton-api/src/main/java/org/apache/qpid/proton/engine/EngineFactory.java
    
qpid/proton/branches/jni-binding/proton-j/proton-api/src/main/java/org/apache/qpid/proton/engine/SslDomain.java
    
qpid/proton/branches/jni-binding/proton-j/proton-api/src/main/scripts/proton.py
    
qpid/proton/branches/jni-binding/proton-j/proton/src/main/java/org/apache/qpid/proton/engine/impl/EngineFactoryImpl.java
    
qpid/proton/branches/jni-binding/tests/src/test/java/org/apache/qpid/proton/JythonTest.java

Modified: 
qpid/proton/branches/jni-binding/proton-c/bindings/java/jni/src/main/java/org/apache/qpid/proton/engine/jni/JNIEngineFactory.java
URL: 
http://svn.apache.org/viewvc/qpid/proton/branches/jni-binding/proton-c/bindings/java/jni/src/main/java/org/apache/qpid/proton/engine/jni/JNIEngineFactory.java?rev=1436493&r1=1436492&r2=1436493&view=diff
==============================================================================
--- 
qpid/proton/branches/jni-binding/proton-c/bindings/java/jni/src/main/java/org/apache/qpid/proton/engine/jni/JNIEngineFactory.java
 (original)
+++ 
qpid/proton/branches/jni-binding/proton-c/bindings/java/jni/src/main/java/org/apache/qpid/proton/engine/jni/JNIEngineFactory.java
 Mon Jan 21 17:15:09 2013
@@ -18,28 +18,21 @@
  */
 package org.apache.qpid.proton.engine.jni;
 
-import java.util.logging.Logger;
-
 import org.apache.qpid.proton.ProtonCEquivalent;
 import org.apache.qpid.proton.engine.Connection;
 import org.apache.qpid.proton.engine.EngineFactory;
+import org.apache.qpid.proton.engine.SslDomain;
+import org.apache.qpid.proton.engine.SslPeerDetails;
 import org.apache.qpid.proton.engine.Transport;
 import org.apache.qpid.proton.jni.JNIFactory;
 
 public class JNIEngineFactory extends JNIFactory implements EngineFactory
 {
-    private static final Logger LOGGER = 
Logger.getLogger(JNIEngineFactory.class.getName());
-
     @Override
     @ProtonCEquivalent("pn_connection")
     public Connection createConnection()
     {
-        LOGGER.info("PHDEBUG about to create JNIConnection");
-
-        JNIConnection jniConnection = new JNIConnection();
-        LOGGER.info("PHDEBUG created JNIConnection");
-
-        return jniConnection;
+        return new JNIConnection();
     }
 
     @Override
@@ -48,4 +41,30 @@ public class JNIEngineFactory extends JN
         return new JNITransport();
     }
 
+    @Override
+    public SslDomain createSslDomain()
+    {
+        return new JNISslDomain();
+    }
+
+    @Override
+    public SslPeerDetails createSslPeerDetails(final String hostname, final 
int port)
+    {
+        return new SslPeerDetails()
+        {
+
+            @Override
+            public int getPort()
+            {
+                return port;
+            }
+
+            @Override
+            public String getHostname()
+            {
+                return hostname;
+            }
+        };
+    }
+
 }

Modified: 
qpid/proton/branches/jni-binding/proton-c/bindings/java/jni/src/main/java/org/apache/qpid/proton/engine/jni/JNISslDomain.java
URL: 
http://svn.apache.org/viewvc/qpid/proton/branches/jni-binding/proton-c/bindings/java/jni/src/main/java/org/apache/qpid/proton/engine/jni/JNISslDomain.java?rev=1436493&r1=1436492&r2=1436493&view=diff
==============================================================================
--- 
qpid/proton/branches/jni-binding/proton-c/bindings/java/jni/src/main/java/org/apache/qpid/proton/engine/jni/JNISslDomain.java
 (original)
+++ 
qpid/proton/branches/jni-binding/proton-c/bindings/java/jni/src/main/java/org/apache/qpid/proton/engine/jni/JNISslDomain.java
 Mon Jan 21 17:15:09 2013
@@ -19,8 +19,12 @@
  */
 package org.apache.qpid.proton.engine.jni;
 
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
 import org.apache.qpid.proton.ProtonCEquivalent;
 import org.apache.qpid.proton.engine.SslDomain;
+import org.apache.qpid.proton.engine.TransportException;
 import org.apache.qpid.proton.jni.Proton;
 import org.apache.qpid.proton.jni.SWIGTYPE_p_pn_ssl_domain_t;
 import org.apache.qpid.proton.jni.pn_ssl_mode_t;
@@ -28,11 +32,13 @@ import org.apache.qpid.proton.jni.pn_ssl
 
 public class JNISslDomain implements SslDomain
 {
+    private static final Logger LOGGER = 
Logger.getLogger(JNISslDomain.class.getName());
 
     private SWIGTYPE_p_pn_ssl_domain_t _impl;
     private Mode _mode;
     private VerifyMode _verifyMode;
     private String _certificateFile;
+    private String _trustedCaDb;
     private String _privateKeyFile;
     private String _privateKeyPassword;
     private boolean _allowUnsecured;
@@ -73,7 +79,20 @@ public class JNISslDomain implements Ssl
         _certificateFile = certificate_file;
         _privateKeyFile = private_key_file;
         _privateKeyPassword = password;
-        
Proton.pn_ssl_domain_set_credentials(_impl,certificate_file,private_key_file,password);
+        int retVal = 
Proton.pn_ssl_domain_set_credentials(_impl,certificate_file,private_key_file,password);
+        checkProtonCReturnValue(retVal);
+    }
+
+    private void checkProtonCReturnValue(int retVal)
+    {
+        if(retVal != 0)
+        {
+            if(LOGGER.isLoggable(Level.FINE))
+            {
+                LOGGER.log(Level.FINE, "Non-zero return value: " + retVal, new 
Exception("<dummy exception to generate stack trace>"));
+            }
+            throw new TransportException("Unexpected return value: " + retVal);
+        }
     }
 
     @Override
@@ -99,14 +118,15 @@ public class JNISslDomain implements Ssl
     @ProtonCEquivalent("pn_ssl_domain_set_trusted_ca_db")
     public void setTrustedCaDb(String certificate_db)
     {
-        Proton.pn_ssl_domain_set_trusted_ca_db(_impl, certificate_db);
-
+        _trustedCaDb = certificate_db;
+        int retVal = Proton.pn_ssl_domain_set_trusted_ca_db(_impl, 
certificate_db);
+        checkProtonCReturnValue(retVal);
     }
 
     @Override
     public String getTrustedCaDb()
     {
-        return _certificateFile;
+        return _trustedCaDb;
     }
 
     @Override
@@ -114,8 +134,8 @@ public class JNISslDomain implements Ssl
     public void allowUnsecuredClient(boolean unused)
     {
         _allowUnsecured = true;
-        Proton.pn_ssl_domain_allow_unsecured_client(_impl);
-
+        int retVal = Proton.pn_ssl_domain_allow_unsecured_client(_impl);
+        checkProtonCReturnValue(retVal);
     }
 
     @Override
@@ -129,8 +149,8 @@ public class JNISslDomain implements Ssl
     public void setPeerAuthentication(VerifyMode mode)
     {
         _verifyMode = mode;
-        
Proton.pn_ssl_domain_set_peer_authentication(_impl,convertVerifyMode(mode),_certificateFile);
-
+        int retVal = 
Proton.pn_ssl_domain_set_peer_authentication(_impl,convertVerifyMode(mode),_trustedCaDb);
+        checkProtonCReturnValue(retVal);
     }
 
     private pn_ssl_verify_mode_t convertVerifyMode(VerifyMode mode)
@@ -144,6 +164,11 @@ public class JNISslDomain implements Ssl
             case VERIFY_PEER:
                 cMode = pn_ssl_verify_mode_t.PN_SSL_VERIFY_PEER;
                 break;
+            case VERIFY_PEER_NAME:
+                cMode = pn_ssl_verify_mode_t.PN_SSL_VERIFY_PEER_NAME;
+                break;
+            default:
+                throw new IllegalArgumentException("Unsupported verify mode " 
+ mode);
         }
 
         return cMode;

Modified: 
qpid/proton/branches/jni-binding/proton-c/bindings/java/jni/src/main/java/org/apache/qpid/proton/engine/jni/JNITransport.java
URL: 
http://svn.apache.org/viewvc/qpid/proton/branches/jni-binding/proton-c/bindings/java/jni/src/main/java/org/apache/qpid/proton/engine/jni/JNITransport.java?rev=1436493&r1=1436492&r2=1436493&view=diff
==============================================================================
--- 
qpid/proton/branches/jni-binding/proton-c/bindings/java/jni/src/main/java/org/apache/qpid/proton/engine/jni/JNITransport.java
 (original)
+++ 
qpid/proton/branches/jni-binding/proton-c/bindings/java/jni/src/main/java/org/apache/qpid/proton/engine/jni/JNITransport.java
 Mon Jan 21 17:15:09 2013
@@ -180,6 +180,7 @@ public class JNITransport implements Tra
         super.finalize();    
     }
 
+    // PHTODO delete main/pump
     public static void main(String args[])
     {
         System.loadLibrary("protonjni");
@@ -189,7 +190,6 @@ public class JNITransport implements Tra
         JNIConnection conn2 = new JNIConnection();
         t1.bind(conn1);
         t2.bind(conn2);
-
         conn1.open();
         conn2.open();
 

Modified: 
qpid/proton/branches/jni-binding/proton-c/bindings/java/jni/src/main/java/org/apache/qpid/proton/jni/JNIFactory.java
URL: 
http://svn.apache.org/viewvc/qpid/proton/branches/jni-binding/proton-c/bindings/java/jni/src/main/java/org/apache/qpid/proton/jni/JNIFactory.java?rev=1436493&r1=1436492&r2=1436493&view=diff
==============================================================================
--- 
qpid/proton/branches/jni-binding/proton-c/bindings/java/jni/src/main/java/org/apache/qpid/proton/jni/JNIFactory.java
 (original)
+++ 
qpid/proton/branches/jni-binding/proton-c/bindings/java/jni/src/main/java/org/apache/qpid/proton/jni/JNIFactory.java
 Mon Jan 21 17:15:09 2013
@@ -18,6 +18,7 @@
  */
 package org.apache.qpid.proton.jni;
 
+import java.util.logging.Level;
 import java.util.logging.Logger;
 
 public abstract class JNIFactory
@@ -28,11 +29,17 @@ public abstract class JNIFactory
     {
         String libname = "proton-swig";
 
-        LOGGER.info("About to load library " + libname);
+        if(LOGGER.isLoggable(Level.FINE))
+        {
+            LOGGER.fine("About to load library " + libname);
+        }
 
         System.loadLibrary(libname);
 
-        LOGGER.info("Successfully loaded library " + libname);
+        if(LOGGER.isLoggable(Level.FINE))
+        {
+            LOGGER.fine("Successfully loaded library " + libname);
+        }
     }
 
 }

Modified: 
qpid/proton/branches/jni-binding/proton-j/proton-api/src/main/java/org/apache/qpid/proton/ProtonFactoryLoader.java
URL: 
http://svn.apache.org/viewvc/qpid/proton/branches/jni-binding/proton-j/proton-api/src/main/java/org/apache/qpid/proton/ProtonFactoryLoader.java?rev=1436493&r1=1436492&r2=1436493&view=diff
==============================================================================
--- 
qpid/proton/branches/jni-binding/proton-j/proton-api/src/main/java/org/apache/qpid/proton/ProtonFactoryLoader.java
 (original)
+++ 
qpid/proton/branches/jni-binding/proton-j/proton-api/src/main/java/org/apache/qpid/proton/ProtonFactoryLoader.java
 Mon Jan 21 17:15:09 2013
@@ -20,6 +20,7 @@ package org.apache.qpid.proton;
 
 import java.util.Iterator;
 import java.util.ServiceLoader;
+import java.util.logging.Level;
 import java.util.logging.Logger;
 
 public class ProtonFactoryLoader<C>
@@ -35,7 +36,10 @@ public class ProtonFactoryLoader<C>
             throw new IllegalStateException("Can't find service loader for " + 
factoryInterface.getName());
         }
         C factory = serviceLoaderIterator.next();
-        LOGGER.info("loadFactory returning " + factory);
+        if(LOGGER.isLoggable(Level.FINE))
+        {
+            LOGGER.fine("loadFactory returning " + factory);
+        }
         return factory;
     }
 

Modified: 
qpid/proton/branches/jni-binding/proton-j/proton-api/src/main/java/org/apache/qpid/proton/engine/EngineFactory.java
URL: 
http://svn.apache.org/viewvc/qpid/proton/branches/jni-binding/proton-j/proton-api/src/main/java/org/apache/qpid/proton/engine/EngineFactory.java?rev=1436493&r1=1436492&r2=1436493&view=diff
==============================================================================
--- 
qpid/proton/branches/jni-binding/proton-j/proton-api/src/main/java/org/apache/qpid/proton/engine/EngineFactory.java
 (original)
+++ 
qpid/proton/branches/jni-binding/proton-j/proton-api/src/main/java/org/apache/qpid/proton/engine/EngineFactory.java
 Mon Jan 21 17:15:09 2013
@@ -22,4 +22,10 @@ public interface EngineFactory
 {
     Connection createConnection();
     Transport createTransport();
+    SslDomain createSslDomain();
+    /**
+     * PHTODO consider overloading createSslPeerDetails(sessionId)
+     * for better fit with the C world
+     */
+    SslPeerDetails createSslPeerDetails(String hostname, int port);
 }

Modified: 
qpid/proton/branches/jni-binding/proton-j/proton-api/src/main/java/org/apache/qpid/proton/engine/SslDomain.java
URL: 
http://svn.apache.org/viewvc/qpid/proton/branches/jni-binding/proton-j/proton-api/src/main/java/org/apache/qpid/proton/engine/SslDomain.java?rev=1436493&r1=1436492&r2=1436493&view=diff
==============================================================================
--- 
qpid/proton/branches/jni-binding/proton-j/proton-api/src/main/java/org/apache/qpid/proton/engine/SslDomain.java
 (original)
+++ 
qpid/proton/branches/jni-binding/proton-j/proton-api/src/main/java/org/apache/qpid/proton/engine/SslDomain.java
 Mon Jan 21 17:15:09 2013
@@ -47,7 +47,7 @@ public interface SslDomain
          * by a trusted CA and are using an authenticated cipher
          */
         VERIFY_PEER,
-
+        VERIFY_PEER_NAME,
         /**
          * does not require a valid certificate, and permits use of ciphers 
that
          * do not provide authentication

Modified: 
qpid/proton/branches/jni-binding/proton-j/proton-api/src/main/scripts/proton.py
URL: 
http://svn.apache.org/viewvc/qpid/proton/branches/jni-binding/proton-j/proton-api/src/main/scripts/proton.py?rev=1436493&r1=1436492&r2=1436493&view=diff
==============================================================================
--- 
qpid/proton/branches/jni-binding/proton-j/proton-api/src/main/scripts/proton.py 
(original)
+++ 
qpid/proton/branches/jni-binding/proton-j/proton-api/src/main/scripts/proton.py 
Mon Jan 21 17:15:09 2013
@@ -19,12 +19,12 @@
 from uuid import UUID
 
 from org.apache.qpid.proton import ProtonFactoryLoader
-from org.apache.qpid.proton.engine import EndpointState, TransportException, 
Sasl, SslDomain, EngineFactory
-#from org.apache.qpid.proton.engine.impl.ssl import SslDomainImpl, 
SslPeerDetailsImpl
+from org.apache.qpid.proton.engine import \
+    EngineFactory, Transport as JTransport, Sender as JSender, Receiver as 
JReceiver, \
+    Sasl, SslDomain as JSslDomain, \
+    EndpointState, TransportException
 from org.apache.qpid.proton.message import MessageFormat, MessageFactory
-#from org.apache.qpid.proton.message.impl import MessageImpl
 from org.apache.qpid.proton.messenger import MessengerException, Status
-#from org.apache.qpid.proton.messenger.impl import MessengerImpl
 from org.apache.qpid.proton.amqp.messaging import Source, Target, Accepted, 
AmqpValue
 from org.apache.qpid.proton.amqp import UnsignedInteger
 from jarray import zeros
@@ -53,11 +53,10 @@ STATUSES = {
 MANUAL = "MANUAL"
 AUTOMATIC = "AUTOMATIC"
 
-print "PHDEBUG about to load factories"
 protonFactoryLoader = ProtonFactoryLoader()
 engineFactory = protonFactoryLoader.loadFactory(EngineFactory)
 messageFactory = protonFactoryLoader.loadFactory(MessageFactory)
-print "PHDEBUG engineFactory = %s " % engineFactory
+
 
 class Endpoint(object):
 
@@ -219,9 +218,9 @@ class Session(Endpoint):
 
 def wrap_link(impl):
   if impl is None: return None
-  elif isinstance(impl, SenderImpl):
+  elif isinstance(impl, JSender):
     return Sender(impl)
-  elif isinstance(impl, ReceiverImpl):
+  elif isinstance(impl, JReceiver):
     return Receiver(impl)
   else:
     raise Exception("unknown type")
@@ -348,7 +347,7 @@ class Receiver(Link):
     n = self.impl.recv(output, 0, size)
     if n >= 0:
       return output.tostring()[:n]
-    elif n == TransportImpl.END_OF_STREAM:
+    elif n == JTransport.END_OF_STREAM:
       return None
     else:
       raise Exception(n)
@@ -440,13 +439,19 @@ class Transport(object):
     n = self.impl.output(output, 0, size)
     if n >= 0:
       return output.tostring()[:n]
-    elif n == Transport.END_OF_STREAM:
+    elif n == JTransport.END_OF_STREAM:
       return None
     else:
-      raise Exception("XXX: %s" % n)
+      raise Exception("Unexpected return value from output: %s" % n)
 
   def input(self, bytes):
-    return self.impl.input(bytes, 0, len(bytes))
+    n = self.impl.input(bytes, 0, len(bytes))
+    if n >= 0:
+      return n
+    elif n == JTransport.END_OF_STREAM:
+      return None
+    else:
+      raise Exception("Unexpected return value from input: %s" % n)
 
   def _get_max_frame_size(self):
     #return pn_transport_get_max_frame(self._trans)
@@ -802,7 +807,7 @@ class SASL(object):
     n = self._sasl.recv(output, 0, size)
     if n >= 0:
       return output.tostring()[:n]
-    elif n == Transport.END_OF_STREAM:
+    elif n == JTransport.END_OF_STREAM:
       return None
     else:
       raise Exception(n)
@@ -832,14 +837,14 @@ class SSLUnavailable(SSLException):
 
 class SSLDomain(object):
 
-  MODE_SERVER = SslDomain.Mode.SERVER
-  MODE_CLIENT = SslDomain.Mode.CLIENT
-  VERIFY_PEER = SslDomain.VerifyMode.VERIFY_PEER
-  ANONYMOUS_PEER = SslDomain.VerifyMode.ANONYMOUS_PEER
-  VERIFY_PEER_NAME = None  # TBD
+  MODE_SERVER = JSslDomain.Mode.SERVER
+  MODE_CLIENT = JSslDomain.Mode.CLIENT
+  VERIFY_PEER = JSslDomain.VerifyMode.VERIFY_PEER
+  VERIFY_PEER_NAME = JSslDomain.VerifyMode.VERIFY_PEER_NAME
+  ANONYMOUS_PEER = JSslDomain.VerifyMode.ANONYMOUS_PEER
 
   def __init__(self, mode):
-    self._domain = SslDomainImpl()
+    self._domain = engineFactory.createSslDomain()
     self._domain.init(mode)
 
   def set_credentials(self, cert_file, key_file, password):
@@ -849,9 +854,11 @@ class SSLDomain(object):
     self._domain.setTrustedCaDb(certificate_db)
 
   def set_peer_authentication(self, verify_mode, trusted_CAs=None):
-    self._domain.setPeerAuthentication(verify_mode)
+    # PHTODO the following two method calls have to occur in the following 
order
+    # otherwise tests fail with proton-jni.  It is not clear yet why.
     if trusted_CAs is not None:
       self._domain.setTrustedCaDb(trusted_CAs)
+    self._domain.setPeerAuthentication(verify_mode)
 
   def allow_unsecured_client(self, allow_unsecured = True):
     self._domain.allowUnsecuredClient(allow_unsecured)
@@ -859,7 +866,7 @@ class SSLDomain(object):
 class SSLSessionDetails(object):
 
   def __init__(self, session_id):
-    self._session_details = SslPeerDetailsImpl(session_id, 1)
+    self._session_details = engineFactory.createSslPeerDetails(session_id, 1)
 
 class SSL(object):
 

Modified: 
qpid/proton/branches/jni-binding/proton-j/proton/src/main/java/org/apache/qpid/proton/engine/impl/EngineFactoryImpl.java
URL: 
http://svn.apache.org/viewvc/qpid/proton/branches/jni-binding/proton-j/proton/src/main/java/org/apache/qpid/proton/engine/impl/EngineFactoryImpl.java?rev=1436493&r1=1436492&r2=1436493&view=diff
==============================================================================
--- 
qpid/proton/branches/jni-binding/proton-j/proton/src/main/java/org/apache/qpid/proton/engine/impl/EngineFactoryImpl.java
 (original)
+++ 
qpid/proton/branches/jni-binding/proton-j/proton/src/main/java/org/apache/qpid/proton/engine/impl/EngineFactoryImpl.java
 Mon Jan 21 17:15:09 2013
@@ -20,7 +20,11 @@ package org.apache.qpid.proton.engine.im
 
 import org.apache.qpid.proton.engine.Connection;
 import org.apache.qpid.proton.engine.EngineFactory;
+import org.apache.qpid.proton.engine.SslDomain;
+import org.apache.qpid.proton.engine.SslPeerDetails;
 import org.apache.qpid.proton.engine.Transport;
+import org.apache.qpid.proton.engine.impl.ssl.SslDomainImpl;
+import org.apache.qpid.proton.engine.impl.ssl.SslPeerDetailsImpl;
 
 public class EngineFactoryImpl implements EngineFactory
 {
@@ -37,4 +41,16 @@ public class EngineFactoryImpl implement
         return new TransportImpl();
     }
 
+    @Override
+    public SslDomain createSslDomain()
+    {
+        return new SslDomainImpl();
+    }
+
+    @Override
+    public SslPeerDetails createSslPeerDetails(String hostname, int port)
+    {
+        return new SslPeerDetailsImpl(hostname, port);
+    }
+
 }

Modified: 
qpid/proton/branches/jni-binding/tests/src/test/java/org/apache/qpid/proton/JythonTest.java
URL: 
http://svn.apache.org/viewvc/qpid/proton/branches/jni-binding/tests/src/test/java/org/apache/qpid/proton/JythonTest.java?rev=1436493&r1=1436492&r2=1436493&view=diff
==============================================================================
--- 
qpid/proton/branches/jni-binding/tests/src/test/java/org/apache/qpid/proton/JythonTest.java
 (original)
+++ 
qpid/proton/branches/jni-binding/tests/src/test/java/org/apache/qpid/proton/JythonTest.java
 Mon Jan 21 17:15:09 2013
@@ -20,9 +20,12 @@
  */
 package org.apache.qpid.proton;
 
+import static org.junit.Assert.fail;
+
 import java.io.File;
 import java.net.URISyntaxException;
 import java.net.URL;
+import java.util.logging.Level;
 import java.util.logging.Logger;
 
 import org.junit.Test;
@@ -73,7 +76,11 @@ public class JythonTest
             }
             else
             {
-                throw e;
+                if (LOGGER.isLoggable(Level.FINE))
+                {
+                    LOGGER.log(Level.FINE, "Jython interpreter failed. Test 
failures?", e);
+                }
+                fail(e.getMessage());
             }
         }
     }



---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscr...@qpid.apache.org
For additional commands, e-mail: commits-h...@qpid.apache.org

Reply via email to