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();
+ }
+ }
+}