Search in sources :

Example 6 with Source

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));
}
Also used : Serializable(java.io.Serializable) QueryRequest(ddf.catalog.operation.QueryRequest) SourceResponse(ddf.catalog.operation.SourceResponse) PreFederatedQueryPlugin(ddf.catalog.plugin.PreFederatedQueryPlugin) ArrayList(java.util.ArrayList) Source(ddf.catalog.source.Source) PostFederatedQueryPlugin(ddf.catalog.plugin.PostFederatedQueryPlugin) Result(ddf.catalog.data.Result) QueryResponse(ddf.catalog.operation.QueryResponse) List(java.util.List) ArrayList(java.util.ArrayList) Map(java.util.Map) PrepareForTest(org.powermock.core.classloader.annotations.PrepareForTest) Test(org.junit.Test)

Example 7 with Source

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;
}
Also used : Source(ddf.catalog.source.Source) FederatedSource(ddf.catalog.source.FederatedSource)

Example 8 with Source

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);
    }
}
Also used : QueryRequest(ddf.catalog.operation.QueryRequest) QueryRequestImpl(ddf.catalog.operation.impl.QueryRequestImpl) Source(ddf.catalog.source.Source) HashSet(java.util.HashSet)

Example 9 with Source

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);
}
Also used : Configuration(org.osgi.service.cm.Configuration) ConfigurationAdmin(org.osgi.service.cm.ConfigurationAdmin) MetacardImpl(ddf.catalog.data.impl.MetacardImpl) Source(ddf.catalog.source.Source) Before(org.junit.Before)

Example 10 with Source

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));
}
Also used : Source(ddf.catalog.source.Source) Test(org.junit.Test)

Aggregations

Source (ddf.catalog.source.Source)46 Test (org.junit.Test)24 QueryRequest (ddf.catalog.operation.QueryRequest)22 ArrayList (java.util.ArrayList)16 FederatedSource (ddf.catalog.source.FederatedSource)15 QueryResponse (ddf.catalog.operation.QueryResponse)14 QueryRequestImpl (ddf.catalog.operation.impl.QueryRequestImpl)11 Result (ddf.catalog.data.Result)10 CatalogProvider (ddf.catalog.source.CatalogProvider)10 ContentType (ddf.catalog.data.ContentType)9 Query (ddf.catalog.operation.Query)9 SourceResponse (ddf.catalog.operation.SourceResponse)9 CachedSource (ddf.catalog.util.impl.CachedSource)8 SourcePoller (ddf.catalog.util.impl.SourcePoller)8 ByteSource (com.google.common.io.ByteSource)7 QueryResponseImpl (ddf.catalog.operation.impl.QueryResponseImpl)7 PreFederatedQueryPlugin (ddf.catalog.plugin.PreFederatedQueryPlugin)7 SourceDescriptor (ddf.catalog.source.SourceDescriptor)6 SourceUnavailableException (ddf.catalog.source.SourceUnavailableException)6 HashMap (java.util.HashMap)6