Package org.springframework.data.solr.server.support

Source Code of org.springframework.data.solr.server.support.SolrServerUtilTests$ClassWithoutSolrDocumentAnnotation

/*
* 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 {

  }

}
TOP

Related Classes of org.springframework.data.solr.server.support.SolrServerUtilTests$ClassWithoutSolrDocumentAnnotation

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.