Java tutorial
/* * Copyright 2012 - 2014 the original author or authors. * * Licensed 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.springframework.data.solr.server.support; import static org.hamcrest.core.IsCollectionContaining.*; import static org.hamcrest.core.IsEqual.*; import static org.hamcrest.text.IsEmptyString.*; import java.net.MalformedURLException; import java.util.Map; import org.apache.http.auth.AuthScope; import org.apache.http.auth.UsernamePasswordCredentials; import org.apache.http.client.CredentialsProvider; import org.apache.http.impl.client.AbstractHttpClient; import org.apache.http.impl.client.BasicCredentialsProvider; import org.apache.http.impl.client.DefaultHttpClient; import org.apache.http.params.BasicHttpParams; import org.apache.http.params.HttpParams; import org.apache.solr.client.solrj.embedded.EmbeddedSolrServer; import org.apache.solr.client.solrj.impl.CloudSolrServer; import org.apache.solr.client.solrj.impl.HttpSolrServer; import org.apache.solr.client.solrj.impl.LBHttpSolrServer; import org.apache.solr.core.CoreContainer; import org.hamcrest.core.IsEqual; import org.hamcrest.core.IsSame; import org.junit.Assert; import org.junit.Test; import org.mockito.Mockito; import org.springframework.data.solr.core.mapping.SolrDocument; import org.springframework.test.util.ReflectionTestUtils; /** * @author Christoph Strobl */ public class SolrServerUtilTests { private static final String FIELD_ZOO_KEEPER = "zkHost"; private static final String FIELD_ALIVE_SERVERS = "aliveServers"; private static final String CORE_NAME = "core1"; private static final String ZOO_KEEPER_URL = "http://127.0.0.1/zk"; private static final String BASE_URL = "http://127.0.0.1:8983/solr"; private static final String ALTERNATE_BASE_URL = "http://localhost:8983/solr"; private static final String CORE_URL = BASE_URL + "/" + CORE_NAME; private static final String ALTERNATE_CORE_URL = ALTERNATE_BASE_URL + "/" + CORE_NAME; @Test(expected = IllegalArgumentException.class) public void testCloneNullThrowsIllegalArgumentException() { SolrServerUtils.clone(null); } @Test public void testClonesHttpSolrServerCorrectly() { HttpSolrServer httpSolrServer = new HttpSolrServer(BASE_URL); httpSolrServer.setDefaultMaxConnectionsPerHost(10); httpSolrServer.setFollowRedirects(true); httpSolrServer.setMaxRetries(3); httpSolrServer.setUseMultiPartPost(true); HttpSolrServer clone = SolrServerUtils.clone(httpSolrServer); Assert.assertEquals(httpSolrServer.getBaseURL(), clone.getBaseURL()); assertHttpSolrServerProperties(httpSolrServer, clone); } @Test public void testClonesHttpSolrServerForCoreCorrectly() { HttpSolrServer httpSolrServer = new HttpSolrServer(BASE_URL); httpSolrServer.setDefaultMaxConnectionsPerHost(10); httpSolrServer.setFollowRedirects(true); httpSolrServer.setMaxRetries(3); httpSolrServer.setUseMultiPartPost(true); HttpSolrServer clone = SolrServerUtils.clone(httpSolrServer, CORE_NAME); Assert.assertEquals(CORE_URL, clone.getBaseURL()); assertHttpSolrServerProperties(httpSolrServer, clone); } @Test public void testClonesLBHttpSolrServerCorrectly() throws MalformedURLException { LBHttpSolrServer lbSolrServer = new LBHttpSolrServer(BASE_URL, ALTERNATE_BASE_URL); lbSolrServer.setAliveCheckInterval(10); LBHttpSolrServer clone = SolrServerUtils.clone(lbSolrServer); Assert.assertEquals(ReflectionTestUtils.getField(lbSolrServer, FIELD_ALIVE_SERVERS), ReflectionTestUtils.getField(clone, FIELD_ALIVE_SERVERS)); assertLBHttpSolrServerProperties(lbSolrServer, clone); } @Test @SuppressWarnings("unchecked") public void testClonesLBHttpSolrServerForCoreCorrectly() throws MalformedURLException { LBHttpSolrServer lbSolrServer = new LBHttpSolrServer(BASE_URL, ALTERNATE_BASE_URL); lbSolrServer.setAliveCheckInterval(10); LBHttpSolrServer clone = SolrServerUtils.clone(lbSolrServer, CORE_NAME); Map<String, ?> aliveServers = (Map<String, ?>) ReflectionTestUtils.getField(clone, FIELD_ALIVE_SERVERS); Assert.assertThat(aliveServers.keySet(), hasItems(CORE_URL, ALTERNATE_CORE_URL)); assertLBHttpSolrServerProperties(lbSolrServer, clone); } @Test public void testClonesCloudSolrServerCorrectly() throws MalformedURLException { LBHttpSolrServer lbSolrServer = new LBHttpSolrServer(BASE_URL, ALTERNATE_BASE_URL); CloudSolrServer cloudServer = new CloudSolrServer(ZOO_KEEPER_URL, lbSolrServer); CloudSolrServer clone = SolrServerUtils.clone(cloudServer); Assert.assertEquals(ZOO_KEEPER_URL, ReflectionTestUtils.getField(clone, FIELD_ZOO_KEEPER)); LBHttpSolrServer lbClone = clone.getLbServer(); Assert.assertEquals(ReflectionTestUtils.getField(lbSolrServer, FIELD_ALIVE_SERVERS), ReflectionTestUtils.getField(lbClone, FIELD_ALIVE_SERVERS)); assertLBHttpSolrServerProperties(lbSolrServer, lbClone); } @Test @SuppressWarnings("unchecked") public void testClonesCloudSolrServerForCoreCorrectlyWhenCoreNameIsNotEmpty() throws MalformedURLException { LBHttpSolrServer lbSolrServer = new LBHttpSolrServer(BASE_URL, ALTERNATE_BASE_URL); CloudSolrServer cloudServer = new CloudSolrServer(ZOO_KEEPER_URL, lbSolrServer); CloudSolrServer clone = SolrServerUtils.clone(cloudServer, CORE_NAME); Assert.assertEquals(ZOO_KEEPER_URL, ReflectionTestUtils.getField(clone, FIELD_ZOO_KEEPER)); LBHttpSolrServer lbClone = clone.getLbServer(); Map<String, ?> aliveServers = (Map<String, ?>) ReflectionTestUtils.getField(lbClone, FIELD_ALIVE_SERVERS); Assert.assertThat(aliveServers.keySet(), hasItems(CORE_URL, ALTERNATE_CORE_URL)); assertLBHttpSolrServerProperties(lbSolrServer, lbClone); Assert.assertThat(clone.getDefaultCollection(), equalTo(CORE_NAME)); } @Test public void testClonesCloudSolrServerForCoreCorrectlyWhenNoLBHttpServerPresent() throws MalformedURLException { CloudSolrServer cloudServer = new CloudSolrServer(ZOO_KEEPER_URL); CloudSolrServer clone = SolrServerUtils.clone(cloudServer, CORE_NAME); Assert.assertEquals(ZOO_KEEPER_URL, ReflectionTestUtils.getField(clone, FIELD_ZOO_KEEPER)); LBHttpSolrServer lbClone = clone.getLbServer(); assertLBHttpSolrServerProperties(cloudServer.getLbServer(), lbClone); Assert.assertThat(clone.getDefaultCollection(), equalTo(CORE_NAME)); } @Test public void testCreateUrlForCoreAppendsCoreCorrectly() { Assert.assertEquals(CORE_URL, SolrServerUtils.appendCoreToBaseUrl(BASE_URL, CORE_NAME)); } @Test public void testCreateUrlForCoreAppendsCoreCorrectlyWhenBaseUrlHasTrailingSlash() { Assert.assertEquals(CORE_URL, SolrServerUtils.appendCoreToBaseUrl(BASE_URL + "/", CORE_NAME)); } @Test public void testCreateUrlForCoreAppendsCoreCorrectlyWhenCoreIsEmpty() { Assert.assertEquals(BASE_URL, SolrServerUtils.appendCoreToBaseUrl(BASE_URL, " ")); } @Test public void testCreateUrlForCoreAppendsCoreCorrectlyWhenCoreIsNull() { Assert.assertEquals(BASE_URL, SolrServerUtils.appendCoreToBaseUrl(BASE_URL, null)); } @Test(expected = IllegalArgumentException.class) public void testCreateUrlForCoreThrowsIllegalArgumentExceptionWhenBaseUrlIsNull() { Assert.assertEquals(BASE_URL, SolrServerUtils.appendCoreToBaseUrl(null, null)); } @Test public void testResolveSolrCoreNameShouldReturnEmptyStringWhenNoAnnotationPresent() { Assert.assertThat(SolrServerUtils.resolveSolrCoreName(ClassWithoutSolrDocumentAnnotation.class), isEmptyString()); } @Test public void testResolveSolrCoreNameShouldReturnEmptyStringWhenAnnotationHasNoValue() { Assert.assertThat(SolrServerUtils.resolveSolrCoreName(ClassWithEmptySolrDocumentAnnotation.class), isEmptyString()); } @Test public void testResolveSolrCoreNameShouldReturnAnnotationValueWhenPresent() { Assert.assertThat(SolrServerUtils.resolveSolrCoreName(ClassWithSolrDocumentAnnotation.class), equalTo("core1")); } /** * @see DATASOLR-189 */ @Test public void cloningLBHttpSolrServerShouldCopyHttpParamsCorrectly() throws MalformedURLException { HttpParams params = new BasicHttpParams(); params.setParameter("foo", "bar"); DefaultHttpClient client = new DefaultHttpClient(params); LBHttpSolrServer lbSolrServer = new LBHttpSolrServer(client, BASE_URL, ALTERNATE_BASE_URL); LBHttpSolrServer cloned = SolrServerUtils.clone(lbSolrServer, CORE_NAME); Assert.assertThat(cloned.getHttpClient().getParams(), IsEqual.equalTo(params)); } /** * @see DATASOLR-189 */ @Test public void cloningLBHttpSolrServerShouldCopyCredentialsProviderCorrectly() { BasicCredentialsProvider credentialsProvider = new BasicCredentialsProvider(); credentialsProvider.setCredentials(AuthScope.ANY, new UsernamePasswordCredentials("foo", "bar")); DefaultHttpClient client = new DefaultHttpClient(); client.setCredentialsProvider(credentialsProvider); LBHttpSolrServer lbSolrServer = new LBHttpSolrServer(client, BASE_URL, ALTERNATE_BASE_URL); LBHttpSolrServer cloned = SolrServerUtils.clone(lbSolrServer, CORE_NAME); Assert.assertThat(((AbstractHttpClient) cloned.getHttpClient()).getCredentialsProvider(), IsEqual.<CredentialsProvider>equalTo(credentialsProvider)); } /** * @see DATASOLR-189 */ @Test public void cloningHttpSolrServerShouldCopyHttpParamsCorrectly() { HttpParams params = new BasicHttpParams(); params.setParameter("foo", "bar"); DefaultHttpClient client = new DefaultHttpClient(params); HttpSolrServer solrServer = new HttpSolrServer(BASE_URL, client); HttpSolrServer cloned = SolrServerUtils.clone(solrServer); Assert.assertThat(cloned.getHttpClient().getParams(), IsEqual.equalTo(params)); } /** * @see DATASOLR-189 */ @Test public void cloningHttpSolrServerShouldCopyCredentialsProviderCorrectly() { BasicCredentialsProvider credentialsProvider = new BasicCredentialsProvider(); credentialsProvider.setCredentials(AuthScope.ANY, new UsernamePasswordCredentials("foo", "bar")); DefaultHttpClient client = new DefaultHttpClient(); client.setCredentialsProvider(credentialsProvider); HttpSolrServer solrServer = new HttpSolrServer(BASE_URL, client); HttpSolrServer cloned = SolrServerUtils.clone(solrServer); Assert.assertThat(((AbstractHttpClient) cloned.getHttpClient()).getCredentialsProvider(), IsEqual.<CredentialsProvider>equalTo(credentialsProvider)); } /** * @see DATASOLR-203 */ @Test public void cloningEmbeddedSolrServerShouldReuseCoreContainer() { CoreContainer coreContainer = Mockito.mock(CoreContainer.class); EmbeddedSolrServer solrServer = new EmbeddedSolrServer(coreContainer, null); EmbeddedSolrServer clone = SolrServerUtils.clone(solrServer, "core1"); Assert.assertThat(clone.getCoreContainer(), IsSame.sameInstance(coreContainer)); } private void assertHttpSolrServerProperties(HttpSolrServer httpSolrServer, HttpSolrServer clone) { Assert.assertEquals(ReflectionTestUtils.getField(httpSolrServer, "followRedirects"), ReflectionTestUtils.getField(clone, "followRedirects")); Assert.assertEquals(ReflectionTestUtils.getField(httpSolrServer, "maxRetries"), ReflectionTestUtils.getField(clone, "maxRetries")); Assert.assertEquals(ReflectionTestUtils.getField(httpSolrServer, "useMultiPartPost"), ReflectionTestUtils.getField(clone, "useMultiPartPost")); } private void assertLBHttpSolrServerProperties(LBHttpSolrServer lbSolrServer, LBHttpSolrServer clone) { Assert.assertEquals(ReflectionTestUtils.getField(lbSolrServer, "interval"), ReflectionTestUtils.getField(clone, "interval")); } private static class ClassWithoutSolrDocumentAnnotation { } @SolrDocument private static class ClassWithEmptySolrDocumentAnnotation { } @SolrDocument(solrCoreName = "core1") private static class ClassWithSolrDocumentAnnotation { } }