Merge "BUG 1966 - change message logging level (info -> trace)"
[controller.git] / opendaylight / md-sal / sal-distributed-datastore / src / test / java / org / opendaylight / controller / cluster / datastore / utils / ActorContextTest.java
index 5874eccda40f4f2d08f6b829757206213a743696..fa6d0b060f222f28ec723f1b4bc52b2f1ade3aa4 100644 (file)
@@ -1,11 +1,13 @@
 package org.opendaylight.controller.cluster.datastore.utils;
 
 import akka.actor.ActorRef;
+import akka.actor.ActorSelection;
 import akka.actor.ActorSystem;
 import akka.actor.Props;
 import akka.actor.UntypedActor;
 import akka.japi.Creator;
 import akka.testkit.JavaTestKit;
+import com.google.common.base.Optional;
 import org.junit.Test;
 import org.opendaylight.controller.cluster.datastore.AbstractActorTest;
 import org.opendaylight.controller.cluster.datastore.ClusterWrapper;
@@ -13,9 +15,14 @@ import org.opendaylight.controller.cluster.datastore.Configuration;
 import org.opendaylight.controller.cluster.datastore.messages.FindLocalShard;
 import org.opendaylight.controller.cluster.datastore.messages.LocalShardFound;
 import org.opendaylight.controller.cluster.datastore.messages.LocalShardNotFound;
+import scala.concurrent.Await;
+import scala.concurrent.Future;
+import scala.concurrent.duration.Duration;
+
+import java.util.concurrent.TimeUnit;
 
 import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertTrue;
 import static org.mockito.Mockito.mock;
 
 public class ActorContextTest extends AbstractActorTest{
@@ -74,22 +81,32 @@ public class ActorContextTest extends AbstractActorTest{
         }
 
         private static Props props(final boolean found, final ActorRef actorRef){
-            return Props.create(new Creator<MockShardManager>() {
+            return Props.create(new MockShardManagerCreator(found, actorRef) );
+        }
 
-                @Override public MockShardManager create()
-                    throws Exception {
-                    return new MockShardManager(found,
-                        actorRef);
-                }
-            });
+        @SuppressWarnings("serial")
+        private static class MockShardManagerCreator implements Creator<MockShardManager> {
+            final boolean found;
+            final ActorRef actorRef;
+
+            MockShardManagerCreator(boolean found, ActorRef actorRef) {
+                this.found = found;
+                this.actorRef = actorRef;
+            }
+
+            @Override
+            public MockShardManager create() throws Exception {
+                return new MockShardManager(found, actorRef);
+            }
         }
     }
 
     @Test
-    public void testExecuteLocalShardOperationWithShardFound(){
+    public void testFindLocalShardWithShardFound(){
         new JavaTestKit(getSystem()) {{
 
             new Within(duration("1 seconds")) {
+                @Override
                 protected void run() {
 
                     ActorRef shardActorRef = getSystem().actorOf(Props.create(EchoActor.class));
@@ -101,9 +118,9 @@ public class ActorContextTest extends AbstractActorTest{
                         new ActorContext(getSystem(), shardManagerActorRef , mock(ClusterWrapper.class),
                             mock(Configuration.class));
 
-                    Object out = actorContext.executeLocalShardOperation("default", "hello", duration("1 seconds"));
+                    Optional<ActorRef> out = actorContext.findLocalShard("default");
 
-                    assertEquals("hello", out);
+                    assertEquals(shardActorRef, out.get());
 
 
                     expectNoMsg();
@@ -114,10 +131,11 @@ public class ActorContextTest extends AbstractActorTest{
     }
 
     @Test
-    public void testExecuteLocalShardOperationWithShardNotFound(){
+    public void testFindLocalShardWithShardNotFound(){
         new JavaTestKit(getSystem()) {{
 
             new Within(duration("1 seconds")) {
+                @Override
                 protected void run() {
 
                     ActorRef shardManagerActorRef = getSystem()
@@ -127,11 +145,8 @@ public class ActorContextTest extends AbstractActorTest{
                         new ActorContext(getSystem(), shardManagerActorRef , mock(ClusterWrapper.class),
                             mock(Configuration.class));
 
-                    Object out = actorContext.executeLocalShardOperation("default", "hello", duration("1 seconds"));
-
-                    assertNull(out);
-
-
+                    Optional<ActorRef> out = actorContext.findLocalShard("default");
+                    assertTrue(!out.isPresent());
                     expectNoMsg();
                 }
             };
@@ -139,12 +154,12 @@ public class ActorContextTest extends AbstractActorTest{
 
     }
 
-
     @Test
-    public void testFindLocalShardWithShardFound(){
+    public void testExecuteRemoteOperation() {
         new JavaTestKit(getSystem()) {{
 
-            new Within(duration("1 seconds")) {
+            new Within(duration("3 seconds")) {
+                @Override
                 protected void run() {
 
                     ActorRef shardActorRef = getSystem().actorOf(Props.create(EchoActor.class));
@@ -156,41 +171,49 @@ public class ActorContextTest extends AbstractActorTest{
                         new ActorContext(getSystem(), shardManagerActorRef , mock(ClusterWrapper.class),
                             mock(Configuration.class));
 
-                    Object out = actorContext.findLocalShard("default");
+                    ActorSelection actor = actorContext.actorSelection(shardActorRef.path());
 
-                    assertEquals(shardActorRef, out);
+                    Object out = actorContext.executeOperation(actor, "hello");
 
+                    assertEquals("hello", out);
 
                     expectNoMsg();
                 }
             };
         }};
-
     }
 
     @Test
-    public void testFindLocalShardWithShardNotFound(){
+    public void testExecuteRemoteOperationAsync() {
         new JavaTestKit(getSystem()) {{
 
-            new Within(duration("1 seconds")) {
+            new Within(duration("3 seconds")) {
+                @Override
                 protected void run() {
 
+                    ActorRef shardActorRef = getSystem().actorOf(Props.create(EchoActor.class));
+
                     ActorRef shardManagerActorRef = getSystem()
-                        .actorOf(MockShardManager.props(false, null));
+                        .actorOf(MockShardManager.props(true, shardActorRef));
 
                     ActorContext actorContext =
                         new ActorContext(getSystem(), shardManagerActorRef , mock(ClusterWrapper.class),
                             mock(Configuration.class));
 
-                    Object out = actorContext.findLocalShard("default");
+                    ActorSelection actor = actorContext.actorSelection(shardActorRef.path());
 
-                    assertNull(out);
+                    Future<Object> future = actorContext.executeOperationAsync(actor, "hello");
 
+                    try {
+                        Object result = Await.result(future, Duration.create(3, TimeUnit.SECONDS));
+                        assertEquals("Result", "hello", result);
+                    } catch(Exception e) {
+                        throw new AssertionError(e);
+                    }
 
                     expectNoMsg();
                 }
             };
         }};
-
     }
 }