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.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;
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.mdsal.dom.store.inmemory.WriteableDOMDataTreeShard;
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 WriteableDOMDataTreeShard shard = mock(WriteableDOMDataTreeShard.class);
40 DOMDataTreeProducer producer = mock(DOMDataTreeProducer.class);
41 DOMDataTreeCursorAwareTransaction transaction = mock(DOMDataTreeCursorAwareTransaction.class);
42 DOMDataTreeWriteCursor cursor = mock(DOMDataTreeWriteCursor.class);
43 doReturn(producer).when(dataTreeService).createProducer(any());
44 doReturn(transaction).when(producer).createTransaction(true);
45 doReturn(cursor).when(transaction).createCursor(any());
48 TransactionChainListener 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(Futures.immediateCheckedFuture(null)).when(transaction).submit();
70 doReturn(true).when(transaction).cancel();
71 assertTrue(writeTransaction.cancel());
72 transactionChainAdapter.closeWriteTransaction(Futures.immediateFuture(null));
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.submit());
79 assertFalse(writeTransaction.cancel());
80 transactionChainAdapter.closeWriteTransaction(Futures.immediateFuture(null));
82 assertNotNull(transactionChainAdapter.newWriteOnlyTransaction().submit());
84 DOMDataTreeReadTransaction readTransaction = transactionChainAdapter.newReadOnlyTransaction();
85 assertNotNull(readTransaction);
86 transactionChainAdapter.closeReadTransaction();
87 transactionChainAdapter.close();