Modify IaaS adapter URL parsing to include path 25/9525/7
authorRY303T <RY303T@att.com>
Wed, 30 Aug 2017 20:12:42 +0000 (16:12 -0400)
committerRanda Maher <rx196w@att.com>
Fri, 1 Sep 2017 00:18:57 +0000 (00:18 +0000)
Modified the pattern in IdentityURL and VMURL to include optional path
Modified the toString in IdentityURL and VMURL to properly print the
full url string
Updated tests to include new URL format

Issue-ID: APPC-133
Change-Id: Ic7c272b70d4fe18c815d5dd5311f760d8b8953c1
Signed-off-by: RY303T <RY303T@att.com>
appc-adapters/appc-iaas-adapter/appc-iaas-adapter-bundle/src/main/java/org/openecomp/appc/adapter/iaas/impl/IdentityURL.java
appc-adapters/appc-iaas-adapter/appc-iaas-adapter-bundle/src/main/java/org/openecomp/appc/adapter/iaas/impl/VMURL.java
appc-adapters/appc-iaas-adapter/appc-iaas-adapter-bundle/src/main/resources/org/openecomp/appc/default.properties
appc-adapters/appc-iaas-adapter/appc-iaas-adapter-bundle/src/test/java/org/openecomp/appc/adapter/iaas/impl/TestIdentityUrl.java
appc-adapters/appc-iaas-adapter/appc-iaas-adapter-bundle/src/test/java/org/openecomp/appc/adapter/iaas/impl/TestVMURL.java

index 482e54a..327191a 100644 (file)
@@ -35,7 +35,7 @@ public class IdentityURL {
      * The regular expression pattern used to parse the URL. Capturing groups are used to identify and extract the
      * various component parts of the URL.
      */
-    private static Pattern pattern = Pattern.compile("(\\p{Alnum}+)://([^/:]+)(?::([0-9]+))?/(v[0-9\\.]+)/?");
+    private static Pattern pattern = Pattern.compile("(\\p{Alnum}+)://([^/:]+)(?::([0-9]+))?(/.*)?/(v[0-9\\.]+)/?");
 
     /**
      * The URL scheme or protocol, such as HTTP or HTTPS
@@ -47,6 +47,11 @@ public class IdentityURL {
      */
     private String host;
 
+    /**
+     * The path of the service, or null if no path is defined
+     */
+    private String path;
+
     /**
      * The port number, or null if no port is defined
      */
@@ -83,7 +88,8 @@ public class IdentityURL {
                 obj.scheme = matcher.group(1);
                 obj.host = matcher.group(2);
                 obj.port = matcher.group(3);
-                obj.version = matcher.group(4);
+                obj.path = matcher.group(4);
+                obj.version = matcher.group(5);
             }
         }
 
@@ -104,6 +110,13 @@ public class IdentityURL {
         return host;
     }
 
+    /**
+     * @return The URL path, or null if no path was defined
+     */
+    public String getPath() {
+        return path;
+    }
+
     /**
      * @return The URL port, or null if no port was defined
      */
@@ -117,7 +130,18 @@ public class IdentityURL {
 
     @Override
     public String toString() {
-        return String.format("%s://%s:%s/%s", scheme, host, port, version);
+        StringBuilder str = new StringBuilder();
+
+        str.append(scheme + "://" + host);
+        if (port != null) {
+            str.append(":" + port);
+        }
+        if (path != null) {
+            str.append(path);
+        }
+        str.append("/" + version);
+
+        return str.toString();
     }
 
 }
