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;
