2 * Copyright (c) 2016 Cisco Systems, Inc. and others. All rights reserved.
4 * This program and the accompanying materials are made available under the
5 * terms of the Eclipse Public License v1.0 which accompanies this distribution,
6 * and is available at http://www.eclipse.org/legal/epl-v10.html
8 package org.opendaylight.mdsal.dom.spi.store;
10 import static org.junit.Assert.assertEquals;
11 import static org.junit.Assert.assertTrue;
12 import static org.junit.Assert.fail;
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.mockito.Mockito.mock;
18 import java.util.Optional;
19 import java.util.concurrent.ExecutionException;
20 import org.junit.Before;
21 import org.junit.Test;
22 import org.opendaylight.mdsal.common.api.ReadFailedException;
23 import org.opendaylight.mdsal.dom.spi.store.SnapshotBackedWriteTransaction.TransactionReadyPrototype;
24 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
25 import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode;
26 import org.opendaylight.yangtools.yang.data.api.schema.tree.DataTreeModification;
27 import org.opendaylight.yangtools.yang.data.api.schema.tree.DataTreeSnapshot;
29 public class SnapshotBackedReadWriteTransactionTest {
31 private static final DataTreeSnapshot DATA_TREE_SNAPSHOT = mock(DataTreeSnapshot.class);
32 private static final DataTreeModification DATA_TREE_MODIFICATION = mock(DataTreeModification.class);
33 private static final TransactionReadyPrototype<Object> TRANSACTION_READY_PROTOTYPE =
34 mock(TransactionReadyPrototype.class);
35 private SnapshotBackedReadWriteTransaction<Object> snapshotBackedReadWriteTransaction;
38 public void setUp() throws Exception {
39 doReturn(DATA_TREE_MODIFICATION).when(DATA_TREE_SNAPSHOT).newModification();
40 snapshotBackedReadWriteTransaction = new SnapshotBackedReadWriteTransaction<>(new Object(), false,
41 DATA_TREE_SNAPSHOT, TRANSACTION_READY_PROTOTYPE);
45 public void basicTest() throws Exception {
46 final NormalizedNode<?, ?> testNode = mock(NormalizedNode.class);
47 final Optional<NormalizedNode<?, ?>> optional = Optional.of(testNode);
48 doReturn("testNode").when(testNode).toString();
49 doReturn(Optional.of(testNode)).when(DATA_TREE_MODIFICATION).readNode(YangInstanceIdentifier.empty());
50 assertTrue(snapshotBackedReadWriteTransaction.exists(YangInstanceIdentifier.empty()).get());
51 assertEquals(optional, snapshotBackedReadWriteTransaction.read(YangInstanceIdentifier.empty()).get());
54 @SuppressWarnings({"checkstyle:IllegalThrows", "checkstyle:avoidHidingCauseException" })
55 @Test(expected = ReadFailedException.class)
56 public void readTestWithNullException() throws Throwable {
57 doReturn(null).when(DATA_TREE_MODIFICATION).readNode(YangInstanceIdentifier.empty());
59 snapshotBackedReadWriteTransaction.read(YangInstanceIdentifier.empty()).get();
60 fail("Expected ReadFailedException");
61 } catch (ExecutionException e) {
66 @SuppressWarnings({"checkstyle:IllegalThrows", "checkstyle:avoidHidingCauseException"})
67 @Test(expected = ReadFailedException.class)
68 public void readNodeTestWithException() throws Throwable {
69 doThrow(new NullPointerException("no Node")).when(DATA_TREE_MODIFICATION).readNode(any());
71 snapshotBackedReadWriteTransaction.read(YangInstanceIdentifier.empty()).get();
72 fail("Expected ReadFailedException");
73 } catch (ExecutionException e) {
78 @SuppressWarnings({"checkstyle:IllegalThrows", "checkstyle:avoidHidingCauseException"})
79 @Test(expected = ReadFailedException.class)
80 public void existsTestWithException() throws Throwable {
81 doThrow(new NullPointerException("no Node")).when(DATA_TREE_MODIFICATION).readNode(any());
83 snapshotBackedReadWriteTransaction.exists(YangInstanceIdentifier.empty()).get();
84 fail("Expected ReadFailedException");
85 } catch (ExecutionException e) {