Fixed AAI ModelLoader fails to connect to aai-babel 82/131482/1
authorNiharika Sharma <niharika.sharma@amdocs.com>
Fri, 14 Oct 2022 18:01:39 +0000 (14:01 -0400)
committerNiharika Sharma <niharika.sharma@amdocs.com>
Fri, 14 Oct 2022 18:01:39 +0000 (14:01 -0400)
Issue-ID: AAI-3533
Signed-off-by: Niharika Sharma <niharika.sharma@amdocs.com>
Change-Id: I121263b0be39b13109782e0b5db02d3a36650d75

pom.xml
src/main/java/org/onap/aai/modelloader/config/ModelLoaderConfig.java
src/main/java/org/onap/aai/modelloader/restclient/AaiRestClient.java
src/main/java/org/onap/aai/modelloader/restclient/HttpsBabelServiceClient.java
src/test/java/org/onap/aai/modelloader/restclient/TestBabelServiceClient.java

diff --git a/pom.xml b/pom.xml
index d9946df..226429d 100644 (file)
--- a/pom.xml
+++ b/pom.xml
@@ -20,7 +20,7 @@
     ============LICENSE_END=========================================================
 -->
 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-       xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+                xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
        <modelVersion>4.0.0</modelVersion>
 
        <parent>
@@ -60,7 +60,7 @@
                <sdc-distribution-client.version>1.4.1</sdc-distribution-client.version>
                <logback.version>1.2.3</logback.version>
                <!-- docker related properties -->
-               <docker.fabric.version>0.28.0</docker.fabric.version>
+               <docker.fabric.version>0.39.0</docker.fabric.version>
                <aai.docker.version>1.0.0</aai.docker.version>
                <aai.build.directory>${project.build.directory}/${project.artifactId}-${project.version}-build/</aai.build.directory>
                <aai.docker.namespace>onap</aai.docker.namespace>
                        <groupId>org.springframework.boot</groupId>
                        <artifactId>spring-boot-starter-web</artifactId>
                        <exclusions>
-                         <exclusion>
-                           <groupId>org.springframework.boot</groupId>
-                           <artifactId>spring-boot-starter-tomcat</artifactId>
-                         </exclusion>
+                               <exclusion>
+                                       <groupId>org.springframework.boot</groupId>
+                                       <artifactId>spring-boot-starter-tomcat</artifactId>
+                               </exclusion>
                        </exclusions>
                </dependency>
                <dependency>
                             whole section -->
 
                        <plugin>
