You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commons-dev@ws.apache.org by ve...@apache.org on 2008/12/27 19:50:14 UTC

svn commit: r729656 - in /webservices/commons/trunk/modules/transport/modules/testkit/src/main/java/org/apache/axis2/transport/testkit/axis2: client/AxisTestClient.java util/MessageLevelMetricsCollectorImpl.java

Author: veithen
Date: Sat Dec 27 10:50:14 2008
New Revision: 729656

URL: http://svn.apache.org/viewvc?rev=729656&view=rev
Log:
SYNAPSE-491: Transport test kit: Give the transport sender a bit more time to update the metrics before triggering an assertion failure in AxisTestClient.

Modified:
    webservices/commons/trunk/modules/transport/modules/testkit/src/main/java/org/apache/axis2/transport/testkit/axis2/client/AxisTestClient.java
    webservices/commons/trunk/modules/transport/modules/testkit/src/main/java/org/apache/axis2/transport/testkit/axis2/util/MessageLevelMetricsCollectorImpl.java

Modified: webservices/commons/trunk/modules/transport/modules/testkit/src/main/java/org/apache/axis2/transport/testkit/axis2/client/AxisTestClient.java
URL: http://svn.apache.org/viewvc/webservices/commons/trunk/modules/transport/modules/testkit/src/main/java/org/apache/axis2/transport/testkit/axis2/client/AxisTestClient.java?rev=729656&r1=729655&r2=729656&view=diff
==============================================================================
--- webservices/commons/trunk/modules/transport/modules/testkit/src/main/java/org/apache/axis2/transport/testkit/axis2/client/AxisTestClient.java (original)
+++ webservices/commons/trunk/modules/transport/modules/testkit/src/main/java/org/apache/axis2/transport/testkit/axis2/client/AxisTestClient.java Sat Dec 27 10:50:14 2008
@@ -23,6 +23,7 @@
 import javax.xml.namespace.QName;
 
 import junit.framework.Assert;
+import junit.framework.AssertionFailedError;
 
 import org.apache.axiom.attachments.Attachments;
 import org.apache.axis2.Constants;
@@ -44,9 +45,13 @@
 import org.apache.axis2.transport.testkit.tests.TearDown;
 import org.apache.axis2.transport.testkit.tests.Transient;
 import org.apache.axis2.transport.testkit.util.ContentTypeUtil;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
 
 @Name("axis")
 public class AxisTestClient implements TestClient, MessageExchangeValidator {
+    private static final Log log = LogFactory.getLog(AxisTestClient.class);
+    
     private @Transient AxisTestClientConfigurator[] configurators;
     private @Transient TransportSender sender;
     protected @Transient ServiceClient serviceClient;
@@ -120,14 +125,32 @@
     public void afterReceive() throws Exception {
         if (sender instanceof ManagementSupport) {
             ManagementSupport sender = (ManagementSupport)this.sender;
-            Assert.assertEquals(1, metrics.getMessagesSent());
-            Assert.assertEquals(messagesSent+1, sender.getMessagesSent());
-            long thisBytesSent = metrics.getBytesSent();
-            Assert.assertTrue("No increase in bytes sent in message level metrics", thisBytesSent != 0);
-            long newBytesSent = sender.getBytesSent();
-            Assert.assertTrue("No increase in bytes sent in transport level metrics (before sending: " + bytesSent +
-                    "; after sending: " + newBytesSent + ")", newBytesSent > bytesSent);
-            Assert.assertEquals("Mismatch between message and transport level metrics", thisBytesSent, newBytesSent - bytesSent);
+            synchronized (metrics) {
+                long start = System.currentTimeMillis();
+                while (true) {
+                    try {
+                        Assert.assertEquals(1, metrics.getMessagesSent());
+                        Assert.assertEquals(messagesSent+1, sender.getMessagesSent());
+                        long thisBytesSent = metrics.getBytesSent();
+                        Assert.assertTrue("No increase in bytes sent in message level metrics", thisBytesSent != 0);
+                        long newBytesSent = sender.getBytesSent();
+                        Assert.assertTrue("No increase in bytes sent in transport level metrics", newBytesSent > bytesSent);
+                        Assert.assertEquals("Mismatch between message and transport level metrics", thisBytesSent, newBytesSent - bytesSent);
+                        break;
+                    } catch (AssertionFailedError ex) {
+                        // SYNAPSE-491: Maybe the transport sender didn't finish updating the
+                        // metrics yet. We give it up to one seconds to do so.
+                        long remaining = start + 1000 - System.currentTimeMillis();
+                        if (remaining < 0) {
+                            throw ex;
+                        } else {
+                            log.debug("The transport sender didn't update the metrics yet ("
+                                    + ex.getMessage() + "). Waiting for " + remaining + " ms.");
+                            metrics.wait(remaining);
+                        }
+                    }
+                }
+            }
         }
     }
 }

Modified: webservices/commons/trunk/modules/transport/modules/testkit/src/main/java/org/apache/axis2/transport/testkit/axis2/util/MessageLevelMetricsCollectorImpl.java
URL: http://svn.apache.org/viewvc/webservices/commons/trunk/modules/transport/modules/testkit/src/main/java/org/apache/axis2/transport/testkit/axis2/util/MessageLevelMetricsCollectorImpl.java?rev=729656&r1=729655&r2=729656&view=diff
==============================================================================
--- webservices/commons/trunk/modules/transport/modules/testkit/src/main/java/org/apache/axis2/transport/testkit/axis2/util/MessageLevelMetricsCollectorImpl.java (original)
+++ webservices/commons/trunk/modules/transport/modules/testkit/src/main/java/org/apache/axis2/transport/testkit/axis2/util/MessageLevelMetricsCollectorImpl.java Sat Dec 27 10:50:14 2008
@@ -24,6 +24,8 @@
 /**
  * Message level metrics collector implementation used during the tests to check that
  * message level metrics collection is implemented.
+ * <p>
+ * On any update, all threads waiting for an instance of this class are notified.
  */
 public class MessageLevelMetricsCollectorImpl implements MessageLevelMetricsCollector {
     private long messagesSent;
@@ -34,6 +36,7 @@
 
     public synchronized void incrementBytesSent(long size) {
         bytesSent += size;
+        notifyAll();
     }
 
     public void incrementFaultsReceiving(int errorCode) {
@@ -47,6 +50,7 @@
 
     public synchronized void incrementMessagesSent() {
         messagesSent++;
+        notifyAll();
     }
 
     public void incrementTimeoutsReceiving() {