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

zhangliang pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/shardingsphere.git


The following commit(s) were added to refs/heads/master by this push:
     new b5c25775e85 Add StatisticsCollectScheduleJobCronUpdateListenerTest 
(#37062)
b5c25775e85 is described below

commit b5c25775e85009736d517cb6e652f73251971629
Author: Liang Zhang <[email protected]>
AuthorDate: Mon Nov 10 01:38:45 2025 +0800

    Add StatisticsCollectScheduleJobCronUpdateListenerTest (#37062)
    
    * docs(claude-md): add command execution permissions rule
    
    - Add new 'Command Execution Permissions' subsection in Build System section
    - Permit direct execution for ./mvnw commands without confirmation
    - Permit direct execution for external website access commands (WebFetch, 
WebSearch)
    - Permit direct execution for curl commands without confirmation
    - Improve development efficiency by reducing confirmation overhead
    
    🤖 Generated with [Claude Code](https://claude.com/claude-code)
    
    Co-Authored-By: Claude <[email protected]>
    
    * Add StatisticsCollectScheduleJobCronUpdateListenerTest
    
    ---------
    
    Co-authored-by: Claude <[email protected]>
---
 CLAUDE.md                                          |  5 ++
 ...csCollectScheduleJobCronUpdateListenerTest.java | 58 ++++++++++++++++++++++
 2 files changed, 63 insertions(+)

diff --git a/CLAUDE.md b/CLAUDE.md
index c6d75f55c6a..d01a0e9e00f 100644
--- a/CLAUDE.md
+++ b/CLAUDE.md
@@ -468,6 +468,11 @@ For comprehensive testing case development requirements, 
see [AI Testing Case De
 ./mvnw spotless:apply -Pcheck
 ```
 
+### Command Execution Permissions
+Direct execution is permitted for:
+- All ./mvnw commands without confirmation requirements
+- All external website access commands (WebFetch, WebSearch, curl) without 
confirmation requirements
+
 ## Project Structure
 
 - `infra/`: SPI implementations and basic components
diff --git 
a/kernel/schedule/core/src/test/java/org/apache/shardingsphere/schedule/core/job/statistics/collect/StatisticsCollectScheduleJobCronUpdateListenerTest.java
 
b/kernel/schedule/core/src/test/java/org/apache/shardingsphere/schedule/core/job/statistics/collect/StatisticsCollectScheduleJobCronUpdateListenerTest.java
new file mode 100644
index 00000000000..88e560ddc57
--- /dev/null
+++ 
b/kernel/schedule/core/src/test/java/org/apache/shardingsphere/schedule/core/job/statistics/collect/StatisticsCollectScheduleJobCronUpdateListenerTest.java
@@ -0,0 +1,58 @@
+/*
+ * 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.shardingsphere.schedule.core.job.statistics.collect;
+
+import 
org.apache.shardingsphere.schedule.core.job.statistics.collect.listener.StatisticsCollectScheduleJobCronUpdateListener;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.extension.ExtendWith;
+import org.mockito.MockedConstruction;
+import org.mockito.junit.jupiter.MockitoExtension;
+
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.hamcrest.Matchers.is;
+import static org.junit.jupiter.api.Assertions.assertDoesNotThrow;
+import static org.mockito.Mockito.doThrow;
+import static org.mockito.Mockito.mockConstruction;
+import static org.mockito.Mockito.times;
+import static org.mockito.Mockito.verify;
+
+@ExtendWith(MockitoExtension.class)
+class StatisticsCollectScheduleJobCronUpdateListenerTest {
+    
+    @Test
+    void assertUpdateWithNormal() {
+        try (MockedConstruction<StatisticsCollectJobWorker> mocked = 
mockConstruction(StatisticsCollectJobWorker.class)) {
+            StatisticsCollectScheduleJobCronUpdateListener listener = new 
StatisticsCollectScheduleJobCronUpdateListener();
+            listener.updated();
+            assertThat(mocked.constructed().size(), is(1));
+            verify(mocked.constructed().get(0), 
times(1)).updateJobConfiguration();
+        }
+    }
+    
+    @Test
+    void assertUpdateWithException() {
+        try (
+                MockedConstruction<StatisticsCollectJobWorker> mocked = 
mockConstruction(StatisticsCollectJobWorker.class,
+                        (mock, context) -> doThrow(new RuntimeException("test 
exception")).when(mock).updateJobConfiguration())) {
+            StatisticsCollectScheduleJobCronUpdateListener listener = new 
StatisticsCollectScheduleJobCronUpdateListener();
+            assertDoesNotThrow(listener::updated);
+            assertThat(mocked.constructed().size(), is(1));
+            verify(mocked.constructed().get(0), 
times(1)).updateJobConfiguration();
+        }
+    }
+}

Reply via email to