[ONOS-3113] Flow Classifier Manager test case fixed
Change-Id: Ie4a35ec65f85ebf5ce5c20849d471fd3f947c405
diff --git a/apps/vtn/vtnrsc/pom.xml b/apps/vtn/vtnrsc/pom.xml
index 816624c..c6414a8 100644
--- a/apps/vtn/vtnrsc/pom.xml
+++ b/apps/vtn/vtnrsc/pom.xml
@@ -52,5 +52,12 @@
<artifactId>onos-core-serializers</artifactId>
<version>${project.version}</version>
</dependency>
+ <dependency>
+ <groupId>org.onosproject</groupId>
+ <artifactId>onos-core-common</artifactId>
+ <version>${project.version}</version>
+ <classifier>tests</classifier>
+ <scope>test</scope>
+ </dependency>
</dependencies>
</project>
diff --git a/apps/vtn/vtnrsc/src/main/java/org/onosproject/vtnrsc/flowclassifier/impl/FlowClassifierManager.java b/apps/vtn/vtnrsc/src/main/java/org/onosproject/vtnrsc/flowclassifier/impl/FlowClassifierManager.java
index 18f63b3..c5b0dcf 100644
--- a/apps/vtn/vtnrsc/src/main/java/org/onosproject/vtnrsc/flowclassifier/impl/FlowClassifierManager.java
+++ b/apps/vtn/vtnrsc/src/main/java/org/onosproject/vtnrsc/flowclassifier/impl/FlowClassifierManager.java
@@ -28,6 +28,8 @@
import org.onosproject.event.AbstractListenerManager;
import org.onosproject.store.serializers.KryoNamespaces;
import org.onosproject.store.service.EventuallyConsistentMap;
+import org.onosproject.store.service.EventuallyConsistentMapEvent;
+import org.onosproject.store.service.EventuallyConsistentMapListener;
import org.onosproject.store.service.MultiValuedTimestamp;
import org.onosproject.store.service.StorageService;
import org.onosproject.store.service.WallClockTimestamp;
@@ -51,16 +53,21 @@
private static final String FLOW_CLASSIFIER_NOT_NULL = "Flow Classifier cannot be null";
private static final String FLOW_CLASSIFIER_ID_NOT_NULL = "Flow Classifier Id cannot be null";
private static final String LISTENER_NOT_NULL = "Listener cannot be null";
+ private static final String EVENT_NOT_NULL = "event cannot be null";
private final Logger log = getLogger(FlowClassifierManager.class);
private EventuallyConsistentMap<FlowClassifierId, FlowClassifier> flowClassifierStore;
+ private EventuallyConsistentMapListener<FlowClassifierId, FlowClassifier> flowClassifierListener =
+ new InnerFlowClassifierStoreListener();
+
@Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
protected StorageService storageService;
@Activate
protected void activate() {
+ eventDispatcher.addSink(FlowClassifierEvent.class, listenerRegistry);
KryoNamespace.Builder serializer = KryoNamespace.newBuilder()
.register(KryoNamespaces.API)
.register(MultiValuedTimestamp.class)
@@ -69,11 +76,13 @@
.<FlowClassifierId, FlowClassifier>eventuallyConsistentMapBuilder()
.withName("flowclassifierstore").withSerializer(serializer)
.withTimestampProvider((k, v) -> new WallClockTimestamp()).build();
+ flowClassifierStore.addListener(flowClassifierListener);
log.info("Flow Classifier service activated");
}
@Deactivate
protected void deactivate() {
+ eventDispatcher.removeSink(FlowClassifierEvent.class);
flowClassifierStore.destroy();
log.info("Flow Classifier service deactivated");
}
@@ -144,4 +153,35 @@
}
return true;
}
+
+ private class InnerFlowClassifierStoreListener
+ implements
+ EventuallyConsistentMapListener<FlowClassifierId, FlowClassifier> {
+
+ @Override
+ public void event(EventuallyConsistentMapEvent<FlowClassifierId, FlowClassifier> event) {
+ checkNotNull(event, EVENT_NOT_NULL);
+ FlowClassifier flowClassifier = event.value();
+ if (EventuallyConsistentMapEvent.Type.PUT == event.type()) {
+ notifyListeners(new FlowClassifierEvent(
+ FlowClassifierEvent.Type.FLOW_CLASSIFIER_PUT,
+ flowClassifier));
+ }
+ if (EventuallyConsistentMapEvent.Type.REMOVE == event.type()) {
+ notifyListeners(new FlowClassifierEvent(
+ FlowClassifierEvent.Type.FLOW_CLASSIFIER_DELETE,
+ flowClassifier));
+ }
+ }
+ }
+
+ /**
+ * Notifies specify event to all listeners.
+ *
+ * @param event flow classifier event
+ */
+ private void notifyListeners(FlowClassifierEvent event) {
+ checkNotNull(event, EVENT_NOT_NULL);
+ post(event);
+ }
}
diff --git a/apps/vtn/vtnrsc/src/test/java/org/onosproject/vtnrsc/flowclassifier/impl/FlowClassifierManagerTest.java b/apps/vtn/vtnrsc/src/test/java/org/onosproject/vtnrsc/flowclassifier/impl/FlowClassifierManagerTest.java
index 8283a52..ceebec8 100644
--- a/apps/vtn/vtnrsc/src/test/java/org/onosproject/vtnrsc/flowclassifier/impl/FlowClassifierManagerTest.java
+++ b/apps/vtn/vtnrsc/src/test/java/org/onosproject/vtnrsc/flowclassifier/impl/FlowClassifierManagerTest.java
@@ -29,6 +29,9 @@
import org.onosproject.vtnrsc.VirtualPortId;
import org.onosproject.vtnrsc.FlowClassifier;
import org.onosproject.vtnrsc.util.VtnStorageServiceTest;
+import org.onosproject.common.event.impl.TestEventDispatcher;
+
+import static org.onosproject.net.NetTestTools.injectEventDispatcher;
/**
* Unit tests for FlowClassifierManager class.
@@ -61,6 +64,7 @@
public void testCreateFlowClassifier() {
// initialize flow classifier manager
flowClassifierMgr.storageService = storageService;
+ injectEventDispatcher(flowClassifierMgr, new TestEventDispatcher());
flowClassifierMgr.activate();
// create flow classifier