2 * Copyright (c) 2015 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.test;
10 import static org.junit.Assert.assertNotNull;
11 import static org.junit.Assert.fail;
12 import static org.mockito.Mockito.doReturn;
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;
38 public class ShardedDOMDataTreeProducerSingleShardTest {
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,
46 private static final Collection<DOMDataTreeIdentifier> SUBTREES_ROOT = Collections.singleton(ROOT_ID);
47 private static final Collection<DOMDataTreeIdentifier> SUBTREES_TEST = Collections.singleton(TEST_ID);
49 interface MockTestShard extends DOMDataTreeShard, DOMStore {
53 @Mock(name = "rootShard")
54 private MockTestShard rootShard;
57 @Mock(name = "storeWriteTx")
58 private DOMStoreWriteTransaction writeTxMock;
60 @Mock(name = "storeTxChain")
61 private DOMStoreTransactionChain txChainMock;
63 private DOMDataTreeService treeService;
64 private ListenerRegistration<MockTestShard> shardReg;
65 private DOMDataTreeProducer producer;
68 public void setUp() throws DOMDataTreeShardingConflictException {
69 MockitoAnnotations.initMocks(this);
70 final ShardedDOMDataTree impl = new ShardedDOMDataTree();
72 shardReg = impl.registerDataTreeShard(ROOT_ID, rootShard);
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();
79 producer = treeService.createProducer(SUBTREES_ROOT);
82 @Test(expected = IllegalArgumentException.class)
83 public void createProducerWithEmptyList() {
84 treeService.createProducer(Collections.<DOMDataTreeIdentifier>emptySet());
87 @Test(expected = DOMDataTreeProducerBusyException.class)
88 public void closeWithTxOpened() throws DOMDataTreeProducerException {
89 producer.createTransaction(false);
94 public void closeWithTxSubmitted() throws DOMDataTreeProducerException {
95 DOMDataTreeWriteTransaction tx = producer.createTransaction(false);
100 @Test(expected = IllegalStateException.class)
101 public void allocateTxWithTxOpen() {
102 producer.createTransaction(false);
103 producer.createTransaction(false);
107 @Test(expected = IllegalStateException.class)
108 public void allocateChildProducerWithTxOpen() {
109 producer.createTransaction(false);
110 producer.createProducer(SUBTREES_TEST);
114 public void allocateChildProducerWithTxSubmmited() {
115 producer.createTransaction(false).submit();
116 DOMDataTreeProducer childProducer = producer.createProducer(SUBTREES_TEST);
117 assertNotNull(childProducer);
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));
130 public void allocateTxWithTxSubmitted() {
131 producer.createTransaction(false).submit();
132 producer.createTransaction(false);