index e591a56..20b15bb 100644 (file)
@@ -37,7 +37,7 @@ public class VMURL {
      * various component parts of the URL.
      */
     private static Pattern pattern = Pattern
-        .compile("(\\p{Alnum}+)://([^/:]+)(?::([0-9]+))?/v2/([^/]+)/servers/([^/]+)");
+        .compile("(\\p{Alnum}+)://([^/:]+)(?::([0-9]+))?(/.*)?/v2/([^/]+)/servers/([^/]+)");
 
     /**
      * The URL scheme or protocol, such as HTTP or HTTPS
@@ -49,6 +49,11 @@ public class VMURL {
      */
     private String host;
 
+    /**
+     * The path, or null if no path is defined
+     */
+    private String path;
+
     /**
      * The port number, or null if no port is defined
      */
@@ -90,8 +95,9 @@ public class VMURL {
                 obj.scheme = matcher.group(1);
                 obj.host = matcher.group(2);
                 obj.port = matcher.group(3);
-                obj.tenantId = matcher.group(4);
-                obj.serverId = matcher.group(5);
+                obj.path = matcher.group(4);
+                obj.tenantId = matcher.group(5);
+                obj.serverId = matcher.group(6);
             }
         }
 
@@ -112,6 +118,13 @@ public class VMURL {
         return host;
     }
 
+    /**
+     * @return THe URL path, or null if no path was defined
+     */
+    public String getPath() {
+        return path;
+    }
+
     /**
      * @return The URL port, or null if no port was defined
      */
@@ -135,7 +148,16 @@ public class VMURL {
 
     @Override
     public String toString() {
-        return String.format("%s://%s:%s/%s/servers/%s", scheme, host, port, tenantId, serverId);
+        StringBuilder str = new StringBuilder();
+        str.append(scheme + "://" + host);
+        if (port != null) {
+            str.append(":" + port);
+        }
+        if (path != null) {
+            str.append(path);
+        }
+        str.append("/v2/" + tenantId + "/servers/" + serverId);
+        return str.toString();
     }
 
 }
index 75fc1ed..21f96d9 100644 (file)
@@ -103,3 +103,10 @@ provider1.identity=appc
 provider1.tenant1.name=appc
 provider1.tenant1.userid=appc
 provider1.tenant1.password=appc
+
+#Your OpenStack IP
+test.ip=192.168.1.2
+# Your OpenStack Platform's Keystone Port (default is 5000)
+test.port=5000
+test.tenantid=abcde12345fghijk6789lmnopq123rst
+test.vmid=abc12345-1234-5678-890a-abcdefg12345
index be0535f..1694529 100644 (file)
@@ -26,6 +26,8 @@
 package org.openecomp.appc.adapter.iaas.impl;
 
 import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertTrue;
 
 import java.util.Properties;
 
