b9405650139889cbdb899d3e71fc78159e21a526
[mdsal.git] / dom / mdsal-dom-broker / src / test / java / org / opendaylight / mdsal / dom / broker / test / ShardedDOMDataTreeProducerSingleShardTest.java
1 /*
2  * Copyright (c) 2015 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.test;
9
10 import static org.junit.Assert.assertNotNull;
11 import static org.junit.Assert.fail;
12 import static org.mockito.Mockito.doReturn;
13
14 import java.util.Collection;
15 import java.util.Collections;
16 import org.junit.Before;
17 import org.junit.Test;
18 import org.mockito.Mock;
19 import org.mockito.MockitoAnnotations;
20 import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
21 import org.opendaylight.mdsal.dom.api.DOMDataTreeIdentifier;
22 import org.opendaylight.mdsal.dom.api.DOMDataTreeProducer;
23 import org.opendaylight.mdsal.dom.api.DOMDataTreeProducerBusyException;
24 import org.opendaylight.mdsal.dom.api.DOMDataTreeProducerException;
25 import org.opendaylight.mdsal.dom.api.DOMDataTreeService;
26 import org.opendaylight.mdsal.dom.api.DOMDataTreeShard;
27 import org.opendaylight.mdsal.dom.api.DOMDataTreeShardingConflictException;
28 import org.opendaylight.mdsal.dom.api.DOMDataTreeWriteTransaction;
29 import org.opendaylight.mdsal.dom.broker.ShardedDOMDataTree;
30 import org.opendaylight.mdsal.dom.broker.test.util.TestModel;
31 import org.opendaylight.mdsal.dom.spi.store.DOMStore;
32 import org.opendaylight.mdsal.dom.spi.store.DOMStoreTransactionChain;
33 import org.opendaylight.mdsal.dom.spi.store.DOMStoreWriteTransaction;
34 import org.opendaylight.yangtools.concepts.ListenerRegistration;
35 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
36 import org.opendaylight.yangtools.yang.data.impl.schema.ImmutableNodes;
37
38 public class ShardedDOMDataTreeProducerSingleShardTest {
39
40
41     private static final DOMDataTreeIdentifier ROOT_ID = new DOMDataTreeIdentifier(LogicalDatastoreType.OPERATIONAL,
42             YangInstanceIdentifier.EMPTY);
43     private static final DOMDataTreeIdentifier TEST_ID = new DOMDataTreeIdentifier(LogicalDatastoreType.OPERATIONAL,
44             TestModel.TEST_PATH);
45
46     private static final Collection<DOMDataTreeIdentifier> SUBTREES_ROOT = Collections.singleton(ROOT_ID);
47     private static final Collection<DOMDataTreeIdentifier> SUBTREES_TEST = Collections.singleton(TEST_ID);
48
49     interface MockTestShard extends DOMDataTreeShard, DOMStore {
50
51     }
52
53     @Mock(name = "rootShard")
54     private MockTestShard rootShard;
55
56
57     @Mock(name = "storeWriteTx")
58     private DOMStoreWriteTransaction writeTxMock;
59
60     @Mock(name = "storeTxChain")
61     private DOMStoreTransactionChain txChainMock;
62
63     private DOMDataTreeService treeService;
64     private ListenerRegistration<MockTestShard> shardReg;
65     private DOMDataTreeProducer producer;
66
67     @Before
68     public void setUp() throws DOMDataTreeShardingConflictException {
69         MockitoAnnotations.initMocks(this);
70         final ShardedDOMDataTree impl = new ShardedDOMDataTree();
71         treeService = impl;
72         shardReg = impl.registerDataTreeShard(ROOT_ID, rootShard);
73
74         doReturn("rootShard").when(rootShard).toString();
75         doReturn(txChainMock).when(rootShard).createTransactionChain();
76         doReturn(writeTxMock).when(txChainMock).newWriteOnlyTransaction();
77         doReturn(TestCommitCohort.ALLWAYS_SUCCESS).when(writeTxMock).ready();
78
79         producer = treeService.createProducer(SUBTREES_ROOT);
80     }
81
82     @Test(expected = IllegalArgumentException.class)
83     public void createProducerWithEmptyList() {
84         treeService.createProducer(Collections.<DOMDataTreeIdentifier>emptySet());
85     }
86
87     @Test(expected = DOMDataTreeProducerBusyException.class)
88     public void closeWithTxOpened() throws DOMDataTreeProducerException {
89         producer.createTransaction(false);
90         producer.close();
91     }
92
93     @Test
94     public void closeWithTxSubmitted() throws DOMDataTreeProducerException {
95         DOMDataTreeWriteTransaction tx = producer.createTransaction(false);
96         tx.submit();
97         producer.close();
98     }
99
100     @Test(expected = IllegalStateException.class)
101     public void allocateTxWithTxOpen() {
102         producer.createTransaction(false);
103         producer.createTransaction(false);
104     }
105
106
107     @Test(expected = IllegalStateException.class)
108     public void allocateChildProducerWithTxOpen() {
109         producer.createTransaction(false);
110         producer.createProducer(SUBTREES_TEST);
111     }
112
113     @Test
114     public void allocateChildProducerWithTxSubmmited() {
115         producer.createTransaction(false).submit();
116         DOMDataTreeProducer childProducer = producer.createProducer(SUBTREES_TEST);
117         assertNotNull(childProducer);
118     }
119
120     @Test(expected = IllegalArgumentException.class)
121     public void writeChildProducerDataToParentTx() {
122         DOMDataTreeProducer childProducer = producer.createProducer(SUBTREES_TEST);
123         assertNotNull(childProducer);
124         DOMDataTreeWriteTransaction parentTx = producer.createTransaction(true);
125         parentTx.put(TEST_ID.getDatastoreType(), TEST_ID.getRootIdentifier(),
126                 ImmutableNodes.containerNode(TestModel.TEST_QNAME));
127     }
128
129     @Test
130     public void allocateTxWithTxSubmitted() {
131         producer.createTransaction(false).submit();
132         producer.createTransaction(false);
133     }
134
135 }