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.broker;
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.ArgumentMatchers.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;
20 import org.junit.Test;
21 import org.opendaylight.mdsal.common.api.CommitInfo;
22 import org.opendaylight.mdsal.dom.api.DOMDataTreeCursorAwareTransaction;
23 import org.opendaylight.mdsal.dom.api.DOMDataTreeProducer;
24 import org.opendaylight.mdsal.dom.api.DOMDataTreeReadTransaction;
25 import org.opendaylight.mdsal.dom.api.DOMDataTreeService;
26 import org.opendaylight.mdsal.dom.api.DOMDataTreeWriteCursor;
27 import org.opendaylight.mdsal.dom.api.DOMDataTreeWriteTransaction;
28 import org.opendaylight.mdsal.dom.api.DOMTransactionChainListener;
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;
33 public class ShardedDOMTransactionChainAdapterTest {
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();
48 DOMTransactionChainListener chainListener = new BlockingTransactionChainListener();
49 ShardedDOMTransactionChainAdapter transactionChainAdapter =
50 new ShardedDOMTransactionChainAdapter(identifier, dataTreeService, chainListener);
52 DOMDataTreeWriteTransaction writeTransaction = transactionChainAdapter.newWriteOnlyTransaction();
53 assertNotNull(writeTransaction);
54 assertNotNull(writeTransaction.getIdentifier());
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());
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());
64 doNothing().when(cursor).delete(any());
65 writeTransaction.delete(OPERATIONAL, TestModel.TEST_PATH);
66 verify(cursor).delete(any());
68 doNothing().when(cursor).close();
69 doReturn(CommitInfo.emptyFluentFuture()).when(transaction).commit();
70 doReturn(true).when(transaction).cancel();
71 assertTrue(writeTransaction.cancel());
72 transactionChainAdapter.closeWriteTransaction(FluentFutures.immediateNullFluentFuture());
74 transactionChainAdapter = new ShardedDOMTransactionChainAdapter(identifier, dataTreeService, chainListener);
75 writeTransaction = transactionChainAdapter.newWriteOnlyTransaction();
76 writeTransaction.put(OPERATIONAL, TestModel.TEST_PATH, ImmutableNodes.containerNode(TestModel.TEST_QNAME));
77 assertNotNull(writeTransaction.commit());
78 assertFalse(writeTransaction.cancel());
79 transactionChainAdapter.closeWriteTransaction(FluentFutures.immediateNullFluentFuture());
81 assertNotNull(transactionChainAdapter.newWriteOnlyTransaction().commit());
83 DOMDataTreeReadTransaction readTransaction = transactionChainAdapter.newReadOnlyTransaction();
84 assertNotNull(readTransaction);
85 transactionChainAdapter.closeReadTransaction();
86 transactionChainAdapter.close();