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
9 package org.opendaylight.restconf.restful.utils;
11 import static org.junit.Assert.assertEquals;
12 import static org.junit.Assert.assertNull;
13 import static org.mockito.Mockito.doReturn;
15 import com.google.common.base.Optional;
16 import com.google.common.util.concurrent.Futures;
17 import org.junit.Before;
18 import org.junit.Test;
19 import org.mockito.Mock;
20 import org.mockito.MockitoAnnotations;
21 import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
22 import org.opendaylight.controller.md.sal.dom.api.DOMDataReadOnlyTransaction;
23 import org.opendaylight.controller.md.sal.dom.api.DOMTransactionChain;
24 import org.opendaylight.netconf.sal.restconf.impl.InstanceIdentifierContext;
25 import org.opendaylight.netconf.sal.restconf.impl.RestconfDocumentedException;
26 import org.opendaylight.restconf.restful.transaction.TransactionVarsWrapper;
27 import org.opendaylight.yangtools.yang.common.QName;
28 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
29 import org.opendaylight.yangtools.yang.data.api.schema.ContainerNode;
30 import org.opendaylight.yangtools.yang.data.api.schema.MapNode;
31 import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode;
32 import org.opendaylight.yangtools.yang.data.impl.schema.Builders;
34 public class ReadDataTransactionUtilTest {
36 private static final TestData data = new TestData();
37 private static final YangInstanceIdentifier.NodeIdentifier nodeIdentifier = new YangInstanceIdentifier
38 .NodeIdentifier(QName.create("ns", "2016-02-28", "container"));
40 private TransactionVarsWrapper wrapper;
42 private DOMTransactionChain transactionChain;
44 private InstanceIdentifierContext<?> context;
46 private DOMDataReadOnlyTransaction read;
50 MockitoAnnotations.initMocks(this);
52 doReturn(read).when(transactionChain).newReadOnlyTransaction();
53 wrapper = new TransactionVarsWrapper(this.context, null, this.transactionChain);
57 public void readDataConfigTest() {
58 doReturn(Futures.immediateCheckedFuture(Optional.of(data.data3))).when(read)
59 .read(LogicalDatastoreType.CONFIGURATION, data.path);
60 doReturn(data.path).when(context).getInstanceIdentifier();
61 final String valueOfContent = RestconfDataServiceConstant.ReadData.CONFIG;
62 final NormalizedNode<?, ?> normalizedNode = ReadDataTransactionUtil.readData(valueOfContent, wrapper);
63 assertEquals(data.data3, normalizedNode);
67 public void readAllHavingOnlyConfigTest() {
68 doReturn(Futures.immediateCheckedFuture(Optional.of(data.data3))).when(read)
69 .read(LogicalDatastoreType.CONFIGURATION, data.path);
70 doReturn(Futures.immediateCheckedFuture(Optional.absent())).when(read)
71 .read(LogicalDatastoreType.OPERATIONAL, data.path);
72 doReturn(data.path).when(context).getInstanceIdentifier();
73 final String valueOfContent = RestconfDataServiceConstant.ReadData.ALL;
74 final NormalizedNode<?, ?> normalizedNode = ReadDataTransactionUtil.readData(valueOfContent, wrapper);
75 assertEquals(data.data3, normalizedNode);
79 public void readAllHavingOnlyNonConfigTest() {
80 doReturn(Futures.immediateCheckedFuture(Optional.of(data.data2))).when(read)
81 .read(LogicalDatastoreType.OPERATIONAL, data.path2);
82 doReturn(Futures.immediateCheckedFuture(Optional.absent())).when(read)
83 .read(LogicalDatastoreType.CONFIGURATION, data.path2);
84 doReturn(data.path2).when(context).getInstanceIdentifier();
85 final String valueOfContent = RestconfDataServiceConstant.ReadData.ALL;
86 final NormalizedNode<?, ?> normalizedNode = ReadDataTransactionUtil.readData(valueOfContent, wrapper);
87 assertEquals(data.data2, normalizedNode);
91 public void readDataNonConfigTest() {
92 doReturn(Futures.immediateCheckedFuture(Optional.of(data.data2))).when(read)
93 .read(LogicalDatastoreType.OPERATIONAL, data.path2);
94 doReturn(data.path2).when(context).getInstanceIdentifier();
95 final String valueOfContent = RestconfDataServiceConstant.ReadData.NONCONFIG;
96 final NormalizedNode<?, ?> normalizedNode = ReadDataTransactionUtil.readData(valueOfContent, wrapper);
97 assertEquals(data.data2, normalizedNode);
101 public void readContainerDataAllTest() {
102 doReturn(Futures.immediateCheckedFuture(Optional.of(data.data3))).when(read)
103 .read(LogicalDatastoreType.CONFIGURATION, data.path);
104 doReturn(Futures.immediateCheckedFuture(Optional.of(data.data4))).when(read)
105 .read(LogicalDatastoreType.OPERATIONAL, data.path);
106 doReturn(data.path).when(context).getInstanceIdentifier();
107 final String valueOfContent = RestconfDataServiceConstant.ReadData.ALL;
108 final NormalizedNode<?, ?> normalizedNode = ReadDataTransactionUtil.readData(valueOfContent, wrapper);
109 final ContainerNode checkingData = Builders
111 .withNodeIdentifier(nodeIdentifier)
112 .withChild(data.contentLeaf)
113 .withChild(data.contentLeaf2)
115 assertEquals(checkingData, normalizedNode);
119 public void readContainerDataConfigNoValueOfContentTest() {
120 doReturn(Futures.immediateCheckedFuture(Optional.of(data.data3))).when(read)
121 .read(LogicalDatastoreType.CONFIGURATION, data.path);
122 doReturn(Futures.immediateCheckedFuture(Optional.of(data.data4))).when(read)
123 .read(LogicalDatastoreType.OPERATIONAL, data.path);
124 doReturn(data.path).when(context).getInstanceIdentifier();
125 final NormalizedNode<?, ?> normalizedNode = ReadDataTransactionUtil.readData(null, wrapper);
126 final ContainerNode checkingData = Builders
128 .withNodeIdentifier(nodeIdentifier)
129 .withChild(data.contentLeaf)
130 .withChild(data.contentLeaf2)
132 assertEquals(checkingData, normalizedNode);
136 public void readListDataAllTest() {
137 doReturn(Futures.immediateCheckedFuture(Optional.of(data.listData))).when(read)
138 .read(LogicalDatastoreType.OPERATIONAL, data.path3);
139 doReturn(Futures.immediateCheckedFuture(Optional.of(data.listData2))).when(read)
140 .read(LogicalDatastoreType.CONFIGURATION, data.path3);
141 doReturn(data.path3).when(context).getInstanceIdentifier();
142 final String valueOfContent = RestconfDataServiceConstant.ReadData.ALL;
143 final NormalizedNode<?, ?> normalizedNode = ReadDataTransactionUtil.readData(valueOfContent, wrapper);
144 final MapNode checkingData = Builders
146 .withNodeIdentifier(new YangInstanceIdentifier.NodeIdentifier(QName.create("ns", "2016-02-28", "list")))
147 .withChild(data.checkData)
149 assertEquals(checkingData, normalizedNode);
153 public void readDataWrongPathOrNoContentTest() {
154 doReturn(Futures.immediateCheckedFuture(Optional.absent())).when(read)
155 .read(LogicalDatastoreType.CONFIGURATION, data.path2);
156 doReturn(data.path2).when(context).getInstanceIdentifier();
157 final String valueOfContent = RestconfDataServiceConstant.ReadData.CONFIG;
158 final NormalizedNode<?, ?> normalizedNode = ReadDataTransactionUtil.readData(valueOfContent, wrapper);
159 assertNull(normalizedNode);
162 @Test(expected = RestconfDocumentedException.class)
163 public void readDataFailTest() {
164 final String valueOfContent = RestconfDataServiceConstant.ReadData.READ_TYPE_TX;
165 final NormalizedNode<?, ?> normalizedNode = ReadDataTransactionUtil.readData(valueOfContent, null);
166 assertNull(normalizedNode);