Move AbstractDOMDataBroker to mdsal-dom-spi
[mdsal.git] / dom / mdsal-dom-spi / src / test / java / org / opendaylight / mdsal / dom / spi / 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.spi;
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 import static org.opendaylight.mdsal.common.api.LogicalDatastoreType.CONFIGURATION;
17
18 import com.google.common.util.concurrent.ListenableFuture;
19 import java.util.concurrent.ExecutionException;
20 import java.util.function.Function;
21 import org.junit.Before;
22 import org.junit.Test;
23 import org.junit.runner.RunWith;
24 import org.mockito.Mock;
25 import org.mockito.junit.MockitoJUnitRunner;
26 import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
27 import org.opendaylight.mdsal.common.api.TransactionCommitFailedException;
28 import org.opendaylight.mdsal.dom.spi.store.DOMStoreWriteTransaction;
29
30 @RunWith(MockitoJUnitRunner.StrictStubs.class)
31 public class DOMForwardedWriteTransactionTest {
32     @Mock
33     private AbstractDOMForwardedTransactionFactory<?> commitImpl;
34
35     @Mock
36     private DOMStoreWriteTransaction domStoreWriteTransaction;
37
38     private Function<LogicalDatastoreType, DOMStoreWriteTransaction> backingTxFactory;
39
40     @Before
41     public void setup() {
42         backingTxFactory = storeType -> domStoreWriteTransaction;
43     }
44
45     @Test
46     public void readyRuntimeExceptionAndCancel() throws InterruptedException {
47         final RuntimeException thrown = new RuntimeException();
48         doThrow(thrown).when(domStoreWriteTransaction).ready();
49         final DOMForwardedWriteTransaction<DOMStoreWriteTransaction> domForwardedWriteTransaction =
50                 new DOMForwardedWriteTransaction<>(new Object(), backingTxFactory, commitImpl);
51         domForwardedWriteTransaction.getSubtransaction(CONFIGURATION); // ensure backingTx initialized
52         ListenableFuture<?> submitFuture = domForwardedWriteTransaction.commit();
53
54         ExecutionException ex = assertThrows(ExecutionException.class, submitFuture::get);
55         Throwable cause = ex.getCause();
56         assertThat(cause, instanceOf(TransactionCommitFailedException.class));
57         assertSame(thrown, cause.getCause());
58         domForwardedWriteTransaction.cancel();
59     }
60
61     @Test
62     public void submitRuntimeExceptionAndCancel() throws InterruptedException {
63         RuntimeException thrown = new RuntimeException();
64         doReturn(null).when(domStoreWriteTransaction).ready();
65         doThrow(thrown).when(commitImpl).commit(any(), any());
66         DOMForwardedWriteTransaction<DOMStoreWriteTransaction> domForwardedWriteTransaction =
67                 new DOMForwardedWriteTransaction<>(new Object(), backingTxFactory, commitImpl);
68         domForwardedWriteTransaction.getSubtransaction(CONFIGURATION); // ensure backingTx initialized
69         ListenableFuture<?> submitFuture = domForwardedWriteTransaction.commit();
70         ExecutionException ex = assertThrows(ExecutionException.class, submitFuture::get);
71         Throwable cause = ex.getCause();
72         assertThat(cause, instanceOf(TransactionCommitFailedException.class));
73         assertSame(thrown, cause.getCause());
74         domForwardedWriteTransaction.cancel();
75     }
76 }