Bharat saraswal
Committed by Gerrit Code Review

[ONOS-3113] Flow Classifier Manager test case fixed

Change-Id: Ie4a35ec65f85ebf5ce5c20849d471fd3f947c405
...@@ -52,5 +52,12 @@ ...@@ -52,5 +52,12 @@
52 <artifactId>onos-core-serializers</artifactId> 52 <artifactId>onos-core-serializers</artifactId>
53 <version>${project.version}</version> 53 <version>${project.version}</version>
54 </dependency> 54 </dependency>
55 + <dependency>
56 + <groupId>org.onosproject</groupId>
57 + <artifactId>onos-core-common</artifactId>
58 + <version>${project.version}</version>
59 + <classifier>tests</classifier>
60 + <scope>test</scope>
61 + </dependency>
55 </dependencies> 62 </dependencies>
56 </project> 63 </project>
......
...@@ -28,6 +28,8 @@ import org.onlab.util.KryoNamespace; ...@@ -28,6 +28,8 @@ import org.onlab.util.KryoNamespace;
28 import org.onosproject.event.AbstractListenerManager; 28 import org.onosproject.event.AbstractListenerManager;
29 import org.onosproject.store.serializers.KryoNamespaces; 29 import org.onosproject.store.serializers.KryoNamespaces;
30 import org.onosproject.store.service.EventuallyConsistentMap; 30 import org.onosproject.store.service.EventuallyConsistentMap;
31 +import org.onosproject.store.service.EventuallyConsistentMapEvent;
32 +import org.onosproject.store.service.EventuallyConsistentMapListener;
31 import org.onosproject.store.service.MultiValuedTimestamp; 33 import org.onosproject.store.service.MultiValuedTimestamp;
32 import org.onosproject.store.service.StorageService; 34 import org.onosproject.store.service.StorageService;
33 import org.onosproject.store.service.WallClockTimestamp; 35 import org.onosproject.store.service.WallClockTimestamp;
...@@ -51,16 +53,21 @@ public class FlowClassifierManager extends AbstractListenerManager<FlowClassifie ...@@ -51,16 +53,21 @@ public class FlowClassifierManager extends AbstractListenerManager<FlowClassifie
51 private static final String FLOW_CLASSIFIER_NOT_NULL = "Flow Classifier cannot be null"; 53 private static final String FLOW_CLASSIFIER_NOT_NULL = "Flow Classifier cannot be null";
52 private static final String FLOW_CLASSIFIER_ID_NOT_NULL = "Flow Classifier Id cannot be null"; 54 private static final String FLOW_CLASSIFIER_ID_NOT_NULL = "Flow Classifier Id cannot be null";
53 private static final String LISTENER_NOT_NULL = "Listener cannot be null"; 55 private static final String LISTENER_NOT_NULL = "Listener cannot be null";
56 + private static final String EVENT_NOT_NULL = "event cannot be null";
54 57
55 private final Logger log = getLogger(FlowClassifierManager.class); 58 private final Logger log = getLogger(FlowClassifierManager.class);
56 59
57 private EventuallyConsistentMap<FlowClassifierId, FlowClassifier> flowClassifierStore; 60 private EventuallyConsistentMap<FlowClassifierId, FlowClassifier> flowClassifierStore;
58 61
62 + private EventuallyConsistentMapListener<FlowClassifierId, FlowClassifier> flowClassifierListener =
63 + new InnerFlowClassifierStoreListener();
64 +
59 @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY) 65 @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
60 protected StorageService storageService; 66 protected StorageService storageService;
61 67
62 @Activate 68 @Activate
63 protected void activate() { 69 protected void activate() {
70 + eventDispatcher.addSink(FlowClassifierEvent.class, listenerRegistry);
64 KryoNamespace.Builder serializer = KryoNamespace.newBuilder() 71 KryoNamespace.Builder serializer = KryoNamespace.newBuilder()
65 .register(KryoNamespaces.API) 72 .register(KryoNamespaces.API)
66 .register(MultiValuedTimestamp.class) 73 .register(MultiValuedTimestamp.class)
...@@ -69,11 +76,13 @@ public class FlowClassifierManager extends AbstractListenerManager<FlowClassifie ...@@ -69,11 +76,13 @@ public class FlowClassifierManager extends AbstractListenerManager<FlowClassifie
69 .<FlowClassifierId, FlowClassifier>eventuallyConsistentMapBuilder() 76 .<FlowClassifierId, FlowClassifier>eventuallyConsistentMapBuilder()
70 .withName("flowclassifierstore").withSerializer(serializer) 77 .withName("flowclassifierstore").withSerializer(serializer)
71 .withTimestampProvider((k, v) -> new WallClockTimestamp()).build(); 78 .withTimestampProvider((k, v) -> new WallClockTimestamp()).build();
79 + flowClassifierStore.addListener(flowClassifierListener);
72 log.info("Flow Classifier service activated"); 80 log.info("Flow Classifier service activated");
73 } 81 }
74 82
75 @Deactivate 83 @Deactivate
76 protected void deactivate() { 84 protected void deactivate() {
85 + eventDispatcher.removeSink(FlowClassifierEvent.class);
77 flowClassifierStore.destroy(); 86 flowClassifierStore.destroy();
78 log.info("Flow Classifier service deactivated"); 87 log.info("Flow Classifier service deactivated");
79 } 88 }
...@@ -144,4 +153,35 @@ public class FlowClassifierManager extends AbstractListenerManager<FlowClassifie ...@@ -144,4 +153,35 @@ public class FlowClassifierManager extends AbstractListenerManager<FlowClassifie
144 } 153 }
145 return true; 154 return true;
146 } 155 }
156 +
157 + private class InnerFlowClassifierStoreListener
158 + implements
159 + EventuallyConsistentMapListener<FlowClassifierId, FlowClassifier> {
160 +
161 + @Override
162 + public void event(EventuallyConsistentMapEvent<FlowClassifierId, FlowClassifier> event) {
163 + checkNotNull(event, EVENT_NOT_NULL);
164 + FlowClassifier flowClassifier = event.value();
165 + if (EventuallyConsistentMapEvent.Type.PUT == event.type()) {
166 + notifyListeners(new FlowClassifierEvent(
167 + FlowClassifierEvent.Type.FLOW_CLASSIFIER_PUT,
168 + flowClassifier));
169 + }
170 + if (EventuallyConsistentMapEvent.Type.REMOVE == event.type()) {
171 + notifyListeners(new FlowClassifierEvent(
172 + FlowClassifierEvent.Type.FLOW_CLASSIFIER_DELETE,
173 + flowClassifier));
174 + }
175 + }
176 + }
177 +
178 + /**
179 + * Notifies specify event to all listeners.
180 + *
181 + * @param event flow classifier event
182 + */
183 + private void notifyListeners(FlowClassifierEvent event) {
184 + checkNotNull(event, EVENT_NOT_NULL);
185 + post(event);
186 + }
147 } 187 }
......
...@@ -29,6 +29,9 @@ import org.onosproject.vtnrsc.FlowClassifierId; ...@@ -29,6 +29,9 @@ import org.onosproject.vtnrsc.FlowClassifierId;
29 import org.onosproject.vtnrsc.VirtualPortId; 29 import org.onosproject.vtnrsc.VirtualPortId;
30 import org.onosproject.vtnrsc.FlowClassifier; 30 import org.onosproject.vtnrsc.FlowClassifier;
31 import org.onosproject.vtnrsc.util.VtnStorageServiceTest; 31 import org.onosproject.vtnrsc.util.VtnStorageServiceTest;
32 +import org.onosproject.common.event.impl.TestEventDispatcher;
33 +
34 +import static org.onosproject.net.NetTestTools.injectEventDispatcher;
32 35
33 /** 36 /**
34 * Unit tests for FlowClassifierManager class. 37 * Unit tests for FlowClassifierManager class.
...@@ -61,6 +64,7 @@ public class FlowClassifierManagerTest { ...@@ -61,6 +64,7 @@ public class FlowClassifierManagerTest {
61 public void testCreateFlowClassifier() { 64 public void testCreateFlowClassifier() {
62 // initialize flow classifier manager 65 // initialize flow classifier manager
63 flowClassifierMgr.storageService = storageService; 66 flowClassifierMgr.storageService = storageService;
67 + injectEventDispatcher(flowClassifierMgr, new TestEventDispatcher());
64 flowClassifierMgr.activate(); 68 flowClassifierMgr.activate();
65 69
66 // create flow classifier 70 // create flow classifier
......