use of ddf.catalog.operation.Query in project ddf by codice.
the class SortedQueryMonitorTest method setUp.
@Before
public void setUp() throws Exception {
completionService = mock(CompletionService.class);
queryRequest = mock(QueryRequest.class);
queryResponse = new QueryResponseImpl(queryRequest);
query = mock(Query.class);
// Enforce insertion order for testing purposes
futures = new LinkedHashMap<>();
for (int i = 0; i < 4; i++) {
SourceResponse sourceResponseMock = null;
Future futureMock = mock(Future.class);
QueryRequest queryRequest = mock(QueryRequest.class);
when(queryRequest.getSourceIds()).thenReturn(Collections.singleton("Source-" + i));
switch(i) {
case 1:
sourceResponseMock = mock(SourceResponse.class);
when(sourceResponseMock.getResults()).thenReturn(Lists.newArrayList(mock(Result.class), mock(Result.class), mock(Result.class)));
when(sourceResponseMock.getHits()).thenReturn(3L);
break;
case 2:
sourceResponseMock = mock(SourceResponse.class);
when(sourceResponseMock.getResults()).thenReturn(Lists.newArrayList(mock(Result.class)));
when(sourceResponseMock.getHits()).thenReturn(1L);
break;
case 3:
sourceResponseMock = mock(SourceResponse.class);
when(sourceResponseMock.getResults()).thenReturn(Lists.<Result>emptyList());
when(sourceResponseMock.getHits()).thenReturn(0L);
break;
}
when(futureMock.get()).thenReturn(sourceResponseMock);
futures.put(futureMock, queryRequest);
}
}
use of ddf.catalog.operation.Query in project ddf by codice.
the class SortedQueryMonitorTest method testSourcePropertiesCollision.
@Test
public void testSourcePropertiesCollision() throws Exception {
PropertyName propertyName = mock(PropertyName.class);
when(propertyName.getPropertyName()).thenReturn(TEST_PROPERTY);
CompletionService completionService = mock(CompletionService.class);
QueryRequest queryRequest = mock(QueryRequest.class);
Query query = mock(Query.class);
when(query.getTimeoutMillis()).thenReturn(0L);
when(queryRequest.getQuery()).thenReturn(query);
when(queryRequest.getSourceIds()).thenReturn(new HashSet<>(Arrays.asList("Source1", "Source2")));
Map<Future<SourceResponse>, QueryRequest> futures = new LinkedHashMap<>();
Future futureMock = mock(Future.class);
QueryRequest queryRequest1 = mock(QueryRequest.class);
when(queryRequest1.getQuery()).thenReturn(query);
when(queryRequest1.getSourceIds()).thenReturn(new HashSet<>(Arrays.asList("Source1")));
SourceResponse sourceResponseMock = getMockedResponse(getResults(TEST_PROPERTY, 1));
when(sourceResponseMock.getProperties()).thenReturn(ImmutableMap.of("test", 1));
when(futureMock.get()).thenReturn(sourceResponseMock);
futures.put(futureMock, queryRequest1);
Future futureMock2 = mock(Future.class);
QueryRequest queryRequest2 = mock(QueryRequest.class);
when(queryRequest2.getQuery()).thenReturn(query);
when(queryRequest2.getSourceIds()).thenReturn(new HashSet<>(Arrays.asList("Source2")));
SourceResponse sourceResponseMock2 = getMockedResponse(getResults(TEST_PROPERTY, 2));
when(sourceResponseMock2.getProperties()).thenReturn(ImmutableMap.of("test", 2));
when(futureMock2.get()).thenReturn(sourceResponseMock2);
futures.put(futureMock2, queryRequest2);
QueryResponseImpl queryResponse = new QueryResponseImpl(queryRequest);
SortedQueryMonitor queryMonitor = new SortedQueryMonitor(completionService, futures, queryResponse, queryRequest, new ArrayList<>());
when(completionService.take()).thenReturn(futureMock, futureMock2);
queryMonitor.run();
Map<String, Serializable> returnedProperties = queryResponse.getProperties();
// Verify that the "test" property had a collision and only has the last value returned
assertThat(returnedProperties.get("test")).isEqualTo(2);
// Verify that the original source properties are available
assertThat(returnedProperties.containsKey(SortedQueryMonitor.ORIGINAL_SOURCE_PROPERTIES)).isEqualTo(true);
Map<String, Map<String, Serializable>> returnedSourceProperties = (Map<String, Map<String, Serializable>>) returnedProperties.get("originalSourceProperties");
assertThat(returnedSourceProperties.size()).isEqualTo(2);
assertThat(returnedSourceProperties.get("Source1").get("test")).isEqualTo(1);
assertThat(returnedSourceProperties.get("Source2").get("test")).isEqualTo(2);
}
use of ddf.catalog.operation.Query in project ddf by codice.
the class SortedFederationStrategyTest method testStartIndexGreaterThanMaxStartIndex.
@Test
public void testStartIndexGreaterThanMaxStartIndex() throws Exception {
SortedQueryMonitorFactory mockSortedQueryMonitorFactory = mock(SortedQueryMonitorFactory.class);
when(mockSortedQueryMonitorFactory.createMonitor(any(CompletionService.class), any(Map.class), responseArgumentCaptor.capture(), requestArgumentCaptor.capture(), any(List.class))).thenReturn(mockSortedQueryMonitor);
SortedFederationStrategy federateStrategy = new SortedFederationStrategy(queryExecutor, Arrays.asList(preQueryPlugin), new ArrayList<>(), mockSortedQueryMonitorFactory);
// startIndex and pageSize must be > 1
Query mockQ = new QueryImpl(mock(NullFilterImpl.class), SortedFederationStrategy.DEFAULT_MAX_START_INDEX + 5, 1, mock(SortBy.class), true, LONG_TIMEOUT);
QueryRequest fedQueryRequest = new QueryRequestImpl(mockQ, properties);
List<Source> sources = new ArrayList<>();
// Multiple sources needed for OffsetResultHandler to be used
for (int i = 0; i < 2; i++) {
Source mockSource = mock(Source.class);
when(mockSource.getId()).thenReturn("mock source " + i);
sources.add(mockSource);
}
QueryResponse federateResponse = federateStrategy.federate(sources, fedQueryRequest);
assertThat(federateResponse.getRequest().getQuery().getStartIndex(), is(SortedFederationStrategy.DEFAULT_MAX_START_INDEX + 5));
// Modified offset is set to 1
verify(mockSortedQueryMonitorFactory).createMonitor(any(CompletionService.class), any(Map.class), responseArgumentCaptor.capture(), requestArgumentCaptor.capture(), any(List.class));
assertThat(requestArgumentCaptor.getValue().getQuery().getStartIndex(), is(1));
}
use of ddf.catalog.operation.Query in project ddf by codice.
the class SortedFederationStrategyTest method testConnectedSources.
@Test
public void testConnectedSources() throws Exception {
Query mockQ = new QueryImpl(mock(NullFilterImpl.class), 2, 2, mock(SortBy.class), true, LONG_TIMEOUT);
QueryRequest fedQueryRequest = new QueryRequestImpl(mockQ, properties);
List<Source> sources = new ArrayList<>();
// Multiple sources needed for OffsetResultHandler to be used
for (int i = 0; i < 2; i++) {
Source mockSource = mock(Source.class);
when(mockSource.getId()).thenReturn("mock source");
sources.add(mockSource);
}
strategy.federate(sources, fedQueryRequest);
// Make sure both sources get called even though they have the same name
verify(sources.get(0), atLeastOnce()).query(any(QueryRequest.class));
verify(sources.get(1), atLeastOnce()).query(any(QueryRequest.class));
}
use of ddf.catalog.operation.Query in project ddf by codice.
the class SecurityLoggingPlugin method process.
@Override
public QueryRequest process(QueryRequest input) throws PluginExecutionException, StopProcessingException {
Query query = input.getQuery();
String additional = query.toString();
logOperation(CatalogOperationType.QUERY_REQUEST, input, additional);
return input;
}
Aggregations