diff options
author | Niharika Sharma <niharika.sharma@amdocs.com> | 2022-10-14 14:01:39 -0400 |
---|---|---|
committer | William Reehil <william.reehil@att.com> | 2022-11-08 19:09:17 +0000 |
commit | c742eb3dcaa8b98a231cdd0a2b9c5c93df69d164 (patch) | |
tree | 09392e9b7f8f20eb08b8dd9adc1174d28843f629 | |
parent | f5eb6ec14630324fe52803bc7a65c684e4ba9192 (diff) |
Fixed AAI ModelLoader fails to connect to aai-babel
Issue-ID: AAI-3533
Signed-off-by: Niharika Sharma <niharika.sharma@amdocs.com>
Change-Id: I121263b0be39b13109782e0b5db02d3a36650d75
(cherry picked from commit d132185f972de61328bef9d511b875c0eefd9b1c)
5 files changed, 205 insertions, 169 deletions
@@ -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> @@ -224,10 +224,10 @@ <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> @@ -458,143 +458,143 @@ 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 --> diff --git a/src/main/java/org/onap/aai/modelloader/config/ModelLoaderConfig.java b/src/main/java/org/onap/aai/modelloader/config/ModelLoaderConfig.java index adc58e5..f8c5d23 100644 --- a/src/main/java/org/onap/aai/modelloader/config/ModelLoaderConfig.java +++ b/src/main/java/org/onap/aai/modelloader/config/ModelLoaderConfig.java @@ -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. */ diff --git a/src/main/java/org/onap/aai/modelloader/restclient/AaiRestClient.java b/src/main/java/org/onap/aai/modelloader/restclient/AaiRestClient.java index a2a4c5b..29c0c70 100644 --- a/src/main/java/org/onap/aai/modelloader/restclient/AaiRestClient.java +++ b/src/main/java/org/onap/aai/modelloader/restclient/AaiRestClient.java @@ -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); diff --git a/src/main/java/org/onap/aai/modelloader/restclient/HttpsBabelServiceClient.java b/src/main/java/org/onap/aai/modelloader/restclient/HttpsBabelServiceClient.java index 805fe34..289015c 100644 --- a/src/main/java/org/onap/aai/modelloader/restclient/HttpsBabelServiceClient.java +++ b/src/main/java/org/onap/aai/modelloader/restclient/HttpsBabelServiceClient.java @@ -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()); diff --git a/src/test/java/org/onap/aai/modelloader/restclient/TestBabelServiceClient.java b/src/test/java/org/onap/aai/modelloader/restclient/TestBabelServiceClient.java index 4f99bfc..8da5f89 100644 --- a/src/test/java/org/onap/aai/modelloader/restclient/TestBabelServiceClient.java +++ b/src/test/java/org/onap/aai/modelloader/restclient/TestBabelServiceClient.java @@ -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())); } |