/*
* Copyright (c) 2016 Cisco Systems, Inc. and others. All rights reserved.
*
* This program and the accompanying materials are made available under the
* terms of the Eclipse Public License v1.0 which accompanies this distribution,
* and is available at http://www.eclipse.org/legal/epl-v10.html
*/
package org.opendaylight.restconf.nb.rfc8040.rests.services.impl;
import static org.junit.Assert.assertEquals;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.Mockito.doReturn;
import java.util.Optional;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
import org.mockito.junit.MockitoJUnitRunner;
import org.opendaylight.mdsal.binding.runtime.spi.BindingRuntimeHelpers;
import org.opendaylight.mdsal.dom.api.DOMDataBroker;
import org.opendaylight.mdsal.dom.api.DOMMountPoint;
import org.opendaylight.mdsal.dom.api.DOMMountPointService;
import org.opendaylight.mdsal.dom.api.DOMRpcService;
import org.opendaylight.mdsal.dom.api.DOMSchemaService;
import org.opendaylight.restconf.nb.rfc8040.databind.DatabindContext;
import org.opendaylight.yang.gen.v1.module._1.rev140101.Module1Data;
import org.opendaylight.yang.gen.v1.module._2.rev140102.Module2Data;
import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NetworkTopology;
import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext;
@RunWith(MockitoJUnitRunner.StrictStubs.class)
public class RestconfOperationsServiceImplTest {
private static final String DEVICE_ID = "network-topology:network-topology/topology=topology-netconf/"
+ "node=device/yang-ext:mount";
private static final String DEVICE_RPC1_MODULE1_ID = DEVICE_ID + "module1:dummy-rpc1-module1";
private static final String EXPECTED_JSON = """
{
"ietf-restconf:operations" : {
"module1:dummy-rpc1-module1": [null],
"module1:dummy-rpc2-module1": [null],
"module2:dummy-rpc1-module2": [null],
"module2:dummy-rpc2-module2": [null]
}
}""";
private static final String EXPECTED_XML = """
""";
private static EffectiveModelContext SCHEMA;
@Mock
private DOMMountPointService mountPointService;
@Mock
private DOMMountPoint mountPoint;
@Mock
private DOMSchemaService schemaService;
@Mock
private DOMDataBroker dataBroker;
@Mock
private DOMRpcService rpcService;
private RestconfOperationsServiceImpl opService;
@BeforeClass
public static void beforeClass() {
SCHEMA = BindingRuntimeHelpers.createRuntimeContext(Module1Data.class, Module2Data.class, NetworkTopology.class)
.getEffectiveModelContext();
}
@Before
public void before() {
doReturn(SCHEMA).when(schemaService).getGlobalContext();
doReturn(Optional.of(schemaService)).when(mountPoint).getService(DOMSchemaService.class);
doReturn(Optional.of(mountPoint)).when(mountPointService).getMountPoint(any());
opService = new RestconfOperationsServiceImpl(() -> DatabindContext.ofModel(SCHEMA),
new MdsalRestconfServer(dataBroker, rpcService, mountPointService));
}
@Test
public void testOperationsJson() {
final var operationsJSON = opService.getOperationsJSON();
assertEquals(EXPECTED_JSON, operationsJSON);
}
@Test
public void testOperationsXml() {
final var operationsXML = opService.getOperationsXML();
assertEquals(EXPECTED_XML, operationsXML);
}
@Test
public void testMountPointOperationsJson() {
final var operationJSON = opService.getOperationJSON(DEVICE_ID);
assertEquals(EXPECTED_JSON, operationJSON);
}
@Test
public void testMountPointOperationsXml() {
final var operationXML = opService.getOperationXML(DEVICE_ID);
assertEquals(EXPECTED_XML, operationXML);
}
@Test
public void testMountPointSpecificOperationsJson() {
final var operationJSON = opService.getOperationJSON(DEVICE_RPC1_MODULE1_ID);
assertEquals("""
{
"ietf-restconf:operations" : {
"module1:dummy-rpc1-module1": [null]
}
}""", operationJSON);
}
@Test
public void testMountPointSpecificOperationsXml() {
final var operationXML = opService.getOperationXML(DEVICE_RPC1_MODULE1_ID);
assertEquals("""
""", operationXML);
}
}