.. This work is licensed under a Creative Commons Attribution 4.0 International License. .. http://creativecommons.org/licenses/by/4.0 .. _ves-openapi-manager-use-cases: VES OpenAPI Manager validation use-cases ======================================== The main VES OpenAPI Manager use case is to verify if the schemaReferences declared in *VES_EVENT* type artifacts are present in the local DCAE run-time externalSchemaRepo and show validation results to user in SDC UI. The general flow of VES OpenAPI Manager is available here :ref:`ves-openapi-manager-flow`. Based on the referenced flow, there are few possible behaviours of VES OpenAPI Manager. In this section two main flows: successful and unsuccessful validation will be described step by step. Validation prerequisites ------------------------ Validation phase takes place only when specific conditions are met. 1) VES OpenAPI Manager is properly configured: client is connected to SDC and mapping file is present and pointed in configuration. Configuration is described in detail here: :ref:`ves-openapi-manager-deployment`. 2) Distribution of a Service Model takes place in SDC. 3) Service contains an *VES_EVENT* type artifact. 4) Artifact content is correctly downloaded. Validation description ---------------------- When *schemaReference* field from artifact is being validated, only the part of the URI that indicates public openAPI description file location is taken into consideration. For example when *schemaReference* with value *https://forge.3gpp.org/rep/sa5/MnS/blob/SA88-Rel16/OpenAPI/faultMnS.yaml#/components/schemas/NotifyNewAlarm* is found in artifact, then only the part before # sign (public openAPI description file location URI part) is being validated. This way part which would be validated is *https://forge.3gpp.org/rep/sa5/MnS/blob/SA88-Rel16/OpenAPI/faultMnS.yaml*. Mapping file must have a predefined JSON format of list of objects (mappings) with publicURL and localURL fields. Example with 3 mappings: .. literalinclude:: resources/schema-map-example.json :language: json When *schemaReference* is split, it's compared to each publicURL from mapping file. If there is no publicURL in mapping file which matches schemaReference, then schemaReference is marked as invalid. This process is executed for all stndDefined events defined in *VES_EVENT* artifact, which declare a schemaReference. All invalid references are returned to user via SDC UI when validation of a complete artifact ends. Based on returned information with invalid references user can take action and e.g. add mappings and schemas to DCAE run-time environment by editing ConfigMaps which store them. +-----------------------------------------+-------------------------+ | ConfigMap name | Content | +=========================================+=========================+ | dcae-external-repo-configmap-schema-map | Mapping file | +-----------------------------------------+-------------------------+ | dcae-external-repo-configmap-sa88-rel16 | OpenAPI schemas content,| | | example stores 3GPP | | | sa88-rel16 schemas | +-----------------------------------------+-------------------------+ Successful validation case -------------------------- There are few ways to get a successful validation status - *DEPLOY_OK*. 1) When artifact *VES_EVENT* does not contain *stndDefined* events definitions. Only *stndDefined* event are validated. 2) When artifact *VES_EVENT* contains *stndDefined* events definitions but *schemaReference* fields are not present. 3) When artifact *VES_EVENT* contains *stndDefined* events definitions and each *schemaReference* of the event is present in the mapping file. *VES_EVENT* artifact may contain more than one event definition. Examples of valid artifacts with single events are below. Example of valid artifact without *stndDefined* event definition (case 1): .. literalinclude:: resources/artifact-no-stndDefined.yaml :language: yaml Example of valid artifact with *stndDefined* event definition, but without schemaReference field (case 2): .. literalinclude:: resources/artifact-stndDefined-no-schemaReference.yaml :language: yaml Example of artifact with *stndDefined* event definition (case 3): .. literalinclude:: resources/artifact-stndDefined.yaml :language: yaml which is valid when mapping file contains a mapping of schemaReference field. Example of mapping file content which makes example artifact valid: .. literalinclude:: resources/schema-map.json :language: json Unsuccessful validation case ---------------------------- Another case is an unsuccessful validation case which sends status *DEPLOY_ERROR* with error message containing listed *schemaReference* that are missing from mapping file. Fail case might occur: 1) When artifact *VES_EVENT* contains *stndDefined* events definitions and any of *schemaReference* is not present in mapping file. Example of artifact with *stndDefined* event definition: .. literalinclude:: resources/artifact-stndDefined.yaml :language: yaml which is invalid when mapping file does not contain a mapping of schemaReference field. Example of mapping file which makes example artifact invalid: .. literalinclude:: resources/schema-map-invalid.json :language: json Validation results ------------------ There are two ways to receive validation results. 1) Via SDC UI. Results are available in *Service->Distributions* view. To see results in SDC UI user has to wait up to few minutes. 2) In VES OpenAPI Manager logs. They are printed right after validation.