blob: df7845f53a8d74a4dd91acaf31d41abc8a8971c4 [file] [log] [blame]
/**
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you 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.
*/
package org.apache.metron.solr.dao;
import static org.apache.metron.solr.SolrConstants.SOLR_ZOOKEEPER;
import static org.mockito.Mockito.verify;
import static org.mockito.internal.verification.VerificationModeFactory.times;
import static org.powermock.api.mockito.PowerMockito.doNothing;
import static org.powermock.api.mockito.PowerMockito.mock;
import static org.powermock.api.mockito.PowerMockito.mockStatic;
import static org.powermock.api.mockito.PowerMockito.spy;
import static org.powermock.api.mockito.PowerMockito.when;
import static org.powermock.api.mockito.PowerMockito.whenNew;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;
import java.util.Optional;
import org.apache.metron.indexing.dao.AccessConfig;
import org.apache.metron.indexing.dao.search.GetRequest;
import org.apache.metron.indexing.dao.search.GroupRequest;
import org.apache.metron.indexing.dao.search.SearchRequest;
import org.apache.metron.indexing.dao.update.Document;
import org.apache.metron.solr.client.SolrClientFactory;
import org.apache.solr.client.solrj.SolrClient;
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.ExpectedException;
import org.junit.runner.RunWith;
import org.powermock.core.classloader.annotations.PrepareForTest;
import org.powermock.modules.junit4.PowerMockRunner;
@RunWith(PowerMockRunner.class)
@PrepareForTest({SolrDao.class, SolrClientFactory.class})
public class SolrDaoTest {
@Rule
public final ExpectedException exception = ExpectedException.none();
private SolrClient client;
private SolrSearchDao solrSearchDao;
private SolrUpdateDao solrUpdateDao;
private SolrRetrieveLatestDao solrRetrieveLatestDao;
private SolrColumnMetadataDao solrColumnMetadataDao;
private SolrDao solrDao;
@SuppressWarnings("unchecked")
@Before
public void setUp() {
client = mock(SolrClient.class);
solrSearchDao = mock(SolrSearchDao.class);
solrUpdateDao = mock(SolrUpdateDao.class);
solrRetrieveLatestDao = mock(SolrRetrieveLatestDao.class);
solrColumnMetadataDao = mock(SolrColumnMetadataDao.class);
mockStatic(SolrClientFactory.class);
}
@Test
public void initShouldEnableKerberos() {
AccessConfig accessConfig = new AccessConfig();
solrDao = spy(new SolrDao(
client,
accessConfig,
solrSearchDao,
solrUpdateDao,
solrRetrieveLatestDao,
solrColumnMetadataDao));
doNothing().when(solrDao).enableKerberos();
solrDao.init(accessConfig);
verify(solrDao, times(0)).enableKerberos();
accessConfig.setKerberosEnabled(true);
solrDao.init(accessConfig);
verify(solrDao).enableKerberos();
}
@Test
public void initShouldCreateDaos() throws Exception {
AccessConfig accessConfig = new AccessConfig();
accessConfig.setGlobalConfigSupplier(() ->
new HashMap<String, Object>() {{
put(SOLR_ZOOKEEPER, "zookeeper:2181");
}}
);
solrDao = spy(new SolrDao());
when(SolrClientFactory.create(accessConfig.getGlobalConfigSupplier().get())).thenReturn(client);
whenNew(SolrSearchDao.class).withArguments(client, accessConfig).thenReturn(solrSearchDao);
whenNew(SolrRetrieveLatestDao.class).withArguments(client, accessConfig)
.thenReturn(solrRetrieveLatestDao);
whenNew(SolrUpdateDao.class).withArguments(client, solrRetrieveLatestDao, accessConfig)
.thenReturn(solrUpdateDao);
whenNew(SolrColumnMetadataDao.class).withArguments(client)
.thenReturn(solrColumnMetadataDao);
solrDao.init(accessConfig);
SearchRequest searchRequest = mock(SearchRequest.class);
solrDao.search(searchRequest);
verify(solrSearchDao).search(searchRequest);
GroupRequest groupRequest = mock(GroupRequest.class);
solrDao.group(groupRequest);
verify(solrSearchDao).group(groupRequest);
solrDao.getLatest("guid", "collection");
verify(solrRetrieveLatestDao).getLatest("guid", "collection");
GetRequest getRequest1 = mock(GetRequest.class);
GetRequest getRequest2 = mock(GetRequest.class);
solrDao.getAllLatest(Arrays.asList(getRequest1, getRequest2));
verify(solrRetrieveLatestDao).getAllLatest(Arrays.asList(getRequest1, getRequest2));
Document document = mock(Document.class);
solrDao.update(document, Optional.of("bro"));
verify(solrUpdateDao).update(document, Optional.of("bro"));
Map<Document, Optional<String>> updates = new HashMap<Document, Optional<String>>() {{
put(document, Optional.of("bro"));
}};
solrDao.batchUpdate(updates);
verify(solrUpdateDao).batchUpdate(updates);
solrDao.getColumnMetadata(Arrays.asList("bro", "snort"));
verify(solrColumnMetadataDao).getColumnMetadata(Arrays.asList("bro", "snort"));
}
}