Add unit test for openstack switching host provider
Change-Id: If2ff5cf7d361d3857aca14b67e8d66ced0aacaa6
diff --git a/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/impl/OpenstackSwitchingHostProvider.java b/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/impl/OpenstackSwitchingHostProvider.java
index b19d78d..01e1099 100644
--- a/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/impl/OpenstackSwitchingHostProvider.java
+++ b/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/impl/OpenstackSwitchingHostProvider.java
@@ -46,7 +46,6 @@
import org.onosproject.net.host.HostService;
import org.onosproject.net.provider.AbstractProvider;
import org.onosproject.net.provider.ProviderId;
-import org.onosproject.openstacknetworking.api.InstancePortAdminService;
import org.onosproject.openstacknetworking.api.OpenstackNetworkService;
import org.onosproject.openstacknode.api.OpenstackNode;
import org.onosproject.openstacknode.api.OpenstackNodeEvent;
@@ -105,18 +104,15 @@
@Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
protected OpenstackNodeService osNodeService;
- @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
- protected InstancePortAdminService instancePortAdminService;
+ private HostProviderService hostProviderService;
- private final ExecutorService deviceEventExecutor =
+ private final ExecutorService executor =
Executors.newSingleThreadExecutor(groupedThreads(this.getClass().getSimpleName(), "device-event"));
private final InternalDeviceListener internalDeviceListener =
new InternalDeviceListener();
private final InternalOpenstackNodeListener internalNodeListener =
new InternalOpenstackNodeListener();
- private HostProviderService hostProvider;
-
/**
* Creates OpenStack switching host provider.
*/
@@ -129,7 +125,7 @@
coreService.registerApplication(OPENSTACK_NETWORKING_APP_ID);
deviceService.addListener(internalDeviceListener);
osNodeService.addListener(internalNodeListener);
- hostProvider = hostProviderRegistry.register(this);
+ hostProviderService = hostProviderRegistry.register(this);
log.info("Started");
}
@@ -140,7 +136,7 @@
osNodeService.removeListener(internalNodeListener);
deviceService.removeListener(internalDeviceListener);
- deviceEventExecutor.shutdown();
+ executor.shutdown();
log.info("Stopped");
}
@@ -151,6 +147,32 @@
}
/**
+ * A helper method which logs the port addition event and performs port
+ * addition action.
+ *
+ * @param event device event
+ */
+ protected void portAddedHelper(DeviceEvent event) {
+ log.debug("Instance port {} is detected from {}",
+ event.port().annotations().value(PORT_NAME),
+ event.subject().id());
+ processPortAdded(event.port());
+ }
+
+ /**
+ * A helper method which logs the port removal event and performs port
+ * removal action.
+ *
+ * @param event device event
+ */
+ protected void portRemovedHelper(DeviceEvent event) {
+ log.debug("Instance port {} is removed from {}",
+ event.port().annotations().value(PORT_NAME),
+ event.subject().id());
+ processPortRemoved(event.port());
+ }
+
+ /**
* Processes port addition event.
* Once a port addition event is detected, it tries to create a host instance
* with openstack augmented host information such as networkId, portId,
@@ -158,7 +180,7 @@
*
* @param port port object used in ONOS
*/
- private void processPortAdded(Port port, Device device) {
+ protected void processPortAdded(Port port) {
// TODO check the node state is COMPLETE
org.openstack4j.model.network.Port osPort = osNetworkService.port(port);
if (osPort == null) {
@@ -228,17 +250,17 @@
// newly added location is not in the existing location list,
// therefore, we simply add this into the location list
if (locations.size() == 0) {
- hostProvider.addLocationToHost(hostId,
+ hostProviderService.addLocationToHost(hostId,
new HostLocation(connectPoint, createTime));
}
// newly added location is in the existing location list,
// the hostDetected method invocation in turn triggers host Update event
if (locations.size() == 1) {
- hostProvider.hostDetected(hostId, hostDesc, false);
+ hostProviderService.hostDetected(hostId, hostDesc, false);
}
} else {
- hostProvider.hostDetected(hostId, hostDesc, false);
+ hostProviderService.hostDetected(hostId, hostDesc, false);
}
}
@@ -248,10 +270,9 @@
* instance through host provider by giving connect point information,
* and vanishes it.
*
- * @param event device event
+ * @param port ONOS port
*/
- private void processPortRemoved(DeviceEvent event) {
- Port port = event.port();
+ protected void processPortRemoved(Port port) {
ConnectPoint connectPoint = new ConnectPoint(port.element().id(), port.number());
Set<Host> hosts = hostService.getConnectedHosts(connectPoint);
@@ -263,13 +284,13 @@
// if the host contains only one filtered location, we remove the host
if (h.locations().size() == 1) {
- hostProvider.hostVanished(h.id());
+ hostProviderService.hostVanished(h.id());
}
// if the host contains multiple locations, we simply remove the
// host location
if (h.locations().size() > 1 && hostLocation.isPresent()) {
- hostProvider.removeLocationFromHost(h.id(), hostLocation.get());
+ hostProviderService.removeLocationFromHost(h.id(), hostLocation.get());
}
});
}
@@ -298,7 +319,7 @@
}
private boolean isDirectPort(String portName) {
- return portNamePrefixMap().values().stream().filter(p -> portName.startsWith(p)).findAny().isPresent();
+ return portNamePrefixMap().values().stream().anyMatch(portName::startsWith);
}
@Override
@@ -307,16 +328,16 @@
switch (event.type()) {
case PORT_UPDATED:
if (!event.port().isEnabled()) {
- portRemovedHelper(deviceEventExecutor, event);
+ executor.execute(() -> portRemovedHelper(event));
} else if (event.port().isEnabled()) {
- portAddedHelper(deviceEventExecutor, event);
+ executor.execute(() -> portAddedHelper(event));
}
break;
case PORT_ADDED:
- portAddedHelper(deviceEventExecutor, event);
+ executor.execute(() -> portAddedHelper(event));
break;
case PORT_REMOVED:
- portRemovedHelper(deviceEventExecutor, event);
+ executor.execute(() -> portRemovedHelper(event));
break;
default:
break;
@@ -324,38 +345,6 @@
}
}
- /**
- * A helper method which logs the port addition event and performs port
- * addition action.
- *
- * @param executor device executor service
- * @param event device event
- */
- private void portAddedHelper(ExecutorService executor, DeviceEvent event) {
- executor.execute(() -> {
- log.debug("Instance port {} is detected from {}",
- event.port().annotations().value(PORT_NAME),
- event.subject().id());
- processPortAdded(event.port(), event.subject());
- });
- }
-
- /**
- * A helper method which logs the port removal event and performs port
- * removal action.
- *
- * @param executor device executor service
- * @param event device event
- */
- private void portRemovedHelper(ExecutorService executor, DeviceEvent event) {
- executor.execute(() -> {
- log.debug("Instance port {} is removed from {}",
- event.port().annotations().value(PORT_NAME),
- event.subject().id());
- processPortRemoved(event);
- });
- }
-
private class InternalOpenstackNodeListener implements OpenstackNodeListener {
@Override
@@ -378,10 +367,8 @@
switch (event.type()) {
case OPENSTACK_NODE_COMPLETE:
- deviceEventExecutor.execute(() -> {
- log.info("COMPLETE node {} is detected", osNode.hostname());
- processCompleteNode(event.subject());
- });
+ log.info("COMPLETE node {} is detected", osNode.hostname());
+ executor.execute(() -> processCompleteNode(event.subject()));
break;
case OPENSTACK_NODE_INCOMPLETE:
log.warn("{} is changed to INCOMPLETE state", osNode);
@@ -405,23 +392,20 @@
log.debug("Instance port {} is detected from {}",
port.annotations().value(PORT_NAME),
osNode.hostname());
- processPortAdded(port,
- deviceService.getDevice(osNode.intgBridge()));
+ processPortAdded(port);
});
- portNamePrefixMap().values().forEach(portNamePrefix -> {
- deviceService.getPorts(osNode.intgBridge()).stream()
- .filter(port -> port.annotations().value(PORT_NAME)
- .startsWith(portNamePrefix) &&
- port.isEnabled())
- .forEach(port -> {
- log.debug("Instance port {} is detected from {}",
- port.annotations().value(portNamePrefix),
- osNode.hostname());
- processPortAdded(port,
- deviceService.getDevice(osNode.intgBridge()));
- });
- });
+ portNamePrefixMap().values().forEach(portNamePrefix ->
+ deviceService.getPorts(osNode.intgBridge()).stream()
+ .filter(port -> port.annotations().value(PORT_NAME)
+ .startsWith(portNamePrefix) &&
+ port.isEnabled())
+ .forEach(port -> {
+ log.debug("Instance port {} is detected from {}",
+ port.annotations().value(portNamePrefix),
+ osNode.hostname());
+ processPortAdded(port);
+ }));
Tools.stream(hostService.getHosts())
.filter(host -> deviceService.getPort(
@@ -429,7 +413,7 @@
host.location().port()) == null)
.forEach(host -> {
log.info("Remove stale host {}", host.id());
- hostProvider.hostVanished(host.id());
+ hostProviderService.hostVanished(host.id());
});
}
}