-                         <groupId>org.jacoco</groupId>
-                         <artifactId>jacoco-maven-plugin</artifactId>
-                         <version>${jacoco.version}</version>
-                         <configuration>
-                           <!-- Note: This exclusion list should match <sonar.exclusions> property
-                                above -->
-                           <excludes>
-                             <exclude>**/gen/**</exclude>
-                             <exclude>**/generated-sources/**</exclude>
-                             <exclude>**/yang-gen/**</exclude>
-                             <exclude>**/pax/**</exclude>
-                           </excludes>
-                         </configuration>
-                         <executions>
-                           <!-- Prepares the property pointing to the JaCoCo runtime agent which
-                                is passed as VM argument when Maven the Surefire plugin is executed. -->
-                           <execution>
-                             <id>pre-unit-test</id>
-                             <goals>
-                               <goal>prepare-agent</goal>
-                             </goals>
-                             <configuration>
-                               <!-- Sets the path to the file which contains the execution data
-                                    . -->
-                               <destFile>${project.build.directory}/code-coverage/jacoco-ut.exec</destFile>
-                               <!-- Sets the name of the property containing the settings for JaCoCo
-                                    runtime agent. -->
-                               <propertyName>surefireArgLine</propertyName>
-                             </configuration>
-                           </execution>
-                           <!-- Ensures that the code coverage report for unit tests is created
-                                after unit tests have been run. -->
-                           <execution>
-                             <id>post-unit-test</id>
-                             <phase>test</phase>
-                             <goals>
-                               <goal>report</goal>
-                             </goals>
-                             <configuration>
-                               <!-- Sets the path to the file which contains the execution data
-                                    . -->
-                               <dataFile>${project.build.directory}/code-coverage/jacoco-ut.exec</dataFile>
-                               <!-- Sets the output directory for the code coverage report. -->
-                               <outputDirectory>${project.reporting.outputDirectory}/jacoco-ut</outputDirectory>
-                             </configuration>
-                           </execution>
-                           <execution>
-                             <id>pre-integration-test</id>
-                             <phase>pre-integration-test</phase>
-                             <goals>
-                               <goal>prepare-agent</goal>
-                             </goals>
-                             <configuration>
-                               <!-- Sets the path to the file which contains the execution data
-                                    . -->
-                               <destFile>${project.build.directory}/code-coverage/jacoco-it.exec</destFile>
-                               <!-- Sets the name of the property containing the settings for JaCoCo
-                                    runtime agent. -->
-                               <propertyName>failsafeArgLine</propertyName>
-                             </configuration>
-                           </execution>
-                           <!-- Ensures that the code coverage report for integration tests after
-                                integration tests have been run. -->
-                           <execution>
-                             <id>post-integration-test</id>
-                             <phase>post-integration-test</phase>
-                             <goals>
-                               <goal>report</goal>
-                             </goals>
-                             <configuration>
-                               <!-- Sets the path to the file which contains the execution data
-                                    . -->
-                               <dataFile>${project.build.directory}/code-coverage/jacoco-it.exec</dataFile>
-                               <!-- Sets the output directory for the code coverage report. -->
-                               <outputDirectory>${project.reporting.outputDirectory}/jacoco-it</outputDirectory>
-                             </configuration>
-                           </execution>
-                           <execution>
-                             <id>default-check</id>
-                             <goals>
-                               <goal>check</goal>
-                             </goals>
-                             <configuration>
-                               <dataFile>${project.build.directory}/code-coverage/jacoco-ut.exec</dataFile>
-                               <rules>
-                                 <rule implementation="org.jacoco.maven.RuleConfiguration">
-                                   <element>BUNDLE</element>
-                                   <limits>
-                                     <limit implementation="org.jacoco.report.check.Limit">
-                                       <counter>LINE</counter>
-                                       <value>COVEREDRATIO</value>
-                                       <minimum>${jacoco.line.coverage.limit}</minimum>
-                                     </limit>
-                                   </limits>
-                                 </rule>
-                               </rules>
-                             </configuration>
-                           </execution>
-                         </executions>
+                               <groupId>org.jacoco</groupId>
+                               <artifactId>jacoco-maven-plugin</artifactId>
+                               <version>${jacoco.version}</version>
+                               <configuration>
+                                       <!-- Note: This exclusion list should match <sonar.exclusions> property
+                     above -->
+                                       <excludes>
+                                               <exclude>**/gen/**</exclude>
+                                               <exclude>**/generated-sources/**</exclude>
+                                               <exclude>**/yang-gen/**</exclude>
+                                               <exclude>**/pax/**</exclude>
+                                       </excludes>
+                               </configuration>
+                               <executions>
+                                       <!-- Prepares the property pointing to the JaCoCo runtime agent which
+                     is passed as VM argument when Maven the Surefire plugin is executed. -->
+                                       <execution>
+                                               <id>pre-unit-test</id>
+                                               <goals>
+                                                       <goal>prepare-agent</goal>
+                                               </goals>
+                                               <configuration>
+                                                       <!-- Sets the path to the file which contains the execution data
+                                 . -->
+                                                       <destFile>${project.build.directory}/code-coverage/jacoco-ut.exec</destFile>
+                                                       <!-- Sets the name of the property containing the settings for JaCoCo
+                                 runtime agent. -->
+                                                       <propertyName>surefireArgLine</propertyName>
+                                               </configuration>
+                                       </execution>
+                                       <!-- Ensures that the code coverage report for unit tests is created
+                     after unit tests have been run. -->
+                                       <execution>
+                                               <id>post-unit-test</id>
+                                               <phase>test</phase>
+                                               <goals>
+                                                       <goal>report</goal>
+                                               </goals>
+                                               <configuration>
+                                                       <!-- Sets the path to the file which contains the execution data
+                                 . -->
+                                                       <dataFile>${project.build.directory}/code-coverage/jacoco-ut.exec</dataFile>
+                                                       <!-- Sets the output directory for the code coverage report. -->
+                                                       <outputDirectory>${project.reporting.outputDirectory}/jacoco-ut</outputDirectory>
+                                               </configuration>
+                                       </execution>
+                                       <execution>
+                                               <id>pre-integration-test</id>
+                                               <phase>pre-integration-test</phase>
+                                               <goals>
+                                                       <goal>prepare-agent</goal>
+                                               </goals>
+                                               <configuration>
+                                                       <!-- Sets the path to the file which contains the execution data
+                                 . -->
+                                                       <destFile>${project.build.directory}/code-coverage/jacoco-it.exec</destFile>
+                                                       <!-- Sets the name of the property containing the settings for JaCoCo
+                                 runtime agent. -->
+                                                       <propertyName>failsafeArgLine</propertyName>
+                                               </configuration>
+                                       </execution>
+                                       <!-- Ensures that the code coverage report for integration tests after
+                     integration tests have been run. -->
+                                       <execution>
+                                               <id>post-integration-test</id>
+                                               <phase>post-integration-test</phase>
+                                               <goals>
+                                                       <goal>report</goal>
+                                               </goals>
+                                               <configuration>
+                                                       <!-- Sets the path to the file which contains the execution data
+                                 . -->
+                                                       <dataFile>${project.build.directory}/code-coverage/jacoco-it.exec</dataFile>
+                                                       <!-- Sets the output directory for the code coverage report. -->
+                                                       <outputDirectory>${project.reporting.outputDirectory}/jacoco-it</outputDirectory>
+                                               </configuration>
+                                       </execution>
+                                       <execution>
+                                               <id>default-check</id>
+                                               <goals>
+                                                       <goal>check</goal>
+                                               </goals>
+                                               <configuration>
+                                                       <dataFile>${project.build.directory}/code-coverage/jacoco-ut.exec</dataFile>
+                                                       <rules>
+                                                               <rule implementation="org.jacoco.maven.RuleConfiguration">
+                                                                       <element>BUNDLE</element>
+                                                                       <limits>
+                                                                               <limit implementation="org.jacoco.report.check.Limit">
+                                                                                       <counter>LINE</counter>
+                                                                                       <value>COVEREDRATIO</value>
+                                                                                       <minimum>${jacoco.line.coverage.limit}</minimum>
+                                                                               </limit>
+                                                                       </limits>
+                                                               </rule>
+                                                       </rules>
+                                               </configuration>
+                                       </execution>
+                               </executions>
                        </plugin>
                        <plugin>
-                         <groupId>org.apache.maven.plugins</groupId>
-                         <artifactId>maven-surefire-plugin</artifactId>
-                         <version>3.0.0-M4</version>
-                         <configuration>
-                           <!-- Sets the VM argument line used when unit tests are run. -->
-                           <argLine>${surefireArgLine}</argLine>
-                           <!-- Excludes integration tests when unit tests are run. -->
-                           <excludes>
-                             <exclude>**/IT*.java</exclude>
-                           </excludes>
-                         </configuration>
+                               <groupId>org.apache.maven.plugins</groupId>
+                               <artifactId>maven-surefire-plugin</artifactId>
+                               <version>3.0.0-M4</version>
+                               <configuration>
+                                       <!-- Sets the VM argument line used when unit tests are run. -->
+                                       <argLine>${surefireArgLine}</argLine>
+                                       <!-- Excludes integration tests when unit tests are run. -->
+                                       <excludes>
+                                               <exclude>**/IT*.java</exclude>
+                                       </excludes>
+                               </configuration>
                        </plugin>
                        <plugin>
