From c071cca8814ea78b05ca45defa6d74ed5a2c4029 Mon Sep 17 00:00:00 2001 From: Peter Suna Date: Wed, 20 Apr 2022 15:10:07 +0200 Subject: [PATCH 1/1] Fix docgen for action types When we are processing actions we need to adjust the stack to enter each of them for the duration of traversal. Also add the corresponding test. JIRA: NETCONF-872 Change-Id: I5aae78380073c4d5c876b888b22cd41a2657db2d Signed-off-by: Peter Suna Signed-off-by: Robert Varga --- .../rest/doc/impl/DefinitionGenerator.java | 2 + .../sal/rest/doc/impl/SwaggerObjectTest.java | 10 ++++ .../src/test/resources/yang/action-types.yang | 50 +++++++++++++++++++ 3 files changed, 62 insertions(+) create mode 100644 restconf/sal-rest-docgen/src/test/resources/yang/action-types.yang diff --git a/restconf/sal-rest-docgen/src/main/java/org/opendaylight/netconf/sal/rest/doc/impl/DefinitionGenerator.java b/restconf/sal-rest-docgen/src/main/java/org/opendaylight/netconf/sal/rest/doc/impl/DefinitionGenerator.java index f7817c0daf..bd2ef8e83a 100644 --- a/restconf/sal-rest-docgen/src/main/java/org/opendaylight/netconf/sal/rest/doc/impl/DefinitionGenerator.java +++ b/restconf/sal-rest-docgen/src/main/java/org/opendaylight/netconf/sal/rest/doc/impl/DefinitionGenerator.java @@ -257,7 +257,9 @@ public class DefinitionGenerator { final SchemaInferenceStack stack, final OAversion oaversion) throws IOException { for (final ActionDefinition actionDef : ((ActionNodeContainer) childNode).getActions()) { + stack.enterSchemaTree(actionDef.getQName()); processOperations(actionDef, moduleName, definitions, definitionNames, stack, oaversion); + stack.exit(); } } diff --git a/restconf/sal-rest-docgen/src/test/java/org/opendaylight/controller/sal/rest/doc/impl/SwaggerObjectTest.java b/restconf/sal-rest-docgen/src/test/java/org/opendaylight/controller/sal/rest/doc/impl/SwaggerObjectTest.java index 889606d7e6..f37b8ee692 100644 --- a/restconf/sal-rest-docgen/src/test/java/org/opendaylight/controller/sal/rest/doc/impl/SwaggerObjectTest.java +++ b/restconf/sal-rest-docgen/src/test/java/org/opendaylight/controller/sal/rest/doc/impl/SwaggerObjectTest.java @@ -40,6 +40,16 @@ public final class SwaggerObjectTest { Assert.assertNotNull(jsonObject); } + @Test + public void testActionTypes() throws Exception { + final Optional module = context.findModule("action-types"); + assertTrue("Desired module not found", module.isPresent()); + final DefinitionGenerator generator = new DefinitionGenerator(); + final ObjectNode jsonObject = generator.convertToJsonSchema(module.get(), context, + new DefinitionNames(), ApiDocServiceImpl.OAversion.V2_0, true); + Assert.assertNotNull(jsonObject); + } + @Test public void testStringTypes() throws Exception { final Optional module = context.findModule("string-types"); diff --git a/restconf/sal-rest-docgen/src/test/resources/yang/action-types.yang b/restconf/sal-rest-docgen/src/test/resources/yang/action-types.yang new file mode 100644 index 0000000000..4d6d316e3e --- /dev/null +++ b/restconf/sal-rest-docgen/src/test/resources/yang/action-types.yang @@ -0,0 +1,50 @@ +module action-types { + yang-version 1.1; + namespace "urn:ietf:params:xml:ns:yang:test:action:types"; + prefix "act-tp"; + + list list { + key name; + leaf name { + type string; + } + action list-action { + input { + leaf la-input { + type string; + mandatory true; + } + } + output { + leaf la-output { + type string; + mandatory true; + } + } + } + } + + container container { + action container-action { + input { + leaf ca-input { + type string; + mandatory true; + } + } + output { + leaf ca-output { + type string; + mandatory true; + } + } + } + } + + container multi-container { + container inner-container { + action action { + } + } + } +} -- 2.36.6