@@ -48,10 +50,55 @@ public class TestIdentityUrl {
      * Test that we can parse and interpret valid URLs
      */
     @Test
-    public void testValidURLs() {
+    public void testValidURL1() {
         URL = "http://192.168.1.1:5000/v2.0/";
         IdentityURL idurl = IdentityURL.parseURL(URL);
         assertNotNull(idurl);
-        System.out.println(idurl.getVersion());
+        assertTrue(idurl.getScheme().equals("http"));
+        assertTrue(idurl.getHost().equals("192.168.1.1"));
+        assertTrue(idurl.getPort().equals("5000"));
+        assertNull(idurl.getPath());
+        assertTrue(idurl.getVersion().equals("v2.0"));
+        assertTrue(idurl.toString().equals("http://192.168.1.1:5000/v2.0"));
+    }
+
+    @Test
+    public void testValidURL2() {
+        URL = "https://192.168.1.1:5000/v3/";
+        IdentityURL idurl = IdentityURL.parseURL(URL);
+        assertNotNull(idurl);
+        assertTrue(idurl.getScheme().equals("https"));
+        assertTrue(idurl.getHost().equals("192.168.1.1"));
+        assertTrue(idurl.getPort().equals("5000"));
+        assertNull(idurl.getPath());
+        assertTrue(idurl.getVersion().equals("v3"));
+        assertTrue(idurl.toString().equals("https://192.168.1.1:5000/v3"));
+    }
+
+    @Test
+    public void testValidURL3() {
+        URL = "http://192.168.1.1/v2.0/";
+        IdentityURL idurl = IdentityURL.parseURL(URL);
+        assertNotNull(idurl);
+        assertTrue(idurl.getScheme().equals("http"));
+        assertTrue(idurl.getHost().equals("192.168.1.1"));
+        assertNull(idurl.getPort());
+        assertNull(idurl.getPath());
+        assertTrue(idurl.getVersion().equals("v2.0"));
+        System.out.println(idurl.toString());
+        assertTrue(idurl.toString().equals("http://192.168.1.1/v2.0"));
+    }
+
+    @Test
+    public void testValidURL4() {
+        URL = "http://msb.onap.org:80/api/multicloud/v0/cloudowner_region/identity/v3";
+        IdentityURL idurl = IdentityURL.parseURL(URL);
+        assertNotNull(idurl);
+        assertTrue(idurl.getScheme().equals("http"));
+        assertTrue(idurl.getHost().equals("msb.onap.org"));
+        assertTrue(idurl.getPort().equals("80"));
+        assertTrue(idurl.getPath().equals("/api/multicloud/v0/cloudowner_region/identity"));
+        assertTrue(idurl.getVersion().equals("v3"));
+        assertTrue(idurl.toString().equals("http://msb.onap.org:80/api/multicloud/v0/cloudowner_region/identity/v3"));
     }
 }
index 2173d5c..c143427 100644 (file)
@@ -27,6 +27,7 @@
 package org.openecomp.appc.adapter.iaas.impl;
 
 import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertNull;
 
 import java.util.Properties;
@@ -46,18 +47,19 @@ public class TestVMURL {
 
     @BeforeClass
     public static void before() {
-        IP = "192.168.1.2";
-        PORT = "5000";
-        TENANTID = "abcde12345fghijk6789lmnopq123rst";
-        VMID = "abc12345-1234-5678-890a-abcdefg12345";
-        URL = String.format("http://%s:%s/v2/%s/servers/%s", IP, PORT, TENANTID, VMID);
+        Properties props = ConfigurationFactory.getConfiguration().getProperties();
+        IP = props.getProperty("test.ip");
+        PORT = props.getProperty("test.port");
+        TENANTID = props.getProperty("test.tenantid");
+        VMID = props.getProperty("test.vmid");
     }
 
     /**
      * Test that we can parse and interpret valid URLs
      */
     @Test
-    public void testValidURLs() {
+    public void testValidURL1() {
+        URL = String.format("http://%s:%s/v2/%s/servers/%s", IP, PORT, TENANTID, VMID);
         VMURL url = VMURL.parseURL(URL);
 
         assertEquals("http", url.getScheme());
@@ -65,13 +67,34 @@ public class TestVMURL {
         assertEquals(PORT, url.getPort());
         assertEquals(TENANTID, url.getTenantId());
         assertEquals(VMID, url.getServerId());
+        assertEquals(url.toString(), URL);
+    }
 
-        url = VMURL.parseURL(String.format("http://%s/v2/%s/servers/%s", IP, TENANTID, VMID));
+    @Test
+    public void testValidURL2() {
+        URL = String.format("http://%s/v2/%s/servers/%s", IP, TENANTID, VMID);
+        VMURL url = VMURL.parseURL(URL);
         assertEquals("http", url.getScheme());
         assertEquals(IP, url.getHost());
         assertNull(url.getPort());
+        assertNull(url.getPath());
+        assertEquals(TENANTID, url.getTenantId());
+        assertEquals(VMID, url.getServerId());
+        assertEquals(url.toString(), URL);
+    }
+
+    @Test
+    public void testValidURL3() {
+        URL = "http://msb.onap.org:80/api/multicloud/v0/cloudowner_region/v2/abcde12345fghijk6789lmnopq123rst/servers/abc12345-1234-5678-890a-abcdefg12345";
+        VMURL url = VMURL.parseURL(URL);
+        assertNotNull(url);
+        assertEquals("http", url.getScheme());
+        assertEquals("msb.onap.org", url.getHost());
+        assertEquals("80", url.getPort());
+        assertEquals("/api/multicloud/v0/cloudowner_region", url.getPath());
         assertEquals(TENANTID, url.getTenantId());
         assertEquals(VMID, url.getServerId());
+        assertEquals(url.toString(), URL);
     }
 
     /**