1 package org.opendaylight.controller.cluster.datastore;
3 import akka.actor.ActorRef;
4 import akka.actor.Props;
5 import akka.testkit.JavaTestKit;
7 import org.opendaylight.controller.cluster.datastore.messages.DataChanged;
8 import org.opendaylight.controller.cluster.datastore.messages.DataChangedReply;
9 import org.opendaylight.controller.md.cluster.datastore.model.CompositeModel;
10 import org.opendaylight.controller.md.sal.common.api.data.AsyncDataChangeEvent;
11 import org.opendaylight.controller.md.sal.common.api.data.AsyncDataChangeListener;
12 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
13 import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode;
15 import java.util.HashMap;
16 import java.util.HashSet;
20 import static org.junit.Assert.assertNotNull;
21 import static org.junit.Assert.assertTrue;
23 public class DataChangeListenerTest extends AbstractActorTest {
25 private static class MockDataChangedEvent implements AsyncDataChangeEvent<YangInstanceIdentifier, NormalizedNode<?, ?>> {
26 Map<YangInstanceIdentifier,NormalizedNode<?,?>> createdData = new HashMap();
27 Map<YangInstanceIdentifier,NormalizedNode<?,?>> updatedData = new HashMap();
28 Map<YangInstanceIdentifier,NormalizedNode<?,?>> originalData = new HashMap();
33 public Map<YangInstanceIdentifier, NormalizedNode<?, ?>> getCreatedData() {
34 createdData.put(CompositeModel.FAMILY_PATH, CompositeModel.createFamily());
39 public Map<YangInstanceIdentifier, NormalizedNode<?, ?>> getUpdatedData() {
40 updatedData.put(CompositeModel.FAMILY_PATH, CompositeModel.createFamily());
46 public Set<YangInstanceIdentifier> getRemovedPaths() {
47 Set<YangInstanceIdentifier>ids = new HashSet();
48 ids.add( CompositeModel.TEST_PATH);
53 public Map<YangInstanceIdentifier, NormalizedNode<?, ?>> getOriginalData() {
54 originalData.put(CompositeModel.FAMILY_PATH, CompositeModel.createFamily());
58 @Override public NormalizedNode<?, ?> getOriginalSubtree() {
61 return originalData.put(CompositeModel.FAMILY_PATH, CompositeModel.createFamily());
64 @Override public NormalizedNode<?, ?> getUpdatedSubtree() {
66 //fixme: need to have some valid data here
67 return originalData.put(CompositeModel.FAMILY_PATH, CompositeModel.createFamily());
71 private class MockDataChangeListener implements AsyncDataChangeListener<YangInstanceIdentifier, NormalizedNode<?, ?>> {
72 private boolean gotIt = false;
73 private AsyncDataChangeEvent<YangInstanceIdentifier, NormalizedNode<?, ?>> change;
75 @Override public void onDataChanged(
76 AsyncDataChangeEvent<YangInstanceIdentifier, NormalizedNode<?, ?>> change) {
77 gotIt = true;this.change=change;
80 public boolean gotIt() {
83 public AsyncDataChangeEvent<YangInstanceIdentifier, NormalizedNode<?, ?>> getChange(){
89 public void testDataChanged(){
90 new JavaTestKit(getSystem()) {{
91 final MockDataChangeListener listener = new MockDataChangeListener();
92 final Props props = DataChangeListener.props(CompositeModel.createTestContext(),listener,CompositeModel.FAMILY_PATH );
93 final ActorRef subject =
94 getSystem().actorOf(props, "testDataChanged");
96 new Within(duration("1 seconds")) {
97 protected void run() {
100 new DataChanged(CompositeModel.createTestContext(),new MockDataChangedEvent()).toSerializable(),
103 final Boolean out = new ExpectMsg<Boolean>("dataChanged") {
104 // do not put code outside this method, will run afterwards
105 protected Boolean match(Object in) {
106 if (in.getClass().equals(DataChangedReply.SERIALIZABLE_CLASS)) {
113 }.get(); // this extracts the received message
116 assertTrue(listener.gotIt());
117 assertNotNull(listener.getChange().getCreatedData());
118 // Will wait for the rest of the 3 seconds