blob: cf55cc6d8a637577b0fb0935ce9265f4b2c7a5db [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.solr.handler.admin;
import java.util.Map;
import com.google.common.collect.Maps;
import org.apache.solr.SolrTestCaseJ4;
import org.apache.solr.common.SolrException;
import org.apache.solr.common.SolrException.ErrorCode;
import org.apache.solr.common.params.MapSolrParams;
import org.apache.solr.request.SolrQueryRequest;
import org.junit.After;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
public class CoreAdminOperationTest extends SolrTestCaseJ4 {
private CoreAdminHandler.CallInfo callInfo;
private SolrQueryRequest mockRequest;
@BeforeClass
public static void setUpClass() {
assumeWorkingMockito();
}
@Before
public void setUp() throws Exception{
super.setUp();
mockRequest = mock(SolrQueryRequest.class);
callInfo = new CoreAdminHandler.CallInfo(null, mockRequest, null, null);
}
@After
public void tearDown() throws Exception {
super.tearDown();
}
@Test
public void testStatusUnexpectedFailuresResultIn500SolrException() throws Exception {
final Throwable cause = new NullPointerException();
whenUnexpectedErrorOccursDuringCoreAdminOp(cause);
Exception ex = expectThrows(Exception.class, () -> CoreAdminOperation.STATUS_OP.execute(callInfo));
assertSolrExceptionWithCodeAndCause(ex, ErrorCode.SERVER_ERROR.code, cause);
}
@Test
public void testUnloadUnexpectedFailuresResultIn500SolrException() throws Exception {
final Throwable cause = new NullPointerException();
whenUnexpectedErrorOccursDuringCoreAdminOp(cause);
Exception ex = expectThrows(Exception.class, () -> CoreAdminOperation.UNLOAD_OP.execute(callInfo));
assertSolrExceptionWithCodeAndCause(ex, ErrorCode.SERVER_ERROR.code, cause);
}
@Test
public void testUnloadMissingCoreNameResultsIn400SolrException() throws Exception {
whenCoreAdminOpHasParams(Maps.newHashMap());
Exception ex = expectThrows(Exception.class, () -> CoreAdminOperation.UNLOAD_OP.execute(callInfo));
assertSolrExceptionWithCode(ex, ErrorCode.BAD_REQUEST.code);
}
@Test
public void testReloadUnexpectedFailuresResultIn500SolrException() {
final Throwable cause = new NullPointerException();
whenUnexpectedErrorOccursDuringCoreAdminOp(cause);
Exception ex = expectThrows(Exception.class, () -> CoreAdminOperation.RELOAD_OP.execute(callInfo));
assertSolrExceptionWithCodeAndCause(ex, ErrorCode.SERVER_ERROR.code, cause);
}
@Test
public void testReloadMissingCoreNameResultsIn400SolrException() {
whenCoreAdminOpHasParams(Maps.newHashMap());
Exception ex = expectThrows(Exception.class, () -> CoreAdminOperation.RELOAD_OP.execute(callInfo));
assertSolrExceptionWithCode(ex, ErrorCode.BAD_REQUEST.code);
}
@Test
public void testCreateUnexpectedFailuresResultIn500SolrException() {
final Throwable cause = new NullPointerException();
whenUnexpectedErrorOccursDuringCoreAdminOp(cause);
Exception ex = expectThrows(Exception.class, () -> CoreAdminOperation.CREATE_OP.execute(callInfo));
assertSolrExceptionWithCodeAndCause(ex, ErrorCode.SERVER_ERROR.code, cause);
}
@Test
public void testCreateMissingCoreNameResultsIn400SolrException() {
whenCoreAdminOpHasParams(Maps.newHashMap());
Exception ex = expectThrows(Exception.class, () -> CoreAdminOperation.CREATE_OP.execute(callInfo));
assertSolrExceptionWithCode(ex, ErrorCode.BAD_REQUEST.code);
}
@Test
public void testSwapUnexpectedFailuresResultIn500SolrException() {
final Throwable cause = new NullPointerException();
whenUnexpectedErrorOccursDuringCoreAdminOp(cause);
Exception ex = expectThrows(Exception.class, () -> CoreAdminOperation.SWAP_OP.execute(callInfo));
assertSolrExceptionWithCodeAndCause(ex, ErrorCode.SERVER_ERROR.code, cause);
}
@Test
public void testSwapMissingCoreParamResultsIn400SolrException() {
final Map<String, String> params = Maps.newHashMap();
params.put("other", "some-core-name");
whenCoreAdminOpHasParams(params);
Exception ex = expectThrows(Exception.class, () -> CoreAdminOperation.SWAP_OP.execute(callInfo));
assertSolrExceptionWithCode(ex, ErrorCode.BAD_REQUEST.code);
}
@Test
public void testSwapMissingOtherParamResultsIn400SolrException() {
final Map<String, String> params = Maps.newHashMap();
params.put("core", "some-core-name");
whenCoreAdminOpHasParams(params);
Exception ex = expectThrows(Exception.class, () -> CoreAdminOperation.SWAP_OP.execute(callInfo));
assertSolrExceptionWithCode(ex, ErrorCode.BAD_REQUEST.code);
}
@Test
public void testRenameUnexpectedFailuresResultIn500SolrException() {
final Throwable cause = new NullPointerException();
whenUnexpectedErrorOccursDuringCoreAdminOp(cause);
Exception ex = expectThrows(Exception.class, () -> CoreAdminOperation.RENAME_OP.execute(callInfo));
assertSolrExceptionWithCodeAndCause(ex, ErrorCode.SERVER_ERROR.code, cause);
}
@Test
public void testRenameMissingCoreParamResultsIn400SolrException() {
final Map<String, String> params = Maps.newHashMap();
params.put("other", "some-core-name");
whenCoreAdminOpHasParams(params);
Exception ex = expectThrows(Exception.class, () -> CoreAdminOperation.RENAME_OP.execute(callInfo));
assertSolrExceptionWithCode(ex, ErrorCode.BAD_REQUEST.code);
}
@Test
public void testRenameMissingOtherParamResultsIn400SolrException() {
final Map<String, String> params = Maps.newHashMap();
params.put("core", "some-core-name");
whenCoreAdminOpHasParams(params);
Exception ex = expectThrows(Exception.class, () -> CoreAdminOperation.RENAME_OP.execute(callInfo));
assertSolrExceptionWithCode(ex, ErrorCode.BAD_REQUEST.code);
}
@Test
public void testMergeUnexpectedFailuresResultIn500SolrException() {
final Throwable cause = new NullPointerException();
whenUnexpectedErrorOccursDuringCoreAdminOp(cause);
Exception ex = expectThrows(Exception.class, () -> CoreAdminOperation.MERGEINDEXES_OP.execute(callInfo));
assertSolrExceptionWithCodeAndCause(ex, ErrorCode.SERVER_ERROR.code, cause);
}
@Test
public void testMergeMissingCoreParamResultsIn400SolrException() {
final Map<String, String> params = Maps.newHashMap();
params.put("indexDir", "some/index/dir");
whenCoreAdminOpHasParams(params);
Exception ex = expectThrows(Exception.class, () -> CoreAdminOperation.MERGEINDEXES_OP.execute(callInfo));
assertSolrExceptionWithCode(ex, ErrorCode.BAD_REQUEST.code);
}
@Test
public void testSplitUnexpectedFailuresResultIn500SolrException() {
final Throwable cause = new NullPointerException();
whenUnexpectedErrorOccursDuringCoreAdminOp(cause);
Exception ex = expectThrows(Exception.class, () -> CoreAdminOperation.SPLIT_OP.execute(callInfo));
assertSolrExceptionWithCodeAndCause(ex, ErrorCode.SERVER_ERROR.code, cause);
}
@Test
public void testSplitMissingCoreParamResultsIn400SolrException() {
whenCoreAdminOpHasParams(Maps.newHashMap());
Exception ex = expectThrows(Exception.class, () -> CoreAdminOperation.SPLIT_OP.execute(callInfo));
assertSolrExceptionWithCode(ex, ErrorCode.BAD_REQUEST.code);
}
@Test
public void testPrepRecoveryUnexpectedFailuresResultIn500SolrException() {
final Throwable cause = new NullPointerException();
whenUnexpectedErrorOccursDuringCoreAdminOp(cause);
Exception ex = expectThrows(Exception.class, () -> CoreAdminOperation.PREPRECOVERY_OP.execute(callInfo));
assertSolrExceptionWithCodeAndCause(ex, ErrorCode.SERVER_ERROR.code, cause);
}
@Test
public void testRequestRecoveryUnexpectedFailuresResultIn500Exception() {
final Throwable cause = new NullPointerException();
whenUnexpectedErrorOccursDuringCoreAdminOp(cause);
Exception ex = expectThrows(Exception.class, () -> CoreAdminOperation.REQUESTRECOVERY_OP.execute(callInfo));
assertSolrExceptionWithCodeAndCause(ex, ErrorCode.SERVER_ERROR.code, cause);
}
@Test
public void testRequestRecoveryMissingCoreParamResultsIn400SolrException() {
whenCoreAdminOpHasParams(Maps.newHashMap());
Exception ex = expectThrows(Exception.class, () -> CoreAdminOperation.REQUESTRECOVERY_OP.execute(callInfo));
assertSolrExceptionWithCode(ex, ErrorCode.BAD_REQUEST.code);
}
@Test
public void testRequestSyncUnexpectedFailuresResultIn500Exception() {
final Throwable cause = new NullPointerException();
whenUnexpectedErrorOccursDuringCoreAdminOp(cause);
Exception ex = expectThrows(Exception.class, () -> CoreAdminOperation.REQUESTSYNCSHARD_OP.execute(callInfo));
assertSolrExceptionWithCodeAndCause(ex, ErrorCode.SERVER_ERROR.code, cause);
}
@Test
public void testRequestSyncMissingCoreParamResultsIn400SolrException() {
whenCoreAdminOpHasParams(Maps.newHashMap());
Exception ex = expectThrows(Exception.class, () -> CoreAdminOperation.REQUESTSYNCSHARD_OP.execute(callInfo));
assertSolrExceptionWithCode(ex, ErrorCode.BAD_REQUEST.code);
}
@Test
public void testRequestBufferUpdatesUnexpectedFailuresResultIn500Exception() {
final Throwable cause = new NullPointerException();
whenUnexpectedErrorOccursDuringCoreAdminOp(cause);
Exception ex = expectThrows(Exception.class, () -> CoreAdminOperation.REQUESTBUFFERUPDATES_OP.execute(callInfo));
assertSolrExceptionWithCodeAndCause(ex, ErrorCode.SERVER_ERROR.code, cause);
}
@Test
public void testRequestBufferUpdatesMissingCoreParamResultsIn400SolrException() {
whenCoreAdminOpHasParams(Maps.newHashMap());
Exception ex = expectThrows(Exception.class, () -> CoreAdminOperation.REQUESTBUFFERUPDATES_OP.execute(callInfo));
assertSolrExceptionWithCode(ex, ErrorCode.BAD_REQUEST.code);
}
@Test
public void testRequestApplyUpdatesUnexpectedFailuresResultIn500Exception() {
final Throwable cause = new NullPointerException();
whenUnexpectedErrorOccursDuringCoreAdminOp(cause);
Exception ex = expectThrows(Exception.class, () -> CoreAdminOperation.REQUESTAPPLYUPDATES_OP.execute(callInfo));
assertSolrExceptionWithCodeAndCause(ex, ErrorCode.SERVER_ERROR.code, cause);
}
@Test
public void testRequestApplyUpdatesMissingCoreParamResultsIn400SolrException() {
whenCoreAdminOpHasParams(Maps.newHashMap());
Exception ex = expectThrows(Exception.class, () -> CoreAdminOperation.REQUESTAPPLYUPDATES_OP.execute(callInfo));
assertSolrExceptionWithCode(ex, ErrorCode.BAD_REQUEST.code);
}
@Test
public void testOverseerOpUnexpectedFailuresResultIn500Exception() {
final Throwable cause = new NullPointerException();
whenUnexpectedErrorOccursDuringCoreAdminOp(cause);
Exception ex = expectThrows(Exception.class, () -> CoreAdminOperation.OVERSEEROP_OP.execute(callInfo));
assertSolrExceptionWithCode(ex, ErrorCode.SERVER_ERROR.code);
}
@Test
public void testRequestStatusUnexpectedFailuresResultIn500Exception() {
final Throwable cause = new NullPointerException();
whenUnexpectedErrorOccursDuringCoreAdminOp(cause);
Exception ex = expectThrows(Exception.class, () -> CoreAdminOperation.REQUESTSTATUS_OP.execute(callInfo));
assertSolrExceptionWithCodeAndCause(ex, ErrorCode.SERVER_ERROR.code, cause);
}
@Test
public void testRequestStatusMissingRequestIdParamResultsIn400SolrException() {
whenCoreAdminOpHasParams(Maps.newHashMap());
Exception ex = expectThrows(Exception.class, () -> CoreAdminOperation.REQUESTSTATUS_OP.execute(callInfo));
assertSolrExceptionWithCode(ex, ErrorCode.BAD_REQUEST.code);
}
@Test
public void testRejoinLeaderElectionUnexpectedFailuresResultIn500Exception() {
final Throwable cause = new NullPointerException();
whenUnexpectedErrorOccursDuringCoreAdminOp(cause);
Exception ex = expectThrows(Exception.class, () -> CoreAdminOperation.REJOINLEADERELECTION_OP.execute(callInfo));
assertSolrExceptionWithCode(ex, ErrorCode.SERVER_ERROR.code);
}
@Test
public void testInvokeUnexpectedFailuresResultIn500Exception() {
final Throwable cause = new NullPointerException();
whenUnexpectedErrorOccursDuringCoreAdminOp(cause);
Exception ex = expectThrows(Exception.class, () -> CoreAdminOperation.INVOKE_OP.execute(callInfo));
assertSolrExceptionWithCodeAndCause(ex, ErrorCode.SERVER_ERROR.code, cause);
}
@Test
public void testInvokeMissingClassParamResultsIn400SolrException() {
whenCoreAdminOpHasParams(Maps.newHashMap());
Exception ex = expectThrows(Exception.class, () -> CoreAdminOperation.INVOKE_OP.execute(callInfo));
assertSolrExceptionWithCode(ex, ErrorCode.BAD_REQUEST.code);
}
@Test
public void testBackupUnexpectedFailuresResultIn500Exception() {
final Throwable cause = new NullPointerException();
whenUnexpectedErrorOccursDuringCoreAdminOp(cause);
Exception ex = expectThrows(Exception.class, () -> CoreAdminOperation.BACKUPCORE_OP.execute(callInfo));
assertSolrExceptionWithCodeAndCause(ex, ErrorCode.SERVER_ERROR.code, cause);
}
@Test
public void testBackupMissingCoreParamResultsIn400SolrException() {
final Map<String, String> params = Maps.newHashMap();
params.put("name", "any-name-param");
whenCoreAdminOpHasParams(params);
Exception ex = expectThrows(Exception.class, () -> CoreAdminOperation.BACKUPCORE_OP.execute(callInfo));
assertSolrExceptionWithCode(ex, ErrorCode.BAD_REQUEST.code);
}
@Test
public void testBackupMissingNameParamResultsIn400SolrException() {
final Map<String, String> params = Maps.newHashMap();
params.put("core", "any-core-param");
whenCoreAdminOpHasParams(params);
Exception ex = expectThrows(Exception.class, () -> CoreAdminOperation.BACKUPCORE_OP.execute(callInfo));
assertSolrExceptionWithCode(ex, ErrorCode.BAD_REQUEST.code);
}
@Test
public void testRestoreUnexpectedFailuresResultIn500Exception() {
final Throwable cause = new NullPointerException();
whenUnexpectedErrorOccursDuringCoreAdminOp(cause);
Exception ex = expectThrows(Exception.class, () -> CoreAdminOperation.RESTORECORE_OP.execute(callInfo));
assertSolrExceptionWithCodeAndCause(ex, ErrorCode.SERVER_ERROR.code, cause);
}
@Test
public void testRestoreMissingCoreParamResultsIn400SolrException() {
final Map<String, String> params = Maps.newHashMap();
params.put("name", "any-name-param");
whenCoreAdminOpHasParams(params);
Exception ex = expectThrows(Exception.class, () -> CoreAdminOperation.RESTORECORE_OP.execute(callInfo));
assertSolrExceptionWithCode(ex, ErrorCode.BAD_REQUEST.code);
}
@Test
public void testRestoreMissingNameParamResultsIn400SolrException() {
final Map<String, String> params = Maps.newHashMap();
params.put("core", "any-core-param");
whenCoreAdminOpHasParams(params);
Exception ex = expectThrows(Exception.class, () -> CoreAdminOperation.RESTORECORE_OP.execute(callInfo));
assertSolrExceptionWithCode(ex, ErrorCode.BAD_REQUEST.code);
}
@Test
public void testCreateSnapshotUnexpectedFailuresResultIn500Exception() {
final Throwable cause = new NullPointerException();
whenUnexpectedErrorOccursDuringCoreAdminOp(cause);
Exception ex = expectThrows(Exception.class, () -> CoreAdminOperation.CREATESNAPSHOT_OP.execute(callInfo));
assertSolrExceptionWithCodeAndCause(ex, ErrorCode.SERVER_ERROR.code, cause);
}
@Test
public void testCreateSnapshotMissingCoreParamResultsIn400SolrException() {
final Map<String, String> params = Maps.newHashMap();
params.put("commitName", "anyCommitName");
whenCoreAdminOpHasParams(params);
Exception ex = expectThrows(Exception.class, () -> CoreAdminOperation.CREATESNAPSHOT_OP.execute(callInfo));
assertSolrExceptionWithCode(ex, ErrorCode.BAD_REQUEST.code);
}
@Test
public void testCreateSnapshotMissingCommitNameParamResultsIn400SolrException() {
final Map<String, String> params = Maps.newHashMap();
params.put("core", "any-core-param");
whenCoreAdminOpHasParams(params);
Exception ex = expectThrows(Exception.class, () -> CoreAdminOperation.CREATESNAPSHOT_OP.execute(callInfo));
assertSolrExceptionWithCode(ex, ErrorCode.BAD_REQUEST.code);
}
@Test
public void testDeleteSnapshotUnexpectedFailuresResultIn500Exception() {
final Throwable cause = new NullPointerException();
whenUnexpectedErrorOccursDuringCoreAdminOp(cause);
Exception ex = expectThrows(Exception.class, () -> CoreAdminOperation.DELETESNAPSHOT_OP.execute(callInfo));
assertSolrExceptionWithCodeAndCause(ex, ErrorCode.SERVER_ERROR.code, cause);
}
@Test
public void testDeleteSnapshotMissingCoreParamResultsIn400SolrException() {
final Map<String, String> params = Maps.newHashMap();
params.put("commitName", "anyCommitName");
whenCoreAdminOpHasParams(params);
Exception ex = expectThrows(Exception.class, () -> CoreAdminOperation.DELETESNAPSHOT_OP.execute(callInfo));
assertSolrExceptionWithCode(ex, ErrorCode.BAD_REQUEST.code);
}
@Test
public void testDeleteSnapshotMissingCommitNameParamResultsIn400SolrException() {
final Map<String, String> params = Maps.newHashMap();
params.put("core", "any-core-param");
whenCoreAdminOpHasParams(params);
Exception ex = expectThrows(Exception.class, () -> CoreAdminOperation.DELETESNAPSHOT_OP.execute(callInfo));
assertSolrExceptionWithCode(ex, ErrorCode.BAD_REQUEST.code);
}
@Test
public void testListSnapshotUnexpectedFailuresResultIn500Exception() {
final Throwable cause = new NullPointerException();
whenUnexpectedErrorOccursDuringCoreAdminOp(cause);
Exception ex = expectThrows(Exception.class, () -> CoreAdminOperation.LISTSNAPSHOTS_OP.execute(callInfo));
assertSolrExceptionWithCodeAndCause(ex, ErrorCode.SERVER_ERROR.code, cause);
}
@Test
public void testListSnapshotMissingCoreParamResultsIn400SolrException() {
whenCoreAdminOpHasParams(Maps.newHashMap());
Exception ex = expectThrows(Exception.class, () -> CoreAdminOperation.LISTSNAPSHOTS_OP.execute(callInfo));
assertSolrExceptionWithCode(ex, ErrorCode.BAD_REQUEST.code);
}
private void whenUnexpectedErrorOccursDuringCoreAdminOp(Throwable cause) {
when(mockRequest.getParams()).thenThrow(cause);
}
private void whenCoreAdminOpHasParams(Map<String, String> solrParams) {
when(mockRequest.getParams()).thenReturn(new MapSolrParams(solrParams));
}
private void assertSolrExceptionWithCodeAndCause(Throwable thrownException, int expectedStatus, Throwable expectedCause) {
assertEquals(SolrException.class, thrownException.getClass());
final SolrException solrException = (SolrException) thrownException;
assertEquals(expectedStatus, solrException.code());
if (expectedCause != null) assertEquals(expectedCause, solrException.getCause());
}
private void assertSolrExceptionWithCode(Throwable thrownException, int expectedStatus) {
assertSolrExceptionWithCodeAndCause(thrownException, expectedStatus, null);
}
}