From 45e6608ad3d3f7f7382c552d9bd12b951855d4c8 Mon Sep 17 00:00:00 2001
From: connelly <connelly>
Date: Thu, 24 Mar 2005 01:50:19 +0000
Subject: [PATCH] Added 'Unit test passed' log message and made test check that
 Bug #99 is fixed.

---
 .../test/net/i2p/sam/TestStreamTransfer.java  | 29 +++++++++++++++++--
 1 file changed, 27 insertions(+), 2 deletions(-)

diff --git a/apps/sam/java/test/net/i2p/sam/TestStreamTransfer.java b/apps/sam/java/test/net/i2p/sam/TestStreamTransfer.java
index 6dd8c75a6d..43d7875e0c 100644
--- a/apps/sam/java/test/net/i2p/sam/TestStreamTransfer.java
+++ b/apps/sam/java/test/net/i2p/sam/TestStreamTransfer.java
@@ -30,14 +30,32 @@ public class TestStreamTransfer {
     private static Log _log = new Log(TestStreamTransfer.class);
     private static String _alice = null;
     private static boolean _dead = false;
+    private static Object _counterLock = new Object();
+    private static int _recvCounter = 0, _closeCounter = 0;
     
     private static void runTest(String samHost, int samPort, String conOptions) {
+        int nTests = 20;
         startAlice(samHost, samPort, conOptions);
-        for (int i = 0; i < 20; i++) {
+        /* Start up nTests different test threads. */
+        for (int i = 0; i < nTests; i++) {
             testBob("bob" + i, samHost, samPort, conOptions);
             if (i % 2 == 1)
                 try { Thread.sleep(10*1000); } catch (InterruptedException ie) {}
         }
+        /* Wait until the correct number of messages have been received
+           by Alices and the correct number of streams have been closed
+           by Bobs. */
+        while (true) {
+            synchronized (_counterLock) {
+                if (_recvCounter == nTests * 2 && _closeCounter == nTests) {
+                    break;
+                }
+            }
+            try { Thread.sleep(1000); } catch (InterruptedException ie) {}
+            _log.info("Receive counter is: " + _recvCounter + " Close counter is: " + _closeCounter);
+        }
+        /* Return, assuming the test has passed. */
+        _log.info("Unit test passed.");
     }
     
     private static void startAlice(String host, int port, String conOptions) {
@@ -151,6 +169,9 @@ public class TestStreamTransfer {
                     return;
                 }
                 _log.info("\n== Received from the stream " + id + ": [" + new String(payload) + "]");
+                synchronized (_counterLock) {
+                    _recvCounter++;
+                }
                 try { Thread.sleep(5*1000); } catch (InterruptedException ie) {}
                 /*
                 // now echo it back
@@ -225,11 +246,15 @@ public class TestStreamTransfer {
             _log.info("\n** Sending FooBarBaz!");
             out.write(req.getBytes());
             out.flush();
-            try { Thread.sleep(20*1000); } catch (InterruptedException ie) {}
+            /* Don't delay here, so we can test whether all data is
+               sent even if we do a STREAM CLOSE immediately. */
             _log.info("Sending close");
             req = "STREAM CLOSE ID=42\n";
             out.write(req.getBytes());
             out.flush();
+            synchronized (_counterLock) {
+                _closeCounter++;
+            }
             try { Thread.sleep(30*1000); } catch (InterruptedException ie) {}
             //_dead = true;
             s.close();
-- 
GitLab