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