This is an automated email from the ASF dual-hosted git repository.

epugh pushed a commit to branch branch_10x
in repository https://gitbox.apache.org/repos/asf/solr.git


The following commit(s) were added to refs/heads/branch_10x by this push:
     new 732cf382017 Fill in missing test coverage for delete configset api 
(#4407)
732cf382017 is described below

commit 732cf382017715b526d7a0cea1daa314dba43285
Author: Eric Pugh <[email protected]>
AuthorDate: Wed May 20 08:24:08 2026 -0400

    Fill in missing test coverage for delete configset api (#4407)
---
 .../solr/handler/configsets/DeleteConfigSet.java   |  2 +-
 .../handler/configsets/DeleteConfigSetAPITest.java | 93 ++++++++++++++++++++++
 2 files changed, 94 insertions(+), 1 deletion(-)

diff --git 
a/solr/core/src/java/org/apache/solr/handler/configsets/DeleteConfigSet.java 
b/solr/core/src/java/org/apache/solr/handler/configsets/DeleteConfigSet.java
index 3b26c5e2fc2..7ae1783ab2f 100644
--- a/solr/core/src/java/org/apache/solr/handler/configsets/DeleteConfigSet.java
+++ b/solr/core/src/java/org/apache/solr/handler/configsets/DeleteConfigSet.java
@@ -51,7 +51,7 @@ public class DeleteConfigSet extends ConfigSetAPIBase 
implements ConfigsetsApi.D
   @PermissionName(CONFIG_EDIT_PERM)
   public SolrJerseyResponse deleteConfigSet(String configSetName) throws 
Exception {
     final var response = instantiateJerseyResponse(SolrJerseyResponse.class);
-    if (StrUtils.isNullOrEmpty(configSetName)) {
+    if (StrUtils.isNullOrEmpty(configSetName) || 
StrUtils.isBlank(configSetName)) {
       throw new SolrException(
           SolrException.ErrorCode.BAD_REQUEST, "No configset name provided to 
delete");
     }
diff --git 
a/solr/core/src/test/org/apache/solr/handler/configsets/DeleteConfigSetAPITest.java
 
b/solr/core/src/test/org/apache/solr/handler/configsets/DeleteConfigSetAPITest.java
new file mode 100644
index 00000000000..9846f960852
--- /dev/null
+++ 
b/solr/core/src/test/org/apache/solr/handler/configsets/DeleteConfigSetAPITest.java
@@ -0,0 +1,93 @@
+/*
+ * 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.configsets;
+
+import static org.apache.solr.SolrTestCaseJ4.assumeWorkingMockito;
+import static org.mockito.Mockito.mock;
+
+import org.apache.solr.SolrTestCase;
+import org.apache.solr.common.SolrException;
+import org.apache.solr.core.CoreContainer;
+import org.junit.Before;
+import org.junit.BeforeClass;
+import org.junit.Test;
+
+/**
+ * Unit tests for {@link DeleteConfigSet}.
+ *
+ * <p>Note: This test focuses on input validation. Full deletion workflow is 
tested in integration
+ * tests like {@code TestConfigSetsAPI} since actual deletion requires 
ZooKeeper interaction.
+ */
+public class DeleteConfigSetAPITest extends SolrTestCase {
+
+  private CoreContainer mockCoreContainer;
+
+  @BeforeClass
+  public static void ensureWorkingMockito() {
+    assumeWorkingMockito();
+  }
+
+  @Before
+  public void clearMocks() {
+    mockCoreContainer = mock(CoreContainer.class);
+  }
+
+  @Test
+  public void testNullConfigSetNameThrowsBadRequest() {
+    final var api = new DeleteConfigSet(mockCoreContainer, null, null);
+    final var ex = assertThrows(SolrException.class, () -> 
api.deleteConfigSet(null));
+
+    assertEquals(SolrException.ErrorCode.BAD_REQUEST.code, ex.code());
+    assertTrue(
+        "Error message should mention missing configset name",
+        ex.getMessage().contains("No configset name"));
+  }
+
+  @Test
+  public void testEmptyConfigSetNameThrowsBadRequest() {
+    final var api = new DeleteConfigSet(mockCoreContainer, null, null);
+    final var ex = assertThrows(SolrException.class, () -> 
api.deleteConfigSet(""));
+
+    assertEquals(SolrException.ErrorCode.BAD_REQUEST.code, ex.code());
+    assertTrue(
+        "Error message should mention missing configset name",
+        ex.getMessage().contains("No configset name"));
+  }
+
+  @Test
+  public void testWhitespaceOnlyConfigSetNameThrowsBadRequest() {
+    final var api = new DeleteConfigSet(mockCoreContainer, null, null);
+    final var ex = assertThrows(SolrException.class, () -> 
api.deleteConfigSet("   "));
+
+    assertEquals(SolrException.ErrorCode.BAD_REQUEST.code, ex.code());
+    assertTrue(
+        "Error message should mention missing configset name",
+        ex.getMessage().contains("No configset name"));
+  }
+
+  @Test
+  public void testTabOnlyConfigSetNameThrowsBadRequest() {
+    final var api = new DeleteConfigSet(mockCoreContainer, null, null);
+    final var ex = assertThrows(SolrException.class, () -> 
api.deleteConfigSet("\t"));
+
+    assertEquals(SolrException.ErrorCode.BAD_REQUEST.code, ex.code());
+    assertTrue(
+        "Error message should mention missing configset name",
+        ex.getMessage().contains("No configset name"));
+  }
+}

Reply via email to