diff --git a/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/util/OpenstackNetworkingUtil.java b/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/util/OpenstackNetworkingUtil.java
index d0fbe64..ca9647f 100644
--- a/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/util/OpenstackNetworkingUtil.java
+++ b/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/util/OpenstackNetworkingUtil.java
@@ -480,17 +480,7 @@
         StringBuilder endpointSb = new StringBuilder();
         endpointSb.append(auth.protocol().name().toLowerCase());
         endpointSb.append("://");
-        endpointSb.append(node.endPoint());
-        endpointSb.append(":");
-        endpointSb.append(auth.port());
-        endpointSb.append("/");
-
-        // in case the version is v3, we need to append identity path into endpoint
-        if (auth.version().equals(KEYSTONE_V3)) {
-            endpointSb.append(IDENTITY_PATH);
-        }
-
-        endpointSb.append(auth.version());
+        endpointSb.append(node.endpoint());
         return endpointSb.toString();
     }
 
diff --git a/apps/openstacknetworking/app/src/test/java/org/onosproject/openstacknetworking/util/OpenstackNetworkingUtilTest.java b/apps/openstacknetworking/app/src/test/java/org/onosproject/openstacknetworking/util/OpenstackNetworkingUtilTest.java
index eb323ef..0e291f8 100644
--- a/apps/openstacknetworking/app/src/test/java/org/onosproject/openstacknetworking/util/OpenstackNetworkingUtilTest.java
+++ b/apps/openstacknetworking/app/src/test/java/org/onosproject/openstacknetworking/util/OpenstackNetworkingUtilTest.java
@@ -397,12 +397,11 @@
     /**
      * Tests the getConnectedClient method.
      */
