package org.opendaylight.netconf.sal.rest.doc.impl;
import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
import com.fasterxml.jackson.databind.JsonNode;
+import com.fasterxml.jackson.databind.node.ArrayNode;
+import com.fasterxml.jackson.databind.node.JsonNodeFactory;
import com.fasterxml.jackson.databind.node.ObjectNode;
import java.util.HashSet;
import java.util.Iterator;
var pathToList1 = "/rests/data/nodes/node=123/yang-ext:mount/path-params-test:cont/list1={name}";
assertTrue(mountPointApi.getPaths().has(pathToList1));
- assertEquals(List.of("name"), getPathParameters(mountPointApi.getPaths(), pathToList1));
+ assertEquals(List.of("name"), getPathGetParameters(mountPointApi.getPaths(), pathToList1));
var pathToList2 = "/rests/data/nodes/node=123/yang-ext:mount/path-params-test:cont/list1={name}/list2={name1}";
assertTrue(mountPointApi.getPaths().has(pathToList2));
- assertEquals(List.of("name", "name1"), getPathParameters(mountPointApi.getPaths(), pathToList2));
+ assertEquals(List.of("name", "name1"), getPathGetParameters(mountPointApi.getPaths(), pathToList2));
var pathToList3 = "/rests/data/nodes/node=123/yang-ext:mount/path-params-test:cont/list3={name}";
assertTrue(mountPointApi.getPaths().has(pathToList3));
- assertEquals(List.of("name"), getPathParameters(mountPointApi.getPaths(), pathToList3));
+ assertEquals(List.of("name"), getPathGetParameters(mountPointApi.getPaths(), pathToList3));
var pathToList4 = "/rests/data/nodes/node=123/yang-ext:mount/path-params-test:cont/list1={name}/list4={name1}";
assertTrue(mountPointApi.getPaths().has(pathToList4));
- assertEquals(List.of("name", "name1"), getPathParameters(mountPointApi.getPaths(), pathToList4));
+ assertEquals(List.of("name", "name1"), getPathGetParameters(mountPointApi.getPaths(), pathToList4));
var pathToList5 = "/rests/data/nodes/node=123/yang-ext:mount/path-params-test:cont/list1={name}/cont2";
assertTrue(mountPointApi.getPaths().has(pathToList5));
- assertEquals(List.of("name"), getPathParameters(mountPointApi.getPaths(), pathToList5));
+ assertEquals(List.of("name"), getPathGetParameters(mountPointApi.getPaths(), pathToList5));
+ }
+
+ /**
+ * Test that request parameters are correctly typed.
+ */
+ @Test
+ public void testParametersTypesForMountPointApi() throws Exception {
+ swagger.onMountPointCreated(INSTANCE_ID);
+ final var doc = (OpenApiObject) swagger.getMountPointApi(URI_INFO, 1L, Optional.empty(),
+ OAversion.V3_0);
+ final var pathToContainer = "/rests/data/nodes/node=123/yang-ext:mount/typed-params:typed/";
+ final var integerTypes = List.of("uint64", "uint32", "uint16", "uint8", "int64", "int32", "int16", "int8");
+ for (final var type: integerTypes) {
+ final var typeKey = type + "-key";
+ final var path = pathToContainer + type + "={" + typeKey + "}";
+ assertTrue(doc.getPaths().has(path));
+ assertEquals("integer", doc.getPaths().get(path).get("get").get("parameters").get(0).get("schema")
+ .get("type").textValue());
+ }
}
/**
final var pathWithParameters =
"/rests/operations/nodes/node=123/yang-ext:mount/action-types:list={name}/list-action";
assertTrue(mountPointApi.getPaths().has(pathWithParameters));
- assertEquals(List.of("name"), getPathParameters(mountPointApi.getPaths(), pathWithParameters));
+ assertEquals(List.of("name"), getPathPostParameters(mountPointApi.getPaths(), pathWithParameters));
final var pathWithoutParameters =
"/rests/operations/nodes/node=123/yang-ext:mount/action-types:multi-container/inner-container/action";
assertTrue(mountPointApi.getPaths().has(pathWithoutParameters));
- assertEquals(List.of(), getPathParameters(mountPointApi.getPaths(), pathWithoutParameters));
+ assertEquals(List.of(), getPathPostParameters(mountPointApi.getPaths(), pathWithoutParameters));
}
@Test
// 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() {
+ swagger.onMountPointCreated(INSTANCE_ID);
+ final OpenApiObject openApiToaster = (OpenApiObject) swagger.getMountPointApi(uriDeviceToaster, DEVICE_ID,
+ TOASTER, TOASTER_REVISION, OAversion.V3_0);
+ final var path = openApiToaster
+ .getPaths().get("/rests/operations/nodes/node=123/yang-ext:mount/toaster:cancel-toast");
+ assertNotNull(path);
+ final var post = path.get("post");
+ assertNotNull(post);
+ final var requestBody = post.get("requestBody");
+ assertNotNull(requestBody);
+ final var content = requestBody.get("content");
+ assertNotNull(content);
+ final var application = content.get("application/xml");
+ assertNotNull(application);
+ final var schema = application.get("schema");
+ assertNotNull(schema);
+ final var xml = schema.get("xml");
+ assertNotNull(xml);
+ final var namespace = xml.get("namespace");
+ assertNotNull(namespace);
+ assertEquals("http://netconfcentral.org/ns/toaster", namespace.asText());
+ }
+
+ /**
+ * Test that checks if namespace for actions is present.
+ */
+ @Test
+ public void testActionsNamespace() {
+ swagger.onMountPointCreated(INSTANCE_ID);
+ final var openApiAll = (OpenApiObject) swagger.getMountPointApi(uriDeviceAll, DEVICE_ID,
+ Optional.empty(), OAversion.V3_0);
+ final var path = openApiAll.getPaths().get(
+ "/rests/operations/nodes/node=123/yang-ext:mount/action-types:multi-container/inner-container/action");
+ assertNotNull(path);
+ final var post = path.get("post");
+ assertNotNull(post);
+ final var requestBody = post.get("requestBody");
+ assertNotNull(requestBody);
+ final var content = requestBody.get("content");
+ assertNotNull(content);
+ final var application = content.get("application/xml");
+ assertNotNull(application);
+ final var schema = application.get("schema");
+ assertNotNull(schema);
+ final var xml = schema.get("xml");
+ assertNotNull(xml);
+ final var namespace = xml.get("namespace");
+ assertNotNull(namespace);
+ assertEquals("urn:ietf:params:xml:ns:yang:test:action:types", namespace.asText());
+ }
+
+ /**
+ * Test that number of elements in payload is correct.
+ */
+ @SuppressWarnings("unchecked")
+ @Test
+ public void testLeafListWithMinElementsPayloadOnMountPoint() {
+ swagger.onMountPointCreated(INSTANCE_ID);
+ final var mountPointApi = (OpenApiObject) swagger.getMountPointApi(uriDeviceAll, 1L, Optional.empty(),
+ OAversion.V3_0);
+ assertNotNull(mountPointApi);
+ final var paths = mountPointApi.getPaths();
+ final var path =
+ paths.path("/rests/data/nodes/node=123/yang-ext:mount/mandatory-test:root-container/mandatory-container");
+ final var requestBody = path.path("post").path("requestBody").path("content");
+ final var jsonRef = requestBody.path("application/json").path("schema").path("$ref");
+ final var xmlRef = requestBody.path("application/xml").path("schema").path("$ref");
+ final var schema =
+ mountPointApi.getComponents().getSchemas().path("mandatory-test_root-container_mandatory-container");
+ final var minItems = schema.path("properties").path("leaf-list-with-min-elements").path("minItems");
+ final var listOfExamples = ((ArrayNode) schema.path("properties").path("leaf-list-with-min-elements")
+ .path("example"));
+ final var expectedListOfExamples = JsonNodeFactory.instance.arrayNode()
+ .add("Some leaf-list-with-min-elements")
+ .add("Some leaf-list-with-min-elements");
+ assertFalse(listOfExamples.isMissingNode());
+ assertEquals(jsonRef, xmlRef);
+ assertEquals(2, minItems.intValue());
+ assertEquals(expectedListOfExamples, listOfExamples);
+ }
}