2 * ============LICENSE_START===================================================
3 * SPARKY (AAI UI service)
4 * ============================================================================
5 * Copyright © 2017 AT&T Intellectual Property.
6 * Copyright © 2017 Amdocs
8 * ============================================================================
9 * Licensed under the Apache License, Version 2.0 (the "License");
10 * you may not use this file except in compliance with the License.
11 * You may obtain a copy of the License at
13 * http://www.apache.org/licenses/LICENSE-2.0
15 * Unless required by applicable law or agreed to in writing, software
16 * distributed under the License is distributed on an "AS IS" BASIS,
17 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
18 * See the License for the specific language governing permissions and
19 * limitations under the License.
20 * ============LICENSE_END=====================================================
22 * ECOMP and OpenECOMP are trademarks
23 * and service marks of AT&T Intellectual Property.
26 package org.onap.aai.sparky.search.filters;
28 import static org.junit.Assert.assertEquals;
29 import static org.junit.Assert.assertNotNull;
30 import static org.junit.Assert.assertNull;
32 import java.io.IOException;
33 import java.io.StringReader;
34 import java.util.ArrayList;
35 import java.util.List;
37 import javax.json.Json;
38 import javax.json.JsonObject;
39 import javax.json.JsonReader;
40 import javax.json.stream.JsonParsingException;
41 import javax.servlet.http.HttpServletRequest;
43 import org.apache.camel.CamelContext;
44 import org.apache.camel.Exchange;
45 import org.apache.camel.Message;
46 import org.apache.camel.impl.DefaultCamelContext;
47 import org.apache.camel.impl.DefaultExchange;
48 import org.junit.Before;
49 import org.junit.Test;
50 import org.mockito.Mockito;
51 import org.onap.aai.restclient.enums.RestAuthenticationMode;
52 import org.onap.aai.sparky.config.SparkyResourceLoader;
53 import org.onap.aai.sparky.dal.rest.RestClientConstructionException;
54 import org.onap.aai.sparky.dal.rest.config.RestEndpointConfig;
55 import org.onap.aai.sparky.search.SearchServiceAdapter;
56 import org.onap.aai.sparky.search.filters.config.FiltersConfig;
57 import org.onap.aai.sparky.search.filters.config.FiltersDetailsConfig;
58 import org.onap.aai.sparky.search.filters.config.FiltersForViewsConfig;
59 import org.onap.aai.sparky.search.filters.config.UiFilterConfig;
60 import org.onap.aai.sparky.search.filters.config.UiFilterListItemConfig;
61 import org.onap.aai.sparky.search.filters.config.UiFilterOptionsValuesConfig;
62 import org.onap.aai.sparky.search.filters.config.UiViewListItemConfig;
63 import org.onap.aai.sparky.search.filters.entity.DiscoverFiltersRequest;
64 import org.onap.aai.sparky.search.filters.entity.ViewConfiguration;
65 import org.onap.aai.sparky.search.filters.entity.ViewFilter;
66 import org.onap.aai.sparky.util.HttpServletHelper;
67 import org.onap.aai.sparky.util.NodeUtils;
68 import org.onap.aai.sparky.util.SparkyTestConstants;
69 import org.restlet.data.Status;
70 import org.springframework.core.io.DefaultResourceLoader;
72 import com.fasterxml.jackson.core.JsonParseException;
73 import com.fasterxml.jackson.databind.JsonMappingException;
74 import com.fasterxml.jackson.databind.ObjectMapper;
76 public class FilterProcessorTest {
78 private FilterProcessor filterProcessor;
79 private FilteredSearchHelper filteredSearchHelper;
80 private ObjectMapper mapper;
81 private RestEndpointConfig restEndpointConfig;
83 private Exchange exchange;
84 private CamelContext camelContext;
85 private Message mockRequestMessage;
88 protected UiViewListItemConfig generateViewConfig(ViewConfiguration viewConfig) {
90 UiViewListItemConfig uiViewConfig = new UiViewListItemConfig(viewConfig.getViewName(), null);
92 List<UiFilterListItemConfig> filters = new ArrayList<UiFilterListItemConfig>();
94 for (ViewFilter viewFilter : viewConfig.getViewFilters()) {
95 filters.add(new UiFilterListItemConfig(viewFilter.getId(), viewFilter.getDefaultValue()));
98 uiViewConfig.setListOfFilters(filters);
103 protected FiltersConfig generateDefaultViewsFilterConfig() {
105 FiltersForViewsConfig uiViewsConfig = new FiltersForViewsConfig();
106 FiltersConfig viewFilterConfig = new FiltersConfig();
108 List<UiViewListItemConfig> views = new ArrayList<UiViewListItemConfig>();
110 // Default filter value to use below
111 UiFilterOptionsValuesConfig defaultValue = new UiFilterOptionsValuesConfig("Today", "Last 0 hours");
113 // VNF View - 4 Filters
114 ViewConfiguration vnfViewConfig = new ViewConfiguration("vnfSearch");
115 vnfViewConfig.addViewFilter(new ViewFilter("1", null));
116 vnfViewConfig.addViewFilter(new ViewFilter("2", null));
117 vnfViewConfig.addViewFilter(new ViewFilter("7", null));
118 vnfViewConfig.addViewFilter(new ViewFilter("8", null));
119 views.add(generateViewConfig(vnfViewConfig));
121 // View and Inspect (Schema) - 0 Filters
122 ViewConfiguration viewInspectConfig = new ViewConfiguration("viewInspect");
123 views.add(generateViewConfig(viewInspectConfig));
125 uiViewsConfig.setViews(views);
127 viewFilterConfig.setViewsConfig(uiViewsConfig);
129 List<UiFilterOptionsValuesConfig> optionsValues = new ArrayList<UiFilterOptionsValuesConfig>();
130 optionsValues.add(new UiFilterOptionsValuesConfig("Today", "Last 0 hours"));
131 optionsValues.add(new UiFilterOptionsValuesConfig("Since Yesterday", "Last 24 hours"));
132 optionsValues.add(new UiFilterOptionsValuesConfig("Since Last Week", "Last 7 days"));
133 optionsValues.add(new UiFilterOptionsValuesConfig("Since Last Month", "Last 30 days"));
134 optionsValues.add(new UiFilterOptionsValuesConfig("Custom Range", "Custom Range"));
138 FiltersDetailsConfig uiFiltersConfig = new FiltersDetailsConfig();
140 List<UiFilterConfig> uiFilterConfig = new ArrayList<UiFilterConfig>();
141 uiFilterConfig.add(new UiFilterConfig("1", "filterName1", "Display Name 1", "dropDown", "false", "Any 1", null, "options", null, null));
142 uiFilterConfig.add(new UiFilterConfig("2", "filterName2", "Display Name 2", "dropDown", "false", "Any 2", null, "options", null, null));
143 uiFilterConfig.add(new UiFilterConfig("5", "filterName5", "Display Name 5", "date", "false", "Any 5", defaultValue, "dynamicOptions", optionsValues, null));
144 uiFilterConfig.add(new UiFilterConfig("7", "filterName7", "Display Name 7", "dropDown", "false", "Any 7", null, "options", null, null));
145 uiFilterConfig.add(new UiFilterConfig("8", "filterName8", "Display Name 8", "dropDown", "false", "Any 8", null, "options", null, null));
147 uiFiltersConfig.setFilters(uiFilterConfig);
149 viewFilterConfig.setFiltersConfig(uiFiltersConfig);
151 return viewFilterConfig;
155 public void init() throws Exception {
157 camelContext = new DefaultCamelContext();
158 exchange = new DefaultExchange(camelContext);
160 mockRequestMessage = Mockito.mock(Message.class);
162 exchange.setIn(mockRequestMessage);
164 //TODO-> edit the following:FilteredSearchHelper & FilterProcessor to pass in the correct parameters
165 restEndpointConfig = new RestEndpointConfig();
166 restEndpointConfig.setRestAuthenticationMode(RestAuthenticationMode.SSL_BASIC);
168 SparkyResourceLoader resourceLoader = new SparkyResourceLoader();
169 resourceLoader.setResourceLoader(new DefaultResourceLoader());
170 FiltersConfig filtersConfig = new FiltersConfig(SparkyTestConstants.FILTERS_JSON_FILE, SparkyTestConstants.VIEWS_JSON_FILE, resourceLoader);
172 filteredSearchHelper = new FilteredSearchHelper(filtersConfig, new SearchServiceAdapter(restEndpointConfig, "1.0"));
173 filterProcessor = new FilterProcessor();
175 mapper = new ObjectMapper();
180 public void validateDefaultConstructor() {
181 assertNotNull(filterProcessor.getMapper());
182 assertNull(filterProcessor.getFilteredSearchHelper());
185 private void verifyResponseAndNumFiltersForBadRequest(Exchange exchange, Status expectedStatus, int numExpectedFilters)
186 throws JsonParseException, JsonMappingException, IOException {
188 assertEquals(expectedStatus.getCode(), exchange.getOut().getHeader(Exchange.HTTP_RESPONSE_CODE));
190 String entityPayload = exchange.getOut().getBody(String.class);
191 assertNotNull(entityPayload);
193 JsonReader jsonReader = Json.createReader(new StringReader(entityPayload));
194 JsonObject responsePayload = jsonReader.readObject();
196 JsonObject filters = responsePayload.getJsonObject("filters");
197 assertEquals(0, filters.size());
200 private void initializeMocks(String requestPayload) throws IOException {
202 HttpServletRequest request = Mockito.mock(HttpServletRequest.class);
203 if ( requestPayload != null) {
204 HttpServletHelper.setRequestPayload(request, "application/json", requestPayload);
207 Mockito.when(request.getRequestURI()).thenReturn("fakeUri");
208 Mockito.when(request.getLocalPort()).thenReturn(8001);
209 Mockito.when(mockRequestMessage.getBody(Mockito.eq(HttpServletRequest.class))).thenReturn(request);
210 Mockito.when(mockRequestMessage.getBody(Mockito.eq(String.class))).thenReturn(requestPayload);
212 SparkyResourceLoader resourceLoader = new SparkyResourceLoader();
213 resourceLoader.setResourceLoader(new DefaultResourceLoader());
215 FiltersConfig filtersConfig = new FiltersConfig(SparkyTestConstants.FILTERS_JSON_FILE, SparkyTestConstants.VIEWS_JSON_FILE, resourceLoader);
216 filteredSearchHelper.setFiltersConfig(filtersConfig);
217 filterProcessor.setFilteredSearchHelper(filteredSearchHelper);
222 public void testGetFiltersWithValues_success_path() throws IOException {
224 // Initialize for call against 'vnfSearch'
225 DiscoverFiltersRequest vnfSearchrequest = new DiscoverFiltersRequest();
226 vnfSearchrequest.setViewName("vnfSearch");
228 initializeMocks(NodeUtils.convertObjectToJson(vnfSearchrequest, false));
230 // Test call against 'vnfSearch'
231 filterProcessor.getFiltersWithValues(exchange);
233 assertEquals(200, exchange.getOut().getHeader(Exchange.HTTP_RESPONSE_CODE));
235 String entityPayload = exchange.getOut().getBody(String.class);
236 assertNotNull(entityPayload);
238 JsonReader vnfJsonReader = Json.createReader(new StringReader(entityPayload));
239 JsonObject vnfResponsePayload = vnfJsonReader.readObject();
241 JsonObject vnfFilters = vnfResponsePayload.getJsonObject("filters");
242 assertNotNull(vnfFilters);
243 assertEquals(4, vnfFilters.size());
247 public void testGetFiltersWithValues_viewNameNull() throws IOException {
249 DiscoverFiltersRequest discoverFiltersRequest = new DiscoverFiltersRequest();
250 initializeMocks(NodeUtils.convertObjectToJson(discoverFiltersRequest, false));
253 filterProcessor.getFiltersWithValues(exchange);
255 verifyResponseAndNumFiltersForBadRequest(exchange, Status.CLIENT_ERROR_NOT_FOUND, 0);
259 public void testGetFiltersWithValues_viewNameEmptyString() throws IOException {
261 DiscoverFiltersRequest discoverFiltersRequest = new DiscoverFiltersRequest();
262 discoverFiltersRequest.setViewName("");
264 initializeMocks(NodeUtils.convertObjectToJson(discoverFiltersRequest, false));
267 filterProcessor.getFiltersWithValues(exchange);
269 verifyResponseAndNumFiltersForBadRequest(exchange, Status.CLIENT_ERROR_NOT_FOUND, 0);
273 public void testGetFiltersWithValues_requestPayloadIsNull() throws IOException {
275 initializeMocks(null);
278 filterProcessor.getFiltersWithValues(exchange);
280 verifyResponseAndNumFiltersForBadRequest(exchange, Status.CLIENT_ERROR_NOT_FOUND, 0);
284 public void testGetFiltersWithValues_requestPayloadIsEmptyString() throws IOException {
289 filterProcessor.getFiltersWithValues(exchange);
291 verifyResponseAndNumFiltersForBadRequest(exchange, Status.CLIENT_ERROR_NOT_FOUND, 0);
294 @Test(expected=JsonParsingException.class)
295 public void testGetFiltersWithValues_requestPayloadCausesException() throws IOException {
297 initializeMocks("{");
300 filterProcessor.getFiltersWithValues(exchange);
302 verifyResponseAndNumFiltersForBadRequest(exchange, Status.SERVER_ERROR_INTERNAL, 0);