Swagger specification says "security is an array of hashmaps".
This change replaces the use of ArrayNode for java.util.List
and ObjectNode for java.util.Map.
JIRA: NETCONF-1075
Change-Id: Ic88d0de29d4c4abb2bc37db34033a0ae03434901
Signed-off-by: Šimon Ukuš <simon.ukus@pantheon.tech>
import static org.opendaylight.restconf.openapi.util.RestDocgenUtil.resolveFullNameFromNode;
import static org.opendaylight.restconf.openapi.util.RestDocgenUtil.resolvePathArgumentsName;
-import com.fasterxml.jackson.databind.node.ArrayNode;
-import com.fasterxml.jackson.databind.node.JsonNodeFactory;
import com.google.common.base.Preconditions;
import com.google.common.collect.Range;
import java.io.IOException;
public static final String MODULE_NAME_SUFFIX = "_module";
public static final String BASIC_AUTH_NAME = "basicAuth";
public static final Http OPEN_API_BASIC_AUTH = new Http("basic", null, null);
- public static final ArrayNode SECURITY = JsonNodeFactory.instance.arrayNode()
- .add(JsonNodeFactory.instance.objectNode().set(BASIC_AUTH_NAME, JsonNodeFactory.instance.arrayNode()));
+ public static final List<Map<String, List<String>>> SECURITY = List.of(Map.of(BASIC_AUTH_NAME, List.of()));
private final DOMSchemaService schemaService;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonInclude.Include;
-import com.fasterxml.jackson.databind.node.ArrayNode;
import java.util.List;
import java.util.Map;
List<Server> servers,
Map<String, Path> paths,
Components components,
- ArrayNode security) {
+ List<Map<String, List<String>>> security) {
}
import com.fasterxml.jackson.databind.node.ArrayNode;
import com.fasterxml.jackson.databind.node.ObjectNode;
import java.util.List;
+import java.util.Map;
@JsonInclude(JsonInclude.Include.NON_NULL)
-public record Operation(boolean deprecated, List<String> tags, List<Parameter> parameters, ArrayNode security,
- ArrayNode servers, ObjectNode callbacks, ObjectNode externalDocs, ObjectNode requestBody,
- ObjectNode responses, String description, String operationId, String summary) {
+public record Operation(
+ boolean deprecated,
+ List<String> tags,
+ List<Parameter> parameters,
+ List<Map<String, List<String>>> security,
+ ArrayNode servers,
+ ObjectNode callbacks,
+ ObjectNode externalDocs,
+ ObjectNode requestBody,
+ ObjectNode responses,
+ String description,
+ String operationId,
+ String summary) {
private Operation(final Builder builder) {
this(builder.deprecated, builder.tags, builder.parameters, builder.security, builder.servers, builder.callbacks,
private boolean deprecated;
private List<String> tags;
private List<Parameter> parameters;
- private ArrayNode security;
+ private List<Map<String, List<String>>> security;
private ArrayNode servers;
private ObjectNode callbacks;
private ObjectNode externalDocs;
return this;
}
- public Builder security(final ArrayNode security) {
+ public Builder security(final List<Map<String, List<String>>> security) {
this.security = security;
return this;
}
import com.fasterxml.jackson.databind.JsonNode;
import java.util.ArrayList;
+import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
public void testAuthenticationFeature() {
final var doc = generator.getApiDeclaration(TOASTER_2, REVISION_DATE, uriInfo);
- assertEquals("[{\"basicAuth\":[]}]", doc.security().toString());
+ assertEquals("[{basicAuth=[]}]", doc.security().toString());
assertEquals("Http[type=http, scheme=basic, description=null, bearerFormat=null]",
doc.components().securitySchemes().get(BASIC_AUTH_NAME).toString());
+
+ // take list of all defined security scheme objects => all names of registered SecuritySchemeObjects
+ final var securitySchemesObjectNames = doc.components().securitySchemes().keySet();
+ assertTrue("No Security Schemes Object is defined", securitySchemesObjectNames.size() > 0);
+
+ // collect all referenced security scheme objects
+ final var referencedSecurityObjects = new HashSet<String>();
+ doc.security().forEach(map -> referencedSecurityObjects.addAll(map.keySet()));
+
+ // verify, that each reference references name of registered Security Scheme Object
+ for (final var secObjRef : referencedSecurityObjects) {
+ assertTrue(securitySchemesObjectNames.contains(secObjRef));
+ }
}
/**
openApi.onMountPointCreated(INSTANCE_ID);
final var mountPointApi = openApi.getMountPointApi(mockInfo, 1L, null);
- assertEquals("[{\"basicAuth\":[]}]", mountPointApi.security().toString());
+ assertEquals("[{basicAuth=[]}]", mountPointApi.security().toString());
assertEquals("Http[type=http, scheme=basic, description=null, bearerFormat=null]",
mountPointApi.components().securitySchemes().get(BASIC_AUTH_NAME).toString());
}