Use @Serial in util
[yangtools.git] / common / util / src / test / java / org / opendaylight / yangtools / util / concurrent / DeadlockDetectingListeningExecutorServiceTest.java
index fa322277f732d0f108c6e45ed008ff13b6a3cb71..6e5727c2e2b53a0bcd6aeddc8d8624a490355530 100644 (file)
@@ -5,7 +5,6 @@
  * terms of the Eclipse Public License v1.0 which accompanies this distribution,
  * and is available at http://www.eclipse.org/legal/epl-v10.html
  */
-
 package org.opendaylight.yangtools.util.concurrent;
 
 import static org.junit.Assert.assertEquals;
@@ -16,12 +15,13 @@ import static org.opendaylight.yangtools.util.concurrent.CommonTestUtils.SUBMIT_
 import static org.opendaylight.yangtools.util.concurrent.CommonTestUtils.SUBMIT_RUNNABLE;
 import static org.opendaylight.yangtools.util.concurrent.CommonTestUtils.SUBMIT_RUNNABLE_WITH_RESULT;
 
-import com.google.common.base.Supplier;
 import com.google.common.util.concurrent.FutureCallback;
 import com.google.common.util.concurrent.Futures;
 import com.google.common.util.concurrent.ListenableFuture;
 import com.google.common.util.concurrent.ListeningExecutorService;
+import com.google.common.util.concurrent.MoreExecutors;
 import com.google.common.util.concurrent.ThreadFactoryBuilder;
+import java.io.Serial;
 import java.util.concurrent.CountDownLatch;
 import java.util.concurrent.ExecutionException;
 import java.util.concurrent.Executor;
@@ -29,6 +29,7 @@ import java.util.concurrent.ExecutorService;
 import java.util.concurrent.Executors;
 import java.util.concurrent.TimeUnit;
 import java.util.concurrent.atomic.AtomicReference;
+import java.util.function.Supplier;
 import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
