use of ddf.catalog.source.Source in project ddf by codice.
the class FederationStrategyTest method testFederateTwoSourcesOffsetOnePageSizeThree.
/**
* Verify that the original query passed is used by the sources.
* <p>
* No special results handling done by OffsetResultsHandler.
*/
@Test
public void testFederateTwoSourcesOffsetOnePageSizeThree() throws Exception {
LOGGER.debug("testFederate_TwoSources_OffsetOne_PageSizeThree()");
// Offset of 1
when(mockQuery.getStartIndex()).thenReturn(1);
// Page size of 3
when(mockQuery.getPageSize()).thenReturn(3);
QueryRequest queryRequest = mock(QueryRequest.class);
when(queryRequest.getQuery()).thenReturn(mockQuery);
/**
* When using the original query to query the sources, the desired offset and page size are
* used. So, the results returned by the sources already have the offset and page size taken
* into account.
*/
Result mockSource1Result1 = mock(Result.class);
Mockito.when(mockSource1Result1.getRelevanceScore()).thenReturn(0.7);
Result mockSource1Result2 = mock(Result.class);
Mockito.when(mockSource1Result2.getRelevanceScore()).thenReturn(0.5);
Result mockSource1Result3 = mock(Result.class);
Mockito.when(mockSource1Result3.getRelevanceScore()).thenReturn(0.3);
Result mockSource1Result4 = mock(Result.class);
Mockito.when(mockSource1Result4.getRelevanceScore()).thenReturn(0.1);
SourceResponse mockSource1Response = mock(SourceResponse.class);
List<Result> mockSource1Results = Arrays.asList(mockSource1Result1, mockSource1Result2, mockSource1Result3, mockSource1Result4);
when(mockSource1Response.getResults()).thenReturn(mockSource1Results);
Source mockSource1 = mock(Source.class);
when(mockSource1.query(any(QueryRequest.class))).thenReturn(mockSource1Response);
when(mockSource1.getId()).thenReturn("####### MOCK SOURCE 1.4 #######");
Result mockSource2Result1 = mock(Result.class);
Mockito.when(mockSource2Result1.getRelevanceScore()).thenReturn(0.8);
Result mockSource2Result2 = mock(Result.class);
Mockito.when(mockSource2Result2.getRelevanceScore()).thenReturn(0.6);
Result mockSource2Result3 = mock(Result.class);
Mockito.when(mockSource2Result3.getRelevanceScore()).thenReturn(0.4);
Result mockSource2Result4 = mock(Result.class);
Mockito.when(mockSource2Result4.getRelevanceScore()).thenReturn(0.2);
SourceResponse mockSource2Response = mock(SourceResponse.class);
List<Result> mockSource2Results = Arrays.asList(mockSource2Result1, mockSource2Result2, mockSource2Result3, mockSource2Result4);
when(mockSource2Response.getResults()).thenReturn(mockSource2Results);
Source mockSource2 = mock(Source.class);
when(mockSource2.query(any(QueryRequest.class))).thenReturn(mockSource2Response);
when(mockSource2.getId()).thenReturn("####### MOCK SOURCE 2.4 #######");
// Two sources
List<Source> sources = new ArrayList<Source>(2);
sources.add(mockSource1);
sources.add(mockSource2);
SortedFederationStrategy strategy = new SortedFederationStrategy(executor, new ArrayList<PreFederatedQueryPlugin>(), new ArrayList<PostFederatedQueryPlugin>());
// Run Test
QueryResponse federatedResponse = strategy.federate(sources, queryRequest);
// Verification
assertNotNull(federatedResponse);
LOGGER.debug("Federated response result size: {}", federatedResponse.getResults().size());
/**
* Verify three results (page size) are returned. Since we are using mock Results, the
* relevance score is 0.0, and the merged and sorted results of both sources is
* mockSource2Result1, mockSource1Result1, mockSource2Result2, mockSource1Result2,
* mockSource2Result3, mockSource1Result3, mockSource2Result4, mockSource1Result4. So, the
* results are mockSource2Result1, mockSource1Result1, mockSource2Result2. No need to use
* OffsetResultHander in this case.
*/
assertEquals(3, federatedResponse.getResults().size());
assertEquals(mockSource2Result1, federatedResponse.getResults().get(0));
assertEquals(mockSource1Result1, federatedResponse.getResults().get(1));
assertEquals(mockSource2Result2, federatedResponse.getResults().get(2));
LOGGER.debug("mockSource2Result1: {}", mockSource2Result1);
LOGGER.debug("mockSource1Result1: {}", mockSource1Result1);
LOGGER.debug("mockSource2Result2: {}", mockSource2Result2);
for (Result result : federatedResponse.getResults()) {
LOGGER.debug("federated response result: {}", result);
}
// Check the responseProperties
List<String> siteList = (List) federatedResponse.getPropertyValue(QueryResponse.SITE_LIST);
assertTrue(siteList.contains("####### MOCK SOURCE 2.4 #######"));
Map<String, Serializable> siteProperties = (Map) federatedResponse.getPropertyValue("####### MOCK SOURCE 2.4 #######");
assertNotNull(siteProperties.get(QueryResponse.TOTAL_HITS));
assertNotNull(siteProperties.get(QueryResponse.TOTAL_RESULTS_RETURNED));
assertTrue(siteList.contains("####### MOCK SOURCE 2.4 #######"));
siteProperties = (Map) federatedResponse.getPropertyValue("####### MOCK SOURCE 1.4 #######");
assertNotNull(siteProperties.get(QueryResponse.TOTAL_HITS));
assertNotNull(siteProperties.get(QueryResponse.TOTAL_RESULTS_RETURNED));
}
use of ddf.catalog.source.Source in project ddf by codice.
the class SourceMetricsImpl method createMetric.
private boolean createMetric(List<? extends Source> sources, String sourceId) {
for (Source source : sources) {
if (source.getId().equals(sourceId)) {
LOGGER.debug("Found sourceId = {} in sources list", sourceId);
if (sourceToSourceIdMap.containsKey(source)) {
// Source's ID must have changed since it is in this map but not in the metrics
// map
// Delete SourceMetrics for Source's "old" sourceId
String oldSourceId = sourceToSourceIdMap.get(source);
LOGGER.debug("CASE 2: source {} exists but has oldSourceId = {}", sourceId, oldSourceId);
deleteMetric(oldSourceId, QUERIES_TOTAL_RESULTS_SCOPE);
deleteMetric(oldSourceId, QUERIES_SCOPE);
deleteMetric(oldSourceId, EXCEPTIONS_SCOPE);
// Create metrics for Source with new sourceId
createMetric(sourceId, QUERIES_TOTAL_RESULTS_SCOPE, MetricType.HISTOGRAM);
createMetric(sourceId, QUERIES_SCOPE, MetricType.METER);
createMetric(sourceId, EXCEPTIONS_SCOPE, MetricType.METER);
// Add Source to map with its new sourceId
sourceToSourceIdMap.put(source, sourceId);
} else {
// This is a brand new Source - create metrics for it
// (Should rarely happen since Sources typically have their metrics created
// when the Source itself is created via the addingSource() method. This could
// happen if sourceId = null when Source originally created and then its metric
// needs updating because client, e.g., SortedFederationStrategy, knows the
// Source exists.)
LOGGER.debug("CASE 3: New source {} detected - creating metrics", sourceId);
createMetric(sourceId, QUERIES_TOTAL_RESULTS_SCOPE, MetricType.HISTOGRAM);
createMetric(sourceId, QUERIES_SCOPE, MetricType.METER);
createMetric(sourceId, EXCEPTIONS_SCOPE, MetricType.METER);
sourceToSourceIdMap.put(source, sourceId);
}
return true;
}
}
LOGGER.debug("Did not find source {} in Sources - cannot create metrics", sourceId);
return false;
}
use of ddf.catalog.source.Source in project ddf by codice.
the class CachingFederationStrategy method federate.
@Override
public QueryResponse federate(List<Source> sources, QueryRequest queryRequest) {
Validate.noNullElements(sources, "Cannot federate with null sources.");
Validate.notNull(queryRequest, "Cannot federate with null QueryRequest.");
Set<String> sourceIds = new HashSet<>();
for (Source source : sources) {
sourceIds.add(source.getId());
}
QueryRequest modifiedQueryRequest = new QueryRequestImpl(queryRequest.getQuery(), queryRequest.isEnterprise(), sourceIds, queryRequest.getProperties());
if (CACHE_QUERY_MODE.equals(queryRequest.getProperties().get(QUERY_MODE))) {
return queryCache(modifiedQueryRequest);
} else {
return sourceFederate(sources, modifiedQueryRequest);
}
}
use of ddf.catalog.source.Source in project ddf by codice.
the class TestRegistryReportActionProvider method setup.
@Before
public void setup() {
metacard = new MetacardImpl();
source = mock(Source.class);
configurationAdmin = mock(ConfigurationAdmin.class);
configuration = mock(Configuration.class);
actionProvider = new RegistryReportActionProvider(ACTION_PROVIDER_ID);
metacard.setId(SAMPLE_ID);
metacard.setTags(SAMPLE_REGISTRY_TAGS);
metacard.setSourceId(SAMPLE_SOURCE_ID);
metacard.setAttribute(RegistryObjectMetacardType.REGISTRY_ID, SAMPLE_REGISTRY_ID);
}
use of ddf.catalog.source.Source in project ddf by codice.
the class FederationAdminTest method testRegistryStatusNotConfiguredService.
@Test
public void testRegistryStatusNotConfiguredService() throws Exception {
Source source = mock(Source.class);
when(helper.getRegistrySources()).thenReturn(Collections.singletonList(source));
assertThat(federationAdmin.registryStatus("servicePid"), is(false));
}
Aggregations