c06cc4532f3a1ddb4d965c831caf18787c0578df
[netconf.git] / restconf / sal-rest-connector / src / test / java / org / opendaylight / restconf / restful / utils / ReadDataTransactionUtilTest.java
1 /*
2  * Copyright (c) 2016 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
9 package org.opendaylight.restconf.restful.utils;
10
11 import static org.junit.Assert.assertEquals;
12 import static org.junit.Assert.assertNull;
13 import static org.mockito.Mockito.doReturn;
14
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;
33
34 public class ReadDataTransactionUtilTest {
35
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"));
39
40     private TransactionVarsWrapper wrapper;
41     @Mock
42     private DOMTransactionChain transactionChain;
43     @Mock
44     private InstanceIdentifierContext<?> context;
45     @Mock
46     private DOMDataReadOnlyTransaction read;
47
48     @Before
49     public void setUp() {
50         MockitoAnnotations.initMocks(this);
51
52         doReturn(read).when(transactionChain).newReadOnlyTransaction();
53         wrapper = new TransactionVarsWrapper(this.context, null, this.transactionChain);
54     }
55
56     @Test
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);
64     }
65
66     @Test
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);
76     }
77
78     @Test
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);
88     }
89
90     @Test
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);
98     }
99
100     @Test
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
110                 .containerBuilder()
111                 .withNodeIdentifier(nodeIdentifier)
112                 .withChild(data.contentLeaf)
113                 .withChild(data.contentLeaf2)
114                 .build();
115         assertEquals(checkingData, normalizedNode);
116     }
117
118     @Test
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
127                 .containerBuilder()
128                 .withNodeIdentifier(nodeIdentifier)
129                 .withChild(data.contentLeaf)
130                 .withChild(data.contentLeaf2)
131                 .build();
132         assertEquals(checkingData, normalizedNode);
133     }
134
135     @Test
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
145                 .mapBuilder()
146                 .withNodeIdentifier(new YangInstanceIdentifier.NodeIdentifier(QName.create("ns", "2016-02-28", "list")))
147                 .withChild(data.checkData)
148                 .build();
149         assertEquals(checkingData, normalizedNode);
150     }
151
152     @Test
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);
160     }
161
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);
167     }
168 }