2 package org.opendaylight.controller.cluster.datastore;
4 import akka.actor.ActorRef;
5 import akka.actor.Props;
6 import junit.framework.Assert;
8 import org.opendaylight.controller.cluster.datastore.messages.DataChanged;
9 import org.opendaylight.controller.cluster.datastore.utils.ActorContext;
10 import org.opendaylight.controller.cluster.datastore.utils.DoNothingActor;
11 import org.opendaylight.controller.cluster.datastore.utils.MessageCollectorActor;
12 import org.opendaylight.controller.cluster.datastore.utils.MockClusterWrapper;
13 import org.opendaylight.controller.cluster.datastore.utils.MockConfiguration;
14 import org.opendaylight.controller.md.cluster.datastore.model.CompositeModel;
15 import org.opendaylight.controller.md.cluster.datastore.model.TestModel;
16 import org.opendaylight.controller.md.sal.common.api.data.AsyncDataChangeEvent;
17 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
18 import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode;
20 import java.util.HashMap;
21 import java.util.HashSet;
22 import java.util.List;
26 public class DataChangeListenerProxyTest extends AbstractActorTest {
28 private static class MockDataChangedEvent implements AsyncDataChangeEvent<YangInstanceIdentifier, NormalizedNode<?, ?>> {
29 Map<YangInstanceIdentifier,NormalizedNode<?,?>> createdData = new HashMap();
30 Map<YangInstanceIdentifier,NormalizedNode<?,?>> updatedData = new HashMap();
31 Map<YangInstanceIdentifier,NormalizedNode<?,?>> originalData = new HashMap();
36 public Map<YangInstanceIdentifier, NormalizedNode<?, ?>> getCreatedData() {
37 createdData.put(YangInstanceIdentifier.builder().build(), CompositeModel.createDocumentOne(CompositeModel.createTestContext()));
42 public Map<YangInstanceIdentifier, NormalizedNode<?, ?>> getUpdatedData() {
43 updatedData.put(YangInstanceIdentifier.builder().build(), CompositeModel.createTestContainer());
49 public Set<YangInstanceIdentifier> getRemovedPaths() {
50 Set<YangInstanceIdentifier>ids = new HashSet();
51 ids.add( CompositeModel.TEST_PATH);
56 public Map<YangInstanceIdentifier, NormalizedNode<?, ?>> getOriginalData() {
57 originalData.put(YangInstanceIdentifier.builder().build(), CompositeModel.createFamily());
61 @Override public NormalizedNode<?, ?> getOriginalSubtree() {
62 return CompositeModel.createFamily() ;
65 @Override public NormalizedNode<?, ?> getUpdatedSubtree() {
66 return CompositeModel.createTestContainer();
72 public void testOnDataChanged() throws Exception {
73 final Props props = Props.create(MessageCollectorActor.class);
74 final ActorRef actorRef = getSystem().actorOf(props);
76 DataChangeListenerProxy dataChangeListenerProxy =
77 new DataChangeListenerProxy(TestModel.createTestContext(),
78 getSystem().actorSelection(actorRef.path()));
80 dataChangeListenerProxy.onDataChanged(new MockDataChangedEvent());
82 //Check if it was received by the remote actor
84 testContext = new ActorContext(getSystem(), getSystem().actorOf(Props.create(DoNothingActor.class)), new MockClusterWrapper(), new MockConfiguration());
85 Object messages = testContext
86 .executeLocalOperation(actorRef, "messages",
87 ActorContext.ASK_DURATION);
89 Assert.assertNotNull(messages);
91 Assert.assertTrue(messages instanceof List);
93 List<Object> listMessages = (List<Object>) messages;
95 Assert.assertEquals(1, listMessages.size());
97 Assert.assertTrue(listMessages.get(0).getClass().equals(DataChanged.SERIALIZABLE_CLASS));