Introduce yangtools.binding.meta
[yangtools.git] / parser / yang-parser-rfc7950 / src / test / java / org / opendaylight / yangtools / yang / stmt / RpcStmtTest.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.yangtools.yang.stmt;
9
10 import static org.junit.jupiter.api.Assertions.assertEquals;
11 import static org.junit.jupiter.api.Assertions.assertInstanceOf;
12 import static org.junit.jupiter.api.Assertions.assertNotEquals;
13 import static org.junit.jupiter.api.Assertions.assertNotNull;
14
15 import org.junit.jupiter.api.Test;
16 import org.opendaylight.yangtools.yang.common.QName;
17 import org.opendaylight.yangtools.yang.common.Revision;
18 import org.opendaylight.yangtools.yang.model.api.AnyxmlSchemaNode;
19 import org.opendaylight.yangtools.yang.model.api.ContainerSchemaNode;
20 import org.opendaylight.yangtools.yang.model.api.RpcDefinition;
21 import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement;
22 import org.opendaylight.yangtools.yang.model.api.meta.StatementOrigin;
23
24 class RpcStmtTest extends AbstractYangTest {
25     @Test
26     void rpcTest() {
27         final var result = assertEffectiveModel("/model/baz.yang", "/model/bar.yang", "/rpc-stmt-test/foo.yang");
28
29         final var testModule = result.findModules("baz").iterator().next();
30         assertEquals(1, testModule.getRpcs().size());
31
32         final var rpc = testModule.getRpcs().iterator().next();
33         assertEquals("get-config", rpc.getQName().getLocalName());
34
35         final var input = rpc.getInput();
36         assertEquals(2, input.getChildNodes().size());
37
38         assertInstanceOf(ContainerSchemaNode.class,
39             input.getDataChildByName(QName.create(testModule.getQNameModule(), "source")));
40         assertInstanceOf(AnyxmlSchemaNode.class,
41             input.getDataChildByName(QName.create(testModule.getQNameModule(), "filter")));
42
43         final var output = rpc.getOutput();
44         assertNotNull(output);
45         assertEquals(1, output.getChildNodes().size());
46
47         assertInstanceOf(AnyxmlSchemaNode.class,
48             output.getDataChildByName(QName.create(testModule.getQNameModule(), "data")));
49
50         final var fooModule = result.findModule("foo", Revision.of("2016-09-23")).orElseThrow();
51         final var rpcs = fooModule.getRpcs();
52         assertEquals(2, rpcs.size());
53
54         RpcDefinition fooRpc1 = null;
55         RpcDefinition fooRpc2 = null;
56
57         for (var rpcDefinition : rpcs) {
58             if ("foo-rpc-1".equals(rpcDefinition.getQName().getLocalName())) {
59                 fooRpc1 = rpcDefinition;
60             } else if ("foo-rpc-2".equals(rpcDefinition.getQName().getLocalName())) {
61                 fooRpc2 = rpcDefinition;
62             }
63         }
64
65         assertNotEquals(null, fooRpc1);
66         assertNotEquals("str", fooRpc1);
67         assertNotEquals(fooRpc1, fooRpc2);
68
69         assertNotEquals(fooRpc1.getInput().hashCode(), fooRpc2.getInput().hashCode());
70         assertNotEquals(fooRpc1.getOutput().hashCode(), fooRpc2.getOutput().hashCode());
71
72         assertEquals(fooRpc1.getInput(), fooRpc1.getInput());
73         assertNotEquals(null, fooRpc1.getInput());
74         assertNotEquals("str", fooRpc1.getInput());
75         assertNotEquals(fooRpc1.getInput(), fooRpc2.getInput());
76
77         assertEquals(fooRpc1.getOutput(), fooRpc1.getOutput());
78         assertNotEquals(null, fooRpc1.getOutput());
79         assertNotEquals("str", fooRpc1.getOutput());
80         assertNotEquals(fooRpc1.getOutput(), fooRpc2.getOutput());
81     }
82
83     @Test
84     void testImplicitInputAndOutput() {
85         final var context = assertEffectiveModel("/rpc-stmt-test/bar.yang");
86
87         final var barModule = context.findModule("bar", Revision.of("2016-11-25")).orElseThrow();
88         final var rpcs = barModule.getRpcs();
89         assertEquals(1, rpcs.size());
90
91         final var barRpc = rpcs.iterator().next();
92
93         final var input = barRpc.getInput();
94         assertEquals(2, input.getChildNodes().size());
95         assertEquals(StatementOrigin.CONTEXT, ((EffectiveStatement<?, ?>) input).statementOrigin());
96
97         final var output = barRpc.getOutput();
98         assertEquals(2, output.getChildNodes().size());
99         assertEquals(StatementOrigin.CONTEXT, ((EffectiveStatement<?, ?>) output).statementOrigin());
100     }
101 }