Merge "Bug 1593 - Flow Statistics manager is updating store with incorrect key Statis...
[controller.git] / opendaylight / md-sal / sal-distributed-datastore / src / test / java / org / opendaylight / controller / cluster / datastore / DataChangeListenerProxyTest.java
1
2 package org.opendaylight.controller.cluster.datastore;
3
4 import akka.actor.ActorRef;
5 import akka.actor.Props;
6 import org.junit.Assert;
7 import org.junit.Test;
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;
19
20 import java.util.HashMap;
21 import java.util.HashSet;
22 import java.util.List;
23 import java.util.Map;
24 import java.util.Set;
25
26 public class DataChangeListenerProxyTest extends AbstractActorTest {
27
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();
32
33
34
35     @Override
36     public Map<YangInstanceIdentifier, NormalizedNode<?, ?>> getCreatedData() {
37       createdData.put(YangInstanceIdentifier.builder().build(), CompositeModel.createDocumentOne(CompositeModel.createTestContext()));
38       return createdData;
39     }
40
41     @Override
42     public Map<YangInstanceIdentifier, NormalizedNode<?, ?>> getUpdatedData() {
43       updatedData.put(YangInstanceIdentifier.builder().build(), CompositeModel.createTestContainer());
44       return updatedData;
45
46     }
47
48     @Override
49     public Set<YangInstanceIdentifier> getRemovedPaths() {
50       Set<YangInstanceIdentifier>ids = new HashSet<>();
51       ids.add( CompositeModel.TEST_PATH);
52       return ids;
53     }
54
55     @Override
56     public Map<YangInstanceIdentifier, NormalizedNode<?, ?>> getOriginalData() {
57       originalData.put(YangInstanceIdentifier.builder().build(), CompositeModel.createFamily());
58       return originalData;
59     }
60
61     @Override public NormalizedNode<?, ?> getOriginalSubtree() {
62       return CompositeModel.createFamily() ;
63     }
64
65     @Override public NormalizedNode<?, ?> getUpdatedSubtree() {
66       return CompositeModel.createTestContainer();
67     }
68   }
69
70
71   @Test
72     public void testOnDataChanged() throws Exception {
73         final Props props = Props.create(MessageCollectorActor.class);
74         final ActorRef actorRef = getSystem().actorOf(props);
75
76         DataChangeListenerProxy dataChangeListenerProxy = new DataChangeListenerProxy(
77                 TestModel.createTestContext(), getSystem().actorSelection(actorRef.path()));
78
79         dataChangeListenerProxy.onDataChanged(new MockDataChangedEvent());
80
81         //Check if it was received by the remote actor
82         ActorContext
83             testContext = new ActorContext(getSystem(), getSystem().actorOf(Props.create(DoNothingActor.class)), new MockClusterWrapper(), new MockConfiguration());
84         Object messages = testContext
85             .executeLocalOperation(actorRef, "messages",
86                 ActorContext.ASK_DURATION);
87
88         Assert.assertNotNull(messages);
89
90         Assert.assertTrue(messages instanceof List);
91
92         List<Object> listMessages = (List<Object>) messages;
93
94         Assert.assertEquals(1, listMessages.size());
95
96         Assert.assertTrue(listMessages.get(0).getClass().equals(DataChanged.class));
97
98     }
99 }