-    @Test(expected = Exception.class)
+    @Test
     public void testGetConnectedClient() {
         OpenstackNode.Builder osNodeBuilderV2 = DefaultOpenstackNode.builder();
         OpenstackAuth.Builder osNodeAuthBuilderV2 = DefaultOpenstackAuth.builder()
                 .version("v2.0")
-                .port(35357)
                 .protocol(OpenstackAuth.Protocol.HTTP)
                 .project("admin")
                 .username("admin")
@@ -412,16 +411,14 @@
         openstackControlNodeV2 = osNodeBuilderV2.hostname("controllerv2")
                 .type(OpenstackNode.NodeType.CONTROLLER)
                 .managementIp(IpAddress.valueOf("1.1.1.1"))
-                .endPoint("1.1.1.1")
+                .endpoint("1.1.1.1")
                 .authentication(osNodeAuthBuilderV2.build())
                 .state(NodeState.COMPLETE)
                 .build();
 
-
         OpenstackNode.Builder osNodeBuilderV3 = DefaultOpenstackNode.builder();
         OpenstackAuth.Builder osNodeAuthBuilderV3 = DefaultOpenstackAuth.builder()
                 .version("v2")
-                .port(80)
                 .protocol(OpenstackAuth.Protocol.HTTP)
                 .project("admin")
                 .username("admin")
@@ -431,7 +428,7 @@
         openstackControlNodeV3 = osNodeBuilderV3.hostname("controllerv3")
                 .type(OpenstackNode.NodeType.CONTROLLER)
                 .managementIp(IpAddress.valueOf("2.2.2.2"))
-                .endPoint("2.2.2.2")
+                .endpoint("2.2.2.2")
                 .authentication(osNodeAuthBuilderV3.build())
                 .state(NodeState.COMPLETE)
                 .build();
diff --git a/apps/openstacknetworking/network-cfg.json b/apps/openstacknetworking/network-cfg.json
index 76c5c09..38adbc7 100644
--- a/apps/openstacknetworking/network-cfg.json
+++ b/apps/openstacknetworking/network-cfg.json
@@ -57,7 +57,7 @@
             "hostname" : "controller",
             "type" : "CONTROLLER",
             "managementIp" : "172.16.130.10",
-            "endPoint" : "keystone-endpoint-url",
+            "endpoint" : "keystone-endpoint-url",
             "authentication" : {
               "version" : "v2.0",
               "port" : 35357,
diff --git a/apps/openstacknode/api/src/main/java/org/onosproject/openstacknode/api/DefaultOpenstackAuth.java b/apps/openstacknode/api/src/main/java/org/onosproject/openstacknode/api/DefaultOpenstackAuth.java
index fb6f53b..ae0af8f 100644
--- a/apps/openstacknode/api/src/main/java/org/onosproject/openstacknode/api/DefaultOpenstackAuth.java
+++ b/apps/openstacknode/api/src/main/java/org/onosproject/openstacknode/api/DefaultOpenstackAuth.java
@@ -27,7 +27,6 @@
 public final class DefaultOpenstackAuth implements OpenstackAuth {
 
     private final String version;
-    private final Integer port;
     private final Protocol protocol;
     private final String username;
     private final String password;
@@ -40,19 +39,17 @@
      * A default constructor of keystone authentication instance.
      *
      * @param version       version number
-     * @param port          endpoint port number
      * @param protocol      endpoint protocol type
      * @param username      keystone username
      * @param password      keystone password
      * @param project       project name
      * @param perspective   user perspective
      */
-    private DefaultOpenstackAuth(String version, Integer port, Protocol protocol,
+    private DefaultOpenstackAuth(String version, Protocol protocol,
                                    String username, String password, String project,
                                    Perspective perspective) {
 
         this.version = version;
-        this.port = port;
         this.protocol = protocol;
         this.username = username;
         this.password = password;
@@ -66,11 +63,6 @@
     }
 
     @Override
-    public Integer port() {
-        return port;
-    }
-
-    @Override
     public Protocol protocol() {
         return protocol;
     }
@@ -104,7 +96,6 @@
         if (obj instanceof DefaultOpenstackAuth) {
             DefaultOpenstackAuth that = (DefaultOpenstackAuth) obj;
             return Objects.equals(version, that.version) &&
-                    Objects.equals(port, that.port) &&
                     Objects.equals(protocol, that.protocol) &&
                     Objects.equals(username, that.username) &&
                     Objects.equals(password, that.password) &&
@@ -117,7 +108,6 @@
     @Override
     public int hashCode() {
         return Objects.hash(version,
-                port,
                 protocol,
                 username,
                 password,
@@ -129,7 +119,6 @@
     public String toString() {
         return MoreObjects.toStringHelper(getClass())
                 .add("version", version)
-                .add("port", port)
                 .add("protocol", protocol)
                 .add("username", username)
                 .add("password", password)
@@ -153,7 +142,6 @@
     public static final class Builder implements OpenstackAuth.Builder {
 
         private String version;
-        private Integer port;
         private Protocol protocol;
         private String username;
         private String password;
@@ -167,14 +155,12 @@
         @Override
         public OpenstackAuth build() {
             checkArgument(version != null, NOT_NULL_MSG, "version");
-            checkArgument(port != null, NOT_NULL_MSG, "port");
             checkArgument(protocol != null, NOT_NULL_MSG, "protocol");
             checkArgument(username != null, NOT_NULL_MSG, "username");
             checkArgument(password != null, NOT_NULL_MSG, "password");
             checkArgument(project != null, NOT_NULL_MSG, "project");
 
             return new DefaultOpenstackAuth(version,
-                    port,
                     protocol,
                     username,
                     password,
@@ -189,12 +175,6 @@
         }
 
         @Override
-        public Builder port(Integer port) {
-            this.port = port;
-            return this;
-        }
-
-        @Override
         public Builder protocol(Protocol protocol) {
             this.protocol = protocol;
             return this;
diff --git a/apps/openstacknode/api/src/main/java/org/onosproject/openstacknode/api/DefaultOpenstackNode.java b/apps/openstacknode/api/src/main/java/org/onosproject/openstacknode/api/DefaultOpenstackNode.java
index a7ee999..43a4535 100644
--- a/apps/openstacknode/api/src/main/java/org/onosproject/openstacknode/api/DefaultOpenstackNode.java
+++ b/apps/openstacknode/api/src/main/java/org/onosproject/openstacknode/api/DefaultOpenstackNode.java
@@ -56,7 +56,7 @@
     private final Collection<OpenstackPhyInterface> phyIntfs;
     private final Collection<ControllerInfo> controllers;
     private final OpenstackAuth auth;
-    private final String endPoint;
+    private final String endpoint;
     private final OpenstackSshAuth sshAuth;
     private final DatapathType datapathType;
 
@@ -78,7 +78,7 @@
      * @param phyIntfs      physical interfaces
      * @param controllers   customized controllers
      * @param auth          keystone authentication info
-     * @param endPoint      openstack endpoint URL
+     * @param endpoint      openstack endpoint URL
      * @param sshAuth       ssh authentication info
      * @param datapathType  data path type
      */
@@ -92,7 +92,7 @@
                                    Collection<OpenstackPhyInterface> phyIntfs,
                                    Collection<ControllerInfo> controllers,
                                    OpenstackAuth auth,
-                                   String endPoint,
+                                   String endpoint,
                                    OpenstackSshAuth sshAuth,
                                    DatapathType datapathType) {
         this.hostname = hostname;
@@ -106,7 +106,7 @@
         this.phyIntfs = phyIntfs;
         this.controllers = controllers;
         this.auth = auth;
-        this.endPoint = endPoint;
+        this.endpoint = endpoint;
         this.sshAuth = sshAuth;
         this.datapathType = datapathType;
     }
@@ -255,7 +255,7 @@
                     Objects.equals(phyIntfs, that.phyIntfs) &&
                     Objects.equals(controllers, that.controllers) &&
                     Objects.equals(auth, that.auth) &&
-                    Objects.equals(endPoint, that.endPoint) &&
+                    Objects.equals(endpoint, that.endpoint) &&
                     Objects.equals(sshAuth, that.sshAuth) &&
                     Objects.equals(datapathType, that.datapathType);
         }
@@ -274,7 +274,7 @@
                 phyIntfs,
                 controllers,
                 auth,
-                endPoint,
+                endpoint,
                 sshAuth,
                 datapathType);
     }
@@ -293,7 +293,7 @@
                 .add("phyIntfs", phyIntfs)
                 .add("controllers", controllers)
                 .add("auth", auth)
-                .add("endpoint", endPoint)
+                .add("endpoint", endpoint)
                 .add("sshAuth", sshAuth)
                 .add("datapathType", datapathType)
                 .toString();
@@ -313,7 +313,7 @@
                 .phyIntfs(phyIntfs)
                 .controllers(controllers)
                 .authentication(auth)
-                .endPoint(endPoint)
+                .endpoint(endpoint)
                 .sshAuthInfo(sshAuth)
                 .datapathType(datapathType)
                 .build();
@@ -333,7 +333,7 @@
                 .phyIntfs(phyIntfs)
                 .controllers(controllers)
                 .authentication(auth)
-                .endPoint(endPoint)
+                .endpoint(endpoint)
                 .sshAuthInfo(sshAuth)
                 .datapathType(datapathType)
                 .build();
@@ -389,8 +389,8 @@
     }
 
     @Override
-    public String endPoint() {
-        return endPoint;
+    public String endpoint() {
+        return endpoint;
     }
 
     /**
@@ -421,7 +421,7 @@
                 .phyIntfs(osNode.phyIntfs())
                 .controllers(osNode.controllers())
                 .authentication(osNode.authentication())
-                .endPoint(osNode.endPoint())
+                .endpoint(osNode.endpoint())
                 .sshAuthInfo(osNode.sshAuthInfo())
                 .datapathType(osNode.datapathType());
     }
@@ -442,7 +442,7 @@
         private Collection<OpenstackPhyInterface> phyIntfs;
         private Collection<ControllerInfo> controllers;
         private OpenstackAuth auth;
-        private String endPoint;
+        private String endpoint;
         private OpenstackSshAuth sshAuth;
         private DatapathType datapathType = DatapathType.NORMAL;
 
@@ -462,7 +462,7 @@
                     throw new IllegalArgumentException("Either data IP or VLAN interface is required");
                 }
             } else {
-                checkArgument(endPoint != null, NOT_NULL_MSG, "endpoint URL");
+                checkArgument(endpoint != null, NOT_NULL_MSG, "endpoint URL");
             }
 
             if (type == NodeType.GATEWAY && uplinkPort == null) {
@@ -480,7 +480,7 @@
                     phyIntfs,
                     controllers,
                     auth,
-                    endPoint,
+                    endpoint,
                     sshAuth,
                     datapathType);
         }
@@ -554,8 +554,8 @@
         }
 
         @Override
-        public Builder endPoint(String endPoint) {
-            this.endPoint = endPoint;
+        public Builder endpoint(String endpoint) {
+            this.endpoint = endpoint;
             return this;
         }
 
diff --git a/apps/openstacknode/api/src/main/java/org/onosproject/openstacknode/api/OpenstackAuth.java b/apps/openstacknode/api/src/main/java/org/onosproject/openstacknode/api/OpenstackAuth.java
index e7e04cb..7704efe 100644
--- a/apps/openstacknode/api/src/main/java/org/onosproject/openstacknode/api/OpenstackAuth.java
+++ b/apps/openstacknode/api/src/main/java/org/onosproject/openstacknode/api/OpenstackAuth.java
@@ -45,13 +45,6 @@
     String version();
 
     /**
-     * Returns the keystone authentication port number.
-     *
-     * @return keystone authentication port number
-     */
-    Integer port();
-
-    /**
      * Returns the keystone authentication protocol type.
      *
      * @return keystone authentication protocol type
@@ -107,14 +100,6 @@
         Builder version(String version);
 
         /**
-         * Returns keystone authentication builder with supplied port number.
-         *
-         * @param port port number
-         * @return keystone authentication builder
-         */
-        Builder port(Integer port);
-
-        /**
          * Returns keystone authentication builder with supplied protocol.
          *
          * @param protocol protocol
diff --git a/apps/openstacknode/api/src/main/java/org/onosproject/openstacknode/api/OpenstackNode.java b/apps/openstacknode/api/src/main/java/org/onosproject/openstacknode/api/OpenstackNode.java
index 3a56593..7fbbf9a 100644
--- a/apps/openstacknode/api/src/main/java/org/onosproject/openstacknode/api/OpenstackNode.java
+++ b/apps/openstacknode/api/src/main/java/org/onosproject/openstacknode/api/OpenstackNode.java
@@ -221,7 +221,7 @@
      *
      * @return keystone authentication info
      */
-    String endPoint();
+    String endpoint();
 
     /**
      * Returns a collection of customized controllers.
@@ -340,10 +340,10 @@
         /**
          * Returns openstack node builder with supplied endpoint info.
          *
-         * @param endPoint endpoint info
+         * @param endpoint endpoint info
          * @return openstack node builder
          */
-        Builder endPoint(String endPoint);
+        Builder endpoint(String endpoint);
 
         /**
          * Returns openstack node builder with supplied ssh authentication info.
diff --git a/apps/openstacknode/api/src/test/java/org/onosproject/openstacknode/api/OpenstackNodeAdapter.java b/apps/openstacknode/api/src/test/java/org/onosproject/openstacknode/api/OpenstackNodeAdapter.java
index e83f198..333edb0 100644
--- a/apps/openstacknode/api/src/test/java/org/onosproject/openstacknode/api/OpenstackNodeAdapter.java
+++ b/apps/openstacknode/api/src/test/java/org/onosproject/openstacknode/api/OpenstackNodeAdapter.java
@@ -140,7 +140,7 @@
     }
 
     @Override
-    public String endPoint() {
+    public String endpoint() {
         return null;
     }
 
diff --git a/apps/openstacknode/app/src/main/java/org/onosproject/openstacknode/codec/OpenstackAuthCodec.java b/apps/openstacknode/app/src/main/java/org/onosproject/openstacknode/codec/OpenstackAuthCodec.java
index 35e806d..d3ddabb 100644
--- a/apps/openstacknode/app/src/main/java/org/onosproject/openstacknode/codec/OpenstackAuthCodec.java
+++ b/apps/openstacknode/app/src/main/java/org/onosproject/openstacknode/codec/OpenstackAuthCodec.java
@@ -35,7 +35,6 @@
     private final Logger log = getLogger(getClass());
 
     private static final String VERSION = "version";
-    private static final String PORT = "port";
     private static final String PROTOCOL = "protocol";
     private static final String USERNAME = "username";
     private static final String PASSWORD = "password";
@@ -50,7 +49,6 @@
 
         ObjectNode result = context.mapper().createObjectNode()
                 .put(VERSION, auth.version())
-                .put(PORT, auth.port())
                 .put(PROTOCOL, auth.protocol().name())
                 .put(USERNAME, auth.username())
                 .put(PASSWORD, auth.password())
@@ -71,8 +69,6 @@
 
         String version = nullIsIllegal(json.get(VERSION).asText(),
                 VERSION + MISSING_MESSAGE);
-        Integer port = nullIsIllegal(json.get(PORT).asInt(),
-                PORT + MISSING_MESSAGE);
         String protocol = nullIsIllegal(json.get(PROTOCOL).asText(),
                 PROTOCOL + MISSING_MESSAGE);
         String username = nullIsIllegal(json.get(USERNAME).asText(),
@@ -84,7 +80,6 @@
 
         DefaultOpenstackAuth.Builder authBuilder = DefaultOpenstackAuth.builder()
                 .version(version)
-                .port(port)
                 .protocol(OpenstackAuth.Protocol.valueOf(protocol))
                 .username(username)
                 .password(password)
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 ef7b341..66a3f8b 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
@@ -59,7 +59,7 @@
     private static final String PHYSICAL_INTERFACES = "phyIntfs";
     private static final String CONTROLLERS = "controllers";
     private static final String AUTHENTICATION = "authentication";
-    private static final String END_POINT = "endPoint";
+    private static final String END_POINT = "endpoint";
     private static final String SSH_AUTH = "sshAuth";
     private static final String DATA_PATH_TYPE = "datapathType";
 
@@ -84,7 +84,7 @@
         }
 
         if (type == OpenstackNode.NodeType.CONTROLLER) {
-            result.put(END_POINT, node.endPoint());
+            result.put(END_POINT, node.endpoint());
         }
 
         if (node.intgBridge() != null) {
@@ -156,7 +156,7 @@
         if (type.equals(CONTROLLER)) {
             String endPoint = nullIsIllegal(json.get(END_POINT).asText(),
                     END_POINT + MISSING_MESSAGE);
-            nodeBuilder.endPoint(endPoint);
+            nodeBuilder.endpoint(endPoint);
         }
         if (json.get(VLAN_INTF_NAME) != null) {
             nodeBuilder.vlanIntf(json.get(VLAN_INTF_NAME).asText());
diff --git a/apps/openstacknode/app/src/main/java/org/onosproject/openstacknode/util/OpenstackNodeUtil.java b/apps/openstacknode/app/src/main/java/org/onosproject/openstacknode/util/OpenstackNodeUtil.java
index e970b2b..4d8167b 100644
--- a/apps/openstacknode/app/src/main/java/org/onosproject/openstacknode/util/OpenstackNodeUtil.java
+++ b/apps/openstacknode/app/src/main/java/org/onosproject/openstacknode/util/OpenstackNodeUtil.java
@@ -212,17 +212,7 @@
         StringBuilder endpointSb = new StringBuilder();
         endpointSb.append(auth.protocol().name().toLowerCase());
         endpointSb.append("://");
-        endpointSb.append(node.endPoint());
-        endpointSb.append(":");
-        endpointSb.append(auth.port());
-        endpointSb.append("/");
-
-        // in case the version is v3, we need to append identity path into endpoint
-        if (auth.version().equals(KEYSTONE_V3)) {
-            endpointSb.append(IDENTITY_PATH);
-        }
-
-        endpointSb.append(auth.version());
+        endpointSb.append(node.endpoint());
         return endpointSb.toString();
     }
 
diff --git a/apps/openstacknode/app/src/test/java/org/onosproject/openstacknode/codec/OpenstackAuthJsonMatcher.java b/apps/openstacknode/app/src/test/java/org/onosproject/openstacknode/codec/OpenstackAuthJsonMatcher.java
index 2f165f9..bed83ad 100644
--- a/apps/openstacknode/app/src/test/java/org/onosproject/openstacknode/codec/OpenstackAuthJsonMatcher.java
+++ b/apps/openstacknode/app/src/test/java/org/onosproject/openstacknode/codec/OpenstackAuthJsonMatcher.java
@@ -50,14 +50,6 @@
             return false;
         }
 
-        // check port
-        Integer jsonPort = jsonNode.get(PORT).asInt();
-        Integer port = auth.port();
-        if (!jsonPort.equals(port)) {
-            description.appendText("port was " + jsonPort);
-            return false;
-        }
-
         // check protocol
         String jsonProtocol = jsonNode.get(PROTOCOL).asText();
         String protocol = auth.protocol().name();
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 3d45238..49b67a5 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
@@ -181,7 +181,6 @@
     public void testOpenstackControllerNodeEncode() {
         OpenstackAuth auth = DefaultOpenstackAuth.builder()
                 .version("v2.0")
-                .port(35357)
                 .protocol(OpenstackAuth.Protocol.HTTP)
                 .project("admin")
                 .username("admin")
@@ -194,7 +193,7 @@
                 .type(OpenstackNode.NodeType.CONTROLLER)
                 .state(NodeState.INIT)
                 .managementIp(IpAddress.valueOf("172.16.130.10"))
-                .endPoint("keystone-end-point-url")
+                .endpoint("keystone-end-point-url")
                 .authentication(auth)
                 .build();
 
@@ -212,12 +211,11 @@
         assertThat(node.hostname(), is("controller"));
         assertThat(node.type().name(), is("CONTROLLER"));
         assertThat(node.managementIp().toString(), is("172.16.130.10"));
-        assertThat(node.endPoint(), is("keystone-end-point-url"));
+        assertThat(node.endpoint(), is("keystone-end-point-url"));
 
         OpenstackAuth auth = node.authentication();
 
         assertThat(auth.version(), is("v2.0"));
-        assertThat(auth.port(), is(35357));
         assertThat(auth.protocol(), is(OpenstackAuth.Protocol.HTTP));
         assertThat(auth.username(), is("admin"));
         assertThat(auth.password(), is("nova"));
diff --git a/apps/openstacknode/app/src/test/java/org/onosproject/openstacknode/codec/OpenstackNodeJsonMatcher.java b/apps/openstacknode/app/src/test/java/org/onosproject/openstacknode/codec/OpenstackNodeJsonMatcher.java
index 3614f5f..b53c31c 100644
--- a/apps/openstacknode/app/src/test/java/org/onosproject/openstacknode/codec/OpenstackNodeJsonMatcher.java
+++ b/apps/openstacknode/app/src/test/java/org/onosproject/openstacknode/codec/OpenstackNodeJsonMatcher.java
@@ -40,7 +40,7 @@
     private static final String PHYSICAL_INTERFACES = "phyIntfs";
     private static final String CONTROLLERS = "controllers";
     private static final String AUTHENTICATION = "authentication";
-    private static final String END_POINT = "endPoint";
+    private static final String END_POINT = "endpoint";
     private static final String SSH_AUTH = "sshAuth";
     private static final String DATA_PATH_TYPE = "datapathType";
 
@@ -135,11 +135,11 @@
         }
 
         // check endpoint URL
-        JsonNode jsonEndPoint = jsonNode.get(END_POINT);
-        if (jsonEndPoint != null) {
-            String endPoint = node.endPoint();
-            if (!jsonEndPoint.asText().equals(endPoint)) {
-                description.appendText("endpoint URL was " + jsonEndPoint);
+        JsonNode jsonEndpoint = jsonNode.get(END_POINT);
+        if (jsonEndpoint != null) {
+            String endpoint = node.endpoint();
+            if (!jsonEndpoint.asText().equals(endpoint)) {
+                description.appendText("endpoint URL was " + jsonEndpoint);
                 return false;
             }
         }
diff --git a/apps/openstacknode/app/src/test/java/org/onosproject/openstacknode/impl/DefaultOpenstackAuthTest.java b/apps/openstacknode/app/src/test/java/org/onosproject/openstacknode/impl/DefaultOpenstackAuthTest.java
index 7a09f96..e602cf2 100644
--- a/apps/openstacknode/app/src/test/java/org/onosproject/openstacknode/impl/DefaultOpenstackAuthTest.java
+++ b/apps/openstacknode/app/src/test/java/org/onosproject/openstacknode/impl/DefaultOpenstackAuthTest.java
@@ -33,24 +33,20 @@
     private static final String PROJECT = "admin";
     private static final String VERSION_1 = "v2.0";
     private static final String VERSION_2 = "v3";
-    private static final Integer PORT_1 = 35357;
-    private static final Integer PORT_2 = 5000;
     private static final OpenstackAuth.Protocol PROTOCOL_1 = OpenstackAuth.Protocol.HTTP;
     private static final OpenstackAuth.Protocol PROTOCOL_2 = OpenstackAuth.Protocol.HTTPS;
 
     private static final OpenstackAuth OS_AUTH_1 =
-                         createOpenstackAuth(VERSION_1, PORT_1, PROTOCOL_1);
+                         createOpenstackAuth(VERSION_1, PROTOCOL_1);
     private static final OpenstackAuth OS_AUTH_2 =
-                         createOpenstackAuth(VERSION_2, PORT_2, PROTOCOL_2);
+                         createOpenstackAuth(VERSION_2, PROTOCOL_2);
     private static final OpenstackAuth OS_AUTH_3 =
-                         createOpenstackAuth(VERSION_1, PORT_1, PROTOCOL_1);
+                         createOpenstackAuth(VERSION_1, PROTOCOL_1);
 
     private static OpenstackAuth createOpenstackAuth(String version,
-                                              Integer port,
                                               OpenstackAuth.Protocol protocol) {
         return DefaultOpenstackAuth.builder()
                 .version(version)
-                .port(port)
                 .protocol(protocol)
                 .username(USERNAME)
                 .password(PASSWORD)
@@ -77,7 +73,6 @@
         OpenstackAuth auth = OS_AUTH_1;
 
         assertThat(auth.version(), is("v2.0"));
-        assertThat(auth.port(), is(35357));
         assertThat(auth.protocol(), is(OpenstackAuth.Protocol.HTTP));
         assertThat(auth.username(), is("admin"));
         assertThat(auth.password(), is("nova"));
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 e24b4e4..9ed0a3a 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
@@ -501,7 +501,7 @@
                                   Set<OpenstackPhyInterface> phyIntfs,
                                   Set<ControllerInfo> controllers,
                                   OpenstackAuth auth,
-                                  String endPoint,
+                                  String endpoint,
                                   OpenstackSshAuth sshAuth,
                                   DatapathType datapathType) {
             super(hostname,
@@ -515,7 +515,7 @@
                     phyIntfs,
                     controllers,
                     auth,
-                    endPoint,
+                    endpoint,
                     sshAuth,
                     datapathType);
         }
diff --git a/apps/openstacknode/app/src/test/resources/org/onosproject/openstacknode/codec/OpenstackControllerNode.json b/apps/openstacknode/app/src/test/resources/org/onosproject/openstacknode/codec/OpenstackControllerNode.json
index 705a977..c60baad 100644
--- a/apps/openstacknode/app/src/test/resources/org/onosproject/openstacknode/codec/OpenstackControllerNode.json
+++ b/apps/openstacknode/app/src/test/resources/org/onosproject/openstacknode/codec/OpenstackControllerNode.json
@@ -2,7 +2,7 @@
   "hostname": "controller",
   "type": "CONTROLLER",
   "managementIp": "172.16.130.10",
-  "endPoint": "keystone-end-point-url",
+  "endpoint": "keystone-end-point-url",
   "authentication": {
     "version": "v2.0",
     "port": 35357,
diff --git a/apps/openstacknode/network-cfg.json b/apps/openstacknode/network-cfg.json
index 6de0cf3..b173147 100644
--- a/apps/openstacknode/network-cfg.json
+++ b/apps/openstacknode/network-cfg.json
@@ -62,7 +62,7 @@
             "hostname" : "controller",
             "type" : "CONTROLLER",
             "managementIp" : "172.16.130.10",
-            "endPoint" : "keystone-endpoint-url",
+            "endpoint" : "keystone-endpoint-url",
             "authentication" : {
               "version" : "v2.0",
               "port" : 35357,
