import java.util.SortedSet;
import java.util.TreeSet;
import javax.ws.rs.core.UriInfo;
+import org.eclipse.jdt.annotation.NonNull;
import org.opendaylight.mdsal.dom.api.DOMSchemaService;
import org.opendaylight.netconf.sal.rest.doc.impl.ApiDocServiceImpl.OAversion;
import org.opendaylight.netconf.sal.rest.doc.swagger.CommonApiObject;
LOG.debug("Working on [{},{}]...", module.getName(), revisionString);
final SwaggerObject doc = getApiDeclaration(module.getName(), revisionString, uriInfo, schemaContext,
- context, oaversion);
+ context, "All Modules", oaversion);
if (doc != null) {
count++;
if (count >= start && count < end || all) {
final OAversion oaversion) {
final EffectiveModelContext schemaContext = schemaService.getGlobalContext();
Preconditions.checkState(schemaContext != null);
- final SwaggerObject doc = getApiDeclaration(module, revision, uriInfo, schemaContext, "", oaversion);
+ final SwaggerObject doc = getApiDeclaration(module, revision, uriInfo, schemaContext, "", "Controller",
+ oaversion);
return getAppropriateDoc(doc, oaversion);
}
public SwaggerObject getApiDeclaration(final String moduleName, final String revision, final UriInfo uriInfo,
final EffectiveModelContext schemaContext, final String context,
- final OAversion oaversion) {
+ final @NonNull String deviceName, final OAversion oaversion) {
final Optional<Revision> rev;
try {
Preconditions.checkArgument(module != null,
"Could not find module by name,revision: " + moduleName + "," + revision);
- return getApiDeclaration(module, uriInfo, context, schemaContext, oaversion);
+ return getApiDeclaration(module, uriInfo, context, schemaContext, deviceName, oaversion);
}
- public SwaggerObject getApiDeclaration(final Module module, final UriInfo uriInfo, final String context,
- final EffectiveModelContext schemaContext, final OAversion oaversion) {
+ private SwaggerObject getApiDeclaration(final Module module, final UriInfo uriInfo, final String context,
+ final EffectiveModelContext schemaContext, final String deviceName,
+ final OAversion oaversion) {
final String schema = createSchemaFromUriInfo(uriInfo);
final String host = createHostFromUriInfo(uriInfo);
- return getSwaggerDocSpec(module, schema, host, BASE_PATH, context, schemaContext, oaversion);
+ return getSwaggerDocSpec(module, schema, host, BASE_PATH, context, deviceName, schemaContext, oaversion);
}
public String createHostFromUriInfo(final UriInfo uriInfo) {
public SwaggerObject getSwaggerDocSpec(final Module module, final String schema, final String host,
final String basePath, final String context,
- final EffectiveModelContext schemaContext, final OAversion oaversion) {
+ final @NonNull String deviceName, final EffectiveModelContext schemaContext,
+ final OAversion oaversion) {
final SwaggerObject doc = createSwaggerObject(schema, host, basePath, module.getName());
final DefinitionNames definitionNames = new DefinitionNames();
- return getSwaggerDocSpec(module, context, Optional.empty(), schemaContext, oaversion, definitionNames, doc,
- true);
+ return getSwaggerDocSpec(module, context, Optional.of(deviceName), schemaContext, oaversion, definitionNames,
+ doc, true);
}
return generateDataStoreApiDoc(uriInfo, urlPrefix, deviceName);
}
final SwaggerObject swaggerObject = swaggerGenerator.getApiDeclaration(module, revision, uriInfo, context,
- urlPrefix, oaversion);
+ urlPrefix, deviceName, oaversion);
return BaseYangSwaggerGenerator.getAppropriateDoc(swaggerObject, oaversion);
}
import com.fasterxml.jackson.databind.node.ObjectNode;
import java.util.ArrayList;
import java.util.List;
+import javax.ws.rs.core.UriInfo;
import org.junit.BeforeClass;
import org.opendaylight.mdsal.dom.api.DOMSchemaService;
import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext;
public abstract class AbstractApiDocTest {
static EffectiveModelContext CONTEXT;
static DOMSchemaService SCHEMA_SERVICE;
+ static UriInfo URI_INFO;
@BeforeClass
- public static void beforeClass() {
+ public static void beforeClass() throws Exception {
CONTEXT = YangParserTestUtils.parseYangResourceDirectory("/yang");
SCHEMA_SERVICE = mock(DOMSchemaService.class);
when(SCHEMA_SERVICE.getGlobalContext()).thenReturn(CONTEXT);
+ URI_INFO = DocGenTestHelper.createMockUriInfo("http://localhost/path");
}
protected static List<String> getPathParameters(final ObjectNode paths, final String path) {
import java.util.stream.Collectors;
import java.util.stream.StreamSupport;
import org.junit.Test;
+import org.opendaylight.netconf.sal.rest.doc.swagger.OpenApiObject;
import org.opendaylight.netconf.sal.rest.doc.swagger.SwaggerObject;
-import org.opendaylight.yangtools.yang.common.Revision;
public final class ApiDocGeneratorRFC8040Test extends AbstractApiDocTest {
private static final String NAME = "toaster2";
*/
@Test
public void testPaths() {
- final var module = CONTEXT.findModule(NAME, Revision.of(REVISION_DATE)).orElseThrow();
- final SwaggerObject doc = generator.getSwaggerDocSpec(module, "http", "localhost:8181", "/", "", CONTEXT,
+ final SwaggerObject doc = (SwaggerObject) generator.getApiDeclaration(NAME, REVISION_DATE, URI_INFO,
ApiDocServiceImpl.OAversion.V2_0);
assertEquals(List.of("/rests/data",
"/rests/data/toaster2:lst/cont1/lst11",
"/rests/data/toaster2:lst/lst1={key1},{key2}");
- final var module = CONTEXT.findModule(NAME, Revision.of(REVISION_DATE)).orElseThrow();
- final SwaggerObject doc = generator.getSwaggerDocSpec(module, "http", "localhost:8181", "/", "", CONTEXT,
+ final SwaggerObject doc = (SwaggerObject) generator.getApiDeclaration(NAME, REVISION_DATE, URI_INFO,
ApiDocServiceImpl.OAversion.V2_0);
for (final String path : configPaths) {
*/
@Test
public void testDefinitions() {
- final var module = CONTEXT.findModule(NAME, Revision.of(REVISION_DATE)).orElseThrow();
- final SwaggerObject doc = generator.getSwaggerDocSpec(module, "http", "localhost:8181", "/", "", CONTEXT,
+ final SwaggerObject doc = (SwaggerObject) generator.getApiDeclaration(NAME, REVISION_DATE, URI_INFO,
ApiDocServiceImpl.OAversion.V2_0);
final ObjectNode definitions = doc.getDefinitions();
*/
@Test
public void testRPC() {
- final var module = CONTEXT.findModule(NAME_2, Revision.of(REVISION_DATE_2)).orElseThrow();
- final SwaggerObject doc = generator.getSwaggerDocSpec(module, "http", "localhost:8181", "/", "", CONTEXT,
+ final SwaggerObject doc = (SwaggerObject) generator.getApiDeclaration(NAME_2, REVISION_DATE_2, URI_INFO,
ApiDocServiceImpl.OAversion.V2_0);
assertNotNull(doc);
@Test
public void testMandatory() {
- final var module = CONTEXT.findModule(MANDATORY_TEST).orElseThrow();
- final var doc = generator.getSwaggerDocSpec(module, "http", "localhost:8181", "/", "", CONTEXT,
- ApiDocServiceImpl.OAversion.V3_0);
+ final var doc = (OpenApiObject) generator.getApiDeclaration(MANDATORY_TEST, null, URI_INFO,
+ ApiDocServiceImpl.OAversion.V3_0);
assertNotNull(doc);
- final var definitions = doc.getDefinitions();
+ final var definitions = doc.getComponents().getSchemas();
final var containersWithRequired = new ArrayList<String>();
final var reqRootContainerElements = Set.of("mandatory-root-leaf", "mandatory-container",
*/
@Test
public void testParametersNumbering() {
- final var module = CONTEXT.findModule(PATH_PARAMS_TEST_MODULE).orElseThrow();
- final var doc = generator.getSwaggerDocSpec(module, "http", "localhost:8181", "/", "", CONTEXT,
- ApiDocServiceImpl.OAversion.V3_0);
+ final var doc = (OpenApiObject) generator.getApiDeclaration(PATH_PARAMS_TEST_MODULE, null, URI_INFO,
+ ApiDocServiceImpl.OAversion.V3_0);
var pathToList1 = "/rests/data/path-params-test:cont/list1={name}";
assertTrue(doc.getPaths().has(pathToList1));
*/
@Test
public void testActionPathsParams() {
- final var module = CONTEXT.findModule("action-types").orElseThrow();
- final var doc = generator.getSwaggerDocSpec(module, "http", "localhost:8181", "/", "", CONTEXT,
+ final var doc = (OpenApiObject) generator.getApiDeclaration("action-types", null, URI_INFO,
ApiDocServiceImpl.OAversion.V3_0);
final var pathWithParameters = "/rests/operations/action-types:list={name}/list-action";
@Test
public void testChoice() {
- final var module = CONTEXT.findModule(CHOICE_TEST_MODULE).orElseThrow();
- final var doc = generator.getSwaggerDocSpec(module, "http", "localhost:8181", "/", "", CONTEXT,
- ApiDocServiceImpl.OAversion.V2_0);
+ final var doc = (SwaggerObject) generator.getApiDeclaration(CHOICE_TEST_MODULE, null, URI_INFO,
+ ApiDocServiceImpl.OAversion.V2_0);
assertNotNull(doc);
final var definitions = doc.getDefinitions();
@Test
public void testSimpleOpenApiObjects() {
- final var module = CONTEXT.findModule(MY_YANG, Revision.of(MY_YANG_REVISION)).orElseThrow();
- final var doc = generator.getSwaggerDocSpec(module, "http", "localhost:8181", "/", "",
- CONTEXT,ApiDocServiceImpl.OAversion.V3_0);
+ final var doc = (OpenApiObject) generator.getApiDeclaration(MY_YANG, MY_YANG_REVISION, URI_INFO,
+ ApiDocServiceImpl.OAversion.V3_0);
assertEquals(List.of("/rests/data", "/rests/data/my-yang:data"),
ImmutableList.copyOf(doc.getPaths().fieldNames()));
"#/components/schemas/my-yang_data");
// Test `components/schemas` objects
- final var definitions = doc.getDefinitions();
+ final var definitions = doc.getComponents().getSchemas();
assertEquals(7, definitions.size());
assertTrue(definitions.has("my-yang_config_data"));
assertTrue(definitions.has("my-yang_config_data_post"));
@Test
public void testToaster2OpenApiObjects() {
- final var module = CONTEXT.findModule(NAME, Revision.of(REVISION_DATE)).orElseThrow();
- final var doc = generator.getSwaggerDocSpec(module, "http", "localhost:8181", "/", "", CONTEXT,
- ApiDocServiceImpl.OAversion.V3_0);
+ final var doc = (OpenApiObject) generator.getApiDeclaration(NAME, REVISION_DATE, URI_INFO,
+ ApiDocServiceImpl.OAversion.V3_0);
final var jsonNodeToaster = doc.getPaths().get("/rests/data/toaster2:toaster");
verifyRequestRef(jsonNodeToaster.path("post"), "#/components/schemas/toaster2_config_toaster_post",
"#/components/schemas/toaster2_config_toaster_post_xml");
assertNull(xmlSchema.get("$ref"));
assertEquals(2, xmlSchema.size());
// Test `components/schemas` objects
- final var definitions = doc.getDefinitions();
+ final var definitions = doc.getComponents().getSchemas();
assertEquals(60, definitions.size());
}
import java.util.Optional;
import java.util.Set;
import java.util.TreeSet;
-import javax.ws.rs.core.UriInfo;
import org.junit.Before;
import org.junit.Test;
import org.opendaylight.mdsal.dom.api.DOMMountPoint;
import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
public final class MountPointSwaggerTest extends AbstractApiDocTest {
- private static final String HTTP_URL = "http://localhost/path";
private static final YangInstanceIdentifier INSTANCE_ID = YangInstanceIdentifier.builder()
.node(QName.create("", "nodes"))
.node(QName.create("", "node"))
}
@Test
- public void testGetDataStoreApi() throws Exception {
- final UriInfo mockInfo = DocGenTestHelper.createMockUriInfo(HTTP_URL);
+ public void testGetDataStoreApi() {
swagger.onMountPointCreated(INSTANCE_ID); // add this ID into the list of mount points
- final SwaggerObject mountPointApi = (SwaggerObject) swagger.getMountPointApi(mockInfo, 1L, "Datastores", "-",
+ final SwaggerObject mountPointApi = (SwaggerObject) swagger.getMountPointApi(URI_INFO, 1L, "Datastores", "-",
OAversion.V2_0);
assertNotNull("failed to find Datastore API", mountPointApi);
* It means we should have name and name1, etc. when we have the same parameter in path multiple times.
*/
@Test
- public void testParametersNumberingForMountPointApi() throws Exception {
- final UriInfo mockInfo = DocGenTestHelper.createMockUriInfo(HTTP_URL);
+ public void testParametersNumberingForMountPointApi() {
swagger.onMountPointCreated(INSTANCE_ID);
- final OpenApiObject mountPointApi = (OpenApiObject) swagger.getMountPointApi(mockInfo, 1L, Optional.empty(),
+ final OpenApiObject mountPointApi = (OpenApiObject) swagger.getMountPointApi(URI_INFO, 1L, Optional.empty(),
OAversion.V3_0);
assertNotNull("Failed to find Datastore API", mountPointApi);
* Test that request for actions is correct and has parameters.
*/
@Test
- public void testActionPathsParamsForMountPointApi() throws Exception {
- final var mockInfo = DocGenTestHelper.createMockUriInfo(HTTP_URL);
+ public void testActionPathsParamsForMountPointApi() {
swagger.onMountPointCreated(INSTANCE_ID);
- final var mountPointApi = (OpenApiObject) swagger.getMountPointApi(mockInfo, 1L, Optional.empty(),
+ final var mountPointApi = (OpenApiObject) swagger.getMountPointApi(URI_INFO, 1L, Optional.empty(),
OAversion.V3_0);
assertNotNull("Failed to find Datastore API", mountPointApi);