BUG-8422: Propagate enqueue time
[controller.git] / opendaylight / md-sal / sal-distributed-datastore / src / test / java / org / opendaylight / controller / cluster / databroker / actors / dds / LocalReadOnlyProxyTransactionTest.java
1 /*
2  * Copyright (c) 2017 Pantheon Technologies s.r.o. and others.  All rights reserved.
3  *
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
7  */
8 package org.opendaylight.controller.cluster.databroker.actors.dds;
9
10 import static org.mockito.Mockito.when;
11 import static org.opendaylight.controller.cluster.databroker.actors.dds.TestUtils.assertOperationThrowsException;
12
13 import akka.testkit.TestProbe;
14 import com.google.common.base.Ticker;
15 import com.google.common.base.VerifyException;
16 import org.junit.Assert;
17 import org.junit.Test;
18 import org.opendaylight.controller.cluster.access.commands.AbortLocalTransactionRequest;
19 import org.opendaylight.controller.cluster.access.commands.ModifyTransactionRequest;
20 import org.opendaylight.controller.cluster.access.commands.ModifyTransactionRequestBuilder;
21 import org.opendaylight.controller.cluster.access.concepts.TransactionIdentifier;
22 import org.opendaylight.yangtools.yang.data.api.schema.tree.DataTreeSnapshot;
23
24 public class LocalReadOnlyProxyTransactionTest extends LocalProxyTransactionTest<LocalReadOnlyProxyTransaction> {
25
26     private DataTreeSnapshot snapshot;
27
28     @Override
29     protected LocalReadOnlyProxyTransaction createTransaction(final ProxyHistory parent,
30                                                               final TransactionIdentifier id,
31                                                               final DataTreeSnapshot snapshot) {
32         when(snapshot.readNode(PATH_1)).thenReturn(com.google.common.base.Optional.of(DATA_1));
33         when(snapshot.readNode(PATH_3)).thenReturn(com.google.common.base.Optional.absent());
34         this.snapshot = snapshot;
35         return new LocalReadOnlyProxyTransaction(parent, id, this.snapshot);
36     }
37
38     @Test
39     public void testIsSnapshotOnly() {
40         Assert.assertTrue(transaction.isSnapshotOnly());
41     }
42
43     @Test
44     public void testReadOnlyView() {
45         Assert.assertEquals(snapshot, transaction.readOnlyView());
46     }
47
48     @Override
49     @Test(expected = UnsupportedOperationException.class)
50     public void testDirectCommit() throws Exception {
51         transaction.directCommit();
52     }
53
54     @Override
55     @Test(expected = UnsupportedOperationException.class)
56     public void testCanCommit() throws Exception {
57         transaction.canCommit(new VotingFuture<>(new Object(), 1));
58     }
59
60     @Override
61     @Test(expected = UnsupportedOperationException.class)
62     public void testPreCommit() throws Exception {
63         transaction.preCommit(new VotingFuture<>(new Object(), 1));
64     }
65
66     @Override
67     @Test(expected = UnsupportedOperationException.class)
68     public void testDoCommit() throws Exception {
69         transaction.doCommit(new VotingFuture<>(new Object(), 1));
70     }
71
72     @Override
73     @Test(expected = UnsupportedOperationException.class)
74     public void testDelete() {
75         transaction.delete(PATH_1);
76     }
77
78     @Override
79     @Test(expected = UnsupportedOperationException.class)
80     public void testMerge() {
81         transaction.merge(PATH_1, DATA_1);
82     }
83
84     @Override
85     @Test(expected = UnsupportedOperationException.class)
86     public void testWrite() {
87         transaction.write(PATH_1, DATA_1);
88     }
89
90     @Test(expected = UnsupportedOperationException.class)
91     public void testDoDelete() {
92         transaction.doDelete(PATH_1);
93     }
94
95     @Test(expected = UnsupportedOperationException.class)
96     public void testDoMerge() {
97         transaction.doMerge(PATH_1, DATA_1);
98     }
99
100     @Test(expected = UnsupportedOperationException.class)
101     public void testDoWrite() {
102         transaction.doWrite(PATH_1, DATA_1);
103     }
104
105     @Test(expected = UnsupportedOperationException.class)
106     public void testCommitRequest() {
107         transaction.commitRequest(true);
108     }
109
110     @Test
111     public void testApplyModifyTransactionRequest() throws Exception {
112         final TestProbe probe = createProbe();
113         final ModifyTransactionRequestBuilder builder =
114                 new ModifyTransactionRequestBuilder(TRANSACTION_ID, probe.ref());
115         builder.setSequence(0);
116         builder.setAbort();
117         final ModifyTransactionRequest request = builder.build();
118         transaction.replayModifyTransactionRequest(request, createCallbackMock(), Ticker.systemTicker().read());
119         getTester().expectTransactionRequest(AbortLocalTransactionRequest.class);
120     }
121
122     @Test
123     public void testApplyModifyTransactionRequestNotAbort() throws Exception {
124         final TestProbe probe = createProbe();
125         final ModifyTransactionRequestBuilder builder =
126                 new ModifyTransactionRequestBuilder(TRANSACTION_ID, probe.ref());
127         builder.setSequence(0);
128         builder.setReady();
129         final ModifyTransactionRequest request = builder.build();
130         assertOperationThrowsException(() -> transaction.replayModifyTransactionRequest(request, createCallbackMock(),
131             Ticker.systemTicker().read()), VerifyException.class);
132     }
133 }