-                         <groupId>org.apache.maven.plugins</groupId>
-                         <artifactId>maven-failsafe-plugin</artifactId>
-                         <version>3.0.0-M4</version>
-                         <executions>
-                           <!-- Ensures that both integration-test and verify goals of the Failsafe
-                                Maven plugin are executed. -->
-                           <execution>
-                             <id>integration-tests</id>
-                             <goals>
-                               <goal>integration-test</goal>
-                               <goal>verify</goal>
-                             </goals>
-                             <configuration>
-                               <!-- Sets the VM argument line used when integration tests are run. -->
-                               <argLine>${failsafeArgLine}</argLine>
-                             </configuration>
-                           </execution>
-                         </executions>
+                               <groupId>org.apache.maven.plugins</groupId>
+                               <artifactId>maven-failsafe-plugin</artifactId>
+                               <version>3.0.0-M4</version>
+                               <executions>
+                                       <!-- Ensures that both integration-test and verify goals of the Failsafe
+                     Maven plugin are executed. -->
+                                       <execution>
+                                               <id>integration-tests</id>
+                                               <goals>
+                                                       <goal>integration-test</goal>
+                                                       <goal>verify</goal>
+                                               </goals>
+                                               <configuration>
+                                                       <!-- Sets the VM argument line used when integration tests are run. -->
+                                                       <argLine>${failsafeArgLine}</argLine>
+                                               </configuration>
+                                       </execution>
+                               </executions>
                        </plugin>
                        <plugin>
