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
7 package org.opendaylight.mdsal.dom.broker;
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;
17 import com.google.common.util.concurrent.ListenableFuture;
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;
28 @RunWith(MockitoJUnitRunner.StrictStubs.class)
29 public class DOMForwardedWriteTransactionTest {
31 private AbstractDOMForwardedTransactionFactory<?> abstractDOMForwardedTransactionFactory;
34 private DOMStoreWriteTransaction domStoreWriteTransaction;
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();
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();
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<>(
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();