Bump upstreams
[netconf.git] / restconf / restconf-nb / src / test / java / org / opendaylight / restconf / nb / jaxrs / RestconfOperationsGetTest.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 package org.opendaylight.restconf.nb.jaxrs;
9
10 import static org.junit.jupiter.api.Assertions.assertEquals;
11 import static org.mockito.ArgumentMatchers.any;
12 import static org.mockito.Mockito.doReturn;
13
14 import java.util.Optional;
15 import org.junit.jupiter.api.Test;
16 import org.junit.jupiter.api.extension.ExtendWith;
17 import org.mockito.junit.jupiter.MockitoExtension;
18 import org.opendaylight.mdsal.binding.runtime.spi.BindingRuntimeHelpers;
19 import org.opendaylight.mdsal.dom.api.DOMActionService;
20 import org.opendaylight.mdsal.dom.api.DOMDataBroker;
21 import org.opendaylight.mdsal.dom.api.DOMMountPointService;
22 import org.opendaylight.mdsal.dom.api.DOMRpcService;
23 import org.opendaylight.mdsal.dom.api.DOMSchemaService;
24 import org.opendaylight.mdsal.dom.spi.FixedDOMSchemaService;
25 import org.opendaylight.netconf.dom.api.NetconfDataTreeService;
26 import org.opendaylight.restconf.api.ApiPath;
27 import org.opendaylight.yang.gen.v1.module._1.rev140101.Module1Data;
28 import org.opendaylight.yang.gen.v1.module._2.rev140102.Module2Data;
29 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NetworkTopology;
30 import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext;
31
32 @ExtendWith(MockitoExtension.class)
33 class RestconfOperationsGetTest extends AbstractRestconfTest {
34     private static final ApiPath DEVICE_ID =
35         apiPath("network-topology:network-topology/topology=topology-netconf/node=device/yang-ext:mount");
36     private static final ApiPath DEVICE_RPC1_MODULE1_ID = apiPath("network-topology:network-topology/"
37         + "topology=topology-netconf/node=device/yang-ext:mount/module1:dummy-rpc1-module1");
38     private static final String EXPECTED_JSON = """
39         {
40           "ietf-restconf:operations" : {
41             "module1:dummy-rpc1-module1" : [null],
42             "module1:dummy-rpc2-module1" : [null],
43             "module2:dummy-rpc1-module2" : [null],
44             "module2:dummy-rpc2-module2" : [null]
45           }
46         }""";
47     private static final String EXPECTED_XML = """
48         <operations xmlns="urn:ietf:params:xml:ns:yang:ietf-restconf">
49           <dummy-rpc1-module1 xmlns="module:1"/>
50           <dummy-rpc2-module1 xmlns="module:1"/>
51           <dummy-rpc1-module2 xmlns="module:2"/>
52           <dummy-rpc2-module2 xmlns="module:2"/>
53         </operations>""";
54
55     private static final EffectiveModelContext MODEL_CONTEXT = BindingRuntimeHelpers.createRuntimeContext(
56         Module1Data.class, Module2Data.class, NetworkTopology.class).modelContext();
57
58     @Override
59     EffectiveModelContext modelContext() {
60         return MODEL_CONTEXT;
61     }
62
63     @Test
64     void testOperationsJson() {
65         assertEquals(EXPECTED_JSON, assertEntity(200, ar -> restconf.operationsJsonGET(ar)));
66     }
67
68     @Test
69     void testOperationsXml() {
70         assertEquals(EXPECTED_XML, assertEntity(200, ar -> restconf.operationsXmlGET(ar)));
71     }
72
73     private void mockMountPoint() {
74         doReturn(Optional.of(new FixedDOMSchemaService(MODEL_CONTEXT))).when(mountPoint)
75             .getService(DOMSchemaService.class);
76         doReturn(Optional.empty()).when(mountPoint).getService(DOMRpcService.class);
77         doReturn(Optional.empty()).when(mountPoint).getService(DOMActionService.class);
78         doReturn(Optional.empty()).when(mountPoint).getService(DOMMountPointService.class);
79         doReturn(Optional.empty()).when(mountPoint).getService(NetconfDataTreeService.class);
80         doReturn(Optional.of(dataBroker)).when(mountPoint).getService(DOMDataBroker.class);
81         doReturn(Optional.of(mountPoint)).when(mountPointService).getMountPoint(any());
82     }
83
84     @Test
85     void testMountPointOperationsJson() {
86         mockMountPoint();
87         assertEquals(EXPECTED_JSON, assertEntity(200, ar -> restconf.operationsJsonGET(DEVICE_ID, ar)));
88     }
89
90     @Test
91     void testMountPointOperationsXml() {
92         mockMountPoint();
93         assertEquals(EXPECTED_XML, assertEntity(200, ar -> restconf.operationsXmlGET(DEVICE_ID, ar)));
94     }
95
96     @Test
97     void testMountPointSpecificOperationsJson() {
98         mockMountPoint();
99         assertEquals("""
100             { "module1:dummy-rpc1-module1" : [null] }""",
101             assertEntity(200, ar -> restconf.operationsJsonGET(DEVICE_RPC1_MODULE1_ID, ar)));
102     }
103
104     @Test
105     void testMountPointSpecificOperationsXml() {
106         mockMountPoint();
107         assertEquals("""
108             <dummy-rpc1-module1 xmlns="module:1"/>""",
109             assertEntity(200, ar -> restconf.operationsXmlGET(DEVICE_RPC1_MODULE1_ID, ar)));
110     }
111 }