2 * Copyright (c) 2017 Pantheon Technologies s.r.o. 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.controller.cluster.databroker.actors.dds;
10 import static org.junit.Assert.assertEquals;
11 import static org.junit.Assert.assertThrows;
12 import static org.junit.Assert.assertTrue;
13 import static org.mockito.Mockito.when;
14 import static org.opendaylight.controller.cluster.databroker.actors.dds.TestUtils.assertOperationThrowsException;
16 import akka.testkit.TestProbe;
17 import com.google.common.base.Ticker;
18 import com.google.common.base.VerifyException;
19 import java.util.Optional;
20 import org.junit.Test;
21 import org.opendaylight.controller.cluster.access.commands.AbortLocalTransactionRequest;
22 import org.opendaylight.controller.cluster.access.commands.ModifyTransactionRequest;
23 import org.opendaylight.controller.cluster.access.commands.ModifyTransactionRequestBuilder;
24 import org.opendaylight.controller.cluster.access.concepts.TransactionIdentifier;
25 import org.opendaylight.yangtools.yang.data.tree.api.DataTreeSnapshot;
27 public class LocalReadOnlyProxyTransactionTest extends LocalProxyTransactionTest<LocalReadOnlyProxyTransaction> {
28 private DataTreeSnapshot snapshot;
31 @SuppressWarnings("checkstyle:hiddenField")
32 protected LocalReadOnlyProxyTransaction createTransaction(final ProxyHistory parent,
33 final TransactionIdentifier id,
34 final DataTreeSnapshot snapshot) {
35 when(snapshot.readNode(PATH_1)).thenReturn(Optional.of(DATA_1));
36 when(snapshot.readNode(PATH_3)).thenReturn(Optional.empty());
37 this.snapshot = snapshot;
38 return new LocalReadOnlyProxyTransaction(parent, id, this.snapshot);
42 public void testIsSnapshotOnly() {
43 assertTrue(transaction.isSnapshotOnly());
47 public void testReadOnlyView() {
48 assertEquals(snapshot, transaction.readOnlyView());
53 public void testDirectCommit() {
54 assertThrows(UnsupportedOperationException.class, () -> transaction.directCommit());
59 public void testCanCommit() {
60 assertThrows(UnsupportedOperationException.class,
61 () -> transaction.canCommit(new VotingFuture<>(new Object(), 1)));
66 public void testPreCommit() {
67 assertThrows(UnsupportedOperationException.class,
68 () -> transaction.preCommit(new VotingFuture<>(new Object(), 1)));
73 public void testDoCommit() {
74 assertThrows(UnsupportedOperationException.class,
75 () -> transaction.doCommit(new VotingFuture<>(new Object(), 1)));
80 public void testDelete() {
81 assertThrows(UnsupportedOperationException.class, () -> transaction.delete(PATH_1));
85 public void testMerge() {
86 assertThrows(UnsupportedOperationException.class, () -> transaction.merge(PATH_1, DATA_1));
91 public void testWrite() {
92 assertThrows(UnsupportedOperationException.class, () -> transaction.write(PATH_1, DATA_1));
96 public void testDoDelete() {
97 assertThrows(UnsupportedOperationException.class, () -> transaction.doDelete(PATH_1));
101 public void testDoMerge() {
102 assertThrows(UnsupportedOperationException.class, () -> transaction.doMerge(PATH_1, DATA_1));
106 public void testDoWrite() {
107 assertThrows(UnsupportedOperationException.class, () -> transaction.doWrite(PATH_1, DATA_1));
111 public void testCommitRequest() {
112 assertThrows(UnsupportedOperationException.class, () -> transaction.commitRequest(true));
116 public void testApplyModifyTransactionRequest() {
117 final TestProbe probe = createProbe();
118 final ModifyTransactionRequestBuilder builder =
119 new ModifyTransactionRequestBuilder(TRANSACTION_ID, probe.ref());
120 builder.setSequence(0);
122 final ModifyTransactionRequest request = builder.build();
123 transaction.replayModifyTransactionRequest(request, createCallbackMock(), Ticker.systemTicker().read());
124 getTester().expectTransactionRequest(AbortLocalTransactionRequest.class);
128 public void testApplyModifyTransactionRequestNotAbort() throws Exception {
129 final TestProbe probe = createProbe();
130 final ModifyTransactionRequestBuilder builder =
131 new ModifyTransactionRequestBuilder(TRANSACTION_ID, probe.ref());
132 builder.setSequence(0);
134 final ModifyTransactionRequest request = builder.build();
135 assertOperationThrowsException(() -> transaction.replayModifyTransactionRequest(request, createCallbackMock(),
136 Ticker.systemTicker().read()), VerifyException.class);