46ddcc396e7b6e119840c649fa4bd4b908ac7e37
[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.junit.Assert.assertTrue;
10 import static org.junit.Assert.fail;
11 import static org.mockito.ArgumentMatchers.any;
12 import static org.mockito.Mockito.doReturn;
13 import static org.mockito.Mockito.doThrow;
14
15 import com.google.common.util.concurrent.FluentFuture;
16 import java.util.Collections;
17 import java.util.concurrent.ExecutionException;
18 import org.junit.Before;
19 import org.junit.Test;
20 import org.mockito.Mock;
21 import org.mockito.MockitoAnnotations;
22 import org.opendaylight.mdsal.common.api.CommitInfo;
23 import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
24 import org.opendaylight.mdsal.common.api.TransactionCommitFailedException;
25 import org.opendaylight.mdsal.dom.spi.store.DOMStoreWriteTransaction;
26
27 public class DOMForwardedWriteTransactionTest {
28
29     @Mock
30     private AbstractDOMForwardedTransactionFactory<?> abstractDOMForwardedTransactionFactory;
31
32     @Mock
33     private DOMStoreWriteTransaction domStoreWriteTransaction;
34
35     @Before
36     public void setup() {
37         MockitoAnnotations.initMocks(this);
38     }
39
40     @Test
41     public void readyRuntimeExceptionAndCancel() throws InterruptedException {
42         RuntimeException thrown = new RuntimeException();
43         doThrow(thrown).when(domStoreWriteTransaction).ready();
44         DOMForwardedWriteTransaction<DOMStoreWriteTransaction> domForwardedWriteTransaction =
45                 new DOMForwardedWriteTransaction<>(
46                         new Object(),
47                         Collections.singletonMap(LogicalDatastoreType.OPERATIONAL, domStoreWriteTransaction),
48                         abstractDOMForwardedTransactionFactory);
49         FluentFuture<? extends CommitInfo> submitFuture = domForwardedWriteTransaction.commit();
50         try {
51             submitFuture.get();
52             fail("TransactionCommitFailedException expected");
53         } catch (ExecutionException e) {
54             assertTrue(e.getCause() instanceof TransactionCommitFailedException);
55             assertTrue(e.getCause().getCause() == thrown);
56             domForwardedWriteTransaction.cancel();
57         }
58     }
59
60     @Test
61     public void submitRuntimeExceptionAndCancel() throws InterruptedException {
62         RuntimeException thrown = new RuntimeException();
63         doReturn(null).when(domStoreWriteTransaction).ready();
64         doThrow(thrown).when(abstractDOMForwardedTransactionFactory).commit(any(), any());
65         DOMForwardedWriteTransaction<DOMStoreWriteTransaction> domForwardedWriteTransaction =
66                 new DOMForwardedWriteTransaction<>(
67                         new Object(),
68                         Collections.singletonMap(LogicalDatastoreType.OPERATIONAL, domStoreWriteTransaction),
69                         abstractDOMForwardedTransactionFactory);
70         FluentFuture<? extends CommitInfo> submitFuture = domForwardedWriteTransaction.commit();
71         try {
72             submitFuture.get();
73             fail("TransactionCommitFailedException expected");
74         } catch (ExecutionException e) {
75             assertTrue(e.getCause() instanceof TransactionCommitFailedException);
76             assertTrue(e.getCause().getCause() == thrown);
77             domForwardedWriteTransaction.cancel();
78         }
79     }
80 }