Modernize DOMForwardedWriteTransactionTest
[mdsal.git] / dom / mdsal-dom-broker / src / test / java / org / opendaylight / mdsal / dom / broker / DOMForwardedWriteTransactionTest.java
1 /*
2  *
3  * This program and the accompanying materials are made available under the
4  * terms of the Eclipse Public License v1.0 which accompanies this distribution,
5  * and is available at http://www.eclipse.org/legal/epl-v10.html
6  */
7 package org.opendaylight.mdsal.dom.broker;
8
9 import static org.hamcrest.CoreMatchers.instanceOf;
10 import static org.hamcrest.MatcherAssert.assertThat;
11 import static org.junit.Assert.assertSame;
12 import static org.junit.Assert.assertThrows;
13 import static org.mockito.ArgumentMatchers.any;
14 import static org.mockito.Mockito.doReturn;
15 import static org.mockito.Mockito.doThrow;
16
17 import com.google.common.util.concurrent.ListenableFuture;
18 import java.util.Map;
19 import java.util.concurrent.ExecutionException;
20 import org.junit.Test;
21 import org.junit.runner.RunWith;
22 import org.mockito.Mock;
23 import org.mockito.junit.MockitoJUnitRunner;
24 import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
25 import org.opendaylight.mdsal.common.api.TransactionCommitFailedException;
26 import org.opendaylight.mdsal.dom.spi.store.DOMStoreWriteTransaction;
27
28 @RunWith(MockitoJUnitRunner.StrictStubs.class)
29 public class DOMForwardedWriteTransactionTest {
30     @Mock
31     private AbstractDOMForwardedTransactionFactory<?> abstractDOMForwardedTransactionFactory;
32
33     @Mock
34     private DOMStoreWriteTransaction domStoreWriteTransaction;
35
36     @Test
37     public void readyRuntimeExceptionAndCancel() throws InterruptedException {
38         final RuntimeException thrown = new RuntimeException();
39         doThrow(thrown).when(domStoreWriteTransaction).ready();
40         final DOMForwardedWriteTransaction<DOMStoreWriteTransaction> domForwardedWriteTransaction =
41             new DOMForwardedWriteTransaction<>(new Object(),
42                 Map.of(LogicalDatastoreType.OPERATIONAL, domStoreWriteTransaction),
43                 abstractDOMForwardedTransactionFactory);
44         ListenableFuture<?> submitFuture = domForwardedWriteTransaction.commit();
45
46         ExecutionException ex = assertThrows(ExecutionException.class, submitFuture::get);
47         Throwable cause = ex.getCause();
48         assertThat(cause, instanceOf(TransactionCommitFailedException.class));
49         assertSame(thrown, cause.getCause());
50         domForwardedWriteTransaction.cancel();
51     }
52
53     @Test
54     public void submitRuntimeExceptionAndCancel() throws InterruptedException {
55         RuntimeException thrown = new RuntimeException();
56         doReturn(null).when(domStoreWriteTransaction).ready();
57         doThrow(thrown).when(abstractDOMForwardedTransactionFactory).commit(any(), any());
58         DOMForwardedWriteTransaction<DOMStoreWriteTransaction> domForwardedWriteTransaction =
59                 new DOMForwardedWriteTransaction<>(
60                         new Object(),
61                         Map.of(LogicalDatastoreType.OPERATIONAL, domStoreWriteTransaction),
62                         abstractDOMForwardedTransactionFactory);
63         ListenableFuture<?> submitFuture = domForwardedWriteTransaction.commit();
64         ExecutionException ex = assertThrows(ExecutionException.class, submitFuture::get);
65         Throwable cause = ex.getCause();
66         assertThat(cause, instanceOf(TransactionCommitFailedException.class));
67         assertSame(thrown, cause.getCause());
68         domForwardedWriteTransaction.cancel();
69     }
70 }