Unit test for RestconfInvokeOperationsServiceImpl class
[netconf.git] / restconf / sal-rest-connector / src / test / java / org / opendaylight / restconf / restful / services / impl / RestconfInvokeOperationsServiceImplTest.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.services.impl;
10
11 import static org.junit.Assert.assertEquals;
12 import static org.junit.Assert.assertNotNull;
13 import static org.junit.Assert.assertNull;
14
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;
28
29 public class RestconfInvokeOperationsServiceImplTest {
30
31     private static final String PATH_FOR_NEW_SCHEMA_CONTEXT = "/streams";
32
33     @Test
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);
39
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()
45                 .node(rpcQnameInput)
46                 .build();
47         final YangInstanceIdentifier iidAsLeafValue = YangInstanceIdentifier.builder()
48                 .node(qname1)
49                 .node(qname)
50                 .build();
51
52         final LeafNode contentLeaf = Builders.leafBuilder()
53                 .withNodeIdentifier(new YangInstanceIdentifier.NodeIdentifier(inputQname))
54                 .withValue(iidAsLeafValue)
55                 .build();
56         final ContainerNode input = Builders.containerBuilder()
57                 .withNodeIdentifier(new YangInstanceIdentifier.NodeIdentifier(rpcQnameInput))
58                 .withChild(contentLeaf)
59                 .build();
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())) {
65                 break;
66             }
67         }
68
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);
72
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")
78                 .build();
79         final ContainerNode output = Builders.containerBuilder()
80                 .withNodeIdentifier(new YangInstanceIdentifier.NodeIdentifier(rpcQnameOutput))
81                 .withChild(contentLeaf2)
82                 .build();
83         final InstanceIdentifierContext<RpcDefinition> iidContextResult = new InstanceIdentifierContext<>(null, rpcDef, null, contextRef.get());
84         final NormalizedNodeContext payloadResult = new NormalizedNodeContext(iidContextResult, output);
85
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());
94     }
95
96 }