diff --git a/apps/k8s-node/api/src/test/java/org/onosproject/k8snode/api/DefaultK8sNodeTest.java b/apps/k8s-node/api/src/test/java/org/onosproject/k8snode/api/DefaultK8sNodeTest.java
index 463d89d..26553a8 100644
--- a/apps/k8s-node/api/src/test/java/org/onosproject/k8snode/api/DefaultK8sNodeTest.java
+++ b/apps/k8s-node/api/src/test/java/org/onosproject/k8snode/api/DefaultK8sNodeTest.java
@@ -41,10 +41,13 @@
 
     private static final IpAddress TEST_IP = IpAddress.valueOf("10.100.0.3");
 
+    private static final String CLUSTER_NAME = "cluster";
     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 int SEGMENT_ID_1 = 1;
+    private static final int SEGMENT_ID_2 = 2;
 
     private static final IpAddress MANAGEMENT_IP = IpAddress.valueOf("10.10.10.10");
     private static final IpAddress DATA_IP = IpAddress.valueOf("20.20.20.20");
@@ -64,8 +67,11 @@
     private K8sNode refNode;
 
     private static final K8sNode K8S_NODE_1 = createNode(
+            CLUSTER_NAME,
             HOSTNAME_1,
             MINION,
+            SEGMENT_ID_1,
+            DEVICE_1,
             DEVICE_1,
             DEVICE_1,
             DEVICE_1,
@@ -76,8 +82,11 @@
             EXT_GATEWAY_IP_1,
             POD_CIDR_1);
     private static final K8sNode K8S_NODE_2 = createNode(
+            CLUSTER_NAME,
             HOSTNAME_1,
             MINION,
+            SEGMENT_ID_1,
+            DEVICE_1,
             DEVICE_1,
             DEVICE_1,
             DEVICE_1,
@@ -88,8 +97,11 @@
             EXT_GATEWAY_IP_1,
             POD_CIDR_1);
     private static final K8sNode K8S_NODE_3 = createNode(
+            CLUSTER_NAME,
             HOSTNAME_2,
             MINION,
+            SEGMENT_ID_2,
+            DEVICE_2,
             DEVICE_2,
             DEVICE_2,
             DEVICE_2,
@@ -106,13 +118,16 @@
     @Before
     public void setUp() {
         refNode = DefaultK8sNode.builder()
+                .clusterName(CLUSTER_NAME)
                 .hostname(HOSTNAME_1)
                 .type(MINION)
+                .segmentId(SEGMENT_ID_1)
                 .managementIp(MANAGEMENT_IP)
                 .dataIp(DATA_IP)
                 .intgBridge(DEVICE_1.id())
                 .extBridge(DEVICE_1.id())
                 .localBridge(DEVICE_1.id())
+                .tunBridge(DEVICE_1.id())
                 .extIntf(BRIDGE_INTF_1)
                 .state(COMPLETE)
                 .extBridgeIp(EXT_BRIDGE_IP_1)
@@ -141,6 +156,7 @@
         assertEquals(refNode.intgBridge(), DEVICE_1.id());
         assertEquals(refNode.extBridge(), DEVICE_1.id());
         assertEquals(refNode.localBridge(), DEVICE_1.id());
+        assertEquals(refNode.tunBridge(), DEVICE_1.id());
     }
 
     /**
@@ -171,9 +187,12 @@
     public void testBuildWithoutHostname() {
         DefaultK8sNode.builder()
                 .type(MINION)
+                .clusterName(CLUSTER_NAME)
+                .segmentId(SEGMENT_ID_1)
                 .intgBridge(DEVICE_1.id())
                 .extBridge(DEVICE_1.id())
                 .localBridge(DEVICE_1.id())
+                .tunBridge(DEVICE_1.id())
                 .extIntf(BRIDGE_INTF_1)
                 .managementIp(TEST_IP)
                 .dataIp(TEST_IP)
@@ -191,9 +210,12 @@
     public void testBuildWithoutType() {
         DefaultK8sNode.builder()
                 .hostname(HOSTNAME_1)
+                .clusterName(CLUSTER_NAME)
+                .segmentId(SEGMENT_ID_1)
                 .intgBridge(DEVICE_1.id())
                 .extBridge(DEVICE_1.id())
                 .localBridge(DEVICE_1.id())
+                .tunBridge(DEVICE_1.id())
                 .extIntf(BRIDGE_INTF_1)
                 .managementIp(TEST_IP)
                 .dataIp(TEST_IP)
@@ -211,11 +233,14 @@
     @Test(expected = IllegalArgumentException.class)
     public void testBuildWithoutManagementIp() {
         DefaultK8sNode.builder()
+                .clusterName(CLUSTER_NAME)
                 .hostname(HOSTNAME_1)
                 .type(MINION)
+                .segmentId(SEGMENT_ID_1)
                 .intgBridge(DEVICE_1.id())
                 .extBridge(DEVICE_1.id())
                 .localBridge(DEVICE_1.id())
+                .tunBridge(DEVICE_1.id())
                 .extIntf(BRIDGE_INTF_1)
                 .dataIp(TEST_IP)
                 .state(INIT)
@@ -226,6 +251,7 @@
     }
 
     private void checkCommonProperties(K8sNode node) {
+        assertEquals(node.clusterName(), CLUSTER_NAME);
         assertEquals(node.hostname(), HOSTNAME_1);
         assertEquals(node.type(), MINION);
         assertEquals(node.managementIp(), MANAGEMENT_IP);
@@ -243,18 +269,21 @@
                 new ChassisId(1));
     }
 
-    private static K8sNode createNode(String hostname, Type type,
-                                      Device intgBridge, Device extBridge,
-                                      Device localBridge, String bridgeIntf,
+    private static K8sNode createNode(String clusterName, String hostname, Type type,
+                                      int segmentId, Device intgBridge, Device extBridge,
+                                      Device localBridge, Device tunBridge, String bridgeIntf,
                                       IpAddress ipAddr, K8sNodeState state,
                                       IpAddress extBridgeIp, IpAddress extGatewayIp,
                                       String podCidr) {
         return DefaultK8sNode.builder()
+                .clusterName(clusterName)
                 .hostname(hostname)
                 .type(type)
+                .segmentId(segmentId)
                 .intgBridge(intgBridge.id())
                 .extBridge(extBridge.id())
                 .localBridge(localBridge.id())
+                .tunBridge(tunBridge.id())
                 .extIntf(bridgeIntf)
                 .managementIp(ipAddr)
                 .dataIp(ipAddr)
