marmot-z commented on code in PR #2475: URL: https://github.com/apache/shardingsphere-elasticjob/pull/2475#discussion_r2331680848
########## test/native/src/test/java/org/apache/shardingsphere/elasticjob/test/natived/it/operation/JavaTest.java: ########## @@ -305,4 +308,44 @@ void testShardingStatisticsAPI() { }); job.shutdown(); } + + @Test + void testGivenOneShardingCountWhenShutdownThenTaskCanCaptureInterruptedException() throws Exception { + testCaptureInterruptedException(1); + } + + @Test + void testGivenOneMoreShardingCountWhenShutdownThenTaskCanCaptureInterruptedException() throws Exception { + testCaptureInterruptedException(2); + } + + private void testCaptureInterruptedException(int shardingTotalCount) throws Exception { + String jobName = "testTaskCaptureInterruptedTask"; + final AtomicBoolean captured = new AtomicBoolean(false); + LocalTime tenSecondsLater = LocalTime.now().plusSeconds(2); + String cronExpression = String.format("%d %d %d * * ?", tenSecondsLater.getSecond(), tenSecondsLater.getMinute(), tenSecondsLater.getHour()); + SimpleJob captureInterruptedTask = shardingContext -> { + try { + while (true) { + if (Thread.currentThread().isInterrupted()) { + captured.set(true); + break; + } + System.out.println("Running..."); + Thread.sleep(100); + } + } catch (InterruptedException e) { + captured.set(true); + Thread.currentThread().interrupt(); + } + }; + ScheduleJobBootstrap job = new ScheduleJobBootstrap(firstRegCenter, captureInterruptedTask, + JobConfiguration.newBuilder(jobName, shardingTotalCount) + .cron(cronExpression) + .build()); + job.schedule(); + Awaitility.await().pollDelay(4L, TimeUnit.SECONDS).until(() -> true); + job.shutdown(); + Awaitility.await().pollDelay(1L, TimeUnit.SECONDS).untilAsserted(() -> assertThat(captured.get(), is(true))); Review Comment: This requires four steps: 1. Wait 4 seconds for the job to actually run (because the task is set to start within two seconds). 2. Shut down the elastic-job. 3. Wait 1 second for the elastic-job to execute its exit logic. 4. Check that the variable status matches expectations. -- This is an automated message from the Apache Git Service. To respond to the message, please log on to GitHub and use the URL above to go to the specific comment. To unsubscribe, e-mail: notifications-unsubscr...@shardingsphere.apache.org For queries about this service, please contact Infrastructure at: us...@infra.apache.org