You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by bo...@apache.org on 2015/09/10 21:57:35 UTC

[3/5] qpid-proton git commit: NO-JIRA: Handlers in a HashedSet seems fragile

NO-JIRA: Handlers in a HashedSet seems fragile

Add a test for dispatching of event through child handlers


Project: http://git-wip-us.apache.org/repos/asf/qpid-proton/repo
Commit: http://git-wip-us.apache.org/repos/asf/qpid-proton/commit/8f3a8f0c
Tree: http://git-wip-us.apache.org/repos/asf/qpid-proton/tree/8f3a8f0c
Diff: http://git-wip-us.apache.org/repos/asf/qpid-proton/diff/8f3a8f0c

Branch: refs/heads/master
Commit: 8f3a8f0c1575aa28e4dc70e5a9a0f9a008373f2f
Parents: 21e6fa6
Author: Bozo Dragojevic <bo...@digiverse.si>
Authored: Tue Jul 28 15:50:02 2015 +0200
Committer: Bozo Dragojevic <bo...@digiverse.si>
Committed: Thu Sep 10 21:57:12 2015 +0200

----------------------------------------------------------------------
 .../apache/qpid/proton/engine/BaseHandler.java  |  4 +-
 .../qpid/proton/engine/EventDelegationTest.java | 55 ++++++++++++++++++++
 2 files changed, 57 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/8f3a8f0c/proton-j/src/main/java/org/apache/qpid/proton/engine/BaseHandler.java
----------------------------------------------------------------------
diff --git a/proton-j/src/main/java/org/apache/qpid/proton/engine/BaseHandler.java b/proton-j/src/main/java/org/apache/qpid/proton/engine/BaseHandler.java
index 7c518a0..2490052 100644
--- a/proton-j/src/main/java/org/apache/qpid/proton/engine/BaseHandler.java
+++ b/proton-j/src/main/java/org/apache/qpid/proton/engine/BaseHandler.java
@@ -20,8 +20,8 @@
  */
 package org.apache.qpid.proton.engine;
 
-import java.util.HashSet;
 import java.util.Iterator;
+import java.util.LinkedHashSet;
 
 
 /**
@@ -48,7 +48,7 @@ public class BaseHandler implements CoreHandler
         ext.attachments().set(Handler.class, Handler.class, handler);
     }
 
-    private HashSet<Handler> children = new HashSet<Handler>();
+    private LinkedHashSet<Handler> children = new LinkedHashSet<Handler>();
 
     @Override public void onConnectionInit(Event e) { onUnhandled(e); }
     @Override public void onConnectionLocalOpen(Event e) { onUnhandled(e); }

http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/8f3a8f0c/proton-j/src/test/java/org/apache/qpid/proton/engine/EventDelegationTest.java
----------------------------------------------------------------------
diff --git a/proton-j/src/test/java/org/apache/qpid/proton/engine/EventDelegationTest.java b/proton-j/src/test/java/org/apache/qpid/proton/engine/EventDelegationTest.java
new file mode 100644
index 0000000..d8cce0a
--- /dev/null
+++ b/proton-j/src/test/java/org/apache/qpid/proton/engine/EventDelegationTest.java
@@ -0,0 +1,55 @@
+package org.apache.qpid.proton.engine;
+
+import static org.junit.Assert.*;
+
+import java.io.IOException;
+import java.util.ArrayList;
+
+import org.apache.qpid.proton.reactor.Reactor;
+import org.junit.Test;
+
+public class EventDelegationTest {
+
+    private ArrayList<String> trace = new ArrayList<String>();
+
+    class ExecutionFlowTracer extends BaseHandler {
+        protected String name;
+
+        ExecutionFlowTracer(String name) {
+            this.name = name;
+        }
+
+        @Override
+        public void onReactorInit(Event e) {
+            trace.add(name);
+        }
+    }
+
+    Handler assemble(Handler outer, Handler...inner) {
+        for(Handler h : inner) {
+            outer.add(h);
+        }
+        return outer;
+    }
+
+    @Test
+    public void testImplicitDelegate() throws IOException {
+        Handler h = 
+                assemble(
+                        new ExecutionFlowTracer("A"),
+                        assemble(
+                                new ExecutionFlowTracer("A.A"),
+                                new ExecutionFlowTracer("A.A.A"),
+                                new ExecutionFlowTracer("A.A.B")
+                                ),
+                        assemble(
+                                new ExecutionFlowTracer("A.B")
+                                )
+                );
+        Reactor r = Reactor.Factory.create();
+        r.getHandler().add(h);
+        r.run();
+        assertArrayEquals(new String[]{"A", "A.A", "A.A.A", "A.A.B", "A.B"}, trace.toArray());
+    }
+
+}


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