3b3e7da7afc2229c6071b2eb73b91b64da238aa0
[mdsal.git] / dom / mdsal-dom-broker / src / test / java / org / opendaylight / mdsal / dom / broker / ShardedDOMTransactionChainAdapterTest.java
1 /*
2  * Copyright (c) 2016 Cisco Systems, Inc. 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.mdsal.dom.broker;
9
10 import static org.junit.Assert.assertFalse;
11 import static org.junit.Assert.assertNotNull;
12 import static org.junit.Assert.assertTrue;
13 import static org.mockito.Matchers.any;
14 import static org.mockito.Mockito.doNothing;
15 import static org.mockito.Mockito.doReturn;
16 import static org.mockito.Mockito.mock;
17 import static org.mockito.Mockito.verify;
18 import static org.opendaylight.mdsal.common.api.LogicalDatastoreType.OPERATIONAL;
19
20 import com.google.common.util.concurrent.Futures;
21 import org.junit.Test;
22 import org.opendaylight.mdsal.common.api.TransactionChainListener;
23 import org.opendaylight.mdsal.dom.api.DOMDataTreeCursorAwareTransaction;
24 import org.opendaylight.mdsal.dom.api.DOMDataTreeProducer;
25 import org.opendaylight.mdsal.dom.api.DOMDataTreeReadTransaction;
26 import org.opendaylight.mdsal.dom.api.DOMDataTreeService;
27 import org.opendaylight.mdsal.dom.api.DOMDataTreeWriteCursor;
28 import org.opendaylight.mdsal.dom.api.DOMDataTreeWriteTransaction;
29 import org.opendaylight.mdsal.dom.broker.util.TestModel;
30 import org.opendaylight.yangtools.util.concurrent.FluentFutures;
31 import org.opendaylight.yangtools.yang.data.impl.schema.ImmutableNodes;
32
33 public class ShardedDOMTransactionChainAdapterTest {
34
35     @Test
36     public void basicTest() throws Exception {
37         String identifier = "TestIdent";
38         DOMDataTreeService dataTreeService = mock(DOMDataTreeService.class);
39         DOMDataTreeProducer producer = mock(DOMDataTreeProducer.class);
40         DOMDataTreeCursorAwareTransaction transaction = mock(DOMDataTreeCursorAwareTransaction.class);
41         DOMDataTreeWriteCursor cursor = mock(DOMDataTreeWriteCursor.class);
42         doReturn(producer).when(dataTreeService).createProducer(any());
43         doReturn(transaction).when(producer).createTransaction(true);
44         doReturn(cursor).when(transaction).createCursor(any());
45         doNothing().when(producer).close();
46
47
48         TransactionChainListener chainListener = new BlockingTransactionChainListener();
49         ShardedDOMTransactionChainAdapter transactionChainAdapter =
50                 new ShardedDOMTransactionChainAdapter(identifier, dataTreeService, chainListener);
51
52         DOMDataTreeWriteTransaction writeTransaction = transactionChainAdapter.newWriteOnlyTransaction();
53         assertNotNull(writeTransaction);
54         assertNotNull(writeTransaction.getIdentifier());
55
56         doNothing().when(cursor).write(any(), any());
57         writeTransaction.put(OPERATIONAL, TestModel.TEST_PATH, ImmutableNodes.containerNode(TestModel.TEST_QNAME));
58         verify(cursor).write(any(), any());
59
60         doNothing().when(cursor).merge(any(), any());
61         writeTransaction.merge(OPERATIONAL, TestModel.TEST_PATH, ImmutableNodes.containerNode(TestModel.TEST_QNAME));
62         verify(cursor).merge(any(), any());
63
64         doNothing().when(cursor).delete(any());
65         writeTransaction.delete(OPERATIONAL, TestModel.TEST_PATH);
66         verify(cursor).delete(any());
67
68         doNothing().when(cursor).close();
69         doReturn(Futures.immediateCheckedFuture(null)).when(transaction).commit();
70         doReturn(true).when(transaction).cancel();
71         assertTrue(writeTransaction.cancel());
72         transactionChainAdapter.closeWriteTransaction(FluentFutures.immediateNullFluentFuture());
73
74         transactionChainAdapter =
75                 new ShardedDOMTransactionChainAdapter(identifier, dataTreeService, chainListener);
76         writeTransaction = transactionChainAdapter.newWriteOnlyTransaction();
77         writeTransaction.put(OPERATIONAL, TestModel.TEST_PATH, ImmutableNodes.containerNode(TestModel.TEST_QNAME));
78         assertNotNull(writeTransaction.commit());
79         assertFalse(writeTransaction.cancel());
80         transactionChainAdapter.closeWriteTransaction(FluentFutures.immediateNullFluentFuture());
81
82         assertNotNull(transactionChainAdapter.newWriteOnlyTransaction().commit());
83
84         DOMDataTreeReadTransaction readTransaction = transactionChainAdapter.newReadOnlyTransaction();
85         assertNotNull(readTransaction);
86         transactionChainAdapter.closeReadTransaction();
87         transactionChainAdapter.close();
88     }
89 }