Reorganize transactionChainHandler usage.
[netconf.git] / restconf / restconf-nb-rfc8040 / src / test / java / org / opendaylight / restconf / nb / rfc8040 / handlers / TransactionChainHandlerTest.java
1 /*
2  * Copyright (c) 2019 PANTHEON.tech, 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.restconf.nb.rfc8040.handlers;
9
10 import com.google.common.collect.ClassToInstanceMap;
11 import org.eclipse.jdt.annotation.NonNull;
12 import org.junit.After;
13 import org.junit.Assert;
14 import org.junit.Test;
15 import org.mockito.Mockito;
16 import org.opendaylight.mdsal.dom.api.DOMDataBroker;
17 import org.opendaylight.mdsal.dom.api.DOMDataBrokerExtension;
18 import org.opendaylight.mdsal.dom.api.DOMDataTreeReadTransaction;
19 import org.opendaylight.mdsal.dom.api.DOMDataTreeReadWriteTransaction;
20 import org.opendaylight.mdsal.dom.api.DOMDataTreeTransaction;
21 import org.opendaylight.mdsal.dom.api.DOMDataTreeWriteTransaction;
22 import org.opendaylight.mdsal.dom.api.DOMTransactionChain;
23 import org.opendaylight.mdsal.dom.api.DOMTransactionChainListener;
24 import org.opendaylight.restconf.common.errors.RestconfDocumentedException;
25
26 public class TransactionChainHandlerTest {
27
28     private TransactionChainHandler transactionChainHandler;
29     private static final String EXCEPTION_MESSAGE = "(TEST) Unsupported Method";
30
31     @After
32     public void shutdown() {
33         this.transactionChainHandler.close();
34     }
35
36     @Test
37     public void transactionChainTest() {
38         this.transactionChainHandler = new TransactionChainHandler(new DataBrokerLocal());
39         final DOMTransactionChain chain1 = this.transactionChainHandler.get();
40         final DOMTransactionChain chain2 = this.transactionChainHandler.get();
41         Assert.assertNotNull(chain1);
42         Assert.assertNotNull(chain2);
43         Assert.assertNotEquals(chain1, chain2);
44         chain1.close();
45         Assert.assertFalse(this.transactionChainHandler.verifyIfExistTransactionChain(chain1));
46
47         try {
48             chain2.newReadOnlyTransaction();
49         } catch (RestconfDocumentedException e) {
50             Assert.assertEquals(e.getCause().getLocalizedMessage(), EXCEPTION_MESSAGE);
51         }
52         Assert.assertFalse(this.transactionChainHandler.verifyIfExistTransactionChain(chain2));
53     }
54
55     private final class TxChainLocal implements DOMTransactionChain {
56         DOMTransactionChainListener listener;
57
58         TxChainLocal(DOMTransactionChainListener listener) {
59             this.listener = listener;
60         }
61
62         @Override
63         public DOMDataTreeReadTransaction newReadOnlyTransaction() {
64             final DOMDataTreeTransaction domDataTreeTransaction = Mockito.mock(DOMDataTreeTransaction.class);
65             listener.onTransactionChainFailed(this,
66                     domDataTreeTransaction, new Throwable(EXCEPTION_MESSAGE));
67             return null;
68         }
69
70         @Override
71         public DOMDataTreeWriteTransaction newWriteOnlyTransaction() {
72             return null;
73         }
74
75         @Override
76         public DOMDataTreeReadWriteTransaction newReadWriteTransaction() {
77             return null;
78         }
79
80         @Override
81         public void close() {
82             listener.onTransactionChainSuccessful(this);
83         }
84     }
85
86     private final class DataBrokerLocal implements DOMDataBroker {
87
88         @Override
89         public @NonNull DOMTransactionChain createTransactionChain(DOMTransactionChainListener listener) {
90             return new TxChainLocal(listener);
91         }
92
93         @Override
94         public @NonNull DOMTransactionChain createMergingTransactionChain(DOMTransactionChainListener listener) {
95             return null;
96         }
97
98         @Override
99         public @NonNull ClassToInstanceMap<DOMDataBrokerExtension> getExtensions() {
100             return null;
101         }
102
103         @Override
104         public DOMDataTreeReadTransaction newReadOnlyTransaction() {
105             return null;
106         }
107
108         @Override
109         public DOMDataTreeWriteTransaction newWriteOnlyTransaction() {
110             return null;
111         }
112
113         @Override
114         public DOMDataTreeReadWriteTransaction newReadWriteTransaction() {
115             return null;
116         }
117     }
118 }