diff options
Diffstat (limited to 'aai-traversal')
87 files changed, 1296 insertions, 1482 deletions
diff --git a/aai-traversal/pom.xml b/aai-traversal/pom.xml index adedcdb..68d9af8 100644 --- a/aai-traversal/pom.xml +++ b/aai-traversal/pom.xml @@ -26,7 +26,7 @@ <parent> <groupId>org.onap.aai.traversal</groupId> <artifactId>traversal</artifactId> - <version>1.15.4-SNAPSHOT</version> + <version>1.15.5-SNAPSHOT</version> </parent> <groupId>org.onap.aai.traversal</groupId> <artifactId>aai-traversal</artifactId> @@ -103,8 +103,7 @@ <javax.servlet.version>4.0.1</javax.servlet.version> - <antlr.version>4.9.3</antlr.version> - <keycloak.version>11.0.2</keycloak.version> + <antlr.version>4.13.2</antlr.version> <io.swagger.version>1.6.14</io.swagger.version> <micrometer.version>1.6.6</micrometer.version> @@ -397,7 +396,7 @@ <dependency> <groupId>org.javatuples</groupId> <artifactId>javatuples</artifactId> - <scope>compile</scope> + <version>1.2</version> </dependency> <dependency> <groupId>com.google.code.gson</groupId> @@ -441,35 +440,25 @@ <groupId>org.onap.aai.aai-common</groupId> <artifactId>aai-rest</artifactId> </dependency> - <!-- Explicitly stating the security spring framework and exclude the bouncy - castle since that is somehow overwriting our p12 file decryption that's built - into java security This will cause the password is incorrect This needs to - be added back if org.bouncy castle dependency sneaks backs in and causing - issues with the two way ssl --> - <dependency> - <groupId>org.springframework.security</groupId> - <artifactId>spring-security-rsa</artifactId> - <exclusions> - <exclusion> - <groupId>org.bouncycastle</groupId> - <artifactId>bcpkix-jdk15on</artifactId> - </exclusion> - </exclusions> - </dependency> <dependency> <groupId>org.springframework.boot</groupId> - <artifactId>spring-boot-starter-web</artifactId> + <artifactId>spring-boot-starter-jersey</artifactId> <exclusions> <exclusion> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-tomcat</artifactId> </exclusion> - <exclusion> - <groupId>org.slf4j</groupId> - <artifactId>log4j-over-slf4j</artifactId> - </exclusion> </exclusions> </dependency> + <dependency> + <groupId>org.springframework.boot</groupId> + <artifactId>spring-boot-starter-validation</artifactId> + </dependency> + <dependency> + <groupId>org.springframework.boot</groupId> + <artifactId>spring-boot-configuration-processor</artifactId> + <optional>true</optional> + </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-webflux</artifactId> @@ -501,6 +490,7 @@ <dependency> <groupId>org.antlr</groupId> <artifactId>antlr4-runtime</artifactId> + <version>${antlr.version}</version> </dependency> <dependency> <groupId>org.antlr</groupId> @@ -539,28 +529,6 @@ <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-security</artifactId> </dependency> - <dependency> - <groupId>org.keycloak</groupId> - <artifactId>keycloak-spring-boot-starter</artifactId> - </dependency> - <dependency> - <groupId>com.github.dasniko</groupId> - <artifactId>testcontainers-keycloak</artifactId> - <version>${testcontainers.version}</version> - <scope>test</scope> - <exclusions> - <exclusion> - <groupId>junit</groupId> - <artifactId>junit</artifactId> - </exclusion> - </exclusions> - </dependency> - <dependency> - <groupId>org.keycloak</groupId> - <artifactId>keycloak-admin-client</artifactId> - <version>${keycloak.version}</version> - <scope>test</scope> - </dependency> <!-- TODO: Migrate tests to junit 5 and remove this dependency --> <dependency> <groupId>org.junit.vintage</groupId> @@ -577,24 +545,12 @@ <dependencyManagement> <dependencies> <dependency> - <groupId>org.keycloak.bom</groupId> - <artifactId>keycloak-adapter-bom</artifactId> - <version>${keycloak.version}</version> - <type>pom</type> - <scope>import</scope> - </dependency> - <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-dependencies</artifactId> <version>${spring-cloud.version}</version> <type>pom</type> <scope>import</scope> </dependency> - <dependency> - <groupId>com.google.guava</groupId> - <artifactId>guava</artifactId> - <version>25.0-jre</version> - </dependency> <!-- cassandra driver --> <dependency> <groupId>com.datastax.oss</groupId> @@ -652,8 +608,6 @@ <resource> <directory>${project.basedir}/src/main/resources/etc/auth/</directory> <includes> - <include>aai-client-cert.p12</include> - <include>tomcat_keystore</include> <include>aai_policy.json</include> </includes> <targetPath>${project.build.directory}/swm/package/nix/dist_files/opt/app/${project.artifactId}/appconfig</targetPath> diff --git a/aai-traversal/src/main/java/org/onap/aai/TraversalApp.java b/aai-traversal/src/main/java/org/onap/aai/TraversalApp.java index 2e0b43e..619bee9 100644 --- a/aai-traversal/src/main/java/org/onap/aai/TraversalApp.java +++ b/aai-traversal/src/main/java/org/onap/aai/TraversalApp.java @@ -20,13 +20,10 @@ package org.onap.aai; import java.util.Map; - import javax.annotation.PostConstruct; import javax.annotation.PreDestroy; - import org.apache.commons.lang3.exception.ExceptionUtils; import org.onap.aai.aailog.logs.AaiDebugLog; -import org.onap.aai.config.PropertyPasswordConfiguration; import org.onap.aai.config.SpringContextAware; import org.onap.aai.dbmap.AAIGraph; import org.onap.aai.exceptions.AAIException; @@ -45,17 +42,23 @@ import org.springframework.boot.autoconfigure.data.cassandra.CassandraDataAutoCo import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration; import org.springframework.boot.autoconfigure.jdbc.DataSourceTransactionManagerAutoConfiguration; import org.springframework.boot.autoconfigure.orm.jpa.HibernateJpaAutoConfiguration; +import org.springframework.boot.autoconfigure.web.servlet.error.ErrorMvcAutoConfiguration; +import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.context.annotation.ComponentScan; import org.springframework.core.env.Environment; import org.springframework.core.env.Profiles; +import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; +@EnableWebSecurity +@EnableConfigurationProperties @SpringBootApplication( exclude = { DataSourceAutoConfiguration.class, DataSourceTransactionManagerAutoConfiguration.class, HibernateJpaAutoConfiguration.class, CassandraDataAutoConfiguration.class, - CassandraAutoConfiguration.class + CassandraAutoConfiguration.class, + ErrorMvcAutoConfiguration.class }) // Component Scan provides a way to look for spring beans // It only searches beans in the following packages @@ -132,7 +135,6 @@ public class TraversalApp { SpringApplication app = new SpringApplication(TraversalApp.class); app.setLogStartupInfo(false); app.setRegisterShutdownHook(true); - app.addInitializers(new PropertyPasswordConfiguration()); env = app.run(args).getEnvironment(); } catch (Exception ex) { AAIException aai = schemaServiceExceptionTranslator(ex); diff --git a/aai-traversal/src/main/java/org/onap/aai/config/JettyPasswordDecoder.java b/aai-traversal/src/main/java/org/onap/aai/config/AuthProperties.java index bffb7fb..1ecffb6 100644 --- a/aai-traversal/src/main/java/org/onap/aai/config/JettyPasswordDecoder.java +++ b/aai-traversal/src/main/java/org/onap/aai/config/AuthProperties.java @@ -2,13 +2,13 @@ * ============LICENSE_START======================================================= * org.onap.aai * ================================================================================ - * Copyright © 2017-2018 AT&T Intellectual Property. All rights reserved. + * Copyright © 2025 Deutsche Telekom. All rights reserved. * ================================================================================ * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, @@ -17,17 +17,31 @@ * limitations under the License. * ============LICENSE_END========================================================= */ + package org.onap.aai.config; -import org.eclipse.jetty.util.security.Password; +import java.util.List; + +import javax.validation.constraints.NotEmpty; + +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Configuration; + +import lombok.Data; + +@Data +@Configuration +@ConfigurationProperties(prefix = "aai.basic-auth") +public class AuthProperties { + + boolean enabled = true; -public class JettyPasswordDecoder implements PasswordDecoder { + @NotEmpty + List<User> users; - @Override - public String decode(String input) { - if (input.startsWith("OBF:")) { - return Password.deobfuscate(input); - } - return Password.deobfuscate("OBF:" + input); - } + @Data + public static class User { + private String username; + private String password; + } } diff --git a/aai-traversal/src/main/java/org/onap/aai/config/PasswordDecoder.java b/aai-traversal/src/main/java/org/onap/aai/config/PasswordDecoder.java deleted file mode 100644 index a257b34..0000000 --- a/aai-traversal/src/main/java/org/onap/aai/config/PasswordDecoder.java +++ /dev/null @@ -1,25 +0,0 @@ -/** - * ============LICENSE_START======================================================= - * org.onap.aai - * ================================================================================ - * Copyright © 2017-2018 AT&T Intellectual Property. All rights reserved. - * ================================================================================ - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * ============LICENSE_END========================================================= - */ -package org.onap.aai.config; - -public interface PasswordDecoder { - - String decode(String input); -} diff --git a/aai-traversal/src/main/java/org/onap/aai/config/PropertyPasswordConfiguration.java b/aai-traversal/src/main/java/org/onap/aai/config/PropertyPasswordConfiguration.java deleted file mode 100644 index 34023e8..0000000 --- a/aai-traversal/src/main/java/org/onap/aai/config/PropertyPasswordConfiguration.java +++ /dev/null @@ -1,159 +0,0 @@ -/** - * ============LICENSE_START======================================================= - * org.onap.aai - * ================================================================================ - * Copyright © 2017-2018 AT&T Intellectual Property. All rights reserved. - * ================================================================================ - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * ============LICENSE_END========================================================= - */ -package org.onap.aai.config; - -import java.io.File; -import java.io.FileInputStream; -import java.io.IOException; -import java.io.InputStream; -import java.util.LinkedHashMap; -import java.util.Map; -import java.util.Properties; -import java.util.regex.Matcher; -import java.util.regex.Pattern; - -import org.apache.commons.io.IOUtils; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.context.ApplicationContextInitializer; -import org.springframework.context.ConfigurableApplicationContext; -import org.springframework.core.env.*; - -public class PropertyPasswordConfiguration - implements ApplicationContextInitializer<ConfigurableApplicationContext> { - - private static final Pattern decodePasswordPattern = Pattern.compile("password\\((.*?)\\)"); - private PasswordDecoder passwordDecoder = new JettyPasswordDecoder(); - private static final Logger logger = - LoggerFactory.getLogger(PropertyPasswordConfiguration.class.getName()); - - @Override - public void initialize(ConfigurableApplicationContext applicationContext) { - ConfigurableEnvironment environment = applicationContext.getEnvironment(); - String certPath = environment.getProperty("server.certs.location"); - File passwordFile = null; - File passphrasesFile = null; - InputStream passwordStream = null; - InputStream passphrasesStream = null; - Map<String, Object> sslProps = new LinkedHashMap<>(); - - // Override the passwords from application.properties if we find AAF certman files - if (certPath != null) { - try { - passwordFile = new File(certPath + ".password"); - passwordStream = new FileInputStream(passwordFile); - - if (passwordStream != null) { - String keystorePassword = null; - - keystorePassword = IOUtils.toString(passwordStream); - if (keystorePassword != null) { - keystorePassword = keystorePassword.trim(); - } - sslProps.put("server.ssl.key-store-password", keystorePassword); - sslProps.put("schema.service.ssl.key-store-password", keystorePassword); - } else { - logger.debug("Not using AAF Certman password file"); - } - } catch (IOException e) { - logger.debug("Not using AAF Certman password file, e=" + e.getMessage()); - } finally { - if (passwordStream != null) { - try { - passwordStream.close(); - } catch (Exception e) { - } - } - } - try { - passphrasesFile = new File(certPath + ".passphrases"); - passphrasesStream = new FileInputStream(passphrasesFile); - - if (passphrasesStream != null) { - String truststorePassword = null; - Properties passphrasesProps = new Properties(); - passphrasesProps.load(passphrasesStream); - truststorePassword = passphrasesProps.getProperty("cadi_truststore_password"); - if (truststorePassword != null) { - truststorePassword = truststorePassword.trim(); - } - sslProps.put("server.ssl.trust-store-password", truststorePassword); - sslProps.put("schema.service.ssl.trust-store-password", truststorePassword); - } else { - logger.debug("Not using AAF Certman passphrases file"); - } - } catch (IOException e) { - logger.debug("Not using AAF Certman passphrases file, e=" + e.getMessage()); - } finally { - if (passphrasesStream != null) { - try { - passphrasesStream.close(); - } catch (Exception e) { - } - } - } - } - for (PropertySource<?> propertySource : environment.getPropertySources()) { - Map<String, Object> propertyOverrides = new LinkedHashMap<>(); - decodePasswords(propertySource, propertyOverrides); - if (!propertyOverrides.isEmpty()) { - PropertySource<?> decodedProperties = - new MapPropertySource("decoded " + propertySource.getName(), propertyOverrides); - environment.getPropertySources().addBefore(propertySource.getName(), - decodedProperties); - } - - } - if (!sslProps.isEmpty()) { - logger.debug("Using AAF Certman files"); - PropertySource<?> additionalProperties = - new MapPropertySource("additionalProperties", sslProps); - environment.getPropertySources().addFirst(additionalProperties); - } - } - - private void decodePasswords(PropertySource<?> source, Map<String, Object> propertyOverrides) { - if (source instanceof EnumerablePropertySource) { - EnumerablePropertySource<?> enumerablePropertySource = - (EnumerablePropertySource<?>) source; - for (String key : enumerablePropertySource.getPropertyNames()) { - Object rawValue = source.getProperty(key); - if (rawValue instanceof String) { - String decodedValue = decodePasswordsInString((String) rawValue); - propertyOverrides.put(key, decodedValue); - } - } - } - } - - private String decodePasswordsInString(String input) { - if (input == null) - return null; - StringBuffer output = new StringBuffer(); - Matcher matcher = decodePasswordPattern.matcher(input); - while (matcher.find()) { - String replacement = passwordDecoder.decode(matcher.group(1)); - matcher.appendReplacement(output, replacement); - } - matcher.appendTail(output); - return output.toString(); - } - -} diff --git a/aai-traversal/src/main/java/org/onap/aai/config/SecurityConfig.java b/aai-traversal/src/main/java/org/onap/aai/config/SecurityConfig.java new file mode 100644 index 0000000..62bcba3 --- /dev/null +++ b/aai-traversal/src/main/java/org/onap/aai/config/SecurityConfig.java @@ -0,0 +1,61 @@ +/** + * ============LICENSE_START======================================================= + * org.onap.aai + * ================================================================================ + * Copyright © 2025 Deutsche Telekom. All rights reserved. + * ================================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============LICENSE_END========================================================= + */ + +package org.onap.aai.config; + +import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.security.config.annotation.web.builders.HttpSecurity; +import org.springframework.security.core.userdetails.User; +import org.springframework.security.core.userdetails.UserDetails; +import org.springframework.security.provisioning.InMemoryUserDetailsManager; +import org.springframework.security.web.SecurityFilterChain; + +@Configuration +@ConditionalOnProperty(name = "aai.basic-auth.enabled", havingValue = "true", matchIfMissing = true) +public class SecurityConfig { + + @Bean + SecurityFilterChain filterChain(HttpSecurity httpSecurity) throws Exception{ + httpSecurity.csrf(csrf -> csrf.disable()) + .authorizeHttpRequests(requests -> requests + .antMatchers("/util/echo", "/actuator/**") + .permitAll() + .anyRequest() + .authenticated()) + .httpBasic(); + + return httpSecurity.build(); + } + + @Bean + InMemoryUserDetailsManager userDetailsService(AuthProperties userProperties) { + UserDetails[] users = userProperties.getUsers().stream() + .map(user -> User.withDefaultPasswordEncoder() + .username(user.getUsername()) + .password(user.getPassword()) + .roles("someRole") + .build()) + .toArray(UserDetails[]::new); + + return new InMemoryUserDetailsManager(users); + } +} diff --git a/aai-traversal/src/main/java/org/onap/aai/interceptors/pre/OneWaySslAuthorization.java b/aai-traversal/src/main/java/org/onap/aai/interceptors/pre/OneWaySslAuthorization.java deleted file mode 100644 index 4cd6548..0000000 --- a/aai-traversal/src/main/java/org/onap/aai/interceptors/pre/OneWaySslAuthorization.java +++ /dev/null @@ -1,85 +0,0 @@ -/** - * ============LICENSE_START======================================================= - * org.onap.aai - * ================================================================================ - * Copyright © 2017-2018 AT&T Intellectual Property. All rights reserved. - * ================================================================================ - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * ============LICENSE_END========================================================= - */ -package org.onap.aai.interceptors.pre; - -import java.io.IOException; -import java.util.ArrayList; -import java.util.List; -import java.util.Optional; - -import javax.annotation.Priority; -import javax.ws.rs.container.ContainerRequestContext; -import javax.ws.rs.container.ContainerRequestFilter; -import javax.ws.rs.container.PreMatching; -import javax.ws.rs.core.MediaType; -import javax.ws.rs.core.Response; - -import org.onap.aai.TraversalProfiles; -import org.onap.aai.exceptions.AAIException; -import org.onap.aai.interceptors.AAIContainerFilter; -import org.onap.aai.logging.ErrorLogHelper; -import org.onap.aai.service.AuthorizationService; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.context.annotation.Profile; - -@Profile(TraversalProfiles.ONE_WAY_SSL) -@PreMatching -@Priority(AAIRequestFilterPriority.AUTHORIZATION) -public class OneWaySslAuthorization extends AAIContainerFilter implements ContainerRequestFilter { - - @Autowired - private AuthorizationService authorizationService; - - @Override - public void filter(ContainerRequestContext containerRequestContext) throws IOException { - - if (containerRequestContext.getUriInfo().getRequestUri().getPath() - .matches("^.*/util/echo$")) { - return; - } - - String basicAuth = containerRequestContext.getHeaderString("Authorization"); - List<MediaType> acceptHeaderValues = containerRequestContext.getAcceptableMediaTypes(); - - if (basicAuth == null || !basicAuth.startsWith("Basic ")) { - Optional<Response> responseOptional = errorResponse("AAI_3300", acceptHeaderValues); - containerRequestContext.abortWith(responseOptional.get()); - return; - } - - basicAuth = basicAuth.replaceAll("Basic ", ""); - - if (!authorizationService.checkIfUserAuthorized(basicAuth)) { - Optional<Response> responseOptional = errorResponse("AAI_3300", acceptHeaderValues); - containerRequestContext.abortWith(responseOptional.get()); - return; - } - - } - - private Optional<Response> errorResponse(String errorCode, List<MediaType> acceptHeaderValues) { - AAIException aaie = new AAIException(errorCode); - return Optional.of(Response.status(aaie.getErrorObject().getHTTPResponseCode()) - .entity( - ErrorLogHelper.getRESTAPIErrorResponse(acceptHeaderValues, aaie, new ArrayList<>())) - .build()); - - } -} diff --git a/aai-traversal/src/main/java/org/onap/aai/interceptors/pre/RequestTransactionLogging.java b/aai-traversal/src/main/java/org/onap/aai/interceptors/pre/RequestTransactionLogging.java index 6bae614..8877484 100644 --- a/aai-traversal/src/main/java/org/onap/aai/interceptors/pre/RequestTransactionLogging.java +++ b/aai-traversal/src/main/java/org/onap/aai/interceptors/pre/RequestTransactionLogging.java @@ -20,12 +20,7 @@ package org.onap.aai.interceptors.pre; import com.google.gson.JsonObject; - -import java.io.ByteArrayInputStream; -import java.io.ByteArrayOutputStream; import java.io.IOException; -import java.io.InputStream; -import java.nio.charset.Charset; import java.security.SecureRandom; import java.util.Random; import java.util.UUID; diff --git a/aai-traversal/src/main/java/org/onap/aai/rest/DslConsumer.java b/aai-traversal/src/main/java/org/onap/aai/rest/DslConsumer.java index 8226ddd..43ad1ff 100644 --- a/aai-traversal/src/main/java/org/onap/aai/rest/DslConsumer.java +++ b/aai-traversal/src/main/java/org/onap/aai/rest/DslConsumer.java @@ -22,6 +22,7 @@ package org.onap.aai.rest; import java.io.FileNotFoundException; import java.util.ArrayList; +import java.util.Collections; import java.util.List; import java.util.Map; import java.util.Objects; @@ -125,7 +126,7 @@ public class DslConsumer extends TraversalConsumer { @RequestParam(defaultValue = "-1") int resultSize, @RequestHeader HttpHeaders headers, HttpServletRequest request) throws FileNotFoundException, AAIException { - Set<String> roles = this.getRoles(request.getUserPrincipal()); + Set<String> roles = Collections.emptySet(); return processExecuteQuery(dslQuery, request, versionParam, format, subgraph, validate, headers, new Pageable(resultIndex, resultSize), roles); diff --git a/aai-traversal/src/main/java/org/onap/aai/rest/QueryConsumer.java b/aai-traversal/src/main/java/org/onap/aai/rest/QueryConsumer.java index 5aad81e..f775e0f 100644 --- a/aai-traversal/src/main/java/org/onap/aai/rest/QueryConsumer.java +++ b/aai-traversal/src/main/java/org/onap/aai/rest/QueryConsumer.java @@ -21,6 +21,7 @@ package org.onap.aai.rest; import java.net.URI; import java.util.ArrayList; +import java.util.Collections; import java.util.LinkedHashSet; import java.util.List; import java.util.Optional; @@ -124,7 +125,7 @@ public class QueryConsumer extends TraversalConsumer { @Context HttpHeaders headers, @Context HttpServletRequest req, @Context UriInfo info) { - Set<String> roles = this.getRoles(req.getUserPrincipal()); + Set<String> roles = Collections.emptySet(); return runner(TraversalConstants.AAI_TRAVERSAL_TIMEOUT_ENABLED, TraversalConstants.AAI_TRAVERSAL_TIMEOUT_APP, diff --git a/aai-traversal/src/main/java/org/onap/aai/rest/TraversalConsumer.java b/aai-traversal/src/main/java/org/onap/aai/rest/TraversalConsumer.java index bc74308..df7d580 100644 --- a/aai-traversal/src/main/java/org/onap/aai/rest/TraversalConsumer.java +++ b/aai-traversal/src/main/java/org/onap/aai/rest/TraversalConsumer.java @@ -24,18 +24,13 @@ import java.util.Collections; import java.util.Set; import java.util.concurrent.TimeUnit; import java.util.stream.Collectors; - import javax.ws.rs.core.MultivaluedMap; -import javax.ws.rs.core.UriInfo; - import org.apache.commons.lang3.ObjectUtils; import org.apache.commons.lang3.StringUtils; import org.apache.tinkerpop.gremlin.process.traversal.P; import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversalSource; import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__; import org.apache.tinkerpop.gremlin.process.traversal.strategy.decoration.SubgraphStrategy; -import org.keycloak.adapters.springsecurity.account.SimpleKeycloakAccount; -import org.keycloak.adapters.springsecurity.token.KeycloakAuthenticationToken; import org.onap.aai.config.SpringContextAware; import org.onap.aai.db.props.AAIProperties; import org.onap.aai.exceptions.AAIException; @@ -150,22 +145,6 @@ public abstract class TraversalConsumer extends RESTAPI { return traversalSource; } - protected Set<String> getRoles(Principal userPrincipal) { - KeycloakAuthenticationToken token = (KeycloakAuthenticationToken) userPrincipal; - if (ObjectUtils.isEmpty(token)) { - return Collections.EMPTY_SET; - } - - SimpleKeycloakAccount account = (SimpleKeycloakAccount) token.getDetails(); - if (ObjectUtils.isEmpty(account)) { - return Collections.EMPTY_SET; - } - - return account.getRoles().stream() - .map(role -> StringUtils.removeEnd(role, OwnerCheck.READ_ONLY_SUFFIX)) - .collect(Collectors.toSet()); - } - protected void validateHistoryParams(Format format, MultivaluedMap<String, String> params) throws AAIException { getStartTime(format, params); @@ -181,7 +160,7 @@ public abstract class TraversalConsumer extends RESTAPI { * truncation time * In the state api, we should return an error if the timestamp provided is prior to the * truncation time - * + * * @param params * @return */ diff --git a/aai-traversal/src/main/java/org/onap/aai/rest/dsl/V1DslQueryProcessor.java b/aai-traversal/src/main/java/org/onap/aai/rest/dsl/V1DslQueryProcessor.java index cc89b7d..95abbda 100644 --- a/aai-traversal/src/main/java/org/onap/aai/rest/dsl/V1DslQueryProcessor.java +++ b/aai-traversal/src/main/java/org/onap/aai/rest/dsl/V1DslQueryProcessor.java @@ -27,9 +27,7 @@ import java.io.InputStream; import java.nio.charset.StandardCharsets; import java.util.HashMap; import java.util.Map; - import org.antlr.v4.runtime.*; -import org.antlr.v4.runtime.misc.ParseCancellationException; import org.antlr.v4.runtime.tree.ParseTree; import org.antlr.v4.runtime.tree.ParseTreeWalker; import org.onap.aai.config.SpringContextAware; @@ -38,7 +36,6 @@ import org.onap.aai.dsl.v1.AAIDslParser; import org.onap.aai.exceptions.AAIException; import org.onap.aai.rest.dsl.v1.DslListener; import org.onap.aai.rest.dsl.validation.DslValidator; -import org.onap.aai.rest.enums.QueryVersion; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.context.annotation.Scope; diff --git a/aai-traversal/src/main/java/org/onap/aai/rest/dsl/V2DslQueryProcessor.java b/aai-traversal/src/main/java/org/onap/aai/rest/dsl/V2DslQueryProcessor.java index 28d5ef0..5fed140 100644 --- a/aai-traversal/src/main/java/org/onap/aai/rest/dsl/V2DslQueryProcessor.java +++ b/aai-traversal/src/main/java/org/onap/aai/rest/dsl/V2DslQueryProcessor.java @@ -30,7 +30,6 @@ import java.util.List; import java.util.Map; import org.antlr.v4.runtime.*; -import org.antlr.v4.runtime.misc.ParseCancellationException; import org.antlr.v4.runtime.tree.ParseTree; import org.antlr.v4.runtime.tree.ParseTreeWalker; import org.onap.aai.config.SpringContextAware; @@ -39,7 +38,6 @@ import org.onap.aai.dsl.v2.AAIDslParser; import org.onap.aai.exceptions.AAIException; import org.onap.aai.rest.dsl.v2.DslListener; import org.onap.aai.rest.dsl.validation.DslValidator; -import org.onap.aai.rest.enums.QueryVersion; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.context.annotation.Scope; diff --git a/aai-traversal/src/main/java/org/onap/aai/rest/dsl/v2/DslListener.java b/aai-traversal/src/main/java/org/onap/aai/rest/dsl/v2/DslListener.java index 571f6f6..0e328eb 100644 --- a/aai-traversal/src/main/java/org/onap/aai/rest/dsl/v2/DslListener.java +++ b/aai-traversal/src/main/java/org/onap/aai/rest/dsl/v2/DslListener.java @@ -43,7 +43,6 @@ import org.onap.aai.setup.SchemaVersions; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.context.annotation.Scope; -import org.springframework.context.annotation.ScopedProxyMode; import org.springframework.stereotype.Component; /** diff --git a/aai-traversal/src/main/java/org/onap/aai/rest/search/GremlinServerSingleton.java b/aai-traversal/src/main/java/org/onap/aai/rest/search/GremlinServerSingleton.java index 172b2e6..656c4c8 100644 --- a/aai-traversal/src/main/java/org/onap/aai/rest/search/GremlinServerSingleton.java +++ b/aai-traversal/src/main/java/org/onap/aai/rest/search/GremlinServerSingleton.java @@ -18,27 +18,7 @@ * ============LICENSE_END========================================================= */ package org.onap.aai.rest.search; - -import java.io.File; -import java.io.FileInputStream; -import java.io.FileNotFoundException; -import java.io.IOException; -import java.nio.file.Files; -import java.nio.file.Path; -import java.nio.file.Paths; -import java.util.Date; -import java.util.Properties; import java.util.Timer; -import java.util.TimerTask; - -import javax.annotation.PostConstruct; - -import org.apache.tinkerpop.gremlin.driver.Cluster; -import org.onap.aai.logging.LogFormatTools; -import org.onap.aai.util.AAIConstants; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.beans.factory.annotation.Value; public class GremlinServerSingleton { diff --git a/aai-traversal/src/main/java/org/onap/aai/rest/search/GroovyShellImpl.java b/aai-traversal/src/main/java/org/onap/aai/rest/search/GroovyShellImpl.java index 126d754..bc8c87b 100644 --- a/aai-traversal/src/main/java/org/onap/aai/rest/search/GroovyShellImpl.java +++ b/aai-traversal/src/main/java/org/onap/aai/rest/search/GroovyShellImpl.java @@ -20,14 +20,10 @@ package org.onap.aai.rest.search; import java.util.Map; - -import javax.ws.rs.core.MultivaluedHashMap; - import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversal; import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversalSource; import org.onap.aai.aailog.logs.AaiDBTraversalMetricLog; import org.onap.aai.restcore.search.GremlinGroovyShell; -import org.onap.aai.restcore.util.URITools; import org.onap.aai.util.AAIConstants; public class GroovyShellImpl extends GenericQueryProcessor { diff --git a/aai-traversal/src/main/java/org/onap/aai/rest/search/LocalCQConfig.java b/aai-traversal/src/main/java/org/onap/aai/rest/search/LocalCQConfig.java index a34506e..0ddf3b0 100644 --- a/aai-traversal/src/main/java/org/onap/aai/rest/search/LocalCQConfig.java +++ b/aai-traversal/src/main/java/org/onap/aai/rest/search/LocalCQConfig.java @@ -31,7 +31,6 @@ import javax.annotation.PostConstruct; import org.onap.aai.exceptions.AAIException; import org.onap.aai.logging.ErrorLogHelper; -import org.onap.aai.logging.LogFormatTools; import org.onap.aai.util.AAIConstants; import org.slf4j.Logger; import org.slf4j.LoggerFactory; diff --git a/aai-traversal/src/main/java/org/onap/aai/rest/security/WebSecurityConfig.java b/aai-traversal/src/main/java/org/onap/aai/rest/security/WebSecurityConfig.java deleted file mode 100644 index e77c3b3..0000000 --- a/aai-traversal/src/main/java/org/onap/aai/rest/security/WebSecurityConfig.java +++ /dev/null @@ -1,78 +0,0 @@ - -/** - * ============LICENSE_START======================================================= - * org.onap.aai - * ================================================================================ - * Copyright (C) 2019 Nordix Foundation. - * Modifications Copyright (C) 2019 AT&T Intellectual Property. - * Modifications Copyright (C) 2020 Bell Canada. - * ================================================================================ - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - * SPDX-License-Identifier: Apache-2.0 - * ============LICENSE_END========================================================= - */ -package org.onap.aai.rest.security; - -import org.keycloak.adapters.springboot.KeycloakSpringBootConfigResolver; -import org.keycloak.adapters.springsecurity.KeycloakConfiguration; -import org.keycloak.adapters.springsecurity.authentication.KeycloakAuthenticationProvider; -import org.keycloak.adapters.springsecurity.config.KeycloakWebSecurityConfigurerAdapter; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.web.servlet.ServletListenerRegistrationBean; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Import; -import org.springframework.context.annotation.Profile; -import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder; -import org.springframework.security.config.annotation.web.builders.HttpSecurity; -import org.springframework.security.config.annotation.web.builders.WebSecurity; -import org.springframework.security.core.authority.mapping.SimpleAuthorityMapper; -import org.springframework.security.core.session.SessionRegistryImpl; -import org.springframework.security.web.authentication.session.RegisterSessionAuthenticationStrategy; -import org.springframework.security.web.authentication.session.SessionAuthenticationStrategy; -import org.springframework.security.web.session.HttpSessionEventPublisher; - -@Profile("keycloak") -@KeycloakConfiguration -@Import({KeycloakSpringBootConfigResolver.class}) -public class WebSecurityConfig extends KeycloakWebSecurityConfigurerAdapter { - @Autowired - public void configureGlobal(AuthenticationManagerBuilder auth) { - KeycloakAuthenticationProvider keycloakAuthenticationProvider = - keycloakAuthenticationProvider(); - keycloakAuthenticationProvider.setGrantedAuthoritiesMapper(new SimpleAuthorityMapper()); - auth.authenticationProvider(keycloakAuthenticationProvider); - } - - @Bean - public ServletListenerRegistrationBean<HttpSessionEventPublisher> httpSessionEventPublisher() { - return new ServletListenerRegistrationBean<>(new HttpSessionEventPublisher()); - } - - @Bean - @Override - protected SessionAuthenticationStrategy sessionAuthenticationStrategy() { - return new RegisterSessionAuthenticationStrategy(new SessionRegistryImpl()); - } - - @Override - protected void configure(HttpSecurity http) throws Exception { - super.configure(http); - http.authorizeRequests().antMatchers("/**").permitAll().and().csrf().disable(); - } - - @Override - public void configure(WebSecurity web) { - web.ignoring().regexMatchers("^.*/util/echo$"); - } -} diff --git a/aai-traversal/src/main/java/org/onap/aai/rest/util/EchoResponse.java b/aai-traversal/src/main/java/org/onap/aai/rest/util/EchoResponse.java index 028ebca..e0c646a 100644 --- a/aai-traversal/src/main/java/org/onap/aai/rest/util/EchoResponse.java +++ b/aai-traversal/src/main/java/org/onap/aai/rest/util/EchoResponse.java @@ -20,8 +20,6 @@ package org.onap.aai.rest.util; import java.util.ArrayList; -import java.util.HashMap; - import javax.servlet.http.HttpServletRequest; import javax.ws.rs.GET; import javax.ws.rs.Path; diff --git a/aai-traversal/src/main/java/org/onap/aai/service/AuthorizationService.java b/aai-traversal/src/main/java/org/onap/aai/service/AuthorizationService.java deleted file mode 100644 index c291551..0000000 --- a/aai-traversal/src/main/java/org/onap/aai/service/AuthorizationService.java +++ /dev/null @@ -1,108 +0,0 @@ -/** - * ============LICENSE_START======================================================= - * org.onap.aai - * ================================================================================ - * Copyright © 2017-2018 AT&T Intellectual Property. All rights reserved. - * ================================================================================ - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * ============LICENSE_END========================================================= - */ -package org.onap.aai.service; - -import java.io.IOException; -import java.nio.charset.StandardCharsets; -import java.nio.file.Files; -import java.nio.file.Path; -import java.util.Base64; -import java.util.HashMap; -import java.util.Map; -import java.util.stream.Stream; - -import javax.annotation.PostConstruct; - -import org.eclipse.jetty.util.security.Password; -import org.onap.aai.TraversalProfiles; -import org.onap.aai.util.AAIConstants; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.context.annotation.Profile; -import org.springframework.stereotype.Service; - -@Service -@Profile(TraversalProfiles.ONE_WAY_SSL) -public class AuthorizationService { - - private static final Logger logger = LoggerFactory.getLogger(AuthorizationService.class); - - private final Map<String, String> authorizedUsers = new HashMap<>(); - - private static final Base64.Encoder ENCODER = Base64.getEncoder(); - - @PostConstruct - public void init() { - - String basicAuthFile = getBasicAuthFilePath(); - - try (Stream<String> stream = Files.lines(Path.of(basicAuthFile))) { - stream.filter(line -> !line.startsWith("#")).forEach(str -> { - byte[] bytes = null; - - String usernamePassword = null; - String accessType = null; - - String[] userAccessType = str.split(","); - - if (userAccessType.length != 2) { - throw new RuntimeException( - "Please check the realm.properties file as it is not conforming to the basic auth"); - } - - usernamePassword = userAccessType[0]; - accessType = userAccessType[1]; - - String[] usernamePasswordArray = usernamePassword.split(":"); - - if (usernamePasswordArray.length != 3) { - throw new RuntimeException( - "This username / pwd is not a valid entry in realm.properties"); - } - - String username = usernamePasswordArray[0]; - String password = null; - - if (str.contains("OBF:")) { - password = usernamePasswordArray[1] + ":" + usernamePasswordArray[2]; - password = Password.deobfuscate(password); - } - - bytes = - ENCODER.encode((username + ":" + password).getBytes(StandardCharsets.UTF_8)); - - authorizedUsers.put(new String(bytes), accessType); - - authorizedUsers.put(new String(ENCODER.encode(bytes)), accessType); - }); - } catch (IOException e) { - logger.error("IO Exception occurred during the reading of realm.properties", e); - } - } - - public boolean checkIfUserAuthorized(String authorization) { - return authorizedUsers.containsKey(authorization) - && "admin".equals(authorizedUsers.get(authorization)); - } - - public String getBasicAuthFilePath() { - return AAIConstants.AAI_HOME_ETC_AUTH + AAIConstants.AAI_FILESEP + "realm.properties"; - } -} diff --git a/aai-traversal/src/main/java/org/onap/aai/service/RetiredService.java b/aai-traversal/src/main/java/org/onap/aai/service/RetiredService.java index 26f1f5c..dd95f0f 100644 --- a/aai-traversal/src/main/java/org/onap/aai/service/RetiredService.java +++ b/aai-traversal/src/main/java/org/onap/aai/service/RetiredService.java @@ -23,9 +23,7 @@ import java.util.Arrays; import java.util.List; import java.util.regex.Pattern; import java.util.stream.Collectors; - import javax.annotation.PostConstruct; - import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.PropertySource; import org.springframework.stereotype.Service; diff --git a/aai-traversal/src/main/java/org/onap/aai/util/GenericQueryBuilder.java b/aai-traversal/src/main/java/org/onap/aai/util/GenericQueryBuilder.java index 82ccc73..08f5971 100644 --- a/aai-traversal/src/main/java/org/onap/aai/util/GenericQueryBuilder.java +++ b/aai-traversal/src/main/java/org/onap/aai/util/GenericQueryBuilder.java @@ -20,9 +20,7 @@ package org.onap.aai.util; import java.util.List; - import javax.ws.rs.core.HttpHeaders; - import org.onap.aai.introspection.Loader; import org.onap.aai.serialization.engines.TransactionalGraphEngine; import org.onap.aai.serialization.queryformats.utils.UrlBuilder; diff --git a/aai-traversal/src/main/java/org/onap/aai/util/MakeNamedQuery.java b/aai-traversal/src/main/java/org/onap/aai/util/MakeNamedQuery.java index 5a32003..37cfcb4 100644 --- a/aai-traversal/src/main/java/org/onap/aai/util/MakeNamedQuery.java +++ b/aai-traversal/src/main/java/org/onap/aai/util/MakeNamedQuery.java @@ -23,9 +23,7 @@ import java.io.File; import java.nio.charset.Charset; import java.util.*; import java.util.Map.Entry; - import org.apache.commons.io.FileUtils; -import org.onap.aai.config.SpringContextAware; import org.onap.aai.introspection.Introspector; import org.onap.aai.introspection.Loader; import org.onap.aai.introspection.LoaderFactory; diff --git a/aai-traversal/src/main/java/org/onap/aai/util/NodesQueryBuilder.java b/aai-traversal/src/main/java/org/onap/aai/util/NodesQueryBuilder.java index 1250270..099a8c6 100644 --- a/aai-traversal/src/main/java/org/onap/aai/util/NodesQueryBuilder.java +++ b/aai-traversal/src/main/java/org/onap/aai/util/NodesQueryBuilder.java @@ -21,9 +21,7 @@ package org.onap.aai.util; import java.util.List; - import javax.ws.rs.core.HttpHeaders; - import org.onap.aai.introspection.Loader; import org.onap.aai.serialization.engines.TransactionalGraphEngine; import org.onap.aai.serialization.queryformats.utils.UrlBuilder; diff --git a/aai-traversal/src/main/java/org/onap/aai/web/JerseyConfiguration.java b/aai-traversal/src/main/java/org/onap/aai/web/JerseyConfiguration.java index e430e77..959089b 100644 --- a/aai-traversal/src/main/java/org/onap/aai/web/JerseyConfiguration.java +++ b/aai-traversal/src/main/java/org/onap/aai/web/JerseyConfiguration.java @@ -21,19 +21,14 @@ package org.onap.aai.web; import static java.lang.Boolean.parseBoolean; import static java.util.Comparator.comparingInt; - import com.google.common.collect.Sets; - import java.lang.reflect.AnnotatedElement; import java.util.Collection; import java.util.Comparator; import java.util.Set; import java.util.logging.Logger; - import javax.annotation.Priority; - import org.glassfish.jersey.server.ResourceConfig; -import org.glassfish.jersey.servlet.ServletProperties; import org.onap.aai.rest.*; import org.onap.aai.rest.search.ModelAndNamedQueryRestProvider; import org.onap.aai.rest.search.SearchProvider; @@ -65,7 +60,7 @@ public class JerseyConfiguration { public ResourceConfig resourceConfig() { ResourceConfig resourceConfig = new ResourceConfig(); - resourceConfig.property(ServletProperties.FILTER_FORWARD_ON_404, true); + resourceConfig.property("jersey.config.servlet.filter.forwardOn404", true); Set<Class<?>> classes = Sets.newHashSet(SearchProvider.class, ModelAndNamedQueryRestProvider.class, QueryConsumer.class, RecentAPIConsumer.class, EchoResponse.class, CQ2Gremlin.class, CQ2GremlinTest.class); Set<Class<?>> filterClasses = @@ -73,14 +68,13 @@ public class JerseyConfiguration { org.onap.aai.interceptors.pre.RequestTransactionLogging.class, org.onap.aai.interceptors.pre.HeaderValidation.class, org.onap.aai.interceptors.pre.HttpHeaderInterceptor.class, - org.onap.aai.interceptors.pre.OneWaySslAuthorization.class, org.onap.aai.interceptors.pre.VersionLatestInterceptor.class, org.onap.aai.interceptors.pre.RetiredInterceptor.class, org.onap.aai.interceptors.pre.VersionInterceptor.class, org.onap.aai.interceptors.pre.RequestHeaderManipulation.class, org.onap.aai.interceptors.pre.RequestModification.class, org.onap.aai.interceptors.post.InvalidResponseStatus.class, - + org.onap.aai.interceptors.post.ResponseTransactionLogging.class, org.onap.aai.interceptors.post.ResponseHeaderManipulation.class ); diff --git a/aai-traversal/src/main/java/org/onap/aai/web/LocalHostAccessLog.java b/aai-traversal/src/main/java/org/onap/aai/web/LocalHostAccessLog.java index cea7fc5..6027c24 100644 --- a/aai-traversal/src/main/java/org/onap/aai/web/LocalHostAccessLog.java +++ b/aai-traversal/src/main/java/org/onap/aai/web/LocalHostAccessLog.java @@ -20,9 +20,7 @@ package org.onap.aai.web; import ch.qos.logback.access.jetty.RequestLogImpl; - import java.util.Arrays; - import org.eclipse.jetty.server.handler.HandlerCollection; import org.eclipse.jetty.server.handler.RequestLogHandler; import org.eclipse.jetty.util.thread.QueuedThreadPool; diff --git a/aai-traversal/src/main/java/org/onap/aai/web/MicrometerConfiguration.java b/aai-traversal/src/main/java/org/onap/aai/web/MicrometerConfiguration.java index 77dbe96..024f7d2 100644 --- a/aai-traversal/src/main/java/org/onap/aai/web/MicrometerConfiguration.java +++ b/aai-traversal/src/main/java/org/onap/aai/web/MicrometerConfiguration.java @@ -23,7 +23,6 @@ import io.micrometer.core.instrument.Tag; import io.micrometer.core.instrument.Tags; import io.micrometer.jersey2.server.JerseyTags; import io.micrometer.jersey2.server.JerseyTagsProvider; - import org.glassfish.jersey.server.ContainerResponse; import org.glassfish.jersey.server.monitoring.RequestEvent; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; diff --git a/aai-traversal/src/main/resources/aaf/bath_config.csv b/aai-traversal/src/main/resources/aaf/bath_config.csv deleted file mode 100644 index 433b333..0000000 --- a/aai-traversal/src/main/resources/aaf/bath_config.csv +++ /dev/null @@ -1,32 +0,0 @@ -# AAI -> aai@aai.onap.org -Basic QUFJOkFBSQ==,Basic YWFpQGFhaS5vbmFwLm9yZzpkZW1vMTIzNDU2IQ==,2050-03-03 - -# ModelLoader -> aai@aai.onap.org -Basic TW9kZWxMb2FkZXI6TW9kZWxMb2FkZXI=,Basic YWFpQGFhaS5vbmFwLm9yZzpkZW1vMTIzNDU2IQ==,2050-03-03 - -# AaiUI -> aai@aai.onap.org, -Basic QWFpVUk6QWFpVUk=,Basic YWFpQGFhaS5vbmFwLm9yZzpkZW1vMTIzNDU2IQ==,2050-03-03 - -# MSO -> so@so.onap.org -Basic TVNPOk1TTw==,Basic c29Ac28ub25hcC5vcmc6ZGVtbzEyMzQ1NiE=,2050-03-03 - -# SDNC -> sdnc@sdnc.onap.org -Basic U0ROQzpTRE5D,Basic c2RuY0BzZG5jLm9uYXAub3JnOmRlbW8xMjM0NTYh,2050-03-03 - -# DCAE -> dcae@dcae.onap.org -Basic RENBRTpEQ0FF,Basic ZGNhZUBkY2FlLm9uYXAub3JnOmRlbW8xMjMzNDU2IQ==,2050-03-03 - -# POLICY -> policy@policy.onap.org -Basic UE9MSUNZOlBPTElDWQ==,Basic cG9saWN5QHBvbGljeS5vbmFwLm9yZzpkZW1vMTIzNDU2IQ==,2050-03-03 - -# ASDC -> sdc@sdc.onap.org -Basic QVNEQzpBU0RD,Basic c2RjQHNkYy5vbmFwLm9yZzpkZW1vMTIzNDU2IQ==,2050-03-03 - -# VID -> vid@vid.onap.org -Basic VklEOlZJRA==,Basic dmlkQHZpZC5vbmFwLm9yZzpkZW1vMTIzNDU2IQ==,2050-03-03 - -# APPC -> appc@appc.onap.org -Basic QVBQQzpBUFBD,Basic YXBwY0BhcHBjLm9uYXAub3JnOmRlbW8xMjM0NTYh,2050-03-03 - -# OOF -> oof@oof.onap.org -Basic T09GOk9PRg==,Basic b29mQG9vZi5vbmFwLm9yZzpkZW1vMTIzNDQ2IQ==,2050-03-03 diff --git a/aai-traversal/src/main/resources/aaf/onap/org.onap.aai.keyfile b/aai-traversal/src/main/resources/aaf/onap/org.onap.aai.keyfile deleted file mode 100644 index 3416d4a..0000000 --- a/aai-traversal/src/main/resources/aaf/onap/org.onap.aai.keyfile +++ /dev/null @@ -1,27 +0,0 @@ -2otP92kNFHdexroZxvgYY7ffslFiwCD3CiVYMIfUF2edqZK7972NwkvE_mbaBo6jh8lByLIqrWAf -jyzoiVsvQ_kCa0cS1xaRLpcxv3bx1b7o3hGPBqpd6vmSG4y2JLzNlCBZWuTJz827wr8p_fWrYuUm -4L1WoaEe8W5PRnXjl4hDqbJBAlEoRIBXugUDt_7O5wgx2Rl3HVoOczZtf0RzONZ1F0BmKf3QlAUe -moSbARitYRgIPt5sLbT7qPyoEpGDhQ1XBowR744-wsjBc-14yO62Ajp5xWKTp15uWn3_HHuw1SAf -GWSBRGlSlEVkXQqi9Hw5jDttKVzHX1ckwR0SQOirbtHPHplxPX3WKjKhSdSeMzw6LOAHIQYRMKBT -74oGnULAfPtV7TaGwOKriT3P49CoPdt9On89-LGyCZSxDWKH0K-rgB6I2_hPT2Uzr3jmXiMa-sfh -iMvyQ7ABBVx0OFsUuNb5mcU2O6dWiQreL5RerrloV_X3ZtnNjxENXKjQ5KBR1A5ISPjFFK-kf4Rb -p6FSII8LcsiqgdWuZ4GX_C6x8HX4A-vD0x3Uc9CfoXY-k23cNIy-R-W-oB-P2OgdWDNgZ7VaOLNt -3L-NwWpNblfYvs93cNmkbVAwCZ3r0OP7RFeuON84TRaynK_Fh2S3rypRyJcUmM1pvpZqJ5_-umSW -hUs1OqkdLv3xjlVzzK-3nMr0q3Zcyp4XdyLYtcX5I3Xqk9ZcsyAT7ghmHhV8KjUjue7OcfAWg0m7 -RJLGq6VC8HeK4HEMa4lF677Qh7DRufghIDEmQSIDfGA790WGSA8HqcOvAL4hURCHyCWiPa5i8ksX -xX4HyqF8PCVCLJ_ZhzcuIlc0jStAexWbJU_vcyX7XgUaHCkF-M-zv1FP6Z3DHBMD2QqSWjmyNCCk -8sIuwzs62P_j2o9jG33kssedCrUWOwZancU107-5H0Zw-UWvtCqUfmRZ7TsEbWY7lk_SKfLfAN5q -ncOQgU_VxDXUFDST4LN_WVECRafK3UtwWomxWSji25Lbf6NVni3ok-yLMDZR-wrE-54jLPES9j0i -5N0xrk9CfsvGUpUZ1_XQcgaxI6m27DtCCJXb5ywenPBiUIJCMCTq88CqNZxGpju2i4BJcUH2hUHe -GKhO8pgslwhtEVot9EDwdzSrJkWFCfb6ud4zMxrqdi7-mLWMOydg6lhpEFEX5wu2BLIujGsZlEGE -_K9jGfBypjXuJCKDZIuPfEnf_7idjKis_JcFB7x4Hx2HHDcBjlWWFZN_VIEnPkQSyZEC26RTFP3k -zkY3GwUfA36a4XW2pu3gE9wz-W6fkONfzOZ6YiyCm_dRFUVuGSdJG02Hh5iXYlMOGJltPzWH2jVf -S-QTOmXQTKSOheXoJO6O-9uQbsRf-kq-6w1pvIOp4ms35w4_0Xj0Xr2a9y-L9PdBZvrUsa-jxsZU -LyA-YY4Ej6QwDBDTD2MGjF1E5_ekYgjoNlltM9rJjofruM4ym0n7LPHC7YXXQSEFOZYeTKi6wUDw -hQ1DoWHgu4PQ2lexada8sxQdConbPe2iW16h-PrO5D12E4XbT00fqaMlBmjQwzdNRdCC2NRPIQ5W -nwaO8dZ9yjxsjT7ZVHb9-DRblb3XDocponzxVXqUGtJAie4WXQnerX0ApTWGaHEr5y56JJVS_3LP -bKrbXBXcs4jTUX4ECXRrOs8JQDQNysXhvTPCu0XUxNZpjx6KLxDs93k2OcESHjl5J6n6OKKJqqoN -JEyFO5LGXpnmUJbn0-CaHHPRI1mHwEu4brY8wDZd9A0PD1KGXDoCHMfEk1lGblQdyOcVrXZ6uSBk -Z6zHDnwSCHO1mPYqtelJQehZoFuPSv9PIgKLxs_qJOtZFnXII5YO1mGXgiIBWBjUFDR5HG4ENS6y -J4MCF-JLMp-PVMAkOaCIQRRDpRnMm_fT1sc_P562Diu_pcdt-r55pMFQYGoGfjRmxQBKk0-SsdnP -mlZIiis9DfQEN0q3QQdNRYBJD7tmhUwhAPZdLgXqJA8sZf8UyFQhhpsky79NT343YL9smUlF
\ No newline at end of file diff --git a/aai-traversal/src/main/resources/aaf/onap/org.onap.aai.p12 b/aai-traversal/src/main/resources/aaf/onap/org.onap.aai.p12 Binary files differdeleted file mode 100644 index 023e2ea..0000000 --- a/aai-traversal/src/main/resources/aaf/onap/org.onap.aai.p12 +++ /dev/null diff --git a/aai-traversal/src/main/resources/aaf/onap/org.onap.aai.props b/aai-traversal/src/main/resources/aaf/onap/org.onap.aai.props deleted file mode 100644 index 279c776..0000000 --- a/aai-traversal/src/main/resources/aaf/onap/org.onap.aai.props +++ /dev/null @@ -1,13 +0,0 @@ -############################################################ -# Properties Generated by AT&T Certificate Manager -# @copyright 2016, AT&T -############################################################ -cadi_x509_issuers=CN=intermediateCA_1, OU=OSAAF, O=ONAP, C=US -cadi_keyfile=aai-traversal/src/main/resources/aaf/org.onap.aai.keyfile -cadi_keystore=aai-traversal/src/main/resources/aaf/org.onap.aai.p12 -cadi_keystore_password=enc:383RDJRFA6yQz9AOxUxC1iIg3xTJXityw05MswnpnEtelRQy2D4r5INQjrea7GTV -#cadi_key_password=enc:<KEY PASSWORD (optional if the same as KEYSTORE PASSWORD)> -cadi_alias=aai@aai.onap.org -cadi_truststore=aai-traversal/src/main/resources/aaf/truststoreONAPall.jks -cadi_truststore_password=enc:s77wlnZFoQ08NhnU3OSeWO6uKgRwC6sAK-wTvVubNz2 -cadi_loglevel=INFO
\ No newline at end of file diff --git a/aai-traversal/src/main/resources/aaf/onap/org.osaaf.location.props b/aai-traversal/src/main/resources/aaf/onap/org.osaaf.location.props deleted file mode 100644 index 73a3a1e..0000000 --- a/aai-traversal/src/main/resources/aaf/onap/org.osaaf.location.props +++ /dev/null @@ -1,26 +0,0 @@ -## -## org.osaaf.location.props -## -## Localized Machine Information -## -# Almeda California ? -cadi_latitude=37.78187 -cadi_longitude=-122.26147 - -# Locate URL (which AAF Env) -#aaf_locate_url=https://aaf-onap-beijing-test.osaaf.org -#aaf_locate_url=https://aaf-onap-test.osaaf.org - -aaf_locate_url=https://aaf-onap-test.osaaf.org:8095 - -# AAF URL -aaf_url=https://AAF_LOCATE_URL/AAF_NS.service:2.0 - -# AAF Environment Designation -aaf_env=DEV - -# OAuth2 Endpoints -aaf_oauth2_token_url=https://AAF_LOCATE_URL/AAF_NS.token:2.0/token -aaf_oauth2_introspect_url=https://AAF_LOCATE_URL/AAF_NS.introspect:2.0/introspect - - diff --git a/aai-traversal/src/main/resources/aaf/onap/truststoreONAPall.jks b/aai-traversal/src/main/resources/aaf/onap/truststoreONAPall.jks Binary files differdeleted file mode 100644 index 2da1dcc..0000000 --- a/aai-traversal/src/main/resources/aaf/onap/truststoreONAPall.jks +++ /dev/null diff --git a/aai-traversal/src/main/resources/aaf/org.onap.aai.keyfile b/aai-traversal/src/main/resources/aaf/org.onap.aai.keyfile deleted file mode 100644 index 3416d4a..0000000 --- a/aai-traversal/src/main/resources/aaf/org.onap.aai.keyfile +++ /dev/null @@ -1,27 +0,0 @@ -2otP92kNFHdexroZxvgYY7ffslFiwCD3CiVYMIfUF2edqZK7972NwkvE_mbaBo6jh8lByLIqrWAf -jyzoiVsvQ_kCa0cS1xaRLpcxv3bx1b7o3hGPBqpd6vmSG4y2JLzNlCBZWuTJz827wr8p_fWrYuUm -4L1WoaEe8W5PRnXjl4hDqbJBAlEoRIBXugUDt_7O5wgx2Rl3HVoOczZtf0RzONZ1F0BmKf3QlAUe -moSbARitYRgIPt5sLbT7qPyoEpGDhQ1XBowR744-wsjBc-14yO62Ajp5xWKTp15uWn3_HHuw1SAf -GWSBRGlSlEVkXQqi9Hw5jDttKVzHX1ckwR0SQOirbtHPHplxPX3WKjKhSdSeMzw6LOAHIQYRMKBT -74oGnULAfPtV7TaGwOKriT3P49CoPdt9On89-LGyCZSxDWKH0K-rgB6I2_hPT2Uzr3jmXiMa-sfh -iMvyQ7ABBVx0OFsUuNb5mcU2O6dWiQreL5RerrloV_X3ZtnNjxENXKjQ5KBR1A5ISPjFFK-kf4Rb -p6FSII8LcsiqgdWuZ4GX_C6x8HX4A-vD0x3Uc9CfoXY-k23cNIy-R-W-oB-P2OgdWDNgZ7VaOLNt -3L-NwWpNblfYvs93cNmkbVAwCZ3r0OP7RFeuON84TRaynK_Fh2S3rypRyJcUmM1pvpZqJ5_-umSW -hUs1OqkdLv3xjlVzzK-3nMr0q3Zcyp4XdyLYtcX5I3Xqk9ZcsyAT7ghmHhV8KjUjue7OcfAWg0m7 -RJLGq6VC8HeK4HEMa4lF677Qh7DRufghIDEmQSIDfGA790WGSA8HqcOvAL4hURCHyCWiPa5i8ksX -xX4HyqF8PCVCLJ_ZhzcuIlc0jStAexWbJU_vcyX7XgUaHCkF-M-zv1FP6Z3DHBMD2QqSWjmyNCCk -8sIuwzs62P_j2o9jG33kssedCrUWOwZancU107-5H0Zw-UWvtCqUfmRZ7TsEbWY7lk_SKfLfAN5q -ncOQgU_VxDXUFDST4LN_WVECRafK3UtwWomxWSji25Lbf6NVni3ok-yLMDZR-wrE-54jLPES9j0i -5N0xrk9CfsvGUpUZ1_XQcgaxI6m27DtCCJXb5ywenPBiUIJCMCTq88CqNZxGpju2i4BJcUH2hUHe -GKhO8pgslwhtEVot9EDwdzSrJkWFCfb6ud4zMxrqdi7-mLWMOydg6lhpEFEX5wu2BLIujGsZlEGE -_K9jGfBypjXuJCKDZIuPfEnf_7idjKis_JcFB7x4Hx2HHDcBjlWWFZN_VIEnPkQSyZEC26RTFP3k -zkY3GwUfA36a4XW2pu3gE9wz-W6fkONfzOZ6YiyCm_dRFUVuGSdJG02Hh5iXYlMOGJltPzWH2jVf -S-QTOmXQTKSOheXoJO6O-9uQbsRf-kq-6w1pvIOp4ms35w4_0Xj0Xr2a9y-L9PdBZvrUsa-jxsZU -LyA-YY4Ej6QwDBDTD2MGjF1E5_ekYgjoNlltM9rJjofruM4ym0n7LPHC7YXXQSEFOZYeTKi6wUDw -hQ1DoWHgu4PQ2lexada8sxQdConbPe2iW16h-PrO5D12E4XbT00fqaMlBmjQwzdNRdCC2NRPIQ5W -nwaO8dZ9yjxsjT7ZVHb9-DRblb3XDocponzxVXqUGtJAie4WXQnerX0ApTWGaHEr5y56JJVS_3LP -bKrbXBXcs4jTUX4ECXRrOs8JQDQNysXhvTPCu0XUxNZpjx6KLxDs93k2OcESHjl5J6n6OKKJqqoN -JEyFO5LGXpnmUJbn0-CaHHPRI1mHwEu4brY8wDZd9A0PD1KGXDoCHMfEk1lGblQdyOcVrXZ6uSBk -Z6zHDnwSCHO1mPYqtelJQehZoFuPSv9PIgKLxs_qJOtZFnXII5YO1mGXgiIBWBjUFDR5HG4ENS6y -J4MCF-JLMp-PVMAkOaCIQRRDpRnMm_fT1sc_P562Diu_pcdt-r55pMFQYGoGfjRmxQBKk0-SsdnP -mlZIiis9DfQEN0q3QQdNRYBJD7tmhUwhAPZdLgXqJA8sZf8UyFQhhpsky79NT343YL9smUlF
\ No newline at end of file diff --git a/aai-traversal/src/main/resources/aaf/org.onap.aai.p12 b/aai-traversal/src/main/resources/aaf/org.onap.aai.p12 Binary files differdeleted file mode 100644 index 023e2ea..0000000 --- a/aai-traversal/src/main/resources/aaf/org.onap.aai.p12 +++ /dev/null diff --git a/aai-traversal/src/main/resources/aaf/org.onap.aai.props b/aai-traversal/src/main/resources/aaf/org.onap.aai.props deleted file mode 100644 index f9a0789..0000000 --- a/aai-traversal/src/main/resources/aaf/org.onap.aai.props +++ /dev/null @@ -1,14 +0,0 @@ -############################################################ -# Properties Generated by AT&T Certificate Manager -# @copyright 2016, AT&T -############################################################ -cadi_x509_issuers=CN=intermediateCA_1, OU=OSAAF, O=ONAP, C=US -cadi_keyfile=aai-traversal/src/main/resources/aaf/org.onap.aai.keyfile -cadi_keystore=aai-traversal/src/main/resources/aaf/org.onap.aai.p12 -cadi_keystore_password=enc:383RDJRFA6yQz9AOxUxC1iIg3xTJXityw05MswnpnEtelRQy2D4r5INQjrea7GTV -#cadi_key_password=enc:<KEY PASSWORD (optional if the same as KEYSTORE PASSWORD)> -cadi_alias=aai@aai.onap.org -cadi_truststore=aai-traversal/src/main/resources/aaf/truststoreONAPall.jks -cadi_truststore_password=enc:s77wlnZFoQ08NhnU3OSeWO6uKgRwC6sAK-wTvVubNz2 -cadi_loglevel=DEBUG -cadi_bath_convert=aai-traversal/src/main/resources/aaf/bath_config.csv diff --git a/aai-traversal/src/main/resources/aaf/org.osaaf.location.props b/aai-traversal/src/main/resources/aaf/org.osaaf.location.props deleted file mode 100644 index 73a3a1e..0000000 --- a/aai-traversal/src/main/resources/aaf/org.osaaf.location.props +++ /dev/null @@ -1,26 +0,0 @@ -## -## org.osaaf.location.props -## -## Localized Machine Information -## -# Almeda California ? -cadi_latitude=37.78187 -cadi_longitude=-122.26147 - -# Locate URL (which AAF Env) -#aaf_locate_url=https://aaf-onap-beijing-test.osaaf.org -#aaf_locate_url=https://aaf-onap-test.osaaf.org - -aaf_locate_url=https://aaf-onap-test.osaaf.org:8095 - -# AAF URL -aaf_url=https://AAF_LOCATE_URL/AAF_NS.service:2.0 - -# AAF Environment Designation -aaf_env=DEV - -# OAuth2 Endpoints -aaf_oauth2_token_url=https://AAF_LOCATE_URL/AAF_NS.token:2.0/token -aaf_oauth2_introspect_url=https://AAF_LOCATE_URL/AAF_NS.introspect:2.0/introspect - - diff --git a/aai-traversal/src/main/resources/aaf/permissions.properties b/aai-traversal/src/main/resources/aaf/permissions.properties deleted file mode 100644 index d4956f5..0000000 --- a/aai-traversal/src/main/resources/aaf/permissions.properties +++ /dev/null @@ -1,2 +0,0 @@ -permission.type=org.onap.aai.traversal -permission.instance=*
\ No newline at end of file diff --git a/aai-traversal/src/main/resources/aaf/truststoreONAPall.jks b/aai-traversal/src/main/resources/aaf/truststoreONAPall.jks Binary files differdeleted file mode 100644 index 2da1dcc..0000000 --- a/aai-traversal/src/main/resources/aaf/truststoreONAPall.jks +++ /dev/null diff --git a/aai-traversal/src/main/resources/application-keycloak.properties b/aai-traversal/src/main/resources/application-keycloak.properties deleted file mode 100644 index 86adb59..0000000 --- a/aai-traversal/src/main/resources/application-keycloak.properties +++ /dev/null @@ -1,13 +0,0 @@ -spring.autoconfigure.exclude=\ - org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration,\ - org.springframework.boot.autoconfigure.orm.jpa.HibernateJpaAutoConfiguration - -multi.tenancy.enabled=true -keycloak.auth-server-url=http://localhost:8180/auth -keycloak.realm=aai-traversal -keycloak.resource=aai-traversal-app -keycloak.public-client=false -keycloak.principal-attribute=preferred_username - -keycloak.ssl-required=external -keycloak.bearer-only=true diff --git a/aai-traversal/src/main/resources/application.properties b/aai-traversal/src/main/resources/application.properties index 0416af4..0f37151 100644 --- a/aai-traversal/src/main/resources/application.properties +++ b/aai-traversal/src/main/resources/application.properties @@ -19,7 +19,6 @@ server.servlet.context-path=${schema.uri.base.path} spring.autoconfigure.exclude=\ org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration,\ org.springframework.boot.autoconfigure.orm.jpa.HibernateJpaAutoConfiguration,\ - org.keycloak.adapters.springboot.KeycloakAutoConfiguration,\ org.springframework.boot.autoconfigure.security.servlet.SecurityAutoConfiguration, \ org.springframework.boot.actuate.autoconfigure.security.servlet.ManagementWebSecurityAutoConfiguration @@ -38,29 +37,10 @@ server.local.startpath=aai-traversal/src/main/resources server.basic.auth.location=${server.local.startpath}/etc/auth/realm.properties server.port=8446 -server.ssl.enabled-protocols=TLSv1.1,TLSv1.2 -server.compression.excluded-user-agents= -# By default spring boot jetty will exclude the following ciphers -# We need to specifically add this to support tls v1.1 -server.ssl.ciphers=^.*_(MD5|SHA|SHA1)$ -server.ssl.client-auth=want -server.ssl.key-store-type=JKS # Start of Internal Specific Properties # Switch to one-way-ssl spring.profiles.active=production,one-way-ssl -# Switch to keycloak -#spring.profiles.active=production, keycloak -### -server.certs.location=${server.local.startpath}/etc/auth/ -server.keystore.name.pkcs12=aai_keystore -server.keystore.name=aai_keystore -server.truststore.name=aai_keystore -### -server.ssl.key-store=${server.certs.location}${server.keystore.name} -server.ssl.key-store-password=password(OBF:1vn21ugu1saj1v9i1v941sar1ugw1vo0) -server.ssl.trust-store=${server.certs.location}${server.truststore.name} -server.ssl.trust-store-password=password(OBF:1vn21ugu1saj1v9i1v941sar1ugw1vo0) schema.version.list=v10,v11,v12,v13,v14,v15,v16,v17,v18,v19,v20,v21,v22,v23,v24,v25,v26,v27,v28,v29,v30 # Specifies which component should the oxm be looking at @@ -112,16 +92,8 @@ schema.service.edges.endpoint=edgerules?version= schema.service.versions.endpoint=versions schema.service.custom.queries.endpoint=stored-queries -schema.service.ssl.key-store=${server.certs.location}${server.keystore.name.pkcs12} -schema.service.ssl.trust-store=${server.certs.location}${server.truststore.name} - -schema.service.ssl.key-store-password=password(OBF:1vn21ugu1saj1v9i1v941sar1ugw1vo0) -schema.service.ssl.trust-store-password=password(OBF:1vn21ugu1saj1v9i1v941sar1ugw1vo0) schema.service.versions.override=false -# Location of the cadi properties file should be specified here -aaf.cadi.file=${server.local.startpath}/cadi.properties - history.enabled=false; history.truncate.window.days=365 @@ -149,3 +121,7 @@ BOOTSTRAP_SERVERS=localhost:9092 JAAS_CONFIG="" aai.notifications.enabled=false aai.graph.properties.path=${server.local.startpath}/etc/appprops/janusgraph-realtime.properties + +aai.basic-auth.enabled=true +aai.basic-auth.users[0].username=AAI +aai.basic-auth.users[0].password=AAI diff --git a/aai-traversal/src/test/java/org/onap/aai/AAIGremlinQueryTest.java b/aai-traversal/src/test/java/org/onap/aai/AAIGremlinQueryTest.java index 0bac97e..57930f8 100644 --- a/aai-traversal/src/test/java/org/onap/aai/AAIGremlinQueryTest.java +++ b/aai-traversal/src/test/java/org/onap/aai/AAIGremlinQueryTest.java @@ -39,7 +39,6 @@ import org.junit.BeforeClass; import org.junit.ClassRule; import org.junit.Rule; import org.junit.Test; -import org.onap.aai.config.PropertyPasswordConfiguration; import org.onap.aai.dbmap.AAIGraph; import org.onap.aai.exceptions.AAIException; import org.onap.aai.serialization.queryformats.Format; @@ -51,7 +50,7 @@ import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import org.springframework.boot.autoconfigure.cassandra.CassandraAutoConfiguration; import org.springframework.boot.autoconfigure.data.cassandra.CassandraDataAutoConfiguration; import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.boot.web.server.LocalServerPort; +import org.springframework.boot.test.web.server.LocalServerPort; import org.springframework.context.annotation.Import; import org.springframework.http.HttpEntity; import org.springframework.http.HttpHeaders; @@ -82,7 +81,6 @@ import com.jayway.jsonpath.JsonPath; webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT, classes = TraversalApp.class) @TestPropertySource(locations = "classpath:application-test.properties") -@ContextConfiguration(initializers = PropertyPasswordConfiguration.class) @EnableAutoConfiguration(exclude={CassandraDataAutoConfiguration.class, CassandraAutoConfiguration.class}) // there is no running cassandra instance for the test @Import(TraversalTestConfiguration.class) public class AAIGremlinQueryTest { @@ -191,6 +189,7 @@ public class AAIGremlinQueryTest { headers.add("Real-Time", "true"); headers.add("X-FromAppId", "JUNIT"); headers.add("X-TransactionId", "JUNIT"); + headers.add("Authorization", "Basic QUFJOkFBSQ=="); Map<String, String> gremlinQueryMap = new HashMap<>(); gremlinQueryMap.put("gremlin-query", "g.V().has('hostname', 'test-pserver').count()"); diff --git a/aai-traversal/src/test/java/org/onap/aai/QueryParameterTest.java b/aai-traversal/src/test/java/org/onap/aai/QueryParameterTest.java index 8526ace..f030f7a 100644 --- a/aai-traversal/src/test/java/org/onap/aai/QueryParameterTest.java +++ b/aai-traversal/src/test/java/org/onap/aai/QueryParameterTest.java @@ -25,12 +25,9 @@ import static org.junit.Assert.assertThat; import java.util.*; -import javax.ws.rs.core.Response; - import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; -import org.onap.aai.config.PropertyPasswordConfiguration; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -51,7 +48,6 @@ import org.springframework.web.client.RestTemplate; webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT, classes = TraversalApp.class) @TestPropertySource(locations = "classpath:application-test.properties") -@ContextConfiguration(initializers = PropertyPasswordConfiguration.class) @EnableAutoConfiguration(exclude={CassandraDataAutoConfiguration.class, CassandraAutoConfiguration.class}) // there is no running cassandra instance for the test @Import(TraversalTestConfiguration.class) public class QueryParameterTest { diff --git a/aai-traversal/src/test/java/org/onap/aai/SubgraphPruneTest.java b/aai-traversal/src/test/java/org/onap/aai/SubgraphPruneTest.java index d6d385f..4955bad 100644 --- a/aai-traversal/src/test/java/org/onap/aai/SubgraphPruneTest.java +++ b/aai-traversal/src/test/java/org/onap/aai/SubgraphPruneTest.java @@ -29,7 +29,6 @@ import javax.ws.rs.core.Response; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; -import org.onap.aai.config.PropertyPasswordConfiguration; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import org.springframework.boot.autoconfigure.cassandra.CassandraAutoConfiguration; @@ -48,7 +47,6 @@ import org.springframework.web.client.RestTemplate; webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT, classes = TraversalApp.class) @TestPropertySource(locations = "classpath:application-test.properties") -@ContextConfiguration(initializers = PropertyPasswordConfiguration.class) @EnableAutoConfiguration(exclude={CassandraDataAutoConfiguration.class, CassandraAutoConfiguration.class}) // there is no running cassandra instance for the test @Import(TraversalTestConfiguration.class) public class SubgraphPruneTest { diff --git a/aai-traversal/src/test/java/org/onap/aai/TraversalTestConfiguration.java b/aai-traversal/src/test/java/org/onap/aai/TraversalTestConfiguration.java index 8e2e823..5bc2b88 100644 --- a/aai-traversal/src/test/java/org/onap/aai/TraversalTestConfiguration.java +++ b/aai-traversal/src/test/java/org/onap/aai/TraversalTestConfiguration.java @@ -23,7 +23,6 @@ import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; -import java.security.KeyStore; import javax.net.ssl.SSLContext; @@ -67,25 +66,12 @@ public class TraversalTestConfiguration { RestTemplate restTemplate = null; if (env.acceptsProfiles(Profiles.of("one-way-ssl", "two-way-ssl"))) { - char[] trustStorePassword = - env.getProperty("server.ssl.trust-store-password").toCharArray(); - char[] keyStorePassword = - env.getProperty("server.ssl.key-store-password").toCharArray(); - - String keyStore = env.getProperty("server.ssl.key-store"); - String trustStore = env.getProperty("server.ssl.trust-store"); - SSLContextBuilder sslContextBuilder = SSLContextBuilder.create(); - - if (env.acceptsProfiles(Profiles.of("two-way-ssl"))) { - sslContextBuilder = sslContextBuilder - .loadKeyMaterial(loadPfx(keyStore, keyStorePassword), keyStorePassword); - } - - SSLContext sslContext = sslContextBuilder - .loadTrustMaterial(ResourceUtils.getFile(trustStore), trustStorePassword).build(); + SSLContext sslContext = SSLContextBuilder.create().build(); - HttpClient client = HttpClients.custom().setSSLContext(sslContext) - .setSSLHostnameVerifier((s, sslSession) -> true).build(); + HttpClient client = HttpClients.custom() + .setSSLContext(sslContext) + .setSSLHostnameVerifier((s, sslSession) -> true) + .build(); restTemplate = builder .requestFactory(() -> new HttpComponentsClientHttpRequestFactory(client)).build(); @@ -121,13 +107,4 @@ public class TraversalTestConfiguration { return restTemplate; } - - private KeyStore loadPfx(String file, char[] password) throws Exception { - KeyStore keyStore = KeyStore.getInstance("PKCS12"); - File key = ResourceUtils.getFile(file); - try (InputStream in = new FileInputStream(key)) { - keyStore.load(in, password); - } - return keyStore; - } } diff --git a/aai-traversal/src/test/java/org/onap/aai/dbgraphmap/SearchGraphEdgeRuleTest.java b/aai-traversal/src/test/java/org/onap/aai/dbgraphmap/SearchGraphEdgeRuleTest.java index 30323d2..9bb98e7 100644 --- a/aai-traversal/src/test/java/org/onap/aai/dbgraphmap/SearchGraphEdgeRuleTest.java +++ b/aai-traversal/src/test/java/org/onap/aai/dbgraphmap/SearchGraphEdgeRuleTest.java @@ -20,15 +20,12 @@ package org.onap.aai.dbgraphmap; import static org.junit.Assert.assertEquals; - -import org.junit.Ignore; import org.junit.Rule; import org.junit.Test; import org.junit.rules.ExpectedException; import org.onap.aai.AAISetup; import org.onap.aai.edges.exceptions.EdgeRuleNotFoundException; import org.onap.aai.exceptions.AAIException; -import org.springframework.beans.factory.annotation.Autowired; public class SearchGraphEdgeRuleTest extends AAISetup { @Rule diff --git a/aai-traversal/src/test/java/org/onap/aai/dbgraphmap/SearchGraphTest.java b/aai-traversal/src/test/java/org/onap/aai/dbgraphmap/SearchGraphTest.java index 68e30aa..cdafcb5 100644 --- a/aai-traversal/src/test/java/org/onap/aai/dbgraphmap/SearchGraphTest.java +++ b/aai-traversal/src/test/java/org/onap/aai/dbgraphmap/SearchGraphTest.java @@ -19,27 +19,6 @@ */ package org.onap.aai.dbgraphmap; -import static org.mockito.ArgumentMatchers.anyObject; -import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.when; - -import java.net.URI; -import java.util.ArrayList; -import java.util.Collections; -import java.util.HashSet; -import java.util.List; -import java.util.Set; -import java.util.UUID; -import java.util.stream.Stream; - -import javax.servlet.http.HttpServletRequest; -import javax.ws.rs.core.HttpHeaders; -import javax.ws.rs.core.MediaType; -import javax.ws.rs.core.MultivaluedHashMap; -import javax.ws.rs.core.MultivaluedMap; -import javax.ws.rs.core.Response; -import javax.ws.rs.core.UriInfo; - import org.apache.tinkerpop.gremlin.structure.Vertex; import org.eclipse.persistence.dynamic.DynamicEntity; import org.janusgraph.graphdb.types.system.EmptyVertex; @@ -62,6 +41,15 @@ import org.onap.aai.serialization.queryformats.utils.UrlBuilder; import org.onap.aai.setup.SchemaVersion; import org.onap.aai.util.GenericQueryBuilder; import org.onap.aai.util.NodesQueryBuilder; +import javax.servlet.http.HttpServletRequest; +import javax.ws.rs.core.*; +import java.net.URI; +import java.util.*; +import java.util.stream.Stream; +import static org.junit.jupiter.api.Assertions.assertThrows; +import static org.mockito.ArgumentMatchers.anyObject; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; public class SearchGraphTest extends AAISetup { @@ -173,7 +161,9 @@ public class SearchGraphTest extends AAISetup { new GenericQueryBuilder().setHeaders(httpHeaders).setStartNodeType("service-instance") .setStartNodeKeyParams(keys).setIncludeNodeTypes(includeStrings).setDepth(1) .setDbEngine(dbEngine).setLoader(loader).setUrlBuilder(urlBuilder)); - System.out.println(response); + Assert.assertEquals(200,response.getStatus()); + Object entity = response.getEntity(); + Assert.assertNotNull(entity); } @Test(expected = AAIException.class) @@ -225,6 +215,13 @@ public class SearchGraphTest extends AAISetup { .setStartNodeType("").setStartNodeKeyParams(keys).setIncludeNodeTypes(null) .setDepth(1).setDbEngine(dbEngine).setLoader(loader).setUrlBuilder(urlBuilder)); System.out.println(response); + + String responseJson = response.toString(); + + // Assertions + Assert.assertNotNull(responseJson); + Assert.assertTrue(responseJson.contains("result-data")); + Assert.assertTrue(responseJson.contains("cloud-region")); } @Test @@ -244,6 +241,13 @@ public class SearchGraphTest extends AAISetup { Introspector response = searchGraph.createSearchResults(loader, urlBuilder, keys); System.out.println(response); + + String responseJson = response.toString(); + + Assert.assertNotNull(responseJson); + Assert.assertTrue(responseJson.contains("result-data")); + Assert.assertTrue(responseJson.contains("cloud-region")); + } @Test(expected = AAIException.class) @@ -289,6 +293,10 @@ public class SearchGraphTest extends AAISetup { .setEdgeFilterParams(edgeFilter).setFilterParams(filter).setDbEngine(dbEngine) .setLoader(loader).setUrlBuilder(urlBuilder)); Assert.assertNotNull(response); + Assert.assertEquals(200,response.getStatus()); + Assert.assertNotNull(response); + Object entity = response.getEntity(); + Assert.assertNotNull(entity); } @Test @@ -303,6 +311,23 @@ public class SearchGraphTest extends AAISetup { .setEdgeFilterParams(edgeFilter).setFilterParams(filter).setDbEngine(dbEngine) .setLoader(loader).setUrlBuilder(urlBuilder)); Assert.assertNotNull(response); + Object entity = response.getEntity(); + Assert.assertNotNull(entity); + } + + @Test + public void runNodesQueryTargetNodeTypeNullTest() throws AAIException { + UrlBuilder urlBuilder = mock(UrlBuilder.class); + List<String> filter = new ArrayList<String>(); + filter.add("model:EQUALS:DOES-NOT-EXIST:AAI"); + List<String> edgeFilter = new ArrayList<String>(); + edgeFilter.add("model:EXISTS:DOES-NOT-EXIST:AAI"); + + assertThrows(AAIException.class, + () -> searchGraph.runNodesQuery( + new NodesQueryBuilder().setHeaders(httpHeaders).setTargetNodeType(null) + .setEdgeFilterParams(edgeFilter).setFilterParams(filter).setDbEngine(dbEngine) + .setLoader(loader).setUrlBuilder(urlBuilder))); } @Test @@ -311,9 +336,12 @@ public class SearchGraphTest extends AAISetup { List<String> filter = new ArrayList<String>(); filter.add("model:DOES-NOT-EQUAL:DOES-NOT-EXIST"); List<String> edgeFilter = new ArrayList<>(); - searchGraph.runNodesQuery(new NodesQueryBuilder().setHeaders(httpHeaders) - .setTargetNodeType("model-ver").setEdgeFilterParams(edgeFilter).setFilterParams(filter) - .setDbEngine(dbEngine).setLoader(loader).setUrlBuilder(urlBuilder)); + Response response = searchGraph.runNodesQuery(new NodesQueryBuilder().setHeaders(httpHeaders) + .setTargetNodeType("model-ver").setEdgeFilterParams(edgeFilter).setFilterParams(filter) + .setDbEngine(dbEngine).setLoader(loader).setUrlBuilder(urlBuilder)); + Assert.assertNotNull(response); + Object entity = response.getEntity(); + Assert.assertNotNull(entity); } @Test @@ -322,9 +350,29 @@ public class SearchGraphTest extends AAISetup { List<String> filter = new ArrayList<>(); filter.add("model:DOES-NOT-EQUAL:DOES-NOT-EXIST:AAI"); List<String> edgeFilter = new ArrayList<>(); - searchGraph.runNodesQuery(new NodesQueryBuilder().setHeaders(httpHeaders) - .setTargetNodeType("model-ver").setEdgeFilterParams(edgeFilter).setFilterParams(filter) - .setDbEngine(dbEngine).setLoader(loader).setUrlBuilder(urlBuilder)); + Response response = searchGraph.runNodesQuery(new NodesQueryBuilder().setHeaders(httpHeaders) + .setTargetNodeType("model-ver").setEdgeFilterParams(edgeFilter).setFilterParams(filter) + .setDbEngine(dbEngine).setLoader(loader).setUrlBuilder(urlBuilder)); + Assert.assertNotNull(response); + Assert.assertEquals(200,response.getStatus()); + Object entity = response.getEntity(); + Assert.assertNotNull(entity); + + } + + @Test + public void runNodesQueryTestNoFilterParam() throws AAIException { + UrlBuilder urlBuilder = mock(UrlBuilder.class); + List<String> filter = new ArrayList<>(); + //filter.add("model:DOES-NOT-EQUAL:DOES-NOT-EXIST:AAI"); + List<String> edgeFilter = new ArrayList<>(); + Response response = searchGraph.runNodesQuery(new NodesQueryBuilder().setHeaders(httpHeaders) + .setTargetNodeType("model-ver").setEdgeFilterParams(edgeFilter).setFilterParams(filter) + .setDbEngine(dbEngine).setLoader(loader).setUrlBuilder(urlBuilder)); + Assert.assertNotNull(response); + Assert.assertEquals(200,response.getStatus()); + Object entity = response.getEntity(); + Assert.assertNotNull(entity); } @Test @@ -333,9 +381,13 @@ public class SearchGraphTest extends AAISetup { List<String> filter = new ArrayList<>(); filter.add("model:EXISTS:DOES-NOT-EXIST:AAI"); List<String> edgeFilter = new ArrayList<>(); - searchGraph.runNodesQuery(new NodesQueryBuilder().setHeaders(httpHeaders) - .setTargetNodeType("model-ver").setEdgeFilterParams(edgeFilter).setFilterParams(filter) - .setDbEngine(dbEngine).setLoader(loader).setUrlBuilder(urlBuilder)); + Response response = searchGraph.runNodesQuery(new NodesQueryBuilder().setHeaders(httpHeaders) + .setTargetNodeType("model-ver").setEdgeFilterParams(edgeFilter).setFilterParams(filter) + .setDbEngine(dbEngine).setLoader(loader).setUrlBuilder(urlBuilder)); + Assert.assertNotNull(response); + Assert.assertEquals(200,response.getStatus()); + Object entity = response.getEntity(); + Assert.assertNotNull(entity); } @Test(expected = AAIException.class) @@ -344,8 +396,12 @@ public class SearchGraphTest extends AAISetup { List<String> filter = new ArrayList<>(); filter.add("model:DOES_NOT_EXIST:DOES-NOT-EXIST:AAI"); List<String> edgeFilter = new ArrayList<>(); - searchGraph.runNodesQuery(new NodesQueryBuilder().setHeaders(httpHeaders) - .setTargetNodeType("model-ver").setEdgeFilterParams(edgeFilter).setFilterParams(filter) - .setDbEngine(dbEngine).setLoader(loader).setUrlBuilder(urlBuilder)); + Response response = searchGraph.runNodesQuery(new NodesQueryBuilder().setHeaders(httpHeaders) + .setTargetNodeType("model-ver").setEdgeFilterParams(edgeFilter).setFilterParams(filter) + .setDbEngine(dbEngine).setLoader(loader).setUrlBuilder(urlBuilder)); + Assert.assertNotNull(response); + Assert.assertEquals(200,response.getStatus()); + Object entity = response.getEntity(); + Assert.assertNotNull(entity); } } diff --git a/aai-traversal/src/test/java/org/onap/aai/interceptors/AAIContainerFilterTest.java b/aai-traversal/src/test/java/org/onap/aai/interceptors/AAIContainerFilterTest.java new file mode 100644 index 0000000..1bb90b2 --- /dev/null +++ b/aai-traversal/src/test/java/org/onap/aai/interceptors/AAIContainerFilterTest.java @@ -0,0 +1,59 @@ +/** + * ============LICENSE_START======================================================= + * org.onap.aai + * ================================================================================ + * Copyright © 2025 Deutsche Telekom. All rights reserved. + * ================================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============LICENSE_END========================================================= + */ +package org.onap.aai.interceptors; + +import org.junit.jupiter.api.Test; +import static org.junit.jupiter.api.Assertions.*; +import java.util.UUID; + +public class AAIContainerFilterTest { + + private class TestAAIContainerFilter extends AAIContainerFilter { + // This subclass allows us to test the protected methods + } + + @Test + public void testGenDate() { + TestAAIContainerFilter filter = new TestAAIContainerFilter(); + + // Get the generated date-time string + String generatedDate = filter.genDate(); + + assertNotNull(generatedDate); + assertTrue(generatedDate.matches("\\d{6}-\\d{2}:\\d{2}:\\d{2}:\\d{3}")); + } + + @Test + public void testIsValidUUID_ValidUUID() { + TestAAIContainerFilter filter = new TestAAIContainerFilter(); + // Test with a valid UUID + String validUUID = UUID.randomUUID().toString(); + assertTrue(filter.isValidUUID(validUUID)); + } + + @Test + public void testIsValidUUID_InvalidUUID() { + TestAAIContainerFilter filter = new TestAAIContainerFilter(); + // Test with an invalid UUID (not a valid UUID string) + String invalidUUID = "invalid-uuid-string"; + assertFalse(filter.isValidUUID(invalidUUID)); + } + +} diff --git a/aai-traversal/src/test/java/org/onap/aai/interceptors/post/InvalidResponseStatusTest.java b/aai-traversal/src/test/java/org/onap/aai/interceptors/post/InvalidResponseStatusTest.java new file mode 100644 index 0000000..1564aab --- /dev/null +++ b/aai-traversal/src/test/java/org/onap/aai/interceptors/post/InvalidResponseStatusTest.java @@ -0,0 +1,101 @@ +/** + * ============LICENSE_START======================================================= + * org.onap.aai + * ================================================================================ + * Copyright © 2025 Deutsche Telekom. All rights reserved. + * ================================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============LICENSE_END========================================================= + */ +package org.onap.aai.interceptors.post; + +import org.junit.Before; +import org.junit.Test; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.MockitoAnnotations; +import javax.ws.rs.container.ContainerRequestContext; +import javax.ws.rs.container.ContainerResponseContext; +import java.io.IOException; +import static org.junit.Assert.*; +import static org.mockito.Mockito.*; + +public class InvalidResponseStatusTest { + + @InjectMocks + private InvalidResponseStatus invalidResponseStatus; + + @Mock + private ContainerRequestContext mockRequestContext; + + @Mock + private ContainerResponseContext mockResponseContext; + + private final int[] status = {405}; + + @Before + public void setUp() { + MockitoAnnotations.openMocks(this); + // Mock getStatus to return the current value in the status array + when(mockResponseContext.getStatus()).thenAnswer(invocation -> status[0]); + + // Use doAnswer to update the status value when setStatus is called + doAnswer(invocation -> { + Object[] args = invocation.getArguments(); + if (args.length > 0 && args[0] instanceof Integer) { + status[0] = (Integer) args[0]; // Update the mock's status + } + return null; + }).when(mockResponseContext).setStatus(anyInt()); + } + + @Test + public void testFilter_statusIs405_shouldChangeTo400() throws IOException { + invalidResponseStatus.filter(mockRequestContext, mockResponseContext); + + verify(mockResponseContext).setStatus(400); + + // Check the final status of the response context + assertEquals(400, mockResponseContext.getStatus()); // Ensure status is now 400 + } + + @Test + public void testFilter_ResponseStatus405_ShouldHandleContentType() throws IOException { + // Setup: Simulate a 405 status and set Content-Type header to "application/json" + String contentType = "application/json"; + when(mockResponseContext.getStatus()).thenReturn(405); + when(mockResponseContext.getHeaderString("Content-Type")).thenReturn(contentType); + + invalidResponseStatus.filter(mockRequestContext, mockResponseContext); + + verify(mockResponseContext).setStatus(400); + + verify(mockResponseContext).setEntity(anyString()); + + assertEquals("application/json",mockResponseContext.getHeaderString("Content-Type")); + } + + @Test + public void testFilter_ResponseStatusNot405_ShouldNotChangeStatus() throws IOException { + when(mockResponseContext.getStatus()).thenReturn(200); + + invalidResponseStatus.filter(mockRequestContext, mockResponseContext); + + verify(mockResponseContext, never()).setStatus(400); + + verify(mockResponseContext, never()).setEntity(anyString()); + + assertTrue("Response status should remain 200", mockResponseContext.getStatus() == 200); + assertNull("Entity should not be set", mockResponseContext.getEntity()); + } +} diff --git a/aai-traversal/src/test/java/org/onap/aai/interceptors/post/ResponseHeaderManipulationTest.java b/aai-traversal/src/test/java/org/onap/aai/interceptors/post/ResponseHeaderManipulationTest.java new file mode 100644 index 0000000..3360826 --- /dev/null +++ b/aai-traversal/src/test/java/org/onap/aai/interceptors/post/ResponseHeaderManipulationTest.java @@ -0,0 +1,101 @@ +/** + * ============LICENSE_START======================================================= + * org.onap.aai + * ================================================================================ + * Copyright © 2025 Deutsche Telekom. All rights reserved. + * ================================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============LICENSE_END========================================================= + */ +package org.onap.aai.interceptors.post; + +import org.junit.Before; +import org.junit.Test; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.MockitoAnnotations; +import javax.ws.rs.container.ContainerRequestContext; +import javax.ws.rs.container.ContainerResponseContext; +import javax.ws.rs.core.MediaType; +import javax.ws.rs.core.MultivaluedMap; +import java.io.IOException; +import java.util.Collections; +import static org.junit.Assert.*; +import static org.mockito.Mockito.when; + +public class ResponseHeaderManipulationTest { + + @InjectMocks + private ResponseHeaderManipulation responseHeaderManipulation; + + @Mock + private ContainerRequestContext mockRequestContext; + + @Mock + private ContainerResponseContext mockResponseContext; + + @Mock + private MultivaluedMap<String, Object> mockResponseHeaders; + + @Before + public void setUp() { + MockitoAnnotations.openMocks(this); + when(mockResponseContext.getHeaders()).thenReturn(mockResponseHeaders); + } + + @Test + public void testFilterWithNoContentType() throws IOException { + // Arrange: Simulate Accept header with "*/*" and no Content-Type set + when(mockRequestContext.getHeaderString("Accept")).thenReturn("*/*"); + + responseHeaderManipulation.filter(mockRequestContext, mockResponseContext); + + assertFalse(mockResponseHeaders.containsKey("Content-Type")); + } + + @Test + public void testFilterWithExistingContentType() throws IOException { + // Arrange: Simulate existing Content-Type header and no Accept header + String existingContentType = MediaType.APPLICATION_JSON; + when(mockRequestContext.getHeaderString("Accept")).thenReturn(null); + when(mockResponseContext.getHeaderString("Content-Type")).thenReturn(existingContentType); + + responseHeaderManipulation.filter(mockRequestContext, mockResponseContext); + + assertEquals(existingContentType, mockResponseContext.getHeaderString("Content-Type")); + } + + @Test + public void testFilterWithNullAcceptHeader() throws IOException { + // Arrange: Simulate null Accept header and no Content-Type set + when(mockRequestContext.getHeaderString("Accept")).thenReturn(null); + when(mockResponseContext.getHeaderString("Content-Type")).thenReturn(null); + + responseHeaderManipulation.filter(mockRequestContext, mockResponseContext); + + assertFalse(mockResponseHeaders.containsKey("Content-Type")); + assertNotEquals(Collections.singletonList(MediaType.APPLICATION_XML), mockResponseHeaders.get("Content-Type")); + } + + @Test + public void testFilterWithEmptyAcceptHeader() throws IOException { + // Arrange: Simulate empty Accept header and no Content-Type set + when(mockRequestContext.getHeaderString("Accept")).thenReturn(""); + when(mockResponseContext.getHeaderString("Content-Type")).thenReturn(null); + + responseHeaderManipulation.filter(mockRequestContext, mockResponseContext); + + assertFalse(mockResponseHeaders.containsKey("Content-Type")); + assertNotEquals(Collections.singletonList(MediaType.APPLICATION_XML), mockResponseHeaders.get("Content-Type")); + } +} diff --git a/aai-traversal/src/test/java/org/onap/aai/interceptors/pre/HeaderValidationTest.java b/aai-traversal/src/test/java/org/onap/aai/interceptors/pre/HeaderValidationTest.java new file mode 100644 index 0000000..068cf09 --- /dev/null +++ b/aai-traversal/src/test/java/org/onap/aai/interceptors/pre/HeaderValidationTest.java @@ -0,0 +1,210 @@ +/** + * ============LICENSE_START======================================================= + * org.onap.aai + * ================================================================================ + * Copyright © 2025 Deutsche Telekom. All rights reserved. + * ================================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============LICENSE_END========================================================= + */ +package org.onap.aai.interceptors.pre; + +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.MockitoAnnotations; +import org.onap.aai.TraversalApp; +import org.onap.aai.interceptors.AAIHeaderProperties; +import org.onap.logging.filter.base.Constants; +import org.onap.logging.ref.slf4j.ONAPLogConstants; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.test.context.TestPropertySource; +import javax.ws.rs.container.ContainerRequestContext; +import javax.ws.rs.core.MultivaluedHashMap; +import javax.ws.rs.core.MultivaluedMap; +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; +import static org.junit.Assert.assertTrue; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNull; +import static org.mockito.Mockito.*; + +@SpringBootTest( + webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT, + classes = TraversalApp.class) +@TestPropertySource(locations = "classpath:application-test.properties") +public class HeaderValidationTest { + + @InjectMocks + private HeaderValidation headerValidation; + + @Mock + private ContainerRequestContext requestContext; + + private MultivaluedMap<String, String> headers; + + @BeforeEach + public void setUp() { + // Initialize mocks + MockitoAnnotations.openMocks(this); + headerValidation = new HeaderValidation(); + headers = new MultivaluedHashMap<>(); + when(requestContext.getHeaders()).thenReturn(headers); + } + + @Test + public void testGetPartnerName_withEmptyPartnerName() { + when(requestContext.getHeaderString("X-ONAP-PartnerName")).thenReturn(""); + when(requestContext.getHeaderString("X-FromAppId")).thenReturn("testAppId"); + + String partnerName = headerValidation.getPartnerName(requestContext); + + // Assert that the app ID is used as the partner name + assertEquals("testAppId", partnerName); + } + + @Test + public void testGetPartnerName_withNullPartnerNameAndFromAppId() { + // Mock behavior of getHeaderString to return null for both PARTNER_NAME and FROM_APP_ID + when(requestContext.getHeaderString("X-ONAP-PartnerName")).thenReturn(null); + when(requestContext.getHeaderString("X-FromAppId")).thenReturn("testAppId"); + + String partnerName = headerValidation.getPartnerName(requestContext); + + // Assert that the partner name is taken from the FROM_APP_ID + assertEquals("testAppId", partnerName); + } + + @Test + public void testGetPartnerName_withMissingPartnerNameAndFromAppId() { + // Mock behavior of getHeaderString to return null for both PARTNER_NAME and FROM_APP_ID + when(requestContext.getHeaderString("X-ONAP-PartnerName")).thenReturn(null); + when(requestContext.getHeaderString("FROM_APP_ID")).thenReturn(null); + + String partnerName = headerValidation.getPartnerName(requestContext); + + // Assert that the partner name is null when both headers are missing + assertNull(partnerName); + } + + @Test + public void testGetRequestId_withValidRequestId() { + // Mock behavior of getHeaderString to return a valid request ID + when(requestContext.getHeaderString("X-ONAP-RequestID")).thenReturn("testRequestId"); + String requestId = headerValidation.getRequestId(requestContext); + + // Assert the expected outcome + assertEquals("testRequestId", requestId); + } + + @Test + public void testGetRequestId_withNullRequestId() { + // Mock behavior of getHeaderString to return null for X-ONAP-RequestId and a valid TRANSACTION_ID + when(requestContext.getHeaderString("X-ONAP-RequestId")).thenReturn(null); + when(requestContext.getHeaderString("TRANSACTION_ID")).thenReturn("testTransactionId"); + + // Call the method to test + String requestId = headerValidation.getRequestId(requestContext); + + // Assert that the transaction ID is used as the request ID + assertEquals(null, requestId); + } + + @Test + public void testFilter_withMissingPartnerName() throws IOException { + // Mock behavior for missing PartnerName header + when(requestContext.getHeaderString("X-ONAP-PartnerName")).thenReturn(""); + when(requestContext.getHeaderString("FROM_APP_ID")).thenReturn("testAppId"); + when(requestContext.getHeaderString("X-ONAP-RequestId")).thenReturn("testRequestId"); + + // Call the method to test + headerValidation.filter(requestContext); + + // Verify that the method calls abortWith due to the missing partner name + verify(requestContext).abortWith(argThat(response -> response.getStatus() == 400)); + } + + @Test + void testGetRequestId_ClearsExistingHeaders() { + // Arrange + String expectedRequestId = "test-request-id"; + headers.put(ONAPLogConstants.Headers.REQUEST_ID, new ArrayList<>()); + headers.put(Constants.HttpHeaders.TRANSACTION_ID, new ArrayList<>()); + headers.put(Constants.HttpHeaders.HEADER_REQUEST_ID, new ArrayList<>()); + headers.put(Constants.HttpHeaders.ECOMP_REQUEST_ID, new ArrayList<>()); + + when(requestContext.getHeaderString(ONAPLogConstants.Headers.REQUEST_ID)) + .thenReturn(expectedRequestId); + + // Act + String actualRequestId = headerValidation.getRequestId(requestContext); + + // Assert + assertEquals(expectedRequestId, actualRequestId); + verify(requestContext, atLeastOnce()).getHeaders(); + assertTrue(headers.get(ONAPLogConstants.Headers.REQUEST_ID).isEmpty()); + assertTrue(headers.get(Constants.HttpHeaders.TRANSACTION_ID).contains(expectedRequestId)); + assertTrue(headers.get(Constants.HttpHeaders.HEADER_REQUEST_ID).isEmpty()); + assertTrue(headers.get(Constants.HttpHeaders.ECOMP_REQUEST_ID).isEmpty()); + } + + @Test + void testGetRequestId_WhenEcompRequestIdExists() { + String expectedRequestId = "ecomp-123"; + when(requestContext.getHeaderString(ONAPLogConstants.Headers.REQUEST_ID)) + .thenReturn(null); + when(requestContext.getHeaderString(Constants.HttpHeaders.HEADER_REQUEST_ID)) + .thenReturn(null); + when(requestContext.getHeaderString(Constants.HttpHeaders.TRANSACTION_ID)) + .thenReturn(null); + when(requestContext.getHeaderString(Constants.HttpHeaders.ECOMP_REQUEST_ID)) + .thenReturn(expectedRequestId); + String result = headerValidation.getRequestId(requestContext); + assertEquals(expectedRequestId, result); + } + + @Test + void whenPartnerNameHasValidComponents_shouldReturnFirstComponent() { + // Given + when(requestContext.getHeaderString(ONAPLogConstants.Headers.PARTNER_NAME)).thenReturn("TEST.COMPONENT"); + String result = headerValidation.getPartnerName(requestContext); + assertEquals("TEST.COMPONENT", result); + } + + @Test + void whenPartnerNameStartsWithAAI_shouldUseFromAppId() { + when(requestContext.getHeaderString(ONAPLogConstants.Headers.PARTNER_NAME)).thenReturn("AAI.COMPONENT"); + when(requestContext.getHeaderString(AAIHeaderProperties.FROM_APP_ID)).thenReturn("TEST-APP"); + String result = headerValidation.getPartnerName(requestContext); + assertEquals("AAI.COMPONENT", result); + } + + @Test + void shouldClearAndUpdateHeaders() { + // Given + List<String> oldValues = new ArrayList<>(); + oldValues.add("OLD-VALUE"); + headers.put(ONAPLogConstants.Headers.PARTNER_NAME, oldValues); + headers.put(AAIHeaderProperties.FROM_APP_ID, oldValues); + + when(requestContext.getHeaderString(ONAPLogConstants.Headers.PARTNER_NAME)).thenReturn("NEW-SOT"); + when(requestContext.getHeaderString(AAIHeaderProperties.FROM_APP_ID)).thenReturn("TEST-APP"); + String result = headerValidation.getPartnerName(requestContext); + + assertEquals("NEW-SOT", result); + assertEquals("NEW-SOT", headers.getFirst(AAIHeaderProperties.FROM_APP_ID)); + } + +} diff --git a/aai-traversal/src/test/java/org/onap/aai/interceptors/pre/HttpHeaderInterceptorTest.java b/aai-traversal/src/test/java/org/onap/aai/interceptors/pre/HttpHeaderInterceptorTest.java new file mode 100644 index 0000000..e7a3923 --- /dev/null +++ b/aai-traversal/src/test/java/org/onap/aai/interceptors/pre/HttpHeaderInterceptorTest.java @@ -0,0 +1,67 @@ +/** + * ============LICENSE_START======================================================= + * org.onap.aai + * ================================================================================ + * Copyright © 2025 Deutsche Telekom. All rights reserved. + * ================================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============LICENSE_END========================================================= + */ +package org.onap.aai.interceptors.pre; + +import org.junit.jupiter.api.Test; +import org.onap.aai.interceptors.AAIHeaderProperties; +import javax.ws.rs.container.ContainerRequestContext; +import static org.mockito.Mockito.*; + +class HttpHeaderInterceptorTest { + + @Test + void testOverridePostToPatch() throws Exception { + ContainerRequestContext mockRequestContext = mock(ContainerRequestContext.class); + when(mockRequestContext.getMethod()).thenReturn("POST"); + when(mockRequestContext.getHeaderString(AAIHeaderProperties.HTTP_METHOD_OVERRIDE)).thenReturn("PATCH"); + + HttpHeaderInterceptor interceptor = new HttpHeaderInterceptor(); + + interceptor.filter(mockRequestContext); + + verify(mockRequestContext).setMethod(HttpHeaderInterceptor.patchMethod); + } + + @Test + void testNoOverrideHeader() throws Exception { + ContainerRequestContext mockRequestContext = mock(ContainerRequestContext.class); + when(mockRequestContext.getMethod()).thenReturn("POST"); + when(mockRequestContext.getHeaderString(AAIHeaderProperties.HTTP_METHOD_OVERRIDE)).thenReturn(null); + + HttpHeaderInterceptor interceptor = new HttpHeaderInterceptor(); + + interceptor.filter(mockRequestContext); + + verify(mockRequestContext, never()).setMethod(anyString()); + } + + @Test + void testNonPostMethodNoChange() throws Exception { + ContainerRequestContext mockRequestContext = mock(ContainerRequestContext.class); + when(mockRequestContext.getMethod()).thenReturn("GET"); + when(mockRequestContext.getHeaderString(AAIHeaderProperties.HTTP_METHOD_OVERRIDE)).thenReturn("PATCH"); + + HttpHeaderInterceptor interceptor = new HttpHeaderInterceptor(); + + interceptor.filter(mockRequestContext); + + verify(mockRequestContext, never()).setMethod(anyString()); + } +} diff --git a/aai-traversal/src/test/java/org/onap/aai/interceptors/pre/RequestModificationTest.java b/aai-traversal/src/test/java/org/onap/aai/interceptors/pre/RequestModificationTest.java new file mode 100644 index 0000000..2701822 --- /dev/null +++ b/aai-traversal/src/test/java/org/onap/aai/interceptors/pre/RequestModificationTest.java @@ -0,0 +1,119 @@ +/** + * ============LICENSE_START======================================================= + * org.onap.aai + * ================================================================================ + * Copyright © 2025 Deutsche Telekom. All rights reserved. + * ================================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============LICENSE_END========================================================= + */ + +package org.onap.aai.interceptors.pre; + +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.eq; +import static org.mockito.Mockito.never; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; +import static org.junit.jupiter.api.Assertions.*; +import java.io.IOException; +import java.util.List; +import java.util.Map; +import java.util.Set; +import javax.ws.rs.container.ContainerRequestContext; +import javax.ws.rs.core.MultivaluedMap; +import javax.ws.rs.core.UriBuilder; +import javax.ws.rs.core.UriInfo; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.MockitoAnnotations; + +public class RequestModificationTest { + + @InjectMocks + private RequestModification requestModification; + + @Mock + private ContainerRequestContext mockRequestContext; + + @Mock + private UriInfo mockUriInfo; + + @Mock + private UriBuilder mockUriBuilder; + + @Mock + private MultivaluedMap<String, String> mockQueryParams; + + @BeforeEach + void setUp() { + MockitoAnnotations.openMocks(this); + when(mockRequestContext.getUriInfo()).thenReturn(mockUriInfo); + when(mockUriInfo.getRequestUriBuilder()).thenReturn(mockUriBuilder); + when(mockUriInfo.getQueryParameters()).thenReturn(mockQueryParams); + } + + @Test + void testCleanDME2QueryParams_DoesNotRemoveNonBlacklistedParams() throws IOException { + when(mockQueryParams.containsKey("nonBlacklistedKey")).thenReturn(true); + when(mockQueryParams.containsKey("version")).thenReturn(false); + when(mockQueryParams.containsKey("envContext")).thenReturn(false); + when(mockQueryParams.containsKey("routeOffer")).thenReturn(false); + when(mockUriBuilder.replaceQueryParam("nonBlacklistedKey")).thenReturn(mockUriBuilder); + + requestModification.filter(mockRequestContext); + + verify(mockUriBuilder, never()).replaceQueryParam(eq("nonBlacklistedKey")); + assertTrue(true, "Non-blacklisted query parameters were not removed."); // Assert the expected behavior + } + + @Test + void testCleanDME2QueryParams_NoBlacklistParams() throws IOException { + when(mockQueryParams.isEmpty()).thenReturn(true); + + requestModification.filter(mockRequestContext); + + verify(mockUriBuilder, never()).replaceQueryParam(eq("version")); + verify(mockUriBuilder, never()).replaceQueryParam(eq("envContext")); + verify(mockUriBuilder, never()).replaceQueryParam(eq("routeOffer")); + + assertTrue(mockQueryParams.isEmpty(), "Query parameters should be empty when no blacklisted params are present."); + } + + @Test + void testCleanDME2QueryParams_AllBlacklistParamsPresent() throws IOException { + when(mockQueryParams.containsKey("version")).thenReturn(true); + when(mockQueryParams.containsKey("envContext")).thenReturn(true); + when(mockQueryParams.containsKey("routeOffer")).thenReturn(true); + when(mockQueryParams.entrySet()).thenReturn(Set.of( + Map.entry("version", List.of("1.0")), + Map.entry("envContext", List.of("DEV")), + Map.entry("routeOffer", List.of("A")) + )); + + when(mockUriBuilder.replaceQueryParam("version")).thenReturn(mockUriBuilder); + when(mockUriBuilder.replaceQueryParam("envContext")).thenReturn(mockUriBuilder); + when(mockUriBuilder.replaceQueryParam("routeOffer")).thenReturn(mockUriBuilder); + + requestModification.filter(mockRequestContext); + + verify(mockUriBuilder).replaceQueryParam("version"); + verify(mockUriBuilder).replaceQueryParam("envContext"); + verify(mockUriBuilder).replaceQueryParam("routeOffer"); + verify(mockRequestContext).setRequestUri(any()); + + assertTrue(true, "All blacklisted query parameters should have been processed."); + } +}
\ No newline at end of file diff --git a/aai-traversal/src/test/java/org/onap/aai/interceptors/pre/RequestTransactionLoggingTest.java b/aai-traversal/src/test/java/org/onap/aai/interceptors/pre/RequestTransactionLoggingTest.java new file mode 100644 index 0000000..8d14613 --- /dev/null +++ b/aai-traversal/src/test/java/org/onap/aai/interceptors/pre/RequestTransactionLoggingTest.java @@ -0,0 +1,199 @@ +/** + * ============LICENSE_START======================================================= + * org.onap.aai + * ================================================================================ + * Copyright © 2025 Deutsche Telekom. All rights reserved. + * ================================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============LICENSE_END========================================================= + */ +package org.onap.aai.interceptors.pre; + +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.Mockito; +import org.mockito.MockitoAnnotations; +import org.onap.aai.TraversalApp; +import org.onap.aai.interceptors.AAIHeaderProperties; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.boot.test.context.TestConfiguration; +import org.springframework.context.annotation.Bean; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.TestPropertySource; +import org.springframework.test.context.junit.jupiter.SpringExtension; +import javax.ws.rs.container.ContainerRequestContext; +import javax.ws.rs.core.MultivaluedMap; +import javax.ws.rs.core.UriInfo; +import java.io.IOException; +import java.lang.reflect.Method; +import static org.junit.jupiter.api.Assertions.*; +import static org.mockito.Mockito.*; + +@ExtendWith(SpringExtension.class) +@SpringBootTest( + webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT, + classes = TraversalApp.class) +@TestPropertySource(locations = "classpath:application-test.properties") +@ContextConfiguration(classes = RequestTransactionLoggingTest.TestConfig.class) +public class RequestTransactionLoggingTest { + + @InjectMocks + private RequestTransactionLogging requestTransactionLogging; + + @Mock + private ContainerRequestContext mockRequestContext; + + @Mock + private MultivaluedMap<String, String> mockHeaders; + + @Mock + private UriInfo mockUriInfo; + + @BeforeEach + void setUp() { + MockitoAnnotations.openMocks(this); // Initialize mocks + resetMocks(); // Reset mock states + + when(mockRequestContext.getHeaders()).thenReturn(mockHeaders); + when(mockRequestContext.getUriInfo()).thenReturn(mockUriInfo); + + when(mockHeaders.getFirst("Content-Type")).thenReturn(null); + when(mockHeaders.getFirst("Accept")).thenReturn("application/xml"); + + doNothing().when(mockHeaders).putSingle(anyString(), anyString()); + when(mockHeaders.containsKey("Content-Type")).thenReturn(false); + when(mockHeaders.containsKey("Accept")).thenReturn(true); + } + + private void resetMocks() { + Mockito.reset(mockRequestContext, mockHeaders, mockUriInfo); + } + + @Test + void testFilter_noContentTypeHeader_shouldNotModifyRequest() throws IOException { + // Prepare mock responses + when(mockHeaders.getFirst("Content-Type")).thenReturn(null); + when(mockHeaders.getFirst("Accept")).thenReturn("application/xml"); + when(mockRequestContext.getUriInfo()).thenReturn(null); + + requestTransactionLogging.filter(mockRequestContext); + + // Verify that Content-Type is added and Accept is preserved + verify(mockHeaders).putSingle("Content-Type", "application/json"); + verify(mockHeaders).putSingle("Accept", "application/xml"); + } + + @Test + void testFilter_shouldSetTransactionIdAndRequestProperties() throws IOException { + // Set mock data for headers and uri info + when(mockHeaders.getFirst("Content-Type")).thenReturn("application/json"); + when(mockHeaders.getFirst("Accept")).thenReturn("*/*"); + when(mockUriInfo.getPath()).thenReturn("/test/path"); + + requestTransactionLogging.filter(mockRequestContext); + + // Verify that the correct properties are set + verify(mockRequestContext).setProperty(eq(AAIHeaderProperties.AAI_TX_ID), anyString()); + verify(mockRequestContext).setProperty(eq(AAIHeaderProperties.AAI_REQUEST), anyString()); + verify(mockRequestContext).setProperty(eq(AAIHeaderProperties.AAI_REQUEST_TS), anyString()); + + // Verify that headers are set properly + verify(mockRequestContext.getHeaders()).putSingle(eq("Content-Type"), eq("application/json")); + verify(mockRequestContext.getHeaders()).putSingle(eq("Accept"), eq("application/xml")); + } + + @Test + void testFilter_withDslPath_shouldSetAcceptHeaderToJson() throws IOException { + // Mock URI path for DSL request + when(mockUriInfo.getPath()).thenReturn("/some/dsl"); + when(mockHeaders.getFirst("Content-Type")).thenReturn("application/json"); + + requestTransactionLogging.filter(mockRequestContext); + + // Verify that the Accept header is set to application/json + verify(mockRequestContext.getHeaders()).putSingle("Accept", "application/json"); + } + + @Test + void testFilter_withQueryPath_shouldSetAcceptHeaderToJson() throws IOException { + // Mock URI path for query request + when(mockUriInfo.getPath()).thenReturn("/some/query"); + + requestTransactionLogging.filter(mockRequestContext); + + // Verify that the Accept header is set to application/json + verify(mockRequestContext.getHeaders()).putSingle("Accept", "application/json"); + } + + @Test + void testFilter_withRecentsPath_shouldSetAcceptHeaderToJson() throws IOException { + // Mock URI path for recents request + when(mockUriInfo.getPath()).thenReturn("/some/recents/data"); + + requestTransactionLogging.filter(mockRequestContext); + + // Verify that the Accept header is set to application/json + verify(mockRequestContext.getHeaders()).putSingle("Accept", "application/json"); + } + + @Test + void testFilter_withOtherPath_shouldSetAcceptHeaderToDefault() throws IOException { + // Mock URI path for other request + when(mockUriInfo.getPath()).thenReturn("/some/other/path"); + + requestTransactionLogging.filter(mockRequestContext); + + // Verify that Accept and Content-Type are set to their default values + verify(mockRequestContext.getHeaders()).putSingle("Accept", "application/xml"); + verify(mockRequestContext.getHeaders()).putSingle("Content-Type", "application/json"); + } + + @Test + void testGetAAITxIdToHeader_shouldGenerateTxIdWithTimestamp() throws Exception { + String currentTimeStamp = "20251211"; + Method method = RequestTransactionLogging.class.getDeclaredMethod("getAAITxIdToHeader", String.class); + method.setAccessible(true); + + String txId = (String) method.invoke(requestTransactionLogging, currentTimeStamp); + + assertNotNull(txId); + assertTrue(txId.contains(currentTimeStamp), "Transaction ID should contain the timestamp"); + } + + @Test + void testGetRequest_shouldCreateRequestJson() throws Exception { + String fullId = "12345-abc"; + Method method = RequestTransactionLogging.class.getDeclaredMethod("getRequest", ContainerRequestContext.class, String.class); + method.setAccessible(true); + + String requestJson = (String) method.invoke(requestTransactionLogging, mockRequestContext, fullId); + + // Verify that the generated request JSON contains expected fields + assertNotNull(requestJson); + assertTrue(requestJson.contains("ID")); + assertTrue(requestJson.contains("Http-Method")); + assertTrue(requestJson.contains("Headers")); + } + + // Custom configuration for this test class to isolate the beans + @TestConfiguration + static class TestConfig { + @Bean + public RequestTransactionLogging requestTransactionLogging() { + return new RequestTransactionLogging(); + } + } +} diff --git a/aai-traversal/src/test/java/org/onap/aai/interceptors/pre/RetiredInterceptorTest.java b/aai-traversal/src/test/java/org/onap/aai/interceptors/pre/RetiredInterceptorTest.java new file mode 100644 index 0000000..caaaf22 --- /dev/null +++ b/aai-traversal/src/test/java/org/onap/aai/interceptors/pre/RetiredInterceptorTest.java @@ -0,0 +1,112 @@ +/** + * ============LICENSE_START======================================================= + * org.onap.aai + * ================================================================================ + * Copyright © 2025 Deutsche Telekom. All rights reserved. + * ================================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============LICENSE_END========================================================= + */ +package org.onap.aai.interceptors.pre; + +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.mockito.Mock; +import org.mockito.MockitoAnnotations; +import org.onap.aai.service.RetiredService; +import javax.ws.rs.container.ContainerRequestContext; +import javax.ws.rs.core.Response; +import javax.ws.rs.core.UriInfo; +import java.util.ArrayList; +import java.util.List; +import java.util.regex.Pattern; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.mockito.Mockito.*; + +class RetiredInterceptorTest { + + @Mock + private RetiredService retiredService; + + @Mock + private ContainerRequestContext containerRequestContext; + + @Mock + private UriInfo uriInfo; + + private RetiredInterceptor retiredInterceptor; + + @BeforeEach + void setUp() { + MockitoAnnotations.openMocks(this); + String basePath = "/aai/v15"; + retiredInterceptor = new RetiredInterceptor(retiredService, basePath); + } + + @Test + void testFilter_withRetiredUri_allVersions() throws Exception { + String requestURI = "/aai/v15/service/retired"; + String version = "v15"; + + List<Pattern> retiredAllVersionPatterns = new ArrayList<>(); + retiredAllVersionPatterns.add(Pattern.compile("/aai/v.*service/retired")); + + List<Pattern> retiredVersionPatterns = new ArrayList<>(); + retiredVersionPatterns.add(Pattern.compile("/aai/v15/service/.*")); + + when(retiredService.getRetiredAllVersionList()).thenReturn(retiredAllVersionPatterns); + when(retiredService.getRetiredPatterns()).thenReturn(retiredVersionPatterns); + when(containerRequestContext.getUriInfo()).thenReturn(uriInfo); + when(uriInfo.getAbsolutePath()).thenReturn(java.net.URI.create(requestURI)); + + retiredInterceptor.filter(containerRequestContext); + + verify(containerRequestContext).abortWith(any(Response.class)); + } + + @Test + void testFilter_withActiveUri_doesNotAbort() throws Exception { + String requestURI = "/aai/v15/service/active"; + String version = "v15"; + + List<Pattern> retiredAllVersionPatterns = new ArrayList<>(); + retiredAllVersionPatterns.add(Pattern.compile("/aai/v.*service/retired")); + + List<Pattern> retiredVersionPatterns = new ArrayList<>(); + retiredVersionPatterns.add(Pattern.compile("/aai/v15/service/retired")); + + when(retiredService.getRetiredAllVersionList()).thenReturn(retiredAllVersionPatterns); + when(retiredService.getRetiredPatterns()).thenReturn(retiredVersionPatterns); + when(containerRequestContext.getUriInfo()).thenReturn(uriInfo); + when(uriInfo.getAbsolutePath()).thenReturn(java.net.URI.create(requestURI)); + + retiredInterceptor.filter(containerRequestContext); + + verify(containerRequestContext, never()).abortWith(any(Response.class)); + } + + @Test + void testExtractVersionFromPath_withValidVersion() { + String requestURI = "/aai/v15/service/active"; + String extractedVersion = retiredInterceptor.extractVersionFromPath(requestURI); + assertEquals("v15", extractedVersion); + } + + @Test + void testExtractVersionFromPath_withNoVersion() { + String requestURI = "/aai/service/active"; + String extractedVersion = retiredInterceptor.extractVersionFromPath(requestURI); + assertEquals(null, extractedVersion); + } +} + diff --git a/aai-traversal/src/test/java/org/onap/aai/interceptors/pre/VersionInterceptorTest.java b/aai-traversal/src/test/java/org/onap/aai/interceptors/pre/VersionInterceptorTest.java new file mode 100644 index 0000000..1918170 --- /dev/null +++ b/aai-traversal/src/test/java/org/onap/aai/interceptors/pre/VersionInterceptorTest.java @@ -0,0 +1,105 @@ +/** + * ============LICENSE_START======================================================= + * org.onap.aai + * ================================================================================ + * Copyright © 2025 Deutsche Telekom. All rights reserved. + * ================================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============LICENSE_END========================================================= + */ +package org.onap.aai.interceptors.pre; + +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.mockito.ArgumentCaptor; +import org.mockito.Mock; +import org.mockito.MockitoAnnotations; +import org.onap.aai.setup.SchemaVersion; +import org.onap.aai.setup.SchemaVersions; +import javax.ws.rs.container.ContainerRequestContext; +import javax.ws.rs.core.Response; +import javax.ws.rs.core.UriInfo; +import java.util.Arrays; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.fail; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; + +public class VersionInterceptorTest { + + @Mock + private SchemaVersions mockSchemaVersions; + + @Mock + private ContainerRequestContext mockRequestContext; + + @Mock + private UriInfo mockUriInfo; + + private VersionInterceptor versionInterceptor; + + @BeforeEach + public void setUp() { + MockitoAnnotations.openMocks(this); + versionInterceptor = new VersionInterceptor(mockSchemaVersions); + } + + @Test + public void testAllowedVersion() { + when(mockSchemaVersions.getVersions()).thenReturn(Arrays.asList(new SchemaVersion("v1"), new SchemaVersion("v2"))); + versionInterceptor = new VersionInterceptor(mockSchemaVersions); + + String uri = "/v1/test"; + when(mockRequestContext.getUriInfo()).thenReturn(mockUriInfo); + when(mockUriInfo.getPath()).thenReturn(uri); + + try { + versionInterceptor.filter(mockRequestContext); + } catch (Exception e) { + fail("abortWith() was called unexpectedly for valid version"); + } + } + + @Test + public void testInvalidVersionFormat() { + when(mockSchemaVersions.getVersions()).thenReturn(Arrays.asList(new SchemaVersion("v1"), new SchemaVersion("v2"))); + versionInterceptor = new VersionInterceptor(mockSchemaVersions); + + String uri = "/invalid-version/test"; + when(mockRequestContext.getUriInfo()).thenReturn(mockUriInfo); + when(mockUriInfo.getPath()).thenReturn(uri); + + versionInterceptor.filter(mockRequestContext); + + ArgumentCaptor<Response> responseCaptor = ArgumentCaptor.forClass(Response.class); + verify(mockRequestContext).abortWith(responseCaptor.capture()); + Response response = responseCaptor.getValue(); + assertEquals(400, response.getStatus()); + } + + @Test + public void testNoVersionInUri() { + when(mockSchemaVersions.getVersions()).thenReturn(Arrays.asList(new SchemaVersion("v1"), new SchemaVersion("v2"))); + versionInterceptor = new VersionInterceptor(mockSchemaVersions); + + String uri = "/test"; + when(mockRequestContext.getUriInfo()).thenReturn(mockUriInfo); + when(mockUriInfo.getPath()).thenReturn(uri); + + versionInterceptor.filter(mockRequestContext); + ArgumentCaptor<Response> responseCaptor = ArgumentCaptor.forClass(Response.class); + verify(mockRequestContext).abortWith(responseCaptor.capture()); + Response response = responseCaptor.getValue(); + assertEquals(400, response.getStatus()); + } +} diff --git a/aai-traversal/src/test/java/org/onap/aai/it/multitenancy/KeycloakTestConfiguration.java b/aai-traversal/src/test/java/org/onap/aai/it/multitenancy/KeycloakTestConfiguration.java deleted file mode 100644 index 0ff845a..0000000 --- a/aai-traversal/src/test/java/org/onap/aai/it/multitenancy/KeycloakTestConfiguration.java +++ /dev/null @@ -1,71 +0,0 @@ -/** - * ============LICENSE_START======================================================= - * org.onap.aai - * ================================================================================ - * Copyright © 2017-2018 AT&T Intellectual Property. All rights reserved. - * ================================================================================ - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * ============LICENSE_END========================================================= - */ -package org.onap.aai.it.multitenancy; - -import com.github.dockerjava.api.model.ExposedPort; -import com.github.dockerjava.api.model.HostConfig; -import com.github.dockerjava.api.model.PortBinding; -import com.github.dockerjava.api.model.Ports; - -import dasniko.testcontainers.keycloak.KeycloakContainer; - -import org.keycloak.adapters.springboot.KeycloakSpringBootProperties; -import org.keycloak.admin.client.Keycloak; -import org.keycloak.admin.client.KeycloakBuilder; -import org.keycloak.representations.adapters.config.AdapterConfig; -import org.springframework.boot.test.context.TestConfiguration; -import org.springframework.context.annotation.Bean; - -@TestConfiguration -class KeycloakTestConfiguration { - - @Bean - public AdapterConfig adapterConfig() { - return new KeycloakSpringBootProperties(); - } - - @Bean - KeycloakContainer keycloakContainer(KeycloakTestProperties properties) { - KeycloakContainer keycloak = new KeycloakContainer("jboss/keycloak:12.0.4") - .withRealmImportFile(properties.realmJson).withCreateContainerCmdModifier( - cmd -> cmd.withHostConfig(new HostConfig().withPortBindings( - new PortBinding(Ports.Binding.bindPort(Integer.parseInt(properties.port)), - new ExposedPort(8080))))); - keycloak.start(); - return keycloak; - } - - @Bean - Keycloak keycloakAdminClient(KeycloakContainer keycloak, KeycloakTestProperties properties) { - return KeycloakBuilder.builder().serverUrl(keycloak.getAuthServerUrl()) - .realm(properties.realm).clientId(properties.adminCli) - .username(keycloak.getAdminUsername()).password(keycloak.getAdminPassword()).build(); - } - - @Bean - RoleHandler roleHandler(Keycloak adminClient, KeycloakTestProperties properties) { - return new RoleHandler(adminClient, properties); - } - - @Bean - KeycloakTestProperties properties() { - return new KeycloakTestProperties(); - } -} diff --git a/aai-traversal/src/test/java/org/onap/aai/it/multitenancy/KeycloakTestProperties.java b/aai-traversal/src/test/java/org/onap/aai/it/multitenancy/KeycloakTestProperties.java deleted file mode 100644 index 72b6f6f..0000000 --- a/aai-traversal/src/test/java/org/onap/aai/it/multitenancy/KeycloakTestProperties.java +++ /dev/null @@ -1,44 +0,0 @@ -/** - * ============LICENSE_START======================================================= - * org.onap.aai - * ================================================================================ - * Copyright © 2017-2018 AT&T Intellectual Property. All rights reserved. - * ================================================================================ - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * ============LICENSE_END========================================================= - */ -package org.onap.aai.it.multitenancy; - -import org.springframework.beans.factory.annotation.Value; - -class KeycloakTestProperties { - - @Value("${test.keycloak.realm.json}") - public String realmJson; - - @Value("${keycloak.realm}") - public String realm; - - @Value("${keycloak.resource}") - public String clientId; - - @Value("${test.keycloak.client.secret}") - public String clientSecret; - - @Value("${test.keycloak.admin.cli}") - public String adminCli; - - @Value("${test.keycloak.auth-server-port}") - public String port; - -} diff --git a/aai-traversal/src/test/java/org/onap/aai/it/multitenancy/MultiTenancyIT.java b/aai-traversal/src/test/java/org/onap/aai/it/multitenancy/MultiTenancyIT.java deleted file mode 100644 index 18e7a52..0000000 --- a/aai-traversal/src/test/java/org/onap/aai/it/multitenancy/MultiTenancyIT.java +++ /dev/null @@ -1,175 +0,0 @@ -/** - * ============LICENSE_START================================================== - * org.onap.aai - * =========================================================================== - * Copyright © 2017-2020 AT&T Intellectual Property. All rights reserved. - * =========================================================================== - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * ============LICENSE_END==================================================== - */ -package org.onap.aai.it.multitenancy; - -import static org.junit.Assert.*; - -import com.jayway.jsonpath.JsonPath; - -import dasniko.testcontainers.keycloak.KeycloakContainer; - -import java.util.Collections; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversalSource; -import org.janusgraph.core.JanusGraphTransaction; -import org.junit.Test; -import org.keycloak.admin.client.Keycloak; -import org.keycloak.admin.client.KeycloakBuilder; -import org.keycloak.representations.AccessTokenResponse; -import org.onap.aai.PayloadUtil; -import org.onap.aai.dbmap.AAIGraph; -import org.onap.aai.rest.AbstractSpringRestTest; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.context.annotation.Import; -import org.springframework.http.*; -import org.springframework.test.context.TestPropertySource; - -@Import(KeycloakTestConfiguration.class) -@TestPropertySource(locations = "classpath:it/application-keycloak-test.properties") -public class MultiTenancyIT extends AbstractSpringRestTest { - - @Autowired - private KeycloakContainer keycloakContainer; - @Autowired - private RoleHandler roleHandler; - @Autowired - private KeycloakTestProperties properties; - - @Override - public void createTestGraph() { - JanusGraphTransaction transaction = AAIGraph.getInstance().getGraph().newTransaction(); - boolean success = true; - - try { - GraphTraversalSource g = transaction.traversal(); - - g.addV().property("aai-node-type", "pnf").property("pnf-name", "test-pnf-name-01") - .property("prov-status", "in_service").property("data-owner", "operator") - .property("in-maint", false).property("source-of-truth", "JUNIT") - .property("aai-uri", "/network/pnfs/pnf/test-pnf-name-01").next(); - - g.addV().property("aai-node-type", "pnf").property("pnf-name", "test-pnf-name-02") - .property("prov-status", "in_service").property("in-maint", false) - .property("source-of-truth", "JUNIT") - .property("aai-uri", "/network/pnfs/pnf/test-pnf-name-02").next(); - - g.addV().property("aai-node-type", "pnf").property("pnf-name", "test-pnf-name-03") - .property("prov-status", "in_service").property("data-owner", "selector") - .property("in-maint", false).property("source-of-truth", "JUNIT") - .property("aai-uri", "/network/pnfs/pnf/test-pnf-name-03").next(); - - g.addV().property("aai-node-type", "pnf").property("pnf-name", "test-pnf-name-04") - .property("prov-status", "in_service").property("data-owner", "selector") - .property("in-maint", false).property("source-of-truth", "JUNIT") - .property("aai-uri", "/network/pnfs/pnf/test-pnf-name-04").next(); - - g.addV().property("aai-node-type", "pnf").property("pnf-name", "test-pnf-name-05") - .property("prov-status", "in_service").property("data-owner", "selector") - .property("in-maint", false).property("source-of-truth", "JUNIT") - .property("aai-uri", "/network/pnfs/pnf/test-pnf-name-05").next(); - } catch (Exception ex) { - success = false; - } finally { - if (success) { - transaction.commit(); - } else { - transaction.rollback(); - fail("Unable to setup the graph"); - } - } - } - - @Test - public void testDslQueryWithDataOwner() throws Exception { - baseUrl = "http://localhost:" + randomPort; - String endpoint = baseUrl + "/aai/v29/dsl?format=console"; - List<Object> queryResults = null; - ResponseEntity responseEntity = null; - - Map<String, String> dslQueryMap = new HashMap<>(); - dslQueryMap.put("dsl-query", "pnf*('prov-status','in_service') "); - String payload = PayloadUtil.getTemplatePayload("dsl-query.json", dslQueryMap); - - // get pnf with ran (operator) - String username = "ran", password = "ran"; - headers = this.getHeaders(username, password); - httpEntity = new HttpEntity(payload, headers); - responseEntity = restTemplate.exchange(endpoint, HttpMethod.PUT, httpEntity, String.class); - queryResults = JsonPath.read(responseEntity.getBody().toString(), "$.results"); - assertEquals(HttpStatus.OK, responseEntity.getStatusCode()); - assertEquals(queryResults.size(), 2); - - // get pnf with bob (operator_readOnly) - username = "bob"; - password = "bob"; - headers = this.getHeaders(username, password); - httpEntity = new HttpEntity(payload, headers); - responseEntity = restTemplate.exchange(endpoint, HttpMethod.PUT, httpEntity, String.class); - queryResults = JsonPath.read(responseEntity.getBody().toString(), "$.results"); - assertEquals(HttpStatus.OK, responseEntity.getStatusCode()); - assertEquals(queryResults.size(), 2); - - // get pnf with ted (selector) - username = "ted"; - password = "ted"; - headers = this.getHeaders(username, password); - httpEntity = new HttpEntity(payload, headers); - responseEntity = restTemplate.exchange(endpoint, HttpMethod.PUT, httpEntity, String.class); - queryResults = JsonPath.read(responseEntity.getBody().toString(), "$.results"); - assertEquals(HttpStatus.OK, responseEntity.getStatusCode()); - assertEquals(queryResults.size(), 4); - - // add role to ted and try to get pnf again - roleHandler.addToUser(RoleHandler.OPERATOR, username); - headers = this.getHeaders(username, password); - httpEntity = new HttpEntity(payload, headers); - responseEntity = restTemplate.exchange(endpoint, HttpMethod.PUT, httpEntity, String.class); - queryResults = JsonPath.read(responseEntity.getBody().toString(), "$.results"); - assertEquals(HttpStatus.OK, responseEntity.getStatusCode()); - assertEquals(queryResults.size(), 5); - } - - private HttpHeaders getHeaders(String username, String password) { - HttpHeaders headers = new HttpHeaders(); - - headers.setContentType(MediaType.APPLICATION_JSON); - headers.setAccept(Collections.singletonList(MediaType.APPLICATION_JSON)); - headers.add("Real-Time", "true"); - headers.add("X-FromAppId", "JUNIT"); - headers.add("X-TransactionId", "JUNIT"); - headers.add("Authorization", "Bearer " + getStringToken(username, password)); - - return headers; - } - - private String getStringToken(String username, String password) { - Keycloak keycloakClient = KeycloakBuilder.builder() - .serverUrl(keycloakContainer.getAuthServerUrl()).realm(properties.realm) - .clientId(properties.clientId).clientSecret(properties.clientSecret).username(username) - .password(password).build(); - - AccessTokenResponse tokenResponse = keycloakClient.tokenManager().getAccessToken(); - assertNotNull(tokenResponse); - return tokenResponse.getToken(); - } -} diff --git a/aai-traversal/src/test/java/org/onap/aai/it/multitenancy/RoleHandler.java b/aai-traversal/src/test/java/org/onap/aai/it/multitenancy/RoleHandler.java deleted file mode 100644 index cd4f1b5..0000000 --- a/aai-traversal/src/test/java/org/onap/aai/it/multitenancy/RoleHandler.java +++ /dev/null @@ -1,52 +0,0 @@ -/** - * ============LICENSE_START======================================================= - * org.onap.aai - * ================================================================================ - * Copyright © 2017-2018 AT&T Intellectual Property. All rights reserved. - * ================================================================================ - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * ============LICENSE_END========================================================= - */ -package org.onap.aai.it.multitenancy; - -import java.util.Collections; - -import org.keycloak.admin.client.Keycloak; -import org.keycloak.admin.client.resource.RealmResource; - -class RoleHandler { - - /** - * Following roles should be the same as given roles in multi-tenancy-realm json file - */ - final static String OPERATOR = "operator"; - private final Keycloak adminClient; - private final KeycloakTestProperties properties; - - RoleHandler(Keycloak adminClient, KeycloakTestProperties properties) { - this.adminClient = adminClient; - this.properties = properties; - } - - void addToUser(String role, String username) { - RealmResource realm = adminClient.realm(properties.realm); - realm.users().get(username).roles().realmLevel() - .add(Collections.singletonList(realm.roles().get(role).toRepresentation())); - } - - void removeFromUser(String role, String username) { - RealmResource realm = adminClient.realm(properties.realm); - realm.users().get(username).roles().realmLevel() - .remove(Collections.singletonList(realm.roles().get(role).toRepresentation())); - } -} diff --git a/aai-traversal/src/test/java/org/onap/aai/rest/BadQueryFormatTest.java b/aai-traversal/src/test/java/org/onap/aai/rest/BadQueryFormatTest.java index 6580c74..2878945 100644 --- a/aai-traversal/src/test/java/org/onap/aai/rest/BadQueryFormatTest.java +++ b/aai-traversal/src/test/java/org/onap/aai/rest/BadQueryFormatTest.java @@ -35,7 +35,6 @@ import org.onap.aai.HttpTestUtil; import org.onap.aai.PayloadUtil; import org.onap.aai.TraversalApp; import org.onap.aai.TraversalTestConfiguration; -import org.onap.aai.config.PropertyPasswordConfiguration; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import org.springframework.boot.autoconfigure.cassandra.CassandraAutoConfiguration; @@ -54,7 +53,6 @@ import org.springframework.web.client.RestTemplate; webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT, classes = TraversalApp.class) @TestPropertySource(locations = "classpath:application-test.properties") -@ContextConfiguration(initializers = PropertyPasswordConfiguration.class) @EnableAutoConfiguration(exclude={CassandraDataAutoConfiguration.class, CassandraAutoConfiguration.class}) // there is no running cassandra instance for the test @Import(TraversalTestConfiguration.class) public class BadQueryFormatTest { diff --git a/aai-traversal/src/test/java/org/onap/aai/rest/ConfigurationTest.java b/aai-traversal/src/test/java/org/onap/aai/rest/ConfigurationTest.java index a892522..feeb874 100644 --- a/aai-traversal/src/test/java/org/onap/aai/rest/ConfigurationTest.java +++ b/aai-traversal/src/test/java/org/onap/aai/rest/ConfigurationTest.java @@ -32,7 +32,6 @@ import org.junit.Test; import org.onap.aai.TraversalApp; import org.onap.aai.TraversalTestConfiguration; import org.onap.aai.config.SpringContextAware; -import org.onap.aai.restclient.PropertyPasswordConfiguration; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.autoconfigure.EnableAutoConfiguration; @@ -46,15 +45,12 @@ import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.TestPropertySource; import org.springframework.web.client.RestTemplate; -import io.prometheus.client.exporter.common.TextFormat; - /** * Test REST requests against configuration resource */ @AutoConfigureMetrics @TestPropertySource(locations = "classpath:application-test.properties") @ContextConfiguration( - initializers = PropertyPasswordConfiguration.class, classes = {SpringContextAware.class}) @Import(TraversalTestConfiguration.class) @SpringBootTest( diff --git a/aai-traversal/src/test/java/org/onap/aai/rest/GfpVserverDataStoredQueryTest.java b/aai-traversal/src/test/java/org/onap/aai/rest/GfpVserverDataStoredQueryTest.java index f43c91f..d539a77 100644 --- a/aai-traversal/src/test/java/org/onap/aai/rest/GfpVserverDataStoredQueryTest.java +++ b/aai-traversal/src/test/java/org/onap/aai/rest/GfpVserverDataStoredQueryTest.java @@ -54,15 +54,16 @@ import org.mockito.Mockito; import org.onap.aai.AAISetup; import org.onap.aai.HttpTestUtil; import org.onap.aai.PayloadUtil; -import org.onap.aai.config.PropertyPasswordConfiguration; import org.onap.aai.dbmap.AAIGraph; import org.onap.aai.setup.SchemaVersion; import org.onap.aai.transforms.XmlFormatTransformer; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import org.springframework.test.annotation.DirtiesContext; +import org.springframework.test.annotation.DirtiesContext.ClassMode; import org.springframework.test.context.ContextConfiguration; -@ContextConfiguration(initializers = PropertyPasswordConfiguration.class) +@DirtiesContext(classMode = ClassMode.BEFORE_CLASS) public class GfpVserverDataStoredQueryTest extends AAISetup { private static final Logger logger = diff --git a/aai-traversal/src/test/java/org/onap/aai/rest/QueryConsumerTest.java b/aai-traversal/src/test/java/org/onap/aai/rest/QueryConsumerTest.java index e75019a..847753f 100644 --- a/aai-traversal/src/test/java/org/onap/aai/rest/QueryConsumerTest.java +++ b/aai-traversal/src/test/java/org/onap/aai/rest/QueryConsumerTest.java @@ -43,7 +43,6 @@ import org.onap.aai.PayloadUtil; import org.onap.aai.TraversalApp; import org.onap.aai.TraversalTestConfiguration; import org.onap.aai.WebClientConfiguration; -import org.onap.aai.config.PropertyPasswordConfiguration; import org.onap.aai.dbmap.AAIGraph; import org.onap.aai.exceptions.AAIException; import org.slf4j.Logger; @@ -56,7 +55,6 @@ import org.springframework.boot.test.context.SpringBootTest; import org.springframework.boot.web.server.LocalServerPort; import org.springframework.context.annotation.Import; import org.springframework.http.*; -import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.TestPropertySource; import org.springframework.test.context.junit4.SpringRunner; import org.springframework.test.web.reactive.server.WebTestClient; @@ -67,7 +65,6 @@ import org.springframework.web.client.RestTemplate; webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT, classes = TraversalApp.class) @TestPropertySource(locations = "classpath:application-test.properties") -@ContextConfiguration(initializers = PropertyPasswordConfiguration.class) @EnableAutoConfiguration(exclude={CassandraDataAutoConfiguration.class, CassandraAutoConfiguration.class}) // there is no running cassandra instance for the test @Import({TraversalTestConfiguration.class, WebClientConfiguration.class}) public class QueryConsumerTest { diff --git a/aai-traversal/src/test/java/org/onap/aai/rest/RecentApiTest.java b/aai-traversal/src/test/java/org/onap/aai/rest/RecentApiTest.java index 3c7c06f..aa13c77 100644 --- a/aai-traversal/src/test/java/org/onap/aai/rest/RecentApiTest.java +++ b/aai-traversal/src/test/java/org/onap/aai/rest/RecentApiTest.java @@ -21,8 +21,6 @@ package org.onap.aai.rest; import static org.junit.Assert.*; -import java.util.Collections; - import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversalSource; import org.janusgraph.core.JanusGraphTransaction; import org.junit.Test; diff --git a/aai-traversal/src/test/java/org/onap/aai/rest/SearchProviderRestTest.java b/aai-traversal/src/test/java/org/onap/aai/rest/SearchProviderRestTest.java index b9dc073..8fc3fb0 100644 --- a/aai-traversal/src/test/java/org/onap/aai/rest/SearchProviderRestTest.java +++ b/aai-traversal/src/test/java/org/onap/aai/rest/SearchProviderRestTest.java @@ -25,7 +25,6 @@ import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; import java.util.Collections; - import org.junit.Test; import org.slf4j.Logger; import org.slf4j.LoggerFactory; diff --git a/aai-traversal/src/test/java/org/onap/aai/rest/dsl/DslContextTest.java b/aai-traversal/src/test/java/org/onap/aai/rest/dsl/DslContextTest.java index 9c89964..435f6e2 100644 --- a/aai-traversal/src/test/java/org/onap/aai/rest/dsl/DslContextTest.java +++ b/aai-traversal/src/test/java/org/onap/aai/rest/dsl/DslContextTest.java @@ -21,11 +21,6 @@ package org.onap.aai.rest.dsl; import static org.junit.Assert.*; - -import java.util.Deque; -import java.util.List; - -import org.antlr.v4.runtime.ParserRuleContext; import org.junit.Assert; import org.junit.Before; import org.junit.Test; diff --git a/aai-traversal/src/test/java/org/onap/aai/rest/dsl/DslQueryBuilderTest.java b/aai-traversal/src/test/java/org/onap/aai/rest/dsl/DslQueryBuilderTest.java index 159485f..a227151 100644 --- a/aai-traversal/src/test/java/org/onap/aai/rest/dsl/DslQueryBuilderTest.java +++ b/aai-traversal/src/test/java/org/onap/aai/rest/dsl/DslQueryBuilderTest.java @@ -27,7 +27,6 @@ import java.util.HashSet; import org.junit.Before; import org.junit.Test; import org.onap.aai.edges.EdgeIngestor; -import org.onap.aai.introspection.Loader; public class DslQueryBuilderTest { DslQueryBuilder dslQueryBuilder; diff --git a/aai-traversal/src/test/java/org/onap/aai/rest/history/AbstractSpringHistoryRestTest.java b/aai-traversal/src/test/java/org/onap/aai/rest/history/AbstractSpringHistoryRestTest.java index 9fdce03..6c48c25 100644 --- a/aai-traversal/src/test/java/org/onap/aai/rest/history/AbstractSpringHistoryRestTest.java +++ b/aai-traversal/src/test/java/org/onap/aai/rest/history/AbstractSpringHistoryRestTest.java @@ -30,7 +30,6 @@ import org.janusgraph.core.JanusGraphTransaction; import org.junit.*; import org.onap.aai.TraversalApp; import org.onap.aai.TraversalTestConfiguration; -import org.onap.aai.config.PropertyPasswordConfiguration; import org.onap.aai.dbmap.AAIGraph; import org.onap.aai.exceptions.AAIException; import org.onap.aai.nodes.NodeIngestor; @@ -57,7 +56,6 @@ import org.springframework.web.client.RestTemplate; @TestPropertySource( locations = "classpath:application-test.properties", properties = {"history.enabled=true", "history.truncate.window.days = " + Integer.MAX_VALUE}) -@ContextConfiguration(initializers = PropertyPasswordConfiguration.class) @EnableAutoConfiguration(exclude={CassandraDataAutoConfiguration.class, CassandraAutoConfiguration.class}) // there is no running cassandra instance for the test @Import(TraversalTestConfiguration.class) public abstract class AbstractSpringHistoryRestTest { diff --git a/aai-traversal/src/test/java/org/onap/aai/rest/search/AccessServiceFromServiceInstanceTest.java b/aai-traversal/src/test/java/org/onap/aai/rest/search/AccessServiceFromServiceInstanceTest.java index 81d80bf..02c453d 100644 --- a/aai-traversal/src/test/java/org/onap/aai/rest/search/AccessServiceFromServiceInstanceTest.java +++ b/aai-traversal/src/test/java/org/onap/aai/rest/search/AccessServiceFromServiceInstanceTest.java @@ -18,9 +18,6 @@ * ============LICENSE_END========================================================= */ package org.onap.aai.rest.search; - -import static org.junit.Assert.*; - import java.util.Map; import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversal; diff --git a/aai-traversal/src/test/java/org/onap/aai/rest/search/CloudRegionFromVnfTest.java b/aai-traversal/src/test/java/org/onap/aai/rest/search/CloudRegionFromVnfTest.java index 087abac..7ea63cd 100644 --- a/aai-traversal/src/test/java/org/onap/aai/rest/search/CloudRegionFromVnfTest.java +++ b/aai-traversal/src/test/java/org/onap/aai/rest/search/CloudRegionFromVnfTest.java @@ -18,9 +18,6 @@ * ============LICENSE_END========================================================= */ package org.onap.aai.rest.search; - -import static org.junit.Assert.*; - import java.util.Map; import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversal; diff --git a/aai-traversal/src/test/java/org/onap/aai/rest/search/GetCustomerVPNBondingServiceDetailsTest.java b/aai-traversal/src/test/java/org/onap/aai/rest/search/GetCustomerVPNBondingServiceDetailsTest.java index bdd47f8..d589925 100644 --- a/aai-traversal/src/test/java/org/onap/aai/rest/search/GetCustomerVPNBondingServiceDetailsTest.java +++ b/aai-traversal/src/test/java/org/onap/aai/rest/search/GetCustomerVPNBondingServiceDetailsTest.java @@ -19,8 +19,6 @@ */ package org.onap.aai.rest.search; -import static org.junit.Assert.*; - import java.util.Map; import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversal; diff --git a/aai-traversal/src/test/java/org/onap/aai/rest/search/GetDHVLogicalLinkTest.java b/aai-traversal/src/test/java/org/onap/aai/rest/search/GetDHVLogicalLinkTest.java index 7ed3d34..717ceed 100644 --- a/aai-traversal/src/test/java/org/onap/aai/rest/search/GetDHVLogicalLinkTest.java +++ b/aai-traversal/src/test/java/org/onap/aai/rest/search/GetDHVLogicalLinkTest.java @@ -24,7 +24,6 @@ import static org.junit.Assert.*; import java.util.Map; import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversal; -import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversalSource; import org.apache.tinkerpop.gremlin.process.traversal.step.util.Tree; import org.apache.tinkerpop.gremlin.structure.T; import org.apache.tinkerpop.gremlin.structure.Vertex; diff --git a/aai-traversal/src/test/java/org/onap/aai/rest/search/GetServiceTopologyTest.java b/aai-traversal/src/test/java/org/onap/aai/rest/search/GetServiceTopologyTest.java index c9694d0..c69fd3b 100644 --- a/aai-traversal/src/test/java/org/onap/aai/rest/search/GetServiceTopologyTest.java +++ b/aai-traversal/src/test/java/org/onap/aai/rest/search/GetServiceTopologyTest.java @@ -22,7 +22,6 @@ package org.onap.aai.rest.search; import static org.junit.Assert.*; import java.util.ArrayList; -import java.util.Collection; import java.util.Map; import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversal; diff --git a/aai-traversal/src/test/java/org/onap/aai/rest/search/LinkedDevices_NewvceVserverTest.java b/aai-traversal/src/test/java/org/onap/aai/rest/search/LinkedDevices_NewvceVserverTest.java index 7866237..ad742b1 100644 --- a/aai-traversal/src/test/java/org/onap/aai/rest/search/LinkedDevices_NewvceVserverTest.java +++ b/aai-traversal/src/test/java/org/onap/aai/rest/search/LinkedDevices_NewvceVserverTest.java @@ -19,10 +19,6 @@ */ package org.onap.aai.rest.search; -import static org.junit.Assert.*; - -import java.util.ArrayList; -import java.util.List; import java.util.Map; import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversal; diff --git a/aai-traversal/src/test/java/org/onap/aai/rest/search/NetworkNameFromNetworkRoleQueryTest.java b/aai-traversal/src/test/java/org/onap/aai/rest/search/NetworkNameFromNetworkRoleQueryTest.java index e4acc25..4cc7a94 100644 --- a/aai-traversal/src/test/java/org/onap/aai/rest/search/NetworkNameFromNetworkRoleQueryTest.java +++ b/aai-traversal/src/test/java/org/onap/aai/rest/search/NetworkNameFromNetworkRoleQueryTest.java @@ -19,7 +19,6 @@ */ package org.onap.aai.rest.search; -import static org.junit.Assert.*; import java.util.Map; diff --git a/aai-traversal/src/test/java/org/onap/aai/rest/search/PnfTopologyQueryTest.java b/aai-traversal/src/test/java/org/onap/aai/rest/search/PnfTopologyQueryTest.java index b501ed6..51ddac8 100644 --- a/aai-traversal/src/test/java/org/onap/aai/rest/search/PnfTopologyQueryTest.java +++ b/aai-traversal/src/test/java/org/onap/aai/rest/search/PnfTopologyQueryTest.java @@ -25,7 +25,6 @@ import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversal; import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversalSource; import org.apache.tinkerpop.gremlin.structure.T; import org.apache.tinkerpop.gremlin.structure.Vertex; -import org.junit.Ignore; import org.junit.Test; import org.onap.aai.exceptions.AAIException; import org.onap.aai.serialization.db.exceptions.NoEdgeRuleFoundException; diff --git a/aai-traversal/src/test/java/org/onap/aai/rest/search/TopologyFromSubscriberNameAndServiceTypeTest.java b/aai-traversal/src/test/java/org/onap/aai/rest/search/TopologyFromSubscriberNameAndServiceTypeTest.java index 1b515b6..2a85e4a 100644 --- a/aai-traversal/src/test/java/org/onap/aai/rest/search/TopologyFromSubscriberNameAndServiceTypeTest.java +++ b/aai-traversal/src/test/java/org/onap/aai/rest/search/TopologyFromSubscriberNameAndServiceTypeTest.java @@ -19,13 +19,10 @@ */ package org.onap.aai.rest.search; -import com.google.common.base.CaseFormat; - import java.util.Map; import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversal; import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversalSource; -import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__; import org.apache.tinkerpop.gremlin.structure.T; import org.apache.tinkerpop.gremlin.structure.Vertex; import org.junit.Test; diff --git a/aai-traversal/src/test/java/org/onap/aai/rest/search/UcpeTopologyQueryTest.java b/aai-traversal/src/test/java/org/onap/aai/rest/search/UcpeTopologyQueryTest.java index cf2b1c7..8bb1c60 100644 --- a/aai-traversal/src/test/java/org/onap/aai/rest/search/UcpeTopologyQueryTest.java +++ b/aai-traversal/src/test/java/org/onap/aai/rest/search/UcpeTopologyQueryTest.java @@ -25,7 +25,6 @@ import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversal; import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversalSource; import org.apache.tinkerpop.gremlin.structure.T; import org.apache.tinkerpop.gremlin.structure.Vertex; -import org.junit.Ignore; import org.junit.Test; import org.onap.aai.exceptions.AAIException; import org.onap.aai.serialization.db.exceptions.NoEdgeRuleFoundException; diff --git a/aai-traversal/src/test/java/org/onap/aai/rest/search/VserverLinterfacesFromVnfcTest.java b/aai-traversal/src/test/java/org/onap/aai/rest/search/VserverLinterfacesFromVnfcTest.java index d272273..8f5e719 100644 --- a/aai-traversal/src/test/java/org/onap/aai/rest/search/VserverLinterfacesFromVnfcTest.java +++ b/aai-traversal/src/test/java/org/onap/aai/rest/search/VserverLinterfacesFromVnfcTest.java @@ -19,8 +19,6 @@ */ package org.onap.aai.rest.search; -import static org.junit.Assert.*; - import java.util.Map; import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversal; diff --git a/aai-traversal/src/test/java/org/onap/aai/rest/search/VserverLogicallinkFromPServerTest.java b/aai-traversal/src/test/java/org/onap/aai/rest/search/VserverLogicallinkFromPServerTest.java index aa3a9d1..617d712 100644 --- a/aai-traversal/src/test/java/org/onap/aai/rest/search/VserverLogicallinkFromPServerTest.java +++ b/aai-traversal/src/test/java/org/onap/aai/rest/search/VserverLogicallinkFromPServerTest.java @@ -19,8 +19,6 @@ */ package org.onap.aai.rest.search; -import static org.junit.Assert.*; - import java.util.Map; import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversal; diff --git a/aai-traversal/src/test/java/org/onap/aai/rest/util/EchoResponseTest.java b/aai-traversal/src/test/java/org/onap/aai/rest/util/EchoResponseTest.java index fb71599..26b775f 100644 --- a/aai-traversal/src/test/java/org/onap/aai/rest/util/EchoResponseTest.java +++ b/aai-traversal/src/test/java/org/onap/aai/rest/util/EchoResponseTest.java @@ -21,7 +21,7 @@ package org.onap.aai.rest.util; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; -import static org.mockito.ArgumentMatchers.anyObject;import static org.mockito.ArgumentMatchers.anyObject; +import static org.mockito.ArgumentMatchers.anyObject; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; diff --git a/aai-traversal/src/test/java/org/onap/aai/transforms/MapTraverserTest.java b/aai-traversal/src/test/java/org/onap/aai/transforms/MapTraverserTest.java index 5ae5603..97150fe 100644 --- a/aai-traversal/src/test/java/org/onap/aai/transforms/MapTraverserTest.java +++ b/aai-traversal/src/test/java/org/onap/aai/transforms/MapTraverserTest.java @@ -25,8 +25,6 @@ import java.io.IOException; import java.util.Map; import org.junit.Test; -import org.onap.aai.transforms.LowerCamelToLowerHyphenConverter; -import org.onap.aai.transforms.MapTraverser; public class MapTraverserTest { diff --git a/aai-traversal/src/test/resources/application-onap-test.properties b/aai-traversal/src/test/resources/application-onap-test.properties index 9241af4..05be0c7 100644 --- a/aai-traversal/src/test/resources/application-onap-test.properties +++ b/aai-traversal/src/test/resources/application-onap-test.properties @@ -29,13 +29,6 @@ server.local.startpath=src/main/resources server.basic.auth.location=${server.local.startpath}/etc/auth/realm.properties server.port=8446 -server.ssl.enabled-protocols=TLSv1.1,TLSv1.2 -server.ssl.key-store=${server.local.startpath}/etc/auth/aai-client-cert.p12 -server.ssl.key-store-password=password(1i9a1u2a1unz1lr61wn51wn11lss1unz1u301i6o) -server.ssl.trust-store=${server.local.startpath}/etc/auth/tomcat_keystore -server.ssl.trust-store-password=password(1i9a1u2a1unz1lr61wn51wn11lss1unz1u301i6o) -server.ssl.client-auth=want -server.ssl.key-store-type=JKS # Schema related attributes for the oxm and edges # Any additional schema related attributes should start with prefix schema diff --git a/aai-traversal/src/test/resources/application-test.properties b/aai-traversal/src/test/resources/application-test.properties index 3fc66a4..e65d708 100644 --- a/aai-traversal/src/test/resources/application-test.properties +++ b/aai-traversal/src/test/resources/application-test.properties @@ -11,7 +11,6 @@ server.servlet.context-path=${schema.uri.base.path} spring.autoconfigure.exclude=\ org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration,\ org.springframework.boot.autoconfigure.orm.jpa.HibernateJpaAutoConfiguration,\ - org.keycloak.adapters.springboot.KeycloakAutoConfiguration,\ org.springframework.boot.autoconfigure.security.servlet.SecurityAutoConfiguration,\ org.springframework.boot.actuate.autoconfigure.security.servlet.ManagementWebSecurityAutoConfiguration @@ -82,3 +81,7 @@ management.metrics.web.server.request.autotime.enabled=false scrape.uri.metrics=true aai.notifications.enabled=false + +aai.basic-auth.enabled=true +aai.basic-auth.users[0].username=AAI +aai.basic-auth.users[0].password=AAI diff --git a/aai-traversal/src/test/resources/it/application-keycloak-test.properties b/aai-traversal/src/test/resources/it/application-keycloak-test.properties deleted file mode 100644 index 632ec81..0000000 --- a/aai-traversal/src/test/resources/it/application-keycloak-test.properties +++ /dev/null @@ -1,16 +0,0 @@ -test.keycloak.realm.json=it/multi-tenancy-realm.json -test.keycloak.client.secret=secret -test.keycloak.admin.cli=admin-cli -test.keycloak.auth-server-port=58181 - -keycloak.auth-server-url=http://localhost:58181/auth -keycloak.realm=aai-resources -keycloak.resource=aai-resources-app -keycloak.public-client=true -keycloak.principal-attribute=preferred_username - -keycloak.ssl-required=external -keycloak.bearer-only=true - -multi.tenancy.enabled=true -spring.profiles.active=production,keycloak diff --git a/aai-traversal/src/test/resources/it/multi-tenancy-realm.json b/aai-traversal/src/test/resources/it/multi-tenancy-realm.json deleted file mode 100644 index 401187b..0000000 --- a/aai-traversal/src/test/resources/it/multi-tenancy-realm.json +++ /dev/null @@ -1,173 +0,0 @@ -{ - "id": "aai-resources", - "realm": "aai-resources", - "notBefore": 0, - "revokeRefreshToken": false, - "refreshTokenMaxReuse": 0, - "accessTokenLifespan": 300, - "accessTokenLifespanForImplicitFlow": 900, - "ssoSessionIdleTimeout": 1800, - "ssoSessionMaxLifespan": 36000, - "ssoSessionIdleTimeoutRememberMe": 0, - "ssoSessionMaxLifespanRememberMe": 0, - "offlineSessionIdleTimeout": 2592000, - "offlineSessionMaxLifespanEnabled": false, - "offlineSessionMaxLifespan": 5184000, - "clientSessionIdleTimeout": 0, - "clientSessionMaxLifespan": 0, - "clientOfflineSessionIdleTimeout": 0, - "clientOfflineSessionMaxLifespan": 0, - "accessCodeLifespan": 60, - "accessCodeLifespanUserAction": 300, - "accessCodeLifespanLogin": 1800, - "actionTokenGeneratedByAdminLifespan": 43200, - "actionTokenGeneratedByUserLifespan": 300, - "enabled": true, - "sslRequired": "external", - "registrationAllowed": false, - "registrationEmailAsUsername": false, - "rememberMe": false, - "verifyEmail": false, - "loginWithEmailAllowed": true, - "duplicateEmailsAllowed": false, - "resetPasswordAllowed": false, - "editUsernameAllowed": false, - "bruteForceProtected": false, - "permanentLockout": false, - "maxFailureWaitSeconds": 900, - "minimumQuickLoginWaitSeconds": 60, - "waitIncrementSeconds": 60, - "quickLoginCheckMilliSeconds": 1000, - "maxDeltaTimeSeconds": 43200, - "failureFactor": 30, - "users": [ - { - "username": "admin", - "enabled": true, - "credentials": [ - { - "type": "password", - "value": "admin" - } - ], - "clientRoles": { - "realm-management": ["manage-users", "view-clients", "view-realm", "view-users"] - } - }, - { - "id": "ran", - "username": "ran", - "enabled": true, - "credentials": [ - { - "type": "password", - "value": "ran" - } - ], - "realmRoles": [ - "operator" - ] - }, - { - "id": "bob", - "username": "bob", - "enabled": true, - "credentials": [ - { - "type": "password", - "value": "bob" - } - ], - "realmRoles": [ - "operator_readOnly" - ] - }, - { - "id": "ted", - "username": "ted", - "enabled": true, - "credentials": [ - { - "type": "password", - "value": "ted" - } - ], - "realmRoles": [ - "selector" - ] - } - ], - "roles": { - "realm": [ - { - "name": "operator", - "description": "Operator privileges" - }, - { - "name": "operator_readOnly", - "description": "Operator's read only privileges" - }, - { - "name": "selector", - "description": "Selector privileges" - }, - { - "name": "selector_readOnly", - "description": "Selector's read only privileges" - }, - { - "name": "admin", - "description": "Administrator privileges" - } - ] - }, - "clients": [ - { - "clientId": "aai-resources-app", - "enabled": true, - "secret": "secret", - "directAccessGrantsEnabled": true, - "authorizationServicesEnabled": true, - "authorizationSettings": { - "allowRemoteResourceManagement": true, - "policyEnforcementMode": "ENFORCING" - } - } - ], - "defaultDefaultClientScopes": [ - "roles", - "email", - "web-origins", - "profile", - "role_list" - ], - "clientScopes": [ - { - "id": "0f7dfd8b-c230-4664-8d77-da85bcc4fe2a", - "name": "roles", - "description": "OpenID Connect scope for add user roles to the access token", - "protocol": "openid-connect", - "attributes": { - "include.in.token.scope": "true", - "display.on.consent.screen": "true", - "consent.screen.text": "${rolesScopeConsentText}" - }, - "protocolMappers": [ - { - "id": "4b9f8798-8990-4c0d-87d3-034e72655e3b", - "name": "realm roles", - "protocol": "openid-connect", - "protocolMapper": "oidc-usermodel-realm-role-mapper", - "consentRequired": false, - "config": { - "multivalued": "true", - "user.attribute": "foo", - "access.token.claim": "true", - "claim.name": "realm_access.roles", - "jsonType.label": "String" - } - } - ] - } - ] -}
\ No newline at end of file |