SettingsChangeListener Tests

10

tests

0

failures

0

ignored

0.398s

duration

100%

successful

Tests

Test Duration Result
should cleanup on shutdown() 0.009s passed
should handle batch setting updates() 0.028s passed
should handle concurrent updates() 0.056s passed
should handle exceptions gracefully() 0.042s passed
should handle setting deletion notification() 0.078s passed
should handle setting update notification() 0.041s passed
should identify threshold-related keys() 0.004s passed
should process special setting keys() 0.011s passed
should register with notifier on initialization() 0.100s passed
should update local cache on setting change() 0.029s passed

Standard output

2026-04-07 15:05:25 - c.q.t.s.s.SettingsChangeListenerImpl - Received setting change notification: deleted.setting = 
2026-04-07 15:05:25 - c.q.t.s.s.SettingsChangeListenerImpl - Setting deleted: deleted.setting
2026-04-07 15:05:25 - c.q.t.s.s.SettingsChangeListenerImpl - Received setting change notification: cache.update = cached-value
2026-04-07 15:05:25 - c.q.t.s.s.SettingsChangeListenerImpl - Setting updated: cache.update = cached-value
2026-04-07 15:05:25 - c.q.t.s.s.SettingsChangeListenerImpl - Received setting change notification: error.setting = error-value
2026-04-07 15:05:25 - c.q.t.s.s.SettingsChangeListenerImpl - Error processing setting change for key: error.setting
java.lang.RuntimeException: Cache error
	at com.quantumsoft.tia.scanner.services.SettingsChangeListenerImplTest$should handle exceptions gracefully$1.invokeSuspend(SettingsChangeListenerImplTest.kt:133)
	at com.quantumsoft.tia.scanner.services.SettingsChangeListenerImplTest$should handle exceptions gracefully$1.invoke(SettingsChangeListenerImplTest.kt)
	at com.quantumsoft.tia.scanner.services.SettingsChangeListenerImplTest$should handle exceptions gracefully$1.invoke(SettingsChangeListenerImplTest.kt)
	at kotlinx.coroutines.test.TestBuildersKt__TestBuildersKt$runTest$2$1$1.invokeSuspend(TestBuilders.kt:316)
	at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33)
	at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:104)
	at kotlinx.coroutines.test.TestDispatcher.processEvent$kotlinx_coroutines_test(TestDispatcher.kt:24)
	at kotlinx.coroutines.test.TestCoroutineScheduler.tryRunNextTaskUnless$kotlinx_coroutines_test(TestCoroutineScheduler.kt:99)
	at kotlinx.coroutines.test.TestBuildersKt__TestBuildersKt$runTest$2$1$workRunner$1.invokeSuspend(TestBuilders.kt:322)
	at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33)
	at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:104)
	at kotlinx.coroutines.EventLoopImplBase.processNextEvent(EventLoop.common.kt:277)
	at kotlinx.coroutines.BlockingCoroutine.joinBlocking(Builders.kt:95)
	at kotlinx.coroutines.BuildersKt__BuildersKt.runBlocking(Builders.kt:69)
	at kotlinx.coroutines.BuildersKt.runBlocking(Unknown Source)
	at kotlinx.coroutines.BuildersKt__BuildersKt.runBlocking$default(Builders.kt:48)
	at kotlinx.coroutines.BuildersKt.runBlocking$default(Unknown Source)
	at kotlinx.coroutines.test.TestBuildersJvmKt.createTestResult(TestBuildersJvm.kt:10)
	at kotlinx.coroutines.test.TestBuildersKt__TestBuildersKt.runTest-8Mi8wO0(TestBuilders.kt:310)
	at kotlinx.coroutines.test.TestBuildersKt.runTest-8Mi8wO0(Unknown Source)
	at kotlinx.coroutines.test.TestBuildersKt__TestBuildersKt.runTest-8Mi8wO0(TestBuilders.kt:168)
	at kotlinx.coroutines.test.TestBuildersKt.runTest-8Mi8wO0(Unknown Source)
	at kotlinx.coroutines.test.TestBuildersKt__TestBuildersKt.runTest-8Mi8wO0$default(TestBuilders.kt:160)
	at kotlinx.coroutines.test.TestBuildersKt.runTest-8Mi8wO0$default(Unknown Source)
	at com.quantumsoft.tia.scanner.services.SettingsChangeListenerImplTest.should handle exceptions gracefully(SettingsChangeListenerImplTest.kt:128)
	at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103)
	at java.base/java.lang.reflect.Method.invoke(Method.java:580)
	at org.junit.platform.commons.util.ReflectionUtils.invokeMethod(ReflectionUtils.java:728)
	at org.junit.jupiter.engine.execution.MethodInvocation.proceed(MethodInvocation.java:60)
	at org.junit.jupiter.engine.execution.InvocationInterceptorChain$ValidatingInvocation.proceed(InvocationInterceptorChain.java:131)
	at org.junit.jupiter.engine.extension.TimeoutExtension.intercept(TimeoutExtension.java:156)
	at org.junit.jupiter.engine.extension.TimeoutExtension.interceptTestableMethod(TimeoutExtension.java:147)
	at org.junit.jupiter.engine.extension.TimeoutExtension.interceptTestMethod(TimeoutExtension.java:86)
	at org.junit.jupiter.engine.execution.InterceptingExecutableInvoker$ReflectiveInterceptorCall.lambda$ofVoidMethod$0(InterceptingExecutableInvoker.java:103)
	at org.junit.jupiter.engine.execution.InterceptingExecutableInvoker.lambda$invoke$0(InterceptingExecutableInvoker.java:93)
	at org.junit.jupiter.engine.execution.InvocationInterceptorChain$InterceptedInvocation.proceed(InvocationInterceptorChain.java:106)
	at org.junit.jupiter.engine.execution.InvocationInterceptorChain.proceed(InvocationInterceptorChain.java:64)
	at org.junit.jupiter.engine.execution.InvocationInterceptorChain.chainAndInvoke(InvocationInterceptorChain.java:45)
	at org.junit.jupiter.engine.execution.InvocationInterceptorChain.invoke(InvocationInterceptorChain.java:37)
	at org.junit.jupiter.engine.execution.InterceptingExecutableInvoker.invoke(InterceptingExecutableInvoker.java:92)
	at org.junit.jupiter.engine.execution.InterceptingExecutableInvoker.invoke(InterceptingExecutableInvoker.java:86)
	at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$invokeTestMethod$7(TestMethodTestDescriptor.java:218)
	at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
	at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.invokeTestMethod(TestMethodTestDescriptor.java:214)
	at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.execute(TestMethodTestDescriptor.java:139)
	at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.execute(TestMethodTestDescriptor.java:69)
	at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:156)
	at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
	at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:146)
	at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137)
	at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:144)
	at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
	at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:143)
	at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:100)
	at java.base/java.util.ArrayList.forEach(ArrayList.java:1596)
	at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41)
	at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:160)
	at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
	at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:146)
	at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137)
	at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:144)
	at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
	at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:143)
	at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:100)
	at java.base/java.util.ArrayList.forEach(ArrayList.java:1596)
	at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41)
	at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:160)
	at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
	at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:146)
	at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137)
	at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:144)
	at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
	at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:143)
	at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:100)
	at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35)
	at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57)
	at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54)
	at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:198)
	at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:169)
	at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:93)
	at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:58)
	at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:141)
	at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:57)
	at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:103)
	at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:85)
	at org.junit.platform.launcher.core.DelegatingLauncher.execute(DelegatingLauncher.java:47)
	at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124)
	at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99)
	at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94)
	at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63)
	at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103)
	at java.base/java.lang.reflect.Method.invoke(Method.java:580)
	at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36)
	at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24)
	at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33)
	at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92)
	at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source)
	at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200)
	at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132)
	at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103)
	at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63)
	at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56)
	at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121)
	at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71)
	at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69)
	at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74)
