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.services.impl;
11 import static org.junit.Assert.assertEquals;
12 import static org.junit.Assert.assertNotNull;
13 import static org.junit.Assert.assertNull;
15 import java.util.Iterator;
16 import org.junit.Test;
17 import org.opendaylight.controller.md.sal.rest.common.TestRestconfUtils;
18 import org.opendaylight.netconf.sal.restconf.impl.InstanceIdentifierContext;
19 import org.opendaylight.netconf.sal.restconf.impl.NormalizedNodeContext;
20 import org.opendaylight.restconf.common.references.SchemaContextRef;
21 import org.opendaylight.restconf.handlers.SchemaContextHandler;
22 import org.opendaylight.yangtools.yang.common.QName;
23 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
24 import org.opendaylight.yangtools.yang.data.api.schema.ContainerNode;
25 import org.opendaylight.yangtools.yang.data.api.schema.LeafNode;
26 import org.opendaylight.yangtools.yang.data.impl.schema.Builders;
27 import org.opendaylight.yangtools.yang.model.api.RpcDefinition;
29 public class RestconfInvokeOperationsServiceImplTest {
31 private static final String PATH_FOR_NEW_SCHEMA_CONTEXT = "/streams";
34 public void testInvokeRpc() throws Exception {
35 final SchemaContextRef contextRef = new SchemaContextRef(TestRestconfUtils.loadSchemaContext(PATH_FOR_NEW_SCHEMA_CONTEXT));
36 final SchemaContextHandler schemaContextHandler = new SchemaContextHandler();
37 schemaContextHandler.onGlobalContextUpdated(contextRef.get());
38 final RestconfInvokeOperationsServiceImpl invokeOperationsService = new RestconfInvokeOperationsServiceImpl(null, schemaContextHandler);
40 final QName qname = QName.create("http://netconfcentral.org/ns/toaster", "2009-11-20", "toasterStatus");
41 final QName qname1 = QName.create("http://netconfcentral.org/ns/toaster", "2009-11-20", "toaster");
42 final QName rpcQnameInput = QName.create("urn:opendaylight:params:xml:ns:yang:controller:md:sal:remote", "2014-01-14", "input");
43 final QName inputQname = QName.create(rpcQnameInput, "path");
44 final YangInstanceIdentifier iid = YangInstanceIdentifier.builder()
47 final YangInstanceIdentifier iidAsLeafValue = YangInstanceIdentifier.builder()
52 final LeafNode contentLeaf = Builders.leafBuilder()
53 .withNodeIdentifier(new YangInstanceIdentifier.NodeIdentifier(inputQname))
54 .withValue(iidAsLeafValue)
56 final ContainerNode input = Builders.containerBuilder()
57 .withNodeIdentifier(new YangInstanceIdentifier.NodeIdentifier(rpcQnameInput))
58 .withChild(contentLeaf)
60 final Iterator<RpcDefinition> iterator = contextRef.get().getOperations().iterator();
61 RpcDefinition rpcDef = null;
62 while (iterator.hasNext()) {
63 rpcDef = iterator.next();
64 if ("create-data-change-event-subscription".equals(rpcDef.getQName().getLocalName())) {
69 final InstanceIdentifierContext<RpcDefinition> iidContext = new InstanceIdentifierContext<>(iid, rpcDef, null, contextRef.get());
70 final NormalizedNodeContext payload = new NormalizedNodeContext(iidContext, input);
71 final NormalizedNodeContext context = invokeOperationsService.invokeRpc(null, payload, null);
73 final QName rpcQnameOutput = QName.create("urn:opendaylight:params:xml:ns:yang:controller:md:sal:remote", "2014-01-14", "output");
74 final QName outputQname = QName.create("urn:opendaylight:params:xml:ns:yang:controller:md:sal:remote", "2014-01-14", "stream-name");
75 final LeafNode contentLeaf2 = Builders.leafBuilder()
76 .withNodeIdentifier(new YangInstanceIdentifier.NodeIdentifier(outputQname))
77 .withValue("toaster:toaster/toasterStatus/datastore=CONFIGURATION/scope=BASE")
79 final ContainerNode output = Builders.containerBuilder()
80 .withNodeIdentifier(new YangInstanceIdentifier.NodeIdentifier(rpcQnameOutput))
81 .withChild(contentLeaf2)
83 final InstanceIdentifierContext<RpcDefinition> iidContextResult = new InstanceIdentifierContext<>(null, rpcDef, null, contextRef.get());
84 final NormalizedNodeContext payloadResult = new NormalizedNodeContext(iidContextResult, output);
86 assertNotNull(context);
87 assertEquals(payloadResult.getData(), context.getData());
88 assertEquals(payloadResult.getInstanceIdentifierContext().getSchemaNode(),
89 context.getInstanceIdentifierContext().getSchemaNode());
90 assertEquals(payloadResult.getInstanceIdentifierContext().getSchemaContext(),
91 context.getInstanceIdentifierContext().getSchemaContext());
92 assertNull(context.getInstanceIdentifierContext().getMountPoint());
93 assertNull(context.getInstanceIdentifierContext().getInstanceIdentifier());