From 741ca84296546a70ae1ad204b1b6ee4940eecfe7 Mon Sep 17 00:00:00 2001 From: Venkata Harish K Kajur Date: Fri, 15 Sep 2017 16:51:00 -0400 Subject: Increase the code coverage for sonar to 30% Issue-ID: AAI-212 Change-Id: I823f697733c4b6ae44d36f018b2d093316499add Signed-off-by: Venkata Harish K Kajur --- .../openecomp/aai/dbgraphmap/SearchGraphTest.java | 6 +- .../interceptors/AAILogJAXRSInInterceptorTest.java | 6 +- .../AAILogJAXRSOutInterceptorTest.java | 132 +--------- .../interceptors/PostAaiAjscInterceptorTest.java | 6 +- .../interceptors/PreAaiAjscInterceptorTest.java | 6 +- .../openecomp/aai/rest/ExceptionHandlerTest.java | 6 +- .../search/ModelAndNamedQueryRestProviderTest.java | 185 ++++++++++++++ .../aai/rest/search/SearchProviderTest.java | 266 +++++++++++++++++++++ .../openecomp/aai/rest/util/EchoResponseTest.java | 6 +- .../payloads/named-queries/named-query.json | 18 ++ 10 files changed, 490 insertions(+), 147 deletions(-) create mode 100644 aai-traversal/src/test/java/org/openecomp/aai/rest/search/ModelAndNamedQueryRestProviderTest.java create mode 100644 aai-traversal/src/test/java/org/openecomp/aai/rest/search/SearchProviderTest.java create mode 100644 aai-traversal/src/test/resources/payloads/named-queries/named-query.json diff --git a/aai-traversal/src/test/java/org/openecomp/aai/dbgraphmap/SearchGraphTest.java b/aai-traversal/src/test/java/org/openecomp/aai/dbgraphmap/SearchGraphTest.java index 3dc2713..11804e5 100644 --- a/aai-traversal/src/test/java/org/openecomp/aai/dbgraphmap/SearchGraphTest.java +++ b/aai-traversal/src/test/java/org/openecomp/aai/dbgraphmap/SearchGraphTest.java @@ -7,9 +7,9 @@ * 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. @@ -145,4 +145,4 @@ public class SearchGraphTest { Response response = searchGraph.runGenericQuery(httpHeaders, "cloud-region", keys, includeStrings, 1, dbEngine, loader, urlBuilder); System.out.println(response); } -} +} \ No newline at end of file diff --git a/aai-traversal/src/test/java/org/openecomp/aai/interceptors/AAILogJAXRSInInterceptorTest.java b/aai-traversal/src/test/java/org/openecomp/aai/interceptors/AAILogJAXRSInInterceptorTest.java index 5687d72..d265299 100644 --- a/aai-traversal/src/test/java/org/openecomp/aai/interceptors/AAILogJAXRSInInterceptorTest.java +++ b/aai-traversal/src/test/java/org/openecomp/aai/interceptors/AAILogJAXRSInInterceptorTest.java @@ -7,9 +7,9 @@ * 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. @@ -200,4 +200,4 @@ public class AAILogJAXRSInInterceptorTest { aaiLogJAXRSInInterceptor.handleMessage(message); } -} +} \ No newline at end of file diff --git a/aai-traversal/src/test/java/org/openecomp/aai/interceptors/AAILogJAXRSOutInterceptorTest.java b/aai-traversal/src/test/java/org/openecomp/aai/interceptors/AAILogJAXRSOutInterceptorTest.java index 4114018..df2feec 100644 --- a/aai-traversal/src/test/java/org/openecomp/aai/interceptors/AAILogJAXRSOutInterceptorTest.java +++ b/aai-traversal/src/test/java/org/openecomp/aai/interceptors/AAILogJAXRSOutInterceptorTest.java @@ -7,9 +7,9 @@ * 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. @@ -107,130 +107,4 @@ public class AAILogJAXRSOutInterceptorTest { loggingCallback.onClose(newOut); } -// @Test -// public void testHandleMessageWhenUUIDHasMultiple() throws IOException { -// -// Map> headers = new HashMap<>(); -// -// headers.put("X-FromAppId", Arrays.asList("JUNIT")); -// headers.put("X-TransactionId", Arrays.asList("jfasodjf:fjaosjfidsaj:afsidjfaodfja")); -// headers.put("Content-Type", Arrays.asList("application/json")); -// headers.put("Accept", Arrays.asList("application/json")); -// -// when(message.getExchange()).thenReturn(exchange); -// when(message.getContent(InputStream.class)).thenReturn(is); -// when(message.get(Message.PROTOCOL_HEADERS)).thenReturn(headers); -// when(message.get(Message.CONTENT_TYPE)).thenReturn("*/*"); -// -// when(message.get("CamelHttpUrl")).thenReturn("/somestring"); -// aaiLogJAXRSOutInterceptor.handleMessage(message); -// } -// -// @Test -// public void testHandleMessageWhenMissingTransactionId() throws IOException { -// -// Map> headers = new HashMap<>(); -// -// headers.put("X-FromAppId", Arrays.asList("JUNIT")); -// headers.put("Content-Type", Arrays.asList("application/json")); -// headers.put("Accept", Arrays.asList("application/json")); -// -// when(message.getExchange()).thenReturn(exchange); -// when(message.getContent(InputStream.class)).thenReturn(is); -// when(message.get(Message.PROTOCOL_HEADERS)).thenReturn(headers); -// when(message.get(Message.CONTENT_TYPE)).thenReturn("*/*"); -// -// when(message.get("CamelHttpUrl")).thenReturn("/somestring"); -// aaiLogJAXRSOutInterceptor.handleMessage(message); -// } -// -// @Test -// public void testHandleMessageWhenMissingContentType() throws IOException { -// -// Map> headers = new HashMap<>(); -// -// headers.put("X-FromAppId", Arrays.asList("JUNIT")); -// headers.put("X-TransactionId", Arrays.asList("jfasodjf:fjaosjfidsaj:afsidjfaodfja")); -// headers.put("Accept", Arrays.asList("application/json")); -// -// when(message.getExchange()).thenReturn(exchange); -// when(message.getContent(InputStream.class)).thenReturn(is); -// when(message.get(Message.PROTOCOL_HEADERS)).thenReturn(headers); -// when(message.get(Message.CONTENT_TYPE)).thenReturn("*/*"); -// -// when(message.get("CamelHttpUrl")).thenReturn("/somestring"); -// aaiLogJAXRSOutInterceptor.handleMessage(message); -// } -// -// @Test -// public void testHandleMessageWhenQueryExistsAndUriEcho() throws IOException { -// -// Map> headers = new HashMap<>(); -// -// headers.put("X-FromAppId", Arrays.asList("JUNIT")); -// headers.put("X-TransactionId", Arrays.asList("jfasodjf:fjaosjfidsaj:afsidjfaodfja")); -// headers.put("Content-Type", Arrays.asList("application/json")); -// headers.put("Accept", Arrays.asList("application/json")); -// -// when(message.getExchange()).thenReturn(exchange); -// when(message.getContent(InputStream.class)).thenReturn(is); -// when(message.get(Message.PROTOCOL_HEADERS)).thenReturn(headers); -// when(message.get(Message.CONTENT_TYPE)).thenReturn("*/*"); -// when(message.get(Message.QUERY_STRING)).thenReturn(null); -// when(exchange.containsKey("AAI_LOGGING_HBASE_ENABLED")).thenReturn(true); -// when(exchange.remove("AAI_LOGGING_HBASE_ENABLED")).thenReturn(""); -// when(exchange.containsKey("AAI_LOGGING_TRACE_ENABLED")).thenReturn(true); -// when(exchange.remove("AAI_LOGGING_TRACE_ENABLED")).thenReturn(""); -// when(message.get("CamelHttpUrl")).thenReturn("/util/echo"); -// aaiLogJAXRSOutInterceptor.handleMessage(message); -// } -// -// @Test -// public void testHandleMessageWhenQueryExistsAndUriTranslog() throws IOException { -// -// Map> headers = new HashMap<>(); -// -// headers.put("X-FromAppId", Arrays.asList("JUNIT")); -// headers.put("X-TransactionId", Arrays.asList("jfasodjf:fjaosjfidsaj:afsidjfaodfja")); -// headers.put("Content-Type", Arrays.asList("application/json")); -// headers.put("Accept", Arrays.asList("application/json")); -// -// when(message.getExchange()).thenReturn(exchange); -// when(message.getContent(InputStream.class)).thenReturn(is); -// when(message.get(Message.PROTOCOL_HEADERS)).thenReturn(headers); -// when(message.get(Message.CONTENT_TYPE)).thenReturn("*/*"); -// when(message.get(Message.QUERY_STRING)).thenReturn(null); -// when(exchange.containsKey("AAI_LOGGING_HBASE_ENABLED")).thenReturn(true); -// when(exchange.remove("AAI_LOGGING_HBASE_ENABLED")).thenReturn(""); -// when(exchange.containsKey("AAI_LOGGING_TRACE_ENABLED")).thenReturn(true); -// when(exchange.remove("AAI_LOGGING_TRACE_ENABLED")).thenReturn(""); -// when(message.get("CamelHttpUrl")).thenReturn("/translog/"); -// aaiLogJAXRSOutInterceptor.handleMessage(message); -// } -// -// @Test -// public void testHandleMessageWhenPutMessageKeyReturnsException() throws IOException { -// -// Map> headers = new HashMap<>(); -// -// headers.put("X-FromAppId", Arrays.asList("JUNIT")); -// headers.put("X-TransactionId", Arrays.asList("jfasodjf:fjaosjfidsaj:afsidjfaodfja")); -// headers.put("Content-Type", Arrays.asList("application/json")); -// headers.put("Accept", Arrays.asList("application/json")); -// -// when(message.getExchange()).thenReturn(exchange); -// when(message.getContent(InputStream.class)).thenReturn(is); -// when(message.get(Message.PROTOCOL_HEADERS)).thenReturn(headers); -// when(message.get(Message.CONTENT_TYPE)).thenReturn("*/*"); -// when(message.get(Message.QUERY_STRING)).thenReturn(null); -// when(exchange.containsKey("AAI_LOGGING_HBASE_ENABLED")).thenReturn(true); -// when(exchange.remove("AAI_LOGGING_HBASE_ENABLED")).thenReturn(""); -// when(exchange.containsKey("AAI_LOGGING_TRACE_ENABLED")).thenReturn(true); -// when(exchange.remove("AAI_LOGGING_TRACE_ENABLED")).thenReturn(""); -// when(message.get("CamelHttpUrl")).thenReturn("/translog/"); -// when(message.get(Message.ENCODING)).thenReturn("http"); -// when(message.get(Message.RESPONSE_CODE)).thenReturn(200); -// -// aaiLogJAXRSOutInterceptor.handleMessage(message); -// } -} +} \ No newline at end of file diff --git a/aai-traversal/src/test/java/org/openecomp/aai/interceptors/PostAaiAjscInterceptorTest.java b/aai-traversal/src/test/java/org/openecomp/aai/interceptors/PostAaiAjscInterceptorTest.java index 17f5c44..3aa2aa9 100644 --- a/aai-traversal/src/test/java/org/openecomp/aai/interceptors/PostAaiAjscInterceptorTest.java +++ b/aai-traversal/src/test/java/org/openecomp/aai/interceptors/PostAaiAjscInterceptorTest.java @@ -7,9 +7,9 @@ * 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. @@ -70,4 +70,4 @@ public class PostAaiAjscInterceptorTest { assertTrue("Expecting the post interceptor to return success regardless", success); } -} +} \ No newline at end of file diff --git a/aai-traversal/src/test/java/org/openecomp/aai/interceptors/PreAaiAjscInterceptorTest.java b/aai-traversal/src/test/java/org/openecomp/aai/interceptors/PreAaiAjscInterceptorTest.java index 766b99f..9162019 100644 --- a/aai-traversal/src/test/java/org/openecomp/aai/interceptors/PreAaiAjscInterceptorTest.java +++ b/aai-traversal/src/test/java/org/openecomp/aai/interceptors/PreAaiAjscInterceptorTest.java @@ -7,9 +7,9 @@ * 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. @@ -59,4 +59,4 @@ public class PreAaiAjscInterceptorTest { assertTrue("Expecting the post interceptor to return success regardless", success); } -} +} \ No newline at end of file diff --git a/aai-traversal/src/test/java/org/openecomp/aai/rest/ExceptionHandlerTest.java b/aai-traversal/src/test/java/org/openecomp/aai/rest/ExceptionHandlerTest.java index 388e8e4..8e2bb94 100644 --- a/aai-traversal/src/test/java/org/openecomp/aai/rest/ExceptionHandlerTest.java +++ b/aai-traversal/src/test/java/org/openecomp/aai/rest/ExceptionHandlerTest.java @@ -7,9 +7,9 @@ * 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. @@ -152,4 +152,4 @@ public class ExceptionHandlerTest { assertNotNull(response.getEntity()); assertEquals(Response.Status.BAD_REQUEST.getStatusCode(), response.getStatus()); } -} +} \ No newline at end of file diff --git a/aai-traversal/src/test/java/org/openecomp/aai/rest/search/ModelAndNamedQueryRestProviderTest.java b/aai-traversal/src/test/java/org/openecomp/aai/rest/search/ModelAndNamedQueryRestProviderTest.java new file mode 100644 index 0000000..5813ef1 --- /dev/null +++ b/aai-traversal/src/test/java/org/openecomp/aai/rest/search/ModelAndNamedQueryRestProviderTest.java @@ -0,0 +1,185 @@ +/*- + * ============LICENSE_START======================================================= + * org.openecomp.aai + * ================================================================================ + * Copyright (C) 2017 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.openecomp.aai.rest.search; + +import com.att.eelf.configuration.EELFLogger; +import com.att.eelf.configuration.EELFManager; +import org.apache.commons.io.IOUtils; +import org.junit.Before; +import org.junit.Test; +import org.mockito.Mockito; +import org.openecomp.aai.dbmap.DBConnectionType; +import org.openecomp.aai.introspection.Loader; +import org.openecomp.aai.introspection.LoaderFactory; +import org.openecomp.aai.introspection.ModelType; +import org.openecomp.aai.introspection.Version; +import org.openecomp.aai.serialization.db.DBSerializer; +import org.openecomp.aai.serialization.engines.QueryStyle; +import org.openecomp.aai.serialization.engines.TitanDBEngine; +import org.openecomp.aai.serialization.engines.TransactionalGraphEngine; +import org.openecomp.aai.serialization.queryformats.utils.UrlBuilder; + +import javax.servlet.http.HttpServletRequest; +import javax.ws.rs.core.*; +import java.io.IOException; +import java.io.InputStream; +import java.util.*; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; +import static org.mockito.Matchers.anyObject; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; + +public class ModelAndNamedQueryRestProviderTest { + + protected static final MediaType APPLICATION_JSON = MediaType.valueOf("application/json"); + + private static final Set VALID_HTTP_STATUS_CODES = new HashSet<>(); + + private static final Version version = Version.getLatest(); + private static final ModelType introspectorFactoryType = ModelType.MOXY; + private static final QueryStyle queryStyle = QueryStyle.TRAVERSAL; + private static final DBConnectionType type = DBConnectionType.REALTIME; + + private Loader loader; + private TransactionalGraphEngine dbEngine; + + static { + VALID_HTTP_STATUS_CODES.add(200); + VALID_HTTP_STATUS_CODES.add(201); + VALID_HTTP_STATUS_CODES.add(204); + } + + private ModelAndNamedQueryRestProvider modelAndNamedQueryRestProvider; + + private HttpHeaders httpHeaders; + + private UriInfo uriInfo; + + private MultivaluedMap headersMultiMap; + private MultivaluedMap queryParameters; + + private List aaiRequestContextList; + + private List outputMediaTypes; + + private static final EELFLogger logger = EELFManager.getInstance().getLogger(ModelAndNamedQueryRestProviderTest.class.getName()); + + @Before + public void setup(){ + logger.info("Starting the setup for the integration tests of Rest Endpoints"); + System.setProperty("AJSC_HOME", "."); + System.setProperty("BUNDLECONFIG_DIR", "bundleconfig-local"); + + modelAndNamedQueryRestProvider = new ModelAndNamedQueryRestProvider(); + httpHeaders = mock(HttpHeaders.class); + uriInfo = mock(UriInfo.class); + + headersMultiMap = new MultivaluedHashMap<>(); + queryParameters = Mockito.spy(new MultivaluedHashMap<>()); + + headersMultiMap.add("X-FromAppId", "JUNIT"); + headersMultiMap.add("X-TransactionId", UUID.randomUUID().toString()); + headersMultiMap.add("Real-Time", "true"); + headersMultiMap.add("Accept", "application/json"); + headersMultiMap.add("aai-request-context", ""); + + outputMediaTypes = new ArrayList<>(); + outputMediaTypes.add(APPLICATION_JSON); + + aaiRequestContextList = new ArrayList<>(); + aaiRequestContextList.add(""); + + when(httpHeaders.getAcceptableMediaTypes()).thenReturn(outputMediaTypes); + when(httpHeaders.getRequestHeaders()).thenReturn(headersMultiMap); + when(httpHeaders.getRequestHeader("X-FromAppId")).thenReturn(Arrays.asList("JUNIT")); + when(httpHeaders.getRequestHeader("X-TransactionId")).thenReturn(Arrays.asList("JUNIT")); + + when(httpHeaders.getRequestHeader("aai-request-context")).thenReturn(aaiRequestContextList); + + + when(uriInfo.getQueryParameters()).thenReturn(queryParameters); + when(uriInfo.getQueryParameters(false)).thenReturn(queryParameters); + + // TODO - Check if this is valid since RemoveDME2QueryParameters seems to be very unreasonable + Mockito.doReturn(null).when(queryParameters).remove(anyObject()); + + when(httpHeaders.getMediaType()).thenReturn(APPLICATION_JSON); + loader = LoaderFactory.createLoaderForVersion(introspectorFactoryType, version); + dbEngine = new TitanDBEngine( + queryStyle, + type, + loader); + } + + @Test + public void testNamedQueryWhenNoDataToBeFoundReturnHttpNotFound() throws Exception { + + String queryParameters = getPayload("payloads/named-queries/named-query.json"); + HttpServletRequest request = mock(HttpServletRequest.class); + + when(request.getContentType()).thenReturn("application/json"); + + Response response = modelAndNamedQueryRestProvider.getNamedQueryResponse( + httpHeaders, + request, + queryParameters + ); + + assertNotNull(response); + assertEquals(Response.Status.NOT_FOUND.getStatusCode(), response.getStatus()); + } + + @Test + public void testNamedQueryInvalidHeaders() throws Exception { + + httpHeaders = mock(HttpHeaders.class); + + when(httpHeaders.getRequestHeader("X-FromAppId")).thenThrow(IllegalArgumentException.class); + when(httpHeaders.getAcceptableMediaTypes()).thenReturn(outputMediaTypes); + + DBSerializer serializer = new DBSerializer(version, dbEngine, introspectorFactoryType, "JUNIT"); + UrlBuilder urlBuilder = new UrlBuilder(version, serializer); + + Response response = modelAndNamedQueryRestProvider.getNamedQueryResponse( + httpHeaders, + null, + "cloud-region" + ); + + assertNotNull(response); + assertEquals(Response.Status.INTERNAL_SERVER_ERROR.getStatusCode(), response.getStatus()); + } + + public String getPayload(String filename) throws IOException { + + InputStream inputStream = getClass() + .getClassLoader() + .getResourceAsStream(filename); + + String message = String.format("Unable to find the %s in src/test/resources", filename); + assertNotNull(message, inputStream); + + String resource = IOUtils.toString(inputStream); + return resource; + } +} diff --git a/aai-traversal/src/test/java/org/openecomp/aai/rest/search/SearchProviderTest.java b/aai-traversal/src/test/java/org/openecomp/aai/rest/search/SearchProviderTest.java new file mode 100644 index 0000000..6b922bf --- /dev/null +++ b/aai-traversal/src/test/java/org/openecomp/aai/rest/search/SearchProviderTest.java @@ -0,0 +1,266 @@ +/*- + * ============LICENSE_START======================================================= + * org.openecomp.aai + * ================================================================================ + * Copyright (C) 2017 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.openecomp.aai.rest.search; + +import com.att.eelf.configuration.EELFLogger; +import com.att.eelf.configuration.EELFManager; +import org.junit.Before; +import org.junit.Test; +import org.mockito.Mockito; +import org.openecomp.aai.dbmap.DBConnectionType; +import org.openecomp.aai.introspection.Loader; +import org.openecomp.aai.introspection.LoaderFactory; +import org.openecomp.aai.introspection.ModelType; +import org.openecomp.aai.introspection.Version; +import org.openecomp.aai.serialization.db.DBSerializer; +import org.openecomp.aai.serialization.engines.QueryStyle; +import org.openecomp.aai.serialization.engines.TitanDBEngine; +import org.openecomp.aai.serialization.engines.TransactionalGraphEngine; +import org.openecomp.aai.serialization.queryformats.utils.UrlBuilder; + +import javax.ws.rs.core.*; +import java.util.*; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; +import static org.mockito.Matchers.anyObject; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; + +public class SearchProviderTest { + + protected static final MediaType APPLICATION_JSON = MediaType.valueOf("application/json"); + + private static final Set VALID_HTTP_STATUS_CODES = new HashSet<>(); + + private static final Version version = Version.getLatest(); + private static final ModelType introspectorFactoryType = ModelType.MOXY; + private static final QueryStyle queryStyle = QueryStyle.TRAVERSAL; + private static final DBConnectionType type = DBConnectionType.REALTIME; + + private Loader loader; + private TransactionalGraphEngine dbEngine; + + static { + VALID_HTTP_STATUS_CODES.add(200); + VALID_HTTP_STATUS_CODES.add(201); + VALID_HTTP_STATUS_CODES.add(204); + } + + private SearchProvider searchProvider; + + private HttpHeaders httpHeaders; + + private UriInfo uriInfo; + + private MultivaluedMap headersMultiMap; + private MultivaluedMap queryParameters; + + private List aaiRequestContextList; + + private List outputMediaTypes; + + private static final EELFLogger logger = EELFManager.getInstance().getLogger(SearchProviderTest.class.getName()); + + @Before + public void setup(){ + logger.info("Starting the setup for the integration tests of Rest Endpoints"); + System.setProperty("AJSC_HOME", "."); + System.setProperty("BUNDLECONFIG_DIR", "bundleconfig-local"); + + searchProvider = new SearchProvider(); + httpHeaders = mock(HttpHeaders.class); + uriInfo = mock(UriInfo.class); + + headersMultiMap = new MultivaluedHashMap<>(); + queryParameters = Mockito.spy(new MultivaluedHashMap<>()); + + headersMultiMap.add("X-FromAppId", "JUNIT"); + headersMultiMap.add("X-TransactionId", UUID.randomUUID().toString()); + headersMultiMap.add("Real-Time", "true"); + headersMultiMap.add("Accept", "application/json"); + headersMultiMap.add("aai-request-context", ""); + + outputMediaTypes = new ArrayList<>(); + outputMediaTypes.add(APPLICATION_JSON); + + aaiRequestContextList = new ArrayList<>(); + aaiRequestContextList.add(""); + + when(httpHeaders.getAcceptableMediaTypes()).thenReturn(outputMediaTypes); + when(httpHeaders.getRequestHeaders()).thenReturn(headersMultiMap); + when(httpHeaders.getRequestHeader("X-FromAppId")).thenReturn(Arrays.asList("JUNIT")); + when(httpHeaders.getRequestHeader("X-TransactionId")).thenReturn(Arrays.asList("JUNIT")); + + when(httpHeaders.getRequestHeader("aai-request-context")).thenReturn(aaiRequestContextList); + + + when(uriInfo.getQueryParameters()).thenReturn(queryParameters); + when(uriInfo.getQueryParameters(false)).thenReturn(queryParameters); + + // TODO - Check if this is valid since RemoveDME2QueryParameters seems to be very unreasonable + Mockito.doReturn(null).when(queryParameters).remove(anyObject()); + + when(httpHeaders.getMediaType()).thenReturn(APPLICATION_JSON); + loader = LoaderFactory.createLoaderForVersion(introspectorFactoryType, version); + dbEngine = new TitanDBEngine( + queryStyle, + type, + loader); + } + + @Test + public void testNodesQueryInvalidData() throws Exception { + + List keys = new ArrayList<>(); + keys.add("cloud-region.cloud-owner:test-aic"); + + List includeStrings = new ArrayList<>(); + includeStrings.add("cloud-region"); + + DBSerializer serializer = new DBSerializer(version, dbEngine, introspectorFactoryType, "JUNIT"); + UrlBuilder urlBuilder = new UrlBuilder(version, serializer); + + Response response = searchProvider.getNodesQueryResponse( + httpHeaders, + null, + "cloud-region", + keys, + includeStrings, + version.toString() + ); + + assertNotNull(response); + assertEquals(Response.Status.BAD_REQUEST.getStatusCode(), response.getStatus()); + + response = searchProvider.getNodesQueryResponse( + httpHeaders, + null, + "cloud-region", + keys, + includeStrings, + "latest" + ); + + assertNotNull(response); + assertEquals(Response.Status.BAD_REQUEST.getStatusCode(), response.getStatus()); + } + + @Test + public void testNodesQueryInvalidHeaders() throws Exception { + + List keys = new ArrayList<>(); + keys.add("cloud-region.cloud-owner:test-aic"); + + List includeStrings = new ArrayList<>(); + includeStrings.add("cloud-region"); + + httpHeaders = mock(HttpHeaders.class); + + when(httpHeaders.getRequestHeader("X-FromAppId")).thenThrow(IllegalArgumentException.class); + when(httpHeaders.getAcceptableMediaTypes()).thenReturn(outputMediaTypes); + + DBSerializer serializer = new DBSerializer(version, dbEngine, introspectorFactoryType, "JUNIT"); + UrlBuilder urlBuilder = new UrlBuilder(version, serializer); + + Response response = searchProvider.getNodesQueryResponse( + httpHeaders, + null, + "cloud-region", + keys, + includeStrings, + version.toString() + ); + + assertNotNull(response); + assertEquals(Response.Status.INTERNAL_SERVER_ERROR.getStatusCode(), response.getStatus()); + } + + @Test + public void testGenericQueryInvalidData() throws Exception { + + List keys = new ArrayList<>(); + keys.add("cloud-region.cloud-owner:test-aic"); + + List includeStrings = new ArrayList<>(); + includeStrings.add("cloud-region"); + + DBSerializer serializer = new DBSerializer(version, dbEngine, introspectorFactoryType, "JUNIT"); + UrlBuilder urlBuilder = new UrlBuilder(version, serializer); + + Response response = searchProvider.getGenericQueryResponse( + httpHeaders, + null, + "cloud-region", + keys, + includeStrings, + 0, + version.toString() + ); + + assertNotNull(response); + assertEquals(Response.Status.BAD_REQUEST.getStatusCode(), response.getStatus()); + + response = searchProvider.getNodesQueryResponse( + httpHeaders, + null, + "cloud-region", + keys, + includeStrings, + "latest" + ); + + assertNotNull(response); + assertEquals(Response.Status.BAD_REQUEST.getStatusCode(), response.getStatus()); + } + + @Test + public void testGenericQueryInvalidHeaders() throws Exception { + + List keys = new ArrayList<>(); + keys.add("cloud-region.cloud-owner:test-aic"); + + List includeStrings = new ArrayList<>(); + includeStrings.add("cloud-region"); + + httpHeaders = mock(HttpHeaders.class); + + when(httpHeaders.getRequestHeader("X-FromAppId")).thenThrow(IllegalArgumentException.class); + when(httpHeaders.getAcceptableMediaTypes()).thenReturn(outputMediaTypes); + + DBSerializer serializer = new DBSerializer(version, dbEngine, introspectorFactoryType, "JUNIT"); + UrlBuilder urlBuilder = new UrlBuilder(version, serializer); + + Response response = searchProvider.getGenericQueryResponse( + httpHeaders, + null, + "cloud-region", + keys, + includeStrings, + 0, + version.toString() + ); + + assertNotNull(response); + assertEquals(Response.Status.INTERNAL_SERVER_ERROR.getStatusCode(), response.getStatus()); + } + +} diff --git a/aai-traversal/src/test/java/org/openecomp/aai/rest/util/EchoResponseTest.java b/aai-traversal/src/test/java/org/openecomp/aai/rest/util/EchoResponseTest.java index 146c1ca..44d38be 100644 --- a/aai-traversal/src/test/java/org/openecomp/aai/rest/util/EchoResponseTest.java +++ b/aai-traversal/src/test/java/org/openecomp/aai/rest/util/EchoResponseTest.java @@ -7,9 +7,9 @@ * 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. @@ -132,4 +132,4 @@ public class EchoResponseTest { assertNotNull(response); assertEquals(Response.Status.INTERNAL_SERVER_ERROR.getStatusCode(), response.getStatus()); } -} +} \ No newline at end of file diff --git a/aai-traversal/src/test/resources/payloads/named-queries/named-query.json b/aai-traversal/src/test/resources/payloads/named-queries/named-query.json new file mode 100644 index 0000000..f27823f --- /dev/null +++ b/aai-traversal/src/test/resources/payloads/named-queries/named-query.json @@ -0,0 +1,18 @@ +{ + "query-parameters": { + "named-query": { + "named-query-name": "wan-connector", + "named-query-version": "1", + "named-query-uuid": "afsjdiofjsia-afiojadfio-dsjfoisajfid" + } + }, + "instance-filters": { + "instance-filter": [ + { + "connector": { + "resource-instance-id": "123456-16102016" + } + } + ] + } +} \ No newline at end of file -- cgit 1.2.3-korg