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
8 package org.opendaylight.yangtools.yang.stmt;
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;
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;
24 class RpcStmtTest extends AbstractYangTest {
27 final var result = assertEffectiveModel("/model/baz.yang", "/model/bar.yang", "/rpc-stmt-test/foo.yang");
29 final var testModule = result.findModules("baz").iterator().next();
30 assertEquals(1, testModule.getRpcs().size());
32 final var rpc = testModule.getRpcs().iterator().next();
33 assertEquals("get-config", rpc.getQName().getLocalName());
35 final var input = rpc.getInput();
36 assertEquals(2, input.getChildNodes().size());
38 assertInstanceOf(ContainerSchemaNode.class,
39 input.getDataChildByName(QName.create(testModule.getQNameModule(), "source")));
40 assertInstanceOf(AnyxmlSchemaNode.class,
41 input.getDataChildByName(QName.create(testModule.getQNameModule(), "filter")));
43 final var output = rpc.getOutput();
44 assertNotNull(output);
45 assertEquals(1, output.getChildNodes().size());
47 assertInstanceOf(AnyxmlSchemaNode.class,
48 output.getDataChildByName(QName.create(testModule.getQNameModule(), "data")));
50 final var fooModule = result.findModule("foo", Revision.of("2016-09-23")).orElseThrow();
51 final var rpcs = fooModule.getRpcs();
52 assertEquals(2, rpcs.size());
54 RpcDefinition fooRpc1 = null;
55 RpcDefinition fooRpc2 = null;
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;
65 assertNotEquals(null, fooRpc1);
66 assertNotEquals("str", fooRpc1);
67 assertNotEquals(fooRpc1, fooRpc2);
69 assertNotEquals(fooRpc1.getInput().hashCode(), fooRpc2.getInput().hashCode());
70 assertNotEquals(fooRpc1.getOutput().hashCode(), fooRpc2.getOutput().hashCode());
72 assertEquals(fooRpc1.getInput(), fooRpc1.getInput());
73 assertNotEquals(null, fooRpc1.getInput());
74 assertNotEquals("str", fooRpc1.getInput());
75 assertNotEquals(fooRpc1.getInput(), fooRpc2.getInput());
77 assertEquals(fooRpc1.getOutput(), fooRpc1.getOutput());
78 assertNotEquals(null, fooRpc1.getOutput());
79 assertNotEquals("str", fooRpc1.getOutput());
80 assertNotEquals(fooRpc1.getOutput(), fooRpc2.getOutput());
84 void testImplicitInputAndOutput() {
85 final var context = assertEffectiveModel("/rpc-stmt-test/bar.yang");
87 final var barModule = context.findModule("bar", Revision.of("2016-11-25")).orElseThrow();
88 final var rpcs = barModule.getRpcs();
89 assertEquals(1, rpcs.size());
91 final var barRpc = rpcs.iterator().next();
93 final var input = barRpc.getInput();
94 assertEquals(2, input.getChildNodes().size());
95 assertEquals(StatementOrigin.CONTEXT, ((EffectiveStatement<?, ?>) input).statementOrigin());
97 final var output = barRpc.getOutput();
98 assertEquals(2, output.getChildNodes().size());
99 assertEquals(StatementOrigin.CONTEXT, ((EffectiveStatement<?, ?>) output).statementOrigin());