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.assertNotEquals;
12 import static org.junit.Assert.assertTrue;
13 import static org.junit.Assert.fail;
15 import java.util.ArrayList;
16 import java.util.HashMap;
17 import java.util.HashSet;
18 import java.util.List;
20 import org.junit.Test;
21 import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
22 import org.opendaylight.mdsal.dom.api.DOMDataTreeIdentifier;
23 import org.opendaylight.mdsal.dom.spi.store.DOMStoreThreePhaseCommitCohort;
24 import org.opendaylight.mdsal.dom.spi.store.DOMStoreWriteTransaction;
25 import org.opendaylight.yangtools.yang.common.QName;
26 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
27 import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode;
29 public class ShardedDOMDataWriteTransactionTest {
30 private static final Map<YangInstanceIdentifier, List<NormalizedNode<?, ?>>> TEST_MAP = new HashMap<>();
33 public void basicTests() throws Exception {
34 final ShardedDOMDataTree shardedDOMDataTree =
35 new ShardedDOMDataTree();
36 final ShardedDOMDataTreeProducer shardedDOMDataTreeProducer =
37 new ShardedDOMDataTreeProducer(shardedDOMDataTree, new HashMap<>(), new HashSet<>());
38 final TestDOMStoreWriteTransaction testDOMStoreWriteTransaction =
39 new TestDOMStoreWriteTransaction();
40 final Map<DOMDataTreeIdentifier, DOMStoreWriteTransaction> idToTransaction =
42 final YangInstanceIdentifier yangInstanceIdentifier = YangInstanceIdentifier.of(QName.create("test"));
43 idToTransaction.put(new DOMDataTreeIdentifier(LogicalDatastoreType.OPERATIONAL, yangInstanceIdentifier),
44 testDOMStoreWriteTransaction);
46 final ShardedDOMDataWriteTransaction shardedDOMDataWriteTransaction =
47 new ShardedDOMDataWriteTransaction(shardedDOMDataTreeProducer, idToTransaction);
48 final ShardedDOMDataWriteTransaction otherShardedDOMDataWriteTransaction =
49 new ShardedDOMDataWriteTransaction(shardedDOMDataTreeProducer, idToTransaction);
51 assertFalse(TEST_MAP.containsKey(yangInstanceIdentifier));
52 shardedDOMDataWriteTransaction.put(
53 LogicalDatastoreType.OPERATIONAL, yangInstanceIdentifier, TestUtils.TEST_CONTAINER);
54 assertTrue(TEST_MAP.containsKey(yangInstanceIdentifier));
55 shardedDOMDataWriteTransaction.delete(
56 LogicalDatastoreType.OPERATIONAL, yangInstanceIdentifier);
57 assertFalse(TEST_MAP.containsKey(yangInstanceIdentifier));
58 shardedDOMDataWriteTransaction.merge(
59 LogicalDatastoreType.OPERATIONAL, yangInstanceIdentifier, TestUtils.TEST_CONTAINER);
60 assertTrue(TEST_MAP.get(yangInstanceIdentifier).contains(TestUtils.TEST_CONTAINER));
63 shardedDOMDataWriteTransaction.put(
64 LogicalDatastoreType.CONFIGURATION, yangInstanceIdentifier, TestUtils.TEST_CONTAINER);
65 fail("Expected IllegalArgumentException");
66 } catch (IllegalArgumentException e) {
67 assertTrue(e.getMessage().contains(LogicalDatastoreType.CONFIGURATION.toString()));
70 shardedDOMDataTreeProducer.createTransaction(true);
71 assertTrue(shardedDOMDataWriteTransaction.cancel());
72 assertFalse(shardedDOMDataWriteTransaction.cancel());
74 assertTrue(shardedDOMDataWriteTransaction.getIdentifier().matches("^SHARDED-DOM-\\d$"));
75 assertNotEquals(shardedDOMDataWriteTransaction.getIdentifier(),
76 otherShardedDOMDataWriteTransaction.getIdentifier());
79 private final class TestDOMStoreWriteTransaction implements DOMStoreWriteTransaction {
82 public void write(YangInstanceIdentifier path, NormalizedNode<?, ?> data) {
83 List<NormalizedNode<?, ?>> dataList = TEST_MAP.get(path);
84 if(dataList == null) dataList = new ArrayList<>();
86 TEST_MAP.put(path, dataList);
90 public void merge(YangInstanceIdentifier path, NormalizedNode<?, ?> data) {
91 List<NormalizedNode<?, ?>> dataList = TEST_MAP.get(path);
92 if(dataList == null) dataList = new ArrayList<>();
94 TEST_MAP.put(path, dataList);
98 public void delete(YangInstanceIdentifier path) {
99 TEST_MAP.remove(path);
103 public DOMStoreThreePhaseCommitCohort ready() {
108 public Object getIdentifier() {
113 public void close() {