-                         <groupId>org.sonarsource.scanner.maven</groupId>
-                         <artifactId>sonar-maven-plugin</artifactId>
-                         <version>${sonar.scanner.version}</version>
+                               <groupId>org.sonarsource.scanner.maven</groupId>
+                               <artifactId>sonar-maven-plugin</artifactId>
+                               <version>${sonar.scanner.version}</version>
                        </plugin>
                        <!-- end removable sonar config -->
 
index adc58e5..f8c5d23 100644 (file)
@@ -86,14 +86,14 @@ public class ModelLoaderConfig implements IConfiguration {
     protected static final String PROP_AAI_AUTHENTICATION_USER = PREFIX_AAI + "AUTH_USER";
     protected static final String PROP_AAI_AUTHENTICATION_PASSWORD = PREFIX_AAI + "AUTH_PASSWORD";
     protected static final String PROP_AAI_USE_GIZMO = PREFIX_AAI + "USE_GIZMO";
-
+    protected static final String PROP_AAI_USE_HTTPS = PREFIX_AAI + "USE_HTTPS";
     protected static final String PROP_BABEL_BASE_URL = PREFIX_BABEL + "BASE_URL";
     protected static final String PROP_BABEL_KEYSTORE_FILE = PREFIX_BABEL + SUFFIX_KEYSTORE_FILE;
     protected static final String PROP_BABEL_KEYSTORE_PASSWORD = PREFIX_BABEL + SUFFIX_KEYSTORE_PASS;
     protected static final String PROP_BABEL_TRUSTSTORE_FILE = PREFIX_BABEL + SUFFIX_TRUSTSTORE_FILE;
     protected static final String PROP_BABEL_TRUSTSTORE_PASSWORD = PREFIX_BABEL + SUFFIX_TRUSTSTORE_PASS;
     protected static final String PROP_BABEL_GENERATE_RESOURCE_URL = PREFIX_BABEL + "GENERATE_ARTIFACTS_URL";
-
+    protected static final String PROP_BABEL_USE_HTTPS = PREFIX_BABEL + "USE_HTTPS";
     protected static final String PROP_DEBUG_INGEST_SIMULATOR = PREFIX_DEBUG + "INGEST_SIMULATOR";
     protected static final String FILESEP =
             (System.getProperty("file.separator") == null) ? "/" : System.getProperty("file.separator");
@@ -305,6 +305,16 @@ public class ModelLoaderConfig implements IConfiguration {
         return useGizmo != null && useGizmo.equalsIgnoreCase("true");
     }
 
+    public boolean useHttpsWithAAI() {
+        String useHttps = get(PROP_AAI_USE_HTTPS);
+        return useHttps != null && useHttps.equalsIgnoreCase("true");
+    }
+
+    public boolean useHttpsWithBabel() {
+        String useHttps = get(PROP_BABEL_USE_HTTPS);
+        return useHttps != null && useHttps.equalsIgnoreCase("true");
+    }
+
     /**
      * @return password for AAI authentication that has been reverse-engineered from its obfuscated form.
      */
index a2a4c5b..29c0c70 100644 (file)
@@ -157,14 +157,23 @@ public class AaiRestClient {
     private RestClient setupClient() {
         RestClient restClient = new RestClient();
 
-        // @formatter:off
-        restClient.validateServerHostname(false)
-                .validateServerCertChain(false)
-                .clientCertFile(config.getAaiKeyStorePath())
-                .clientCertPassword(config.getAaiKeyStorePassword())
-                .connectTimeoutMs(120000)
-                .readTimeoutMs(120000);
-        // @formatter:on
+        //Use certs only if SSL is enabled
+        if (config.useHttpsWithAAI())
+        {// @formatter:off
+            restClient.validateServerHostname(false)
+                    .validateServerCertChain(false)
+                    .clientCertFile(config.getAaiKeyStorePath())
+                    .clientCertPassword(config.getAaiKeyStorePassword())
+                    .connectTimeoutMs(120000)
+                    .readTimeoutMs(120000);
+            // @formatter:on
+        }
+        else {
+            restClient.validateServerHostname(false)
+                    .validateServerCertChain(false)
+                    .connectTimeoutMs(120000)
+                    .readTimeoutMs(120000);
+        }
 
         if (useBasicAuth()) {
             restClient.authenticationMode(RestAuthenticationMode.SSL_BASIC);
index 805fe34..289015c 100644 (file)
@@ -98,34 +98,36 @@ public class HttpsBabelServiceClient implements BabelServiceClient {
         this.config = config;
 
         logger.debug(ModelLoaderMsgs.DISTRIBUTION_EVENT, "Creating Babel Service client");
+        //Initialize SSL Context only if SSL is enabled
+        if (config.useHttpsWithBabel()) {
+            SSLContext ctx = SSLContext.getInstance(SSL_PROTOCOL);
+            KeyManagerFactory kmf = KeyManagerFactory.getInstance(KEYSTORE_ALGORITHM);
+            KeyStore keyStore = KeyStore.getInstance(KEYSTORE_TYPE);
 
-        SSLContext ctx = SSLContext.getInstance(SSL_PROTOCOL);
-        KeyManagerFactory kmf = KeyManagerFactory.getInstance(KEYSTORE_ALGORITHM);
-        KeyStore keyStore = KeyStore.getInstance(KEYSTORE_TYPE);
+            String clientCertPassword = config.getBabelKeyStorePassword();
 
-        String clientCertPassword = config.getBabelKeyStorePassword();
-
-        char[] pwd = null;
-        if (clientCertPassword != null) {
-            pwd = clientCertPassword.toCharArray();
-        }
+            char[] pwd = null;
+            if (clientCertPassword != null) {
+                pwd = clientCertPassword.toCharArray();
+            }
 
-        TrustManager[] trustManagers = getTrustManagers();
+            TrustManager[] trustManagers = getTrustManagers();
 
-        String clientCertFileName = config.getBabelKeyStorePath();
-        if (clientCertFileName == null) {
-            ctx.init(null, trustManagers, null);
-        } else {
-            InputStream fin = Files.newInputStream(Paths.get(clientCertFileName));
-            keyStore.load(fin, pwd);
-            kmf.init(keyStore, pwd);
-            ctx.init(kmf.getKeyManagers(), trustManagers, null);
-        }
+            String clientCertFileName = config.getBabelKeyStorePath();
+            if (clientCertFileName == null) {
+                ctx.init(null, trustManagers, null);
+            } else {
+                InputStream fin = Files.newInputStream(Paths.get(clientCertFileName));
+                keyStore.load(fin, pwd);
+                kmf.init(keyStore, pwd);
+                ctx.init(kmf.getKeyManagers(), trustManagers, null);
+            }
 
-        logger.debug(ModelLoaderMsgs.DISTRIBUTION_EVENT, "Initialised context");
+            logger.debug(ModelLoaderMsgs.DISTRIBUTION_EVENT, "Initialised context");
 
-        HttpsURLConnection.setDefaultSSLSocketFactory(ctx.getSocketFactory());
-        HttpsURLConnection.setDefaultHostnameVerifier((host, session) -> true);
+            HttpsURLConnection.setDefaultSSLSocketFactory(ctx.getSocketFactory());
+            HttpsURLConnection.setDefaultHostnameVerifier((host, session) -> true);
+        }
 
         client = Client.create(new DefaultClientConfig());
 
index 4f99bfc..8da5f89 100644 (file)
@@ -93,6 +93,21 @@ public class TestBabelServiceClient {
         assertThat(result.size(), is(equalTo(3)));
     }
 
+    @Test
+    public void testRestClientHttp() throws BabelServiceClientException, IOException, URISyntaxException {
+        Properties configProperties = new Properties();
+        configProperties.put("ml.babel.USE_HTTPS", "false");
+        configProperties.put("ml.babel.BASE_URL", "http://localhost:8080/");
+        configProperties.put("ml.babel.GENERATE_ARTIFACTS_URL", "generate");
+        BabelServiceClient client =
+                new HttpsBabelServiceClientFactory().create(new ModelLoaderConfig(configProperties, "."));
+        List<BabelArtifact> result =
+                client.postArtifact(readBytesFromFile("compressedArtifacts/service-VscpaasTest-csar.csar"),
+                        "service-Vscpass-Test", "1.0", "Test-Transaction-ID-BabelClient");
+        assertThat(result.size(), is(equalTo(3)));
+    }
+
+
     private byte[] readBytesFromFile(String resourceFile) throws IOException, URISyntaxException {
         return Files.readAllBytes(Paths.get(ClassLoader.getSystemResource(resourceFile).toURI()));
     }