XML payload for RPCs is missing namespace.
Add namespace parameter to schema builder.
Add test to check if namespace is present.
Edit expected outcome from affected tests.
JIRA: NETCONF-1139
Change-Id: I17b99e0afa6acdcac98a63baef625c671a6ce29e
Signed-off-by: Matej Sramcik <matej.sramcik@pantheon.tech>
final Schema.Builder childSchemaBuilder = new Schema.Builder()
.title(filename)
.type(OBJECT_TYPE)
- .xml(new Xml(isInput ? INPUT : OUTPUT, null, null));
+ .xml(new Xml(isInput ? INPUT : OUTPUT, container.getQName().getNamespace().toString(), null));
processChildren(childSchemaBuilder, container.getChildNodes(), parentName, definitions, definitionNames,
stack, module, false);
final String discriminator =
final SimpleEntry<String, MediaTypeObject> jsonEntry = new SimpleEntry<>(MediaType.APPLICATION_JSON,
jsonTypeValue);
- final Xml xml = new Xml(INPUT_KEY, null, null);
+ final Xml xml = new Xml(INPUT_KEY, input.getQName().getNamespace().toString(), null);
final Schema xmlSchema = new Schema.Builder()
.type(OBJECT)
.xml(xml)
assertEquals("0000-00-00T00:00:00Z", properties.get("login-date-time").example().toString());
assertEquals("0.0.0.0", properties.get("ipv4-address").example().toString());
}
+
+ /**
+ * Test that checks if namespace for rpc is present.
+ */
+ @Test
+ public void testRpcNamespace() throws Exception {
+ final var module = context.findModule("toaster", Revision.of("2009-11-20")).orElseThrow();
+ final var jsonObject = DefinitionGenerator.convertToSchemas(module, context, new DefinitionNames(), true);
+ assertNotNull(jsonObject);
+ final var schema = jsonObject.get("toaster_make-toast_input");
+ assertNotNull(schema);
+ final var xml = schema.xml();
+ assertNotNull(xml);
+ final var namespace = xml.namespace();
+ assertNotNull(namespace);
+ assertEquals("http://netconfcentral.org/ns/toaster", namespace);
+ }
+
+ /**
+ * Test that checks if namespace for actions is present.
+ */
+ @Test
+ public void testActionsNamespace() throws IOException {
+ final var module = context.findModule("action-types").orElseThrow();
+ final var jsonObject = DefinitionGenerator.convertToSchemas(module, context, new DefinitionNames(), true);
+ assertNotNull(jsonObject);
+ final var schema = jsonObject.get("action-types_container-action_input");
+ assertNotNull(schema);
+ final var xml = schema.xml();
+ assertNotNull(xml);
+ final var namespace = xml.namespace();
+ assertNotNull(namespace);
+ assertEquals("urn:ietf:params:xml:ns:yang:test:action:types", namespace);
+ }
}
}
}
+ /**
+ * Test that checks if namespace for rpc is present.
+ */
+ @Test
+ public void testRpcNamespace() {
+ final var doc = generator.getApiDeclaration("toaster", "2009-11-20", uriInfo);
+ assertNotNull("Failed to find Datastore API", doc);
+ final var paths = doc.paths();
+ final var path = paths.get("/rests/operations/toaster:cancel-toast");
+ assertNotNull(path);
+ final var content = path.post().requestBody().content().get("application/xml");
+ assertNotNull(content);
+ final var schema = content.schema();
+ assertNotNull(schema);
+ final var xml = schema.xml();
+ assertNotNull(xml);
+ final var namespace = xml.namespace();
+ assertNotNull(namespace);
+ assertEquals("http://netconfcentral.org/ns/toaster", namespace);
+ }
+
+ /**
+ * Test that checks if namespace for actions is present.
+ */
+ @Test
+ public void testActionsNamespace() {
+ final var doc = generator.getApiDeclaration("action-types", null, uriInfo);
+ assertNotNull("Failed to find Datastore API", doc);
+ final var paths = doc.paths();
+ final var path = paths.get("/rests/operations/action-types:multi-container/inner-container/action");
+ assertNotNull(path);
+ final var content = path.post().requestBody().content().get("application/xml");
+ assertNotNull(content);
+ final var schema = content.schema();
+ assertNotNull(schema);
+ final var xml = schema.xml();
+ assertNotNull(xml);
+ final var namespace = xml.namespace();
+ assertNotNull(namespace);
+ assertEquals("urn:ietf:params:xml:ns:yang:test:action:types", namespace);
+ }
+
/**
* Test JSON and XML references for request operation.
*/
// verify that the filtered set (from openapi for all modules) is the same as the set from openapi for toaster
assertEquals(toasterPathsFromToaster, toasterPathsFromAll);
}
+
+ /**
+ * Test that checks if namespace for rpc is present.
+ */
+ @Test
+ public void testRpcNamespace() throws Exception {
+ final var mockInfo = DocGenTestHelper.createMockUriInfo(HTTP_URL);
+ openApi.onMountPointCreated(INSTANCE_ID);
+
+ final var mountPointApi = openApi.getMountPointApi(mockInfo, 1L, null);
+ assertNotNull("Failed to find Datastore API", mountPointApi);
+ final var paths = mountPointApi.paths();
+ final var path = paths.get("/rests/operations/nodes/node=123/yang-ext:mount/toaster:cancel-toast");
+ assertNotNull(path);
+ final var content = path.post().requestBody().content().get("application/xml");
+ assertNotNull(content);
+ final var schema = content.schema();
+ assertNotNull(schema);
+ final var xml = schema.xml();
+ assertNotNull(xml);
+ final var namespace = xml.namespace();
+ assertNotNull(namespace);
+ assertEquals("http://netconfcentral.org/ns/toaster", namespace);
+ }
+
+ /**
+ * Test that checks if namespace for actions is present.
+ */
+ @Test
+ public void testActionsNamespace() throws Exception {
+ final var mockInfo = DocGenTestHelper.createMockUriInfo(HTTP_URL);
+ openApi.onMountPointCreated(INSTANCE_ID);
+ final var mountPointApi = openApi.getMountPointApi(mockInfo, 1L, null);
+ assertNotNull("Failed to find Datastore API", mountPointApi);
+ final var paths = mountPointApi.paths();
+ final var path = paths.get(
+ "/rests/operations/nodes/node=123/yang-ext:mount/action-types:multi-container/inner-container/action");
+ assertNotNull(path);
+ final var content = path.post().requestBody().content().get("application/xml");
+ assertNotNull(content);
+ final var schema = content.schema();
+ assertNotNull(schema);
+ final var xml = schema.xml();
+ assertNotNull(xml);
+ final var namespace = xml.namespace();
+ assertNotNull(namespace);
+ assertEquals("urn:ietf:params:xml:ns:yang:test:action:types", namespace);
+ }
}
"application/xml": {
"schema": {
"xml": {
- "name": "input"
+ "name": "input",
+ "namespace": "http://netconfcentral.org/ns/toaster"
},
"type": "object"
}
}
},
"xml": {
- "name": "input"
+ "name": "input",
+ "namespace": "http://netconfcentral.org/ns/toaster"
},
"title": "toaster_make-toast_input",
"type": "object"
}
},
"xml": {
- "name": "input"
+ "name": "input",
+ "namespace": "http://netconfcentral.org/ns/toaster"
},
"title": "toaster_restock-toaster_input",
"type": "object"
"application/xml": {
"schema": {
"xml": {
- "name": "input"
+ "name": "input",
+ "namespace": "http://netconfcentral.org/ns/toaster"
},
"type": "object"
}
}
},
"xml": {
- "name": "input"
+ "name": "input",
+ "namespace": "http://netconfcentral.org/ns/toaster"
},
"title": "toaster_make-toast_input",
"type": "object"
}
},
"xml": {
- "name": "input"
+ "name": "input",
+ "namespace": "http://netconfcentral.org/ns/toaster"
},
"title": "toaster_restock-toaster_input",
"type": "object"
"application/xml": {
"schema": {
"xml": {
- "name": "input"
+ "name": "input",
+ "namespace": "http://netconfcentral.org/ns/toaster"
},
"type": "object"
}
}
},
"xml": {
- "name": "input"
+ "name": "input",
+ "namespace": "http://netconfcentral.org/ns/toaster"
},
"title": "toaster_make-toast_input",
"type": "object"
}
},
"xml": {
- "name": "input"
+ "name": "input",
+ "namespace": "http://netconfcentral.org/ns/toaster"
},
"title": "toaster_restock-toaster_input",
"type": "object"
"application/xml": {
"schema": {
"xml": {
- "name": "input"
+ "name": "input",
+ "namespace": "http://netconfcentral.org/ns/toaster"
},
"type": "object"
}
}
},
"xml": {
- "name": "input"
+ "name": "input",
+ "namespace": "http://netconfcentral.org/ns/toaster"
},
"title": "toaster_make-toast_input",
"type": "object"
}
},
"xml": {
- "name": "input"
+ "name": "input",
+ "namespace": "http://netconfcentral.org/ns/toaster"
},
"title": "toaster_restock-toaster_input",
"type": "object"