2026-04-07 15:05:25 - c.q.t.s.s.SettingsChangeListenerImpl - Processing batch setting changes: 3 settings
2026-04-07 15:05:25 - c.q.t.s.s.SettingsChangeListenerImpl - Batch setting changes processed: 3 settings
2026-04-07 15:05:25 - c.q.t.s.s.SettingsChangeListenerImpl - SettingsChangeListener initialized and subscribed to notifications
2026-04-07 15:05:25 - c.q.t.s.s.SettingsChangeListenerImpl - Received setting change notification: scanner.file.threshold = 5000
2026-04-07 15:05:25 - c.q.t.s.s.SettingsChangeListenerImpl - Setting updated: scanner.file.threshold = 5000
2026-04-07 15:05:25 - c.q.t.s.s.SettingsChangeListenerImpl - File threshold setting updated: scanner.file.threshold = 5000
2026-04-07 15:05:25 - c.q.t.s.s.SettingsChangeListenerImpl - Received setting change notification: test.setting = new-value
2026-04-07 15:05:25 - c.q.t.s.s.SettingsChangeListenerImpl - Setting updated: test.setting = new-value
2026-04-07 15:05:25 - c.q.t.s.s.SettingsChangeListenerImpl - SettingsChangeListener shutdown and unsubscribed from notifications
2026-04-07 15:05:25 - c.q.t.s.s.SettingsChangeListenerImpl - Received setting change notification: key3 = value3
2026-04-07 15:05:25 - c.q.t.s.s.SettingsChangeListenerImpl - Setting updated: key3 = value3
2026-04-07 15:05:25 - c.q.t.s.s.SettingsChangeListenerImpl - Received setting change notification: key4 = value4
2026-04-07 15:05:25 - c.q.t.s.s.SettingsChangeListenerImpl - Setting updated: key4 = value4
2026-04-07 15:05:25 - c.q.t.s.s.SettingsChangeListenerImpl - Received setting change notification: key5 = value5
2026-04-07 15:05:25 - c.q.t.s.s.SettingsChangeListenerImpl - Setting updated: key5 = value5
2026-04-07 15:05:25 - c.q.t.s.s.SettingsChangeListenerImpl - Received setting change notification: key6 = value6
2026-04-07 15:05:25 - c.q.t.s.s.SettingsChangeListenerImpl - Setting updated: key6 = value6
2026-04-07 15:05:25 - c.q.t.s.s.SettingsChangeListenerImpl - Received setting change notification: key7 = value7
2026-04-07 15:05:25 - c.q.t.s.s.SettingsChangeListenerImpl - Setting updated: key7 = value7
2026-04-07 15:05:25 - c.q.t.s.s.SettingsChangeListenerImpl - Received setting change notification: key8 = value8
2026-04-07 15:05:25 - c.q.t.s.s.SettingsChangeListenerImpl - Setting updated: key8 = value8
2026-04-07 15:05:25 - c.q.t.s.s.SettingsChangeListenerImpl - Received setting change notification: key9 = value9
2026-04-07 15:05:25 - c.q.t.s.s.SettingsChangeListenerImpl - Setting updated: key9 = value9
2026-04-07 15:05:25 - c.q.t.s.s.SettingsChangeListenerImpl - Received setting change notification: key10 = value10
2026-04-07 15:05:25 - c.q.t.s.s.SettingsChangeListenerImpl - Setting updated: key10 = value10
2026-04-07 15:05:25 - c.q.t.s.s.SettingsChangeListenerImpl - Received setting change notification: key1 = value1
2026-04-07 15:05:25 - c.q.t.s.s.SettingsChangeListenerImpl - Setting updated: key1 = value1
2026-04-07 15:05:25 - c.q.t.s.s.SettingsChangeListenerImpl - Received setting change notification: key2 = value2
2026-04-07 15:05:25 - c.q.t.s.s.SettingsChangeListenerImpl - Setting updated: key2 = value2