Fix openstack telemetry, networking, vtap app maven build
Change-Id: If86f0439bd0a4330dc19a3a67c83db836925701f
diff --git a/apps/openstacknode/app/BUCK b/apps/openstacknode/app/BUCK
index a80ba98..d670b42 100644
--- a/apps/openstacknode/app/BUCK
+++ b/apps/openstacknode/app/BUCK
@@ -25,6 +25,7 @@
TEST_DEPS = [
'//lib:TEST_ADAPTERS',
'//core/api:onos-api-tests',
+ '//apps/openstacknode/api:onos-apps-openstacknode-api-tests',
'//core/common:onos-core-common-tests',
'//web/api:onos-rest-tests',
'//lib:TEST_REST',
diff --git a/apps/openstacknode/app/pom.xml b/apps/openstacknode/app/pom.xml
index 401824f..4aacfc8 100644
--- a/apps/openstacknode/app/pom.xml
+++ b/apps/openstacknode/app/pom.xml
@@ -108,6 +108,14 @@
<dependency>
<groupId>org.onosproject</groupId>
+ <artifactId>onos-apps-openstacknode-api</artifactId>
+ <version>${project.version}</version>
+ <classifier>tests</classifier>
+ <scope>test</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>org.onosproject</groupId>
<artifactId>onos-api</artifactId>
<classifier>tests</classifier>
<scope>test</scope>
@@ -219,7 +227,6 @@
<artifactId>jersey-hk2</artifactId>
<scope>test</scope>
</dependency>
-
</dependencies>
<build>
diff --git a/apps/openstacknode/app/src/main/java/org/onosproject/openstacknode/codec/OpenstackNodeCodec.java b/apps/openstacknode/app/src/main/java/org/onosproject/openstacknode/codec/OpenstackNodeCodec.java
index 31f32bf..4f89c3c 100644
--- a/apps/openstacknode/app/src/main/java/org/onosproject/openstacknode/codec/OpenstackNodeCodec.java
+++ b/apps/openstacknode/app/src/main/java/org/onosproject/openstacknode/codec/OpenstackNodeCodec.java
@@ -26,7 +26,7 @@
import org.onosproject.openstacknode.api.OpenstackAuth;
import org.onosproject.openstacknode.api.OpenstackNode;
import org.onosproject.openstacknode.api.OpenstackPhyInterface;
-import org.onosproject.openstacknode.impl.DefaultOpenstackNode;
+import org.onosproject.openstacknode.api.DefaultOpenstackNode;
import org.slf4j.Logger;
import java.util.ArrayList;
diff --git a/apps/openstacknode/app/src/main/java/org/onosproject/openstacknode/impl/DefaultOpenstackNode.java b/apps/openstacknode/app/src/main/java/org/onosproject/openstacknode/impl/DefaultOpenstackNode.java
deleted file mode 100644
index e6592b0..0000000
--- a/apps/openstacknode/app/src/main/java/org/onosproject/openstacknode/impl/DefaultOpenstackNode.java
+++ /dev/null
@@ -1,489 +0,0 @@
-/*
- * Copyright 2017-present Open Networking Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.onosproject.openstacknode.impl;
-
-import com.google.common.base.MoreObjects;
-import com.google.common.base.Strings;
-import org.onlab.osgi.DefaultServiceDirectory;
-import org.onlab.packet.IpAddress;
-import org.onlab.packet.MacAddress;
-import org.onosproject.core.GroupId;
-import org.onosproject.net.DeviceId;
-import org.onosproject.net.Port;
-import org.onosproject.net.PortNumber;
-import org.onosproject.net.device.DeviceService;
-import org.onosproject.net.group.DefaultGroupKey;
-import org.onosproject.net.group.GroupKey;
-import org.onosproject.openstacknode.api.NodeState;
-import org.onosproject.openstacknode.api.OpenstackAuth;
-import org.onosproject.openstacknode.api.OpenstackNode;
-import org.onosproject.openstacknode.api.OpenstackPhyInterface;
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Objects;
-import java.util.Optional;
-
-import static com.google.common.base.Preconditions.checkArgument;
-import static org.onosproject.net.AnnotationKeys.PORT_MAC;
-import static org.onosproject.net.AnnotationKeys.PORT_NAME;
-import static org.onosproject.openstacknode.api.Constants.DEFAULT_TUNNEL;
-import static org.onosproject.openstacknode.api.Constants.PATCH_INTG_BRIDGE;
-
-/**
- * Representation of a openstack node.
- */
-public class DefaultOpenstackNode implements OpenstackNode {
-
- private final String hostname;
- private final NodeType type;
- private final DeviceId intgBridge;
- private final IpAddress managementIp;
- private final IpAddress dataIp;
- private final String vlanIntf;
- private final String uplinkPort;
- private final NodeState state;
- private final Collection<OpenstackPhyInterface> phyIntfs;
- private final OpenstackAuth auth;
- private final String endPoint;
-
- private static final String NOT_NULL_MSG = "Node % cannot be null";
-
- private static final String OVSDB = "ovsdb:";
-
- /**
- * A default constructor of Openstack Node.
- *
- * @param hostname hostname
- * @param type node type
- * @param intgBridge integration bridge
- * @param managementIp management IP address
- * @param dataIp data IP address
- * @param vlanIntf VLAN interface
- * @param uplinkPort uplink port name
- * @param state node state
- * @param phyIntfs physical interfaces
- * @param auth keystone authentication info
- * @param endPoint openstack endpoint URL
- */
- protected DefaultOpenstackNode(String hostname, NodeType type,
- DeviceId intgBridge,
- IpAddress managementIp,
- IpAddress dataIp,
- String vlanIntf,
- String uplinkPort,
- NodeState state,
- Collection<OpenstackPhyInterface> phyIntfs,
- OpenstackAuth auth,
- String endPoint) {
- this.hostname = hostname;
- this.type = type;
- this.intgBridge = intgBridge;
- this.managementIp = managementIp;
- this.dataIp = dataIp;
- this.vlanIntf = vlanIntf;
- this.uplinkPort = uplinkPort;
- this.state = state;
- this.phyIntfs = phyIntfs;
- this.auth = auth;
- this.endPoint = endPoint;
- }
-
- @Override
- public String hostname() {
- return hostname;
- }
-
- @Override
- public NodeType type() {
- return type;
- }
-
- @Override
- public DeviceId ovsdb() {
- return DeviceId.deviceId(OVSDB + managementIp().toString());
- }
-
- @Override
- public DeviceId intgBridge() {
- return intgBridge;
- }
-
- @Override
- public IpAddress managementIp() {
- return managementIp;
- }
-
- @Override
- public IpAddress dataIp() {
- return dataIp;
- }
-
- @Override
- public String vlanIntf() {
- return vlanIntf;
- }
-
- @Override
- public String uplinkPort() {
- return uplinkPort;
- }
-
- @Override
- public NodeState state() {
- return state;
- }
-
- @Override
- public GroupKey gatewayGroupKey(NetworkMode mode) {
- return new DefaultGroupKey(intgBridge.toString().concat(mode.name()).getBytes());
- }
-
- @Override
- public PortNumber uplinkPortNum() {
- if (uplinkPort == null) {
- return null;
- }
-
- DeviceService deviceService = DefaultServiceDirectory.getService(DeviceService.class);
- Port port = deviceService.getPorts(intgBridge).stream()
- .filter(p -> p.isEnabled() &&
- Objects.equals(p.annotations().value(PORT_NAME), uplinkPort))
- .findAny().orElse(null);
-
- return port != null ? port.number() : null;
-
- }
- @Override
- public PortNumber tunnelPortNum() {
- if (dataIp == null) {
- return null;
- }
- DeviceService deviceService = DefaultServiceDirectory.getService(DeviceService.class);
- Port port = deviceService.getPorts(intgBridge).stream()
- .filter(p -> p.isEnabled() &&
- Objects.equals(p.annotations().value(PORT_NAME), DEFAULT_TUNNEL))
- .findAny().orElse(null);
- return port != null ? port.number() : null;
- }
-
- @Override
- public PortNumber vlanPortNum() {
- if (vlanIntf == null) {
- return null;
- }
- DeviceService deviceService = DefaultServiceDirectory.getService(DeviceService.class);
- Port port = deviceService.getPorts(intgBridge).stream()
- .filter(p -> p.isEnabled() &&
- Objects.equals(p.annotations().value(PORT_NAME), vlanIntf))
- .findAny().orElse(null);
- return port != null ? port.number() : null;
- }
-
- @Override
- public PortNumber patchPortNum() {
- if (type == NodeType.COMPUTE) {
- return null;
- }
- DeviceService deviceService = DefaultServiceDirectory.getService(DeviceService.class);
- Port port = deviceService.getPorts(intgBridge).stream()
- .filter(p -> p.isEnabled() &&
- Objects.equals(p.annotations().value(PORT_NAME), PATCH_INTG_BRIDGE))
- .findAny().orElse(null);
- return port != null ? port.number() : null;
- }
-
- @Override
- public MacAddress vlanPortMac() {
- if (vlanIntf == null) {
- return null;
- }
- DeviceService deviceService = DefaultServiceDirectory.getService(DeviceService.class);
- Port port = deviceService.getPorts(intgBridge).stream()
- .filter(p -> p.annotations().value(PORT_NAME).equals(vlanIntf))
- .findAny().orElse(null);
- return port != null ? MacAddress.valueOf(port.annotations().value(PORT_MAC)) : null;
- }
-
- @Override
- public GroupId gatewayGroupId(NetworkMode mode) {
- return new GroupId(intgBridge.toString().concat(mode.name()).hashCode());
- }
-
- @Override
- public boolean equals(Object obj) {
- if (this == obj) {
- return true;
- }
-
- if (obj instanceof DefaultOpenstackNode) {
- DefaultOpenstackNode that = (DefaultOpenstackNode) obj;
- return Objects.equals(hostname, that.hostname) &&
- Objects.equals(type, that.type) &&
- Objects.equals(intgBridge, that.intgBridge) &&
- Objects.equals(managementIp, that.managementIp) &&
- Objects.equals(dataIp, that.dataIp) &&
- Objects.equals(uplinkPort, that.uplinkPort) &&
- Objects.equals(vlanIntf, that.vlanIntf) &&
- Objects.equals(phyIntfs, that.phyIntfs) &&
- Objects.equals(auth, that.auth) &&
- Objects.equals(endPoint, that.endPoint);
- }
- return false;
- }
-
- @Override
- public int hashCode() {
- return Objects.hash(hostname,
- type,
- intgBridge,
- managementIp,
- dataIp,
- vlanIntf,
- uplinkPort,
- phyIntfs,
- auth,
- endPoint);
- }
-
- @Override
- public String toString() {
- return MoreObjects.toStringHelper(getClass())
- .add("hostname", hostname)
- .add("type", type)
- .add("integrationBridge", intgBridge)
- .add("managementIp", managementIp)
- .add("dataIp", dataIp)
- .add("vlanIntf", vlanIntf)
- .add("uplinkPort", uplinkPort)
- .add("state", state)
- .add("phyIntfs", phyIntfs)
- .add("auth", auth)
- .add("endpoint", endPoint)
- .toString();
- }
-
- @Override
- public OpenstackNode updateState(NodeState newState) {
- return new Builder()
- .type(type)
- .hostname(hostname)
- .intgBridge(intgBridge)
- .managementIp(managementIp)
- .dataIp(dataIp)
- .vlanIntf(vlanIntf)
- .uplinkPort(uplinkPort)
- .state(newState)
- .phyIntfs(phyIntfs)
- .authentication(auth)
- .endPoint(endPoint)
- .build();
- }
-
- @Override
- public Collection<OpenstackPhyInterface> phyIntfs() {
-
- if (phyIntfs == null) {
- return new ArrayList<>();
- }
-
- return phyIntfs;
- }
-
- @Override
- public PortNumber phyIntfPortNum(String providerPhysnet) {
- Optional<OpenstackPhyInterface> openstackPhyInterface =
- phyIntfs.stream().filter(p -> p.network().equals(providerPhysnet)).findAny();
-
- if (openstackPhyInterface.isPresent()) {
- DeviceService deviceService = DefaultServiceDirectory.getService(DeviceService.class);
- Port port = deviceService.getPorts(intgBridge).stream()
- .filter(p -> p.isEnabled() &&
- Objects.equals(p.annotations().value(PORT_NAME), openstackPhyInterface.get().intf()))
- .findAny().orElse(null);
-
- return port != null ? port.number() : null;
- } else {
- return null;
- }
-
- }
-
- @Override
- public OpenstackAuth authentication() {
- return auth;
- }
-
- @Override
- public String endPoint() {
- return endPoint;
- }
-
- /**
- * Returns new builder instance.
- *
- * @return openstack node builder
- */
- public static Builder builder() {
- return new Builder();
- }
-
- /**
- * Returns new builder instance with the given node as a default value.
- *
- * @param osNode openstack node
- * @return openstack node builder
- */
- public static Builder from(OpenstackNode osNode) {
- return new Builder()
- .hostname(osNode.hostname())
- .type(osNode.type())
- .intgBridge(osNode.intgBridge())
- .managementIp(osNode.managementIp())
- .dataIp(osNode.dataIp())
- .vlanIntf(osNode.vlanIntf())
- .uplinkPort(osNode.uplinkPort())
- .state(osNode.state())
- .phyIntfs(osNode.phyIntfs())
- .authentication(osNode.authentication())
- .endPoint(osNode.endPoint());
- }
-
- /**
- * A builder class for openstack Node.
- */
- public static final class Builder implements OpenstackNode.Builder {
-
- private String hostname;
- private NodeType type;
- private DeviceId intgBridge;
- private IpAddress managementIp;
- private IpAddress dataIp;
- private String vlanIntf;
- private String uplinkPort;
- private NodeState state;
- private Collection<OpenstackPhyInterface> phyIntfs;
- private OpenstackAuth auth;
- private String endPoint;
-
- // private constructor not intended to use from external
- private Builder() {
- }
-
- @Override
- public DefaultOpenstackNode build() {
- checkArgument(hostname != null, NOT_NULL_MSG, "hostname");
- checkArgument(type != null, NOT_NULL_MSG, "type");
- checkArgument(state != null, NOT_NULL_MSG, "state");
- checkArgument(managementIp != null, NOT_NULL_MSG, "management IP");
-
- if (type != NodeType.CONTROLLER) {
- checkArgument(intgBridge != null, NOT_NULL_MSG, "integration bridge");
-
- if (dataIp == null && Strings.isNullOrEmpty(vlanIntf)) {
- throw new IllegalArgumentException("Either data IP or VLAN interface is required");
- }
- } else {
- checkArgument(endPoint != null, NOT_NULL_MSG, "endpoint URL");
- }
-
- if (type == NodeType.GATEWAY && uplinkPort == null) {
- throw new IllegalArgumentException("Uplink port is required for gateway node");
- }
-
- return new DefaultOpenstackNode(hostname,
- type,
- intgBridge,
- managementIp,
- dataIp,
- vlanIntf,
- uplinkPort,
- state,
- phyIntfs,
- auth,
- endPoint);
- }
-
- @Override
- public Builder hostname(String hostname) {
- if (!Strings.isNullOrEmpty(hostname)) {
- this.hostname = hostname;
- }
- return this;
- }
-
- @Override
- public Builder type(NodeType type) {
- this.type = type;
- return this;
- }
-
- @Override
- public Builder intgBridge(DeviceId intgBridge) {
- this.intgBridge = intgBridge;
- return this;
- }
-
- @Override
- public Builder managementIp(IpAddress managementIp) {
- this.managementIp = managementIp;
- return this;
- }
-
- @Override
- public Builder dataIp(IpAddress dataIp) {
- this.dataIp = dataIp;
- return this;
- }
-
- @Override
- public Builder vlanIntf(String vlanIntf) {
- this.vlanIntf = vlanIntf;
- return this;
- }
-
- @Override
- public Builder uplinkPort(String uplinkPort) {
- this.uplinkPort = uplinkPort;
- return this;
- }
-
- @Override
- public Builder state(NodeState state) {
- this.state = state;
- return this;
- }
-
- @Override
- public Builder phyIntfs(Collection<OpenstackPhyInterface> phyIntfs) {
- this.phyIntfs = phyIntfs;
- return this;
- }
-
- @Override
- public Builder authentication(OpenstackAuth auth) {
- this.auth = auth;
- return this;
- }
-
- @Override
- public Builder endPoint(String endPoint) {
- this.endPoint = endPoint;
- return this;
- }
- }
-}
-
diff --git a/apps/openstacknode/app/src/main/java/org/onosproject/openstacknode/impl/DistributedOpenstackNodeStore.java b/apps/openstacknode/app/src/main/java/org/onosproject/openstacknode/impl/DistributedOpenstackNodeStore.java
index 4b40775..d766473 100644
--- a/apps/openstacknode/app/src/main/java/org/onosproject/openstacknode/impl/DistributedOpenstackNodeStore.java
+++ b/apps/openstacknode/app/src/main/java/org/onosproject/openstacknode/impl/DistributedOpenstackNodeStore.java
@@ -25,6 +25,7 @@
import org.onlab.util.KryoNamespace;
import org.onosproject.core.ApplicationId;
import org.onosproject.core.CoreService;
+import org.onosproject.openstacknode.api.DefaultOpenstackNode;
import org.onosproject.openstacknode.api.NodeState;
import org.onosproject.openstacknode.api.OpenstackNode;
import org.onosproject.openstacknode.api.OpenstackNodeEvent;
diff --git a/apps/openstacknode/app/src/test/java/org/onosproject/openstacknode/codec/OpenstackNodeCodecTest.java b/apps/openstacknode/app/src/test/java/org/onosproject/openstacknode/codec/OpenstackNodeCodecTest.java
index da4680c..3f9fcb4 100644
--- a/apps/openstacknode/app/src/test/java/org/onosproject/openstacknode/codec/OpenstackNodeCodecTest.java
+++ b/apps/openstacknode/app/src/test/java/org/onosproject/openstacknode/codec/OpenstackNodeCodecTest.java
@@ -33,7 +33,7 @@
import org.onosproject.openstacknode.api.OpenstackNode;
import org.onosproject.openstacknode.api.OpenstackPhyInterface;
import org.onosproject.openstacknode.impl.DefaultOpenstackAuth;
-import org.onosproject.openstacknode.impl.DefaultOpenstackNode;
+import org.onosproject.openstacknode.api.DefaultOpenstackNode;
import org.onosproject.openstacknode.impl.DefaultOpenstackPhyInterface;
import java.io.IOException;
diff --git a/apps/openstacknode/app/src/test/java/org/onosproject/openstacknode/impl/DefaultOpenstackNodeHandlerTest.java b/apps/openstacknode/app/src/test/java/org/onosproject/openstacknode/impl/DefaultOpenstackNodeHandlerTest.java
index b07044f..4305cc3 100644
--- a/apps/openstacknode/app/src/test/java/org/onosproject/openstacknode/impl/DefaultOpenstackNodeHandlerTest.java
+++ b/apps/openstacknode/app/src/test/java/org/onosproject/openstacknode/impl/DefaultOpenstackNodeHandlerTest.java
@@ -68,6 +68,7 @@
import org.onosproject.net.flow.instructions.ExtensionTreatment;
import org.onosproject.net.flow.instructions.ExtensionTreatmentType;
import org.onosproject.net.provider.ProviderId;
+import org.onosproject.openstacknode.api.DefaultOpenstackNode;
import org.onosproject.openstacknode.api.NodeState;
import org.onosproject.openstacknode.api.OpenstackAuth;
import org.onosproject.openstacknode.api.OpenstackNode;
diff --git a/apps/openstacknode/app/src/test/java/org/onosproject/openstacknode/impl/DefaultOpenstackNodeTest.java b/apps/openstacknode/app/src/test/java/org/onosproject/openstacknode/impl/DefaultOpenstackNodeTest.java
deleted file mode 100644
index 505b907..0000000
--- a/apps/openstacknode/app/src/test/java/org/onosproject/openstacknode/impl/DefaultOpenstackNodeTest.java
+++ /dev/null
@@ -1,121 +0,0 @@
-/*
- * Copyright 2017-present Open Networking Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.onosproject.openstacknode.impl;
-
-import com.google.common.testing.EqualsTester;
-import org.junit.Test;
-import org.onlab.packet.IpAddress;
-import org.onosproject.net.Device;
-import org.onosproject.openstacknode.api.NodeState;
-import org.onosproject.openstacknode.api.OpenstackNode;
-
-/**
- * Unit tests for DefaultOpenstackNode.
- */
-public class DefaultOpenstackNodeTest extends OpenstackNodeTest {
-
- private static final IpAddress TEST_IP = IpAddress.valueOf("10.100.0.3");
-
- private static final String HOSTNAME_1 = "hostname_1";
- private static final String HOSTNAME_2 = "hostname_2";
- private static final Device DEVICE_1 = createDevice(1);
- private static final Device DEVICE_2 = createDevice(2);
- private static final OpenstackNode OS_NODE_1 = createNode(
- HOSTNAME_1,
- OpenstackNode.NodeType.COMPUTE,
- DEVICE_1,
- TEST_IP,
- NodeState.INIT);
- private static final OpenstackNode OS_NODE_2 = createNode(
- HOSTNAME_1,
- OpenstackNode.NodeType.COMPUTE,
- DEVICE_1,
- TEST_IP,
- NodeState.COMPLETE);
- private static final OpenstackNode OS_NODE_3 = createNode(
- HOSTNAME_2,
- OpenstackNode.NodeType.COMPUTE,
- DEVICE_2,
- TEST_IP,
- NodeState.INIT);
-
- /**
- * Checks equals method works as expected.
- */
- @Test
- public void testEquality() {
- new EqualsTester().addEqualityGroup(OS_NODE_1, OS_NODE_2)
- .addEqualityGroup(OS_NODE_3)
- .testEquals();
- }
-
- /**
- * Checks building a node without hostname fails with proper exception.
- */
- @Test(expected = IllegalArgumentException.class)
- public void testBuildWithoutHostname() {
- DefaultOpenstackNode.builder()
- .type(OpenstackNode.NodeType.COMPUTE)
- .intgBridge(DEVICE_1.id())
- .managementIp(TEST_IP)
- .dataIp(TEST_IP)
- .state(NodeState.INIT)
- .build();
- }
-
- /**
- * Checks building a node without type fails with proper exception.
- */
- @Test(expected = IllegalArgumentException.class)
- public void testBuildWithoutType() {
- DefaultOpenstackNode.builder()
- .hostname(HOSTNAME_1)
- .intgBridge(DEVICE_1.id())
- .managementIp(TEST_IP)
- .dataIp(TEST_IP)
- .state(NodeState.INIT)
- .build();
- }
-
- /**
- * Checks building a node without management IP address fails with
- * proper exception.
- */
- @Test(expected = IllegalArgumentException.class)
- public void testBuildWithoutManagementIp() {
- DefaultOpenstackNode.builder()
- .hostname(HOSTNAME_1)
- .type(OpenstackNode.NodeType.COMPUTE)
- .intgBridge(DEVICE_1.id())
- .dataIp(TEST_IP)
- .state(NodeState.INIT)
- .build();
- }
-
- /**
- * Checks building a node without data IP nor VLAN interface name
- * fails with proper exception.
- */
- @Test(expected = IllegalArgumentException.class)
- public void testBuildWithoutDataIpNorVlanIntf() {
- DefaultOpenstackNode.builder()
- .hostname(HOSTNAME_1)
- .type(OpenstackNode.NodeType.COMPUTE)
- .intgBridge(DEVICE_1.id())
- .state(NodeState.INIT)
- .build();
- }
-}
diff --git a/apps/openstacknode/app/src/test/java/org/onosproject/openstacknode/impl/OpenstackNodeManagerTest.java b/apps/openstacknode/app/src/test/java/org/onosproject/openstacknode/impl/OpenstackNodeManagerTest.java
index cb0a73e..a17060e 100644
--- a/apps/openstacknode/app/src/test/java/org/onosproject/openstacknode/impl/OpenstackNodeManagerTest.java
+++ b/apps/openstacknode/app/src/test/java/org/onosproject/openstacknode/impl/OpenstackNodeManagerTest.java
@@ -29,10 +29,12 @@
import org.onosproject.core.DefaultApplicationId;
import org.onosproject.event.Event;
import org.onosproject.net.Device;
+import org.onosproject.openstacknode.api.DefaultOpenstackNode;
import org.onosproject.openstacknode.api.NodeState;
import org.onosproject.openstacknode.api.OpenstackNode;
import org.onosproject.openstacknode.api.OpenstackNodeEvent;
import org.onosproject.openstacknode.api.OpenstackNodeListener;
+import org.onosproject.openstacknode.api.OpenstackNodeTest;
import org.onosproject.store.service.TestStorageService;
import java.util.List;
diff --git a/apps/openstacknode/app/src/test/java/org/onosproject/openstacknode/impl/OpenstackNodeTest.java b/apps/openstacknode/app/src/test/java/org/onosproject/openstacknode/impl/OpenstackNodeTest.java
deleted file mode 100644
index 7deca06..0000000
--- a/apps/openstacknode/app/src/test/java/org/onosproject/openstacknode/impl/OpenstackNodeTest.java
+++ /dev/null
@@ -1,72 +0,0 @@
-/*
- * Copyright 2017-present Open Networking Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.onosproject.openstacknode.impl;
-
-import org.onlab.packet.ChassisId;
-import org.onlab.packet.IpAddress;
-import org.onosproject.net.DefaultDevice;
-import org.onosproject.net.Device;
-import org.onosproject.net.DeviceId;
-import org.onosproject.net.provider.ProviderId;
-import org.onosproject.openstacknode.api.NodeState;
-import org.onosproject.openstacknode.api.OpenstackNode;
-import org.onosproject.openstacknode.api.OpenstackNode.NodeType;
-
-import static org.onosproject.net.Device.Type.SWITCH;
-
-/**
- * Provides a set of test OpenstackNode parameters for use with OpenstackNode related tests.
- */
-public abstract class OpenstackNodeTest {
-
- public static Device createDevice(long devIdNum) {
- return new DefaultDevice(new ProviderId("of", "foo"),
- DeviceId.deviceId(String.format("of:%016d", devIdNum)),
- SWITCH,
- "manufacturer",
- "hwVersion",
- "swVersion",
- "serialNumber",
- new ChassisId(1));
- }
-
- public static OpenstackNode createNode(String hostname, NodeType type,
- Device intgBridge, IpAddress ipAddr,
- NodeState state) {
- return DefaultOpenstackNode.builder()
- .hostname(hostname)
- .type(type)
- .intgBridge(intgBridge.id())
- .managementIp(ipAddr)
- .dataIp(ipAddr)
- .state(state)
- .build();
- }
-
- public static OpenstackNode createNode(String hostname, NodeType type,
- Device intgBridge, IpAddress ipAddr,
- String uplinkPort, NodeState state) {
- return DefaultOpenstackNode.builder()
- .hostname(hostname)
- .type(type)
- .intgBridge(intgBridge.id())
- .managementIp(ipAddr)
- .dataIp(ipAddr)
- .uplinkPort(uplinkPort)
- .state(state)
- .build();
- }
-}
diff --git a/apps/openstacknode/app/src/test/java/org/onosproject/openstacknode/web/OpenstackNodeWebResourceTest.java b/apps/openstacknode/app/src/test/java/org/onosproject/openstacknode/web/OpenstackNodeWebResourceTest.java
index 5ed0f1d..d912013 100644
--- a/apps/openstacknode/app/src/test/java/org/onosproject/openstacknode/web/OpenstackNodeWebResourceTest.java
+++ b/apps/openstacknode/app/src/test/java/org/onosproject/openstacknode/web/OpenstackNodeWebResourceTest.java
@@ -29,7 +29,7 @@
import org.onosproject.openstacknode.api.OpenstackNodeAdminService;
import org.onosproject.openstacknode.api.OpenstackNodeService;
import org.onosproject.openstacknode.codec.OpenstackNodeCodec;
-import org.onosproject.openstacknode.impl.DefaultOpenstackNode;
+import org.onosproject.openstacknode.api.DefaultOpenstackNode;
import org.onosproject.rest.resources.ResourceTest;
import javax.ws.rs.client.Entity;