@@ -42,15 +43,16 @@ import org.opendaylight.yangtools.util.concurrent.CommonTestUtils.Invoker;
 public class DeadlockDetectingListeningExecutorServiceTest {
 
     interface InitialInvoker {
-        void invokeExecutor( ListeningExecutorService executor, Runnable task );
+        void invokeExecutor(ListeningExecutorService executor, Runnable task);
     }
 
     static final InitialInvoker SUBMIT = ListeningExecutorService::submit;
 
     static final InitialInvoker EXECUTE = Executor::execute;
 
-    @SuppressWarnings("serial")
     public static class TestDeadlockException extends Exception {
+        @Serial
+        private static final long serialVersionUID = 1L;
     }
 
     private static final Supplier<Exception> DEADLOCK_EXECUTOR_SUPPLIER = TestDeadlockException::new;
@@ -63,14 +65,14 @@ public class DeadlockDetectingListeningExecutorServiceTest {
 
     @After
     public void tearDown() {
-        if (executor != null ) {
+        if (executor != null) {
             executor.shutdownNow();
         }
     }
 
     DeadlockDetectingListeningExecutorService newExecutor() {
-        return new DeadlockDetectingListeningExecutorService( Executors.newSingleThreadExecutor(),
-                DEADLOCK_EXECUTOR_SUPPLIER );
+        return new DeadlockDetectingListeningExecutorService(Executors.newSingleThreadExecutor(),
+                DEADLOCK_EXECUTOR_SUPPLIER);
     }
 
     @Test
@@ -82,118 +84,117 @@ public class DeadlockDetectingListeningExecutorServiceTest {
 
         ListenableFuture<String> future = executor.submit(() -> "foo");
 
-        assertEquals( "Future result", "foo", future.get( 5, TimeUnit.SECONDS ) );
+        assertEquals("Future result", "foo", future.get(5, TimeUnit.SECONDS));
 
         // Test submit with Runnable.
 
-        executor.submit(() -> {
-        }).get();
+        executor.submit(() -> { }).get();
 
         // Test submit with Runnable and value.
 
-        future = executor.submit(() -> {
-        }, "foo" );
+        future = executor.submit(() -> { }, "foo");
 
-        assertEquals( "Future result", "foo", future.get( 5, TimeUnit.SECONDS ) );
+        assertEquals("Future result", "foo", future.get(5, TimeUnit.SECONDS));
     }
 
     @Test
+    @SuppressWarnings("checkstyle:illegalThrows")
     public void testNonBlockingSubmitOnExecutorThread() throws Throwable {
 
         executor = newExecutor();
 
-        testNonBlockingSubmitOnExecutorThread( SUBMIT, SUBMIT_CALLABLE );
-        testNonBlockingSubmitOnExecutorThread( SUBMIT, SUBMIT_RUNNABLE );
-        testNonBlockingSubmitOnExecutorThread( SUBMIT, SUBMIT_RUNNABLE_WITH_RESULT );
+        testNonBlockingSubmitOnExecutorThread(SUBMIT, SUBMIT_CALLABLE);
+        testNonBlockingSubmitOnExecutorThread(SUBMIT, SUBMIT_RUNNABLE);
+        testNonBlockingSubmitOnExecutorThread(SUBMIT, SUBMIT_RUNNABLE_WITH_RESULT);
 
-        testNonBlockingSubmitOnExecutorThread( EXECUTE, SUBMIT_CALLABLE );
+        testNonBlockingSubmitOnExecutorThread(EXECUTE, SUBMIT_CALLABLE);
     }
 
-    void testNonBlockingSubmitOnExecutorThread( final InitialInvoker initialInvoker,
-            final Invoker invoker ) throws Throwable {
+    @SuppressWarnings("checkstyle:illegalThrows")
+    void testNonBlockingSubmitOnExecutorThread(final InitialInvoker initialInvoker, final Invoker invoker)
+            throws Throwable {
 
         final AtomicReference<Throwable> caughtEx = new AtomicReference<>();
-        final CountDownLatch futureCompletedLatch = new CountDownLatch( 1 );
+        final CountDownLatch futureCompletedLatch = new CountDownLatch(1);
 
-        Runnable task = () -> Futures.addCallback( invoker.invokeExecutor( executor, null ), new FutureCallback() {
+        Runnable task = () -> Futures.addCallback(invoker.invokeExecutor(executor, null), new FutureCallback<Object>() {
             @Override
-            public void onSuccess( final Object result ) {
+            public void onSuccess(final Object result) {
                 futureCompletedLatch.countDown();
             }
 
             @Override
-            public void onFailure( final Throwable t ) {
-                caughtEx.set( t );
+            @SuppressWarnings("checkstyle:parameterName")
+            public void onFailure(final Throwable t) {
+                caughtEx.set(t);
                 futureCompletedLatch.countDown();
             }
-        } );
+        }, MoreExecutors.directExecutor());
 
-        initialInvoker.invokeExecutor( executor, task );
+        initialInvoker.invokeExecutor(executor, task);
 
-        assertTrue( "Task did not complete - executor likely deadlocked",
-                futureCompletedLatch.await( 5, TimeUnit.SECONDS ) );
+        assertTrue("Task did not complete - executor likely deadlocked",
+                futureCompletedLatch.await(5, TimeUnit.SECONDS));
 
-        if (caughtEx.get() != null ) {
+        if (caughtEx.get() != null) {
             throw caughtEx.get();
         }
     }
 
     @Test
-    public void testBlockingSubmitOnExecutorThread() throws Exception {
+    public void testBlockingSubmitOnExecutorThread() throws InterruptedException {
 
         executor = newExecutor();
 
-        testBlockingSubmitOnExecutorThread( SUBMIT, SUBMIT_CALLABLE );
-        testBlockingSubmitOnExecutorThread( SUBMIT, SUBMIT_RUNNABLE );
-        testBlockingSubmitOnExecutorThread( SUBMIT, SUBMIT_RUNNABLE_WITH_RESULT );
+        testBlockingSubmitOnExecutorThread(SUBMIT, SUBMIT_CALLABLE);
+        testBlockingSubmitOnExecutorThread(SUBMIT, SUBMIT_RUNNABLE);
+        testBlockingSubmitOnExecutorThread(SUBMIT, SUBMIT_RUNNABLE_WITH_RESULT);
 
-        testBlockingSubmitOnExecutorThread( EXECUTE, SUBMIT_CALLABLE );
+        testBlockingSubmitOnExecutorThread(EXECUTE, SUBMIT_CALLABLE);
     }
 
-    void testBlockingSubmitOnExecutorThread( final InitialInvoker initialInvoker,
-            final Invoker invoker ) throws Exception {
+    @SuppressWarnings("checkstyle:illegalCatch")
+    void testBlockingSubmitOnExecutorThread(final InitialInvoker initialInvoker, final Invoker invoker)
+            throws InterruptedException {
 
         final AtomicReference<Throwable> caughtEx = new AtomicReference<>();
-        final CountDownLatch latch = new CountDownLatch( 1 );
+        final CountDownLatch latch = new CountDownLatch(1);
 
         Runnable task = () -> {
 
             try {
-                invoker.invokeExecutor( executor, null ).get();
-            } catch( ExecutionException e ) {
-                caughtEx.set( e.getCause() );
-            } catch( Throwable e ) {
-                caughtEx.set( e );
+                invoker.invokeExecutor(executor, null).get();
+            } catch (ExecutionException e) {
+                caughtEx.set(e.getCause());
+            } catch (Throwable e) {
+                caughtEx.set(e);
             } finally {
                 latch.countDown();
             }
         };
 
-        initialInvoker.invokeExecutor( executor, task );
-
-        assertTrue( "Task did not complete - executor likely deadlocked",
-                latch.await( 5, TimeUnit.SECONDS ) );
+        initialInvoker.invokeExecutor(executor, task);
 
-        assertNotNull( "Expected exception thrown", caughtEx.get() );
-        assertEquals( "Caught exception type", TestDeadlockException.class, caughtEx.get().getClass() );
+        assertTrue("Task did not complete - executor likely deadlocked", latch.await(5, TimeUnit.SECONDS));
+        assertNotNull("Expected exception thrown", caughtEx.get());
+        assertEquals("Caught exception type", TestDeadlockException.class, caughtEx.get().getClass());
     }
 
     @Test
     public void testListenableFutureCallbackWithExecutor() throws InterruptedException {
 
         String listenerThreadPrefix = "ListenerThread";
-        ExecutorService listenerExecutor = Executors.newFixedThreadPool( 1,
-                new ThreadFactoryBuilder().setNameFormat( listenerThreadPrefix + "-%d" ).build() );
+        ExecutorService listenerExecutor = Executors.newFixedThreadPool(1,
+                new ThreadFactoryBuilder().setNameFormat(listenerThreadPrefix + "-%d").build());
 
         executor = new DeadlockDetectingListeningExecutorService(
-                Executors.newSingleThreadExecutor(
-                        new ThreadFactoryBuilder().setNameFormat( "SingleThread" ).build() ),
-                        DEADLOCK_EXECUTOR_SUPPLIER, listenerExecutor );
+            Executors.newSingleThreadExecutor(new ThreadFactoryBuilder().setNameFormat("SingleThread").build()),
+                DEADLOCK_EXECUTOR_SUPPLIER, listenerExecutor);
 
         try {
-            testListenerCallback( executor, SUBMIT_CALLABLE, listenerThreadPrefix );
-            testListenerCallback( executor, SUBMIT_RUNNABLE, listenerThreadPrefix );
-            testListenerCallback( executor, SUBMIT_RUNNABLE_WITH_RESULT, listenerThreadPrefix );
+            testListenerCallback(executor, SUBMIT_CALLABLE, listenerThreadPrefix);
+            testListenerCallback(executor, SUBMIT_RUNNABLE, listenerThreadPrefix);
+            testListenerCallback(executor, SUBMIT_RUNNABLE_WITH_RESULT, listenerThreadPrefix);
         } finally {
             listenerExecutor.shutdownNow();
         }