From 0434bcbb88ec0fdad1074e8fd588fe000d3974a5 Mon Sep 17 00:00:00 2001 From: "mukesh.paliwal" Date: Mon, 8 Mar 2021 21:53:02 +0530 Subject: so-nssmf-adapter build failed issues Issue-ID: SO-3575 Signed-off-by: mukesh.paliwal Change-Id: I58fde2cd2a1bf65702e34eeeeab0d967c10f23c8 --- Dockerfile | 30 - ca-certificates/onap-ca.crt | 31 - configs/logging/logback-spring.xml | 203 ------- onap-eclipse-format.xml | 624 ++++++++++---------- packages/docker/pom.xml | 157 +++++ .../src/main/docker/docker-files/Dockerfile.so-app | 31 + .../docker/docker-files/Dockerfile.so-base-image | 19 + .../docker-files/ca-certificates/onap-ca.crt | 31 + .../configs/logging/logback-spring.xml | 203 +++++++ .../docker/docker-files/scripts/.gitattributes | 5 + .../main/docker/docker-files/scripts/start-app.sh | 89 +++ .../main/docker/docker-files/scripts/wait-for.sh | 85 +++ packages/pom.xml | 35 ++ pom-format.properties | 8 +- pom.xml | 375 ++++-------- scripts/.gitattributes | 5 - scripts/start-app.sh | 89 --- scripts/wait-for.sh | 85 --- so-nssmf-adapter-application/pom.xml | 179 ++++++ .../so/adapters/nssmf/MSONssmfApplication.java | 33 ++ .../adapters/nssmf/annotation/RequestLogger.java | 31 + .../adapters/nssmf/annotation/ServiceLogger.java | 36 ++ .../adapters/nssmf/config/NssmfAdapterConfig.java | 36 ++ .../so/adapters/nssmf/config/RequestDbConfig.java | 68 +++ .../adapters/nssmf/consts/NssmfAdapterConsts.java | 186 ++++++ .../nssmf/controller/NssmfAdapterController.java | 59 ++ .../so/adapters/nssmf/entity/ErrorResponse.java | 63 ++ .../onap/so/adapters/nssmf/entity/NssmfInfo.java | 41 ++ .../so/adapters/nssmf/entity/NssmfUrlInfo.java | 17 + .../so/adapters/nssmf/entity/RestResponse.java | 92 +++ .../so/adapters/nssmf/entity/TokenRequest.java | 33 ++ .../so/adapters/nssmf/entity/TokenResponse.java | 32 + .../onap/so/adapters/nssmf/enums/ActionType.java | 67 +++ .../onap/so/adapters/nssmf/enums/ExecutorType.java | 25 + .../onap/so/adapters/nssmf/enums/HttpMethod.java | 41 ++ .../onap/so/adapters/nssmf/enums/JobStatus.java | 42 ++ .../so/adapters/nssmf/enums/SelectionType.java | 27 + .../nssmf/exceptions/ApplicationException.java | 66 +++ .../extclients/aai/AaiClientPropertiesImpl.java | 69 +++ .../nssmf/extclients/aai/AaiClientProvider.java | 34 ++ .../nssmf/extclients/aai/AaiServiceProvider.java | 39 ++ .../extclients/aai/AaiServiceProviderImpl.java | 98 ++++ .../nssmf/interceptor/LoggerInterceptor.java | 55 ++ .../nssmf/interceptor/RequestLogAspect.java | 227 ++++++++ .../so/adapters/nssmf/manager/NssmfManager.java | 44 ++ .../nssmf/manager/NssmfManagerBuilder.java | 131 +++++ .../nssmf/manager/impl/BaseNssmfManager.java | 282 +++++++++ .../nssmf/manager/impl/ExternalNssmfManager.java | 243 ++++++++ .../nssmf/manager/impl/InternalNssmfManager.java | 130 +++++ .../impl/external/ExternalAnNssmfManager.java | 171 ++++++ .../impl/external/ExternalCnNssmfManager.java | 53 ++ .../manager/impl/external/RanSliceProfile.java | 70 +++ .../impl/internal/InternalAnNssmfManager.java | 54 ++ .../impl/internal/InternalCnNssmfManager.java | 56 ++ .../impl/internal/InternalTnNssmfManager.java | 42 ++ .../nssmf/service/NssmfManagerService.java | 45 ++ .../service/impl/NssmfManagerServiceImpl.java | 143 +++++ .../so/adapters/nssmf/util/NssmfAdapterUtil.java | 123 ++++ .../org/onap/so/adapters/nssmf/util/RestUtil.java | 353 +++++++++++ .../services/org.onap.so.client.RestProperties | 1 + .../src/main/resources/application-aaf.yaml | 0 .../src/main/resources/application-basic.yaml | 0 .../src/main/resources/application-test.yaml | 60 ++ .../src/main/resources/application.yaml | 77 +++ .../src/main/resources/org.onap.so.p12 | Bin 0 -> 4095 bytes .../src/main/resources/org.onap.so.trust.jks | Bin 0 -> 1413 bytes .../src/main/resources/subnetCapability.json | 10 + .../controller/NssmfAdapterControllerTest.java | 132 +++++ .../so/adapters/nssmf/entity/RestResponseTest.java | 59 ++ .../nssmf/exceptions/ApplicationExceptionTest.java | 40 ++ .../service/impl/NssmfManagerServiceImplTest.java | 645 +++++++++++++++++++++ .../onap/so/adapters/nssmf/util/RestUtilTest.java | 161 +++++ .../src/test/resources/application-test.yaml | 60 ++ .../so/adapters/nssmf/MSONssmfApplication.java | 33 -- .../adapters/nssmf/annotation/RequestLogger.java | 31 - .../adapters/nssmf/annotation/ServiceLogger.java | 36 -- .../adapters/nssmf/config/NssmfAdapterConfig.java | 36 -- .../so/adapters/nssmf/config/RequestDbConfig.java | 68 --- .../adapters/nssmf/consts/NssmfAdapterConsts.java | 186 ------ .../nssmf/controller/NssmfAdapterController.java | 59 -- .../so/adapters/nssmf/entity/ErrorResponse.java | 63 -- .../onap/so/adapters/nssmf/entity/NssmfInfo.java | 41 -- .../so/adapters/nssmf/entity/NssmfUrlInfo.java | 17 - .../so/adapters/nssmf/entity/RestResponse.java | 92 --- .../so/adapters/nssmf/entity/TokenRequest.java | 33 -- .../so/adapters/nssmf/entity/TokenResponse.java | 32 - .../onap/so/adapters/nssmf/enums/ActionType.java | 67 --- .../onap/so/adapters/nssmf/enums/ExecutorType.java | 25 - .../onap/so/adapters/nssmf/enums/HttpMethod.java | 41 -- .../onap/so/adapters/nssmf/enums/JobStatus.java | 42 -- .../so/adapters/nssmf/enums/SelectionType.java | 27 - .../nssmf/exceptions/ApplicationException.java | 66 --- .../extclients/aai/AaiClientPropertiesImpl.java | 69 --- .../nssmf/extclients/aai/AaiClientProvider.java | 34 -- .../nssmf/extclients/aai/AaiServiceProvider.java | 39 -- .../extclients/aai/AaiServiceProviderImpl.java | 98 ---- .../nssmf/interceptor/LoggerInterceptor.java | 55 -- .../nssmf/interceptor/RequestLogAspect.java | 227 -------- .../so/adapters/nssmf/manager/NssmfManager.java | 44 -- .../nssmf/manager/NssmfManagerBuilder.java | 131 ----- .../nssmf/manager/impl/BaseNssmfManager.java | 282 --------- .../nssmf/manager/impl/ExternalNssmfManager.java | 243 -------- .../nssmf/manager/impl/InternalNssmfManager.java | 130 ----- .../impl/external/ExternalAnNssmfManager.java | 171 ------ .../impl/external/ExternalCnNssmfManager.java | 53 -- .../manager/impl/external/RanSliceProfile.java | 70 --- .../impl/internal/InternalAnNssmfManager.java | 54 -- .../impl/internal/InternalCnNssmfManager.java | 56 -- .../impl/internal/InternalTnNssmfManager.java | 42 -- .../nssmf/service/NssmfManagerService.java | 45 -- .../service/impl/NssmfManagerServiceImpl.java | 143 ----- .../so/adapters/nssmf/util/NssmfAdapterUtil.java | 123 ---- .../org/onap/so/adapters/nssmf/util/RestUtil.java | 353 ----------- .../services/org.onap.so.client.RestProperties | 1 - src/main/resources/application-aaf.yaml | 0 src/main/resources/application-basic.yaml | 0 src/main/resources/application-test.yaml | 60 -- src/main/resources/application.yaml | 77 --- src/main/resources/org.onap.so.p12 | Bin 4095 -> 0 bytes src/main/resources/org.onap.so.trust.jks | Bin 1413 -> 0 bytes src/main/resources/subnetCapability.json | 10 - .../controller/NssmfAdapterControllerTest.java | 132 ----- .../so/adapters/nssmf/entity/RestResponseTest.java | 59 -- .../nssmf/exceptions/ApplicationExceptionTest.java | 40 -- .../service/impl/NssmfManagerServiceImplTest.java | 645 --------------------- .../onap/so/adapters/nssmf/util/RestUtilTest.java | 161 ----- src/test/resources/application-test.yaml | 60 -- version.properties | 0 128 files changed, 5964 insertions(+), 5724 deletions(-) delete mode 100644 Dockerfile delete mode 100644 ca-certificates/onap-ca.crt delete mode 100644 configs/logging/logback-spring.xml create mode 100755 packages/docker/pom.xml create mode 100644 packages/docker/src/main/docker/docker-files/Dockerfile.so-app create mode 100644 packages/docker/src/main/docker/docker-files/Dockerfile.so-base-image create mode 100644 packages/docker/src/main/docker/docker-files/ca-certificates/onap-ca.crt create mode 100644 packages/docker/src/main/docker/docker-files/configs/logging/logback-spring.xml create mode 100644 packages/docker/src/main/docker/docker-files/scripts/.gitattributes create mode 100644 packages/docker/src/main/docker/docker-files/scripts/start-app.sh create mode 100644 packages/docker/src/main/docker/docker-files/scripts/wait-for.sh create mode 100644 packages/pom.xml mode change 100644 => 100755 pom.xml delete mode 100644 scripts/.gitattributes delete mode 100755 scripts/start-app.sh delete mode 100755 scripts/wait-for.sh create mode 100755 so-nssmf-adapter-application/pom.xml create mode 100644 so-nssmf-adapter-application/src/main/java/org/onap/so/adapters/nssmf/MSONssmfApplication.java create mode 100644 so-nssmf-adapter-application/src/main/java/org/onap/so/adapters/nssmf/annotation/RequestLogger.java create mode 100644 so-nssmf-adapter-application/src/main/java/org/onap/so/adapters/nssmf/annotation/ServiceLogger.java create mode 100644 so-nssmf-adapter-application/src/main/java/org/onap/so/adapters/nssmf/config/NssmfAdapterConfig.java create mode 100644 so-nssmf-adapter-application/src/main/java/org/onap/so/adapters/nssmf/config/RequestDbConfig.java create mode 100644 so-nssmf-adapter-application/src/main/java/org/onap/so/adapters/nssmf/consts/NssmfAdapterConsts.java create mode 100644 so-nssmf-adapter-application/src/main/java/org/onap/so/adapters/nssmf/controller/NssmfAdapterController.java create mode 100644 so-nssmf-adapter-application/src/main/java/org/onap/so/adapters/nssmf/entity/ErrorResponse.java create mode 100644 so-nssmf-adapter-application/src/main/java/org/onap/so/adapters/nssmf/entity/NssmfInfo.java create mode 100644 so-nssmf-adapter-application/src/main/java/org/onap/so/adapters/nssmf/entity/NssmfUrlInfo.java create mode 100644 so-nssmf-adapter-application/src/main/java/org/onap/so/adapters/nssmf/entity/RestResponse.java create mode 100644 so-nssmf-adapter-application/src/main/java/org/onap/so/adapters/nssmf/entity/TokenRequest.java create mode 100644 so-nssmf-adapter-application/src/main/java/org/onap/so/adapters/nssmf/entity/TokenResponse.java create mode 100644 so-nssmf-adapter-application/src/main/java/org/onap/so/adapters/nssmf/enums/ActionType.java create mode 100644 so-nssmf-adapter-application/src/main/java/org/onap/so/adapters/nssmf/enums/ExecutorType.java create mode 100644 so-nssmf-adapter-application/src/main/java/org/onap/so/adapters/nssmf/enums/HttpMethod.java create mode 100644 so-nssmf-adapter-application/src/main/java/org/onap/so/adapters/nssmf/enums/JobStatus.java create mode 100644 so-nssmf-adapter-application/src/main/java/org/onap/so/adapters/nssmf/enums/SelectionType.java create mode 100644 so-nssmf-adapter-application/src/main/java/org/onap/so/adapters/nssmf/exceptions/ApplicationException.java create mode 100644 so-nssmf-adapter-application/src/main/java/org/onap/so/adapters/nssmf/extclients/aai/AaiClientPropertiesImpl.java create mode 100644 so-nssmf-adapter-application/src/main/java/org/onap/so/adapters/nssmf/extclients/aai/AaiClientProvider.java create mode 100644 so-nssmf-adapter-application/src/main/java/org/onap/so/adapters/nssmf/extclients/aai/AaiServiceProvider.java create mode 100644 so-nssmf-adapter-application/src/main/java/org/onap/so/adapters/nssmf/extclients/aai/AaiServiceProviderImpl.java create mode 100644 so-nssmf-adapter-application/src/main/java/org/onap/so/adapters/nssmf/interceptor/LoggerInterceptor.java create mode 100644 so-nssmf-adapter-application/src/main/java/org/onap/so/adapters/nssmf/interceptor/RequestLogAspect.java create mode 100644 so-nssmf-adapter-application/src/main/java/org/onap/so/adapters/nssmf/manager/NssmfManager.java create mode 100644 so-nssmf-adapter-application/src/main/java/org/onap/so/adapters/nssmf/manager/NssmfManagerBuilder.java create mode 100644 so-nssmf-adapter-application/src/main/java/org/onap/so/adapters/nssmf/manager/impl/BaseNssmfManager.java create mode 100644 so-nssmf-adapter-application/src/main/java/org/onap/so/adapters/nssmf/manager/impl/ExternalNssmfManager.java create mode 100644 so-nssmf-adapter-application/src/main/java/org/onap/so/adapters/nssmf/manager/impl/InternalNssmfManager.java create mode 100644 so-nssmf-adapter-application/src/main/java/org/onap/so/adapters/nssmf/manager/impl/external/ExternalAnNssmfManager.java create mode 100644 so-nssmf-adapter-application/src/main/java/org/onap/so/adapters/nssmf/manager/impl/external/ExternalCnNssmfManager.java create mode 100644 so-nssmf-adapter-application/src/main/java/org/onap/so/adapters/nssmf/manager/impl/external/RanSliceProfile.java create mode 100644 so-nssmf-adapter-application/src/main/java/org/onap/so/adapters/nssmf/manager/impl/internal/InternalAnNssmfManager.java create mode 100644 so-nssmf-adapter-application/src/main/java/org/onap/so/adapters/nssmf/manager/impl/internal/InternalCnNssmfManager.java create mode 100644 so-nssmf-adapter-application/src/main/java/org/onap/so/adapters/nssmf/manager/impl/internal/InternalTnNssmfManager.java create mode 100644 so-nssmf-adapter-application/src/main/java/org/onap/so/adapters/nssmf/service/NssmfManagerService.java create mode 100644 so-nssmf-adapter-application/src/main/java/org/onap/so/adapters/nssmf/service/impl/NssmfManagerServiceImpl.java create mode 100644 so-nssmf-adapter-application/src/main/java/org/onap/so/adapters/nssmf/util/NssmfAdapterUtil.java create mode 100644 so-nssmf-adapter-application/src/main/java/org/onap/so/adapters/nssmf/util/RestUtil.java create mode 100644 so-nssmf-adapter-application/src/main/resources/META-INF/services/org.onap.so.client.RestProperties create mode 100644 so-nssmf-adapter-application/src/main/resources/application-aaf.yaml create mode 100644 so-nssmf-adapter-application/src/main/resources/application-basic.yaml create mode 100644 so-nssmf-adapter-application/src/main/resources/application-test.yaml create mode 100644 so-nssmf-adapter-application/src/main/resources/application.yaml create mode 100644 so-nssmf-adapter-application/src/main/resources/org.onap.so.p12 create mode 100644 so-nssmf-adapter-application/src/main/resources/org.onap.so.trust.jks create mode 100644 so-nssmf-adapter-application/src/main/resources/subnetCapability.json create mode 100644 so-nssmf-adapter-application/src/test/java/org/onap/so/adapters/nssmf/controller/NssmfAdapterControllerTest.java create mode 100644 so-nssmf-adapter-application/src/test/java/org/onap/so/adapters/nssmf/entity/RestResponseTest.java create mode 100644 so-nssmf-adapter-application/src/test/java/org/onap/so/adapters/nssmf/exceptions/ApplicationExceptionTest.java create mode 100644 so-nssmf-adapter-application/src/test/java/org/onap/so/adapters/nssmf/service/impl/NssmfManagerServiceImplTest.java create mode 100644 so-nssmf-adapter-application/src/test/java/org/onap/so/adapters/nssmf/util/RestUtilTest.java create mode 100644 so-nssmf-adapter-application/src/test/resources/application-test.yaml delete mode 100644 src/main/java/org/onap/so/adapters/nssmf/MSONssmfApplication.java delete mode 100644 src/main/java/org/onap/so/adapters/nssmf/annotation/RequestLogger.java delete mode 100644 src/main/java/org/onap/so/adapters/nssmf/annotation/ServiceLogger.java delete mode 100644 src/main/java/org/onap/so/adapters/nssmf/config/NssmfAdapterConfig.java delete mode 100644 src/main/java/org/onap/so/adapters/nssmf/config/RequestDbConfig.java delete mode 100644 src/main/java/org/onap/so/adapters/nssmf/consts/NssmfAdapterConsts.java delete mode 100644 src/main/java/org/onap/so/adapters/nssmf/controller/NssmfAdapterController.java delete mode 100644 src/main/java/org/onap/so/adapters/nssmf/entity/ErrorResponse.java delete mode 100644 src/main/java/org/onap/so/adapters/nssmf/entity/NssmfInfo.java delete mode 100644 src/main/java/org/onap/so/adapters/nssmf/entity/NssmfUrlInfo.java delete mode 100644 src/main/java/org/onap/so/adapters/nssmf/entity/RestResponse.java delete mode 100644 src/main/java/org/onap/so/adapters/nssmf/entity/TokenRequest.java delete mode 100644 src/main/java/org/onap/so/adapters/nssmf/entity/TokenResponse.java delete mode 100644 src/main/java/org/onap/so/adapters/nssmf/enums/ActionType.java delete mode 100644 src/main/java/org/onap/so/adapters/nssmf/enums/ExecutorType.java delete mode 100644 src/main/java/org/onap/so/adapters/nssmf/enums/HttpMethod.java delete mode 100644 src/main/java/org/onap/so/adapters/nssmf/enums/JobStatus.java delete mode 100644 src/main/java/org/onap/so/adapters/nssmf/enums/SelectionType.java delete mode 100644 src/main/java/org/onap/so/adapters/nssmf/exceptions/ApplicationException.java delete mode 100644 src/main/java/org/onap/so/adapters/nssmf/extclients/aai/AaiClientPropertiesImpl.java delete mode 100644 src/main/java/org/onap/so/adapters/nssmf/extclients/aai/AaiClientProvider.java delete mode 100644 src/main/java/org/onap/so/adapters/nssmf/extclients/aai/AaiServiceProvider.java delete mode 100644 src/main/java/org/onap/so/adapters/nssmf/extclients/aai/AaiServiceProviderImpl.java delete mode 100644 src/main/java/org/onap/so/adapters/nssmf/interceptor/LoggerInterceptor.java delete mode 100644 src/main/java/org/onap/so/adapters/nssmf/interceptor/RequestLogAspect.java delete mode 100644 src/main/java/org/onap/so/adapters/nssmf/manager/NssmfManager.java delete mode 100644 src/main/java/org/onap/so/adapters/nssmf/manager/NssmfManagerBuilder.java delete mode 100644 src/main/java/org/onap/so/adapters/nssmf/manager/impl/BaseNssmfManager.java delete mode 100644 src/main/java/org/onap/so/adapters/nssmf/manager/impl/ExternalNssmfManager.java delete mode 100644 src/main/java/org/onap/so/adapters/nssmf/manager/impl/InternalNssmfManager.java delete mode 100644 src/main/java/org/onap/so/adapters/nssmf/manager/impl/external/ExternalAnNssmfManager.java delete mode 100644 src/main/java/org/onap/so/adapters/nssmf/manager/impl/external/ExternalCnNssmfManager.java delete mode 100644 src/main/java/org/onap/so/adapters/nssmf/manager/impl/external/RanSliceProfile.java delete mode 100644 src/main/java/org/onap/so/adapters/nssmf/manager/impl/internal/InternalAnNssmfManager.java delete mode 100644 src/main/java/org/onap/so/adapters/nssmf/manager/impl/internal/InternalCnNssmfManager.java delete mode 100644 src/main/java/org/onap/so/adapters/nssmf/manager/impl/internal/InternalTnNssmfManager.java delete mode 100644 src/main/java/org/onap/so/adapters/nssmf/service/NssmfManagerService.java delete mode 100644 src/main/java/org/onap/so/adapters/nssmf/service/impl/NssmfManagerServiceImpl.java delete mode 100644 src/main/java/org/onap/so/adapters/nssmf/util/NssmfAdapterUtil.java delete mode 100644 src/main/java/org/onap/so/adapters/nssmf/util/RestUtil.java delete mode 100644 src/main/resources/META-INF/services/org.onap.so.client.RestProperties delete mode 100644 src/main/resources/application-aaf.yaml delete mode 100644 src/main/resources/application-basic.yaml delete mode 100644 src/main/resources/application-test.yaml delete mode 100644 src/main/resources/application.yaml delete mode 100644 src/main/resources/org.onap.so.p12 delete mode 100644 src/main/resources/org.onap.so.trust.jks delete mode 100644 src/main/resources/subnetCapability.json delete mode 100644 src/test/java/org/onap/so/adapters/nssmf/controller/NssmfAdapterControllerTest.java delete mode 100644 src/test/java/org/onap/so/adapters/nssmf/entity/RestResponseTest.java delete mode 100644 src/test/java/org/onap/so/adapters/nssmf/exceptions/ApplicationExceptionTest.java delete mode 100644 src/test/java/org/onap/so/adapters/nssmf/service/impl/NssmfManagerServiceImplTest.java delete mode 100644 src/test/java/org/onap/so/adapters/nssmf/util/RestUtilTest.java delete mode 100644 src/test/resources/application-test.yaml mode change 100644 => 100755 version.properties diff --git a/Dockerfile b/Dockerfile deleted file mode 100644 index 483c219..0000000 --- a/Dockerfile +++ /dev/null @@ -1,30 +0,0 @@ -FROM adoptopenjdk/openjdk11:jre-11.0.8_10-alpine - -ARG JAR_FILE=*.jar -ARG http_proxy -ENV HTTP_PROXY=$http_proxy -ENV http_proxy=$HTTP_PROXY -ARG https_proxy -ENV HTTPS_PROXY=$https_proxy -ENV https_proxy=$HTTPS_PROXY -USER root -RUN mkdir -p /app/config -RUN mkdir -p /app/certificates -RUN mkdir -p /app/logs -RUN mkdir -p /app/ca-certificates -RUN apk update && apk add apache2-utils -COPY target/${JAR_FILE} /app/app.jar - -COPY configs/logging/logback-spring.xml /app -COPY scripts/start-app.sh /app -COPY scripts/wait-for.sh /app -COPY ca-certificates/onap-ca.crt /app/ca-certificates/onap-ca.crt -#RUN chown -R so:so /app -#USER so -# Springboot configuration (required) -VOLUME /app/config -# Root certificates (optional) -VOLUME /app/ca-certificates -WORKDIR /app -ENTRYPOINT ["/app/start-app.sh"] - diff --git a/ca-certificates/onap-ca.crt b/ca-certificates/onap-ca.crt deleted file mode 100644 index e9a50d7..0000000 --- a/ca-certificates/onap-ca.crt +++ /dev/null @@ -1,31 +0,0 @@ ------BEGIN CERTIFICATE----- -MIIFPjCCAyagAwIBAgIJAJ6u7cCnzrWdMA0GCSqGSIb3DQEBCwUAMCwxDjAMBgNV -BAsMBU9TQUFGMQ0wCwYDVQQKDARPTkFQMQswCQYDVQQGEwJVUzAeFw0xODA0MDUx -NDE1MjhaFw0zODAzMzExNDE1MjhaMCwxDjAMBgNVBAsMBU9TQUFGMQ0wCwYDVQQK -DARPTkFQMQswCQYDVQQGEwJVUzCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoC -ggIBAMA5pkgRs7NhGG4ew5JouhyYakgYUyFaG121+/h8qbSdt0hVQv56+EA41Yq7 -XGie7RYDQK9NmAFF3gruE+6X7wvJiChp+Cyd7sFMnb65uWhxEdxWTM2BJFrgfzUn -H8ZCxgaCo3XH4PzlKRy2LQQJEJECwl/RZmRCXijMt5e9h8XoZY/fKkKcZZUsWNCM -pTo266wjvA9MXLmdgReRj0+vrCjrNqy+htwJDztoiHWiYPqT6o8EvGcgjNqjlZx7 -NUNf8MfLDByqKF6+wRbHv1GKjn3/Vijd45Fv8riyRYROiFanvbV6jIfBkv8PZbXg -2VDWsYsgp8NAvMxK+iV8cO+Ck3lBI2GOPZbCEqpPVTYbLUz6sczAlCXwQoPzDIZY -wYa3eR/gYLY1gP2iEVHORag3bLPap9ZX5E8DZkzTNTjovvLk8KaCmfcaUMJsBtDd -ApcUitz10cnRyZc1sX3gE1f3DpzQM6t9C5sOVyRhDcSrKqqwb9m0Ss04XAS9FsqM -P3UWYQyqDXSxlUAYaX892u8mV1hxnt2gjb22RloXMM6TovM3sSrJS0wH+l1nznd6 -aFXftS/G4ZVIVZ/LfT1is4StoyPWZCwwwly1z8qJQ/zhip5NgZTxQw4mi7ww35DY -PdAQOCoajfSvFjqslQ/cPRi/MRCu079heVb5fQnnzVtnpFQRAgMBAAGjYzBhMB0G -A1UdDgQWBBRTVTPyS+vQUbHBeJrBKDF77+rtSTAfBgNVHSMEGDAWgBRTVTPyS+vQ -UbHBeJrBKDF77+rtSTAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBhjAN -BgkqhkiG9w0BAQsFAAOCAgEAPx/IaK94n02wPxpnYTy+LVLIxwdq/kawNd6IbiMz -L87zmNMDmHcGbfoRCj8OkhuggX9Lx1/CkhpXimuYsZOFQi5blr/u+v4mIbsgbmi9 -7j+cUHDP0zLycvSvxKHty51LwmaX9a4wkJl5zBU4O1sd/H9tWcEmwJ39ltKoBKBx -c94Zc3iMm5ytRWGj+0rKzLDAXEWpoZ5bE5PLJauA6UDCxDLfs3FwhbS7uDggxYvf -jySF5FCNET94oJ+m8s7VeHvoa8iPGKvXrIqdd7XDHnqJJlVKr7m9S0fMbyEB8ci2 -RtOXDt93ifY1uhoEtEykn4dqBSp8ezvNMnwoXdYPDvTd9uCAFeWFLVreBAWxd25h -PsBTkZA5hpa/rA+mKv6Af4VBViYr8cz4dZCsFChuioVebe9ighrfjB//qKepFjPF -CyjzKN1u0JKm/2x/ORqxkTONG8p3uDwoIOyimUcTtTMv42bfYD88RKakqSFXE9G+ -Z0LlaKABqfjK49o/tsAp+c5LoNlYllKhnetO3QAdraHwdmC36BhoghzR1jpX751A -cZn2VH3Q4XKyp01cJNCJIrua+A+bx6zh3RyW6zIIkbRCbET+UD+4mr8WIcSE3mtR -ZVlnhUDO4z9//WKMVzwS9Rh8/kuszrGFI1KQozXCHLrce3YP6RYZfOed79LXaRwX -dYY= ------END CERTIFICATE----- diff --git a/configs/logging/logback-spring.xml b/configs/logging/logback-spring.xml deleted file mode 100644 index e4be709..0000000 --- a/configs/logging/logback-spring.xml +++ /dev/null @@ -1,203 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ${errorPattern} - - - - - - - EXIT - - DENY - ACCEPT - - ${logs_dir:-.}/${auditLogName}.log - - ${logs_dir:-.}/${auditLogName}.%d{yyyy-MM-dd}.%i.log.zip - - ${maxFileSize} - ${maxHistory} - ${totalSizeCap} - - - ${auditPattern} - - - - - 256 - - - - - - - INVOKE-RETURN - - DENY - ACCEPT - - ${logs_dir:-.}/${metricsLogName}.log - - ${logs_dir:-.}/${metricsLogName}.%d{yyyy-MM-dd}.%i.log.zip - - ${maxFileSize} - ${maxHistory} - ${totalSizeCap} - - - ${metricPattern} - - - - - - 256 - - - - - - ERROR - ACCEPT - DENY - - ${logs_dir:-.}/${errorLogName}.log - - ${logs_dir:-.}/${errorLogName}.%d{yyyy-MM-dd}.%i.log.zip - - ${maxFileSize} - ${maxHistory} - ${totalSizeCap} - - - ${errorPattern} - - - - - 256 - - - - - - - INVOKE - INVOKE-RETURN - ENTRY - EXIT - - ACCEPT - DENY - - ${logs_dir:-.}/${debugLogName}.log - - ${logs_dir:-.}/${debugLogName}.%d{yyyy-MM-dd}.%i.log.zip - - ${maxFileSize} - ${maxHistory} - ${totalSizeCap} - - - ${debugPattern} - - - - - 256 - - true - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/onap-eclipse-format.xml b/onap-eclipse-format.xml index 093866a..f4065a2 100755 --- a/onap-eclipse-format.xml +++ b/onap-eclipse-format.xml @@ -1,313 +1,313 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/packages/docker/pom.xml b/packages/docker/pom.xml new file mode 100755 index 0000000..1400e3e --- /dev/null +++ b/packages/docker/pom.xml @@ -0,0 +1,157 @@ + + 4.0.0 + + org.onap.so.adapters.so-nssmf-adapter + packages + 1.8.0-SNAPSHOT + + org.onap.so.adapters.so-nssmf-adapter.packages + 1.8.0-SNAPSHOT + pom + docker + SO NSSMF Adapter Docker Packaging + + + ${project.version} + false + false + false + nexus3.onap.org:10001 + nexus3.onap.org:10003 + onap/so + deploy + + + + ${project.artifactId}-${project.version} + + + org.codehaus.groovy.maven + gmaven-plugin + 1.0 + + + validate + + execute + + + + println 'Project version: ' + project.properties['nssmf-adapter-project-version']; + def versionArray; + if (project.properties['nssmf-adapter-project-version'] != null) { + versionArray = project.properties['nssmf-adapter-project-version'].split('-'); + } + + if (project.properties['nssmf-adapter-project-version'].endsWith("-SNAPSHOT")) { + project.properties['project.docker.latesttag.version'] = versionArray[0] + "-SNAPSHOT-latest"; + } else { + project.properties['project.docker.latesttag.version'] = versionArray[0] + "-STAGING-latest"; + } + + println 'New tag for docker: ' + project.properties['project.docker.latesttag.version']; + + + + + + + + io.fabric8 + docker-maven-plugin + + true + 1.23 + ${docker.pull.registry} + ${docker.push.registry} + + + ${docker.image.prefix}/base-image:1.0 + + try + docker-files/Dockerfile.so-base-image + + + + ${docker.image.prefix}/so-nssmf-adapter + + try + docker-files/Dockerfile.so-app + + ${project.version} + ${project.version}-${maven.build.timestamp} + ${project.docker.latesttag.version} + + + + + + + + org.onap.so.adapters.so-nssmf-adapter:so-nssmf-adapter-application + + + app.jar + + + + + + + + + + + + + clean-images + pre-clean + + remove + + + true + + + + + generate-images + generate-sources + + build + + + + + push-images + ${docker.push.phase} + + build + push + + + ${docker.image.prefix}/so-nssmf-adapter + + + + + + + org.apache.maven.plugins + maven-deploy-plugin + + true + + + + + + + + org.onap.so.adapters.so-nssmf-adapter + so-nssmf-adapter-application + ${project.version} + + + \ No newline at end of file diff --git a/packages/docker/src/main/docker/docker-files/Dockerfile.so-app b/packages/docker/src/main/docker/docker-files/Dockerfile.so-app new file mode 100644 index 0000000..1048027 --- /dev/null +++ b/packages/docker/src/main/docker/docker-files/Dockerfile.so-app @@ -0,0 +1,31 @@ +FROM onap/so/base-image:1.0 + +ARG http_proxy +ENV HTTP_PROXY=$http_proxy +ENV http_proxy=$HTTP_PROXY +ARG https_proxy +ENV HTTPS_PROXY=$https_proxy +ENV https_proxy=$HTTPS_PROXY + +USER root +RUN mkdir -p /app/config +RUN mkdir -p /app/certificates +RUN mkdir -p /app/logs +RUN mkdir -p /app/ca-certificates + +COPY maven/app.jar /app +COPY configs/logging/logback-spring.xml /app +COPY scripts/start-app.sh /app +COPY scripts/wait-for.sh /app +COPY ca-certificates/onap-ca.crt /app/ca-certificates/onap-ca.crt +RUN chown -R so:so /app + +USER so +# Springboot configuration (required) +VOLUME /app/config + +# Root certificates (optional) +VOLUME /app/ca-certificates + +WORKDIR /app +ENTRYPOINT ["/app/start-app.sh"] diff --git a/packages/docker/src/main/docker/docker-files/Dockerfile.so-base-image b/packages/docker/src/main/docker/docker-files/Dockerfile.so-base-image new file mode 100644 index 0000000..0bc4aba --- /dev/null +++ b/packages/docker/src/main/docker/docker-files/Dockerfile.so-base-image @@ -0,0 +1,19 @@ +FROM adoptopenjdk/openjdk11:jre-11.0.8_10-alpine + +ARG http_proxy +ARG https_proxy +ENV HTTP_PROXY=$http_proxy +ENV HTTPS_PROXY=$https_proxy +ENV http_proxy=$HTTP_PROXY +ENV https_proxy=$HTTPS_PROXY + +# Install commonly needed tools +RUN apk --no-cache add curl netcat-openbsd nss apache2-utils java-cacerts + +# Create symlink for default Java truststore +RUN set -eux; \ + rm -rf "$JAVA_HOME/lib/security/cacerts"; \ + ln -sT /etc/ssl/certs/java/cacerts "$JAVA_HOME/lib/security/cacerts" + +# Create 'so' user +RUN addgroup -g 1000 so && adduser -S -u 1000 -G so -s /bin/sh so diff --git a/packages/docker/src/main/docker/docker-files/ca-certificates/onap-ca.crt b/packages/docker/src/main/docker/docker-files/ca-certificates/onap-ca.crt new file mode 100644 index 0000000..98f620c --- /dev/null +++ b/packages/docker/src/main/docker/docker-files/ca-certificates/onap-ca.crt @@ -0,0 +1,31 @@ +-----BEGIN CERTIFICATE----- +MIIFPjCCAyagAwIBAgIJAJ6u7cCnzrWdMA0GCSqGSIb3DQEBCwUAMCwxDjAMBgNV +BAsMBU9TQUFGMQ0wCwYDVQQKDARPTkFQMQswCQYDVQQGEwJVUzAeFw0xODA0MDUx +NDE1MjhaFw0zODAzMzExNDE1MjhaMCwxDjAMBgNVBAsMBU9TQUFGMQ0wCwYDVQQK +DARPTkFQMQswCQYDVQQGEwJVUzCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoC +ggIBAMA5pkgRs7NhGG4ew5JouhyYakgYUyFaG121+/h8qbSdt0hVQv56+EA41Yq7 +XGie7RYDQK9NmAFF3gruE+6X7wvJiChp+Cyd7sFMnb65uWhxEdxWTM2BJFrgfzUn +H8ZCxgaCo3XH4PzlKRy2LQQJEJECwl/RZmRCXijMt5e9h8XoZY/fKkKcZZUsWNCM +pTo266wjvA9MXLmdgReRj0+vrCjrNqy+htwJDztoiHWiYPqT6o8EvGcgjNqjlZx7 +NUNf8MfLDByqKF6+wRbHv1GKjn3/Vijd45Fv8riyRYROiFanvbV6jIfBkv8PZbXg +2VDWsYsgp8NAvMxK+iV8cO+Ck3lBI2GOPZbCEqpPVTYbLUz6sczAlCXwQoPzDIZY +wYa3eR/gYLY1gP2iEVHORag3bLPap9ZX5E8DZkzTNTjovvLk8KaCmfcaUMJsBtDd +ApcUitz10cnRyZc1sX3gE1f3DpzQM6t9C5sOVyRhDcSrKqqwb9m0Ss04XAS9FsqM +P3UWYQyqDXSxlUAYaX892u8mV1hxnt2gjb22RloXMM6TovM3sSrJS0wH+l1nznd6 +aFXftS/G4ZVIVZ/LfT1is4StoyPWZCwwwly1z8qJQ/zhip5NgZTxQw4mi7ww35DY +PdAQOCoajfSvFjqslQ/cPRi/MRCu079heVb5fQnnzVtnpFQRAgMBAAGjYzBhMB0G +A1UdDgQWBBRTVTPyS+vQUbHBeJrBKDF77+rtSTAfBgNVHSMEGDAWgBRTVTPyS+vQ +UbHBeJrBKDF77+rtSTAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBhjAN +BgkqhkiG9w0BAQsFAAOCAgEAPx/IaK94n02wPxpnYTy+LVLIxwdq/kawNd6IbiMz +L87zmNMDmHcGbfoRCj8OkhuggX9Lx1/CkhpXimuYsZOFQi5blr/u+v4mIbsgbmi9 +7j+cUHDP0zLycvSvxKHty51LwmaX9a4wkJl5zBU4O1sd/H9tWcEmwJ39ltKoBKBx +c94Zc3iMm5ytRWGj+0rKzLDAXEWpoZ5bE5PLJauA6UDCxDLfs3FwhbS7uDggxYvf +jySF5FCNET94oJ+m8s7VeHvoa8iPGKvXrIqdd7XDHnqJJlVKr7m9S0fMbyEB8ci2 +RtOXDt93ifY1uhoEtEykn4dqBSp8ezvNMnwoXdYPDvTd9uCAFeWFLVreBAWxd25h +PsBTkZA5hpa/rA+mKv6Af4VBViYr8cz4dZCsFChuioVebe9ighrfjB//qKepFjPF +CyjzKN1u0JKm/2x/ORqxkTONG8p3uDwoIOyimUcTtTMv42bfYD88RKakqSFXE9G+ +Z0LlaKABqfjK49o/tsAp+c5LoNlYllKhnetO3QAdraHwdmC36BhoghzR1jpX751A +cZn2VH3Q4XKyp01cJNCJIrua+A+bx6zh3RyW6zIIkbRCbET+UD+4mr8WIcSE3mtR +ZVlnhUDO4z9//WKMVzwS9Rh8/kuszrGFI1KQozXCHLrce3YP6RYZfOed79LXaRwX +dYY= +-----END CERTIFICATE----- diff --git a/packages/docker/src/main/docker/docker-files/configs/logging/logback-spring.xml b/packages/docker/src/main/docker/docker-files/configs/logging/logback-spring.xml new file mode 100644 index 0000000..693d8c4 --- /dev/null +++ b/packages/docker/src/main/docker/docker-files/configs/logging/logback-spring.xml @@ -0,0 +1,203 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ${errorPattern} + + + + + + + EXIT + + DENY + ACCEPT + + ${logs_dir:-.}/${auditLogName}.log + + ${logs_dir:-.}/${auditLogName}.%d{yyyy-MM-dd}.%i.log.zip + + ${maxFileSize} + ${maxHistory} + ${totalSizeCap} + + + ${auditPattern} + + + + + 256 + + + + + + + INVOKE-RETURN + + DENY + ACCEPT + + ${logs_dir:-.}/${metricsLogName}.log + + ${logs_dir:-.}/${metricsLogName}.%d{yyyy-MM-dd}.%i.log.zip + + ${maxFileSize} + ${maxHistory} + ${totalSizeCap} + + + ${metricPattern} + + + + + + 256 + + + + + + ERROR + ACCEPT + DENY + + ${logs_dir:-.}/${errorLogName}.log + + ${logs_dir:-.}/${errorLogName}.%d{yyyy-MM-dd}.%i.log.zip + + ${maxFileSize} + ${maxHistory} + ${totalSizeCap} + + + ${errorPattern} + + + + + 256 + + + + + + + INVOKE + INVOKE-RETURN + ENTRY + EXIT + + ACCEPT + DENY + + ${logs_dir:-.}/${debugLogName}.log + + ${logs_dir:-.}/${debugLogName}.%d{yyyy-MM-dd}.%i.log.zip + + ${maxFileSize} + ${maxHistory} + ${totalSizeCap} + + + ${debugPattern} + + + + + 256 + + true + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/packages/docker/src/main/docker/docker-files/scripts/.gitattributes b/packages/docker/src/main/docker/docker-files/scripts/.gitattributes new file mode 100644 index 0000000..b905d1d --- /dev/null +++ b/packages/docker/src/main/docker/docker-files/scripts/.gitattributes @@ -0,0 +1,5 @@ +# Default behavior +* text=auto + +# Files to have unix style line endings on checkout +*.sh text eol=lf \ No newline at end of file diff --git a/packages/docker/src/main/docker/docker-files/scripts/start-app.sh b/packages/docker/src/main/docker/docker-files/scripts/start-app.sh new file mode 100644 index 0000000..54ed9ed --- /dev/null +++ b/packages/docker/src/main/docker/docker-files/scripts/start-app.sh @@ -0,0 +1,89 @@ +#!/bin/sh +#temprary condition +if [ `id -u` = 0 ] +then + # Install certificates found in the /app/ca-certificates volume, if any. + + needUpdate=FALSE + + for certificate in `ls -1 /app/ca-certificates`; do + echo "Installing $certificate in /usr/local/share/ca-certificates" + # cp /app/ca-certificates/$certificate /usr/local/share/ca-certificates/$certificate + needUpdate=FALSE + done + + # Re-exec this script as the 'onap' user. + this=`readlink -f $0` + # exec su so -c "$this" +fi + +touch /app/app.jar + +if [ ! -z "$DB_HOST" -a -z "$DB_PORT" ]; then + export DB_PORT=3306 +fi + +if [ -z "${CONFIG_PATH}" ]; then + export CONFIG_PATH=/app/config/override.yaml +fi + +if [ "${SSL_DEBUG}" = "log" ]; then + export SSL_DEBUG="-Djavax.net.debug=all" +else + export SSL_DEBUG= +fi + +# Set java keystore and truststore options, if specified in the environment. + +jksargs= + +if [ ! -z "${KEYSTORE}" ]; then + jksargs="$jksargs -Dmso.load.ssl.client.keystore=true" + jksargs="$jksargs -Djavax.net.ssl.keyStore=$KEYSTORE" + jksargs="$jksargs -Djavax.net.ssl.keyStorePassword=${KEYSTORE_PASSWORD}" +fi + +if [ ! -z "${TRUSTSTORE}" ]; then + jksargs="$jksargs -Djavax.net.ssl.trustStore=${TRUSTSTORE}" + jksargs="$jksargs -Djavax.net.ssl.trustStorePassword=${TRUSTSTORE_PASSWORD}" +fi + +if [ -z "${ACTIVE_PROFILE}" ]; then + export ACTIVE_PROFILE="basic" +fi + +jvmargs="${JVM_ARGS} -Dspring.profiles.active=${ACTIVE_PROFILE} -Djava.security.egd=file:/dev/./urandom -Dlogs_dir=${LOG_PATH} -Dlogging.config=/app/logback-spring.xml $jksargs -Dspring.config.additional-location=$CONFIG_PATH ${SSL_DEBUG} ${DISABLE_SNI}" + + +read_properties(){ + while IFS="=" read -r key value; do + case "${key}" in + '#'*) ;; + *) + eKey=$(echo $key | tr '[:lower:]' '[:upper:]') + export "$eKey"="$value" + esac + done <<-EOF + $1 + EOF +} + + + +if [ -n "${AAF_SSL_CERTS_ENABLED}" ]; then +read_properties "$(head -n 4 /app/certs/.passphrases)" +fi + +echo "JVM Arguments: ${jvmargs}" + +java ${jvmargs} -jar app.jar +rc=$? + +echo "Application exiting with status code $rc" + +if [ ! -z "${EXIT_DELAY}" -a "${EXIT_DELAY}" != 0 ]; then + echo "Delaying $APP exit for $EXIT_DELAY seconds" + sleep $EXIT_DELAY +fi + +exit $rc diff --git a/packages/docker/src/main/docker/docker-files/scripts/wait-for.sh b/packages/docker/src/main/docker/docker-files/scripts/wait-for.sh new file mode 100644 index 0000000..2525821 --- /dev/null +++ b/packages/docker/src/main/docker/docker-files/scripts/wait-for.sh @@ -0,0 +1,85 @@ +#!/bin/sh +# https://github.com/Eficode/wait-for.git +# MIT License + +TIMEOUT=15 +QUIET=0 + +echoerr() { + if [ "$QUIET" -ne 1 ]; then printf "%s\n" "$*" 1>&2; fi +} + +usage() { + exitcode="$1" + cat << USAGE >&2 +Usage: + $cmdname host:port [-t timeout] [-- command args] + -q | --quiet Do not output any status messages + -t TIMEOUT | --timeout=timeout Timeout in seconds, zero for no timeout + -- COMMAND ARGS Execute command with args after the test finishes +USAGE + exit "$exitcode" +} + +wait_for() { + command="$*" + if [ "$QUIET" -ne 1 ]; then echo "$0: probing host $HOST port $PORT"; fi + for i in `seq $TIMEOUT` ; do + nc -z "$HOST" "$PORT" > /dev/null 2>&1 + result=$? + if [ $result -eq 0 ] ; then + if [ "$QUIET" -ne 1 ]; then echo "$0: operation succeeded on try $i"; fi + if [ -n "$command" ] ; then + if [ "$QUIET" -ne 1 ]; then echo "$0: exec-ing command $command"; fi + exec $command + fi + exit 0 + fi + if [ "$QUIET" -ne 1 ]; then echo "$0: sleeping after try $i"; fi + sleep 1 + done + echo "$0: Operation timed out" >&2 + exit 1 +} + +while [ $# -gt 0 ] +do + case "$1" in + *:* ) + HOST=$(printf "%s\n" "$1"| cut -d : -f 1) + PORT=$(printf "%s\n" "$1"| cut -d : -f 2) + shift 1 + ;; + -q | --quiet) + QUIET=1 + shift 1 + ;; + -t) + TIMEOUT="$2" + if [ "$TIMEOUT" = "" ]; then break; fi + shift 2 + ;; + --timeout=*) + TIMEOUT="${1#*=}" + shift 1 + ;; + --) + shift + break + ;; + --help) + usage 0 + ;; + *) + echoerr "Unknown argument: $1" + usage 1 + ;; + esac +done + +if [ "$HOST" = "" -o "$PORT" = "" ]; then + echoerr "Error: you need to provide a host and port to test." + usage 2 +fi + +wait_for "$@" diff --git a/packages/pom.xml b/packages/pom.xml new file mode 100644 index 0000000..83ed04d --- /dev/null +++ b/packages/pom.xml @@ -0,0 +1,35 @@ + + 4.0.0 + + org.onap.so.adapters.so-nssmf-adapter + so-nssmf-adapter + 1.8.0-SNAPSHOT + + packages + pom + 1.8.0-SNAPSHOT + SO NSSMF Adapter Packages + + + + + + default + + true + + + + + + docker + + docker + + + false + + + + \ No newline at end of file diff --git a/pom-format.properties b/pom-format.properties index 4452c2a..0831416 100755 --- a/pom-format.properties +++ b/pom-format.properties @@ -1,5 +1,5 @@ -maxLineLength=120 -wrapLongLines=true -tabInsteadOfSpaces=false -tabWidth=2 +maxLineLength=120 +wrapLongLines=true +tabInsteadOfSpaces=false +tabWidth=2 splitMultiAttrs=false \ No newline at end of file diff --git a/pom.xml b/pom.xml old mode 100644 new mode 100755 index 28392a7..1a3a7d7 --- a/pom.xml +++ b/pom.xml @@ -1,263 +1,112 @@ - - - - 4.0.0 - - org.onap.so - adapters - 1.8.0-SNAPSHOT - - org.onap.so.adapters - so-nssmf-adapter - jar - so-nssmf-adapter - Web service endpoint for nssmf operations - - - - org.springframework.boot - spring-boot-dependencies - ${springboot.version} - pom - import - - - - - ${project.artifactId}-${project.version} - - - org.apache.maven.plugins - maven-deploy-plugin - - true - - - - org.springframework.boot - spring-boot-maven-plugin - - org.onap.so.adapters.nssmf.MSONssmfApplication - - - - - repackage - - - - - - org.jacoco - jacoco-maven-plugin - - - net.revelc.code.formatter - formatter-maven-plugin - 2.9.0 - - - format-java - - format - - process-sources - - ${format.skipExecute} - ${project.basedir}/onap-eclipse-format.xml - - - - format-xml - - format - - process-sources - - ${format.skipExecute} - ${project.basedir} - ${project.basedir}/pom-format.properties - - pom.xml - - - - - validate-java - - validate - - - ${format.skipValidate} - ${project.basedir}/onap-eclipse-format.xml - - - - validate-poms - - validate - - - ${format.skipValidate} - ${project.basedir}/pom-format.properties - - pom.xml - - - - - - - com.fasterxml.jackson.core - jackson-annotations - 2.9.8 - - - - - org.codehaus.mojo - exec-maven-plugin - 1.6.0 - - - docker-build - install - - exec - - - Dockerfile - docker - ${project.basedir} - - build - -t - ${project.artifactId}:${project.version} - . - - - ${project.artifactId}-${project.version}.jar - ${project.artifactId} - - - - - - - - - src/main/resources - true - - **/*.p12 - **/*.jks - - - - src/main/resources - false - - **/*.p12 - **/*.jks - - - - - - - org.springframework.boot - spring-boot-starter-actuator - - - org.springframework.boot - spring-boot-starter-web - - - org.springframework.boot - spring-boot-starter-jdbc - - - org.apache.tomcat - tomcat-jdbc - - - - - org.apache.cxf - cxf-spring-boot-starter-jaxws - - - org.apache.cxf - cxf-spring-boot-starter-jaxrs - - - org.apache.cxf - cxf-rt-rs-service-description-swagger - - - org.springframework.boot - spring-boot-starter-data-jpa - - - org.springframework.boot - spring-boot-starter-test - test - - - org.onap.so - mso-requests-db - ${project.version} - - - org.onap.so - mso-requests-db-repositories - ${project.version} - - - org.mariadb.jdbc - mariadb-java-client - - - ch.vorburger.mariaDB4j - mariaDB4j - 2.2.3 - test - - - org.springframework.boot - spring-boot-configuration-processor - true - - - com.squareup.okhttp3 - okhttp - 3.14.0 - test - - - org.projectlombok - lombok - - - + + 4.0.0 + + org.onap.so + so + 1.8.0-SNAPSHOT + + org.onap.so.adapters.so-nssmf-adapter + so-nssmf-adapter + 1.8.0-SNAPSHOT + SO NSSMF Adapter + pom + + + 11 + 11 + UTF-8 + UTF-8 + 2.3.1 + 1.8.2 + 2.7.2 + 1.3.5 + 1.0.1 + 1.5.21 + 3.14.0 + 2.7.5 + 1.13.0 + 2.3.6.RELEASE + 2.3.0 + 0.11 + 2.2 + 3.4.1 + 1.8.0-SNAPSHOT + + + + + + org.apache.maven.plugins + maven-compiler-plugin + + ${version.java.compiler} + ${version.java.compiler} + + + + org.apache.maven.plugins + maven-deploy-plugin + + true + + + + net.revelc.code.formatter + formatter-maven-plugin + 2.9.0 + + + format-java + + format + + process-sources + + true + + + + format-xml + + format + + process-sources + + true + + pom.xml + + + + + validate-java + + validate + + + true + + + + validate-poms + + validate + + + true + + pom.xml + + + + + + + + + + so-nssmf-adapter-application + packages + + diff --git a/scripts/.gitattributes b/scripts/.gitattributes deleted file mode 100644 index b905d1d..0000000 --- a/scripts/.gitattributes +++ /dev/null @@ -1,5 +0,0 @@ -# Default behavior -* text=auto - -# Files to have unix style line endings on checkout -*.sh text eol=lf \ No newline at end of file diff --git a/scripts/start-app.sh b/scripts/start-app.sh deleted file mode 100755 index 54ed9ed..0000000 --- a/scripts/start-app.sh +++ /dev/null @@ -1,89 +0,0 @@ -#!/bin/sh -#temprary condition -if [ `id -u` = 0 ] -then - # Install certificates found in the /app/ca-certificates volume, if any. - - needUpdate=FALSE - - for certificate in `ls -1 /app/ca-certificates`; do - echo "Installing $certificate in /usr/local/share/ca-certificates" - # cp /app/ca-certificates/$certificate /usr/local/share/ca-certificates/$certificate - needUpdate=FALSE - done - - # Re-exec this script as the 'onap' user. - this=`readlink -f $0` - # exec su so -c "$this" -fi - -touch /app/app.jar - -if [ ! -z "$DB_HOST" -a -z "$DB_PORT" ]; then - export DB_PORT=3306 -fi - -if [ -z "${CONFIG_PATH}" ]; then - export CONFIG_PATH=/app/config/override.yaml -fi - -if [ "${SSL_DEBUG}" = "log" ]; then - export SSL_DEBUG="-Djavax.net.debug=all" -else - export SSL_DEBUG= -fi - -# Set java keystore and truststore options, if specified in the environment. - -jksargs= - -if [ ! -z "${KEYSTORE}" ]; then - jksargs="$jksargs -Dmso.load.ssl.client.keystore=true" - jksargs="$jksargs -Djavax.net.ssl.keyStore=$KEYSTORE" - jksargs="$jksargs -Djavax.net.ssl.keyStorePassword=${KEYSTORE_PASSWORD}" -fi - -if [ ! -z "${TRUSTSTORE}" ]; then - jksargs="$jksargs -Djavax.net.ssl.trustStore=${TRUSTSTORE}" - jksargs="$jksargs -Djavax.net.ssl.trustStorePassword=${TRUSTSTORE_PASSWORD}" -fi - -if [ -z "${ACTIVE_PROFILE}" ]; then - export ACTIVE_PROFILE="basic" -fi - -jvmargs="${JVM_ARGS} -Dspring.profiles.active=${ACTIVE_PROFILE} -Djava.security.egd=file:/dev/./urandom -Dlogs_dir=${LOG_PATH} -Dlogging.config=/app/logback-spring.xml $jksargs -Dspring.config.additional-location=$CONFIG_PATH ${SSL_DEBUG} ${DISABLE_SNI}" - - -read_properties(){ - while IFS="=" read -r key value; do - case "${key}" in - '#'*) ;; - *) - eKey=$(echo $key | tr '[:lower:]' '[:upper:]') - export "$eKey"="$value" - esac - done <<-EOF - $1 - EOF -} - - - -if [ -n "${AAF_SSL_CERTS_ENABLED}" ]; then -read_properties "$(head -n 4 /app/certs/.passphrases)" -fi - -echo "JVM Arguments: ${jvmargs}" - -java ${jvmargs} -jar app.jar -rc=$? - -echo "Application exiting with status code $rc" - -if [ ! -z "${EXIT_DELAY}" -a "${EXIT_DELAY}" != 0 ]; then - echo "Delaying $APP exit for $EXIT_DELAY seconds" - sleep $EXIT_DELAY -fi - -exit $rc diff --git a/scripts/wait-for.sh b/scripts/wait-for.sh deleted file mode 100755 index 2525821..0000000 --- a/scripts/wait-for.sh +++ /dev/null @@ -1,85 +0,0 @@ -#!/bin/sh -# https://github.com/Eficode/wait-for.git -# MIT License - -TIMEOUT=15 -QUIET=0 - -echoerr() { - if [ "$QUIET" -ne 1 ]; then printf "%s\n" "$*" 1>&2; fi -} - -usage() { - exitcode="$1" - cat << USAGE >&2 -Usage: - $cmdname host:port [-t timeout] [-- command args] - -q | --quiet Do not output any status messages - -t TIMEOUT | --timeout=timeout Timeout in seconds, zero for no timeout - -- COMMAND ARGS Execute command with args after the test finishes -USAGE - exit "$exitcode" -} - -wait_for() { - command="$*" - if [ "$QUIET" -ne 1 ]; then echo "$0: probing host $HOST port $PORT"; fi - for i in `seq $TIMEOUT` ; do - nc -z "$HOST" "$PORT" > /dev/null 2>&1 - result=$? - if [ $result -eq 0 ] ; then - if [ "$QUIET" -ne 1 ]; then echo "$0: operation succeeded on try $i"; fi - if [ -n "$command" ] ; then - if [ "$QUIET" -ne 1 ]; then echo "$0: exec-ing command $command"; fi - exec $command - fi - exit 0 - fi - if [ "$QUIET" -ne 1 ]; then echo "$0: sleeping after try $i"; fi - sleep 1 - done - echo "$0: Operation timed out" >&2 - exit 1 -} - -while [ $# -gt 0 ] -do - case "$1" in - *:* ) - HOST=$(printf "%s\n" "$1"| cut -d : -f 1) - PORT=$(printf "%s\n" "$1"| cut -d : -f 2) - shift 1 - ;; - -q | --quiet) - QUIET=1 - shift 1 - ;; - -t) - TIMEOUT="$2" - if [ "$TIMEOUT" = "" ]; then break; fi - shift 2 - ;; - --timeout=*) - TIMEOUT="${1#*=}" - shift 1 - ;; - --) - shift - break - ;; - --help) - usage 0 - ;; - *) - echoerr "Unknown argument: $1" - usage 1 - ;; - esac -done - -if [ "$HOST" = "" -o "$PORT" = "" ]; then - echoerr "Error: you need to provide a host and port to test." - usage 2 -fi - -wait_for "$@" diff --git a/so-nssmf-adapter-application/pom.xml b/so-nssmf-adapter-application/pom.xml new file mode 100755 index 0000000..f380946 --- /dev/null +++ b/so-nssmf-adapter-application/pom.xml @@ -0,0 +1,179 @@ + + + + 4.0.0 + + org.onap.so.adapters.so-nssmf-adapter + so-nssmf-adapter + 1.8.0-SNAPSHOT + + so-nssmf-adapter-application + 1.8.0-SNAPSHOT + SO NSSMF Application Jar + + ${project.artifactId}-${project.version} + + + + org.springframework.boot + spring-boot-maven-plugin + + org.onap.so.adapters.nssmf.MSONssmfApplication + + + + + repackage + + + + + + org.apache.maven.plugins + maven-jar-plugin + + + original + + + + + org.jacoco + jacoco-maven-plugin + + + org.apache.maven.plugins + maven-surefire-plugin + + + DEBUG + + 2 + suites + false + 1 + + + + + + src/main/resources + true + + **/*.p12 + **/*.jks + + + + src/main/resources + false + + **/*.p12 + **/*.jks + + + + + + + org.springframework.boot + spring-boot-starter-actuator + + + org.springframework.boot + spring-boot-starter-web + + + org.springframework.boot + spring-boot-starter-jdbc + + + org.apache.tomcat + tomcat-jdbc + + + + + com.fasterxml.jackson.core + jackson-annotations + 2.9.8 + + + org.apache.cxf + cxf-spring-boot-starter-jaxws + + + org.apache.cxf + cxf-spring-boot-starter-jaxrs + + + org.apache.cxf + cxf-rt-rs-service-description-swagger + + + org.springframework.boot + spring-boot-starter-data-jpa + + + org.springframework.boot + spring-boot-starter-test + test + + + org.onap.so + mso-requests-db + ${project.version} + + + org.onap.so + mso-requests-db-repositories + ${project.version} + + + org.mariadb.jdbc + mariadb-java-client + + + ch.vorburger.mariaDB4j + mariaDB4j + 2.2.3 + test + + + org.springframework.boot + spring-boot-configuration-processor + true + + + com.squareup.okhttp3 + okhttp + 3.14.0 + test + + + org.projectlombok + lombok + + + diff --git a/so-nssmf-adapter-application/src/main/java/org/onap/so/adapters/nssmf/MSONssmfApplication.java b/so-nssmf-adapter-application/src/main/java/org/onap/so/adapters/nssmf/MSONssmfApplication.java new file mode 100644 index 0000000..ff71837 --- /dev/null +++ b/so-nssmf-adapter-application/src/main/java/org/onap/so/adapters/nssmf/MSONssmfApplication.java @@ -0,0 +1,33 @@ +/*- + * ============LICENSE_START======================================================= + * ONAP - SO + * ================================================================================ + * Copyright (C) 2020 Huawei Technologies Co., Ltd. All rights reserved. + * ================================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============LICENSE_END========================================================= + */ + +package org.onap.so.adapters.nssmf; + + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; + +@SpringBootApplication(scanBasePackages = {"org.onap.so"}) +public class MSONssmfApplication { + + public static void main(String... args) { + SpringApplication.run(MSONssmfApplication.class, args); + } +} diff --git a/so-nssmf-adapter-application/src/main/java/org/onap/so/adapters/nssmf/annotation/RequestLogger.java b/so-nssmf-adapter-application/src/main/java/org/onap/so/adapters/nssmf/annotation/RequestLogger.java new file mode 100644 index 0000000..506ef3c --- /dev/null +++ b/so-nssmf-adapter-application/src/main/java/org/onap/so/adapters/nssmf/annotation/RequestLogger.java @@ -0,0 +1,31 @@ +/*- + * ============LICENSE_START======================================================= + * ONAP - SO + * ================================================================================ + # Copyright (c) 2020, CMCC Technologies Co., Ltd. + # + # Licensed under the Apache License, Version 2.0 (the "License") + # you may not use this file except in compliance with the License. + # You may obtain a copy of the License at + # + # http://www.apache.org/licenses/LICENSE-2.0 + # + # Unless required by applicable law or agreed to in writing, software + # distributed under the License is distributed on an "AS IS" BASIS, + # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + # See the License for the specific language governing permissions and + # limitations under the License. + * ============LICENSE_END========================================================= + */ + +package org.onap.so.adapters.nssmf.annotation; + + +import java.lang.annotation.*; + +@Target({ElementType.METHOD, ElementType.TYPE}) +@Retention(RetentionPolicy.RUNTIME) +@Documented +public @interface RequestLogger { + boolean ignore() default false; +} diff --git a/so-nssmf-adapter-application/src/main/java/org/onap/so/adapters/nssmf/annotation/ServiceLogger.java b/so-nssmf-adapter-application/src/main/java/org/onap/so/adapters/nssmf/annotation/ServiceLogger.java new file mode 100644 index 0000000..806c5b3 --- /dev/null +++ b/so-nssmf-adapter-application/src/main/java/org/onap/so/adapters/nssmf/annotation/ServiceLogger.java @@ -0,0 +1,36 @@ +/*- + * ============LICENSE_START======================================================= + * ONAP - SO + * ================================================================================ + # Copyright (c) 2020, CMCC Technologies Co., Ltd. + # + # Licensed under the Apache License, Version 2.0 (the "License") + # you may not use this file except in compliance with the License. + # You may obtain a copy of the License at + # + # http://www.apache.org/licenses/LICENSE-2.0 + # + # Unless required by applicable law or agreed to in writing, software + # distributed under the License is distributed on an "AS IS" BASIS, + # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + # See the License for the specific language governing permissions and + # limitations under the License. + * ============LICENSE_END========================================================= + */ + +package org.onap.so.adapters.nssmf.annotation; + + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +@Target({ElementType.METHOD, ElementType.TYPE}) +@Retention(RetentionPolicy.RUNTIME) +public @interface ServiceLogger { + + String value() default ""; + + boolean ignore() default false; +} diff --git a/so-nssmf-adapter-application/src/main/java/org/onap/so/adapters/nssmf/config/NssmfAdapterConfig.java b/so-nssmf-adapter-application/src/main/java/org/onap/so/adapters/nssmf/config/NssmfAdapterConfig.java new file mode 100644 index 0000000..85e79ad --- /dev/null +++ b/so-nssmf-adapter-application/src/main/java/org/onap/so/adapters/nssmf/config/NssmfAdapterConfig.java @@ -0,0 +1,36 @@ +/*- + * ============LICENSE_START======================================================= + * ONAP - SO + * ================================================================================ + # Copyright (c) 2020, CMCC Technologies Co., Ltd. + # + # Licensed under the Apache License, Version 2.0 (the "License") + # you may not use this file except in compliance with the License. + # You may obtain a copy of the License at + # + # http://www.apache.org/licenses/LICENSE-2.0 + # + # Unless required by applicable law or agreed to in writing, software + # distributed under the License is distributed on an "AS IS" BASIS, + # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + # See the License for the specific language governing permissions and + # limitations under the License. + * ============LICENSE_END========================================================= + */ + +package org.onap.so.adapters.nssmf.config; + +import lombok.Getter; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Configuration; + +@Configuration +@Getter +public class NssmfAdapterConfig { + + @Value("${mso.infra.endpoint}") + private String infraEndpoint; + + @Value("${mso.infra.auth}") + private String infraAuth; +} diff --git a/so-nssmf-adapter-application/src/main/java/org/onap/so/adapters/nssmf/config/RequestDbConfig.java b/so-nssmf-adapter-application/src/main/java/org/onap/so/adapters/nssmf/config/RequestDbConfig.java new file mode 100644 index 0000000..171cdab --- /dev/null +++ b/so-nssmf-adapter-application/src/main/java/org/onap/so/adapters/nssmf/config/RequestDbConfig.java @@ -0,0 +1,68 @@ +/*- + * ============LICENSE_START======================================================= + * ONAP - SO + * ================================================================================ + * Copyright (C) 2020 Huawei Technologies Co., Ltd. All rights reserved. + * ================================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============LICENSE_END========================================================= + */ + +package org.onap.so.adapters.nssmf.config; + +import javax.persistence.EntityManagerFactory; +import javax.sql.DataSource; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.boot.jdbc.DataSourceBuilder; +import org.springframework.boot.orm.jpa.EntityManagerFactoryBuilder; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Primary; +import org.springframework.context.annotation.Profile; +import org.springframework.data.jpa.repository.config.EnableJpaRepositories; +import org.springframework.orm.jpa.JpaTransactionManager; +import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean; +import org.springframework.transaction.PlatformTransactionManager; +import org.springframework.transaction.annotation.EnableTransactionManagement; + +@Profile({"!test"}) +@Configuration +@EnableTransactionManagement +@EnableJpaRepositories(entityManagerFactoryRef = "requestEntityManagerFactory", + transactionManagerRef = "requestTransactionManager", basePackages = {"org.onap.so.db.request.data.repository"}) +public class RequestDbConfig { + + @Primary + @Bean(name = "requestDataSource") + @ConfigurationProperties(prefix = "spring.datasource") + public DataSource dataSource() { + return DataSourceBuilder.create().build(); + } + + @Primary + @Bean(name = "requestEntityManagerFactory") + public LocalContainerEntityManagerFactoryBean entityManagerFactory(EntityManagerFactoryBuilder builder, + @Qualifier("requestDataSource") DataSource dataSource) { + return builder.dataSource(dataSource).packages("org.onap.so.db.request.beans").persistenceUnit("requestDB") + .build(); + } + + @Primary + @Bean(name = "requestTransactionManager") + public PlatformTransactionManager transactionManager( + @Qualifier("requestEntityManagerFactory") EntityManagerFactory entityManagerFactory) { + return new JpaTransactionManager(entityManagerFactory); + } + +} diff --git a/so-nssmf-adapter-application/src/main/java/org/onap/so/adapters/nssmf/consts/NssmfAdapterConsts.java b/so-nssmf-adapter-application/src/main/java/org/onap/so/adapters/nssmf/consts/NssmfAdapterConsts.java new file mode 100644 index 0000000..98a5a19 --- /dev/null +++ b/so-nssmf-adapter-application/src/main/java/org/onap/so/adapters/nssmf/consts/NssmfAdapterConsts.java @@ -0,0 +1,186 @@ +/*- + * ============LICENSE_START======================================================= + * ONAP - SO + * ================================================================================ + # Copyright (c) 2020, CMCC Technologies Co., Ltd. + # + # Licensed under the Apache License, Version 2.0 (the "License") + # you may not use this file except in compliance with the License. + # You may obtain a copy of the License at + # + # http://www.apache.org/licenses/LICENSE-2.0 + # + # Unless required by applicable law or agreed to in writing, software + # distributed under the License is distributed on an "AS IS" BASIS, + # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + # See the License for the specific language governing permissions and + # limitations under the License. + * ============LICENSE_END========================================================= + */ + +package org.onap.so.adapters.nssmf.consts; + +import org.onap.so.adapters.nssmf.entity.NssmfUrlInfo; +import org.onap.so.adapters.nssmf.enums.ActionType; +import org.onap.so.adapters.nssmf.enums.ExecutorType; +import org.onap.so.adapters.nssmf.enums.HttpMethod; +import org.onap.so.beans.nsmf.NetworkType; +import java.util.HashMap; +import java.util.Map; + +public class NssmfAdapterConsts { + + public final static String ONAP_INTERNAL_TAG = "ONAP_internal"; + + public final static String CURRENT_INTERNAL_NSSMF_API_VERSION = "v1"; + + private static Map urlInfoMap = new HashMap<>(); + + private final static String EXTERNAL_CN_ALLOCATE_URL = "/api/rest/provMns/{apiVersion}/NSS/SliceProfiles"; + + private final static String EXTERNAL_TN_ALLOCATE_URL = "/api/rest/provMns/{apiVersion}/tn/NSS/SliceProfiles"; + + private final static String EXTERNAL_AN_ALLOCATE_URL = "/ObjectManagement/NSS/SliceProfiles"; + + private final static String INTERNAL_ALLOCATE_URL = "/onap/so/infra/3gppservices/{apiVersion}/allocate"; + + private final static String EXTERNAL_CN_DEALLOCATE_URL = + "/api/rest/provMns/{apiVersion}/NSS/SliceProfiles/{sliceProfileId}"; + + private final static String EXTERNAL_TN_DEALLOCATE_URL = + "/api/rest/provMns/{apiVersion}/tn/NSS/SliceProfiles/{sliceProfileId}"; + + private final static String EXTERNAL_AN_DEALLOCATE_URL = "/ObjectManagement/NSS/SliceProfiles/{sliceProfileId}"; + + private final static String INTERNAL_DEALLOCATE_URL = "/onap/so/infra/3gppservices/{apiVersion}/deAllocate"; + + private final static String EXTERNAL_CN_ACTIVATE_URL = "/api/rest/provMns/{apiVersion}/NSS/{snssai}/activation"; + + private final static String EXTERNAL_TN_ACTIVATE_URL = "/api/rest/provMns/{apiVersion}/tn/NSS/{snssai}/activation"; + + private final static String EXTERNAL_AN_ACTIVATE_URL = "/api/rest/provMns/{apiVersion}/an/NSS/{snssai}/activations"; + + private final static String INTERNAL_ACTIVATE_URL = "/onap/so/infra/3gppservices/{apiVersion}/activate"; + + private final static String EXTERNAL_CN_DEACTIVATE_URL = "/api/rest/provMns/{apiVersion}/NSS/{snssai}/deactivation"; + + private final static String EXTERNAL_TN_DEACTIVATE_URL = + "/api/rest/provMns/{apiVersion}/tn/NSS/{snssai}/deactivation"; + + private final static String EXTERNAL_AN_DEACTIVATE_URL = + "/api/rest/provMns/{apiVersion}/an/NSS/{snssai}/deactivation"; + + private final static String INTERNAL_DEACTIVATE_URL = "/onap/so/infra/3gppservices/{apiVersion}/deActivate"; + + // + private final static String EXTERNAL_CN_TERMINATE_URL = + "/api/rest/provMns/{apiVersion}/NSS/SliceProfiles/{SliceProfileId}"; + + private final static String EXTERNAL_TN_TERMINATE_URL = + "/api/rest/provMns/{apiVersion}/tn/NSS/SliceProfiles/{SliceProfileId}"; + + private final static String EXTERNAL_AN_TERMINATE_URL = + "/api/rest/provMns/{apiVersion}/an/NSS/SliceProfiles/{SliceProfileId}"; + + private final static String INTERNAL_TERMINATE_URL = "/onap/so/infra/3gppservices/{apiVersion}/terminate"; + + // + private final static String EXTERNAL_AN_MODIFY_URL = + "/api/rest/provMns/{apiVersion}/an/NSS/SliceProfiles/{SliceProfileId}"; + + private final static String INTERNAL_MODIFY_URL = "/onap/so/infra/3gppservices/{apiVersion}/modify"; + + // + private final static String EXTERNAL_QUERY_JOB_STATUS = "/api/rest/provMns/{apiVersion}/NSS/jobs/{jobId}"; + + private final static String INTERNAL_QUERY_SUB_NET_CAPABILITY = + "/onap/so/infra/3gppservices/{apiVersion}/subnetCapabilityQuery"; + + static { + urlInfoMap.put(generateKey(ExecutorType.EXTERNAL, NetworkType.ACCESS, ActionType.ALLOCATE), + new NssmfUrlInfo(EXTERNAL_AN_ALLOCATE_URL, HttpMethod.POST)); + urlInfoMap.put(generateKey(ExecutorType.EXTERNAL, NetworkType.TRANSPORT, ActionType.ALLOCATE), + new NssmfUrlInfo(EXTERNAL_TN_ALLOCATE_URL, HttpMethod.POST)); + urlInfoMap.put(generateKey(ExecutorType.EXTERNAL, NetworkType.CORE, ActionType.ALLOCATE), + new NssmfUrlInfo(EXTERNAL_CN_ALLOCATE_URL, HttpMethod.POST)); + urlInfoMap.put(generateKey(ExecutorType.INTERNAL, null, ActionType.ALLOCATE), + new NssmfUrlInfo(INTERNAL_ALLOCATE_URL, HttpMethod.POST)); + + urlInfoMap.put(generateKey(ExecutorType.EXTERNAL, NetworkType.ACCESS, ActionType.DEALLOCATE), + new NssmfUrlInfo(EXTERNAL_AN_DEALLOCATE_URL, HttpMethod.DELETE)); + urlInfoMap.put(generateKey(ExecutorType.EXTERNAL, NetworkType.TRANSPORT, ActionType.DEALLOCATE), + new NssmfUrlInfo(EXTERNAL_TN_DEALLOCATE_URL, HttpMethod.DELETE)); + urlInfoMap.put(generateKey(ExecutorType.EXTERNAL, NetworkType.CORE, ActionType.DEALLOCATE), + new NssmfUrlInfo(EXTERNAL_CN_DEALLOCATE_URL, HttpMethod.DELETE)); + urlInfoMap.put(generateKey(ExecutorType.INTERNAL, null, ActionType.DEALLOCATE), + new NssmfUrlInfo(INTERNAL_DEALLOCATE_URL, HttpMethod.DELETE)); + + urlInfoMap.put(generateKey(ExecutorType.EXTERNAL, NetworkType.ACCESS, ActionType.ACTIVATE), + new NssmfUrlInfo(EXTERNAL_AN_ACTIVATE_URL, HttpMethod.PUT)); + urlInfoMap.put(generateKey(ExecutorType.EXTERNAL, NetworkType.TRANSPORT, ActionType.ACTIVATE), + new NssmfUrlInfo(EXTERNAL_TN_ACTIVATE_URL, HttpMethod.PUT)); + urlInfoMap.put(generateKey(ExecutorType.EXTERNAL, NetworkType.CORE, ActionType.ACTIVATE), + new NssmfUrlInfo(EXTERNAL_CN_ACTIVATE_URL, HttpMethod.PUT)); + urlInfoMap.put(generateKey(ExecutorType.INTERNAL, null, ActionType.ACTIVATE), + new NssmfUrlInfo(INTERNAL_ACTIVATE_URL, HttpMethod.POST)); + + urlInfoMap.put(generateKey(ExecutorType.EXTERNAL, NetworkType.ACCESS, ActionType.DEACTIVATE), + new NssmfUrlInfo(EXTERNAL_AN_DEACTIVATE_URL, HttpMethod.PUT)); + urlInfoMap.put(generateKey(ExecutorType.EXTERNAL, NetworkType.TRANSPORT, ActionType.DEACTIVATE), + new NssmfUrlInfo(EXTERNAL_TN_DEACTIVATE_URL, HttpMethod.PUT)); + urlInfoMap.put(generateKey(ExecutorType.EXTERNAL, NetworkType.CORE, ActionType.DEACTIVATE), + new NssmfUrlInfo(EXTERNAL_CN_DEACTIVATE_URL, HttpMethod.PUT)); + urlInfoMap.put(generateKey(ExecutorType.INTERNAL, null, ActionType.DEACTIVATE), + new NssmfUrlInfo(INTERNAL_DEACTIVATE_URL, HttpMethod.PUT)); + + urlInfoMap.put(generateKey(ExecutorType.EXTERNAL, NetworkType.ACCESS, ActionType.TERMINATE), + new NssmfUrlInfo(EXTERNAL_AN_TERMINATE_URL, HttpMethod.DELETE)); + urlInfoMap.put(generateKey(ExecutorType.EXTERNAL, NetworkType.TRANSPORT, ActionType.TERMINATE), + new NssmfUrlInfo(EXTERNAL_TN_TERMINATE_URL, HttpMethod.DELETE)); + urlInfoMap.put(generateKey(ExecutorType.EXTERNAL, NetworkType.CORE, ActionType.TERMINATE), + new NssmfUrlInfo(EXTERNAL_CN_TERMINATE_URL, HttpMethod.DELETE)); + urlInfoMap.put(generateKey(ExecutorType.INTERNAL, null, ActionType.TERMINATE), + new NssmfUrlInfo(INTERNAL_TERMINATE_URL, HttpMethod.DELETE)); + + urlInfoMap.put(generateKey(ExecutorType.EXTERNAL, NetworkType.ACCESS, ActionType.MODIFY), + new NssmfUrlInfo(EXTERNAL_AN_MODIFY_URL, HttpMethod.PUT)); + urlInfoMap.put(generateKey(ExecutorType.EXTERNAL, NetworkType.CORE, ActionType.MODIFY), + new NssmfUrlInfo(EXTERNAL_CN_ALLOCATE_URL, HttpMethod.PUT)); + urlInfoMap.put(generateKey(ExecutorType.INTERNAL, null, ActionType.MODIFY), + new NssmfUrlInfo(INTERNAL_MODIFY_URL, HttpMethod.PUT)); + + + urlInfoMap.put(generateKey(ExecutorType.EXTERNAL, NetworkType.CORE, ActionType.QUERY_JOB_STATUS), + new NssmfUrlInfo(EXTERNAL_QUERY_JOB_STATUS, HttpMethod.GET)); + urlInfoMap.put(generateKey(ExecutorType.EXTERNAL, NetworkType.ACCESS, ActionType.QUERY_JOB_STATUS), + new NssmfUrlInfo(EXTERNAL_QUERY_JOB_STATUS, HttpMethod.GET)); + urlInfoMap.put(generateKey(ExecutorType.EXTERNAL, NetworkType.TRANSPORT, ActionType.QUERY_JOB_STATUS), + new NssmfUrlInfo(EXTERNAL_QUERY_JOB_STATUS, HttpMethod.GET)); + + urlInfoMap.put(generateKey(ExecutorType.INTERNAL, null, ActionType.QUERY_SUB_NET_CAPABILITY), + new NssmfUrlInfo(INTERNAL_QUERY_SUB_NET_CAPABILITY, HttpMethod.GET)); + } + + /** + * get nssmf url info from consts + * + * @param executorType {@link ExecutorType} + * @param networkType {@link NetworkType} + * @param actionType {@link ActionType} + * @return {@link NssmfUrlInfo} + */ + public static NssmfUrlInfo getNssmfUrlInfo(ExecutorType executorType, NetworkType networkType, + ActionType actionType) { + + return urlInfoMap.get(generateKey(executorType, networkType, actionType)); + } + + private static String generateKey(ExecutorType executorType, NetworkType networkType, ActionType actionType) { + if (ExecutorType.EXTERNAL.equals(executorType)) { + return executorType.name() + "_" + networkType.name() + "_" + actionType.name(); + } + return executorType.name() + "_" + actionType.name(); + } + + +} diff --git a/so-nssmf-adapter-application/src/main/java/org/onap/so/adapters/nssmf/controller/NssmfAdapterController.java b/so-nssmf-adapter-application/src/main/java/org/onap/so/adapters/nssmf/controller/NssmfAdapterController.java new file mode 100644 index 0000000..ded0d17 --- /dev/null +++ b/so-nssmf-adapter-application/src/main/java/org/onap/so/adapters/nssmf/controller/NssmfAdapterController.java @@ -0,0 +1,59 @@ +package org.onap.so.adapters.nssmf.controller; + +import org.onap.so.adapters.nssmf.annotation.RequestLogger; +import org.onap.so.adapters.nssmf.service.NssmfManagerService; +import org.onap.so.beans.nsmf.*; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.*; +import static javax.ws.rs.core.MediaType.APPLICATION_JSON; + +@RestController +@RequestMapping(value = "/api/rest/provMns/v1", produces = {APPLICATION_JSON}, consumes = {APPLICATION_JSON}) +@RequestLogger +public class NssmfAdapterController { + + @Autowired + private NssmfManagerService nssmfManagerService; + + @PostMapping(value = "/NSS/SliceProfiles") + public ResponseEntity allocateNssi(@RequestBody NssmfAdapterNBIRequest nbiRequest) { + return nssmfManagerService.allocateNssi(nbiRequest); + } + + @PostMapping(value = "/NSS/SliceProfiles/{sliceProfileId}") + public ResponseEntity deAllocateNssi(@RequestBody NssmfAdapterNBIRequest nbiRequest, + @PathVariable("sliceProfileId") final String sliceProfileId) { + return nssmfManagerService.deAllocateNssi(nbiRequest, sliceProfileId); + } + + + @PostMapping(value = "/NSS/{snssai}/activation") + public ResponseEntity activateNssi(@RequestBody NssmfAdapterNBIRequest nbiRequest, + @PathVariable("snssai") String snssai) { + return nssmfManagerService.activateNssi(nbiRequest, snssai); + } + + @PostMapping(value = "/NSS/{snssai}/deactivation") + public ResponseEntity deactivateNssi(@RequestBody NssmfAdapterNBIRequest nbiRequest, + @PathVariable("snssai") String snssai) { + return nssmfManagerService.deActivateNssi(nbiRequest, snssai); + } + + @PostMapping(value = "/NSS/jobs/{jobId}") + public ResponseEntity queryJobStatus(@RequestBody NssmfAdapterNBIRequest nbiRequest, + @PathVariable("jobId") String jobId) { + return nssmfManagerService.queryJobStatus(nbiRequest, jobId); + } + + @PostMapping(value = "/NSS/NSSISelectionCapability") + public ResponseEntity queryNSSISelectionCapability(@RequestBody NssmfAdapterNBIRequest nbiRequest) { + return nssmfManagerService.queryNSSISelectionCapability(nbiRequest); + } + + @PostMapping(value = "/NSS/subnetCapabilityQuery") + public ResponseEntity querySubnetCapability(@RequestBody NssmfAdapterNBIRequest nbiRequest) { + return nssmfManagerService.querySubnetCapability(nbiRequest); + } + +} diff --git a/so-nssmf-adapter-application/src/main/java/org/onap/so/adapters/nssmf/entity/ErrorResponse.java b/so-nssmf-adapter-application/src/main/java/org/onap/so/adapters/nssmf/entity/ErrorResponse.java new file mode 100644 index 0000000..cdd2ff8 --- /dev/null +++ b/so-nssmf-adapter-application/src/main/java/org/onap/so/adapters/nssmf/entity/ErrorResponse.java @@ -0,0 +1,63 @@ +/*- + * ============LICENSE_START======================================================= + * ONAP - SO + * ================================================================================ + * Copyright (C) 2020 Huawei Technologies Co., Ltd. All rights reserved. + * ================================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============LICENSE_END========================================================= + */ + +package org.onap.so.adapters.nssmf.entity; + +public class ErrorResponse { + + private int status; + + private String error; + + private String message; + + public ErrorResponse(int status, String message) { + this.status = status; + this.message = message; + this.error = "Bad Request"; + } + + public int getStatus() { + return status; + } + + public void setStatus(int status) { + this.status = status; + } + + public String getError() { + if (status == 500) { + this.error = "Internal Server Error"; + } + return error; + } + + public void setError(String error) { + this.error = error; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } +} diff --git a/so-nssmf-adapter-application/src/main/java/org/onap/so/adapters/nssmf/entity/NssmfInfo.java b/so-nssmf-adapter-application/src/main/java/org/onap/so/adapters/nssmf/entity/NssmfInfo.java new file mode 100644 index 0000000..5cd08e0 --- /dev/null +++ b/so-nssmf-adapter-application/src/main/java/org/onap/so/adapters/nssmf/entity/NssmfInfo.java @@ -0,0 +1,41 @@ +/*- + * ============LICENSE_START======================================================= + * ONAP - SO + * ================================================================================ + * Copyright (C) 2020 Huawei Technologies Co., Ltd. All rights reserved. + * ================================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============LICENSE_END========================================================= + */ + +package org.onap.so.adapters.nssmf.entity; + +import lombok.Data; + +@Data +public class NssmfInfo { + + private String url; + + private String ipAddress; + + private String port; + + private String insecure; + + private String cacert; + + private String userName; + + private String password; +} diff --git a/so-nssmf-adapter-application/src/main/java/org/onap/so/adapters/nssmf/entity/NssmfUrlInfo.java b/so-nssmf-adapter-application/src/main/java/org/onap/so/adapters/nssmf/entity/NssmfUrlInfo.java new file mode 100644 index 0000000..e9cce84 --- /dev/null +++ b/so-nssmf-adapter-application/src/main/java/org/onap/so/adapters/nssmf/entity/NssmfUrlInfo.java @@ -0,0 +1,17 @@ +package org.onap.so.adapters.nssmf.entity; + +import lombok.Data; +import org.onap.so.adapters.nssmf.enums.HttpMethod; + +@Data +public class NssmfUrlInfo { + + private String url; + + private HttpMethod httpMethod; + + public NssmfUrlInfo(String url, HttpMethod httpMethod) { + this.url = url; + this.httpMethod = httpMethod; + } +} diff --git a/so-nssmf-adapter-application/src/main/java/org/onap/so/adapters/nssmf/entity/RestResponse.java b/so-nssmf-adapter-application/src/main/java/org/onap/so/adapters/nssmf/entity/RestResponse.java new file mode 100644 index 0000000..9f20f32 --- /dev/null +++ b/so-nssmf-adapter-application/src/main/java/org/onap/so/adapters/nssmf/entity/RestResponse.java @@ -0,0 +1,92 @@ +/*- + * ============LICENSE_START======================================================= + * ONAP - SO + * ================================================================================ + * Copyright (C) 2020 Huawei Technologies Co., Ltd. All rights reserved. + * ================================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============LICENSE_END========================================================= + */ + +package org.onap.so.adapters.nssmf.entity; + +import java.util.Map; + +public class RestResponse { + + // the response content + private String responseContent; + + // the response status + private int status; + + // the response header + private Map respHeaderMap; + + public RestResponse() { + this.status = -1; + + this.respHeaderMap = null; + } + + public int getStatus() { + return this.status; + } + + public void setStatus(int status) { + this.status = status; + } + + public Map getRespHeaderMap() { + return this.respHeaderMap; + } + + public void setRespHeaderMap(Map header) { + this.respHeaderMap = header; + } + + public int getRespHeaderInt(String key) { + if (this.respHeaderMap != null) { + String result = this.respHeaderMap.get(key); + if (result != null) { + return Integer.parseInt(result); + } + } + return -1; + } + + public long getRespHeaderLong(String key) { + if (this.respHeaderMap != null) { + String result = this.respHeaderMap.get(key); + if (result != null) { + return Long.parseLong(result); + } + } + return -1L; + } + + public String getRespHeaderStr(String key) { + if (this.respHeaderMap != null) { + return this.respHeaderMap.get(key); + } + return null; + } + + public String getResponseContent() { + return this.responseContent; + } + + public void setResponseContent(String responseString) { + this.responseContent = responseString; + } +} diff --git a/so-nssmf-adapter-application/src/main/java/org/onap/so/adapters/nssmf/entity/TokenRequest.java b/so-nssmf-adapter-application/src/main/java/org/onap/so/adapters/nssmf/entity/TokenRequest.java new file mode 100644 index 0000000..d13dad7 --- /dev/null +++ b/so-nssmf-adapter-application/src/main/java/org/onap/so/adapters/nssmf/entity/TokenRequest.java @@ -0,0 +1,33 @@ +/*- + * ============LICENSE_START======================================================= + * ONAP - SO + * ================================================================================ + * Copyright (C) 2020 Huawei Technologies Co., Ltd. All rights reserved. + * ================================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============LICENSE_END========================================================= + */ + +package org.onap.so.adapters.nssmf.entity; + +import lombok.Data; + +@Data +public class TokenRequest { + + private String grantType; + + private String userName; + + private String value; +} diff --git a/so-nssmf-adapter-application/src/main/java/org/onap/so/adapters/nssmf/entity/TokenResponse.java b/so-nssmf-adapter-application/src/main/java/org/onap/so/adapters/nssmf/entity/TokenResponse.java new file mode 100644 index 0000000..7111639 --- /dev/null +++ b/so-nssmf-adapter-application/src/main/java/org/onap/so/adapters/nssmf/entity/TokenResponse.java @@ -0,0 +1,32 @@ +/*- + * ============LICENSE_START======================================================= + * ONAP - SO + * ================================================================================ + * Copyright (C) 2020 Huawei Technologies Co., Ltd. All rights reserved. + * ================================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============LICENSE_END========================================================= + */ + +package org.onap.so.adapters.nssmf.entity; + + +import lombok.Data; + +@Data +public class TokenResponse { + + private String accessToken; + + private int expires; +} diff --git a/so-nssmf-adapter-application/src/main/java/org/onap/so/adapters/nssmf/enums/ActionType.java b/so-nssmf-adapter-application/src/main/java/org/onap/so/adapters/nssmf/enums/ActionType.java new file mode 100644 index 0000000..222d3cc --- /dev/null +++ b/so-nssmf-adapter-application/src/main/java/org/onap/so/adapters/nssmf/enums/ActionType.java @@ -0,0 +1,67 @@ +/*- + * ============LICENSE_START======================================================= + * ONAP - SO + * ================================================================================ + # Copyright (c) 2020, CMCC Technologies Co., Ltd. + # + # Licensed under the Apache License, Version 2.0 (the "License") + # you may not use this file except in compliance with the License. + # You may obtain a copy of the License at + # + # http://www.apache.org/licenses/LICENSE-2.0 + # + # Unless required by applicable law or agreed to in writing, software + # distributed under the License is distributed on an "AS IS" BASIS, + # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + # See the License for the specific language governing permissions and + # limitations under the License. + * ============LICENSE_END========================================================= + */ + +package org.onap.so.adapters.nssmf.enums; + +import lombok.Getter; + +@Getter +public enum ActionType { + /** + * allocate + */ + ALLOCATE("allocate"), + + DEALLOCATE("deallocate"), + + CREATE("create"), + + TERMINATE("terminate"), + + ACTIVATE("activate"), + + DEACTIVATE("deactivate"), + + QUERY_JOB_STATUS("query_job_status"), + + MODIFY_BY_ID("modify_by_id"), + + MODIFY("modify"), + + QUERY_NSSI_SELECTION_CAPABILITY("query_nssi_selection_capability"), + + QUERY_SUB_NET_CAPABILITY("query_sub_net_capability"),; + + private String type; + + + ActionType(String type) { + this.type = type; + } + + public static ActionType getActionType(String value) { + for (ActionType actionType : ActionType.values()) { + if (actionType.type.equalsIgnoreCase(value)) { + return actionType; + } + } + return null; + } +} diff --git a/so-nssmf-adapter-application/src/main/java/org/onap/so/adapters/nssmf/enums/ExecutorType.java b/so-nssmf-adapter-application/src/main/java/org/onap/so/adapters/nssmf/enums/ExecutorType.java new file mode 100644 index 0000000..344d98b --- /dev/null +++ b/so-nssmf-adapter-application/src/main/java/org/onap/so/adapters/nssmf/enums/ExecutorType.java @@ -0,0 +1,25 @@ +/*- + * ============LICENSE_START======================================================= + * ONAP - SO + * ================================================================================ + # Copyright (c) 2020, CMCC Technologies Co., Ltd. + # + # Licensed under the Apache License, Version 2.0 (the "License") + # you may not use this file except in compliance with the License. + # You may obtain a copy of the License at + # + # http://www.apache.org/licenses/LICENSE-2.0 + # + # Unless required by applicable law or agreed to in writing, software + # distributed under the License is distributed on an "AS IS" BASIS, + # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + # See the License for the specific language governing permissions and + # limitations under the License. + * ============LICENSE_END========================================================= + */ + +package org.onap.so.adapters.nssmf.enums; + +public enum ExecutorType { + INTERNAL, EXTERNAL +} diff --git a/so-nssmf-adapter-application/src/main/java/org/onap/so/adapters/nssmf/enums/HttpMethod.java b/so-nssmf-adapter-application/src/main/java/org/onap/so/adapters/nssmf/enums/HttpMethod.java new file mode 100644 index 0000000..5a523ff --- /dev/null +++ b/so-nssmf-adapter-application/src/main/java/org/onap/so/adapters/nssmf/enums/HttpMethod.java @@ -0,0 +1,41 @@ +/*- + * ============LICENSE_START======================================================= + * ONAP - SO + * ================================================================================ + * Copyright (C) 2020 Huawei Technologies Co., Ltd. All rights reserved. + * ================================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============LICENSE_END========================================================= + */ + +package org.onap.so.adapters.nssmf.enums; + +public enum HttpMethod { + GET, POST, PUT, DELETE, PATCH; + + public static HttpMethod fromString(String s) { + if (s == null) + return null; + if (("get").equalsIgnoreCase(s)) + return GET; + if (("post").equalsIgnoreCase(s)) + return POST; + if (("put").equalsIgnoreCase(s)) + return PUT; + if (("delete").equalsIgnoreCase(s)) + return DELETE; + if (("patch").equalsIgnoreCase(s)) + return PATCH; + throw new IllegalArgumentException("Invalid value for HTTP Method: " + s); + } +} diff --git a/so-nssmf-adapter-application/src/main/java/org/onap/so/adapters/nssmf/enums/JobStatus.java b/so-nssmf-adapter-application/src/main/java/org/onap/so/adapters/nssmf/enums/JobStatus.java new file mode 100644 index 0000000..dfe3ed9 --- /dev/null +++ b/so-nssmf-adapter-application/src/main/java/org/onap/so/adapters/nssmf/enums/JobStatus.java @@ -0,0 +1,42 @@ +/*- + * ============LICENSE_START======================================================= + * ONAP - SO + * ================================================================================ + * Copyright (C) 2020 Huawei Technologies Co., Ltd. All rights reserved. + * ================================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============LICENSE_END========================================================= + */ + +package org.onap.so.adapters.nssmf.enums; + +import org.onap.so.adapters.nssmf.exceptions.ApplicationException; + + +public enum JobStatus { + STARTED, PROCESSING, FINISHED, ERROR; + + public static JobStatus fromString(String s) throws ApplicationException { + if (s == null) + return null; + if (("started").equalsIgnoreCase(s)) + return STARTED; + if (("processing").equalsIgnoreCase(s)) + return PROCESSING; + if (("finished").equalsIgnoreCase(s)) + return FINISHED; + if (("error").equalsIgnoreCase(s)) + return ERROR; + throw new ApplicationException(500, "Invalid value for Job " + "Status: " + s); + } +} diff --git a/so-nssmf-adapter-application/src/main/java/org/onap/so/adapters/nssmf/enums/SelectionType.java b/so-nssmf-adapter-application/src/main/java/org/onap/so/adapters/nssmf/enums/SelectionType.java new file mode 100644 index 0000000..802eb25 --- /dev/null +++ b/so-nssmf-adapter-application/src/main/java/org/onap/so/adapters/nssmf/enums/SelectionType.java @@ -0,0 +1,27 @@ +/*- + * ============LICENSE_START======================================================= + * ONAP - SO + * ================================================================================ + # Copyright (c) 2020, CMCC Technologies Co., Ltd. + # + # Licensed under the Apache License, Version 2.0 (the "License") + # you may not use this file except in compliance with the License. + # You may obtain a copy of the License at + # + # http://www.apache.org/licenses/LICENSE-2.0 + # + # Unless required by applicable law or agreed to in writing, software + # distributed under the License is distributed on an "AS IS" BASIS, + # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + # See the License for the specific language governing permissions and + # limitations under the License. + * ============LICENSE_END========================================================= + */ + +package org.onap.so.adapters.nssmf.enums; + +public enum SelectionType { + NSSMF, + + NSMF +} diff --git a/so-nssmf-adapter-application/src/main/java/org/onap/so/adapters/nssmf/exceptions/ApplicationException.java b/so-nssmf-adapter-application/src/main/java/org/onap/so/adapters/nssmf/exceptions/ApplicationException.java new file mode 100644 index 0000000..4b88232 --- /dev/null +++ b/so-nssmf-adapter-application/src/main/java/org/onap/so/adapters/nssmf/exceptions/ApplicationException.java @@ -0,0 +1,66 @@ +/*- + * ============LICENSE_START======================================================= + * ONAP - SO + * ================================================================================ + * Copyright (C) 2020 Huawei Technologies Co., Ltd. All rights reserved. + * ================================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============LICENSE_END========================================================= + */ + +package org.onap.so.adapters.nssmf.exceptions; + +import org.onap.so.adapters.nssmf.entity.ErrorResponse; +import org.springframework.http.ResponseEntity; +import static org.onap.so.adapters.nssmf.util.NssmfAdapterUtil.marshal; + +public class ApplicationException extends Exception { + + private static final long serialVersionUID = 1L; + + private int errorCode; + + private String errorMsg; + + public ApplicationException(int errorCode, String errorMsg) { + this.errorCode = errorCode; + this.errorMsg = errorMsg; + } + + public int getErrorCode() { + return errorCode; + } + + public void setErrorCode(int errorCode) { + this.errorCode = errorCode; + } + + public String getErrorMsg() { + return errorMsg; + } + + public void setErrorMsg(String errorMsg) { + this.errorMsg = errorMsg; + } + + public ResponseEntity buildErrorResponse() { + String message; + try { + ErrorResponse err = new ErrorResponse(errorCode, errorMsg); + message = marshal(err); + } catch (ApplicationException e) { + return ResponseEntity.status(500).body("Internal Server Error"); + } + return ResponseEntity.status(errorCode).body(message); + } +} diff --git a/so-nssmf-adapter-application/src/main/java/org/onap/so/adapters/nssmf/extclients/aai/AaiClientPropertiesImpl.java b/so-nssmf-adapter-application/src/main/java/org/onap/so/adapters/nssmf/extclients/aai/AaiClientPropertiesImpl.java new file mode 100644 index 0000000..6136e0c --- /dev/null +++ b/so-nssmf-adapter-application/src/main/java/org/onap/so/adapters/nssmf/extclients/aai/AaiClientPropertiesImpl.java @@ -0,0 +1,69 @@ +/*- + * ============LICENSE_START======================================================= + * ONAP - SO + * ================================================================================ + * Copyright (C) 2020 Huawei Technologies Co., Ltd. All rights reserved. + * ================================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============LICENSE_END========================================================= + */ + +package org.onap.so.adapters.nssmf.extclients.aai; + +import java.net.MalformedURLException; +import java.net.URL; +import org.onap.aaiclient.client.aai.AAIProperties; +import org.onap.aaiclient.client.aai.AAIVersion; +import org.onap.so.spring.SpringContextHelper; +import org.springframework.context.ApplicationContext; + +public class AaiClientPropertiesImpl implements AAIProperties { + + private final String endpoint; + + private final String encryptedBasicAuth; + + private final String encrytptionKey; + + public AaiClientPropertiesImpl() { + final ApplicationContext context = SpringContextHelper.getAppContext(); + this.endpoint = context.getEnvironment().getProperty("aai.endpoint"); + this.encryptedBasicAuth = context.getEnvironment().getProperty("aai.auth"); + this.encrytptionKey = context.getEnvironment().getProperty("mso.key"); + } + + @Override + public AAIVersion getDefaultVersion() { + return AAIVersion.LATEST; + } + + @Override + public String getAuth() { + return encryptedBasicAuth; + } + + @Override + public String getKey() { + return encrytptionKey; + } + + @Override + public URL getEndpoint() throws MalformedURLException { + return new URL(endpoint); + } + + @Override + public String getSystemName() { + return "MSO"; + } +} diff --git a/so-nssmf-adapter-application/src/main/java/org/onap/so/adapters/nssmf/extclients/aai/AaiClientProvider.java b/so-nssmf-adapter-application/src/main/java/org/onap/so/adapters/nssmf/extclients/aai/AaiClientProvider.java new file mode 100644 index 0000000..77de78a --- /dev/null +++ b/so-nssmf-adapter-application/src/main/java/org/onap/so/adapters/nssmf/extclients/aai/AaiClientProvider.java @@ -0,0 +1,34 @@ +/*- + * ============LICENSE_START======================================================= + * ONAP - SO + * ================================================================================ + * Copyright (C) 2020 Huawei Technologies Co., Ltd. All rights reserved. + * ================================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============LICENSE_END========================================================= + */ + +package org.onap.so.adapters.nssmf.extclients.aai; + +import org.onap.aaiclient.client.aai.AAIResourcesClient; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +@Configuration +public class AaiClientProvider { + + @Bean + public AAIResourcesClient getAaiClient() { + return new AAIResourcesClient(); + } +} diff --git a/so-nssmf-adapter-application/src/main/java/org/onap/so/adapters/nssmf/extclients/aai/AaiServiceProvider.java b/so-nssmf-adapter-application/src/main/java/org/onap/so/adapters/nssmf/extclients/aai/AaiServiceProvider.java new file mode 100644 index 0000000..74ce6ae --- /dev/null +++ b/so-nssmf-adapter-application/src/main/java/org/onap/so/adapters/nssmf/extclients/aai/AaiServiceProvider.java @@ -0,0 +1,39 @@ +/*- + * ============LICENSE_START======================================================= + * ONAP - SO + * ================================================================================ + * Copyright (C) 2020 Huawei Technologies Co., Ltd. All rights reserved. + * ================================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============LICENSE_END========================================================= + */ + +package org.onap.so.adapters.nssmf.extclients.aai; + +import org.onap.aai.domain.yang.EsrSystemInfoList; +import org.onap.aai.domain.yang.EsrThirdpartySdncList; +import org.onap.aai.domain.yang.ServiceInstance; + +public interface AaiServiceProvider { + + EsrThirdpartySdncList invokeGetThirdPartySdncList(); + + EsrSystemInfoList invokeGetThirdPartySdncEsrSystemInfo(String sdncId); + + void invokeCreateServiceInstance(ServiceInstance nssiInstance, String globalSubscriberId, String serviceType, + String serviceInstanceId); + + ServiceInstance invokeGetServiceInstance(String globalSubscriberId, String serviceType, String serviceInstanceId); + + void invokeDeleteServiceInstance(String globalSubscriberId, String serviceType, String serviceInstanceId); +} diff --git a/so-nssmf-adapter-application/src/main/java/org/onap/so/adapters/nssmf/extclients/aai/AaiServiceProviderImpl.java b/so-nssmf-adapter-application/src/main/java/org/onap/so/adapters/nssmf/extclients/aai/AaiServiceProviderImpl.java new file mode 100644 index 0000000..fe20b4a --- /dev/null +++ b/so-nssmf-adapter-application/src/main/java/org/onap/so/adapters/nssmf/extclients/aai/AaiServiceProviderImpl.java @@ -0,0 +1,98 @@ +/*- + * ============LICENSE_START======================================================= + * ONAP - SO + * ================================================================================ + * Copyright (C) 2020 Huawei Technologies Co., Ltd. All rights reserved. + * ================================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============LICENSE_END========================================================= + */ + +package org.onap.so.adapters.nssmf.extclients.aai; + + +import org.onap.aai.domain.yang.EsrSystemInfoList; +import org.onap.aai.domain.yang.EsrThirdpartySdncList; +import org.onap.aai.domain.yang.ServiceInstance; +import org.onap.aaiclient.client.aai.entities.uri.AAIResourceUri; +import org.onap.aaiclient.client.aai.entities.uri.AAIUriFactory; +import org.onap.aaiclient.client.generated.fluentbuilders.AAIFluentTypeBuilder; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +@Service +public class AaiServiceProviderImpl implements AaiServiceProvider { + + private static final Logger logger = LoggerFactory.getLogger(AaiServiceProviderImpl.class); + + private final AaiClientProvider aaiClientProvider; + + @Autowired + public AaiServiceProviderImpl(final AaiClientProvider aaiClientProvider) { + this.aaiClientProvider = aaiClientProvider; + } + + @Override + public EsrThirdpartySdncList invokeGetThirdPartySdncList() { + return aaiClientProvider.getAaiClient() + .get(EsrThirdpartySdncList.class, + AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.externalSystem().esrThirdpartySdncList())) + .orElseGet(() -> { + logger.debug("No VNFMs in AAI"); + return null; + }); + } + + @Override + public EsrSystemInfoList invokeGetThirdPartySdncEsrSystemInfo(String sdncId) { + return aaiClientProvider.getAaiClient() + .get(EsrSystemInfoList.class, + AAIUriFactory.createResourceUri( + AAIFluentTypeBuilder.externalSystem().esrThirdpartySdnc((sdncId)).esrSystemInfoList())) + .orElseGet(() -> { + logger.debug("VNFM not found in AAI"); + return null; + }); + } + + + @Override + public void invokeCreateServiceInstance(ServiceInstance nssiInstance, String globalSubscriberId, String serviceType, + String serviceInstanceId) { + AAIResourceUri uri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.business() + .customer(globalSubscriberId).serviceSubscription(serviceType).serviceInstance(serviceInstanceId)); + aaiClientProvider.getAaiClient().create(uri, nssiInstance); + } + + @Override + public ServiceInstance invokeGetServiceInstance(String globalSubscriberId, String serviceType, + String serviceInstanceId) { + AAIResourceUri uri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.business() + .customer(globalSubscriberId).serviceSubscription(serviceType).serviceInstance(serviceInstanceId)); + + return aaiClientProvider.getAaiClient().get(ServiceInstance.class, uri).orElseGet(() -> { + logger.debug("ServiceInstance " + serviceInstanceId + " not found in AAI"); + return null; + }); + } + + @Override + public void invokeDeleteServiceInstance(String globalSubscriberId, String serviceType, String serviceInstanceId) { + AAIResourceUri uri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.business() + .customer(globalSubscriberId).serviceSubscription(serviceType).serviceInstance(serviceInstanceId)); + + aaiClientProvider.getAaiClient().delete(uri); + } +} diff --git a/so-nssmf-adapter-application/src/main/java/org/onap/so/adapters/nssmf/interceptor/LoggerInterceptor.java b/so-nssmf-adapter-application/src/main/java/org/onap/so/adapters/nssmf/interceptor/LoggerInterceptor.java new file mode 100644 index 0000000..4a6bf05 --- /dev/null +++ b/so-nssmf-adapter-application/src/main/java/org/onap/so/adapters/nssmf/interceptor/LoggerInterceptor.java @@ -0,0 +1,55 @@ +/*- + * ============LICENSE_START======================================================= + * ONAP - SO + * ================================================================================ + # Copyright (c) 2020, CMCC Technologies Co., Ltd. + # + # Licensed under the Apache License, Version 2.0 (the "License") + # you may not use this file except in compliance with the License. + # You may obtain a copy of the License at + # + # http://www.apache.org/licenses/LICENSE-2.0 + # + # Unless required by applicable law or agreed to in writing, software + # distributed under the License is distributed on an "AS IS" BASIS, + # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + # See the License for the specific language governing permissions and + # limitations under the License. + * ============LICENSE_END========================================================= + */ + +package org.onap.so.adapters.nssmf.interceptor; + +import org.apache.logging.log4j.ThreadContext; +import org.springframework.stereotype.Component; +import org.springframework.web.servlet.HandlerInterceptor; +import org.springframework.web.servlet.ModelAndView; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.util.UUID; + +@Component +public class LoggerInterceptor implements HandlerInterceptor { + + private final static String TRACE_ID = "traceId"; + + @Override + public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) + throws Exception { + String traceId = UUID.randomUUID().toString().replaceAll("-", "").toUpperCase(); + ThreadContext.put(TRACE_ID, traceId); + return true; + } + + @Override + public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, + ModelAndView modelAndView) throws Exception { + + } + + @Override + public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) + throws Exception { + ThreadContext.remove(TRACE_ID); + } +} diff --git a/so-nssmf-adapter-application/src/main/java/org/onap/so/adapters/nssmf/interceptor/RequestLogAspect.java b/so-nssmf-adapter-application/src/main/java/org/onap/so/adapters/nssmf/interceptor/RequestLogAspect.java new file mode 100644 index 0000000..908cf91 --- /dev/null +++ b/so-nssmf-adapter-application/src/main/java/org/onap/so/adapters/nssmf/interceptor/RequestLogAspect.java @@ -0,0 +1,227 @@ +/*- + * ============LICENSE_START======================================================= + * ONAP - SO + * ================================================================================ + # Copyright (c) 2020, CMCC Technologies Co., Ltd. + # + # Licensed under the Apache License, Version 2.0 (the "License") + # you may not use this file except in compliance with the License. + # You may obtain a copy of the License at + # + # http://www.apache.org/licenses/LICENSE-2.0 + # + # Unless required by applicable law or agreed to in writing, software + # distributed under the License is distributed on an "AS IS" BASIS, + # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + # See the License for the specific language governing permissions and + # limitations under the License. + * ============LICENSE_END========================================================= + */ +package org.onap.so.adapters.nssmf.interceptor; + +import lombok.Data; +import lombok.ToString; +import org.aspectj.lang.JoinPoint; +import org.aspectj.lang.ProceedingJoinPoint; +import org.aspectj.lang.annotation.*; +import org.aspectj.lang.reflect.MethodSignature; +import org.onap.so.adapters.nssmf.annotation.RequestLogger; +import org.onap.so.adapters.nssmf.annotation.ServiceLogger; +import org.onap.so.adapters.nssmf.exceptions.ApplicationException; +import org.onap.so.adapters.nssmf.util.NssmfAdapterUtil; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.core.annotation.Order; +import org.springframework.stereotype.Component; +import org.springframework.web.context.request.RequestContextHolder; +import org.springframework.web.context.request.ServletRequestAttributes; +import org.springframework.web.multipart.MultipartFile; +import javax.servlet.http.HttpServletRequest; +import java.lang.reflect.Method; +import java.util.HashMap; +import java.util.Map; + +/** + * support to print logger of service method + */ +@Aspect +@Order(100) +@Component +public class RequestLogAspect { + + private static final Logger logger = LoggerFactory.getLogger(RequestLogAspect.class); + + @Pointcut("execution(* org.onap.so.adapters.nssmf.service..*(..))") + public void serviceLogger() { + + } + + @Around("serviceLogger()") + public Object around(ProceedingJoinPoint joinPoint) { + try { + MethodSignature signature = (MethodSignature) joinPoint.getSignature(); + Method method = signature.getMethod(); + + Class targetClass = method.getDeclaringClass(); + + StringBuilder classAndMethod = new StringBuilder(); + ServiceLogger classAnnotation = targetClass.getAnnotation(ServiceLogger.class); + ServiceLogger methodAnnotation = method.getAnnotation(ServiceLogger.class); + + if (classAnnotation == null && methodAnnotation == null) { + return joinPoint.proceed(); + } + + if (classAnnotation != null) { + if (classAnnotation.ignore()) { + return joinPoint.proceed(); + } + classAndMethod.append(classAnnotation.value()).append("-"); + } + + String target = targetClass.getName() + "#" + method.getName(); + + String params = NssmfAdapterUtil.marshal(joinPoint.getArgs()); + + logger.info("{} Start: Method = {} \nParams = {}", classAndMethod.toString(), target, params); + + long start = System.currentTimeMillis(); + Object result = joinPoint.proceed(); + long timeConsuming = System.currentTimeMillis() - start; + + logger.info("\n{} End: Method = {}, Spend time = {}ms \nResult = {}", classAndMethod.toString(), target, + timeConsuming, NssmfAdapterUtil.marshal(result)); + return result; + + } catch (Throwable e) { + logger.error(e.getMessage(), e); + } + return null; + } + + @Pointcut("execution(* org.onap.so.adapters.nssmf.controller..*(..))") + public void controllerLogger() { + + } + + @Around("controllerLogger()") + public Object doAroundRequest(ProceedingJoinPoint point) throws Throwable { + MethodSignature signature = (MethodSignature) point.getSignature(); + Method method = signature.getMethod(); + Class targetClass = method.getDeclaringClass(); + + RequestLogger classAnnotation = targetClass.getAnnotation(RequestLogger.class); + RequestLogger methodAnnotation = method.getAnnotation(RequestLogger.class); + + if ((classAnnotation == null && methodAnnotation == null) + || (classAnnotation != null && classAnnotation.ignore()) + || (methodAnnotation != null && methodAnnotation.ignore())) { + return point.proceed(); + } + + long start = System.currentTimeMillis(); + ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes(); + + assert attributes != null; + HttpServletRequest request = attributes.getRequest(); + Object result = point.proceed(); + RequestInfo requestInfo = new RequestInfo(); + requestInfo.setIp(request.getRemoteAddr()); + requestInfo.setUrl(request.getRequestURL().toString()); + requestInfo.setHttpMethod(request.getMethod()); + requestInfo.setClassMethod(String.format("%s.%s", signature.getDeclaringTypeName(), signature.getName())); + requestInfo.setRequestParams(getRequestParamsByProceedingJoinPoint(point)); + requestInfo.setResult(result); + requestInfo.setTimeCost(System.currentTimeMillis() - start); + logger.info("Request Info : {}", NssmfAdapterUtil.marshal(requestInfo)); + return result; + } + + @AfterThrowing(pointcut = "controllerLogger()", throwing = "e") + public void doAfterRequestThrow(JoinPoint joinPoint, RuntimeException e) { + MethodSignature signature = (MethodSignature) joinPoint.getSignature(); + Method method = signature.getMethod(); + Class targetClass = method.getDeclaringClass(); + + RequestLogger classAnnotation = targetClass.getAnnotation(RequestLogger.class); + RequestLogger methodAnnotation = method.getAnnotation(RequestLogger.class); + + if ((classAnnotation == null && methodAnnotation == null) + || (classAnnotation != null && classAnnotation.ignore()) + || (methodAnnotation != null && methodAnnotation.ignore())) { + return; + } + ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes(); + assert attributes != null; + HttpServletRequest request = attributes.getRequest(); + RequestErrorInfo requestErrorInfo = new RequestErrorInfo(); + requestErrorInfo.setIp(request.getRemoteAddr()); + requestErrorInfo.setUrl(request.getRequestURL().toString()); + requestErrorInfo.setHttpMethod(request.getMethod()); + requestErrorInfo.setClassMethod(String.format("%s.%s", joinPoint.getSignature().getDeclaringTypeName(), + joinPoint.getSignature().getName())); + requestErrorInfo.setRequestParams(getRequestParamsByJoinPoint(joinPoint)); + requestErrorInfo.setException(e); + String res; + try { + res = NssmfAdapterUtil.marshal(requestErrorInfo); + logger.info("Error Request Info : {}", res); + } catch (ApplicationException ex) { + logger.info("Error Request Info : {}", requestErrorInfo); + } + } + + private Map getRequestParamsByJoinPoint(JoinPoint joinPoint) { + String[] paramNames = ((MethodSignature) joinPoint.getSignature()).getParameterNames(); + Object[] paramValues = joinPoint.getArgs(); + + return buildRequestParam(paramNames, paramValues); + } + + + private Map getRequestParamsByProceedingJoinPoint(ProceedingJoinPoint proceedingJoinPoint) { + String[] paramNames = ((MethodSignature) proceedingJoinPoint.getSignature()).getParameterNames(); + Object[] paramValues = proceedingJoinPoint.getArgs(); + + return buildRequestParam(paramNames, paramValues); + } + + private Map buildRequestParam(String[] paramNames, Object[] paramValues) { + Map requestParams = new HashMap<>(); + for (int i = 0; i < paramNames.length; i++) { + Object value = paramValues[i]; + + if (value instanceof MultipartFile) { + MultipartFile file = (MultipartFile) value; + value = file.getOriginalFilename(); + } + + requestParams.put(paramNames[i], value); + } + + return requestParams; + } + + @Data + @ToString + private class RequestInfo { + private String ip; + private String url; + private String httpMethod; + private String classMethod; + private Object requestParams; + private Object result; + private Long timeCost; + } + + @Data + @ToString + private class RequestErrorInfo { + private String ip; + private String url; + private String httpMethod; + private String classMethod; + private Object requestParams; + private RuntimeException exception; + } +} diff --git a/so-nssmf-adapter-application/src/main/java/org/onap/so/adapters/nssmf/manager/NssmfManager.java b/so-nssmf-adapter-application/src/main/java/org/onap/so/adapters/nssmf/manager/NssmfManager.java new file mode 100644 index 0000000..8923a1c --- /dev/null +++ b/so-nssmf-adapter-application/src/main/java/org/onap/so/adapters/nssmf/manager/NssmfManager.java @@ -0,0 +1,44 @@ +/*- + * ============LICENSE_START======================================================= + * ONAP - SO + * ================================================================================ + # Copyright (c) 2020, CMCC Technologies Co., Ltd. + # + # Licensed under the Apache License, Version 2.0 (the "License") + # you may not use this file except in compliance with the License. + # You may obtain a copy of the License at + # + # http://www.apache.org/licenses/LICENSE-2.0 + # + # Unless required by applicable law or agreed to in writing, software + # distributed under the License is distributed on an "AS IS" BASIS, + # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + # See the License for the specific language governing permissions and + # limitations under the License. + * ============LICENSE_END========================================================= + */ + +package org.onap.so.adapters.nssmf.manager; + +import org.onap.so.adapters.nssmf.exceptions.ApplicationException; +import org.onap.so.adapters.nssmf.entity.RestResponse; +import org.onap.so.beans.nsmf.*; + +public interface NssmfManager { + + RestResponse allocateNssi(NssmfAdapterNBIRequest nssmfRequest) throws ApplicationException; + + RestResponse deAllocateNssi(NssmfAdapterNBIRequest nssmfRequest, String sliceId) throws ApplicationException; + + RestResponse activateNssi(NssmfAdapterNBIRequest nssmfRequest, String snssai) throws ApplicationException; + + RestResponse deActivateNssi(NssmfAdapterNBIRequest nssmfRequest, String snssai) throws ApplicationException; + + RestResponse queryJobStatus(NssmfAdapterNBIRequest jobReq, String jobId) throws ApplicationException; + + RestResponse queryNSSISelectionCapability(NssmfAdapterNBIRequest nbiRequest) throws ApplicationException; + + RestResponse querySubnetCapability(NssmfAdapterNBIRequest nbiRequest) throws ApplicationException; + + RestResponse modifyNssi(NssmfAdapterNBIRequest modifyRequest) throws ApplicationException; +} diff --git a/so-nssmf-adapter-application/src/main/java/org/onap/so/adapters/nssmf/manager/NssmfManagerBuilder.java b/so-nssmf-adapter-application/src/main/java/org/onap/so/adapters/nssmf/manager/NssmfManagerBuilder.java new file mode 100644 index 0000000..096d548 --- /dev/null +++ b/so-nssmf-adapter-application/src/main/java/org/onap/so/adapters/nssmf/manager/NssmfManagerBuilder.java @@ -0,0 +1,131 @@ +/*- + * ============LICENSE_START======================================================= + * ONAP - SO + * ================================================================================ + # Copyright (c) 2020, CMCC Technologies Co., Ltd. + # + # Licensed under the Apache License, Version 2.0 (the "License") + # you may not use this file except in compliance with the License. + # You may obtain a copy of the License at + # + # http://www.apache.org/licenses/LICENSE-2.0 + # + # Unless required by applicable law or agreed to in writing, software + # distributed under the License is distributed on an "AS IS" BASIS, + # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + # See the License for the specific language governing permissions and + # limitations under the License. + * ============LICENSE_END========================================================= + */ + +package org.onap.so.adapters.nssmf.manager; + +import org.onap.so.adapters.nssmf.config.NssmfAdapterConfig; +import org.onap.so.adapters.nssmf.consts.NssmfAdapterConsts; +import org.onap.so.adapters.nssmf.enums.ActionType; +import org.onap.so.adapters.nssmf.enums.ExecutorType; +import org.onap.so.adapters.nssmf.exceptions.ApplicationException; +import org.onap.so.adapters.nssmf.manager.impl.external.ExternalAnNssmfManager; +import org.onap.so.adapters.nssmf.manager.impl.external.ExternalCnNssmfManager; +import org.onap.so.adapters.nssmf.manager.impl.internal.InternalAnNssmfManager; +import org.onap.so.adapters.nssmf.manager.impl.internal.InternalCnNssmfManager; +import org.onap.so.adapters.nssmf.manager.impl.internal.InternalTnNssmfManager; +import org.onap.so.adapters.nssmf.manager.impl.*; +import org.onap.so.adapters.nssmf.util.RestUtil; +import org.onap.so.beans.nsmf.EsrInfo; +import org.onap.so.beans.nsmf.NetworkType; +import org.onap.so.beans.nsmf.ServiceInfo; +import org.onap.so.db.request.data.repository.ResourceOperationStatusRepository; + +public class NssmfManagerBuilder { + + private BaseNssmfManager nssmfManger; + + private RestUtil restUtil; + + private ActionType actionType; + + private ResourceOperationStatusRepository repository; + + private ServiceInfo serviceInfo; + + private NssmfAdapterConfig adapterConfig; + + public NssmfManagerBuilder(EsrInfo esrInfo) throws ApplicationException { + + ExecutorType executorType = getExecutorType(esrInfo); + NetworkType networkType = esrInfo.getNetworkType(); + + if (ExecutorType.INTERNAL.equals(executorType) && NetworkType.CORE.equals(networkType)) { + this.nssmfManger = new InternalCnNssmfManager().setEsrInfo(esrInfo).setExecutorType(executorType); + return; + } + + if (ExecutorType.INTERNAL.equals(executorType) && NetworkType.TRANSPORT.equals(networkType)) { + this.nssmfManger = new InternalTnNssmfManager().setEsrInfo(esrInfo).setExecutorType(executorType); + return; + } + + if (ExecutorType.INTERNAL.equals(executorType) && NetworkType.ACCESS.equals(networkType)) { + this.nssmfManger = new InternalAnNssmfManager().setEsrInfo(esrInfo).setExecutorType(executorType); + return; + } + + if (ExecutorType.EXTERNAL.equals(executorType) && NetworkType.CORE.equals(networkType)) { + this.nssmfManger = new ExternalCnNssmfManager().setEsrInfo(esrInfo).setExecutorType(executorType) + .setInitStatus("deactivated"); + return; + } + + if (ExecutorType.EXTERNAL.equals(executorType) && NetworkType.TRANSPORT.equals(networkType)) { + this.nssmfManger = new ExternalAnNssmfManager().setEsrInfo(esrInfo).setExecutorType(executorType) + .setInitStatus("activated"); + return; + } + + if (ExecutorType.EXTERNAL.equals(executorType) && NetworkType.ACCESS.equals(networkType)) { + this.nssmfManger = new ExternalAnNssmfManager().setEsrInfo(esrInfo).setExecutorType(executorType) + .setInitStatus("activated"); + return; + } + + throw new ApplicationException(404, "invalid domain and simulator"); + } + + private ExecutorType getExecutorType(EsrInfo esrInfo) { + if (NssmfAdapterConsts.ONAP_INTERNAL_TAG.equals(esrInfo.getVendor())) { + return ExecutorType.INTERNAL; + } + return ExecutorType.EXTERNAL; + } + + public NssmfManagerBuilder setRestUtil(RestUtil restUtil) { + this.restUtil = restUtil; + return this; + } + + public NssmfManagerBuilder setActionType(ActionType actionType) { + this.actionType = actionType; + return this; + } + + public NssmfManagerBuilder setRepository(ResourceOperationStatusRepository repository) { + this.repository = repository; + return this; + } + + public NssmfManagerBuilder setServiceInfo(ServiceInfo serviceInfo) { + this.serviceInfo = serviceInfo; + return this; + } + + public NssmfManagerBuilder setAdapterConfig(NssmfAdapterConfig adapterConfig) { + this.adapterConfig = adapterConfig; + return this; + } + + public NssmfManager build() { + return this.nssmfManger.setRestUtil(restUtil).setAdapterConfig(adapterConfig).setRepository(repository) + .setActionType(actionType).setServiceInfo(serviceInfo); + } +} diff --git a/so-nssmf-adapter-application/src/main/java/org/onap/so/adapters/nssmf/manager/impl/BaseNssmfManager.java b/so-nssmf-adapter-application/src/main/java/org/onap/so/adapters/nssmf/manager/impl/BaseNssmfManager.java new file mode 100644 index 0000000..52da027 --- /dev/null +++ b/so-nssmf-adapter-application/src/main/java/org/onap/so/adapters/nssmf/manager/impl/BaseNssmfManager.java @@ -0,0 +1,282 @@ +/*- + * ============LICENSE_START======================================================= + * ONAP - SO + * ================================================================================ + # Copyright (c) 2020, CMCC Technologies Co., Ltd. + # + # Licensed under the Apache License, Version 2.0 (the "License") + # you may not use this file except in compliance with the License. + # You may obtain a copy of the License at + # + # http://www.apache.org/licenses/LICENSE-2.0 + # + # Unless required by applicable law or agreed to in writing, software + # distributed under the License is distributed on an "AS IS" BASIS, + # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + # See the License for the specific language governing permissions and + # limitations under the License. + * ============LICENSE_END========================================================= + */ + +package org.onap.so.adapters.nssmf.manager.impl; + +import org.onap.so.adapters.nssmf.config.NssmfAdapterConfig; +import org.onap.so.adapters.nssmf.consts.NssmfAdapterConsts; +import org.onap.so.adapters.nssmf.entity.NssmfUrlInfo; +import org.onap.so.adapters.nssmf.enums.*; +import org.onap.so.adapters.nssmf.exceptions.ApplicationException; +import org.onap.so.adapters.nssmf.entity.RestResponse; +import org.onap.so.adapters.nssmf.manager.NssmfManager; +import org.onap.so.adapters.nssmf.util.RestUtil; +import org.onap.so.beans.nsmf.*; +import org.onap.so.db.request.beans.ResourceOperationStatus; +import org.onap.so.db.request.data.repository.ResourceOperationStatusRepository; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.data.domain.Example; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Optional; +import static org.onap.so.adapters.nssmf.util.NssmfAdapterUtil.marshal; + +public abstract class BaseNssmfManager implements NssmfManager { + + private static final Logger logger = LoggerFactory.getLogger(BaseNssmfManager.class); + + protected RestUtil restUtil; + + protected ResourceOperationStatusRepository repository; + + protected NssmfAdapterConfig adapterConfig; + + protected ActionType actionType; + + protected EsrInfo esrInfo; + + protected String nssmfUrl; + + protected HttpMethod httpMethod; + + protected String initStatus; + + protected ServiceInfo serviceInfo; + + protected RestResponse restResponse; + + private ExecutorType executorType = ExecutorType.INTERNAL; + + private Map params = new HashMap<>(); // request params + + @Override + public RestResponse allocateNssi(NssmfAdapterNBIRequest nbiRequest) throws ApplicationException { + + this.params.clear(); + this.urlHandler(); + String requestBody = wrapAllocateReqBody(nbiRequest); + + this.restResponse = sendRequest(requestBody); + + this.afterRequest(); + + return restResponse; + } + + protected abstract String wrapAllocateReqBody(NssmfAdapterNBIRequest nbiRequest) throws ApplicationException; + + @Override + public RestResponse modifyNssi(NssmfAdapterNBIRequest modifyRequest) throws ApplicationException { + this.params.clear(); + this.urlHandler(); + String requestBody = wrapModifyReqBody(modifyRequest); + + this.restResponse = sendRequest(requestBody); + + this.afterRequest(); + + return restResponse; + } + + protected abstract String wrapModifyReqBody(NssmfAdapterNBIRequest nbiRequest) throws ApplicationException; + + @Override + public RestResponse deAllocateNssi(NssmfAdapterNBIRequest nbiRequest, String sliceId) throws ApplicationException { + this.params.clear(); + this.params.put("sliceProfileId", sliceId); + + this.urlHandler(); + + String reqBody = wrapDeAllocateReqBody(nbiRequest.getDeAllocateNssi()); + + this.restResponse = sendRequest(reqBody); + + this.afterRequest(); + + return restResponse; + } + + protected abstract String wrapDeAllocateReqBody(DeAllocateNssi deAllocateNssi) throws ApplicationException; + + protected abstract String wrapReqBody(Object object) throws ApplicationException; + + @Override + public RestResponse activateNssi(NssmfAdapterNBIRequest nbiRequest, String snssai) throws ApplicationException { + this.params.clear(); + this.params.put("snssai", snssai); + + this.urlHandler(); + + String reqBody = wrapActDeActReqBody(nbiRequest.getActDeActNssi()); + + this.restResponse = sendRequest(reqBody); + + this.afterRequest(); + + return restResponse; + } + + @Override + public RestResponse deActivateNssi(NssmfAdapterNBIRequest nbiRequest, String snssai) throws ApplicationException { + return activateNssi(nbiRequest, snssai); + } + + protected abstract String wrapActDeActReqBody(ActDeActNssi actDeActNssi) throws ApplicationException; + + @Override + public RestResponse queryJobStatus(NssmfAdapterNBIRequest jobReq, String jobId) throws ApplicationException { + this.params.clear(); + this.params.put("jobId", jobId); + if (jobReq.getResponseId() != null) { + this.params.put("responseId", jobReq.getResponseId()); + } + this.urlHandler(); + + /** + * find by jobId and nsiId jobId -> OperationId nsiId -> ServiceId serviceUuid -> resourceTemplateUUID + */ + ResourceOperationStatus status = + getOperationStatus(serviceInfo.getNsiId(), jobId, serviceInfo.getServiceUuid()); + + logger.info("ResourceOperationStatus = {}", status); + this.restResponse = doQueryJobStatus(status); + + afterQueryJobStatus(status); + return restResponse; + } + + protected abstract RestResponse doQueryJobStatus(ResourceOperationStatus status) throws ApplicationException; + + + protected abstract void afterQueryJobStatus(ResourceOperationStatus status); + + private ResourceOperationStatus getOperationStatus(String nsiId, String jobId, String serviceUuid) { + + logger.info("Query operations: nsiId = [{}], jobId = [{}], serviceUuid = [{}]", nsiId, jobId, serviceUuid); + + List resourceOperationStatuses = + repository.findByServiceIdAndOperationId(nsiId, jobId); + + logger.info("resourceOperationStatuses = {}", resourceOperationStatuses); + if (resourceOperationStatuses.size() == 0) { + return null; + } + return resourceOperationStatuses.get(0); + } + + @Override + public RestResponse queryNSSISelectionCapability(NssmfAdapterNBIRequest nbiRequest) throws ApplicationException { + SelectionType res = doQueryNSSISelectionCapability(); + HashMap hashMap = new HashMap<>(); + hashMap.put("selection", res.name()); + RestResponse restResponse = new RestResponse(); + restResponse.setStatus(200); + restResponse.setResponseContent(marshal(hashMap)); + return restResponse; + } + + protected abstract SelectionType doQueryNSSISelectionCapability(); + + @Override + public RestResponse querySubnetCapability(NssmfAdapterNBIRequest nbiRequest) throws ApplicationException { + this.params.clear(); + this.urlHandler(); + + return doQuerySubnetCapability(nbiRequest.getSubnetCapabilityQuery()); + } + + protected abstract RestResponse doQuerySubnetCapability(QuerySubnetCapability req) throws ApplicationException; + + /** + * send request to nssmf + * + * @param content request body + * @return response + * @throws ApplicationException + */ + protected abstract RestResponse sendRequest(String content) throws ApplicationException; + + /** + * handle the url before request to nssmf, include get the nssmf request url, replace the path variable + */ + private void urlHandler() { + NssmfUrlInfo nssmfUrlInfo = + NssmfAdapterConsts.getNssmfUrlInfo(this.executorType, this.esrInfo.getNetworkType(), actionType); + if (nssmfUrlInfo != null) { + this.nssmfUrl = nssmfUrlInfo.getUrl(); + this.httpMethod = nssmfUrlInfo.getHttpMethod(); + this.nssmfUrl = nssmfUrl.replaceAll("\\{apiVersion}", getApiVersion()); + this.params.forEach((k, v) -> this.nssmfUrl = this.nssmfUrl.replaceAll("\\{" + k + "}", v)); + } + } + + /** + * after request + */ + protected abstract void afterRequest() throws ApplicationException; + + protected abstract String getApiVersion(); + + public RestUtil getRestUtil() { + return restUtil; + } + + public BaseNssmfManager setEsrInfo(EsrInfo esrInfo) { + this.esrInfo = esrInfo; + return this; + } + + public BaseNssmfManager setExecutorType(ExecutorType executorType) { + this.executorType = executorType; + return this; + } + + public BaseNssmfManager setRestUtil(RestUtil restUtil) { + this.restUtil = restUtil; + return this; + } + + public BaseNssmfManager setActionType(ActionType actionType) { + this.actionType = actionType; + return this; + } + + public BaseNssmfManager setRepository(ResourceOperationStatusRepository repository) { + this.repository = repository; + return this; + } + + public BaseNssmfManager setServiceInfo(ServiceInfo serviceInfo) { + this.serviceInfo = serviceInfo; + return this; + } + + public BaseNssmfManager setInitStatus(String initStatus) { + this.initStatus = initStatus; + return this; + } + + public BaseNssmfManager setAdapterConfig(NssmfAdapterConfig adapterConfig) { + this.adapterConfig = adapterConfig; + return this; + } +} diff --git a/so-nssmf-adapter-application/src/main/java/org/onap/so/adapters/nssmf/manager/impl/ExternalNssmfManager.java b/so-nssmf-adapter-application/src/main/java/org/onap/so/adapters/nssmf/manager/impl/ExternalNssmfManager.java new file mode 100644 index 0000000..2c51cef --- /dev/null +++ b/so-nssmf-adapter-application/src/main/java/org/onap/so/adapters/nssmf/manager/impl/ExternalNssmfManager.java @@ -0,0 +1,243 @@ +/*- + * ============LICENSE_START======================================================= + * ONAP - SO + * ================================================================================ + # Copyright (c) 2020, CMCC Technologies Co., Ltd. + # + # Licensed under the Apache License, Version 2.0 (the "License") + # you may not use this file except in compliance with the License. + # You may obtain a copy of the License at + # + # http://www.apache.org/licenses/LICENSE-2.0 + # + # Unless required by applicable law or agreed to in writing, software + # distributed under the License is distributed on an "AS IS" BASIS, + # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + # See the License for the specific language governing permissions and + # limitations under the License. + * ============LICENSE_END========================================================= + */ + +package org.onap.so.adapters.nssmf.manager.impl; + +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.core.type.TypeReference; +import com.fasterxml.jackson.databind.ObjectMapper; +import org.apache.http.Header; +import org.apache.http.HttpStatus; +import org.apache.http.message.BasicHeader; +import org.onap.aai.domain.yang.ServiceInstance; +import org.onap.so.adapters.nssmf.entity.NssmfInfo; +import org.onap.so.adapters.nssmf.entity.RestResponse; +import org.onap.so.adapters.nssmf.enums.ActionType; +import org.onap.so.adapters.nssmf.enums.JobStatus; +import org.onap.so.adapters.nssmf.exceptions.ApplicationException; +import org.onap.so.adapters.nssmf.util.NssmfAdapterUtil; +import org.onap.so.beans.nsmf.*; +import org.onap.so.db.request.beans.ResourceOperationStatus; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import java.io.InputStream; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import static java.lang.String.valueOf; +import static org.onap.so.adapters.nssmf.enums.JobStatus.*; +import static org.onap.so.adapters.nssmf.util.NssmfAdapterUtil.StatusDesc.QUERY_JOB_STATUS_FAILED; +import static org.onap.so.adapters.nssmf.util.NssmfAdapterUtil.StatusDesc.QUERY_JOB_STATUS_SUCCESS; +import static org.onap.so.adapters.nssmf.util.NssmfAdapterUtil.marshal; +import static org.onap.so.adapters.nssmf.util.NssmfAdapterUtil.unMarshal; + +public abstract class ExternalNssmfManager extends BaseNssmfManager { + + private static final Logger logger = LoggerFactory.getLogger(ExternalNssmfManager.class); + + @Override + protected String wrapAllocateReqBody(NssmfAdapterNBIRequest nbiRequest) throws ApplicationException { + return doWrapExtAllocateReqBody(nbiRequest); + } + + protected abstract String doWrapExtAllocateReqBody(NssmfAdapterNBIRequest nbiRequest) throws ApplicationException; + + @Override + protected String wrapModifyReqBody(NssmfAdapterNBIRequest nbiRequest) throws ApplicationException { + return doWrapModifyReqBody(nbiRequest); + } + + protected abstract String doWrapModifyReqBody(NssmfAdapterNBIRequest nbiRequest) throws ApplicationException; + + @Override + protected String wrapDeAllocateReqBody(DeAllocateNssi deAllocateNssi) throws ApplicationException { + return doWrapDeAllocateReqBody(deAllocateNssi); + } + + protected abstract String doWrapDeAllocateReqBody(DeAllocateNssi deAllocateNssi) throws ApplicationException; + + @Override + protected void afterQueryJobStatus(ResourceOperationStatus status) { + logger.info("afterQueryJobStatus = " + status); + if (Integer.parseInt(status.getProgress()) == 100) { + logger.info("after query finished = " + status); + ActionType jobOperType = ActionType.valueOf(status.getOperType()); + + if (ActionType.ALLOCATE.equals(jobOperType)) { + ServiceInstance nssiInstance = restUtil.getServiceInstance(serviceInfo); + if (nssiInstance == null) { + nssiInstance = new ServiceInstance(); + } + + nssiInstance.setServiceInstanceId(serviceInfo.getNssiId()); + nssiInstance.setServiceInstanceName(serviceInfo.getNssiName()); + nssiInstance.setServiceType(serviceInfo.getSST()); + + nssiInstance.setOrchestrationStatus(initStatus); + nssiInstance.setModelInvariantId(serviceInfo.getServiceInvariantUuid()); + nssiInstance.setModelVersionId(serviceInfo.getServiceUuid()); + nssiInstance.setServiceInstanceLocationId(serviceInfo.getPLMNIdList()); + nssiInstance.setEnvironmentContext(esrInfo.getNetworkType().getNetworkType()); + nssiInstance.setServiceRole("nssi"); + + restUtil.createServiceInstance(nssiInstance, serviceInfo); + } else if (ActionType.DEALLOCATE.equals(jobOperType)) { + // TODO + restUtil.deleteServiceInstance(serviceInfo); + } + } + } + + @Override + protected String wrapActDeActReqBody(ActDeActNssi actDeActNssi) throws ApplicationException { + return marshal(actDeActNssi); + } + + @Override + protected RestResponse doQueryJobStatus(ResourceOperationStatus status) throws ApplicationException { + return doResponseStatus(status); + } + + private RestResponse doResponseStatus(ResourceOperationStatus status) throws ApplicationException { + RestResponse restResponse = sendRequest(null); + JobStatusResponse jobStatusResponse = unMarshal(restResponse.getResponseContent(), JobStatusResponse.class); + + ResponseDescriptor rspDesc = jobStatusResponse.getResponseDescriptor(); + + logger.info("status = {}", status); + rspDesc.setNssiId(status.getResourceInstanceID()); + + jobStatusResponse.setResponseDescriptor(rspDesc); + restResponse.setResponseContent(marshal(jobStatusResponse)); + updateRequestDbJobStatus(rspDesc, status, restResponse); + return restResponse; + } + + @Override + protected String wrapReqBody(Object object) throws ApplicationException { + return marshal(object); + } + + @Override + protected RestResponse sendRequest(String content) throws ApplicationException { + return sendExternalRequest(content); + } + + @Override + protected String getApiVersion() { + return "v1"; + } + + + // external + protected RestResponse sendExternalRequest(String content) throws ApplicationException { + NssmfInfo nssmfInfo = restUtil.getNssmfHost(esrInfo); + Header header = new BasicHeader("X-Auth-Token", restUtil.getToken(nssmfInfo)); + String nssmfUrl = nssmfInfo.getUrl() + this.nssmfUrl; + return restUtil.send(nssmfUrl, this.httpMethod, content, header); + } + + protected void updateRequestDbJobStatus(ResponseDescriptor rspDesc, ResourceOperationStatus status, + RestResponse rsp) throws ApplicationException { + status.setProgress(Integer.toString(rspDesc.getProgress())); + switch (fromString(rspDesc.getStatus())) { + case STARTED: + updateDbStatus(status, rsp.getStatus(), STARTED, QUERY_JOB_STATUS_SUCCESS); + break; + case PROCESSING: + updateDbStatus(status, rsp.getStatus(), PROCESSING, QUERY_JOB_STATUS_SUCCESS); + break; + case FINISHED: + if (rspDesc.getProgress() == 100) { + updateDbStatus(status, rsp.getStatus(), FINISHED, QUERY_JOB_STATUS_SUCCESS); + } + break; + case ERROR: + updateDbStatus(status, rsp.getStatus(), ERROR, QUERY_JOB_STATUS_FAILED); + throw new ApplicationException(500, QUERY_JOB_STATUS_FAILED); + default: + throw new ApplicationException(500, QUERY_JOB_STATUS_FAILED); + } + } + + protected void updateDbStatus(ResourceOperationStatus status, int rspStatus, JobStatus jobStatus, + String description) { + status.setErrorCode(valueOf(rspStatus)); + status.setStatus(jobStatus.toString()); + status.setStatusDescription(description); + repository.save(status); + } + + @Override + protected RestResponse doQuerySubnetCapability(QuerySubnetCapability req) throws ApplicationException { + + ObjectMapper oMapper = new ObjectMapper(); + InputStream inputStream = TypeReference.class.getResourceAsStream("/subnetCapability.json"); + Map subnetCapability = new HashMap<>(); + try { + subnetCapability = oMapper.readValue(inputStream, Map.class); + } catch (Exception e) { + logger.debug("Exception while reading subnet capability value from json", e); + } + Map responseMap = new HashMap<>(); + List subnetTypes = req.getSubnetTypes(); + for (String value : subnetTypes) { + if (subnetCapability.containsKey(value)) { + responseMap.put(value, subnetCapability.get(value)); + } + } + String response = null; + try { + response = oMapper.writeValueAsString(responseMap); + } catch (JsonProcessingException e) { + logger.debug("Exception while converting subnet capability object to String {}", e.getMessage()); + } + + RestResponse rsp = new RestResponse(); + rsp.setStatus(HttpStatus.SC_OK); + rsp.setResponseContent(response); + return rsp; + } + + /** + * after request, if response code is 2XX, continue handle, else return + */ + @Override + protected void afterRequest() throws ApplicationException { + if (valueOf(restResponse.getStatus()).startsWith("2")) { + doAfterRequest(); + } + } + + + protected void doAfterRequest() throws ApplicationException { + // + NssiResponse response = unMarshal(restResponse.getResponseContent(), NssiResponse.class); + ResourceOperationStatus status = + new ResourceOperationStatus(serviceInfo.getNsiId(), response.getJobId(), serviceInfo.getServiceUuid()); + status.setResourceInstanceID(response.getNssiId()); + status.setOperType(actionType.toString()); + status.setProgress("0"); + + response.setStatus(STARTED.toString()); + restResponse.setResponseContent(marshal(response)); + updateDbStatus(status, restResponse.getStatus(), STARTED, NssmfAdapterUtil.getStatusDesc(actionType)); + } +} diff --git a/so-nssmf-adapter-application/src/main/java/org/onap/so/adapters/nssmf/manager/impl/InternalNssmfManager.java b/so-nssmf-adapter-application/src/main/java/org/onap/so/adapters/nssmf/manager/impl/InternalNssmfManager.java new file mode 100644 index 0000000..49f1306 --- /dev/null +++ b/so-nssmf-adapter-application/src/main/java/org/onap/so/adapters/nssmf/manager/impl/InternalNssmfManager.java @@ -0,0 +1,130 @@ +/*- + * ============LICENSE_START======================================================= + * ONAP - SO + * ================================================================================ + # Copyright (c) 2020, CMCC Technologies Co., Ltd. + # + # Licensed under the Apache License, Version 2.0 (the "License") + # you may not use this file except in compliance with the License. + # You may obtain a copy of the License at + # + # http://www.apache.org/licenses/LICENSE-2.0 + # + # Unless required by applicable law or agreed to in writing, software + # distributed under the License is distributed on an "AS IS" BASIS, + # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + # See the License for the specific language governing permissions and + # limitations under the License. + * ============LICENSE_END========================================================= + */ + +package org.onap.so.adapters.nssmf.manager.impl; + +import org.apache.http.Header; +import org.apache.http.message.BasicHeader; +import org.onap.so.adapters.nssmf.consts.NssmfAdapterConsts; +import org.onap.so.adapters.nssmf.entity.RestResponse; +import org.onap.so.adapters.nssmf.enums.SelectionType; +import org.onap.so.adapters.nssmf.exceptions.ApplicationException; +import org.onap.so.beans.nsmf.*; +import org.onap.so.db.request.beans.ResourceOperationStatus; +import static org.onap.so.adapters.nssmf.enums.JobStatus.PROCESSING; +import static org.onap.so.adapters.nssmf.util.NssmfAdapterUtil.marshal; + +public abstract class InternalNssmfManager extends BaseNssmfManager { + + @Override + protected String wrapAllocateReqBody(NssmfAdapterNBIRequest nbiRequest) throws ApplicationException { + return doWrapAllocateReqBody(nbiRequest); + } + + protected abstract String doWrapAllocateReqBody(NssmfAdapterNBIRequest nbiRequest) throws ApplicationException; + + @Override + protected String wrapReqBody(Object object) throws ApplicationException { + NssmfRequest nssmfRequest = new NssmfRequest(serviceInfo, esrInfo.getNetworkType(), object); + return marshal(nssmfRequest); + } + + + @Override + protected String wrapActDeActReqBody(ActDeActNssi actDeActNssi) throws ApplicationException { + + return wrapReqBody(actDeActNssi); + } + + + @Override + protected String wrapDeAllocateReqBody(DeAllocateNssi deAllocateNssi) throws ApplicationException { + return wrapReqBody(deAllocateNssi); + } + + + @Override + protected RestResponse doQueryJobStatus(ResourceOperationStatus status) throws ApplicationException { + return responseDBStatus(status); + } + + private RestResponse responseDBStatus(ResourceOperationStatus status) throws ApplicationException { + JobStatusResponse statusResponse = new JobStatusResponse(); + ResponseDescriptor descriptor = new ResponseDescriptor(); + if (status == null) { + descriptor.setProgress(0); + descriptor.setStatus(PROCESSING.name()); + descriptor.setStatusDescription("Initiating Nssi Instance"); + } else { + descriptor.setStatus(status.getStatus()); + descriptor.setStatusDescription(status.getStatusDescription()); + descriptor.setProgress(Integer.parseInt(status.getProgress())); + descriptor.setNssiId(status.getResourceInstanceID()); + } + statusResponse.setResponseDescriptor(descriptor); + return restUtil.createResponse(200, marshal(statusResponse)); + } + + @Override + protected RestResponse sendRequest(String content) { + return sendInternalRequest(content); + } + + @Override + protected void afterRequest() { + // + } + + @Override + protected void afterQueryJobStatus(ResourceOperationStatus status) { + // internal + } + + // internal + private RestResponse sendInternalRequest(String content) { + Header header = new BasicHeader("Authorization", adapterConfig.getInfraAuth()); + this.nssmfUrl = adapterConfig.getInfraEndpoint() + this.nssmfUrl; + return restUtil.send(this.nssmfUrl, this.httpMethod, content, header); + } + + @Override + protected String getApiVersion() { + return NssmfAdapterConsts.CURRENT_INTERNAL_NSSMF_API_VERSION; + } + + + @Override + protected SelectionType doQueryNSSISelectionCapability() { + return SelectionType.NSSMF; + } + + @Override + protected String wrapModifyReqBody(NssmfAdapterNBIRequest nbiRequest) throws ApplicationException { + return doWrapModifyReqBody(nbiRequest); + } + + protected abstract String doWrapModifyReqBody(NssmfAdapterNBIRequest nbiRequest) throws ApplicationException; + + @Override + protected RestResponse doQuerySubnetCapability(QuerySubnetCapability req) throws ApplicationException { + // handler + return sendRequest(marshal(req)); + } +} diff --git a/so-nssmf-adapter-application/src/main/java/org/onap/so/adapters/nssmf/manager/impl/external/ExternalAnNssmfManager.java b/so-nssmf-adapter-application/src/main/java/org/onap/so/adapters/nssmf/manager/impl/external/ExternalAnNssmfManager.java new file mode 100644 index 0000000..cd4d637 --- /dev/null +++ b/so-nssmf-adapter-application/src/main/java/org/onap/so/adapters/nssmf/manager/impl/external/ExternalAnNssmfManager.java @@ -0,0 +1,171 @@ +/*- + * ============LICENSE_START======================================================= + * ONAP - SO + * ================================================================================ + # Copyright (c) 2020, CMCC Technologies Co., Ltd. + # + # Licensed under the Apache License, Version 2.0 (the "License") + # you may not use this file except in compliance with the License. + # You may obtain a copy of the License at + # + # http://www.apache.org/licenses/LICENSE-2.0 + # + # Unless required by applicable law or agreed to in writing, software + # distributed under the License is distributed on an "AS IS" BASIS, + # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + # See the License for the specific language governing permissions and + # limitations under the License. + * ============LICENSE_END========================================================= + */ + +package org.onap.so.adapters.nssmf.manager.impl.external; + +import org.onap.so.adapters.nssmf.entity.RestResponse; +import org.onap.so.adapters.nssmf.enums.ActionType; +import org.onap.so.adapters.nssmf.enums.JobStatus; +import org.onap.so.adapters.nssmf.enums.SelectionType; +import org.onap.so.adapters.nssmf.exceptions.ApplicationException; +import org.onap.so.adapters.nssmf.manager.impl.ExternalNssmfManager; +import org.onap.so.adapters.nssmf.util.NssmfAdapterUtil; +import org.onap.so.beans.nsmf.AnSliceProfile; +import org.onap.so.beans.nsmf.DeAllocateNssi; +import org.onap.so.beans.nsmf.NssiResponse; +import org.onap.so.beans.nsmf.NssmfAdapterNBIRequest; +import org.onap.so.beans.nsmf.ResponseDescriptor; +import org.onap.so.beans.nsmf.JobStatusResponse; +import org.onap.so.db.request.beans.ResourceOperationStatus; +import java.util.HashMap; +import java.util.Map; +import java.util.UUID; +import static org.onap.so.adapters.nssmf.util.NssmfAdapterUtil.marshal; +import static org.onap.so.adapters.nssmf.util.NssmfAdapterUtil.unMarshal; + + +public class ExternalAnNssmfManager extends ExternalNssmfManager { + + private Map bodyParams = new HashMap<>(); // request body params + + @Override + protected String doWrapExtAllocateReqBody(NssmfAdapterNBIRequest nbiRequest) throws ApplicationException { + Map request = new HashMap<>(); + + AnSliceProfile anSliceProfile = nbiRequest.getAllocateAnNssi().getSliceProfile(); + + RanSliceProfile ranSliceProfile = new RanSliceProfile(); + ranSliceProfile.setSliceProfileId(anSliceProfile.getSliceProfileId()); + ranSliceProfile.setSNSSAIList(anSliceProfile.getSNSSAIList()); + ranSliceProfile.setPLMNIdList(anSliceProfile.getPLMNIdList()); + ranSliceProfile.setPerfReq(anSliceProfile.getPerfReq()); + ranSliceProfile.setMaxNumberofUEs(anSliceProfile.getMaxNumberOfUEs()); + ranSliceProfile.setCoverageAreaTAList(anSliceProfile.getCoverageAreaTAList()); + ranSliceProfile.setLatency(anSliceProfile.getLatency()); + ranSliceProfile.setUEMobilityLevel(anSliceProfile.getUeMobilityLevel()); + ranSliceProfile.setResourceSharingLevel(anSliceProfile.getResourceSharingLevel()); + + request.put("attributeListIn", ranSliceProfile); + return marshal(request); + } + + @Override + protected void doAfterRequest() throws ApplicationException { + if (ActionType.ALLOCATE.equals(actionType) || ActionType.DEALLOCATE.equals(actionType)) { + String nssiId; + if (ActionType.ALLOCATE.equals(actionType)) { + @SuppressWarnings("unchecked") + Map response = unMarshal(restResponse.getResponseContent(), Map.class); + nssiId = response.get("href"); + } else { + nssiId = this.bodyParams.get("nssiId"); + } + + NssiResponse resp = new NssiResponse(); + resp.setJobId(UUID.randomUUID().toString()); + resp.setNssiId(nssiId); + + RestResponse returnRsp = new RestResponse(); + + returnRsp.setStatus(202); + returnRsp.setResponseContent(marshal(resp)); + restResponse = returnRsp; + + ResourceOperationStatus status = + new ResourceOperationStatus(serviceInfo.getNsiId(), resp.getJobId(), serviceInfo.getServiceUuid()); + status.setResourceInstanceID(nssiId); + status.setOperType(actionType.toString()); + + updateDbStatus(status, restResponse.getStatus(), JobStatus.STARTED, + NssmfAdapterUtil.getStatusDesc(actionType)); + } + // todo + } + + @Override + protected String doWrapModifyReqBody(NssmfAdapterNBIRequest nbiRequest) throws ApplicationException { + // TODO + return null; + } + + @Override + protected String doWrapDeAllocateReqBody(DeAllocateNssi deAllocateNssi) throws ApplicationException { + this.bodyParams.clear(); + this.bodyParams.put("nssiId", deAllocateNssi.getNssiId()); + + Map request = new HashMap<>(); + request.put("nSSId", deAllocateNssi.getNssiId()); + return marshal(request); + } + + + @Override + public RestResponse modifyNssi(NssmfAdapterNBIRequest modifyRequest) throws ApplicationException { + // TODO + return null; + } + + @Override + public RestResponse activateNssi(NssmfAdapterNBIRequest nbiRequest, String snssai) throws ApplicationException { + NssiResponse resp = new NssiResponse(); + String nssiId = nbiRequest.getActDeActNssi().getNssiId(); + resp.setJobId(UUID.randomUUID().toString()); + resp.setNssiId(nssiId); + + RestResponse returnRsp = new RestResponse(); + + returnRsp.setStatus(202); + returnRsp.setResponseContent(marshal(resp)); + + ResourceOperationStatus status = + new ResourceOperationStatus(serviceInfo.getNsiId(), resp.getJobId(), serviceInfo.getServiceUuid()); + status.setResourceInstanceID(nssiId); + status.setOperType(actionType.toString()); + + updateDbStatus(status, returnRsp.getStatus(), JobStatus.FINISHED, NssmfAdapterUtil.getStatusDesc(actionType)); + return returnRsp; + } + + @Override + protected RestResponse doQueryJobStatus(ResourceOperationStatus status) throws ApplicationException { + ResponseDescriptor responseDescriptor = new ResponseDescriptor(); + responseDescriptor.setStatus(JobStatus.FINISHED.toString()); + responseDescriptor.setProgress(100); + responseDescriptor.setStatusDescription("Finished"); + + JobStatusResponse jobStatusResponse = new JobStatusResponse(); + jobStatusResponse.setResponseDescriptor(responseDescriptor); + + RestResponse restResponse = new RestResponse(); + restResponse.setStatus(200); + restResponse.setResponseContent(marshal(jobStatusResponse)); + + updateRequestDbJobStatus(responseDescriptor, status, restResponse); + + status.setProgress(Integer.toString(responseDescriptor.getProgress())); + + return restResponse; + } + + @Override + protected SelectionType doQueryNSSISelectionCapability() { + return SelectionType.NSSMF; + } +} diff --git a/so-nssmf-adapter-application/src/main/java/org/onap/so/adapters/nssmf/manager/impl/external/ExternalCnNssmfManager.java b/so-nssmf-adapter-application/src/main/java/org/onap/so/adapters/nssmf/manager/impl/external/ExternalCnNssmfManager.java new file mode 100644 index 0000000..f38bc62 --- /dev/null +++ b/so-nssmf-adapter-application/src/main/java/org/onap/so/adapters/nssmf/manager/impl/external/ExternalCnNssmfManager.java @@ -0,0 +1,53 @@ +/*- + * ============LICENSE_START======================================================= + * ONAP - SO + * ================================================================================ + # Copyright (c) 2020, CMCC Technologies Co., Ltd. + # + # Licensed under the Apache License, Version 2.0 (the "License") + # you may not use this file except in compliance with the License. + # You may obtain a copy of the License at + # + # http://www.apache.org/licenses/LICENSE-2.0 + # + # Unless required by applicable law or agreed to in writing, software + # distributed under the License is distributed on an "AS IS" BASIS, + # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + # See the License for the specific language governing permissions and + # limitations under the License. + * ============LICENSE_END========================================================= + */ + +package org.onap.so.adapters.nssmf.manager.impl.external; + +import org.onap.so.adapters.nssmf.enums.SelectionType; +import org.onap.so.adapters.nssmf.exceptions.ApplicationException; +import org.onap.so.adapters.nssmf.manager.impl.ExternalNssmfManager; +import org.onap.so.beans.nsmf.DeAllocateNssi; +import org.onap.so.beans.nsmf.NssmfAdapterNBIRequest; +import static org.onap.so.adapters.nssmf.util.NssmfAdapterUtil.marshal; + +public class ExternalCnNssmfManager extends ExternalNssmfManager { + + @Override + protected String doWrapExtAllocateReqBody(NssmfAdapterNBIRequest nbiRequest) throws ApplicationException { + return marshal(nbiRequest.getAllocateCnNssi()); + } + + @Override + protected String doWrapModifyReqBody(NssmfAdapterNBIRequest nbiRequest) throws ApplicationException { + return marshal(nbiRequest.getAllocateCnNssi()); + } + + @Override + protected String doWrapDeAllocateReqBody(DeAllocateNssi deAllocateNssi) throws ApplicationException { + return marshal(deAllocateNssi); + } + + @Override + protected SelectionType doQueryNSSISelectionCapability() { + + return SelectionType.NSMF; + } + +} diff --git a/so-nssmf-adapter-application/src/main/java/org/onap/so/adapters/nssmf/manager/impl/external/RanSliceProfile.java b/so-nssmf-adapter-application/src/main/java/org/onap/so/adapters/nssmf/manager/impl/external/RanSliceProfile.java new file mode 100644 index 0000000..baf9019 --- /dev/null +++ b/so-nssmf-adapter-application/src/main/java/org/onap/so/adapters/nssmf/manager/impl/external/RanSliceProfile.java @@ -0,0 +1,70 @@ +/*- + * ============LICENSE_START======================================================= + * ONAP - SO + * ================================================================================ + * Copyright (C) 2020 Huawei Technologies Co., Ltd. All rights reserved. + * ================================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============LICENSE_END========================================================= + */ + +package org.onap.so.adapters.nssmf.manager.impl.external; + +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.Data; +import java.io.Serializable; +import java.util.List; +import org.onap.so.beans.nsmf.PerfReq; +import org.onap.so.beans.nsmf.UeMobilityLevel; +import org.onap.so.beans.nsmf.ResourceSharingLevel; + +@JsonInclude(JsonInclude.Include.NON_NULL) +@Data +public class RanSliceProfile implements Serializable { + /* + * Reference 3GPP TS 28.541 V16.5.0, Section 6.3.4. + */ + + private static final long serialVersionUID = 172447042469370448L; + + @JsonProperty(value = "sliceProfileId", required = true) + private String sliceProfileId; + + @JsonProperty(value = "sNSSAIList", required = true) + private List sNSSAIList; + + @JsonProperty(value = "pLMNIdList", required = true) + private List pLMNIdList; + + @JsonProperty(value = "perfReq", required = true) + private PerfReq perfReq; + + @JsonInclude(JsonInclude.Include.NON_DEFAULT) + @JsonProperty(value = "maxNumberofUEs") + private long maxNumberofUEs; + + @JsonProperty(value = "coverageAreaTAList") + private List coverageAreaTAList; + + @JsonInclude(JsonInclude.Include.NON_DEFAULT) + @JsonProperty(value = "latency") + private int latency; + + @JsonProperty(value = "uEMobilityLevel") + private UeMobilityLevel uEMobilityLevel; + + @JsonProperty(value = "resourceSharingLevel") + private ResourceSharingLevel resourceSharingLevel; + +} diff --git a/so-nssmf-adapter-application/src/main/java/org/onap/so/adapters/nssmf/manager/impl/internal/InternalAnNssmfManager.java b/so-nssmf-adapter-application/src/main/java/org/onap/so/adapters/nssmf/manager/impl/internal/InternalAnNssmfManager.java new file mode 100644 index 0000000..de0f1c7 --- /dev/null +++ b/so-nssmf-adapter-application/src/main/java/org/onap/so/adapters/nssmf/manager/impl/internal/InternalAnNssmfManager.java @@ -0,0 +1,54 @@ +/*- + * ============LICENSE_START======================================================= + * ONAP - SO + * ================================================================================ + # Copyright (c) 2020, CMCC Technologies Co., Ltd. + # + # Licensed under the Apache License, Version 2.0 (the "License") + # you may not use this file except in compliance with the License. + # You may obtain a copy of the License at + # + # http://www.apache.org/licenses/LICENSE-2.0 + # + # Unless required by applicable law or agreed to in writing, software + # distributed under the License is distributed on an "AS IS" BASIS, + # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + # See the License for the specific language governing permissions and + # limitations under the License. + * ============LICENSE_END========================================================= + */ + +package org.onap.so.adapters.nssmf.manager.impl.internal; + +import org.onap.so.adapters.nssmf.exceptions.ApplicationException; +import org.onap.so.adapters.nssmf.manager.impl.InternalNssmfManager; +import org.onap.so.beans.nsmf.*; +import java.util.HashMap; +import java.util.Map; +import static org.onap.so.adapters.nssmf.util.NssmfAdapterUtil.marshal; + + +public class InternalAnNssmfManager extends InternalNssmfManager { + + @Override + protected String doWrapAllocateReqBody(NssmfAdapterNBIRequest nbiRequest) throws ApplicationException { + NssmfRequest request = + new NssmfRequest(serviceInfo, nbiRequest.getEsrInfo().getNetworkType(), nbiRequest.getAllocateAnNssi()); + request.setName(nbiRequest.getAllocateAnNssi().getNssiName()); + return marshal(request); + } + + @Override + protected String doWrapModifyReqBody(NssmfAdapterNBIRequest nbiRequest) throws ApplicationException { + AllocateAnNssi allocateAnNssi = nbiRequest.getAllocateAnNssi(); + AnSliceProfile sliceProfile = allocateAnNssi.getSliceProfile(); + Map additional = new HashMap<>(); + additional.put("modifyAction", "allocate"); + additional.put("snssaiList", sliceProfile.getSNSSAIList()); + additional.put("sliceProfileId", sliceProfile.getSliceProfileId()); + additional.put("nsiInfo", allocateAnNssi.getNsiInfo()); + additional.put("scriptName", allocateAnNssi.getScriptName()); + NssmfRequest request = new NssmfRequest(serviceInfo, esrInfo.getNetworkType(), additional); + return marshal(request); + } +} diff --git a/so-nssmf-adapter-application/src/main/java/org/onap/so/adapters/nssmf/manager/impl/internal/InternalCnNssmfManager.java b/so-nssmf-adapter-application/src/main/java/org/onap/so/adapters/nssmf/manager/impl/internal/InternalCnNssmfManager.java new file mode 100644 index 0000000..3f594cc --- /dev/null +++ b/so-nssmf-adapter-application/src/main/java/org/onap/so/adapters/nssmf/manager/impl/internal/InternalCnNssmfManager.java @@ -0,0 +1,56 @@ +/*- + * ============LICENSE_START======================================================= + * ONAP - SO + * ================================================================================ + # Copyright (c) 2020, CMCC Technologies Co., Ltd. + # + # Licensed under the Apache License, Version 2.0 (the "License") + # you may not use this file except in compliance with the License. + # You may obtain a copy of the License at + # + # http://www.apache.org/licenses/LICENSE-2.0 + # + # Unless required by applicable law or agreed to in writing, software + # distributed under the License is distributed on an "AS IS" BASIS, + # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + # See the License for the specific language governing permissions and + # limitations under the License. + * ============LICENSE_END========================================================= + */ + +package org.onap.so.adapters.nssmf.manager.impl.internal; + +import org.onap.so.adapters.nssmf.exceptions.ApplicationException; +import org.onap.so.adapters.nssmf.manager.impl.InternalNssmfManager; +import org.onap.so.beans.nsmf.*; +import java.util.HashMap; +import java.util.Map; +import static org.onap.so.adapters.nssmf.util.NssmfAdapterUtil.marshal; + +public class InternalCnNssmfManager extends InternalNssmfManager { + + @Override + protected String doWrapAllocateReqBody(NssmfAdapterNBIRequest nbiRequest) throws ApplicationException { + + NssmfRequest request = + new NssmfRequest(serviceInfo, nbiRequest.getEsrInfo().getNetworkType(), nbiRequest.getAllocateCnNssi()); + request.setName(nbiRequest.getAllocateCnNssi().getNssiName()); + return marshal(request); + } + + @Override + protected String doWrapModifyReqBody(NssmfAdapterNBIRequest nbiRequest) throws ApplicationException { + AllocateCnNssi allocateCnNssi = nbiRequest.getAllocateCnNssi(); + CnSliceProfile cnSliceProfile = allocateCnNssi.getSliceProfile(); + Map additional = new HashMap<>(); + additional.put("modifyAction", "allocate"); + additional.put("nsiInfo", allocateCnNssi.getNsiInfo()); + additional.put("scriptName", allocateCnNssi.getScriptName()); + additional.put("snssaiList", cnSliceProfile.getSnssaiList()); + additional.put("sliceProfileId", cnSliceProfile.getSliceProfileId()); + + NssmfRequest request = new NssmfRequest(serviceInfo, esrInfo.getNetworkType(), additional); + return marshal(request); + } + +} diff --git a/so-nssmf-adapter-application/src/main/java/org/onap/so/adapters/nssmf/manager/impl/internal/InternalTnNssmfManager.java b/so-nssmf-adapter-application/src/main/java/org/onap/so/adapters/nssmf/manager/impl/internal/InternalTnNssmfManager.java new file mode 100644 index 0000000..c915684 --- /dev/null +++ b/so-nssmf-adapter-application/src/main/java/org/onap/so/adapters/nssmf/manager/impl/internal/InternalTnNssmfManager.java @@ -0,0 +1,42 @@ +/*- + * ============LICENSE_START======================================================= + * ONAP - SO + * ================================================================================ + # Copyright (c) 2020, CMCC Technologies Co., Ltd. + # + # Licensed under the Apache License, Version 2.0 (the "License") + # you may not use this file except in compliance with the License. + # You may obtain a copy of the License at + # + # http://www.apache.org/licenses/LICENSE-2.0 + # + # Unless required by applicable law or agreed to in writing, software + # distributed under the License is distributed on an "AS IS" BASIS, + # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + # See the License for the specific language governing permissions and + # limitations under the License. + * ============LICENSE_END========================================================= + */ + +package org.onap.so.adapters.nssmf.manager.impl.internal; + +import org.onap.so.adapters.nssmf.exceptions.ApplicationException; +import org.onap.so.adapters.nssmf.manager.impl.InternalNssmfManager; +import org.onap.so.beans.nsmf.*; +import static org.onap.so.adapters.nssmf.util.NssmfAdapterUtil.marshal; + +public class InternalTnNssmfManager extends InternalNssmfManager { + + @Override + protected String doWrapAllocateReqBody(NssmfAdapterNBIRequest nbiRequest) throws ApplicationException { + + return marshal(new NssmfRequest(serviceInfo, nbiRequest.getEsrInfo().getNetworkType(), + nbiRequest.getAllocateTnNssi())); + } + + @Override + protected String doWrapModifyReqBody(NssmfAdapterNBIRequest nbiRequest) throws ApplicationException { + // TODO + return doWrapAllocateReqBody(nbiRequest); + } +} diff --git a/so-nssmf-adapter-application/src/main/java/org/onap/so/adapters/nssmf/service/NssmfManagerService.java b/so-nssmf-adapter-application/src/main/java/org/onap/so/adapters/nssmf/service/NssmfManagerService.java new file mode 100644 index 0000000..8355fcf --- /dev/null +++ b/so-nssmf-adapter-application/src/main/java/org/onap/so/adapters/nssmf/service/NssmfManagerService.java @@ -0,0 +1,45 @@ +/*- + * ============LICENSE_START======================================================= + * ONAP - SO + * ================================================================================ + # Copyright (c) 2020, CMCC Technologies Co., Ltd. + # + # Licensed under the Apache License, Version 2.0 (the "License") + # you may not use this file except in compliance with the License. + # You may obtain a copy of the License at + # + # http://www.apache.org/licenses/LICENSE-2.0 + # + # Unless required by applicable law or agreed to in writing, software + # distributed under the License is distributed on an "AS IS" BASIS, + # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + # See the License for the specific language governing permissions and + # limitations under the License. + * ============LICENSE_END========================================================= + */ + +package org.onap.so.adapters.nssmf.service; + +import org.onap.so.adapters.nssmf.annotation.ServiceLogger; +import org.onap.so.beans.nsmf.*; +import org.springframework.http.ResponseEntity; +import org.springframework.stereotype.Service; + +@Service +@ServiceLogger +public interface NssmfManagerService { + ResponseEntity allocateNssi(NssmfAdapterNBIRequest allocateRequest); + + ResponseEntity deAllocateNssi(NssmfAdapterNBIRequest allocateRequest, String sliceProfileId); + + ResponseEntity activateNssi(NssmfAdapterNBIRequest deActRequest, String snssai); + + ResponseEntity deActivateNssi(NssmfAdapterNBIRequest nssiDeActivate, String snssai); + + ResponseEntity queryJobStatus(NssmfAdapterNBIRequest jobReq, String jobId); + + ResponseEntity queryNSSISelectionCapability(NssmfAdapterNBIRequest nbiRequest); + + ResponseEntity querySubnetCapability(NssmfAdapterNBIRequest nbiRequest); + +} diff --git a/so-nssmf-adapter-application/src/main/java/org/onap/so/adapters/nssmf/service/impl/NssmfManagerServiceImpl.java b/so-nssmf-adapter-application/src/main/java/org/onap/so/adapters/nssmf/service/impl/NssmfManagerServiceImpl.java new file mode 100644 index 0000000..960632a --- /dev/null +++ b/so-nssmf-adapter-application/src/main/java/org/onap/so/adapters/nssmf/service/impl/NssmfManagerServiceImpl.java @@ -0,0 +1,143 @@ +/*- + * ============LICENSE_START======================================================= + * ONAP - SO + * ================================================================================ + # Copyright (c) 2020, CMCC Technologies Co., Ltd. + # + # Licensed under the Apache License, Version 2.0 (the "License") + # you may not use this file except in compliance with the License. + # You may obtain a copy of the License at + # + # http://www.apache.org/licenses/LICENSE-2.0 + # + # Unless required by applicable law or agreed to in writing, software + # distributed under the License is distributed on an "AS IS" BASIS, + # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + # See the License for the specific language governing permissions and + # limitations under the License. + * ============LICENSE_END========================================================= + */ + +package org.onap.so.adapters.nssmf.service.impl; + +import org.apache.commons.lang3.StringUtils; +import org.onap.so.adapters.nssmf.annotation.ServiceLogger; +import org.onap.so.adapters.nssmf.config.NssmfAdapterConfig; +import org.onap.so.adapters.nssmf.enums.ActionType; +import org.onap.so.adapters.nssmf.exceptions.ApplicationException; +import org.onap.so.adapters.nssmf.manager.NssmfManagerBuilder; +import org.onap.so.adapters.nssmf.entity.RestResponse; +import org.onap.so.adapters.nssmf.manager.NssmfManager; +import org.onap.so.adapters.nssmf.service.NssmfManagerService; +import org.onap.so.adapters.nssmf.util.RestUtil; +import org.onap.so.beans.nsmf.*; +import org.onap.so.db.request.data.repository.ResourceOperationStatusRepository; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.ResponseEntity; +import org.springframework.stereotype.Service; + + +@Service +@ServiceLogger +public class NssmfManagerServiceImpl implements NssmfManagerService { + + @Autowired + private RestUtil restUtil; + + @Autowired + private ResourceOperationStatusRepository repository; + + @Autowired + private NssmfAdapterConfig nssmfAdapterConfig; + + @Override + public ResponseEntity allocateNssi(NssmfAdapterNBIRequest request) { + try { + + if (StringUtils.isNotBlank(request.getServiceInfo().getNssiId())) { + return buildResponse(buildNssmfManager(request, ActionType.MODIFY).modifyNssi(request)); + } + + return buildResponse(buildNssmfManager(request, ActionType.ALLOCATE).allocateNssi(request)); + + } catch (ApplicationException e) { + return e.buildErrorResponse(); + } + } + + @Override + public ResponseEntity deAllocateNssi(NssmfAdapterNBIRequest request, String sliceProfileId) { + try { + return buildResponse( + buildNssmfManager(request, ActionType.DEALLOCATE).deAllocateNssi(request, sliceProfileId)); + } catch (ApplicationException e) { + return e.buildErrorResponse(); + } + } + + @Override + public ResponseEntity activateNssi(NssmfAdapterNBIRequest request, String snssai) { + try { + return buildResponse(buildNssmfManager(request, ActionType.ACTIVATE).activateNssi(request, snssai)); + } catch (ApplicationException e) { + return e.buildErrorResponse(); + } + } + + @Override + public ResponseEntity deActivateNssi(NssmfAdapterNBIRequest request, String snssai) { + try { + return buildResponse(buildNssmfManager(request, ActionType.DEACTIVATE).deActivateNssi(request, snssai)); + } catch (ApplicationException e) { + return e.buildErrorResponse(); + } + } + + @Override + public ResponseEntity queryJobStatus(NssmfAdapterNBIRequest jobReq, String jobId) { + try { + return buildResponse(buildNssmfManager(jobReq, ActionType.QUERY_JOB_STATUS).queryJobStatus(jobReq, jobId)); + } catch (ApplicationException e) { + return e.buildErrorResponse(); + } + } + + @Override + public ResponseEntity queryNSSISelectionCapability(NssmfAdapterNBIRequest nbiRequest) { + EsrInfo esrInfo = nbiRequest.getEsrInfo(); + try { + return buildResponse(buildNssmfManager(esrInfo, ActionType.QUERY_NSSI_SELECTION_CAPABILITY, null) + .queryNSSISelectionCapability(nbiRequest)); + } catch (ApplicationException e) { + return e.buildErrorResponse(); + } + } + + @Override + public ResponseEntity querySubnetCapability(NssmfAdapterNBIRequest nbiRequest) { + EsrInfo esrInfo = nbiRequest.getEsrInfo(); + try { + return buildResponse(buildNssmfManager(esrInfo, ActionType.QUERY_SUB_NET_CAPABILITY, null) + .querySubnetCapability(nbiRequest)); + } catch (ApplicationException e) { + return e.buildErrorResponse(); + } + } + + private ResponseEntity buildResponse(RestResponse rsp) { + return ResponseEntity.status(rsp.getStatus()).body(rsp.getResponseContent()); + } + + + private NssmfManager buildNssmfManager(NssmfAdapterNBIRequest request, ActionType actionType) + throws ApplicationException { + return buildNssmfManager(request.getEsrInfo(), actionType, request.getServiceInfo()); + } + + private NssmfManager buildNssmfManager(EsrInfo esrInfo, ActionType actionType, ServiceInfo serviceInfo) + throws ApplicationException { + + return new NssmfManagerBuilder(esrInfo).setActionType(actionType).setRepository(repository) + .setRestUtil(restUtil).setAdapterConfig(nssmfAdapterConfig).setServiceInfo(serviceInfo).build(); + } +} diff --git a/so-nssmf-adapter-application/src/main/java/org/onap/so/adapters/nssmf/util/NssmfAdapterUtil.java b/so-nssmf-adapter-application/src/main/java/org/onap/so/adapters/nssmf/util/NssmfAdapterUtil.java new file mode 100644 index 0000000..d45aac4 --- /dev/null +++ b/so-nssmf-adapter-application/src/main/java/org/onap/so/adapters/nssmf/util/NssmfAdapterUtil.java @@ -0,0 +1,123 @@ +/*- + * ============LICENSE_START======================================================= + * ONAP - SO + * ================================================================================ + * Copyright (C) 2020 Huawei Technologies Co., Ltd. All rights reserved. + * ================================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============LICENSE_END========================================================= + */ + +package org.onap.so.adapters.nssmf.util; + +import com.fasterxml.jackson.databind.ObjectMapper; +import java.io.IOException; +import org.onap.so.adapters.nssmf.enums.ActionType; +import org.onap.so.adapters.nssmf.exceptions.ApplicationException; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.onap.logging.filter.base.ErrorCode; +import org.springframework.stereotype.Component; +import static org.onap.so.logger.LoggingAnchor.THREE; +import static org.onap.so.logger.MessageEnum.RA_NS_EXC; + +public class NssmfAdapterUtil { + + private static final Logger LOGGER = LoggerFactory.getLogger(NssmfAdapterUtil.class); + + public static final int BAD_REQUEST = 400; + + private static final String UNMARSHAL_FAIL_MSG = "Failed to unmarshal json"; + + private static final String MARSHAL_FAIL_MSG = "Failed to marshal object"; + + private static final ObjectMapper MAPPER = new ObjectMapper(); + + public static class StatusDesc { + + public static final String ALLOCATE_NSS_SUCCESS = "Allocating nss is " + "successful"; + + public static final String MODIFY_NSS_SUCCESS = "Modify nss is " + "successful"; + + public static final String CREATE_NSS_SUCCESS = "Creating nss is " + "successful"; + + public static final String DEALLOCATE_NSS_SUCCESS = "Deallocate nss " + "is successful"; + + public static final String ACTIVATE_NSS_SUCCESS = "Activate nss " + "is successful"; + + public static final String DEACTIVATE_NSS_SUCCESS = "Deactivate nss " + "is successful"; + + public static final String QUERY_JOB_STATUS_FAILED = "Query job " + "status failed"; + + public static final String QUERY_JOB_STATUS_SUCCESS = "Query job " + "status is successful"; + + private StatusDesc() { + + } + } + + private NssmfAdapterUtil() { + + } + + public static void assertObjectNotNull(Object object) throws ApplicationException { + if (null == object) { + LOGGER.error("Object is null."); + throw new ApplicationException(BAD_REQUEST, "An object is null."); + } + } + + public static T unMarshal(String jsonstr, Class type) throws ApplicationException { + try { + return MAPPER.readValue(jsonstr, type); + } catch (IOException e) { + LOGGER.error(THREE, RA_NS_EXC.toString(), ErrorCode.BusinessProcessError.getValue(), UNMARSHAL_FAIL_MSG, e); + throw new ApplicationException(BAD_REQUEST, UNMARSHAL_FAIL_MSG); + } + } + + public static String marshal(Object srcObj) throws ApplicationException { + try { + return MAPPER.writerWithDefaultPrettyPrinter().writeValueAsString(srcObj); + } catch (IOException e) { + LOGGER.error(THREE, RA_NS_EXC.toString(), ErrorCode.BusinessProcessError.getValue(), MARSHAL_FAIL_MSG, e); + throw new ApplicationException(BAD_REQUEST, MARSHAL_FAIL_MSG); + } + } + + + public static String getStatusDesc(ActionType actionType) { + String desc = ""; + switch (actionType) { + case ALLOCATE: + desc = StatusDesc.ALLOCATE_NSS_SUCCESS; + break; + case DEALLOCATE: + desc = StatusDesc.DEALLOCATE_NSS_SUCCESS; + break; + case ACTIVATE: + desc = StatusDesc.ACTIVATE_NSS_SUCCESS; + break; + case DEACTIVATE: + desc = StatusDesc.DEACTIVATE_NSS_SUCCESS; + break; + case MODIFY: + desc = StatusDesc.MODIFY_NSS_SUCCESS; + break; + default: + break; + } + + return desc; + } +} diff --git a/so-nssmf-adapter-application/src/main/java/org/onap/so/adapters/nssmf/util/RestUtil.java b/so-nssmf-adapter-application/src/main/java/org/onap/so/adapters/nssmf/util/RestUtil.java new file mode 100644 index 0000000..9a23978 --- /dev/null +++ b/so-nssmf-adapter-application/src/main/java/org/onap/so/adapters/nssmf/util/RestUtil.java @@ -0,0 +1,353 @@ +/*- + * ============LICENSE_START======================================================= + * ONAP - SO + * ================================================================================ + * Copyright (C) 2020 Huawei Technologies Co., Ltd. All rights reserved. + * ================================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============LICENSE_END========================================================= + */ + +package org.onap.so.adapters.nssmf.util; + +import javax.net.ssl.*; +import javax.ws.rs.core.UriBuilder; +import java.net.SocketTimeoutException; +import java.net.URI; +import org.apache.http.Header; +import org.apache.http.HttpResponse; +import org.apache.http.client.HttpClient; +import org.apache.http.client.config.RequestConfig; +import org.apache.http.client.methods.*; +import org.apache.http.conn.ConnectTimeoutException; +import org.apache.http.conn.ssl.SSLConnectionSocketFactory; +import org.apache.http.entity.StringEntity; +import org.apache.http.impl.client.HttpClients; +import org.apache.http.message.BasicHeader; +import org.apache.http.util.EntityUtils; +import org.onap.aai.domain.yang.*; +import org.onap.so.adapters.nssmf.exceptions.ApplicationException; +import org.onap.so.adapters.nssmf.extclients.aai.AaiServiceProvider; +import org.onap.so.adapters.nssmf.entity.TokenRequest; +import org.onap.so.adapters.nssmf.entity.TokenResponse; +import org.onap.so.adapters.nssmf.enums.HttpMethod; +import org.onap.so.adapters.nssmf.entity.NssmfInfo; +import org.onap.so.adapters.nssmf.entity.RestResponse; +import org.onap.so.beans.nsmf.EsrInfo; +import org.onap.so.beans.nsmf.ServiceInfo; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; +import static org.apache.http.entity.ContentType.APPLICATION_JSON; +import static org.onap.so.adapters.nssmf.enums.HttpMethod.POST; +import static org.onap.so.adapters.nssmf.util.NssmfAdapterUtil.BAD_REQUEST; +import static org.onap.so.adapters.nssmf.util.NssmfAdapterUtil.marshal; +import static org.onap.so.adapters.nssmf.util.NssmfAdapterUtil.unMarshal; +import static org.onap.logging.filter.base.ErrorCode.AvailabilityError; +import static org.onap.so.logger.LoggingAnchor.FOUR; +import static org.onap.so.logger.MessageEnum.RA_NS_EXC; + +@Component +public class RestUtil { + + private static final Logger logger = LoggerFactory.getLogger(RestUtil.class); + + private static final int DEFAULT_TIME_OUT = 60000; + + private static final String NSSMI_ADAPTER = "NSSMI Adapter"; + + private static final String TOKEN_URL = "/api/rest/securityManagement/v1" + "/oauth/token"; + + @Autowired + private AaiServiceProvider aaiSvcProv; + + public void createServiceInstance(ServiceInstance serviceInstance, ServiceInfo serviceInfo) { + aaiSvcProv.invokeCreateServiceInstance(serviceInstance, serviceInfo.getGlobalSubscriberId(), + serviceInfo.getSubscriptionServiceType(), serviceInfo.getNssiId()); + } + + public ServiceInstance getServiceInstance(ServiceInfo serviceInfo) { + return aaiSvcProv.invokeGetServiceInstance(serviceInfo.getGlobalSubscriberId(), + serviceInfo.getSubscriptionServiceType(), serviceInfo.getNssiId()); + } + + public void deleteServiceInstance(ServiceInfo serviceInfo) { + aaiSvcProv.invokeDeleteServiceInstance(serviceInfo.getGlobalSubscriberId(), + serviceInfo.getSubscriptionServiceType(), serviceInfo.getNssiId()); + } + + public NssmfInfo getNssmfHost(EsrInfo esrInfo) throws ApplicationException { + EsrThirdpartySdncList sdncList = aaiSvcProv.invokeGetThirdPartySdncList(); + if (sdncList != null && sdncList.getEsrThirdpartySdnc() != null) { + for (EsrThirdpartySdnc sdncEsr : sdncList.getEsrThirdpartySdnc()) { + + EsrSystemInfoList sysInfoList = + aaiSvcProv.invokeGetThirdPartySdncEsrSystemInfo(sdncEsr.getThirdpartySdncId()); + + if (sysInfoList != null && sysInfoList.getEsrSystemInfo() != null) { + for (EsrSystemInfo esr : sysInfoList.getEsrSystemInfo()) { + if (esr != null && esr.getType().equals(esrInfo.getNetworkType().getNetworkType()) + && esr.getVendor().equals(esrInfo.getVendor())) { + logger.info("Found an entry with vendor name " + esrInfo.getVendor() + " and network type " + + esrInfo.getNetworkType() + " in ESR."); + NssmfInfo nssmfInfo = new NssmfInfo(); + nssmfInfo.setIpAddress(esr.getIpAddress()); + nssmfInfo.setPort(esr.getPort()); + nssmfInfo.setCacert(esr.getSslCacert()); + nssmfInfo.setUserName(esr.getUserName()); + nssmfInfo.setPassword(esr.getPassword()); + String endPoint = UriBuilder.fromPath("").host(esr.getIpAddress()) + .port(Integer.valueOf(esr.getPort())).scheme("https").build().toString(); + nssmfInfo.setUrl(endPoint); + return nssmfInfo; + } + } + } + + } + } + + throw new ApplicationException(BAD_REQUEST, "ESR information is improper"); + } + + + public String getToken(NssmfInfo nssmfInfo) throws ApplicationException { + + + TokenRequest req = new TokenRequest(); + req.setGrantType("password"); + req.setUserName(nssmfInfo.getUserName()); + req.setValue(nssmfInfo.getPassword()); + + String tokenReq = marshal(req); + + logger.info("Sending token request to NSSMF: " + tokenReq); + RestResponse tokenRes = send(nssmfInfo.getUrl() + TOKEN_URL, POST, tokenReq, null); + + TokenResponse res = unMarshal(tokenRes.getResponseContent(), TokenResponse.class); + + return res.getAccessToken(); + } + + + public RestResponse send(String url, HttpMethod methodType, String content, Header header) { + + HttpRequestBase req = null; + HttpResponse res = null; + + logger.debug("Beginning to send message {}: {}", methodType, url); + + try { + int timeout = DEFAULT_TIME_OUT; + + RequestConfig config = RequestConfig.custom().setSocketTimeout(timeout).setConnectTimeout(timeout) + .setConnectionRequestTimeout(timeout).build(); + logger.debug("Sending request to NSSMF: " + content); + req = getHttpReq(url, methodType, header, config, content); + res = getHttpsClient().execute(req); + + String resContent = null; + if (res.getEntity() != null) { + resContent = EntityUtils.toString(res.getEntity(), "UTF-8"); + } + + int statusCode = res.getStatusLine().getStatusCode(); + String statusMessage = res.getStatusLine().getReasonPhrase(); + logger.info("NSSMF Response: {} {}", statusCode, + statusMessage + (resContent == null ? "" : System.lineSeparator() + resContent)); + + if (res.getStatusLine().getStatusCode() >= 300) { + String errMsg = "{\n \"errorCode\": " + res.getStatusLine().getStatusCode() + + "\n \"errorDescription\": " + statusMessage + "\n}"; + logError(errMsg); + return createResponse(statusCode, errMsg); + } + if (null != req) { + req.reset(); + } + req = null; + + return createResponse(statusCode, resContent); + + } catch (SocketTimeoutException | ConnectTimeoutException e) { + String errMsg = "Request to NSSMF timed out"; + logError(errMsg, e); + return createResponse(408, errMsg); + } catch (Exception e) { + String errMsg = "Error processing request to NSSMF"; + logError(errMsg, e); + return createResponse(500, errMsg); + } finally { + if (res != null) { + try { + EntityUtils.consume(res.getEntity()); + } catch (Exception e) { + logger.debug("Exception :", e); + } + } + if (req != null) { + try { + req.reset(); + } catch (Exception e) { + logger.debug("Exception :", e); + } + } + } + } + + public RestResponse createResponse(int statusCode, String errMsg) { + RestResponse restResponse = new RestResponse(); + restResponse.setStatus(statusCode); + restResponse.setResponseContent(errMsg); + return restResponse; + } + + private HttpRequestBase getHttpReq(String url, HttpMethod method, Header header, RequestConfig config, + String content) throws ApplicationException { + HttpRequestBase base; + switch (method) { + case POST: + HttpPost post = new HttpPost(url); + post.setEntity(new StringEntity(content, APPLICATION_JSON)); + base = post; + break; + + case GET: + HttpGetWithBody get = new HttpGetWithBody(url); + if (content != null) { + get.setEntity(new StringEntity(content, APPLICATION_JSON)); + } + base = get; + break; + + case PUT: + HttpPut put = new HttpPut(url); + put.setEntity(new StringEntity(content, APPLICATION_JSON)); + base = put; + break; + + case PATCH: + base = new HttpPatch(url); + break; + + case DELETE: + HttpDeleteWithBody delete = new HttpDeleteWithBody(url); + if (content != null) { + delete.setEntity(new StringEntity(content, APPLICATION_JSON)); + } + base = delete; + break; + default: + throw new ApplicationException(404, "invalid method: " + method); + + } + base.setConfig(config); + if (header != null) { + base.setHeader(header); + } + return base; + } + + public RestResponse sendRequest(String allocateUrl, HttpMethod post, String allocateReq, EsrInfo esrInfo) + throws ApplicationException { + NssmfInfo nssmfInfo = getNssmfHost(esrInfo); + Header header = new BasicHeader("X-Auth-Token", getToken(nssmfInfo)); + String nssmfUrl = nssmfInfo.getUrl() + allocateUrl; + return send(nssmfUrl, post, allocateReq, header); + } + + class HttpDeleteWithBody extends HttpEntityEnclosingRequestBase { + public static final String METHOD_NAME = "DELETE"; + + @Override + public String getMethod() { + return METHOD_NAME; + } + + public HttpDeleteWithBody(final String uri) { + super(); + setURI(URI.create(uri)); + } + + public HttpDeleteWithBody(final URI uri) { + super(); + setURI(uri); + } + + public HttpDeleteWithBody() { + super(); + } + } + + class HttpGetWithBody extends HttpEntityEnclosingRequestBase { + public static final String METHOD_NAME = "GET"; + + public HttpGetWithBody() { + super(); + } + + public HttpGetWithBody(final String uri) { + super(); + setURI(URI.create(uri)); + } + + public HttpGetWithBody(final URI uri) { + super(); + setURI(uri); + } + + @Override + public String getMethod() { + return METHOD_NAME; + } + } + + + public HttpClient getHttpsClient() { + + TrustManager[] trustAllCerts = new TrustManager[] {new X509TrustManager() { + @Override + public java.security.cert.X509Certificate[] getAcceptedIssuers() { + return null; + } + + @Override + public void checkClientTrusted(java.security.cert.X509Certificate[] certs, String authType) {} + + @Override + public void checkServerTrusted(java.security.cert.X509Certificate[] certs, String authType) {} + }}; + + // Install the all-trusting trust manager + try { + SSLContext sc = SSLContext.getInstance("SSL"); + sc.init(null, trustAllCerts, new java.security.SecureRandom()); + + SSLConnectionSocketFactory sslsf = new SSLConnectionSocketFactory(sc, + new String[] {"TLSv1", "TLSv1.1", "TLSv1.2", "TLSv1.3"}, null, (s, sslSession) -> true); + return HttpClients.custom().setSSLSocketFactory(sslsf).build(); + } catch (Exception e) { + throw new IllegalArgumentException(e); + } + } + + private static void logError(String errMsg, Throwable t) { + logger.error(FOUR, RA_NS_EXC.toString(), NSSMI_ADAPTER, AvailabilityError.getValue(), errMsg, t); + } + + private static void logError(String errMsg) { + logger.error(FOUR, RA_NS_EXC.toString(), NSSMI_ADAPTER, AvailabilityError.toString(), errMsg); + } +} + diff --git a/so-nssmf-adapter-application/src/main/resources/META-INF/services/org.onap.so.client.RestProperties b/so-nssmf-adapter-application/src/main/resources/META-INF/services/org.onap.so.client.RestProperties new file mode 100644 index 0000000..f93ec63 --- /dev/null +++ b/so-nssmf-adapter-application/src/main/resources/META-INF/services/org.onap.so.client.RestProperties @@ -0,0 +1 @@ +org.onap.so.adapters.nssmf.extclients.aai.AaiClientPropertiesImpl \ No newline at end of file diff --git a/so-nssmf-adapter-application/src/main/resources/application-aaf.yaml b/so-nssmf-adapter-application/src/main/resources/application-aaf.yaml new file mode 100644 index 0000000..e69de29 diff --git a/so-nssmf-adapter-application/src/main/resources/application-basic.yaml b/so-nssmf-adapter-application/src/main/resources/application-basic.yaml new file mode 100644 index 0000000..e69de29 diff --git a/so-nssmf-adapter-application/src/main/resources/application-test.yaml b/so-nssmf-adapter-application/src/main/resources/application-test.yaml new file mode 100644 index 0000000..ecb015e --- /dev/null +++ b/so-nssmf-adapter-application/src/main/resources/application-test.yaml @@ -0,0 +1,60 @@ + +aai: + auth: 2A11B07DB6214A839394AA1EC5844695F5114FC407FF5422625FB00175A3DCB8A1FF745F22867EFA72D5369D599BBD88DA8BED4233CF5586 + endpoint: https://aai.onap:30233 +logging: + path: logs + +spring: + datasource: + jdbcUrl: jdbc:mariadb://49.232.146.162:8989/requestdb + username: root + password: 123456 + driver-class-name: org.mariadb.jdbc.Driver + initialization-mode: always + jpa: + generate-ddl: false + show-sql: false + hibernate: + ddl-auto: none + naming-strategy: org.hibernate.cfg.ImprovedNamingStrategy + enable-lazy-load-no-trans: true + database-platform: org.hibernate.dialect.MySQL5InnoDBDialect + security: + usercredentials: + - username: bpel + password: '$2a$10$Fh9ffgPw2vnmsghsRD3ZauBL1aKXebigbq3BB1RPWtE62UDILsjke' + role: BPEL-Client + - username: mso_admin + password: '$2a$10$Fh9ffgPw2vnmsghsRD3ZauBL1aKXebigbq3BB1RPWtE62UDILsjke' + role: ACTUATOR +server: + port: 8080 + tomcat: + max-threads: 50 + +mso: + key: 07a7159d3bf51a0e53be7a8f89699be7 + site-name: localSite + logPath: ./logs/nssmf + adapters: + requestDb: + endpoint: https://so-request-db-adapter.onap:8083 + auth: Basic YnBlbDpwYXNzd29yZDEk + infra: + endpoint: https://so.onap:8080 + auth: Basic SW5mcmFQb3J0YWxDbGllbnQ6cGFzc3dvcmQxJA== + +#Actuator +management: + endpoints: + web: + base-path: /manage + exposure: + include: "*" + metrics: + se-global-registry: false + export: + prometheus: + enabled: true # Whether exporting of metrics to Prometheus is enabled. + step: 1m # Step size (i.e. reporting frequency) to use. \ No newline at end of file diff --git a/so-nssmf-adapter-application/src/main/resources/application.yaml b/so-nssmf-adapter-application/src/main/resources/application.yaml new file mode 100644 index 0000000..8a8dc7c --- /dev/null +++ b/so-nssmf-adapter-application/src/main/resources/application.yaml @@ -0,0 +1,77 @@ +# +# ============LICENSE_START======================================================= +# ONAP - SO +# ================================================================================ +# Copyright (C) 2020 Huawei Technologies Co., Ltd. All rights reserved. +# ================================================================================ +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# ============LICENSE_END========================================================= +#/ +aai: + auth: 2A11B07DB6214A839394AA1EC5844695F5114FC407FF5422625FB00175A3DCB8A1FF745F22867EFA72D5369D599BBD88DA8BED4233CF5586 + endpoint: https://aai.onap:30233 +logging: + path: logs + +spring: + datasource: + jdbc-url: jdbc:mariadb://${DB_HOST}:${DB_PORT}/requestdb + username: ${DB_USERNAME} + password: ${DB_PASSWORD} + driver-class-name: org.mariadb.jdbc.Driver + jpa: + show-sql: false + hibernate: + dialect: org.hibernate.dialect.MySQL5Dialect + ddl-auto: validate + naming-strategy: org.hibernate.cfg.ImprovedNamingStrategy + enable-lazy-load-no-trans: true + security: + usercredentials: + - username: bpel + password: '$2a$10$Fh9ffgPw2vnmsghsRD3ZauBL1aKXebigbq3BB1RPWtE62UDILsjke' + role: BPEL-Client + - username: mso_admin + password: '$2a$10$Fh9ffgPw2vnmsghsRD3ZauBL1aKXebigbq3BB1RPWtE62UDILsjke' + role: ACTUATOR + +server: + port: 8080 + tomcat: + max-threads: 50 + +mso: + key: 07a7159d3bf51a0e53be7a8f89699be7 + site-name: localSite + logPath: ./logs/nssmf + adapters: + requestDb: + endpoint: https://so-request-db-adapter.{{ include "common.namespace" . }}:8083 + auth: Basic YnBlbDpwYXNzd29yZDEk + infra: + endpoint: http://so.onap:8080 + auth: Basic SW5mcmFQb3J0YWxDbGllbnQ6cGFzc3dvcmQxJA== + +#Actuator +management: + endpoints: + web: + base-path: /manage + exposure: + include: "*" + metrics: + se-global-registry: false + export: + prometheus: + enabled: true # Whether exporting of metrics to Prometheus is enabled. + step: 1m # Step size (i.e. reporting frequency) to use. diff --git a/so-nssmf-adapter-application/src/main/resources/org.onap.so.p12 b/so-nssmf-adapter-application/src/main/resources/org.onap.so.p12 new file mode 100644 index 0000000..79631bf Binary files /dev/null and b/so-nssmf-adapter-application/src/main/resources/org.onap.so.p12 differ diff --git a/so-nssmf-adapter-application/src/main/resources/org.onap.so.trust.jks b/so-nssmf-adapter-application/src/main/resources/org.onap.so.trust.jks new file mode 100644 index 0000000..6f8168d Binary files /dev/null and b/so-nssmf-adapter-application/src/main/resources/org.onap.so.trust.jks differ diff --git a/so-nssmf-adapter-application/src/main/resources/subnetCapability.json b/so-nssmf-adapter-application/src/main/resources/subnetCapability.json new file mode 100644 index 0000000..ff5ee65 --- /dev/null +++ b/so-nssmf-adapter-application/src/main/resources/subnetCapability.json @@ -0,0 +1,10 @@ +{ + "AN": { + "latency": 5, + "maxNumberofUEs": "100" + }, + "CN": { + "latency": 5, + "maxNumberofConns": "100" + } +} diff --git a/so-nssmf-adapter-application/src/test/java/org/onap/so/adapters/nssmf/controller/NssmfAdapterControllerTest.java b/so-nssmf-adapter-application/src/test/java/org/onap/so/adapters/nssmf/controller/NssmfAdapterControllerTest.java new file mode 100644 index 0000000..3a57938 --- /dev/null +++ b/so-nssmf-adapter-application/src/test/java/org/onap/so/adapters/nssmf/controller/NssmfAdapterControllerTest.java @@ -0,0 +1,132 @@ +/*- + * ============LICENSE_START======================================================= + * ONAP - SO + * ================================================================================ + # Copyright (c) 2020, CMCC Technologies Co., Ltd. + # + # Licensed under the Apache License, Version 2.0 (the "License") + # you may not use this file except in compliance with the License. + # You may obtain a copy of the License at + # + # http://www.apache.org/licenses/LICENSE-2.0 + # + # Unless required by applicable law or agreed to in writing, software + # distributed under the License is distributed on an "AS IS" BASIS, + # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + # See the License for the specific language governing permissions and + # limitations under the License. + * ============LICENSE_END========================================================= + */ +package org.onap.so.adapters.nssmf.controller; + +import org.junit.Before; +import org.junit.runner.RunWith; +import org.mockito.Mock; +import org.onap.so.adapters.nssmf.controller.NssmfAdapterController; +import org.onap.so.adapters.nssmf.service.NssmfManagerService; +import org.onap.so.beans.nsmf.NssmfAdapterNBIRequest; +import org.springframework.http.ResponseEntity; +import org.springframework.test.context.junit4.SpringRunner; +import org.junit.Test; +import java.lang.reflect.Field; +import static org.junit.Assert.assertNotNull; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.anyString; +import static org.mockito.Mockito.when; +import static org.mockito.MockitoAnnotations.initMocks; +import static org.onap.so.beans.nsmf.NetworkType.CORE; + +@RunWith(SpringRunner.class) +public class NssmfAdapterControllerTest { + + @Mock + private NssmfManagerService nssmfManagerService; + + private NssmfAdapterController controller; + + @Mock + private ResponseEntity entity; + + @Before + public void setUp() throws Exception { + initMocks(this); + controller = new NssmfAdapterController(); + + Field nssmfManagerService = controller.getClass().getDeclaredField("nssmfManagerService"); + nssmfManagerService.setAccessible(true); + nssmfManagerService.set(controller, this.nssmfManagerService); + } + + + @Test + public void allocateNssiTest() throws Exception { + commonMock(); + NssmfAdapterNBIRequest request = new NssmfAdapterNBIRequest(); + ResponseEntity entity = controller.allocateNssi(request); + assertNotNull(entity); + } + + @Test + public void deAllocateNssiTest() throws Exception { + commonMock(); + NssmfAdapterNBIRequest request = new NssmfAdapterNBIRequest(); + String profileId = "7516eb33-e8d3-4805-b91a-96de1bb6d8bb"; + ResponseEntity entity = controller.deAllocateNssi(request, profileId); + assertNotNull(entity); + + } + + @Test + public void activateNssiTest() throws Exception { + commonMock(); + NssmfAdapterNBIRequest request = new NssmfAdapterNBIRequest(); + String snssai = "01-772523CD"; + ResponseEntity entity = controller.activateNssi(request, snssai); + assertNotNull(entity); + } + + @Test + public void deactivateNssiTest() throws Exception { + commonMock(); + NssmfAdapterNBIRequest request = new NssmfAdapterNBIRequest(); + String snssai = "01-772523CD"; + ResponseEntity entity = controller.deactivateNssi(request, snssai); + assertNotNull(entity); + } + + @Test + public void queryJobStatusTest() throws Exception { + commonMock(); + NssmfAdapterNBIRequest request = new NssmfAdapterNBIRequest(); + String jobId = "b86aa515-b285-487b-8a1e-01f3cc871b88"; + ResponseEntity entity = controller.queryJobStatus(request, jobId); + assertNotNull(entity); + } + + @Test + public void queryNSSISelectionCapabilityTest() throws Exception { + commonMock(); + NssmfAdapterNBIRequest request = new NssmfAdapterNBIRequest(); + ResponseEntity entity = controller.queryNSSISelectionCapability(request); + assertNotNull(entity); + } + + @Test + public void querySubnetCapabilityTest() throws Exception { + commonMock(); + NssmfAdapterNBIRequest request = new NssmfAdapterNBIRequest(); + ResponseEntity entity = controller.querySubnetCapability(request); + assertNotNull(entity); + } + + private void commonMock() { + NssmfAdapterNBIRequest request = new NssmfAdapterNBIRequest(); + when(nssmfManagerService.allocateNssi(any())).thenReturn(entity); + when(nssmfManagerService.deAllocateNssi(any(), anyString())).thenReturn(entity); + when(nssmfManagerService.deActivateNssi(any(), anyString())).thenReturn(entity); + when(nssmfManagerService.activateNssi(any(), anyString())).thenReturn(entity); + when(nssmfManagerService.queryJobStatus(any(), anyString())).thenReturn(entity); + when(nssmfManagerService.querySubnetCapability(any())).thenReturn(entity); + when(nssmfManagerService.queryNSSISelectionCapability(any())).thenReturn(entity); + } +} diff --git a/so-nssmf-adapter-application/src/test/java/org/onap/so/adapters/nssmf/entity/RestResponseTest.java b/so-nssmf-adapter-application/src/test/java/org/onap/so/adapters/nssmf/entity/RestResponseTest.java new file mode 100644 index 0000000..d80359d --- /dev/null +++ b/so-nssmf-adapter-application/src/test/java/org/onap/so/adapters/nssmf/entity/RestResponseTest.java @@ -0,0 +1,59 @@ +/*- + * ============LICENSE_START======================================================= + * ONAP - SO + * ================================================================================ + # Copyright (c) 2020, CMCC Technologies Co., Ltd. + # + # Licensed under the Apache License, Version 2.0 (the "License") + # you may not use this file except in compliance with the License. + # You may obtain a copy of the License at + # + # http://www.apache.org/licenses/LICENSE-2.0 + # + # Unless required by applicable law or agreed to in writing, software + # distributed under the License is distributed on an "AS IS" BASIS, + # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + # See the License for the specific language governing permissions and + # limitations under the License. + * ============LICENSE_END========================================================= + */ +package org.onap.so.adapters.nssmf.entity; + +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.test.context.junit4.SpringRunner; +import java.util.HashMap; +import java.util.Map; +import static org.junit.Assert.*; + +@RunWith(SpringRunner.class) +public class RestResponseTest { + + @Test + public void testRestResponse() { + RestResponse restResponse = new RestResponse(); + Map header = new HashMap<>(); + header.put("X-RequestID", "05a63ae2-249a-49b9-bc52-0c70a3bca487"); + header.put("X-InvocationID", "bb7f7fc5-52ba-4937-a7af-55036694fe19"); + header.put("testlong", "55036694"); + header.put("testint", "55"); + restResponse.setRespHeaderMap(header); + + String headerStr = restResponse.getRespHeaderStr("X-RequestID"); + assertEquals(headerStr, "05a63ae2-249a-49b9-bc52-0c70a3bca487"); + + long headerLong = restResponse.getRespHeaderLong("testlong"); + long headerLongNull = restResponse.getRespHeaderLong("testlong1"); + assertNotNull(headerLong); + assertEquals(headerLongNull, -1L); + + int headerInt = restResponse.getRespHeaderInt("testint"); + int headerIntNull = restResponse.getRespHeaderInt("testint1"); + assertNotNull(headerInt); + assertEquals(headerIntNull, -1); + + Map headerMap = restResponse.getRespHeaderMap(); + assertNotNull(headerMap); + } + +} diff --git a/so-nssmf-adapter-application/src/test/java/org/onap/so/adapters/nssmf/exceptions/ApplicationExceptionTest.java b/so-nssmf-adapter-application/src/test/java/org/onap/so/adapters/nssmf/exceptions/ApplicationExceptionTest.java new file mode 100644 index 0000000..27043bb --- /dev/null +++ b/so-nssmf-adapter-application/src/test/java/org/onap/so/adapters/nssmf/exceptions/ApplicationExceptionTest.java @@ -0,0 +1,40 @@ +/*- + * ============LICENSE_START======================================================= + * ONAP - SO + * ================================================================================ + # Copyright (c) 2020, CMCC Technologies Co., Ltd. + # + # Licensed under the Apache License, Version 2.0 (the "License") + # you may not use this file except in compliance with the License. + # You may obtain a copy of the License at + # + # http://www.apache.org/licenses/LICENSE-2.0 + # + # Unless required by applicable law or agreed to in writing, software + # distributed under the License is distributed on an "AS IS" BASIS, + # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + # See the License for the specific language governing permissions and + # limitations under the License. + * ============LICENSE_END========================================================= + */ +package org.onap.so.adapters.nssmf.exceptions; + + +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.http.ResponseEntity; +import org.springframework.test.context.junit4.SpringRunner; +import static org.junit.Assert.*; + +@RunWith(SpringRunner.class) +public class ApplicationExceptionTest { + + @Test + public void buildErrorResponseTest() { + ApplicationException appException = new ApplicationException(500, "system internal error"); + ResponseEntity entity = appException.buildErrorResponse(); + assertNotNull(entity); + assertEquals(entity.getStatusCodeValue(), 500); + } + +} diff --git a/so-nssmf-adapter-application/src/test/java/org/onap/so/adapters/nssmf/service/impl/NssmfManagerServiceImplTest.java b/so-nssmf-adapter-application/src/test/java/org/onap/so/adapters/nssmf/service/impl/NssmfManagerServiceImplTest.java new file mode 100644 index 0000000..6bb70ea --- /dev/null +++ b/so-nssmf-adapter-application/src/test/java/org/onap/so/adapters/nssmf/service/impl/NssmfManagerServiceImplTest.java @@ -0,0 +1,645 @@ +/*- + * ============LICENSE_START======================================================= + * ONAP - SO + * ================================================================================ + # Copyright (c) 2020, CMCC Technologies Co., Ltd. + # + # Licensed under the Apache License, Version 2.0 (the "License") + # you may not use this file except in compliance with the License. + # You may obtain a copy of the License at + # + # http://www.apache.org/licenses/LICENSE-2.0 + # + # Unless required by applicable law or agreed to in writing, software + # distributed under the License is distributed on an "AS IS" BASIS, + # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + # See the License for the specific language governing permissions and + # limitations under the License. + * ============LICENSE_END========================================================= + */ + +package org.onap.so.adapters.nssmf.service.impl; + + +import org.apache.http.Header; +import org.apache.http.HttpEntity; +import org.apache.http.HttpResponse; +import org.apache.http.StatusLine; +import org.apache.http.client.HttpClient; +import org.apache.http.client.methods.HttpRequestBase; +import org.apache.http.conn.util.DomainType; +import org.ehcache.config.ResourceType; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.Mock; +import org.mockito.stubbing.Answer; +import org.onap.aai.domain.yang.ServiceInstance; +import org.onap.so.adapters.nssmf.config.NssmfAdapterConfig; +import org.onap.so.adapters.nssmf.consts.NssmfAdapterConsts; +import org.onap.so.adapters.nssmf.entity.NssmfInfo; +import org.onap.so.adapters.nssmf.entity.TokenResponse; +import org.onap.so.adapters.nssmf.enums.ActionType; +import org.onap.so.adapters.nssmf.enums.HttpMethod; +import org.onap.so.adapters.nssmf.exceptions.ApplicationException; +import org.onap.so.adapters.nssmf.util.RestUtil; +import org.onap.so.beans.nsmf.*; +import org.onap.so.db.request.beans.ResourceOperationStatus; +import org.onap.so.db.request.data.repository.ResourceOperationStatusRepository; +import org.springframework.http.ResponseEntity; +import org.springframework.test.context.junit4.SpringRunner; +import javax.persistence.Access; +import javax.persistence.ManyToOne; +import java.io.ByteArrayInputStream; +import java.io.InputStream; +import java.lang.reflect.Field; +import java.util.*; +import static java.nio.charset.StandardCharsets.UTF_8; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.Mockito.doAnswer; +import static org.mockito.Mockito.when; +import static org.mockito.MockitoAnnotations.initMocks; +import static org.onap.so.adapters.nssmf.util.NssmfAdapterUtil.marshal; +import static org.onap.so.adapters.nssmf.util.NssmfAdapterUtil.unMarshal; +import static org.onap.so.beans.nsmf.NetworkType.*; +import static org.onap.so.beans.nsmf.ResourceSharingLevel.NON_SHARED; + +@RunWith(SpringRunner.class) +public class NssmfManagerServiceImplTest { + + @Mock + private RestUtil restUtil; + + + private NssmfManagerServiceImpl nssiManagerService; + + @Mock + private HttpResponse tokenResponse; + + @Mock + private HttpEntity tokenEntity; + + @Mock + private HttpResponse commonResponse; + + @Mock + private HttpEntity commonEntity; + + @Mock + private StatusLine statusLine; + + @Mock + private HttpClient httpClient; + + private InputStream postStream; + + private InputStream tokenStream; + + @Mock + private NssmfAdapterConfig adapterConfig; + + @Mock + private ResourceOperationStatusRepository repository; + + @Before + public void setUp() throws Exception { + initMocks(this); + + nssiManagerService = new NssmfManagerServiceImpl(); + + Field restUtil = nssiManagerService.getClass().getDeclaredField("restUtil"); + restUtil.setAccessible(true); + restUtil.set(nssiManagerService, this.restUtil); + + Field adapterConfig = nssiManagerService.getClass().getDeclaredField("nssmfAdapterConfig"); + adapterConfig.setAccessible(true); + adapterConfig.set(nssiManagerService, this.adapterConfig); + + Field repository = nssiManagerService.getClass().getDeclaredField("repository"); + repository.setAccessible(true); + repository.set(nssiManagerService, this.repository); + // nssiManagerService.setRestUtil(this.restUtil); + + when(this.restUtil.send(any(String.class), any(HttpMethod.class), any(), any(Header.class))) + .thenCallRealMethod(); + when(this.restUtil.createResponse(any(Integer.class), any(String.class))).thenCallRealMethod(); + } + + private void createCommonMock(int statusCode, NssmfInfo nssmf) throws Exception { + when(restUtil.getToken(any(NssmfInfo.class))).thenReturn("7512eb3feb5249eca5ddd742fedddd39"); + when(restUtil.getHttpsClient()).thenReturn(httpClient); + when(restUtil.getServiceInstance(any())).thenReturn(new ServiceInstance()); + + when(statusLine.getStatusCode()).thenReturn(statusCode); + when(restUtil.getNssmfHost(any(EsrInfo.class))).thenReturn(nssmf); + + when(tokenResponse.getEntity()).thenReturn(tokenEntity); + when(tokenResponse.getStatusLine()).thenReturn(statusLine); + when(tokenEntity.getContent()).thenReturn(tokenStream); + + when(commonResponse.getEntity()).thenReturn(commonEntity); + when(commonResponse.getStatusLine()).thenReturn(statusLine); + when(commonEntity.getContent()).thenReturn(postStream); + + when(adapterConfig.getInfraAuth()).thenReturn("SW5mcmFQb3J0YWxDbGllbnQ6cGFzc3dvcmQxJA=="); + + Answer answer = invocation -> { + Object[] arguments = invocation.getArguments(); + if (arguments != null && arguments.length == 1 && arguments[0] != null) { + + HttpRequestBase base = (HttpRequestBase) arguments[0]; + if (base.getURI().toString().endsWith("/oauth/token")) { + return tokenResponse; + } else { + return commonResponse; + } + } + return commonResponse; + }; + + doAnswer(answer).when(httpClient).execute(any(HttpRequestBase.class)); + + } + + @Test + public void allocateCnNssiTest() throws Exception { + allocateNssi(CORE); + + } + + @Test + public void allocateTnNssiTest() throws Exception { + allocateNssi(TRANSPORT); + } + + @Test + public void allocateAnNssiTest() throws Exception { + allocateNssi(ACCESS); + } + + + public void allocateNssi(NetworkType domainType) throws Exception { + NssmfInfo nssmf = new NssmfInfo(); + nssmf.setUserName("nssmf-user"); + nssmf.setPassword("nssmf-pass"); + nssmf.setPort("8080"); + nssmf.setIpAddress("127.0.0.1"); + nssmf.setUrl("http://127.0.0.1:8080"); + + NssiResponse nssiRes = new NssiResponse(); + nssiRes.setJobId("4b45d919816ccaa2b762df5120f72067"); + nssiRes.setNssiId("NSSI-C-001-HDBNJ-NSSMF-01-A-ZX"); + + TokenResponse token = new TokenResponse(); + token.setAccessToken("7512eb3feb5249eca5ddd742fedddd39"); + token.setExpires(1800); + + postStream = new ByteArrayInputStream(marshal(nssiRes).getBytes(UTF_8)); + tokenStream = new ByteArrayInputStream(marshal(token).getBytes(UTF_8)); + + createCommonMock(200, nssmf); + NssmfAdapterNBIRequest nbiRequest = null; + + switch (domainType) { + case CORE: + nbiRequest = createCnAllocateNssi(); + break; + case TRANSPORT: + nbiRequest = createTnAllocateNssi(); + break; + case ACCESS: + nbiRequest = createAnAllocateNssi(); + break; + } + + assertNotNull(nbiRequest); + System.out.println(marshal(nbiRequest)); + ResponseEntity res = nssiManagerService.allocateNssi(nbiRequest); + assertNotNull(res); + assertNotNull(res.getBody()); + NssiResponse allRes = unMarshal(res.getBody().toString(), NssiResponse.class); + if (!domainType.equals(ACCESS)) { + assertEquals(allRes.getJobId(), "4b45d919816ccaa2b762df5120f72067"); + assertEquals(allRes.getNssiId(), "NSSI-C-001-HDBNJ-NSSMF-01-A-ZX"); + } + + System.out.println(res); + } + + + + private NssmfAdapterNBIRequest createCnAllocateNssi() { + CnSliceProfile sP = new CnSliceProfile(); + List sns = new LinkedList<>(); + sns.add("001-100001"); + List plmn = new LinkedList<>(); + plmn.add("460-00"); + plmn.add("460-01"); + PerfReqEmbb embb = new PerfReqEmbb(); + embb.setActivityFactor(50); + List embbList = new LinkedList<>(); + embbList.add(embb); + PerfReq perfReq = new PerfReq(); + perfReq.setPerfReqEmbbList(embbList); + List taList = new LinkedList<>(); + taList.add("1"); + taList.add("2"); + taList.add("3"); + sP.setSnssaiList(sns); + sP.setSliceProfileId("ab9af40f13f721b5f13539d87484098"); + sP.setPLMNIdList(plmn); + sP.setPerfReq(perfReq); + sP.setMaxNumberOfUEs(200); + sP.setCoverageAreaTAList(taList); + sP.setLatency(6); + sP.setResourceSharingLevel(NON_SHARED); + NsiInfo nsiInfo = new NsiInfo(); + nsiInfo.setNsiId("NSI-M-001-HDBNJ-NSMF-01-A-ZX"); + nsiInfo.setNsiName("eMBB-001"); + AllocateCnNssi cnNssi = new AllocateCnNssi(); + cnNssi.setNssiId("NSST-C-001-HDBNJ-NSSMF-01-A-ZX"); + cnNssi.setNssiName("eMBB-001"); + cnNssi.setScriptName("CN1"); + cnNssi.setSliceProfile(sP); + cnNssi.setNsiInfo(nsiInfo); + + NssmfAdapterNBIRequest nbiRequest = createNbiRequest(CORE); + nbiRequest.setAllocateCnNssi(cnNssi); + return nbiRequest; + } + + private NssmfAdapterNBIRequest createAnAllocateNssi() { + + AnSliceProfile sP = new AnSliceProfile(); + List sns = new LinkedList<>(); + sns.add("001-100001"); + List plmn = new LinkedList<>(); + plmn.add("460-00"); + plmn.add("460-01"); + PerfReqEmbb embb = new PerfReqEmbb(); + embb.setActivityFactor(50); + List embbList = new LinkedList<>(); + embbList.add(embb); + PerfReq perfReq = new PerfReq(); + perfReq.setPerfReqEmbbList(embbList); + List taList = new LinkedList<>(); + taList.add(1); + taList.add(2); + taList.add(3); + sP.setSNSSAIList(sns); + sP.setSliceProfileId("ab9af40f13f721b5f13539d87484098"); + sP.setPLMNIdList(plmn); + sP.setPerfReq(perfReq); + sP.setMaxNumberOfUEs(200); + sP.setCoverageAreaTAList(taList); + sP.setLatency(6); + sP.setResourceSharingLevel(NON_SHARED); + sP.setUeMobilityLevel(UeMobilityLevel.STATIONARY); + sP.setResourceSharingLevel(NON_SHARED); + NsiInfo nsiInfo = new NsiInfo(); + nsiInfo.setNsiId("NSI-M-001-HDBNJ-NSMF-01-A-ZX"); + nsiInfo.setNsiName("eMBB-001"); + AllocateAnNssi anNssi = new AllocateAnNssi(); + anNssi.setNssiId("NSST-C-001-HDBNJ-NSSMF-01-A-ZX"); + anNssi.setNssiName("eMBB-001"); + anNssi.setScriptName("CN1"); + anNssi.setSliceProfile(sP); + anNssi.setNsiInfo(nsiInfo); + + NssmfAdapterNBIRequest nbiRequest = createNbiRequest(ACCESS); + nbiRequest.setAllocateAnNssi(anNssi); + return nbiRequest; + } + + + private NssmfAdapterNBIRequest createTnAllocateNssi() { + TnSliceProfile sP = new TnSliceProfile(); + List sns = new LinkedList<>(); + sns.add("01-1EB5BA40"); + List plmn = new LinkedList<>(); + plmn.add("460-00"); + PerfReqEmbb embb = new PerfReqEmbb(); + embb.setActivityFactor(50); + List embbList = new LinkedList<>(); + embbList.add(embb); + + sP.setSNSSAIList(sns); + sP.setSliceProfileId("fec94836-87a0-41dc-a199-0ad9aa3890d1"); + sP.setPLMNIdList(plmn); + sP.setLatency(10); + sP.setMaxBandwidth(1000); + sP.setJitter(10); + + List networks = new LinkedList<>(); + TransportSliceNetwork network = new TransportSliceNetwork(); + List connectionLinks = new LinkedList<>(); + ConnectionLink connectionLink = new ConnectionLink(); + connectionLink.setTransportEndpointA("a47c76e3-c010-4eaf-adbb-0ba264118cab"); + connectionLink.setTransportEndpointB("c0c83e33-80d2-43da-b6cb-17b930420d74"); + connectionLinks.add(connectionLink); + network.setConnectionLinks(connectionLinks); + networks.add(network); + + NsiInfo nsiInfo = new NsiInfo(); + nsiInfo.setNsiId("NSI-M-001-HDBNJ-NSMF-01-A-ZX"); + nsiInfo.setNsiName("eMBB-001"); + AllocateTnNssi tnNssi = new AllocateTnNssi(); + tnNssi.setTransportSliceNetworks(networks); + tnNssi.setScriptName("TN"); + tnNssi.setSliceProfile(sP); + tnNssi.setNsiInfo(nsiInfo); + + NssmfAdapterNBIRequest nbiRequest = createNbiRequest(TRANSPORT); + nbiRequest.setAllocateTnNssi(tnNssi); + return nbiRequest; + } + + @Test + public void deAllocateCnNssi() throws Exception { + deAllocateNssi(CORE); + } + + @Test + public void deAllocateAnNssi() throws Exception { + deAllocateNssi(ACCESS); + } + + @Test + public void deAllocateTnNssi() throws Exception { + deAllocateNssi(TRANSPORT); + } + + public void deAllocateNssi(NetworkType domainType) throws Exception { + DeAllocateNssi deAllocateNssi = new DeAllocateNssi(); + deAllocateNssi.setTerminateNssiOption(0); + List snssai = new LinkedList<>(); + snssai.add("001-100001"); + deAllocateNssi.setNsiId("NSI-M-001-HDBNJ-NSMF-01-A-ZX"); + deAllocateNssi.setNssiId("NSSI-C-001-HDBNJ-NSSMF-01-A-ZX"); + deAllocateNssi.setScriptName("CN1"); + deAllocateNssi.setSnssaiList(snssai); + + NssmfAdapterNBIRequest nbiRequest = createNbiRequest(domainType); + nbiRequest.setDeAllocateNssi(deAllocateNssi); + + NssmfInfo nssmf = new NssmfInfo(); + nssmf.setUserName("nssmf-user"); + nssmf.setPassword("nssmf-pass"); + nssmf.setPort("8080"); + nssmf.setIpAddress("127.0.0.1"); + + NssiResponse nssiRes = new NssiResponse(); + nssiRes.setJobId("4b45d919816ccaa2b762df5120f72067"); + + TokenResponse token = new TokenResponse(); + token.setAccessToken("7512eb3feb5249eca5ddd742fedddd39"); + token.setExpires(1800); + + postStream = new ByteArrayInputStream(marshal(nssiRes).getBytes(UTF_8)); + tokenStream = new ByteArrayInputStream(marshal(token).getBytes(UTF_8)); + + createCommonMock(202, nssmf); + ResponseEntity res = nssiManagerService.deAllocateNssi(nbiRequest, "ab9af40f13f721b5f13539d87484098"); + assertNotNull(res); + assertNotNull(res.getBody()); + NssiResponse allRes = unMarshal(res.getBody().toString(), NssiResponse.class); + if (!domainType.equals(ACCESS)) { + assertEquals(allRes.getJobId(), "4b45d919816ccaa2b762df5120f72067"); + } + } + + @Test + public void activateAnNssi() throws Exception { + activateNssi(ACCESS); + } + + + @Test + public void activateCnNssi() throws Exception { + activateNssi(CORE); + } + + + @Test + public void activateTnNssi() throws Exception { + activateNssi(TRANSPORT); + } + + + private void activateNssi(NetworkType domainType) throws Exception { + NssmfInfo nssmf = new NssmfInfo(); + nssmf.setUserName("nssmf-user"); + nssmf.setPassword("nssmf-pass"); + nssmf.setPort("8080"); + nssmf.setIpAddress("127.0.0.1"); + + NssiResponse nssiRes = new NssiResponse(); + nssiRes.setJobId("4b45d919816ccaa2b762df5120f72067"); + + TokenResponse token = new TokenResponse(); + token.setAccessToken("7512eb3feb5249eca5ddd742fedddd39"); + token.setExpires(1800); + + postStream = new ByteArrayInputStream(marshal(nssiRes).getBytes(UTF_8)); + tokenStream = new ByteArrayInputStream(marshal(token).getBytes(UTF_8)); + + ActDeActNssi act = new ActDeActNssi(); + act.setNsiId("NSI-M-001-HDBNJ-NSMF-01-A-ZX"); + act.setNssiId("NSSI-C-001-HDBNJ-NSSMF-01-A-ZX"); + + NssmfAdapterNBIRequest nbiRequest = createNbiRequest(domainType); + nbiRequest.setActDeActNssi(act); + + createCommonMock(200, nssmf); + ResponseEntity res = nssiManagerService.activateNssi(nbiRequest, "001-100001"); + assertNotNull(res); + assertNotNull(res.getBody()); + NssiResponse allRes = unMarshal(res.getBody().toString(), NssiResponse.class); + if (!domainType.equals(ACCESS)) { + assertEquals(allRes.getJobId(), "4b45d919816ccaa2b762df5120f72067"); + } + } + + @Test + public void deActivateNssi() throws Exception { + NssmfInfo nssmf = new NssmfInfo(); + nssmf.setUserName("nssmf-user"); + nssmf.setPassword("nssmf-pass"); + nssmf.setPort("8080"); + nssmf.setIpAddress("127.0.0.1"); + + NssiResponse nssiRes = new NssiResponse(); + nssiRes.setJobId("4b45d919816ccaa2b762df5120f72067"); + + TokenResponse token = new TokenResponse(); + token.setAccessToken("7512eb3feb5249eca5ddd742fedddd39"); + token.setExpires(1800); + + postStream = new ByteArrayInputStream(marshal(nssiRes).getBytes(UTF_8)); + tokenStream = new ByteArrayInputStream(marshal(token).getBytes(UTF_8)); + + ActDeActNssi act = new ActDeActNssi(); + act.setNsiId("NSI-M-001-HDBNJ-NSMF-01-A-ZX"); + act.setNssiId("NSSI-C-001-HDBNJ-NSSMF-01-A-ZX"); + + NssmfAdapterNBIRequest nbiRequest = createNbiRequest(CORE); + nbiRequest.setActDeActNssi(act); + + createCommonMock(200, nssmf); + ResponseEntity res = nssiManagerService.deActivateNssi(nbiRequest, "001-100001"); + assertNotNull(res); + assertNotNull(res.getBody()); + NssiResponse allRes = unMarshal(res.getBody().toString(), NssiResponse.class); + assertEquals(allRes.getJobId(), "4b45d919816ccaa2b762df5120f72067"); + } + + @Test + public void testNssmfRequest() throws ApplicationException { + NssmfRequest nssmfRequest = new NssmfRequest(); + String sst = marshal(nssmfRequest); + System.out.println(sst); + } + + @Test + public void queryCnAllocateJobStatus() throws Exception { + queryJobStatus(CORE, ActionType.ALLOCATE.toString()); + } + + @Test + public void queryCnActivateJobStatus() throws Exception { + queryJobStatus(CORE, ActionType.ACTIVATE.toString()); + } + + @Test + public void queryCnDeActivateJobStatus() throws Exception { + queryJobStatus(CORE, ActionType.DEACTIVATE.toString()); + } + + @Test + public void queryAnJobStatus() throws Exception { + queryJobStatus(ACCESS, ActionType.ALLOCATE.toString()); + } + + public void queryJobStatus(NetworkType domainType, String action) throws Exception { + NssmfInfo nssmf = new NssmfInfo(); + nssmf.setUserName("nssmf-user"); + nssmf.setPassword("nssmf-pass"); + nssmf.setPort("8080"); + nssmf.setIpAddress("127.0.0.1"); + + JobStatusResponse jobStatusResponse = new JobStatusResponse(); + ResponseDescriptor descriptor = new ResponseDescriptor(); + descriptor.setResponseId("7512eb3feb5249eca5ddd742fedddd39"); + descriptor.setProgress(100); + descriptor.setStatusDescription("Initiating VNF Instance"); + descriptor.setStatus("FINISHED"); + jobStatusResponse.setResponseDescriptor(descriptor); + + TokenResponse token = new TokenResponse(); + token.setAccessToken("7512eb3feb5249eca5ddd742fedddd39"); + token.setExpires(1800); + + postStream = new ByteArrayInputStream(marshal(jobStatusResponse).getBytes(UTF_8)); + tokenStream = new ByteArrayInputStream(marshal(token).getBytes(UTF_8)); + + ResourceOperationStatus operationStatus = new ResourceOperationStatus(); + operationStatus.setOperationId("4b45d919816ccaa2b762df5120f72067"); + operationStatus.setResourceTemplateUUID("8ee5926d-720b-4bb2-86f9-d20e921c143b"); + operationStatus.setServiceId("NSI-M-001-HDBNJ-NSMF-01-A-ZX"); + operationStatus.setOperType(action); + + NssmfAdapterNBIRequest nbiRequest = createNbiRequest(domainType); + nbiRequest.setResponseId("7512eb3feb5249eca5ddd742fedddd39"); + List optional = new ArrayList<>(); + optional.add(operationStatus); + + doAnswer(invocation -> optional).when(repository).findByServiceIdAndOperationId(any(), any()); + + createCommonMock(200, nssmf); + + ResponseEntity res = nssiManagerService.queryJobStatus(nbiRequest, "4b45d919816ccaa2b762df5120f72067"); + assertNotNull(res); + assertNotNull(res.getBody()); + JobStatusResponse allRes = unMarshal(res.getBody().toString(), JobStatusResponse.class); + assertEquals(allRes.getResponseDescriptor().getProgress(), 100); + assertEquals(allRes.getResponseDescriptor().getStatus(), "FINISHED"); + if (!domainType.equals(ACCESS)) { + assertEquals(allRes.getResponseDescriptor().getResponseId(), "7512eb3feb5249eca5ddd742fedddd39"); + } + + } + + @Test + public void queryNSSISelectionCapability() throws Exception { + + NssmfAdapterNBIRequest nbiRequest = createNbiRequest(CORE); + ResponseEntity res = nssiManagerService.queryNSSISelectionCapability(nbiRequest); + assertNotNull(res); + assertNotNull(res.getBody()); + Map allRes = unMarshal(res.getBody().toString(), Map.class); + assertEquals(allRes.get("selection"), "NSMF"); + + System.out.println(res); + + nbiRequest.getEsrInfo().setVendor(NssmfAdapterConsts.ONAP_INTERNAL_TAG); + res = nssiManagerService.queryNSSISelectionCapability(nbiRequest); + assertNotNull(res); + assertNotNull(res.getBody()); + allRes = unMarshal(res.getBody().toString(), Map.class); + assertEquals(allRes.get("selection"), "NSSMF"); + + System.out.println(res); + + nbiRequest.getEsrInfo().setNetworkType(NetworkType.ACCESS); + res = nssiManagerService.queryNSSISelectionCapability(nbiRequest); + assertNotNull(res); + assertNotNull(res.getBody()); + allRes = unMarshal(res.getBody().toString(), Map.class); + assertEquals(allRes.get("selection"), "NSSMF"); + + System.out.println(res); + } + + private NssmfAdapterNBIRequest createNbiRequest(NetworkType networkType) { + NssmfAdapterNBIRequest nbiRequest = new NssmfAdapterNBIRequest(); + EsrInfo esrInfo = new EsrInfo(); + switch (networkType) { + case CORE: + esrInfo.setVendor("huawei"); + esrInfo.setNetworkType(CORE); + break; + case TRANSPORT: + esrInfo.setVendor("ONAP_internal"); + esrInfo.setNetworkType(TRANSPORT); + break; + case ACCESS: + esrInfo.setVendor("huawei"); + esrInfo.setNetworkType(ACCESS); + break; + } + ServiceInfo serviceInfo = new ServiceInfo(); + serviceInfo.setServiceUuid("8ee5926d-720b-4bb2-86f9-d20e921c143b"); + serviceInfo.setServiceInvariantUuid("e75698d9-925a-4cdd-a6c0-edacbe6a0b51"); + serviceInfo.setGlobalSubscriberId("5GCustomer"); + serviceInfo.setServiceType("5G"); + serviceInfo.setNsiId("NSI-M-001-HDBNJ-NSMF-01-A-ZX"); + nbiRequest.setEsrInfo(esrInfo); + nbiRequest.setServiceInfo(serviceInfo); + return nbiRequest; + } + + @Test + public void querySubnetCapability() { + NssmfAdapterNBIRequest nbiRequest = createNbiRequest(CORE); + + QuerySubnetCapability subnetCapabilityQuery = new QuerySubnetCapability(); + List subnetTypes = Arrays.asList("CN"); + subnetCapabilityQuery.setSubnetTypes(subnetTypes); + nbiRequest.setSubnetCapabilityQuery(subnetCapabilityQuery); + ResponseEntity res = nssiManagerService.querySubnetCapability(nbiRequest); + assertNotNull(res); + assertNotNull(res.getBody()); + } +} diff --git a/so-nssmf-adapter-application/src/test/java/org/onap/so/adapters/nssmf/util/RestUtilTest.java b/so-nssmf-adapter-application/src/test/java/org/onap/so/adapters/nssmf/util/RestUtilTest.java new file mode 100644 index 0000000..5d07c5e --- /dev/null +++ b/so-nssmf-adapter-application/src/test/java/org/onap/so/adapters/nssmf/util/RestUtilTest.java @@ -0,0 +1,161 @@ +/*- + * ============LICENSE_START======================================================= + * ONAP - SO + * ================================================================================ + # Copyright (c) 2020, CMCC Technologies Co., Ltd. + # + # Licensed under the Apache License, Version 2.0 (the "License") + # you may not use this file except in compliance with the License. + # You may obtain a copy of the License at + # + # http://www.apache.org/licenses/LICENSE-2.0 + # + # Unless required by applicable law or agreed to in writing, software + # distributed under the License is distributed on an "AS IS" BASIS, + # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + # See the License for the specific language governing permissions and + # limitations under the License. + * ============LICENSE_END========================================================= + */ +package org.onap.so.adapters.nssmf.util; + +import org.apache.commons.lang3.StringUtils; +import org.apache.http.Header; +import org.apache.http.HttpEntity; +import org.apache.http.HttpResponse; +import org.apache.http.StatusLine; +import org.apache.http.client.HttpClient; +import org.apache.http.client.methods.HttpRequestBase; +import org.hibernate.jdbc.Expectations; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.Mock; +import org.mockito.Mockito; +import org.mockito.MockitoAnnotations; +import org.mockito.Spy; +import org.mockito.stubbing.Answer; +import org.onap.aai.domain.yang.ServiceInstance; +import org.onap.so.adapters.nssmf.entity.NssmfInfo; +import org.onap.so.adapters.nssmf.entity.RestResponse; +import org.onap.so.adapters.nssmf.enums.HttpMethod; +import org.onap.so.adapters.nssmf.exceptions.ApplicationException; +import org.onap.so.adapters.nssmf.extclients.aai.AaiServiceProvider; +import org.onap.so.beans.nsmf.EsrInfo; +import org.onap.so.beans.nsmf.ServiceInfo; +import org.springframework.test.context.junit4.SpringRunner; +import java.io.IOException; +import java.io.InputStream; +import java.lang.reflect.Field; +import java.util.Optional; +import static org.junit.Assert.assertNotNull; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.Mockito.*; +import static org.mockito.MockitoAnnotations.initMocks; +import static org.onap.so.beans.nsmf.NetworkType.CORE; + +@RunWith(SpringRunner.class) +public class RestUtilTest { + + + @Mock + public HttpClient httpClient; + @Mock + private HttpResponse tokenResponse; + + @Mock + private HttpEntity tokenEntity; + + private InputStream tokenStream; + + @Mock + private StatusLine statusLine; + + @Mock + private AaiServiceProvider aaiSvcProv; + + @Before + public void setUp() throws Exception { + MockitoAnnotations.initMocks(this); + + // Field nssmfManagerService = controller.getClass().getDeclaredField("nssmfManagerService"); + // nssmfManagerService.setAccessible(true); + // nssmfManagerService.set(controller, this.nssmfManagerService); + } + + private void commonMock() throws IOException, ApplicationException { + + when(tokenResponse.getEntity()).thenReturn(tokenEntity); + when(tokenResponse.getStatusLine()).thenReturn(statusLine); + + when(tokenEntity.getContent()).thenReturn(tokenStream); + + when(httpClient.execute(any())).thenReturn(tokenResponse); + + // Mockito.doReturn(httpClient).when(restUtil).getHttpsClient(); + } + + @Test + public void sendTest() throws Exception { + String url = "http://127.0.0.1:8080"; + HttpMethod method = HttpMethod.PUT; + String content = "body content"; + commonMock(); + + RestUtil restUtil = new RestUtil(); + RestUtil util = Mockito.spy(restUtil); + doReturn(httpClient).when(util).getHttpsClient(); + + RestResponse restResponse = util.send(url, method, content, null); + assertNotNull(restResponse); + } + + @Test + public void serviceInstanceOperationTest() throws NoSuchFieldException, IllegalAccessException { + + RestUtil restUtil = new RestUtil(); + + Field aaiSvcProv = restUtil.getClass().getDeclaredField("aaiSvcProv"); + aaiSvcProv.setAccessible(true); + aaiSvcProv.set(restUtil, this.aaiSvcProv); + + ServiceInstance instance = new ServiceInstance(); + ServiceInfo info = getServiceInfo(); + restUtil.createServiceInstance(instance, info); + restUtil.getServiceInstance(info); + restUtil.deleteServiceInstance(info); + } + + @Test + public void getNssmfHostTest() throws NoSuchFieldException, IllegalAccessException { + RestUtil restUtil = new RestUtil(); + + Field aaiSvcProv = restUtil.getClass().getDeclaredField("aaiSvcProv"); + aaiSvcProv.setAccessible(true); + aaiSvcProv.set(restUtil, this.aaiSvcProv); + try { + restUtil.getNssmfHost(getEsrInfo()); + } catch (ApplicationException ex) { + System.out.println(ex.getErrorMsg()); + } + } + + + private EsrInfo getEsrInfo() { + EsrInfo esrInfo = new EsrInfo(); + esrInfo.setVendor("huawei"); + esrInfo.setNetworkType(CORE); + return esrInfo; + } + + private ServiceInfo getServiceInfo() { + ServiceInfo serviceInfo = new ServiceInfo(); + serviceInfo.setServiceUuid("8ee5926d-720b-4bb2-86f9-d20e921c143b"); + serviceInfo.setServiceInvariantUuid("e75698d9-925a-4cdd-a6c0-edacbe6a0b51"); + serviceInfo.setGlobalSubscriberId("5GCustomer"); + serviceInfo.setServiceType("5G"); + serviceInfo.setNsiId("NSI-M-001-HDBNJ-NSMF-01-A-ZX"); + return serviceInfo; + } + +} diff --git a/so-nssmf-adapter-application/src/test/resources/application-test.yaml b/so-nssmf-adapter-application/src/test/resources/application-test.yaml new file mode 100644 index 0000000..adb741e --- /dev/null +++ b/so-nssmf-adapter-application/src/test/resources/application-test.yaml @@ -0,0 +1,60 @@ + +aai: + auth: 2A11B07DB6214A839394AA1EC5844695F5114FC407FF5422625FB00175A3DCB8A1FF745F22867EFA72D5369D599BBD88DA8BED4233CF5586 + endpoint: https://aai.onap:30233 +logging: + path: logs + +spring: + datasource: + username: root + password: 123456 + driver-class-name: org.mariadb.jdbc.Driver + initialization-mode: always + url: jdbc:mariadb://49.232.146.162:8989/requestdb + jpa: + generate-ddl: false + show-sql: false + hibernate: + ddl-auto: none + naming-strategy: org.hibernate.cfg.ImprovedNamingStrategy + enable-lazy-load-no-trans: true + database-platform: org.hibernate.dialect.MySQL5InnoDBDialect + security: + usercredentials: + - username: bpel + password: '$2a$10$Fh9ffgPw2vnmsghsRD3ZauBL1aKXebigbq3BB1RPWtE62UDILsjke' + role: BPEL-Client + - username: mso_admin + password: '$2a$10$Fh9ffgPw2vnmsghsRD3ZauBL1aKXebigbq3BB1RPWtE62UDILsjke' + role: ACTUATOR +server: + port: 8080 + tomcat: + max-threads: 50 + +mso: + key: 07a7159d3bf51a0e53be7a8f89699be7 + site-name: localSite + logPath: ./logs/nssmf + adapters: + requestDb: + endpoint: https://so-request-db-adapter.{{ include "common.namespace" . }}:8083 + auth: Basic YnBlbDpwYXNzd29yZDEk + infra: + endpoint: https://so.{{ include "common.namespace" . }}:8080 + auth: Basic SW5mcmFQb3J0YWxDbGllbnQ6cGFzc3dvcmQxJA== + +#Actuator +management: + endpoints: + web: + base-path: /manage + exposure: + include: "*" + metrics: + se-global-registry: false + export: + prometheus: + enabled: true # Whether exporting of metrics to Prometheus is enabled. + step: 1m # Step size (i.e. reporting frequency) to use. \ No newline at end of file diff --git a/src/main/java/org/onap/so/adapters/nssmf/MSONssmfApplication.java b/src/main/java/org/onap/so/adapters/nssmf/MSONssmfApplication.java deleted file mode 100644 index 83a09dc..0000000 --- a/src/main/java/org/onap/so/adapters/nssmf/MSONssmfApplication.java +++ /dev/null @@ -1,33 +0,0 @@ -/*- - * ============LICENSE_START======================================================= - * ONAP - SO - * ================================================================================ - * Copyright (C) 2020 Huawei Technologies Co., Ltd. All rights reserved. - * ================================================================================ - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * ============LICENSE_END========================================================= - */ - -package org.onap.so.adapters.nssmf; - - -import org.springframework.boot.SpringApplication; -import org.springframework.boot.autoconfigure.SpringBootApplication; - -@SpringBootApplication(scanBasePackages = {"org.onap.so"}) -public class MSONssmfApplication { - - public static void main(String... args) { - SpringApplication.run(MSONssmfApplication.class, args); - } -} diff --git a/src/main/java/org/onap/so/adapters/nssmf/annotation/RequestLogger.java b/src/main/java/org/onap/so/adapters/nssmf/annotation/RequestLogger.java deleted file mode 100644 index 44f814a..0000000 --- a/src/main/java/org/onap/so/adapters/nssmf/annotation/RequestLogger.java +++ /dev/null @@ -1,31 +0,0 @@ -/*- - * ============LICENSE_START======================================================= - * ONAP - SO - * ================================================================================ - # Copyright (c) 2020, CMCC Technologies Co., Ltd. - # - # Licensed under the Apache License, Version 2.0 (the "License") - # you may not use this file except in compliance with the License. - # You may obtain a copy of the License at - # - # http://www.apache.org/licenses/LICENSE-2.0 - # - # Unless required by applicable law or agreed to in writing, software - # distributed under the License is distributed on an "AS IS" BASIS, - # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - # See the License for the specific language governing permissions and - # limitations under the License. - * ============LICENSE_END========================================================= - */ - -package org.onap.so.adapters.nssmf.annotation; - - -import java.lang.annotation.*; - -@Target({ElementType.METHOD, ElementType.TYPE}) -@Retention(RetentionPolicy.RUNTIME) -@Documented -public @interface RequestLogger { - boolean ignore() default false; -} diff --git a/src/main/java/org/onap/so/adapters/nssmf/annotation/ServiceLogger.java b/src/main/java/org/onap/so/adapters/nssmf/annotation/ServiceLogger.java deleted file mode 100644 index 1de29bc..0000000 --- a/src/main/java/org/onap/so/adapters/nssmf/annotation/ServiceLogger.java +++ /dev/null @@ -1,36 +0,0 @@ -/*- - * ============LICENSE_START======================================================= - * ONAP - SO - * ================================================================================ - # Copyright (c) 2020, CMCC Technologies Co., Ltd. - # - # Licensed under the Apache License, Version 2.0 (the "License") - # you may not use this file except in compliance with the License. - # You may obtain a copy of the License at - # - # http://www.apache.org/licenses/LICENSE-2.0 - # - # Unless required by applicable law or agreed to in writing, software - # distributed under the License is distributed on an "AS IS" BASIS, - # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - # See the License for the specific language governing permissions and - # limitations under the License. - * ============LICENSE_END========================================================= - */ - -package org.onap.so.adapters.nssmf.annotation; - - -import java.lang.annotation.ElementType; -import java.lang.annotation.Retention; -import java.lang.annotation.RetentionPolicy; -import java.lang.annotation.Target; - -@Target({ElementType.METHOD, ElementType.TYPE}) -@Retention(RetentionPolicy.RUNTIME) -public @interface ServiceLogger { - - String value() default ""; - - boolean ignore() default false; -} diff --git a/src/main/java/org/onap/so/adapters/nssmf/config/NssmfAdapterConfig.java b/src/main/java/org/onap/so/adapters/nssmf/config/NssmfAdapterConfig.java deleted file mode 100644 index 6a59244..0000000 --- a/src/main/java/org/onap/so/adapters/nssmf/config/NssmfAdapterConfig.java +++ /dev/null @@ -1,36 +0,0 @@ -/*- - * ============LICENSE_START======================================================= - * ONAP - SO - * ================================================================================ - # Copyright (c) 2020, CMCC Technologies Co., Ltd. - # - # Licensed under the Apache License, Version 2.0 (the "License") - # you may not use this file except in compliance with the License. - # You may obtain a copy of the License at - # - # http://www.apache.org/licenses/LICENSE-2.0 - # - # Unless required by applicable law or agreed to in writing, software - # distributed under the License is distributed on an "AS IS" BASIS, - # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - # See the License for the specific language governing permissions and - # limitations under the License. - * ============LICENSE_END========================================================= - */ - -package org.onap.so.adapters.nssmf.config; - -import lombok.Getter; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.context.annotation.Configuration; - -@Configuration -@Getter -public class NssmfAdapterConfig { - - @Value("${mso.infra.endpoint}") - private String infraEndpoint; - - @Value("${mso.infra.auth}") - private String infraAuth; -} diff --git a/src/main/java/org/onap/so/adapters/nssmf/config/RequestDbConfig.java b/src/main/java/org/onap/so/adapters/nssmf/config/RequestDbConfig.java deleted file mode 100644 index dcb5d61..0000000 --- a/src/main/java/org/onap/so/adapters/nssmf/config/RequestDbConfig.java +++ /dev/null @@ -1,68 +0,0 @@ -/*- - * ============LICENSE_START======================================================= - * ONAP - SO - * ================================================================================ - * Copyright (C) 2020 Huawei Technologies Co., Ltd. All rights reserved. - * ================================================================================ - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * ============LICENSE_END========================================================= - */ - -package org.onap.so.adapters.nssmf.config; - -import javax.persistence.EntityManagerFactory; -import javax.sql.DataSource; -import org.springframework.beans.factory.annotation.Qualifier; -import org.springframework.boot.context.properties.ConfigurationProperties; -import org.springframework.boot.jdbc.DataSourceBuilder; -import org.springframework.boot.orm.jpa.EntityManagerFactoryBuilder; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; -import org.springframework.context.annotation.Primary; -import org.springframework.context.annotation.Profile; -import org.springframework.data.jpa.repository.config.EnableJpaRepositories; -import org.springframework.orm.jpa.JpaTransactionManager; -import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean; -import org.springframework.transaction.PlatformTransactionManager; -import org.springframework.transaction.annotation.EnableTransactionManagement; - -@Profile({"!test"}) -@Configuration -@EnableTransactionManagement -@EnableJpaRepositories(entityManagerFactoryRef = "requestEntityManagerFactory", - transactionManagerRef = "requestTransactionManager", basePackages = {"org.onap.so.db.request.data.repository"}) -public class RequestDbConfig { - - @Primary - @Bean(name = "requestDataSource") - @ConfigurationProperties(prefix = "spring.datasource") - public DataSource dataSource() { - return DataSourceBuilder.create().build(); - } - - @Primary - @Bean(name = "requestEntityManagerFactory") - public LocalContainerEntityManagerFactoryBean entityManagerFactory(EntityManagerFactoryBuilder builder, - @Qualifier("requestDataSource") DataSource dataSource) { - return builder.dataSource(dataSource).packages("org.onap.so.db.request.beans").persistenceUnit("requestDB") - .build(); - } - - @Primary - @Bean(name = "requestTransactionManager") - public PlatformTransactionManager transactionManager( - @Qualifier("requestEntityManagerFactory") EntityManagerFactory entityManagerFactory) { - return new JpaTransactionManager(entityManagerFactory); - } - -} diff --git a/src/main/java/org/onap/so/adapters/nssmf/consts/NssmfAdapterConsts.java b/src/main/java/org/onap/so/adapters/nssmf/consts/NssmfAdapterConsts.java deleted file mode 100644 index 8f029e7..0000000 --- a/src/main/java/org/onap/so/adapters/nssmf/consts/NssmfAdapterConsts.java +++ /dev/null @@ -1,186 +0,0 @@ -/*- - * ============LICENSE_START======================================================= - * ONAP - SO - * ================================================================================ - # Copyright (c) 2020, CMCC Technologies Co., Ltd. - # - # Licensed under the Apache License, Version 2.0 (the "License") - # you may not use this file except in compliance with the License. - # You may obtain a copy of the License at - # - # http://www.apache.org/licenses/LICENSE-2.0 - # - # Unless required by applicable law or agreed to in writing, software - # distributed under the License is distributed on an "AS IS" BASIS, - # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - # See the License for the specific language governing permissions and - # limitations under the License. - * ============LICENSE_END========================================================= - */ - -package org.onap.so.adapters.nssmf.consts; - -import org.onap.so.adapters.nssmf.entity.NssmfUrlInfo; -import org.onap.so.adapters.nssmf.enums.ActionType; -import org.onap.so.adapters.nssmf.enums.ExecutorType; -import org.onap.so.adapters.nssmf.enums.HttpMethod; -import org.onap.so.beans.nsmf.NetworkType; -import java.util.HashMap; -import java.util.Map; - -public class NssmfAdapterConsts { - - public final static String ONAP_INTERNAL_TAG = "ONAP_internal"; - - public final static String CURRENT_INTERNAL_NSSMF_API_VERSION = "v1"; - - private static Map urlInfoMap = new HashMap<>(); - - private final static String EXTERNAL_CN_ALLOCATE_URL = "/api/rest/provMns/{apiVersion}/NSS/SliceProfiles"; - - private final static String EXTERNAL_TN_ALLOCATE_URL = "/api/rest/provMns/{apiVersion}/tn/NSS/SliceProfiles"; - - private final static String EXTERNAL_AN_ALLOCATE_URL = "/ObjectManagement/NSS/SliceProfiles"; - - private final static String INTERNAL_ALLOCATE_URL = "/onap/so/infra/3gppservices/{apiVersion}/allocate"; - - private final static String EXTERNAL_CN_DEALLOCATE_URL = - "/api/rest/provMns/{apiVersion}/NSS/SliceProfiles/{sliceProfileId}"; - - private final static String EXTERNAL_TN_DEALLOCATE_URL = - "/api/rest/provMns/{apiVersion}/tn/NSS/SliceProfiles/{sliceProfileId}"; - - private final static String EXTERNAL_AN_DEALLOCATE_URL = "/ObjectManagement/NSS/SliceProfiles/{sliceProfileId}"; - - private final static String INTERNAL_DEALLOCATE_URL = "/onap/so/infra/3gppservices/{apiVersion}/deAllocate"; - - private final static String EXTERNAL_CN_ACTIVATE_URL = "/api/rest/provMns/{apiVersion}/NSS/{snssai}/activation"; - - private final static String EXTERNAL_TN_ACTIVATE_URL = "/api/rest/provMns/{apiVersion}/tn/NSS/{snssai}/activation"; - - private final static String EXTERNAL_AN_ACTIVATE_URL = "/api/rest/provMns/{apiVersion}/an/NSS/{snssai}/activations"; - - private final static String INTERNAL_ACTIVATE_URL = "/onap/so/infra/3gppservices/{apiVersion}/activate"; - - private final static String EXTERNAL_CN_DEACTIVATE_URL = "/api/rest/provMns/{apiVersion}/NSS/{snssai}/deactivation"; - - private final static String EXTERNAL_TN_DEACTIVATE_URL = - "/api/rest/provMns/{apiVersion}/tn/NSS/{snssai}/deactivation"; - - private final static String EXTERNAL_AN_DEACTIVATE_URL = - "/api/rest/provMns/{apiVersion}/an/NSS/{snssai}/deactivation"; - - private final static String INTERNAL_DEACTIVATE_URL = "/onap/so/infra/3gppservices/{apiVersion}/deActivate"; - - // - private final static String EXTERNAL_CN_TERMINATE_URL = - "/api/rest/provMns/{apiVersion}/NSS/SliceProfiles/{SliceProfileId}"; - - private final static String EXTERNAL_TN_TERMINATE_URL = - "/api/rest/provMns/{apiVersion}/tn/NSS/SliceProfiles/{SliceProfileId}"; - - private final static String EXTERNAL_AN_TERMINATE_URL = - "/api/rest/provMns/{apiVersion}/an/NSS/SliceProfiles/{SliceProfileId}"; - - private final static String INTERNAL_TERMINATE_URL = "/onap/so/infra/3gppservices/{apiVersion}/terminate"; - - // - private final static String EXTERNAL_AN_MODIFY_URL = - "/api/rest/provMns/{apiVersion}/an/NSS/SliceProfiles/{SliceProfileId}"; - - private final static String INTERNAL_MODIFY_URL = "/onap/so/infra/3gppservices/{apiVersion}/modify"; - - // - private final static String EXTERNAL_QUERY_JOB_STATUS = "/api/rest/provMns/{apiVersion}/NSS/jobs/{jobId}"; - - private final static String INTERNAL_QUERY_SUB_NET_CAPABILITY = - "/onap/so/infra/3gppservices/{apiVersion}/subnetCapabilityQuery"; - - static { - urlInfoMap.put(generateKey(ExecutorType.EXTERNAL, NetworkType.ACCESS, ActionType.ALLOCATE), - new NssmfUrlInfo(EXTERNAL_AN_ALLOCATE_URL, HttpMethod.POST)); - urlInfoMap.put(generateKey(ExecutorType.EXTERNAL, NetworkType.TRANSPORT, ActionType.ALLOCATE), - new NssmfUrlInfo(EXTERNAL_TN_ALLOCATE_URL, HttpMethod.POST)); - urlInfoMap.put(generateKey(ExecutorType.EXTERNAL, NetworkType.CORE, ActionType.ALLOCATE), - new NssmfUrlInfo(EXTERNAL_CN_ALLOCATE_URL, HttpMethod.POST)); - urlInfoMap.put(generateKey(ExecutorType.INTERNAL, null, ActionType.ALLOCATE), - new NssmfUrlInfo(INTERNAL_ALLOCATE_URL, HttpMethod.POST)); - - urlInfoMap.put(generateKey(ExecutorType.EXTERNAL, NetworkType.ACCESS, ActionType.DEALLOCATE), - new NssmfUrlInfo(EXTERNAL_AN_DEALLOCATE_URL, HttpMethod.DELETE)); - urlInfoMap.put(generateKey(ExecutorType.EXTERNAL, NetworkType.TRANSPORT, ActionType.DEALLOCATE), - new NssmfUrlInfo(EXTERNAL_TN_DEALLOCATE_URL, HttpMethod.DELETE)); - urlInfoMap.put(generateKey(ExecutorType.EXTERNAL, NetworkType.CORE, ActionType.DEALLOCATE), - new NssmfUrlInfo(EXTERNAL_CN_DEALLOCATE_URL, HttpMethod.DELETE)); - urlInfoMap.put(generateKey(ExecutorType.INTERNAL, null, ActionType.DEALLOCATE), - new NssmfUrlInfo(INTERNAL_DEALLOCATE_URL, HttpMethod.DELETE)); - - urlInfoMap.put(generateKey(ExecutorType.EXTERNAL, NetworkType.ACCESS, ActionType.ACTIVATE), - new NssmfUrlInfo(EXTERNAL_AN_ACTIVATE_URL, HttpMethod.PUT)); - urlInfoMap.put(generateKey(ExecutorType.EXTERNAL, NetworkType.TRANSPORT, ActionType.ACTIVATE), - new NssmfUrlInfo(EXTERNAL_TN_ACTIVATE_URL, HttpMethod.PUT)); - urlInfoMap.put(generateKey(ExecutorType.EXTERNAL, NetworkType.CORE, ActionType.ACTIVATE), - new NssmfUrlInfo(EXTERNAL_CN_ACTIVATE_URL, HttpMethod.PUT)); - urlInfoMap.put(generateKey(ExecutorType.INTERNAL, null, ActionType.ACTIVATE), - new NssmfUrlInfo(INTERNAL_ACTIVATE_URL, HttpMethod.POST)); - - urlInfoMap.put(generateKey(ExecutorType.EXTERNAL, NetworkType.ACCESS, ActionType.DEACTIVATE), - new NssmfUrlInfo(EXTERNAL_AN_DEACTIVATE_URL, HttpMethod.PUT)); - urlInfoMap.put(generateKey(ExecutorType.EXTERNAL, NetworkType.TRANSPORT, ActionType.DEACTIVATE), - new NssmfUrlInfo(EXTERNAL_TN_DEACTIVATE_URL, HttpMethod.PUT)); - urlInfoMap.put(generateKey(ExecutorType.EXTERNAL, NetworkType.CORE, ActionType.DEACTIVATE), - new NssmfUrlInfo(EXTERNAL_CN_DEACTIVATE_URL, HttpMethod.PUT)); - urlInfoMap.put(generateKey(ExecutorType.INTERNAL, null, ActionType.DEACTIVATE), - new NssmfUrlInfo(INTERNAL_DEACTIVATE_URL, HttpMethod.PUT)); - - urlInfoMap.put(generateKey(ExecutorType.EXTERNAL, NetworkType.ACCESS, ActionType.TERMINATE), - new NssmfUrlInfo(EXTERNAL_AN_TERMINATE_URL, HttpMethod.DELETE)); - urlInfoMap.put(generateKey(ExecutorType.EXTERNAL, NetworkType.TRANSPORT, ActionType.TERMINATE), - new NssmfUrlInfo(EXTERNAL_TN_TERMINATE_URL, HttpMethod.DELETE)); - urlInfoMap.put(generateKey(ExecutorType.EXTERNAL, NetworkType.CORE, ActionType.TERMINATE), - new NssmfUrlInfo(EXTERNAL_CN_TERMINATE_URL, HttpMethod.DELETE)); - urlInfoMap.put(generateKey(ExecutorType.INTERNAL, null, ActionType.TERMINATE), - new NssmfUrlInfo(INTERNAL_TERMINATE_URL, HttpMethod.DELETE)); - - urlInfoMap.put(generateKey(ExecutorType.EXTERNAL, NetworkType.ACCESS, ActionType.MODIFY), - new NssmfUrlInfo(EXTERNAL_AN_MODIFY_URL, HttpMethod.PUT)); - urlInfoMap.put(generateKey(ExecutorType.EXTERNAL, NetworkType.CORE, ActionType.MODIFY), - new NssmfUrlInfo(EXTERNAL_CN_ALLOCATE_URL, HttpMethod.PUT)); - urlInfoMap.put(generateKey(ExecutorType.INTERNAL, null, ActionType.MODIFY), - new NssmfUrlInfo(INTERNAL_MODIFY_URL, HttpMethod.PUT)); - - - urlInfoMap.put(generateKey(ExecutorType.EXTERNAL, NetworkType.CORE, ActionType.QUERY_JOB_STATUS), - new NssmfUrlInfo(EXTERNAL_QUERY_JOB_STATUS, HttpMethod.GET)); - urlInfoMap.put(generateKey(ExecutorType.EXTERNAL, NetworkType.ACCESS, ActionType.QUERY_JOB_STATUS), - new NssmfUrlInfo(EXTERNAL_QUERY_JOB_STATUS, HttpMethod.GET)); - urlInfoMap.put(generateKey(ExecutorType.EXTERNAL, NetworkType.TRANSPORT, ActionType.QUERY_JOB_STATUS), - new NssmfUrlInfo(EXTERNAL_QUERY_JOB_STATUS, HttpMethod.GET)); - - urlInfoMap.put(generateKey(ExecutorType.INTERNAL, null, ActionType.QUERY_SUB_NET_CAPABILITY), - new NssmfUrlInfo(INTERNAL_QUERY_SUB_NET_CAPABILITY, HttpMethod.GET)); - } - - /** - * get nssmf url info from consts - * - * @param executorType {@link ExecutorType} - * @param networkType {@link NetworkType} - * @param actionType {@link ActionType} - * @return {@link NssmfUrlInfo} - */ - public static NssmfUrlInfo getNssmfUrlInfo(ExecutorType executorType, NetworkType networkType, - ActionType actionType) { - - return urlInfoMap.get(generateKey(executorType, networkType, actionType)); - } - - private static String generateKey(ExecutorType executorType, NetworkType networkType, ActionType actionType) { - if (ExecutorType.EXTERNAL.equals(executorType)) { - return executorType.name() + "_" + networkType.name() + "_" + actionType.name(); - } - return executorType.name() + "_" + actionType.name(); - } - - -} diff --git a/src/main/java/org/onap/so/adapters/nssmf/controller/NssmfAdapterController.java b/src/main/java/org/onap/so/adapters/nssmf/controller/NssmfAdapterController.java deleted file mode 100644 index 3732e2c..0000000 --- a/src/main/java/org/onap/so/adapters/nssmf/controller/NssmfAdapterController.java +++ /dev/null @@ -1,59 +0,0 @@ -package org.onap.so.adapters.nssmf.controller; - -import org.onap.so.adapters.nssmf.annotation.RequestLogger; -import org.onap.so.adapters.nssmf.service.NssmfManagerService; -import org.onap.so.beans.nsmf.*; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.http.ResponseEntity; -import org.springframework.web.bind.annotation.*; -import static javax.ws.rs.core.MediaType.APPLICATION_JSON; - -@RestController -@RequestMapping(value = "/api/rest/provMns/v1", produces = {APPLICATION_JSON}, consumes = {APPLICATION_JSON}) -@RequestLogger -public class NssmfAdapterController { - - @Autowired - private NssmfManagerService nssmfManagerService; - - @PostMapping(value = "/NSS/SliceProfiles") - public ResponseEntity allocateNssi(@RequestBody NssmfAdapterNBIRequest nbiRequest) { - return nssmfManagerService.allocateNssi(nbiRequest); - } - - @PostMapping(value = "/NSS/SliceProfiles/{sliceProfileId}") - public ResponseEntity deAllocateNssi(@RequestBody NssmfAdapterNBIRequest nbiRequest, - @PathVariable("sliceProfileId") final String sliceProfileId) { - return nssmfManagerService.deAllocateNssi(nbiRequest, sliceProfileId); - } - - - @PostMapping(value = "/NSS/{snssai}/activation") - public ResponseEntity activateNssi(@RequestBody NssmfAdapterNBIRequest nbiRequest, - @PathVariable("snssai") String snssai) { - return nssmfManagerService.activateNssi(nbiRequest, snssai); - } - - @PostMapping(value = "/NSS/{snssai}/deactivation") - public ResponseEntity deactivateNssi(@RequestBody NssmfAdapterNBIRequest nbiRequest, - @PathVariable("snssai") String snssai) { - return nssmfManagerService.deActivateNssi(nbiRequest, snssai); - } - - @PostMapping(value = "/NSS/jobs/{jobId}") - public ResponseEntity queryJobStatus(@RequestBody NssmfAdapterNBIRequest nbiRequest, - @PathVariable("jobId") String jobId) { - return nssmfManagerService.queryJobStatus(nbiRequest, jobId); - } - - @PostMapping(value = "/NSS/NSSISelectionCapability") - public ResponseEntity queryNSSISelectionCapability(@RequestBody NssmfAdapterNBIRequest nbiRequest) { - return nssmfManagerService.queryNSSISelectionCapability(nbiRequest); - } - - @PostMapping(value = "/NSS/subnetCapabilityQuery") - public ResponseEntity querySubnetCapability(@RequestBody NssmfAdapterNBIRequest nbiRequest) { - return nssmfManagerService.querySubnetCapability(nbiRequest); - } - -} diff --git a/src/main/java/org/onap/so/adapters/nssmf/entity/ErrorResponse.java b/src/main/java/org/onap/so/adapters/nssmf/entity/ErrorResponse.java deleted file mode 100644 index a8653f8..0000000 --- a/src/main/java/org/onap/so/adapters/nssmf/entity/ErrorResponse.java +++ /dev/null @@ -1,63 +0,0 @@ -/*- - * ============LICENSE_START======================================================= - * ONAP - SO - * ================================================================================ - * Copyright (C) 2020 Huawei Technologies Co., Ltd. All rights reserved. - * ================================================================================ - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * ============LICENSE_END========================================================= - */ - -package org.onap.so.adapters.nssmf.entity; - -public class ErrorResponse { - - private int status; - - private String error; - - private String message; - - public ErrorResponse(int status, String message) { - this.status = status; - this.message = message; - this.error = "Bad Request"; - } - - public int getStatus() { - return status; - } - - public void setStatus(int status) { - this.status = status; - } - - public String getError() { - if (status == 500) { - this.error = "Internal Server Error"; - } - return error; - } - - public void setError(String error) { - this.error = error; - } - - public String getMessage() { - return message; - } - - public void setMessage(String message) { - this.message = message; - } -} diff --git a/src/main/java/org/onap/so/adapters/nssmf/entity/NssmfInfo.java b/src/main/java/org/onap/so/adapters/nssmf/entity/NssmfInfo.java deleted file mode 100644 index af26264..0000000 --- a/src/main/java/org/onap/so/adapters/nssmf/entity/NssmfInfo.java +++ /dev/null @@ -1,41 +0,0 @@ -/*- - * ============LICENSE_START======================================================= - * ONAP - SO - * ================================================================================ - * Copyright (C) 2020 Huawei Technologies Co., Ltd. All rights reserved. - * ================================================================================ - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * ============LICENSE_END========================================================= - */ - -package org.onap.so.adapters.nssmf.entity; - -import lombok.Data; - -@Data -public class NssmfInfo { - - private String url; - - private String ipAddress; - - private String port; - - private String insecure; - - private String cacert; - - private String userName; - - private String password; -} diff --git a/src/main/java/org/onap/so/adapters/nssmf/entity/NssmfUrlInfo.java b/src/main/java/org/onap/so/adapters/nssmf/entity/NssmfUrlInfo.java deleted file mode 100644 index f55ff10..0000000 --- a/src/main/java/org/onap/so/adapters/nssmf/entity/NssmfUrlInfo.java +++ /dev/null @@ -1,17 +0,0 @@ -package org.onap.so.adapters.nssmf.entity; - -import lombok.Data; -import org.onap.so.adapters.nssmf.enums.HttpMethod; - -@Data -public class NssmfUrlInfo { - - private String url; - - private HttpMethod httpMethod; - - public NssmfUrlInfo(String url, HttpMethod httpMethod) { - this.url = url; - this.httpMethod = httpMethod; - } -} diff --git a/src/main/java/org/onap/so/adapters/nssmf/entity/RestResponse.java b/src/main/java/org/onap/so/adapters/nssmf/entity/RestResponse.java deleted file mode 100644 index 218867c..0000000 --- a/src/main/java/org/onap/so/adapters/nssmf/entity/RestResponse.java +++ /dev/null @@ -1,92 +0,0 @@ -/*- - * ============LICENSE_START======================================================= - * ONAP - SO - * ================================================================================ - * Copyright (C) 2020 Huawei Technologies Co., Ltd. All rights reserved. - * ================================================================================ - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * ============LICENSE_END========================================================= - */ - -package org.onap.so.adapters.nssmf.entity; - -import java.util.Map; - -public class RestResponse { - - // the response content - private String responseContent; - - // the response status - private int status; - - // the response header - private Map respHeaderMap; - - public RestResponse() { - this.status = -1; - - this.respHeaderMap = null; - } - - public int getStatus() { - return this.status; - } - - public void setStatus(int status) { - this.status = status; - } - - public Map getRespHeaderMap() { - return this.respHeaderMap; - } - - public void setRespHeaderMap(Map header) { - this.respHeaderMap = header; - } - - public int getRespHeaderInt(String key) { - if (this.respHeaderMap != null) { - String result = this.respHeaderMap.get(key); - if (result != null) { - return Integer.parseInt(result); - } - } - return -1; - } - - public long getRespHeaderLong(String key) { - if (this.respHeaderMap != null) { - String result = this.respHeaderMap.get(key); - if (result != null) { - return Long.parseLong(result); - } - } - return -1L; - } - - public String getRespHeaderStr(String key) { - if (this.respHeaderMap != null) { - return this.respHeaderMap.get(key); - } - return null; - } - - public String getResponseContent() { - return this.responseContent; - } - - public void setResponseContent(String responseString) { - this.responseContent = responseString; - } -} diff --git a/src/main/java/org/onap/so/adapters/nssmf/entity/TokenRequest.java b/src/main/java/org/onap/so/adapters/nssmf/entity/TokenRequest.java deleted file mode 100644 index bfcb875..0000000 --- a/src/main/java/org/onap/so/adapters/nssmf/entity/TokenRequest.java +++ /dev/null @@ -1,33 +0,0 @@ -/*- - * ============LICENSE_START======================================================= - * ONAP - SO - * ================================================================================ - * Copyright (C) 2020 Huawei Technologies Co., Ltd. All rights reserved. - * ================================================================================ - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * ============LICENSE_END========================================================= - */ - -package org.onap.so.adapters.nssmf.entity; - -import lombok.Data; - -@Data -public class TokenRequest { - - private String grantType; - - private String userName; - - private String value; -} diff --git a/src/main/java/org/onap/so/adapters/nssmf/entity/TokenResponse.java b/src/main/java/org/onap/so/adapters/nssmf/entity/TokenResponse.java deleted file mode 100644 index 552612a..0000000 --- a/src/main/java/org/onap/so/adapters/nssmf/entity/TokenResponse.java +++ /dev/null @@ -1,32 +0,0 @@ -/*- - * ============LICENSE_START======================================================= - * ONAP - SO - * ================================================================================ - * Copyright (C) 2020 Huawei Technologies Co., Ltd. All rights reserved. - * ================================================================================ - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * ============LICENSE_END========================================================= - */ - -package org.onap.so.adapters.nssmf.entity; - - -import lombok.Data; - -@Data -public class TokenResponse { - - private String accessToken; - - private int expires; -} diff --git a/src/main/java/org/onap/so/adapters/nssmf/enums/ActionType.java b/src/main/java/org/onap/so/adapters/nssmf/enums/ActionType.java deleted file mode 100644 index 530cc1b..0000000 --- a/src/main/java/org/onap/so/adapters/nssmf/enums/ActionType.java +++ /dev/null @@ -1,67 +0,0 @@ -/*- - * ============LICENSE_START======================================================= - * ONAP - SO - * ================================================================================ - # Copyright (c) 2020, CMCC Technologies Co., Ltd. - # - # Licensed under the Apache License, Version 2.0 (the "License") - # you may not use this file except in compliance with the License. - # You may obtain a copy of the License at - # - # http://www.apache.org/licenses/LICENSE-2.0 - # - # Unless required by applicable law or agreed to in writing, software - # distributed under the License is distributed on an "AS IS" BASIS, - # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - # See the License for the specific language governing permissions and - # limitations under the License. - * ============LICENSE_END========================================================= - */ - -package org.onap.so.adapters.nssmf.enums; - -import lombok.Getter; - -@Getter -public enum ActionType { - /** - * allocate - */ - ALLOCATE("allocate"), - - DEALLOCATE("deallocate"), - - CREATE("create"), - - TERMINATE("terminate"), - - ACTIVATE("activate"), - - DEACTIVATE("deactivate"), - - QUERY_JOB_STATUS("query_job_status"), - - MODIFY_BY_ID("modify_by_id"), - - MODIFY("modify"), - - QUERY_NSSI_SELECTION_CAPABILITY("query_nssi_selection_capability"), - - QUERY_SUB_NET_CAPABILITY("query_sub_net_capability"),; - - private String type; - - - ActionType(String type) { - this.type = type; - } - - public static ActionType getActionType(String value) { - for (ActionType actionType : ActionType.values()) { - if (actionType.type.equalsIgnoreCase(value)) { - return actionType; - } - } - return null; - } -} diff --git a/src/main/java/org/onap/so/adapters/nssmf/enums/ExecutorType.java b/src/main/java/org/onap/so/adapters/nssmf/enums/ExecutorType.java deleted file mode 100644 index a76a54c..0000000 --- a/src/main/java/org/onap/so/adapters/nssmf/enums/ExecutorType.java +++ /dev/null @@ -1,25 +0,0 @@ -/*- - * ============LICENSE_START======================================================= - * ONAP - SO - * ================================================================================ - # Copyright (c) 2020, CMCC Technologies Co., Ltd. - # - # Licensed under the Apache License, Version 2.0 (the "License") - # you may not use this file except in compliance with the License. - # You may obtain a copy of the License at - # - # http://www.apache.org/licenses/LICENSE-2.0 - # - # Unless required by applicable law or agreed to in writing, software - # distributed under the License is distributed on an "AS IS" BASIS, - # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - # See the License for the specific language governing permissions and - # limitations under the License. - * ============LICENSE_END========================================================= - */ - -package org.onap.so.adapters.nssmf.enums; - -public enum ExecutorType { - INTERNAL, EXTERNAL -} diff --git a/src/main/java/org/onap/so/adapters/nssmf/enums/HttpMethod.java b/src/main/java/org/onap/so/adapters/nssmf/enums/HttpMethod.java deleted file mode 100644 index 9271bb5..0000000 --- a/src/main/java/org/onap/so/adapters/nssmf/enums/HttpMethod.java +++ /dev/null @@ -1,41 +0,0 @@ -/*- - * ============LICENSE_START======================================================= - * ONAP - SO - * ================================================================================ - * Copyright (C) 2020 Huawei Technologies Co., Ltd. All rights reserved. - * ================================================================================ - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * ============LICENSE_END========================================================= - */ - -package org.onap.so.adapters.nssmf.enums; - -public enum HttpMethod { - GET, POST, PUT, DELETE, PATCH; - - public static HttpMethod fromString(String s) { - if (s == null) - return null; - if (("get").equalsIgnoreCase(s)) - return GET; - if (("post").equalsIgnoreCase(s)) - return POST; - if (("put").equalsIgnoreCase(s)) - return PUT; - if (("delete").equalsIgnoreCase(s)) - return DELETE; - if (("patch").equalsIgnoreCase(s)) - return PATCH; - throw new IllegalArgumentException("Invalid value for HTTP Method: " + s); - } -} diff --git a/src/main/java/org/onap/so/adapters/nssmf/enums/JobStatus.java b/src/main/java/org/onap/so/adapters/nssmf/enums/JobStatus.java deleted file mode 100644 index d5cc1df..0000000 --- a/src/main/java/org/onap/so/adapters/nssmf/enums/JobStatus.java +++ /dev/null @@ -1,42 +0,0 @@ -/*- - * ============LICENSE_START======================================================= - * ONAP - SO - * ================================================================================ - * Copyright (C) 2020 Huawei Technologies Co., Ltd. All rights reserved. - * ================================================================================ - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * ============LICENSE_END========================================================= - */ - -package org.onap.so.adapters.nssmf.enums; - -import org.onap.so.adapters.nssmf.exceptions.ApplicationException; - - -public enum JobStatus { - STARTED, PROCESSING, FINISHED, ERROR; - - public static JobStatus fromString(String s) throws ApplicationException { - if (s == null) - return null; - if (("started").equalsIgnoreCase(s)) - return STARTED; - if (("processing").equalsIgnoreCase(s)) - return PROCESSING; - if (("finished").equalsIgnoreCase(s)) - return FINISHED; - if (("error").equalsIgnoreCase(s)) - return ERROR; - throw new ApplicationException(500, "Invalid value for Job " + "Status: " + s); - } -} diff --git a/src/main/java/org/onap/so/adapters/nssmf/enums/SelectionType.java b/src/main/java/org/onap/so/adapters/nssmf/enums/SelectionType.java deleted file mode 100644 index 420dfdc..0000000 --- a/src/main/java/org/onap/so/adapters/nssmf/enums/SelectionType.java +++ /dev/null @@ -1,27 +0,0 @@ -/*- - * ============LICENSE_START======================================================= - * ONAP - SO - * ================================================================================ - # Copyright (c) 2020, CMCC Technologies Co., Ltd. - # - # Licensed under the Apache License, Version 2.0 (the "License") - # you may not use this file except in compliance with the License. - # You may obtain a copy of the License at - # - # http://www.apache.org/licenses/LICENSE-2.0 - # - # Unless required by applicable law or agreed to in writing, software - # distributed under the License is distributed on an "AS IS" BASIS, - # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - # See the License for the specific language governing permissions and - # limitations under the License. - * ============LICENSE_END========================================================= - */ - -package org.onap.so.adapters.nssmf.enums; - -public enum SelectionType { - NSSMF, - - NSMF -} diff --git a/src/main/java/org/onap/so/adapters/nssmf/exceptions/ApplicationException.java b/src/main/java/org/onap/so/adapters/nssmf/exceptions/ApplicationException.java deleted file mode 100644 index 2461f5c..0000000 --- a/src/main/java/org/onap/so/adapters/nssmf/exceptions/ApplicationException.java +++ /dev/null @@ -1,66 +0,0 @@ -/*- - * ============LICENSE_START======================================================= - * ONAP - SO - * ================================================================================ - * Copyright (C) 2020 Huawei Technologies Co., Ltd. All rights reserved. - * ================================================================================ - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * ============LICENSE_END========================================================= - */ - -package org.onap.so.adapters.nssmf.exceptions; - -import org.onap.so.adapters.nssmf.entity.ErrorResponse; -import org.springframework.http.ResponseEntity; -import static org.onap.so.adapters.nssmf.util.NssmfAdapterUtil.marshal; - -public class ApplicationException extends Exception { - - private static final long serialVersionUID = 1L; - - private int errorCode; - - private String errorMsg; - - public ApplicationException(int errorCode, String errorMsg) { - this.errorCode = errorCode; - this.errorMsg = errorMsg; - } - - public int getErrorCode() { - return errorCode; - } - - public void setErrorCode(int errorCode) { - this.errorCode = errorCode; - } - - public String getErrorMsg() { - return errorMsg; - } - - public void setErrorMsg(String errorMsg) { - this.errorMsg = errorMsg; - } - - public ResponseEntity buildErrorResponse() { - String message; - try { - ErrorResponse err = new ErrorResponse(errorCode, errorMsg); - message = marshal(err); - } catch (ApplicationException e) { - return ResponseEntity.status(500).body("Internal Server Error"); - } - return ResponseEntity.status(errorCode).body(message); - } -} diff --git a/src/main/java/org/onap/so/adapters/nssmf/extclients/aai/AaiClientPropertiesImpl.java b/src/main/java/org/onap/so/adapters/nssmf/extclients/aai/AaiClientPropertiesImpl.java deleted file mode 100644 index 61adfcf..0000000 --- a/src/main/java/org/onap/so/adapters/nssmf/extclients/aai/AaiClientPropertiesImpl.java +++ /dev/null @@ -1,69 +0,0 @@ -/*- - * ============LICENSE_START======================================================= - * ONAP - SO - * ================================================================================ - * Copyright (C) 2020 Huawei Technologies Co., Ltd. All rights reserved. - * ================================================================================ - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * ============LICENSE_END========================================================= - */ - -package org.onap.so.adapters.nssmf.extclients.aai; - -import java.net.MalformedURLException; -import java.net.URL; -import org.onap.aaiclient.client.aai.AAIProperties; -import org.onap.aaiclient.client.aai.AAIVersion; -import org.onap.so.spring.SpringContextHelper; -import org.springframework.context.ApplicationContext; - -public class AaiClientPropertiesImpl implements AAIProperties { - - private final String endpoint; - - private final String encryptedBasicAuth; - - private final String encrytptionKey; - - public AaiClientPropertiesImpl() { - final ApplicationContext context = SpringContextHelper.getAppContext(); - this.endpoint = context.getEnvironment().getProperty("aai.endpoint"); - this.encryptedBasicAuth = context.getEnvironment().getProperty("aai.auth"); - this.encrytptionKey = context.getEnvironment().getProperty("mso.key"); - } - - @Override - public AAIVersion getDefaultVersion() { - return AAIVersion.LATEST; - } - - @Override - public String getAuth() { - return encryptedBasicAuth; - } - - @Override - public String getKey() { - return encrytptionKey; - } - - @Override - public URL getEndpoint() throws MalformedURLException { - return new URL(endpoint); - } - - @Override - public String getSystemName() { - return "MSO"; - } -} diff --git a/src/main/java/org/onap/so/adapters/nssmf/extclients/aai/AaiClientProvider.java b/src/main/java/org/onap/so/adapters/nssmf/extclients/aai/AaiClientProvider.java deleted file mode 100644 index 5959b0e..0000000 --- a/src/main/java/org/onap/so/adapters/nssmf/extclients/aai/AaiClientProvider.java +++ /dev/null @@ -1,34 +0,0 @@ -/*- - * ============LICENSE_START======================================================= - * ONAP - SO - * ================================================================================ - * Copyright (C) 2020 Huawei Technologies Co., Ltd. All rights reserved. - * ================================================================================ - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * ============LICENSE_END========================================================= - */ - -package org.onap.so.adapters.nssmf.extclients.aai; - -import org.onap.aaiclient.client.aai.AAIResourcesClient; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; - -@Configuration -public class AaiClientProvider { - - @Bean - public AAIResourcesClient getAaiClient() { - return new AAIResourcesClient(); - } -} diff --git a/src/main/java/org/onap/so/adapters/nssmf/extclients/aai/AaiServiceProvider.java b/src/main/java/org/onap/so/adapters/nssmf/extclients/aai/AaiServiceProvider.java deleted file mode 100644 index 77662bf..0000000 --- a/src/main/java/org/onap/so/adapters/nssmf/extclients/aai/AaiServiceProvider.java +++ /dev/null @@ -1,39 +0,0 @@ -/*- - * ============LICENSE_START======================================================= - * ONAP - SO - * ================================================================================ - * Copyright (C) 2020 Huawei Technologies Co., Ltd. All rights reserved. - * ================================================================================ - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * ============LICENSE_END========================================================= - */ - -package org.onap.so.adapters.nssmf.extclients.aai; - -import org.onap.aai.domain.yang.EsrSystemInfoList; -import org.onap.aai.domain.yang.EsrThirdpartySdncList; -import org.onap.aai.domain.yang.ServiceInstance; - -public interface AaiServiceProvider { - - EsrThirdpartySdncList invokeGetThirdPartySdncList(); - - EsrSystemInfoList invokeGetThirdPartySdncEsrSystemInfo(String sdncId); - - void invokeCreateServiceInstance(ServiceInstance nssiInstance, String globalSubscriberId, String serviceType, - String serviceInstanceId); - - ServiceInstance invokeGetServiceInstance(String globalSubscriberId, String serviceType, String serviceInstanceId); - - void invokeDeleteServiceInstance(String globalSubscriberId, String serviceType, String serviceInstanceId); -} diff --git a/src/main/java/org/onap/so/adapters/nssmf/extclients/aai/AaiServiceProviderImpl.java b/src/main/java/org/onap/so/adapters/nssmf/extclients/aai/AaiServiceProviderImpl.java deleted file mode 100644 index 1d7c42a..0000000 --- a/src/main/java/org/onap/so/adapters/nssmf/extclients/aai/AaiServiceProviderImpl.java +++ /dev/null @@ -1,98 +0,0 @@ -/*- - * ============LICENSE_START======================================================= - * ONAP - SO - * ================================================================================ - * Copyright (C) 2020 Huawei Technologies Co., Ltd. All rights reserved. - * ================================================================================ - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * ============LICENSE_END========================================================= - */ - -package org.onap.so.adapters.nssmf.extclients.aai; - - -import org.onap.aai.domain.yang.EsrSystemInfoList; -import org.onap.aai.domain.yang.EsrThirdpartySdncList; -import org.onap.aai.domain.yang.ServiceInstance; -import org.onap.aaiclient.client.aai.entities.uri.AAIResourceUri; -import org.onap.aaiclient.client.aai.entities.uri.AAIUriFactory; -import org.onap.aaiclient.client.generated.fluentbuilders.AAIFluentTypeBuilder; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Service; - -@Service -public class AaiServiceProviderImpl implements AaiServiceProvider { - - private static final Logger logger = LoggerFactory.getLogger(AaiServiceProviderImpl.class); - - private final AaiClientProvider aaiClientProvider; - - @Autowired - public AaiServiceProviderImpl(final AaiClientProvider aaiClientProvider) { - this.aaiClientProvider = aaiClientProvider; - } - - @Override - public EsrThirdpartySdncList invokeGetThirdPartySdncList() { - return aaiClientProvider.getAaiClient() - .get(EsrThirdpartySdncList.class, - AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.externalSystem().esrThirdpartySdncList())) - .orElseGet(() -> { - logger.debug("No VNFMs in AAI"); - return null; - }); - } - - @Override - public EsrSystemInfoList invokeGetThirdPartySdncEsrSystemInfo(String sdncId) { - return aaiClientProvider.getAaiClient() - .get(EsrSystemInfoList.class, - AAIUriFactory.createResourceUri( - AAIFluentTypeBuilder.externalSystem().esrThirdpartySdnc((sdncId)).esrSystemInfoList())) - .orElseGet(() -> { - logger.debug("VNFM not found in AAI"); - return null; - }); - } - - - @Override - public void invokeCreateServiceInstance(ServiceInstance nssiInstance, String globalSubscriberId, String serviceType, - String serviceInstanceId) { - AAIResourceUri uri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.business() - .customer(globalSubscriberId).serviceSubscription(serviceType).serviceInstance(serviceInstanceId)); - aaiClientProvider.getAaiClient().create(uri, nssiInstance); - } - - @Override - public ServiceInstance invokeGetServiceInstance(String globalSubscriberId, String serviceType, - String serviceInstanceId) { - AAIResourceUri uri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.business() - .customer(globalSubscriberId).serviceSubscription(serviceType).serviceInstance(serviceInstanceId)); - - return aaiClientProvider.getAaiClient().get(ServiceInstance.class, uri).orElseGet(() -> { - logger.debug("ServiceInstance " + serviceInstanceId + " not found in AAI"); - return null; - }); - } - - @Override - public void invokeDeleteServiceInstance(String globalSubscriberId, String serviceType, String serviceInstanceId) { - AAIResourceUri uri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.business() - .customer(globalSubscriberId).serviceSubscription(serviceType).serviceInstance(serviceInstanceId)); - - aaiClientProvider.getAaiClient().delete(uri); - } -} diff --git a/src/main/java/org/onap/so/adapters/nssmf/interceptor/LoggerInterceptor.java b/src/main/java/org/onap/so/adapters/nssmf/interceptor/LoggerInterceptor.java deleted file mode 100644 index bca4a12..0000000 --- a/src/main/java/org/onap/so/adapters/nssmf/interceptor/LoggerInterceptor.java +++ /dev/null @@ -1,55 +0,0 @@ -/*- - * ============LICENSE_START======================================================= - * ONAP - SO - * ================================================================================ - # Copyright (c) 2020, CMCC Technologies Co., Ltd. - # - # Licensed under the Apache License, Version 2.0 (the "License") - # you may not use this file except in compliance with the License. - # You may obtain a copy of the License at - # - # http://www.apache.org/licenses/LICENSE-2.0 - # - # Unless required by applicable law or agreed to in writing, software - # distributed under the License is distributed on an "AS IS" BASIS, - # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - # See the License for the specific language governing permissions and - # limitations under the License. - * ============LICENSE_END========================================================= - */ - -package org.onap.so.adapters.nssmf.interceptor; - -import org.apache.logging.log4j.ThreadContext; -import org.springframework.stereotype.Component; -import org.springframework.web.servlet.HandlerInterceptor; -import org.springframework.web.servlet.ModelAndView; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import java.util.UUID; - -@Component -public class LoggerInterceptor implements HandlerInterceptor { - - private final static String TRACE_ID = "traceId"; - - @Override - public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) - throws Exception { - String traceId = UUID.randomUUID().toString().replaceAll("-", "").toUpperCase(); - ThreadContext.put(TRACE_ID, traceId); - return true; - } - - @Override - public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, - ModelAndView modelAndView) throws Exception { - - } - - @Override - public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) - throws Exception { - ThreadContext.remove(TRACE_ID); - } -} diff --git a/src/main/java/org/onap/so/adapters/nssmf/interceptor/RequestLogAspect.java b/src/main/java/org/onap/so/adapters/nssmf/interceptor/RequestLogAspect.java deleted file mode 100644 index 95f26b4..0000000 --- a/src/main/java/org/onap/so/adapters/nssmf/interceptor/RequestLogAspect.java +++ /dev/null @@ -1,227 +0,0 @@ -/*- - * ============LICENSE_START======================================================= - * ONAP - SO - * ================================================================================ - # Copyright (c) 2020, CMCC Technologies Co., Ltd. - # - # Licensed under the Apache License, Version 2.0 (the "License") - # you may not use this file except in compliance with the License. - # You may obtain a copy of the License at - # - # http://www.apache.org/licenses/LICENSE-2.0 - # - # Unless required by applicable law or agreed to in writing, software - # distributed under the License is distributed on an "AS IS" BASIS, - # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - # See the License for the specific language governing permissions and - # limitations under the License. - * ============LICENSE_END========================================================= - */ -package org.onap.so.adapters.nssmf.interceptor; - -import lombok.Data; -import lombok.ToString; -import org.aspectj.lang.JoinPoint; -import org.aspectj.lang.ProceedingJoinPoint; -import org.aspectj.lang.annotation.*; -import org.aspectj.lang.reflect.MethodSignature; -import org.onap.so.adapters.nssmf.annotation.RequestLogger; -import org.onap.so.adapters.nssmf.annotation.ServiceLogger; -import org.onap.so.adapters.nssmf.exceptions.ApplicationException; -import org.onap.so.adapters.nssmf.util.NssmfAdapterUtil; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.core.annotation.Order; -import org.springframework.stereotype.Component; -import org.springframework.web.context.request.RequestContextHolder; -import org.springframework.web.context.request.ServletRequestAttributes; -import org.springframework.web.multipart.MultipartFile; -import javax.servlet.http.HttpServletRequest; -import java.lang.reflect.Method; -import java.util.HashMap; -import java.util.Map; - -/** - * support to print logger of service method - */ -@Aspect -@Order(100) -@Component -public class RequestLogAspect { - - private static final Logger logger = LoggerFactory.getLogger(RequestLogAspect.class); - - @Pointcut("execution(* org.onap.so.adapters.nssmf.service..*(..))") - public void serviceLogger() { - - } - - @Around("serviceLogger()") - public Object around(ProceedingJoinPoint joinPoint) { - try { - MethodSignature signature = (MethodSignature) joinPoint.getSignature(); - Method method = signature.getMethod(); - - Class targetClass = method.getDeclaringClass(); - - StringBuilder classAndMethod = new StringBuilder(); - ServiceLogger classAnnotation = targetClass.getAnnotation(ServiceLogger.class); - ServiceLogger methodAnnotation = method.getAnnotation(ServiceLogger.class); - - if (classAnnotation == null && methodAnnotation == null) { - return joinPoint.proceed(); - } - - if (classAnnotation != null) { - if (classAnnotation.ignore()) { - return joinPoint.proceed(); - } - classAndMethod.append(classAnnotation.value()).append("-"); - } - - String target = targetClass.getName() + "#" + method.getName(); - - String params = NssmfAdapterUtil.marshal(joinPoint.getArgs()); - - logger.info("{} Start: Method = {} \nParams = {}", classAndMethod.toString(), target, params); - - long start = System.currentTimeMillis(); - Object result = joinPoint.proceed(); - long timeConsuming = System.currentTimeMillis() - start; - - logger.info("\n{} End: Method = {}, Spend time = {}ms \nResult = {}", classAndMethod.toString(), target, - timeConsuming, NssmfAdapterUtil.marshal(result)); - return result; - - } catch (Throwable e) { - logger.error(e.getMessage(), e); - } - return null; - } - - @Pointcut("execution(* org.onap.so.adapters.nssmf.controller..*(..))") - public void controllerLogger() { - - } - - @Around("controllerLogger()") - public Object doAroundRequest(ProceedingJoinPoint point) throws Throwable { - MethodSignature signature = (MethodSignature) point.getSignature(); - Method method = signature.getMethod(); - Class targetClass = method.getDeclaringClass(); - - RequestLogger classAnnotation = targetClass.getAnnotation(RequestLogger.class); - RequestLogger methodAnnotation = method.getAnnotation(RequestLogger.class); - - if ((classAnnotation == null && methodAnnotation == null) - || (classAnnotation != null && classAnnotation.ignore()) - || (methodAnnotation != null && methodAnnotation.ignore())) { - return point.proceed(); - } - - long start = System.currentTimeMillis(); - ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes(); - - assert attributes != null; - HttpServletRequest request = attributes.getRequest(); - Object result = point.proceed(); - RequestInfo requestInfo = new RequestInfo(); - requestInfo.setIp(request.getRemoteAddr()); - requestInfo.setUrl(request.getRequestURL().toString()); - requestInfo.setHttpMethod(request.getMethod()); - requestInfo.setClassMethod(String.format("%s.%s", signature.getDeclaringTypeName(), signature.getName())); - requestInfo.setRequestParams(getRequestParamsByProceedingJoinPoint(point)); - requestInfo.setResult(result); - requestInfo.setTimeCost(System.currentTimeMillis() - start); - logger.info("Request Info : {}", NssmfAdapterUtil.marshal(requestInfo)); - return result; - } - - @AfterThrowing(pointcut = "controllerLogger()", throwing = "e") - public void doAfterRequestThrow(JoinPoint joinPoint, RuntimeException e) { - MethodSignature signature = (MethodSignature) joinPoint.getSignature(); - Method method = signature.getMethod(); - Class targetClass = method.getDeclaringClass(); - - RequestLogger classAnnotation = targetClass.getAnnotation(RequestLogger.class); - RequestLogger methodAnnotation = method.getAnnotation(RequestLogger.class); - - if ((classAnnotation == null && methodAnnotation == null) - || (classAnnotation != null && classAnnotation.ignore()) - || (methodAnnotation != null && methodAnnotation.ignore())) { - return; - } - ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes(); - assert attributes != null; - HttpServletRequest request = attributes.getRequest(); - RequestErrorInfo requestErrorInfo = new RequestErrorInfo(); - requestErrorInfo.setIp(request.getRemoteAddr()); - requestErrorInfo.setUrl(request.getRequestURL().toString()); - requestErrorInfo.setHttpMethod(request.getMethod()); - requestErrorInfo.setClassMethod(String.format("%s.%s", joinPoint.getSignature().getDeclaringTypeName(), - joinPoint.getSignature().getName())); - requestErrorInfo.setRequestParams(getRequestParamsByJoinPoint(joinPoint)); - requestErrorInfo.setException(e); - String res; - try { - res = NssmfAdapterUtil.marshal(requestErrorInfo); - logger.info("Error Request Info : {}", res); - } catch (ApplicationException ex) { - logger.info("Error Request Info : {}", requestErrorInfo); - } - } - - private Map getRequestParamsByJoinPoint(JoinPoint joinPoint) { - String[] paramNames = ((MethodSignature) joinPoint.getSignature()).getParameterNames(); - Object[] paramValues = joinPoint.getArgs(); - - return buildRequestParam(paramNames, paramValues); - } - - - private Map getRequestParamsByProceedingJoinPoint(ProceedingJoinPoint proceedingJoinPoint) { - String[] paramNames = ((MethodSignature) proceedingJoinPoint.getSignature()).getParameterNames(); - Object[] paramValues = proceedingJoinPoint.getArgs(); - - return buildRequestParam(paramNames, paramValues); - } - - private Map buildRequestParam(String[] paramNames, Object[] paramValues) { - Map requestParams = new HashMap<>(); - for (int i = 0; i < paramNames.length; i++) { - Object value = paramValues[i]; - - if (value instanceof MultipartFile) { - MultipartFile file = (MultipartFile) value; - value = file.getOriginalFilename(); - } - - requestParams.put(paramNames[i], value); - } - - return requestParams; - } - - @Data - @ToString - private class RequestInfo { - private String ip; - private String url; - private String httpMethod; - private String classMethod; - private Object requestParams; - private Object result; - private Long timeCost; - } - - @Data - @ToString - private class RequestErrorInfo { - private String ip; - private String url; - private String httpMethod; - private String classMethod; - private Object requestParams; - private RuntimeException exception; - } -} diff --git a/src/main/java/org/onap/so/adapters/nssmf/manager/NssmfManager.java b/src/main/java/org/onap/so/adapters/nssmf/manager/NssmfManager.java deleted file mode 100644 index 54ef1e0..0000000 --- a/src/main/java/org/onap/so/adapters/nssmf/manager/NssmfManager.java +++ /dev/null @@ -1,44 +0,0 @@ -/*- - * ============LICENSE_START======================================================= - * ONAP - SO - * ================================================================================ - # Copyright (c) 2020, CMCC Technologies Co., Ltd. - # - # Licensed under the Apache License, Version 2.0 (the "License") - # you may not use this file except in compliance with the License. - # You may obtain a copy of the License at - # - # http://www.apache.org/licenses/LICENSE-2.0 - # - # Unless required by applicable law or agreed to in writing, software - # distributed under the License is distributed on an "AS IS" BASIS, - # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - # See the License for the specific language governing permissions and - # limitations under the License. - * ============LICENSE_END========================================================= - */ - -package org.onap.so.adapters.nssmf.manager; - -import org.onap.so.adapters.nssmf.exceptions.ApplicationException; -import org.onap.so.adapters.nssmf.entity.RestResponse; -import org.onap.so.beans.nsmf.*; - -public interface NssmfManager { - - RestResponse allocateNssi(NssmfAdapterNBIRequest nssmfRequest) throws ApplicationException; - - RestResponse deAllocateNssi(NssmfAdapterNBIRequest nssmfRequest, String sliceId) throws ApplicationException; - - RestResponse activateNssi(NssmfAdapterNBIRequest nssmfRequest, String snssai) throws ApplicationException; - - RestResponse deActivateNssi(NssmfAdapterNBIRequest nssmfRequest, String snssai) throws ApplicationException; - - RestResponse queryJobStatus(NssmfAdapterNBIRequest jobReq, String jobId) throws ApplicationException; - - RestResponse queryNSSISelectionCapability(NssmfAdapterNBIRequest nbiRequest) throws ApplicationException; - - RestResponse querySubnetCapability(NssmfAdapterNBIRequest nbiRequest) throws ApplicationException; - - RestResponse modifyNssi(NssmfAdapterNBIRequest modifyRequest) throws ApplicationException; -} diff --git a/src/main/java/org/onap/so/adapters/nssmf/manager/NssmfManagerBuilder.java b/src/main/java/org/onap/so/adapters/nssmf/manager/NssmfManagerBuilder.java deleted file mode 100644 index e397201..0000000 --- a/src/main/java/org/onap/so/adapters/nssmf/manager/NssmfManagerBuilder.java +++ /dev/null @@ -1,131 +0,0 @@ -/*- - * ============LICENSE_START======================================================= - * ONAP - SO - * ================================================================================ - # Copyright (c) 2020, CMCC Technologies Co., Ltd. - # - # Licensed under the Apache License, Version 2.0 (the "License") - # you may not use this file except in compliance with the License. - # You may obtain a copy of the License at - # - # http://www.apache.org/licenses/LICENSE-2.0 - # - # Unless required by applicable law or agreed to in writing, software - # distributed under the License is distributed on an "AS IS" BASIS, - # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - # See the License for the specific language governing permissions and - # limitations under the License. - * ============LICENSE_END========================================================= - */ - -package org.onap.so.adapters.nssmf.manager; - -import org.onap.so.adapters.nssmf.config.NssmfAdapterConfig; -import org.onap.so.adapters.nssmf.consts.NssmfAdapterConsts; -import org.onap.so.adapters.nssmf.enums.ActionType; -import org.onap.so.adapters.nssmf.enums.ExecutorType; -import org.onap.so.adapters.nssmf.exceptions.ApplicationException; -import org.onap.so.adapters.nssmf.manager.impl.external.ExternalAnNssmfManager; -import org.onap.so.adapters.nssmf.manager.impl.external.ExternalCnNssmfManager; -import org.onap.so.adapters.nssmf.manager.impl.internal.InternalAnNssmfManager; -import org.onap.so.adapters.nssmf.manager.impl.internal.InternalCnNssmfManager; -import org.onap.so.adapters.nssmf.manager.impl.internal.InternalTnNssmfManager; -import org.onap.so.adapters.nssmf.manager.impl.*; -import org.onap.so.adapters.nssmf.util.RestUtil; -import org.onap.so.beans.nsmf.EsrInfo; -import org.onap.so.beans.nsmf.NetworkType; -import org.onap.so.beans.nsmf.ServiceInfo; -import org.onap.so.db.request.data.repository.ResourceOperationStatusRepository; - -public class NssmfManagerBuilder { - - private BaseNssmfManager nssmfManger; - - private RestUtil restUtil; - - private ActionType actionType; - - private ResourceOperationStatusRepository repository; - - private ServiceInfo serviceInfo; - - private NssmfAdapterConfig adapterConfig; - - public NssmfManagerBuilder(EsrInfo esrInfo) throws ApplicationException { - - ExecutorType executorType = getExecutorType(esrInfo); - NetworkType networkType = esrInfo.getNetworkType(); - - if (ExecutorType.INTERNAL.equals(executorType) && NetworkType.CORE.equals(networkType)) { - this.nssmfManger = new InternalCnNssmfManager().setEsrInfo(esrInfo).setExecutorType(executorType); - return; - } - - if (ExecutorType.INTERNAL.equals(executorType) && NetworkType.TRANSPORT.equals(networkType)) { - this.nssmfManger = new InternalTnNssmfManager().setEsrInfo(esrInfo).setExecutorType(executorType); - return; - } - - if (ExecutorType.INTERNAL.equals(executorType) && NetworkType.ACCESS.equals(networkType)) { - this.nssmfManger = new InternalAnNssmfManager().setEsrInfo(esrInfo).setExecutorType(executorType); - return; - } - - if (ExecutorType.EXTERNAL.equals(executorType) && NetworkType.CORE.equals(networkType)) { - this.nssmfManger = new ExternalCnNssmfManager().setEsrInfo(esrInfo).setExecutorType(executorType) - .setInitStatus("deactivated"); - return; - } - - if (ExecutorType.EXTERNAL.equals(executorType) && NetworkType.TRANSPORT.equals(networkType)) { - this.nssmfManger = new ExternalAnNssmfManager().setEsrInfo(esrInfo).setExecutorType(executorType) - .setInitStatus("activated"); - return; - } - - if (ExecutorType.EXTERNAL.equals(executorType) && NetworkType.ACCESS.equals(networkType)) { - this.nssmfManger = new ExternalAnNssmfManager().setEsrInfo(esrInfo).setExecutorType(executorType) - .setInitStatus("activated"); - return; - } - - throw new ApplicationException(404, "invalid domain and simulator"); - } - - private ExecutorType getExecutorType(EsrInfo esrInfo) { - if (NssmfAdapterConsts.ONAP_INTERNAL_TAG.equals(esrInfo.getVendor())) { - return ExecutorType.INTERNAL; - } - return ExecutorType.EXTERNAL; - } - - public NssmfManagerBuilder setRestUtil(RestUtil restUtil) { - this.restUtil = restUtil; - return this; - } - - public NssmfManagerBuilder setActionType(ActionType actionType) { - this.actionType = actionType; - return this; - } - - public NssmfManagerBuilder setRepository(ResourceOperationStatusRepository repository) { - this.repository = repository; - return this; - } - - public NssmfManagerBuilder setServiceInfo(ServiceInfo serviceInfo) { - this.serviceInfo = serviceInfo; - return this; - } - - public NssmfManagerBuilder setAdapterConfig(NssmfAdapterConfig adapterConfig) { - this.adapterConfig = adapterConfig; - return this; - } - - public NssmfManager build() { - return this.nssmfManger.setRestUtil(restUtil).setAdapterConfig(adapterConfig).setRepository(repository) - .setActionType(actionType).setServiceInfo(serviceInfo); - } -} diff --git a/src/main/java/org/onap/so/adapters/nssmf/manager/impl/BaseNssmfManager.java b/src/main/java/org/onap/so/adapters/nssmf/manager/impl/BaseNssmfManager.java deleted file mode 100644 index 0456c90..0000000 --- a/src/main/java/org/onap/so/adapters/nssmf/manager/impl/BaseNssmfManager.java +++ /dev/null @@ -1,282 +0,0 @@ -/*- - * ============LICENSE_START======================================================= - * ONAP - SO - * ================================================================================ - # Copyright (c) 2020, CMCC Technologies Co., Ltd. - # - # Licensed under the Apache License, Version 2.0 (the "License") - # you may not use this file except in compliance with the License. - # You may obtain a copy of the License at - # - # http://www.apache.org/licenses/LICENSE-2.0 - # - # Unless required by applicable law or agreed to in writing, software - # distributed under the License is distributed on an "AS IS" BASIS, - # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - # See the License for the specific language governing permissions and - # limitations under the License. - * ============LICENSE_END========================================================= - */ - -package org.onap.so.adapters.nssmf.manager.impl; - -import org.onap.so.adapters.nssmf.config.NssmfAdapterConfig; -import org.onap.so.adapters.nssmf.consts.NssmfAdapterConsts; -import org.onap.so.adapters.nssmf.entity.NssmfUrlInfo; -import org.onap.so.adapters.nssmf.enums.*; -import org.onap.so.adapters.nssmf.exceptions.ApplicationException; -import org.onap.so.adapters.nssmf.entity.RestResponse; -import org.onap.so.adapters.nssmf.manager.NssmfManager; -import org.onap.so.adapters.nssmf.util.RestUtil; -import org.onap.so.beans.nsmf.*; -import org.onap.so.db.request.beans.ResourceOperationStatus; -import org.onap.so.db.request.data.repository.ResourceOperationStatusRepository; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.data.domain.Example; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.Optional; -import static org.onap.so.adapters.nssmf.util.NssmfAdapterUtil.marshal; - -public abstract class BaseNssmfManager implements NssmfManager { - - private static final Logger logger = LoggerFactory.getLogger(BaseNssmfManager.class); - - protected RestUtil restUtil; - - protected ResourceOperationStatusRepository repository; - - protected NssmfAdapterConfig adapterConfig; - - protected ActionType actionType; - - protected EsrInfo esrInfo; - - protected String nssmfUrl; - - protected HttpMethod httpMethod; - - protected String initStatus; - - protected ServiceInfo serviceInfo; - - protected RestResponse restResponse; - - private ExecutorType executorType = ExecutorType.INTERNAL; - - private Map params = new HashMap<>(); // request params - - @Override - public RestResponse allocateNssi(NssmfAdapterNBIRequest nbiRequest) throws ApplicationException { - - this.params.clear(); - this.urlHandler(); - String requestBody = wrapAllocateReqBody(nbiRequest); - - this.restResponse = sendRequest(requestBody); - - this.afterRequest(); - - return restResponse; - } - - protected abstract String wrapAllocateReqBody(NssmfAdapterNBIRequest nbiRequest) throws ApplicationException; - - @Override - public RestResponse modifyNssi(NssmfAdapterNBIRequest modifyRequest) throws ApplicationException { - this.params.clear(); - this.urlHandler(); - String requestBody = wrapModifyReqBody(modifyRequest); - - this.restResponse = sendRequest(requestBody); - - this.afterRequest(); - - return restResponse; - } - - protected abstract String wrapModifyReqBody(NssmfAdapterNBIRequest nbiRequest) throws ApplicationException; - - @Override - public RestResponse deAllocateNssi(NssmfAdapterNBIRequest nbiRequest, String sliceId) throws ApplicationException { - this.params.clear(); - this.params.put("sliceProfileId", sliceId); - - this.urlHandler(); - - String reqBody = wrapDeAllocateReqBody(nbiRequest.getDeAllocateNssi()); - - this.restResponse = sendRequest(reqBody); - - this.afterRequest(); - - return restResponse; - } - - protected abstract String wrapDeAllocateReqBody(DeAllocateNssi deAllocateNssi) throws ApplicationException; - - protected abstract String wrapReqBody(Object object) throws ApplicationException; - - @Override - public RestResponse activateNssi(NssmfAdapterNBIRequest nbiRequest, String snssai) throws ApplicationException { - this.params.clear(); - this.params.put("snssai", snssai); - - this.urlHandler(); - - String reqBody = wrapActDeActReqBody(nbiRequest.getActDeActNssi()); - - this.restResponse = sendRequest(reqBody); - - this.afterRequest(); - - return restResponse; - } - - @Override - public RestResponse deActivateNssi(NssmfAdapterNBIRequest nbiRequest, String snssai) throws ApplicationException { - return activateNssi(nbiRequest, snssai); - } - - protected abstract String wrapActDeActReqBody(ActDeActNssi actDeActNssi) throws ApplicationException; - - @Override - public RestResponse queryJobStatus(NssmfAdapterNBIRequest jobReq, String jobId) throws ApplicationException { - this.params.clear(); - this.params.put("jobId", jobId); - if (jobReq.getResponseId() != null) { - this.params.put("responseId", jobReq.getResponseId()); - } - this.urlHandler(); - - /** - * find by jobId and nsiId jobId -> OperationId nsiId -> ServiceId serviceUuid -> resourceTemplateUUID - */ - ResourceOperationStatus status = - getOperationStatus(serviceInfo.getNsiId(), jobId, serviceInfo.getServiceUuid()); - - logger.info("ResourceOperationStatus = {}", status); - this.restResponse = doQueryJobStatus(status); - - afterQueryJobStatus(status); - return restResponse; - } - - protected abstract RestResponse doQueryJobStatus(ResourceOperationStatus status) throws ApplicationException; - - - protected abstract void afterQueryJobStatus(ResourceOperationStatus status); - - private ResourceOperationStatus getOperationStatus(String nsiId, String jobId, String serviceUuid) { - - logger.info("Query operations: nsiId = [{}], jobId = [{}], serviceUuid = [{}]", nsiId, jobId, serviceUuid); - - List resourceOperationStatuses = - repository.findByServiceIdAndOperationId(nsiId, jobId); - - logger.info("resourceOperationStatuses = {}", resourceOperationStatuses); - if (resourceOperationStatuses.size() == 0) { - return null; - } - return resourceOperationStatuses.get(0); - } - - @Override - public RestResponse queryNSSISelectionCapability(NssmfAdapterNBIRequest nbiRequest) throws ApplicationException { - SelectionType res = doQueryNSSISelectionCapability(); - HashMap hashMap = new HashMap<>(); - hashMap.put("selection", res.name()); - RestResponse restResponse = new RestResponse(); - restResponse.setStatus(200); - restResponse.setResponseContent(marshal(hashMap)); - return restResponse; - } - - protected abstract SelectionType doQueryNSSISelectionCapability(); - - @Override - public RestResponse querySubnetCapability(NssmfAdapterNBIRequest nbiRequest) throws ApplicationException { - this.params.clear(); - this.urlHandler(); - - return doQuerySubnetCapability(nbiRequest.getSubnetCapabilityQuery()); - } - - protected abstract RestResponse doQuerySubnetCapability(QuerySubnetCapability req) throws ApplicationException; - - /** - * send request to nssmf - * - * @param content request body - * @return response - * @throws ApplicationException - */ - protected abstract RestResponse sendRequest(String content) throws ApplicationException; - - /** - * handle the url before request to nssmf, include get the nssmf request url, replace the path variable - */ - private void urlHandler() { - NssmfUrlInfo nssmfUrlInfo = - NssmfAdapterConsts.getNssmfUrlInfo(this.executorType, this.esrInfo.getNetworkType(), actionType); - if (nssmfUrlInfo != null) { - this.nssmfUrl = nssmfUrlInfo.getUrl(); - this.httpMethod = nssmfUrlInfo.getHttpMethod(); - this.nssmfUrl = nssmfUrl.replaceAll("\\{apiVersion}", getApiVersion()); - this.params.forEach((k, v) -> this.nssmfUrl = this.nssmfUrl.replaceAll("\\{" + k + "}", v)); - } - } - - /** - * after request - */ - protected abstract void afterRequest() throws ApplicationException; - - protected abstract String getApiVersion(); - - public RestUtil getRestUtil() { - return restUtil; - } - - public BaseNssmfManager setEsrInfo(EsrInfo esrInfo) { - this.esrInfo = esrInfo; - return this; - } - - public BaseNssmfManager setExecutorType(ExecutorType executorType) { - this.executorType = executorType; - return this; - } - - public BaseNssmfManager setRestUtil(RestUtil restUtil) { - this.restUtil = restUtil; - return this; - } - - public BaseNssmfManager setActionType(ActionType actionType) { - this.actionType = actionType; - return this; - } - - public BaseNssmfManager setRepository(ResourceOperationStatusRepository repository) { - this.repository = repository; - return this; - } - - public BaseNssmfManager setServiceInfo(ServiceInfo serviceInfo) { - this.serviceInfo = serviceInfo; - return this; - } - - public BaseNssmfManager setInitStatus(String initStatus) { - this.initStatus = initStatus; - return this; - } - - public BaseNssmfManager setAdapterConfig(NssmfAdapterConfig adapterConfig) { - this.adapterConfig = adapterConfig; - return this; - } -} diff --git a/src/main/java/org/onap/so/adapters/nssmf/manager/impl/ExternalNssmfManager.java b/src/main/java/org/onap/so/adapters/nssmf/manager/impl/ExternalNssmfManager.java deleted file mode 100644 index 7c4bd50..0000000 --- a/src/main/java/org/onap/so/adapters/nssmf/manager/impl/ExternalNssmfManager.java +++ /dev/null @@ -1,243 +0,0 @@ -/*- - * ============LICENSE_START======================================================= - * ONAP - SO - * ================================================================================ - # Copyright (c) 2020, CMCC Technologies Co., Ltd. - # - # Licensed under the Apache License, Version 2.0 (the "License") - # you may not use this file except in compliance with the License. - # You may obtain a copy of the License at - # - # http://www.apache.org/licenses/LICENSE-2.0 - # - # Unless required by applicable law or agreed to in writing, software - # distributed under the License is distributed on an "AS IS" BASIS, - # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - # See the License for the specific language governing permissions and - # limitations under the License. - * ============LICENSE_END========================================================= - */ - -package org.onap.so.adapters.nssmf.manager.impl; - -import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.core.type.TypeReference; -import com.fasterxml.jackson.databind.ObjectMapper; -import org.apache.http.Header; -import org.apache.http.HttpStatus; -import org.apache.http.message.BasicHeader; -import org.onap.aai.domain.yang.ServiceInstance; -import org.onap.so.adapters.nssmf.entity.NssmfInfo; -import org.onap.so.adapters.nssmf.entity.RestResponse; -import org.onap.so.adapters.nssmf.enums.ActionType; -import org.onap.so.adapters.nssmf.enums.JobStatus; -import org.onap.so.adapters.nssmf.exceptions.ApplicationException; -import org.onap.so.adapters.nssmf.util.NssmfAdapterUtil; -import org.onap.so.beans.nsmf.*; -import org.onap.so.db.request.beans.ResourceOperationStatus; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import java.io.InputStream; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import static java.lang.String.valueOf; -import static org.onap.so.adapters.nssmf.enums.JobStatus.*; -import static org.onap.so.adapters.nssmf.util.NssmfAdapterUtil.StatusDesc.QUERY_JOB_STATUS_FAILED; -import static org.onap.so.adapters.nssmf.util.NssmfAdapterUtil.StatusDesc.QUERY_JOB_STATUS_SUCCESS; -import static org.onap.so.adapters.nssmf.util.NssmfAdapterUtil.marshal; -import static org.onap.so.adapters.nssmf.util.NssmfAdapterUtil.unMarshal; - -public abstract class ExternalNssmfManager extends BaseNssmfManager { - - private static final Logger logger = LoggerFactory.getLogger(ExternalNssmfManager.class); - - @Override - protected String wrapAllocateReqBody(NssmfAdapterNBIRequest nbiRequest) throws ApplicationException { - return doWrapExtAllocateReqBody(nbiRequest); - } - - protected abstract String doWrapExtAllocateReqBody(NssmfAdapterNBIRequest nbiRequest) throws ApplicationException; - - @Override - protected String wrapModifyReqBody(NssmfAdapterNBIRequest nbiRequest) throws ApplicationException { - return doWrapModifyReqBody(nbiRequest); - } - - protected abstract String doWrapModifyReqBody(NssmfAdapterNBIRequest nbiRequest) throws ApplicationException; - - @Override - protected String wrapDeAllocateReqBody(DeAllocateNssi deAllocateNssi) throws ApplicationException { - return doWrapDeAllocateReqBody(deAllocateNssi); - } - - protected abstract String doWrapDeAllocateReqBody(DeAllocateNssi deAllocateNssi) throws ApplicationException; - - @Override - protected void afterQueryJobStatus(ResourceOperationStatus status) { - logger.info("afterQueryJobStatus = " + status); - if (Integer.parseInt(status.getProgress()) == 100) { - logger.info("after query finished = " + status); - ActionType jobOperType = ActionType.valueOf(status.getOperType()); - - if (ActionType.ALLOCATE.equals(jobOperType)) { - ServiceInstance nssiInstance = restUtil.getServiceInstance(serviceInfo); - if (nssiInstance == null) { - nssiInstance = new ServiceInstance(); - } - - nssiInstance.setServiceInstanceId(serviceInfo.getNssiId()); - nssiInstance.setServiceInstanceName(serviceInfo.getNssiName()); - nssiInstance.setServiceType(serviceInfo.getSST()); - - nssiInstance.setOrchestrationStatus(initStatus); - nssiInstance.setModelInvariantId(serviceInfo.getServiceInvariantUuid()); - nssiInstance.setModelVersionId(serviceInfo.getServiceUuid()); - nssiInstance.setServiceInstanceLocationId(serviceInfo.getPLMNIdList()); - nssiInstance.setEnvironmentContext(esrInfo.getNetworkType().getNetworkType()); - nssiInstance.setServiceRole("nssi"); - - restUtil.createServiceInstance(nssiInstance, serviceInfo); - } else if (ActionType.DEALLOCATE.equals(jobOperType)) { - // TODO - restUtil.deleteServiceInstance(serviceInfo); - } - } - } - - @Override - protected String wrapActDeActReqBody(ActDeActNssi actDeActNssi) throws ApplicationException { - return marshal(actDeActNssi); - } - - @Override - protected RestResponse doQueryJobStatus(ResourceOperationStatus status) throws ApplicationException { - return doResponseStatus(status); - } - - private RestResponse doResponseStatus(ResourceOperationStatus status) throws ApplicationException { - RestResponse restResponse = sendRequest(null); - JobStatusResponse jobStatusResponse = unMarshal(restResponse.getResponseContent(), JobStatusResponse.class); - - ResponseDescriptor rspDesc = jobStatusResponse.getResponseDescriptor(); - - logger.info("status = {}", status); - rspDesc.setNssiId(status.getResourceInstanceID()); - - jobStatusResponse.setResponseDescriptor(rspDesc); - restResponse.setResponseContent(marshal(jobStatusResponse)); - updateRequestDbJobStatus(rspDesc, status, restResponse); - return restResponse; - } - - @Override - protected String wrapReqBody(Object object) throws ApplicationException { - return marshal(object); - } - - @Override - protected RestResponse sendRequest(String content) throws ApplicationException { - return sendExternalRequest(content); - } - - @Override - protected String getApiVersion() { - return "v1"; - } - - - // external - protected RestResponse sendExternalRequest(String content) throws ApplicationException { - NssmfInfo nssmfInfo = restUtil.getNssmfHost(esrInfo); - Header header = new BasicHeader("X-Auth-Token", restUtil.getToken(nssmfInfo)); - String nssmfUrl = nssmfInfo.getUrl() + this.nssmfUrl; - return restUtil.send(nssmfUrl, this.httpMethod, content, header); - } - - protected void updateRequestDbJobStatus(ResponseDescriptor rspDesc, ResourceOperationStatus status, - RestResponse rsp) throws ApplicationException { - status.setProgress(Integer.toString(rspDesc.getProgress())); - switch (fromString(rspDesc.getStatus())) { - case STARTED: - updateDbStatus(status, rsp.getStatus(), STARTED, QUERY_JOB_STATUS_SUCCESS); - break; - case PROCESSING: - updateDbStatus(status, rsp.getStatus(), PROCESSING, QUERY_JOB_STATUS_SUCCESS); - break; - case FINISHED: - if (rspDesc.getProgress() == 100) { - updateDbStatus(status, rsp.getStatus(), FINISHED, QUERY_JOB_STATUS_SUCCESS); - } - break; - case ERROR: - updateDbStatus(status, rsp.getStatus(), ERROR, QUERY_JOB_STATUS_FAILED); - throw new ApplicationException(500, QUERY_JOB_STATUS_FAILED); - default: - throw new ApplicationException(500, QUERY_JOB_STATUS_FAILED); - } - } - - protected void updateDbStatus(ResourceOperationStatus status, int rspStatus, JobStatus jobStatus, - String description) { - status.setErrorCode(valueOf(rspStatus)); - status.setStatus(jobStatus.toString()); - status.setStatusDescription(description); - repository.save(status); - } - - @Override - protected RestResponse doQuerySubnetCapability(QuerySubnetCapability req) throws ApplicationException { - - ObjectMapper oMapper = new ObjectMapper(); - InputStream inputStream = TypeReference.class.getResourceAsStream("/subnetCapability.json"); - Map subnetCapability = new HashMap<>(); - try { - subnetCapability = oMapper.readValue(inputStream, Map.class); - } catch (Exception e) { - logger.debug("Exception while reading subnet capability value from json", e); - } - Map responseMap = new HashMap<>(); - List subnetTypes = req.getSubnetTypes(); - for (String value : subnetTypes) { - if (subnetCapability.containsKey(value)) { - responseMap.put(value, subnetCapability.get(value)); - } - } - String response = null; - try { - response = oMapper.writeValueAsString(responseMap); - } catch (JsonProcessingException e) { - logger.debug("Exception while converting subnet capability object to String {}", e.getMessage()); - } - - RestResponse rsp = new RestResponse(); - rsp.setStatus(HttpStatus.SC_OK); - rsp.setResponseContent(response); - return rsp; - } - - /** - * after request, if response code is 2XX, continue handle, else return - */ - @Override - protected void afterRequest() throws ApplicationException { - if (valueOf(restResponse.getStatus()).startsWith("2")) { - doAfterRequest(); - } - } - - - protected void doAfterRequest() throws ApplicationException { - // - NssiResponse response = unMarshal(restResponse.getResponseContent(), NssiResponse.class); - ResourceOperationStatus status = - new ResourceOperationStatus(serviceInfo.getNsiId(), response.getJobId(), serviceInfo.getServiceUuid()); - status.setResourceInstanceID(response.getNssiId()); - status.setOperType(actionType.toString()); - status.setProgress("0"); - - response.setStatus(STARTED.toString()); - restResponse.setResponseContent(marshal(response)); - updateDbStatus(status, restResponse.getStatus(), STARTED, NssmfAdapterUtil.getStatusDesc(actionType)); - } -} diff --git a/src/main/java/org/onap/so/adapters/nssmf/manager/impl/InternalNssmfManager.java b/src/main/java/org/onap/so/adapters/nssmf/manager/impl/InternalNssmfManager.java deleted file mode 100644 index 64ab199..0000000 --- a/src/main/java/org/onap/so/adapters/nssmf/manager/impl/InternalNssmfManager.java +++ /dev/null @@ -1,130 +0,0 @@ -/*- - * ============LICENSE_START======================================================= - * ONAP - SO - * ================================================================================ - # Copyright (c) 2020, CMCC Technologies Co., Ltd. - # - # Licensed under the Apache License, Version 2.0 (the "License") - # you may not use this file except in compliance with the License. - # You may obtain a copy of the License at - # - # http://www.apache.org/licenses/LICENSE-2.0 - # - # Unless required by applicable law or agreed to in writing, software - # distributed under the License is distributed on an "AS IS" BASIS, - # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - # See the License for the specific language governing permissions and - # limitations under the License. - * ============LICENSE_END========================================================= - */ - -package org.onap.so.adapters.nssmf.manager.impl; - -import org.apache.http.Header; -import org.apache.http.message.BasicHeader; -import org.onap.so.adapters.nssmf.consts.NssmfAdapterConsts; -import org.onap.so.adapters.nssmf.entity.RestResponse; -import org.onap.so.adapters.nssmf.enums.SelectionType; -import org.onap.so.adapters.nssmf.exceptions.ApplicationException; -import org.onap.so.beans.nsmf.*; -import org.onap.so.db.request.beans.ResourceOperationStatus; -import static org.onap.so.adapters.nssmf.enums.JobStatus.PROCESSING; -import static org.onap.so.adapters.nssmf.util.NssmfAdapterUtil.marshal; - -public abstract class InternalNssmfManager extends BaseNssmfManager { - - @Override - protected String wrapAllocateReqBody(NssmfAdapterNBIRequest nbiRequest) throws ApplicationException { - return doWrapAllocateReqBody(nbiRequest); - } - - protected abstract String doWrapAllocateReqBody(NssmfAdapterNBIRequest nbiRequest) throws ApplicationException; - - @Override - protected String wrapReqBody(Object object) throws ApplicationException { - NssmfRequest nssmfRequest = new NssmfRequest(serviceInfo, esrInfo.getNetworkType(), object); - return marshal(nssmfRequest); - } - - - @Override - protected String wrapActDeActReqBody(ActDeActNssi actDeActNssi) throws ApplicationException { - - return wrapReqBody(actDeActNssi); - } - - - @Override - protected String wrapDeAllocateReqBody(DeAllocateNssi deAllocateNssi) throws ApplicationException { - return wrapReqBody(deAllocateNssi); - } - - - @Override - protected RestResponse doQueryJobStatus(ResourceOperationStatus status) throws ApplicationException { - return responseDBStatus(status); - } - - private RestResponse responseDBStatus(ResourceOperationStatus status) throws ApplicationException { - JobStatusResponse statusResponse = new JobStatusResponse(); - ResponseDescriptor descriptor = new ResponseDescriptor(); - if (status == null) { - descriptor.setProgress(0); - descriptor.setStatus(PROCESSING.name()); - descriptor.setStatusDescription("Initiating Nssi Instance"); - } else { - descriptor.setStatus(status.getStatus()); - descriptor.setStatusDescription(status.getStatusDescription()); - descriptor.setProgress(Integer.parseInt(status.getProgress())); - descriptor.setNssiId(status.getResourceInstanceID()); - } - statusResponse.setResponseDescriptor(descriptor); - return restUtil.createResponse(200, marshal(statusResponse)); - } - - @Override - protected RestResponse sendRequest(String content) { - return sendInternalRequest(content); - } - - @Override - protected void afterRequest() { - // - } - - @Override - protected void afterQueryJobStatus(ResourceOperationStatus status) { - // internal - } - - // internal - private RestResponse sendInternalRequest(String content) { - Header header = new BasicHeader("Authorization", adapterConfig.getInfraAuth()); - this.nssmfUrl = adapterConfig.getInfraEndpoint() + this.nssmfUrl; - return restUtil.send(this.nssmfUrl, this.httpMethod, content, header); - } - - @Override - protected String getApiVersion() { - return NssmfAdapterConsts.CURRENT_INTERNAL_NSSMF_API_VERSION; - } - - - @Override - protected SelectionType doQueryNSSISelectionCapability() { - return SelectionType.NSSMF; - } - - @Override - protected String wrapModifyReqBody(NssmfAdapterNBIRequest nbiRequest) throws ApplicationException { - return doWrapModifyReqBody(nbiRequest); - } - - protected abstract String doWrapModifyReqBody(NssmfAdapterNBIRequest nbiRequest) throws ApplicationException; - - @Override - protected RestResponse doQuerySubnetCapability(QuerySubnetCapability req) throws ApplicationException { - // handler - return sendRequest(marshal(req)); - } -} diff --git a/src/main/java/org/onap/so/adapters/nssmf/manager/impl/external/ExternalAnNssmfManager.java b/src/main/java/org/onap/so/adapters/nssmf/manager/impl/external/ExternalAnNssmfManager.java deleted file mode 100644 index 0f4352d..0000000 --- a/src/main/java/org/onap/so/adapters/nssmf/manager/impl/external/ExternalAnNssmfManager.java +++ /dev/null @@ -1,171 +0,0 @@ -/*- - * ============LICENSE_START======================================================= - * ONAP - SO - * ================================================================================ - # Copyright (c) 2020, CMCC Technologies Co., Ltd. - # - # Licensed under the Apache License, Version 2.0 (the "License") - # you may not use this file except in compliance with the License. - # You may obtain a copy of the License at - # - # http://www.apache.org/licenses/LICENSE-2.0 - # - # Unless required by applicable law or agreed to in writing, software - # distributed under the License is distributed on an "AS IS" BASIS, - # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - # See the License for the specific language governing permissions and - # limitations under the License. - * ============LICENSE_END========================================================= - */ - -package org.onap.so.adapters.nssmf.manager.impl.external; - -import org.onap.so.adapters.nssmf.entity.RestResponse; -import org.onap.so.adapters.nssmf.enums.ActionType; -import org.onap.so.adapters.nssmf.enums.JobStatus; -import org.onap.so.adapters.nssmf.enums.SelectionType; -import org.onap.so.adapters.nssmf.exceptions.ApplicationException; -import org.onap.so.adapters.nssmf.manager.impl.ExternalNssmfManager; -import org.onap.so.adapters.nssmf.util.NssmfAdapterUtil; -import org.onap.so.beans.nsmf.AnSliceProfile; -import org.onap.so.beans.nsmf.DeAllocateNssi; -import org.onap.so.beans.nsmf.NssiResponse; -import org.onap.so.beans.nsmf.NssmfAdapterNBIRequest; -import org.onap.so.beans.nsmf.ResponseDescriptor; -import org.onap.so.beans.nsmf.JobStatusResponse; -import org.onap.so.db.request.beans.ResourceOperationStatus; -import java.util.HashMap; -import java.util.Map; -import java.util.UUID; -import static org.onap.so.adapters.nssmf.util.NssmfAdapterUtil.marshal; -import static org.onap.so.adapters.nssmf.util.NssmfAdapterUtil.unMarshal; - - -public class ExternalAnNssmfManager extends ExternalNssmfManager { - - private Map bodyParams = new HashMap<>(); // request body params - - @Override - protected String doWrapExtAllocateReqBody(NssmfAdapterNBIRequest nbiRequest) throws ApplicationException { - Map request = new HashMap<>(); - - AnSliceProfile anSliceProfile = nbiRequest.getAllocateAnNssi().getSliceProfile(); - - RanSliceProfile ranSliceProfile = new RanSliceProfile(); - ranSliceProfile.setSliceProfileId(anSliceProfile.getSliceProfileId()); - ranSliceProfile.setSNSSAIList(anSliceProfile.getSNSSAIList()); - ranSliceProfile.setPLMNIdList(anSliceProfile.getPLMNIdList()); - ranSliceProfile.setPerfReq(anSliceProfile.getPerfReq()); - ranSliceProfile.setMaxNumberofUEs(anSliceProfile.getMaxNumberOfUEs()); - ranSliceProfile.setCoverageAreaTAList(anSliceProfile.getCoverageAreaTAList()); - ranSliceProfile.setLatency(anSliceProfile.getLatency()); - ranSliceProfile.setUEMobilityLevel(anSliceProfile.getUeMobilityLevel()); - ranSliceProfile.setResourceSharingLevel(anSliceProfile.getResourceSharingLevel()); - - request.put("attributeListIn", ranSliceProfile); - return marshal(request); - } - - @Override - protected void doAfterRequest() throws ApplicationException { - if (ActionType.ALLOCATE.equals(actionType) || ActionType.DEALLOCATE.equals(actionType)) { - String nssiId; - if (ActionType.ALLOCATE.equals(actionType)) { - @SuppressWarnings("unchecked") - Map response = unMarshal(restResponse.getResponseContent(), Map.class); - nssiId = response.get("href"); - } else { - nssiId = this.bodyParams.get("nssiId"); - } - - NssiResponse resp = new NssiResponse(); - resp.setJobId(UUID.randomUUID().toString()); - resp.setNssiId(nssiId); - - RestResponse returnRsp = new RestResponse(); - - returnRsp.setStatus(202); - returnRsp.setResponseContent(marshal(resp)); - restResponse = returnRsp; - - ResourceOperationStatus status = - new ResourceOperationStatus(serviceInfo.getNsiId(), resp.getJobId(), serviceInfo.getServiceUuid()); - status.setResourceInstanceID(nssiId); - status.setOperType(actionType.toString()); - - updateDbStatus(status, restResponse.getStatus(), JobStatus.STARTED, - NssmfAdapterUtil.getStatusDesc(actionType)); - } - // todo - } - - @Override - protected String doWrapModifyReqBody(NssmfAdapterNBIRequest nbiRequest) throws ApplicationException { - // TODO - return null; - } - - @Override - protected String doWrapDeAllocateReqBody(DeAllocateNssi deAllocateNssi) throws ApplicationException { - this.bodyParams.clear(); - this.bodyParams.put("nssiId", deAllocateNssi.getNssiId()); - - Map request = new HashMap<>(); - request.put("nSSId", deAllocateNssi.getNssiId()); - return marshal(request); - } - - - @Override - public RestResponse modifyNssi(NssmfAdapterNBIRequest modifyRequest) throws ApplicationException { - // TODO - return null; - } - - @Override - public RestResponse activateNssi(NssmfAdapterNBIRequest nbiRequest, String snssai) throws ApplicationException { - NssiResponse resp = new NssiResponse(); - String nssiId = nbiRequest.getActDeActNssi().getNssiId(); - resp.setJobId(UUID.randomUUID().toString()); - resp.setNssiId(nssiId); - - RestResponse returnRsp = new RestResponse(); - - returnRsp.setStatus(202); - returnRsp.setResponseContent(marshal(resp)); - - ResourceOperationStatus status = - new ResourceOperationStatus(serviceInfo.getNsiId(), resp.getJobId(), serviceInfo.getServiceUuid()); - status.setResourceInstanceID(nssiId); - status.setOperType(actionType.toString()); - - updateDbStatus(status, returnRsp.getStatus(), JobStatus.FINISHED, NssmfAdapterUtil.getStatusDesc(actionType)); - return returnRsp; - } - - @Override - protected RestResponse doQueryJobStatus(ResourceOperationStatus status) throws ApplicationException { - ResponseDescriptor responseDescriptor = new ResponseDescriptor(); - responseDescriptor.setStatus(JobStatus.FINISHED.toString()); - responseDescriptor.setProgress(100); - responseDescriptor.setStatusDescription("Finished"); - - JobStatusResponse jobStatusResponse = new JobStatusResponse(); - jobStatusResponse.setResponseDescriptor(responseDescriptor); - - RestResponse restResponse = new RestResponse(); - restResponse.setStatus(200); - restResponse.setResponseContent(marshal(jobStatusResponse)); - - updateRequestDbJobStatus(responseDescriptor, status, restResponse); - - status.setProgress(Integer.toString(responseDescriptor.getProgress())); - - return restResponse; - } - - @Override - protected SelectionType doQueryNSSISelectionCapability() { - return SelectionType.NSSMF; - } -} diff --git a/src/main/java/org/onap/so/adapters/nssmf/manager/impl/external/ExternalCnNssmfManager.java b/src/main/java/org/onap/so/adapters/nssmf/manager/impl/external/ExternalCnNssmfManager.java deleted file mode 100644 index fb76adc..0000000 --- a/src/main/java/org/onap/so/adapters/nssmf/manager/impl/external/ExternalCnNssmfManager.java +++ /dev/null @@ -1,53 +0,0 @@ -/*- - * ============LICENSE_START======================================================= - * ONAP - SO - * ================================================================================ - # Copyright (c) 2020, CMCC Technologies Co., Ltd. - # - # Licensed under the Apache License, Version 2.0 (the "License") - # you may not use this file except in compliance with the License. - # You may obtain a copy of the License at - # - # http://www.apache.org/licenses/LICENSE-2.0 - # - # Unless required by applicable law or agreed to in writing, software - # distributed under the License is distributed on an "AS IS" BASIS, - # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - # See the License for the specific language governing permissions and - # limitations under the License. - * ============LICENSE_END========================================================= - */ - -package org.onap.so.adapters.nssmf.manager.impl.external; - -import org.onap.so.adapters.nssmf.enums.SelectionType; -import org.onap.so.adapters.nssmf.exceptions.ApplicationException; -import org.onap.so.adapters.nssmf.manager.impl.ExternalNssmfManager; -import org.onap.so.beans.nsmf.DeAllocateNssi; -import org.onap.so.beans.nsmf.NssmfAdapterNBIRequest; -import static org.onap.so.adapters.nssmf.util.NssmfAdapterUtil.marshal; - -public class ExternalCnNssmfManager extends ExternalNssmfManager { - - @Override - protected String doWrapExtAllocateReqBody(NssmfAdapterNBIRequest nbiRequest) throws ApplicationException { - return marshal(nbiRequest.getAllocateCnNssi()); - } - - @Override - protected String doWrapModifyReqBody(NssmfAdapterNBIRequest nbiRequest) throws ApplicationException { - return marshal(nbiRequest.getAllocateCnNssi()); - } - - @Override - protected String doWrapDeAllocateReqBody(DeAllocateNssi deAllocateNssi) throws ApplicationException { - return marshal(deAllocateNssi); - } - - @Override - protected SelectionType doQueryNSSISelectionCapability() { - - return SelectionType.NSMF; - } - -} diff --git a/src/main/java/org/onap/so/adapters/nssmf/manager/impl/external/RanSliceProfile.java b/src/main/java/org/onap/so/adapters/nssmf/manager/impl/external/RanSliceProfile.java deleted file mode 100644 index 7035456..0000000 --- a/src/main/java/org/onap/so/adapters/nssmf/manager/impl/external/RanSliceProfile.java +++ /dev/null @@ -1,70 +0,0 @@ -/*- - * ============LICENSE_START======================================================= - * ONAP - SO - * ================================================================================ - * Copyright (C) 2020 Huawei Technologies Co., Ltd. All rights reserved. - * ================================================================================ - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * ============LICENSE_END========================================================= - */ - -package org.onap.so.adapters.nssmf.manager.impl.external; - -import com.fasterxml.jackson.annotation.JsonInclude; -import com.fasterxml.jackson.annotation.JsonProperty; -import lombok.Data; -import java.io.Serializable; -import java.util.List; -import org.onap.so.beans.nsmf.PerfReq; -import org.onap.so.beans.nsmf.UeMobilityLevel; -import org.onap.so.beans.nsmf.ResourceSharingLevel; - -@JsonInclude(JsonInclude.Include.NON_NULL) -@Data -public class RanSliceProfile implements Serializable { - /* - * Reference 3GPP TS 28.541 V16.5.0, Section 6.3.4. - */ - - private static final long serialVersionUID = 172447042469370448L; - - @JsonProperty(value = "sliceProfileId", required = true) - private String sliceProfileId; - - @JsonProperty(value = "sNSSAIList", required = true) - private List sNSSAIList; - - @JsonProperty(value = "pLMNIdList", required = true) - private List pLMNIdList; - - @JsonProperty(value = "perfReq", required = true) - private PerfReq perfReq; - - @JsonInclude(JsonInclude.Include.NON_DEFAULT) - @JsonProperty(value = "maxNumberofUEs") - private long maxNumberofUEs; - - @JsonProperty(value = "coverageAreaTAList") - private List coverageAreaTAList; - - @JsonInclude(JsonInclude.Include.NON_DEFAULT) - @JsonProperty(value = "latency") - private int latency; - - @JsonProperty(value = "uEMobilityLevel") - private UeMobilityLevel uEMobilityLevel; - - @JsonProperty(value = "resourceSharingLevel") - private ResourceSharingLevel resourceSharingLevel; - -} diff --git a/src/main/java/org/onap/so/adapters/nssmf/manager/impl/internal/InternalAnNssmfManager.java b/src/main/java/org/onap/so/adapters/nssmf/manager/impl/internal/InternalAnNssmfManager.java deleted file mode 100644 index dc65283..0000000 --- a/src/main/java/org/onap/so/adapters/nssmf/manager/impl/internal/InternalAnNssmfManager.java +++ /dev/null @@ -1,54 +0,0 @@ -/*- - * ============LICENSE_START======================================================= - * ONAP - SO - * ================================================================================ - # Copyright (c) 2020, CMCC Technologies Co., Ltd. - # - # Licensed under the Apache License, Version 2.0 (the "License") - # you may not use this file except in compliance with the License. - # You may obtain a copy of the License at - # - # http://www.apache.org/licenses/LICENSE-2.0 - # - # Unless required by applicable law or agreed to in writing, software - # distributed under the License is distributed on an "AS IS" BASIS, - # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - # See the License for the specific language governing permissions and - # limitations under the License. - * ============LICENSE_END========================================================= - */ - -package org.onap.so.adapters.nssmf.manager.impl.internal; - -import org.onap.so.adapters.nssmf.exceptions.ApplicationException; -import org.onap.so.adapters.nssmf.manager.impl.InternalNssmfManager; -import org.onap.so.beans.nsmf.*; -import java.util.HashMap; -import java.util.Map; -import static org.onap.so.adapters.nssmf.util.NssmfAdapterUtil.marshal; - - -public class InternalAnNssmfManager extends InternalNssmfManager { - - @Override - protected String doWrapAllocateReqBody(NssmfAdapterNBIRequest nbiRequest) throws ApplicationException { - NssmfRequest request = - new NssmfRequest(serviceInfo, nbiRequest.getEsrInfo().getNetworkType(), nbiRequest.getAllocateAnNssi()); - request.setName(nbiRequest.getAllocateAnNssi().getNssiName()); - return marshal(request); - } - - @Override - protected String doWrapModifyReqBody(NssmfAdapterNBIRequest nbiRequest) throws ApplicationException { - AllocateAnNssi allocateAnNssi = nbiRequest.getAllocateAnNssi(); - AnSliceProfile sliceProfile = allocateAnNssi.getSliceProfile(); - Map additional = new HashMap<>(); - additional.put("modifyAction", "allocate"); - additional.put("snssaiList", sliceProfile.getSNSSAIList()); - additional.put("sliceProfileId", sliceProfile.getSliceProfileId()); - additional.put("nsiInfo", allocateAnNssi.getNsiInfo()); - additional.put("scriptName", allocateAnNssi.getScriptName()); - NssmfRequest request = new NssmfRequest(serviceInfo, esrInfo.getNetworkType(), additional); - return marshal(request); - } -} diff --git a/src/main/java/org/onap/so/adapters/nssmf/manager/impl/internal/InternalCnNssmfManager.java b/src/main/java/org/onap/so/adapters/nssmf/manager/impl/internal/InternalCnNssmfManager.java deleted file mode 100644 index 4a93b30..0000000 --- a/src/main/java/org/onap/so/adapters/nssmf/manager/impl/internal/InternalCnNssmfManager.java +++ /dev/null @@ -1,56 +0,0 @@ -/*- - * ============LICENSE_START======================================================= - * ONAP - SO - * ================================================================================ - # Copyright (c) 2020, CMCC Technologies Co., Ltd. - # - # Licensed under the Apache License, Version 2.0 (the "License") - # you may not use this file except in compliance with the License. - # You may obtain a copy of the License at - # - # http://www.apache.org/licenses/LICENSE-2.0 - # - # Unless required by applicable law or agreed to in writing, software - # distributed under the License is distributed on an "AS IS" BASIS, - # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - # See the License for the specific language governing permissions and - # limitations under the License. - * ============LICENSE_END========================================================= - */ - -package org.onap.so.adapters.nssmf.manager.impl.internal; - -import org.onap.so.adapters.nssmf.exceptions.ApplicationException; -import org.onap.so.adapters.nssmf.manager.impl.InternalNssmfManager; -import org.onap.so.beans.nsmf.*; -import java.util.HashMap; -import java.util.Map; -import static org.onap.so.adapters.nssmf.util.NssmfAdapterUtil.marshal; - -public class InternalCnNssmfManager extends InternalNssmfManager { - - @Override - protected String doWrapAllocateReqBody(NssmfAdapterNBIRequest nbiRequest) throws ApplicationException { - - NssmfRequest request = - new NssmfRequest(serviceInfo, nbiRequest.getEsrInfo().getNetworkType(), nbiRequest.getAllocateCnNssi()); - request.setName(nbiRequest.getAllocateCnNssi().getNssiName()); - return marshal(request); - } - - @Override - protected String doWrapModifyReqBody(NssmfAdapterNBIRequest nbiRequest) throws ApplicationException { - AllocateCnNssi allocateCnNssi = nbiRequest.getAllocateCnNssi(); - CnSliceProfile cnSliceProfile = allocateCnNssi.getSliceProfile(); - Map additional = new HashMap<>(); - additional.put("modifyAction", "allocate"); - additional.put("nsiInfo", allocateCnNssi.getNsiInfo()); - additional.put("scriptName", allocateCnNssi.getScriptName()); - additional.put("snssaiList", cnSliceProfile.getSnssaiList()); - additional.put("sliceProfileId", cnSliceProfile.getSliceProfileId()); - - NssmfRequest request = new NssmfRequest(serviceInfo, esrInfo.getNetworkType(), additional); - return marshal(request); - } - -} diff --git a/src/main/java/org/onap/so/adapters/nssmf/manager/impl/internal/InternalTnNssmfManager.java b/src/main/java/org/onap/so/adapters/nssmf/manager/impl/internal/InternalTnNssmfManager.java deleted file mode 100644 index 1b4a9e9..0000000 --- a/src/main/java/org/onap/so/adapters/nssmf/manager/impl/internal/InternalTnNssmfManager.java +++ /dev/null @@ -1,42 +0,0 @@ -/*- - * ============LICENSE_START======================================================= - * ONAP - SO - * ================================================================================ - # Copyright (c) 2020, CMCC Technologies Co., Ltd. - # - # Licensed under the Apache License, Version 2.0 (the "License") - # you may not use this file except in compliance with the License. - # You may obtain a copy of the License at - # - # http://www.apache.org/licenses/LICENSE-2.0 - # - # Unless required by applicable law or agreed to in writing, software - # distributed under the License is distributed on an "AS IS" BASIS, - # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - # See the License for the specific language governing permissions and - # limitations under the License. - * ============LICENSE_END========================================================= - */ - -package org.onap.so.adapters.nssmf.manager.impl.internal; - -import org.onap.so.adapters.nssmf.exceptions.ApplicationException; -import org.onap.so.adapters.nssmf.manager.impl.InternalNssmfManager; -import org.onap.so.beans.nsmf.*; -import static org.onap.so.adapters.nssmf.util.NssmfAdapterUtil.marshal; - -public class InternalTnNssmfManager extends InternalNssmfManager { - - @Override - protected String doWrapAllocateReqBody(NssmfAdapterNBIRequest nbiRequest) throws ApplicationException { - - return marshal(new NssmfRequest(serviceInfo, nbiRequest.getEsrInfo().getNetworkType(), - nbiRequest.getAllocateTnNssi())); - } - - @Override - protected String doWrapModifyReqBody(NssmfAdapterNBIRequest nbiRequest) throws ApplicationException { - // TODO - return doWrapAllocateReqBody(nbiRequest); - } -} diff --git a/src/main/java/org/onap/so/adapters/nssmf/service/NssmfManagerService.java b/src/main/java/org/onap/so/adapters/nssmf/service/NssmfManagerService.java deleted file mode 100644 index 92fe557..0000000 --- a/src/main/java/org/onap/so/adapters/nssmf/service/NssmfManagerService.java +++ /dev/null @@ -1,45 +0,0 @@ -/*- - * ============LICENSE_START======================================================= - * ONAP - SO - * ================================================================================ - # Copyright (c) 2020, CMCC Technologies Co., Ltd. - # - # Licensed under the Apache License, Version 2.0 (the "License") - # you may not use this file except in compliance with the License. - # You may obtain a copy of the License at - # - # http://www.apache.org/licenses/LICENSE-2.0 - # - # Unless required by applicable law or agreed to in writing, software - # distributed under the License is distributed on an "AS IS" BASIS, - # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - # See the License for the specific language governing permissions and - # limitations under the License. - * ============LICENSE_END========================================================= - */ - -package org.onap.so.adapters.nssmf.service; - -import org.onap.so.adapters.nssmf.annotation.ServiceLogger; -import org.onap.so.beans.nsmf.*; -import org.springframework.http.ResponseEntity; -import org.springframework.stereotype.Service; - -@Service -@ServiceLogger -public interface NssmfManagerService { - ResponseEntity allocateNssi(NssmfAdapterNBIRequest allocateRequest); - - ResponseEntity deAllocateNssi(NssmfAdapterNBIRequest allocateRequest, String sliceProfileId); - - ResponseEntity activateNssi(NssmfAdapterNBIRequest deActRequest, String snssai); - - ResponseEntity deActivateNssi(NssmfAdapterNBIRequest nssiDeActivate, String snssai); - - ResponseEntity queryJobStatus(NssmfAdapterNBIRequest jobReq, String jobId); - - ResponseEntity queryNSSISelectionCapability(NssmfAdapterNBIRequest nbiRequest); - - ResponseEntity querySubnetCapability(NssmfAdapterNBIRequest nbiRequest); - -} diff --git a/src/main/java/org/onap/so/adapters/nssmf/service/impl/NssmfManagerServiceImpl.java b/src/main/java/org/onap/so/adapters/nssmf/service/impl/NssmfManagerServiceImpl.java deleted file mode 100644 index 5b53856..0000000 --- a/src/main/java/org/onap/so/adapters/nssmf/service/impl/NssmfManagerServiceImpl.java +++ /dev/null @@ -1,143 +0,0 @@ -/*- - * ============LICENSE_START======================================================= - * ONAP - SO - * ================================================================================ - # Copyright (c) 2020, CMCC Technologies Co., Ltd. - # - # Licensed under the Apache License, Version 2.0 (the "License") - # you may not use this file except in compliance with the License. - # You may obtain a copy of the License at - # - # http://www.apache.org/licenses/LICENSE-2.0 - # - # Unless required by applicable law or agreed to in writing, software - # distributed under the License is distributed on an "AS IS" BASIS, - # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - # See the License for the specific language governing permissions and - # limitations under the License. - * ============LICENSE_END========================================================= - */ - -package org.onap.so.adapters.nssmf.service.impl; - -import org.apache.commons.lang3.StringUtils; -import org.onap.so.adapters.nssmf.annotation.ServiceLogger; -import org.onap.so.adapters.nssmf.config.NssmfAdapterConfig; -import org.onap.so.adapters.nssmf.enums.ActionType; -import org.onap.so.adapters.nssmf.exceptions.ApplicationException; -import org.onap.so.adapters.nssmf.manager.NssmfManagerBuilder; -import org.onap.so.adapters.nssmf.entity.RestResponse; -import org.onap.so.adapters.nssmf.manager.NssmfManager; -import org.onap.so.adapters.nssmf.service.NssmfManagerService; -import org.onap.so.adapters.nssmf.util.RestUtil; -import org.onap.so.beans.nsmf.*; -import org.onap.so.db.request.data.repository.ResourceOperationStatusRepository; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.http.ResponseEntity; -import org.springframework.stereotype.Service; - - -@Service -@ServiceLogger -public class NssmfManagerServiceImpl implements NssmfManagerService { - - @Autowired - private RestUtil restUtil; - - @Autowired - private ResourceOperationStatusRepository repository; - - @Autowired - private NssmfAdapterConfig nssmfAdapterConfig; - - @Override - public ResponseEntity allocateNssi(NssmfAdapterNBIRequest request) { - try { - - if (StringUtils.isNotBlank(request.getServiceInfo().getNssiId())) { - return buildResponse(buildNssmfManager(request, ActionType.MODIFY).modifyNssi(request)); - } - - return buildResponse(buildNssmfManager(request, ActionType.ALLOCATE).allocateNssi(request)); - - } catch (ApplicationException e) { - return e.buildErrorResponse(); - } - } - - @Override - public ResponseEntity deAllocateNssi(NssmfAdapterNBIRequest request, String sliceProfileId) { - try { - return buildResponse( - buildNssmfManager(request, ActionType.DEALLOCATE).deAllocateNssi(request, sliceProfileId)); - } catch (ApplicationException e) { - return e.buildErrorResponse(); - } - } - - @Override - public ResponseEntity activateNssi(NssmfAdapterNBIRequest request, String snssai) { - try { - return buildResponse(buildNssmfManager(request, ActionType.ACTIVATE).activateNssi(request, snssai)); - } catch (ApplicationException e) { - return e.buildErrorResponse(); - } - } - - @Override - public ResponseEntity deActivateNssi(NssmfAdapterNBIRequest request, String snssai) { - try { - return buildResponse(buildNssmfManager(request, ActionType.DEACTIVATE).deActivateNssi(request, snssai)); - } catch (ApplicationException e) { - return e.buildErrorResponse(); - } - } - - @Override - public ResponseEntity queryJobStatus(NssmfAdapterNBIRequest jobReq, String jobId) { - try { - return buildResponse(buildNssmfManager(jobReq, ActionType.QUERY_JOB_STATUS).queryJobStatus(jobReq, jobId)); - } catch (ApplicationException e) { - return e.buildErrorResponse(); - } - } - - @Override - public ResponseEntity queryNSSISelectionCapability(NssmfAdapterNBIRequest nbiRequest) { - EsrInfo esrInfo = nbiRequest.getEsrInfo(); - try { - return buildResponse(buildNssmfManager(esrInfo, ActionType.QUERY_NSSI_SELECTION_CAPABILITY, null) - .queryNSSISelectionCapability(nbiRequest)); - } catch (ApplicationException e) { - return e.buildErrorResponse(); - } - } - - @Override - public ResponseEntity querySubnetCapability(NssmfAdapterNBIRequest nbiRequest) { - EsrInfo esrInfo = nbiRequest.getEsrInfo(); - try { - return buildResponse(buildNssmfManager(esrInfo, ActionType.QUERY_SUB_NET_CAPABILITY, null) - .querySubnetCapability(nbiRequest)); - } catch (ApplicationException e) { - return e.buildErrorResponse(); - } - } - - private ResponseEntity buildResponse(RestResponse rsp) { - return ResponseEntity.status(rsp.getStatus()).body(rsp.getResponseContent()); - } - - - private NssmfManager buildNssmfManager(NssmfAdapterNBIRequest request, ActionType actionType) - throws ApplicationException { - return buildNssmfManager(request.getEsrInfo(), actionType, request.getServiceInfo()); - } - - private NssmfManager buildNssmfManager(EsrInfo esrInfo, ActionType actionType, ServiceInfo serviceInfo) - throws ApplicationException { - - return new NssmfManagerBuilder(esrInfo).setActionType(actionType).setRepository(repository) - .setRestUtil(restUtil).setAdapterConfig(nssmfAdapterConfig).setServiceInfo(serviceInfo).build(); - } -} diff --git a/src/main/java/org/onap/so/adapters/nssmf/util/NssmfAdapterUtil.java b/src/main/java/org/onap/so/adapters/nssmf/util/NssmfAdapterUtil.java deleted file mode 100644 index 090417d..0000000 --- a/src/main/java/org/onap/so/adapters/nssmf/util/NssmfAdapterUtil.java +++ /dev/null @@ -1,123 +0,0 @@ -/*- - * ============LICENSE_START======================================================= - * ONAP - SO - * ================================================================================ - * Copyright (C) 2020 Huawei Technologies Co., Ltd. All rights reserved. - * ================================================================================ - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * ============LICENSE_END========================================================= - */ - -package org.onap.so.adapters.nssmf.util; - -import com.fasterxml.jackson.databind.ObjectMapper; -import java.io.IOException; -import org.onap.so.adapters.nssmf.enums.ActionType; -import org.onap.so.adapters.nssmf.exceptions.ApplicationException; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.onap.logging.filter.base.ErrorCode; -import org.springframework.stereotype.Component; -import static org.onap.so.logger.LoggingAnchor.THREE; -import static org.onap.so.logger.MessageEnum.RA_NS_EXC; - -public class NssmfAdapterUtil { - - private static final Logger LOGGER = LoggerFactory.getLogger(NssmfAdapterUtil.class); - - public static final int BAD_REQUEST = 400; - - private static final String UNMARSHAL_FAIL_MSG = "Failed to unmarshal json"; - - private static final String MARSHAL_FAIL_MSG = "Failed to marshal object"; - - private static final ObjectMapper MAPPER = new ObjectMapper(); - - public static class StatusDesc { - - public static final String ALLOCATE_NSS_SUCCESS = "Allocating nss is " + "successful"; - - public static final String MODIFY_NSS_SUCCESS = "Modify nss is " + "successful"; - - public static final String CREATE_NSS_SUCCESS = "Creating nss is " + "successful"; - - public static final String DEALLOCATE_NSS_SUCCESS = "Deallocate nss " + "is successful"; - - public static final String ACTIVATE_NSS_SUCCESS = "Activate nss " + "is successful"; - - public static final String DEACTIVATE_NSS_SUCCESS = "Deactivate nss " + "is successful"; - - public static final String QUERY_JOB_STATUS_FAILED = "Query job " + "status failed"; - - public static final String QUERY_JOB_STATUS_SUCCESS = "Query job " + "status is successful"; - - private StatusDesc() { - - } - } - - private NssmfAdapterUtil() { - - } - - public static void assertObjectNotNull(Object object) throws ApplicationException { - if (null == object) { - LOGGER.error("Object is null."); - throw new ApplicationException(BAD_REQUEST, "An object is null."); - } - } - - public static T unMarshal(String jsonstr, Class type) throws ApplicationException { - try { - return MAPPER.readValue(jsonstr, type); - } catch (IOException e) { - LOGGER.error(THREE, RA_NS_EXC.toString(), ErrorCode.BusinessProcessError.getValue(), UNMARSHAL_FAIL_MSG, e); - throw new ApplicationException(BAD_REQUEST, UNMARSHAL_FAIL_MSG); - } - } - - public static String marshal(Object srcObj) throws ApplicationException { - try { - return MAPPER.writerWithDefaultPrettyPrinter().writeValueAsString(srcObj); - } catch (IOException e) { - LOGGER.error(THREE, RA_NS_EXC.toString(), ErrorCode.BusinessProcessError.getValue(), MARSHAL_FAIL_MSG, e); - throw new ApplicationException(BAD_REQUEST, MARSHAL_FAIL_MSG); - } - } - - - public static String getStatusDesc(ActionType actionType) { - String desc = ""; - switch (actionType) { - case ALLOCATE: - desc = StatusDesc.ALLOCATE_NSS_SUCCESS; - break; - case DEALLOCATE: - desc = StatusDesc.DEALLOCATE_NSS_SUCCESS; - break; - case ACTIVATE: - desc = StatusDesc.ACTIVATE_NSS_SUCCESS; - break; - case DEACTIVATE: - desc = StatusDesc.DEACTIVATE_NSS_SUCCESS; - break; - case MODIFY: - desc = StatusDesc.MODIFY_NSS_SUCCESS; - break; - default: - break; - } - - return desc; - } -} diff --git a/src/main/java/org/onap/so/adapters/nssmf/util/RestUtil.java b/src/main/java/org/onap/so/adapters/nssmf/util/RestUtil.java deleted file mode 100644 index 7a86c5b..0000000 --- a/src/main/java/org/onap/so/adapters/nssmf/util/RestUtil.java +++ /dev/null @@ -1,353 +0,0 @@ -/*- - * ============LICENSE_START======================================================= - * ONAP - SO - * ================================================================================ - * Copyright (C) 2020 Huawei Technologies Co., Ltd. All rights reserved. - * ================================================================================ - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * ============LICENSE_END========================================================= - */ - -package org.onap.so.adapters.nssmf.util; - -import javax.net.ssl.*; -import javax.ws.rs.core.UriBuilder; -import java.net.SocketTimeoutException; -import java.net.URI; -import org.apache.http.Header; -import org.apache.http.HttpResponse; -import org.apache.http.client.HttpClient; -import org.apache.http.client.config.RequestConfig; -import org.apache.http.client.methods.*; -import org.apache.http.conn.ConnectTimeoutException; -import org.apache.http.conn.ssl.SSLConnectionSocketFactory; -import org.apache.http.entity.StringEntity; -import org.apache.http.impl.client.HttpClients; -import org.apache.http.message.BasicHeader; -import org.apache.http.util.EntityUtils; -import org.onap.aai.domain.yang.*; -import org.onap.so.adapters.nssmf.exceptions.ApplicationException; -import org.onap.so.adapters.nssmf.extclients.aai.AaiServiceProvider; -import org.onap.so.adapters.nssmf.entity.TokenRequest; -import org.onap.so.adapters.nssmf.entity.TokenResponse; -import org.onap.so.adapters.nssmf.enums.HttpMethod; -import org.onap.so.adapters.nssmf.entity.NssmfInfo; -import org.onap.so.adapters.nssmf.entity.RestResponse; -import org.onap.so.beans.nsmf.EsrInfo; -import org.onap.so.beans.nsmf.ServiceInfo; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; -import static org.apache.http.entity.ContentType.APPLICATION_JSON; -import static org.onap.so.adapters.nssmf.enums.HttpMethod.POST; -import static org.onap.so.adapters.nssmf.util.NssmfAdapterUtil.BAD_REQUEST; -import static org.onap.so.adapters.nssmf.util.NssmfAdapterUtil.marshal; -import static org.onap.so.adapters.nssmf.util.NssmfAdapterUtil.unMarshal; -import static org.onap.logging.filter.base.ErrorCode.AvailabilityError; -import static org.onap.so.logger.LoggingAnchor.FOUR; -import static org.onap.so.logger.MessageEnum.RA_NS_EXC; - -@Component -public class RestUtil { - - private static final Logger logger = LoggerFactory.getLogger(RestUtil.class); - - private static final int DEFAULT_TIME_OUT = 60000; - - private static final String NSSMI_ADAPTER = "NSSMI Adapter"; - - private static final String TOKEN_URL = "/api/rest/securityManagement/v1" + "/oauth/token"; - - @Autowired - private AaiServiceProvider aaiSvcProv; - - public void createServiceInstance(ServiceInstance serviceInstance, ServiceInfo serviceInfo) { - aaiSvcProv.invokeCreateServiceInstance(serviceInstance, serviceInfo.getGlobalSubscriberId(), - serviceInfo.getSubscriptionServiceType(), serviceInfo.getNssiId()); - } - - public ServiceInstance getServiceInstance(ServiceInfo serviceInfo) { - return aaiSvcProv.invokeGetServiceInstance(serviceInfo.getGlobalSubscriberId(), - serviceInfo.getSubscriptionServiceType(), serviceInfo.getNssiId()); - } - - public void deleteServiceInstance(ServiceInfo serviceInfo) { - aaiSvcProv.invokeDeleteServiceInstance(serviceInfo.getGlobalSubscriberId(), - serviceInfo.getSubscriptionServiceType(), serviceInfo.getNssiId()); - } - - public NssmfInfo getNssmfHost(EsrInfo esrInfo) throws ApplicationException { - EsrThirdpartySdncList sdncList = aaiSvcProv.invokeGetThirdPartySdncList(); - if (sdncList != null && sdncList.getEsrThirdpartySdnc() != null) { - for (EsrThirdpartySdnc sdncEsr : sdncList.getEsrThirdpartySdnc()) { - - EsrSystemInfoList sysInfoList = - aaiSvcProv.invokeGetThirdPartySdncEsrSystemInfo(sdncEsr.getThirdpartySdncId()); - - if (sysInfoList != null && sysInfoList.getEsrSystemInfo() != null) { - for (EsrSystemInfo esr : sysInfoList.getEsrSystemInfo()) { - if (esr != null && esr.getType().equals(esrInfo.getNetworkType().getNetworkType()) - && esr.getVendor().equals(esrInfo.getVendor())) { - logger.info("Found an entry with vendor name " + esrInfo.getVendor() + " and network type " - + esrInfo.getNetworkType() + " in ESR."); - NssmfInfo nssmfInfo = new NssmfInfo(); - nssmfInfo.setIpAddress(esr.getIpAddress()); - nssmfInfo.setPort(esr.getPort()); - nssmfInfo.setCacert(esr.getSslCacert()); - nssmfInfo.setUserName(esr.getUserName()); - nssmfInfo.setPassword(esr.getPassword()); - String endPoint = UriBuilder.fromPath("").host(esr.getIpAddress()) - .port(Integer.valueOf(esr.getPort())).scheme("https").build().toString(); - nssmfInfo.setUrl(endPoint); - return nssmfInfo; - } - } - } - - } - } - - throw new ApplicationException(BAD_REQUEST, "ESR information is improper"); - } - - - public String getToken(NssmfInfo nssmfInfo) throws ApplicationException { - - - TokenRequest req = new TokenRequest(); - req.setGrantType("password"); - req.setUserName(nssmfInfo.getUserName()); - req.setValue(nssmfInfo.getPassword()); - - String tokenReq = marshal(req); - - logger.info("Sending token request to NSSMF: " + tokenReq); - RestResponse tokenRes = send(nssmfInfo.getUrl() + TOKEN_URL, POST, tokenReq, null); - - TokenResponse res = unMarshal(tokenRes.getResponseContent(), TokenResponse.class); - - return res.getAccessToken(); - } - - - public RestResponse send(String url, HttpMethod methodType, String content, Header header) { - - HttpRequestBase req = null; - HttpResponse res = null; - - logger.debug("Beginning to send message {}: {}", methodType, url); - - try { - int timeout = DEFAULT_TIME_OUT; - - RequestConfig config = RequestConfig.custom().setSocketTimeout(timeout).setConnectTimeout(timeout) - .setConnectionRequestTimeout(timeout).build(); - logger.debug("Sending request to NSSMF: " + content); - req = getHttpReq(url, methodType, header, config, content); - res = getHttpsClient().execute(req); - - String resContent = null; - if (res.getEntity() != null) { - resContent = EntityUtils.toString(res.getEntity(), "UTF-8"); - } - - int statusCode = res.getStatusLine().getStatusCode(); - String statusMessage = res.getStatusLine().getReasonPhrase(); - logger.info("NSSMF Response: {} {}", statusCode, - statusMessage + (resContent == null ? "" : System.lineSeparator() + resContent)); - - if (res.getStatusLine().getStatusCode() >= 300) { - String errMsg = "{\n \"errorCode\": " + res.getStatusLine().getStatusCode() - + "\n \"errorDescription\": " + statusMessage + "\n}"; - logError(errMsg); - return createResponse(statusCode, errMsg); - } - if (null != req) { - req.reset(); - } - req = null; - - return createResponse(statusCode, resContent); - - } catch (SocketTimeoutException | ConnectTimeoutException e) { - String errMsg = "Request to NSSMF timed out"; - logError(errMsg, e); - return createResponse(408, errMsg); - } catch (Exception e) { - String errMsg = "Error processing request to NSSMF"; - logError(errMsg, e); - return createResponse(500, errMsg); - } finally { - if (res != null) { - try { - EntityUtils.consume(res.getEntity()); - } catch (Exception e) { - logger.debug("Exception :", e); - } - } - if (req != null) { - try { - req.reset(); - } catch (Exception e) { - logger.debug("Exception :", e); - } - } - } - } - - public RestResponse createResponse(int statusCode, String errMsg) { - RestResponse restResponse = new RestResponse(); - restResponse.setStatus(statusCode); - restResponse.setResponseContent(errMsg); - return restResponse; - } - - private HttpRequestBase getHttpReq(String url, HttpMethod method, Header header, RequestConfig config, - String content) throws ApplicationException { - HttpRequestBase base; - switch (method) { - case POST: - HttpPost post = new HttpPost(url); - post.setEntity(new StringEntity(content, APPLICATION_JSON)); - base = post; - break; - - case GET: - HttpGetWithBody get = new HttpGetWithBody(url); - if (content != null) { - get.setEntity(new StringEntity(content, APPLICATION_JSON)); - } - base = get; - break; - - case PUT: - HttpPut put = new HttpPut(url); - put.setEntity(new StringEntity(content, APPLICATION_JSON)); - base = put; - break; - - case PATCH: - base = new HttpPatch(url); - break; - - case DELETE: - HttpDeleteWithBody delete = new HttpDeleteWithBody(url); - if (content != null) { - delete.setEntity(new StringEntity(content, APPLICATION_JSON)); - } - base = delete; - break; - default: - throw new ApplicationException(404, "invalid method: " + method); - - } - base.setConfig(config); - if (header != null) { - base.setHeader(header); - } - return base; - } - - public RestResponse sendRequest(String allocateUrl, HttpMethod post, String allocateReq, EsrInfo esrInfo) - throws ApplicationException { - NssmfInfo nssmfInfo = getNssmfHost(esrInfo); - Header header = new BasicHeader("X-Auth-Token", getToken(nssmfInfo)); - String nssmfUrl = nssmfInfo.getUrl() + allocateUrl; - return send(nssmfUrl, post, allocateReq, header); - } - - class HttpDeleteWithBody extends HttpEntityEnclosingRequestBase { - public static final String METHOD_NAME = "DELETE"; - - @Override - public String getMethod() { - return METHOD_NAME; - } - - public HttpDeleteWithBody(final String uri) { - super(); - setURI(URI.create(uri)); - } - - public HttpDeleteWithBody(final URI uri) { - super(); - setURI(uri); - } - - public HttpDeleteWithBody() { - super(); - } - } - - class HttpGetWithBody extends HttpEntityEnclosingRequestBase { - public static final String METHOD_NAME = "GET"; - - public HttpGetWithBody() { - super(); - } - - public HttpGetWithBody(final String uri) { - super(); - setURI(URI.create(uri)); - } - - public HttpGetWithBody(final URI uri) { - super(); - setURI(uri); - } - - @Override - public String getMethod() { - return METHOD_NAME; - } - } - - - public HttpClient getHttpsClient() { - - TrustManager[] trustAllCerts = new TrustManager[] {new X509TrustManager() { - @Override - public java.security.cert.X509Certificate[] getAcceptedIssuers() { - return null; - } - - @Override - public void checkClientTrusted(java.security.cert.X509Certificate[] certs, String authType) {} - - @Override - public void checkServerTrusted(java.security.cert.X509Certificate[] certs, String authType) {} - }}; - - // Install the all-trusting trust manager - try { - SSLContext sc = SSLContext.getInstance("SSL"); - sc.init(null, trustAllCerts, new java.security.SecureRandom()); - - SSLConnectionSocketFactory sslsf = new SSLConnectionSocketFactory(sc, - new String[] {"TLSv1", "TLSv1.1", "TLSv1.2", "TLSv1.3"}, null, (s, sslSession) -> true); - return HttpClients.custom().setSSLSocketFactory(sslsf).build(); - } catch (Exception e) { - throw new IllegalArgumentException(e); - } - } - - private static void logError(String errMsg, Throwable t) { - logger.error(FOUR, RA_NS_EXC.toString(), NSSMI_ADAPTER, AvailabilityError.getValue(), errMsg, t); - } - - private static void logError(String errMsg) { - logger.error(FOUR, RA_NS_EXC.toString(), NSSMI_ADAPTER, AvailabilityError.toString(), errMsg); - } -} - diff --git a/src/main/resources/META-INF/services/org.onap.so.client.RestProperties b/src/main/resources/META-INF/services/org.onap.so.client.RestProperties deleted file mode 100644 index f93ec63..0000000 --- a/src/main/resources/META-INF/services/org.onap.so.client.RestProperties +++ /dev/null @@ -1 +0,0 @@ -org.onap.so.adapters.nssmf.extclients.aai.AaiClientPropertiesImpl \ No newline at end of file diff --git a/src/main/resources/application-aaf.yaml b/src/main/resources/application-aaf.yaml deleted file mode 100644 index e69de29..0000000 diff --git a/src/main/resources/application-basic.yaml b/src/main/resources/application-basic.yaml deleted file mode 100644 index e69de29..0000000 diff --git a/src/main/resources/application-test.yaml b/src/main/resources/application-test.yaml deleted file mode 100644 index 8e10dfb..0000000 --- a/src/main/resources/application-test.yaml +++ /dev/null @@ -1,60 +0,0 @@ - -aai: - auth: 2A11B07DB6214A839394AA1EC5844695F5114FC407FF5422625FB00175A3DCB8A1FF745F22867EFA72D5369D599BBD88DA8BED4233CF5586 - endpoint: https://aai.onap:30233 -logging: - path: logs - -spring: - datasource: - jdbcUrl: jdbc:mariadb://49.232.146.162:8989/requestdb - username: root - password: 123456 - driver-class-name: org.mariadb.jdbc.Driver - initialization-mode: always - jpa: - generate-ddl: false - show-sql: false - hibernate: - ddl-auto: none - naming-strategy: org.hibernate.cfg.ImprovedNamingStrategy - enable-lazy-load-no-trans: true - database-platform: org.hibernate.dialect.MySQL5InnoDBDialect - security: - usercredentials: - - username: bpel - password: '$2a$10$Fh9ffgPw2vnmsghsRD3ZauBL1aKXebigbq3BB1RPWtE62UDILsjke' - role: BPEL-Client - - username: mso_admin - password: '$2a$10$Fh9ffgPw2vnmsghsRD3ZauBL1aKXebigbq3BB1RPWtE62UDILsjke' - role: ACTUATOR -server: - port: 8080 - tomcat: - max-threads: 50 - -mso: - key: 07a7159d3bf51a0e53be7a8f89699be7 - site-name: localSite - logPath: ./logs/nssmf - adapters: - requestDb: - endpoint: https://so-request-db-adapter.onap:8083 - auth: Basic YnBlbDpwYXNzd29yZDEk - infra: - endpoint: https://so.onap:8080 - auth: Basic SW5mcmFQb3J0YWxDbGllbnQ6cGFzc3dvcmQxJA== - -#Actuator -management: - endpoints: - web: - base-path: /manage - exposure: - include: "*" - metrics: - se-global-registry: false - export: - prometheus: - enabled: true # Whether exporting of metrics to Prometheus is enabled. - step: 1m # Step size (i.e. reporting frequency) to use. \ No newline at end of file diff --git a/src/main/resources/application.yaml b/src/main/resources/application.yaml deleted file mode 100644 index 5501fba..0000000 --- a/src/main/resources/application.yaml +++ /dev/null @@ -1,77 +0,0 @@ -# -# ============LICENSE_START======================================================= -# ONAP - SO -# ================================================================================ -# Copyright (C) 2020 Huawei Technologies Co., Ltd. All rights reserved. -# ================================================================================ -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# ============LICENSE_END========================================================= -#/ -aai: - auth: 2A11B07DB6214A839394AA1EC5844695F5114FC407FF5422625FB00175A3DCB8A1FF745F22867EFA72D5369D599BBD88DA8BED4233CF5586 - endpoint: https://aai.onap:30233 -logging: - path: logs - -spring: - datasource: - jdbc-url: jdbc:mariadb://${DB_HOST}:${DB_PORT}/requestdb - username: ${DB_USERNAME} - password: ${DB_PASSWORD} - driver-class-name: org.mariadb.jdbc.Driver - jpa: - show-sql: false - hibernate: - dialect: org.hibernate.dialect.MySQL5Dialect - ddl-auto: validate - naming-strategy: org.hibernate.cfg.ImprovedNamingStrategy - enable-lazy-load-no-trans: true - security: - usercredentials: - - username: bpel - password: '$2a$10$Fh9ffgPw2vnmsghsRD3ZauBL1aKXebigbq3BB1RPWtE62UDILsjke' - role: BPEL-Client - - username: mso_admin - password: '$2a$10$Fh9ffgPw2vnmsghsRD3ZauBL1aKXebigbq3BB1RPWtE62UDILsjke' - role: ACTUATOR - -server: - port: 8080 - tomcat: - max-threads: 50 - -mso: - key: 07a7159d3bf51a0e53be7a8f89699be7 - site-name: localSite - logPath: ./logs/nssmf - adapters: - requestDb: - endpoint: https://so-request-db-adapter.{{ include "common.namespace" . }}:8083 - auth: Basic YnBlbDpwYXNzd29yZDEk - infra: - endpoint: http://so.onap:8080 - auth: Basic SW5mcmFQb3J0YWxDbGllbnQ6cGFzc3dvcmQxJA== - -#Actuator -management: - endpoints: - web: - base-path: /manage - exposure: - include: "*" - metrics: - se-global-registry: false - export: - prometheus: - enabled: true # Whether exporting of metrics to Prometheus is enabled. - step: 1m # Step size (i.e. reporting frequency) to use. diff --git a/src/main/resources/org.onap.so.p12 b/src/main/resources/org.onap.so.p12 deleted file mode 100644 index 79631bf..0000000 Binary files a/src/main/resources/org.onap.so.p12 and /dev/null differ diff --git a/src/main/resources/org.onap.so.trust.jks b/src/main/resources/org.onap.so.trust.jks deleted file mode 100644 index 6f8168d..0000000 Binary files a/src/main/resources/org.onap.so.trust.jks and /dev/null differ diff --git a/src/main/resources/subnetCapability.json b/src/main/resources/subnetCapability.json deleted file mode 100644 index 8753e85..0000000 --- a/src/main/resources/subnetCapability.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "AN": { - "latency": 5, - "maxNumberofUEs": "100" - }, - "CN": { - "latency": 5, - "maxNumberofConns": "100" - } -} diff --git a/src/test/java/org/onap/so/adapters/nssmf/controller/NssmfAdapterControllerTest.java b/src/test/java/org/onap/so/adapters/nssmf/controller/NssmfAdapterControllerTest.java deleted file mode 100644 index 20f4c95..0000000 --- a/src/test/java/org/onap/so/adapters/nssmf/controller/NssmfAdapterControllerTest.java +++ /dev/null @@ -1,132 +0,0 @@ -/*- - * ============LICENSE_START======================================================= - * ONAP - SO - * ================================================================================ - # Copyright (c) 2020, CMCC Technologies Co., Ltd. - # - # Licensed under the Apache License, Version 2.0 (the "License") - # you may not use this file except in compliance with the License. - # You may obtain a copy of the License at - # - # http://www.apache.org/licenses/LICENSE-2.0 - # - # Unless required by applicable law or agreed to in writing, software - # distributed under the License is distributed on an "AS IS" BASIS, - # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - # See the License for the specific language governing permissions and - # limitations under the License. - * ============LICENSE_END========================================================= - */ -package org.onap.so.adapters.nssmf.controller; - -import org.junit.Before; -import org.junit.runner.RunWith; -import org.mockito.Mock; -import org.onap.so.adapters.nssmf.controller.NssmfAdapterController; -import org.onap.so.adapters.nssmf.service.NssmfManagerService; -import org.onap.so.beans.nsmf.NssmfAdapterNBIRequest; -import org.springframework.http.ResponseEntity; -import org.springframework.test.context.junit4.SpringRunner; -import org.junit.Test; -import java.lang.reflect.Field; -import static org.junit.Assert.assertNotNull; -import static org.mockito.ArgumentMatchers.any; -import static org.mockito.ArgumentMatchers.anyString; -import static org.mockito.Mockito.when; -import static org.mockito.MockitoAnnotations.initMocks; -import static org.onap.so.beans.nsmf.NetworkType.CORE; - -@RunWith(SpringRunner.class) -public class NssmfAdapterControllerTest { - - @Mock - private NssmfManagerService nssmfManagerService; - - private NssmfAdapterController controller; - - @Mock - private ResponseEntity entity; - - @Before - public void setUp() throws Exception { - initMocks(this); - controller = new NssmfAdapterController(); - - Field nssmfManagerService = controller.getClass().getDeclaredField("nssmfManagerService"); - nssmfManagerService.setAccessible(true); - nssmfManagerService.set(controller, this.nssmfManagerService); - } - - - @Test - public void allocateNssiTest() throws Exception { - commonMock(); - NssmfAdapterNBIRequest request = new NssmfAdapterNBIRequest(); - ResponseEntity entity = controller.allocateNssi(request); - assertNotNull(entity); - } - - @Test - public void deAllocateNssiTest() throws Exception { - commonMock(); - NssmfAdapterNBIRequest request = new NssmfAdapterNBIRequest(); - String profileId = "7516eb33-e8d3-4805-b91a-96de1bb6d8bb"; - ResponseEntity entity = controller.deAllocateNssi(request, profileId); - assertNotNull(entity); - - } - - @Test - public void activateNssiTest() throws Exception { - commonMock(); - NssmfAdapterNBIRequest request = new NssmfAdapterNBIRequest(); - String snssai = "01-772523CD"; - ResponseEntity entity = controller.activateNssi(request, snssai); - assertNotNull(entity); - } - - @Test - public void deactivateNssiTest() throws Exception { - commonMock(); - NssmfAdapterNBIRequest request = new NssmfAdapterNBIRequest(); - String snssai = "01-772523CD"; - ResponseEntity entity = controller.deactivateNssi(request, snssai); - assertNotNull(entity); - } - - @Test - public void queryJobStatusTest() throws Exception { - commonMock(); - NssmfAdapterNBIRequest request = new NssmfAdapterNBIRequest(); - String jobId = "b86aa515-b285-487b-8a1e-01f3cc871b88"; - ResponseEntity entity = controller.queryJobStatus(request, jobId); - assertNotNull(entity); - } - - @Test - public void queryNSSISelectionCapabilityTest() throws Exception { - commonMock(); - NssmfAdapterNBIRequest request = new NssmfAdapterNBIRequest(); - ResponseEntity entity = controller.queryNSSISelectionCapability(request); - assertNotNull(entity); - } - - @Test - public void querySubnetCapabilityTest() throws Exception { - commonMock(); - NssmfAdapterNBIRequest request = new NssmfAdapterNBIRequest(); - ResponseEntity entity = controller.querySubnetCapability(request); - assertNotNull(entity); - } - - private void commonMock() { - NssmfAdapterNBIRequest request = new NssmfAdapterNBIRequest(); - when(nssmfManagerService.allocateNssi(any())).thenReturn(entity); - when(nssmfManagerService.deAllocateNssi(any(), anyString())).thenReturn(entity); - when(nssmfManagerService.deActivateNssi(any(), anyString())).thenReturn(entity); - when(nssmfManagerService.activateNssi(any(), anyString())).thenReturn(entity); - when(nssmfManagerService.queryJobStatus(any(), anyString())).thenReturn(entity); - when(nssmfManagerService.querySubnetCapability(any())).thenReturn(entity); - when(nssmfManagerService.queryNSSISelectionCapability(any())).thenReturn(entity); - } -} diff --git a/src/test/java/org/onap/so/adapters/nssmf/entity/RestResponseTest.java b/src/test/java/org/onap/so/adapters/nssmf/entity/RestResponseTest.java deleted file mode 100644 index ab2c212..0000000 --- a/src/test/java/org/onap/so/adapters/nssmf/entity/RestResponseTest.java +++ /dev/null @@ -1,59 +0,0 @@ -/*- - * ============LICENSE_START======================================================= - * ONAP - SO - * ================================================================================ - # Copyright (c) 2020, CMCC Technologies Co., Ltd. - # - # Licensed under the Apache License, Version 2.0 (the "License") - # you may not use this file except in compliance with the License. - # You may obtain a copy of the License at - # - # http://www.apache.org/licenses/LICENSE-2.0 - # - # Unless required by applicable law or agreed to in writing, software - # distributed under the License is distributed on an "AS IS" BASIS, - # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - # See the License for the specific language governing permissions and - # limitations under the License. - * ============LICENSE_END========================================================= - */ -package org.onap.so.adapters.nssmf.entity; - -import org.junit.Test; -import org.junit.runner.RunWith; -import org.springframework.test.context.junit4.SpringRunner; -import java.util.HashMap; -import java.util.Map; -import static org.junit.Assert.*; - -@RunWith(SpringRunner.class) -public class RestResponseTest { - - @Test - public void testRestResponse() { - RestResponse restResponse = new RestResponse(); - Map header = new HashMap<>(); - header.put("X-RequestID", "05a63ae2-249a-49b9-bc52-0c70a3bca487"); - header.put("X-InvocationID", "bb7f7fc5-52ba-4937-a7af-55036694fe19"); - header.put("testlong", "55036694"); - header.put("testint", "55"); - restResponse.setRespHeaderMap(header); - - String headerStr = restResponse.getRespHeaderStr("X-RequestID"); - assertEquals(headerStr, "05a63ae2-249a-49b9-bc52-0c70a3bca487"); - - long headerLong = restResponse.getRespHeaderLong("testlong"); - long headerLongNull = restResponse.getRespHeaderLong("testlong1"); - assertNotNull(headerLong); - assertEquals(headerLongNull, -1L); - - int headerInt = restResponse.getRespHeaderInt("testint"); - int headerIntNull = restResponse.getRespHeaderInt("testint1"); - assertNotNull(headerInt); - assertEquals(headerIntNull, -1); - - Map headerMap = restResponse.getRespHeaderMap(); - assertNotNull(headerMap); - } - -} diff --git a/src/test/java/org/onap/so/adapters/nssmf/exceptions/ApplicationExceptionTest.java b/src/test/java/org/onap/so/adapters/nssmf/exceptions/ApplicationExceptionTest.java deleted file mode 100644 index e4b1cc9..0000000 --- a/src/test/java/org/onap/so/adapters/nssmf/exceptions/ApplicationExceptionTest.java +++ /dev/null @@ -1,40 +0,0 @@ -/*- - * ============LICENSE_START======================================================= - * ONAP - SO - * ================================================================================ - # Copyright (c) 2020, CMCC Technologies Co., Ltd. - # - # Licensed under the Apache License, Version 2.0 (the "License") - # you may not use this file except in compliance with the License. - # You may obtain a copy of the License at - # - # http://www.apache.org/licenses/LICENSE-2.0 - # - # Unless required by applicable law or agreed to in writing, software - # distributed under the License is distributed on an "AS IS" BASIS, - # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - # See the License for the specific language governing permissions and - # limitations under the License. - * ============LICENSE_END========================================================= - */ -package org.onap.so.adapters.nssmf.exceptions; - - -import org.junit.Test; -import org.junit.runner.RunWith; -import org.springframework.http.ResponseEntity; -import org.springframework.test.context.junit4.SpringRunner; -import static org.junit.Assert.*; - -@RunWith(SpringRunner.class) -public class ApplicationExceptionTest { - - @Test - public void buildErrorResponseTest() { - ApplicationException appException = new ApplicationException(500, "system internal error"); - ResponseEntity entity = appException.buildErrorResponse(); - assertNotNull(entity); - assertEquals(entity.getStatusCodeValue(), 500); - } - -} diff --git a/src/test/java/org/onap/so/adapters/nssmf/service/impl/NssmfManagerServiceImplTest.java b/src/test/java/org/onap/so/adapters/nssmf/service/impl/NssmfManagerServiceImplTest.java deleted file mode 100644 index b64f581..0000000 --- a/src/test/java/org/onap/so/adapters/nssmf/service/impl/NssmfManagerServiceImplTest.java +++ /dev/null @@ -1,645 +0,0 @@ -/*- - * ============LICENSE_START======================================================= - * ONAP - SO - * ================================================================================ - # Copyright (c) 2020, CMCC Technologies Co., Ltd. - # - # Licensed under the Apache License, Version 2.0 (the "License") - # you may not use this file except in compliance with the License. - # You may obtain a copy of the License at - # - # http://www.apache.org/licenses/LICENSE-2.0 - # - # Unless required by applicable law or agreed to in writing, software - # distributed under the License is distributed on an "AS IS" BASIS, - # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - # See the License for the specific language governing permissions and - # limitations under the License. - * ============LICENSE_END========================================================= - */ - -package org.onap.so.adapters.nssmf.service.impl; - - -import org.apache.http.Header; -import org.apache.http.HttpEntity; -import org.apache.http.HttpResponse; -import org.apache.http.StatusLine; -import org.apache.http.client.HttpClient; -import org.apache.http.client.methods.HttpRequestBase; -import org.apache.http.conn.util.DomainType; -import org.ehcache.config.ResourceType; -import org.junit.Before; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.mockito.Mock; -import org.mockito.stubbing.Answer; -import org.onap.aai.domain.yang.ServiceInstance; -import org.onap.so.adapters.nssmf.config.NssmfAdapterConfig; -import org.onap.so.adapters.nssmf.consts.NssmfAdapterConsts; -import org.onap.so.adapters.nssmf.entity.NssmfInfo; -import org.onap.so.adapters.nssmf.entity.TokenResponse; -import org.onap.so.adapters.nssmf.enums.ActionType; -import org.onap.so.adapters.nssmf.enums.HttpMethod; -import org.onap.so.adapters.nssmf.exceptions.ApplicationException; -import org.onap.so.adapters.nssmf.util.RestUtil; -import org.onap.so.beans.nsmf.*; -import org.onap.so.db.request.beans.ResourceOperationStatus; -import org.onap.so.db.request.data.repository.ResourceOperationStatusRepository; -import org.springframework.http.ResponseEntity; -import org.springframework.test.context.junit4.SpringRunner; -import javax.persistence.Access; -import javax.persistence.ManyToOne; -import java.io.ByteArrayInputStream; -import java.io.InputStream; -import java.lang.reflect.Field; -import java.util.*; -import static java.nio.charset.StandardCharsets.UTF_8; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotNull; -import static org.mockito.ArgumentMatchers.any; -import static org.mockito.Mockito.doAnswer; -import static org.mockito.Mockito.when; -import static org.mockito.MockitoAnnotations.initMocks; -import static org.onap.so.adapters.nssmf.util.NssmfAdapterUtil.marshal; -import static org.onap.so.adapters.nssmf.util.NssmfAdapterUtil.unMarshal; -import static org.onap.so.beans.nsmf.NetworkType.*; -import static org.onap.so.beans.nsmf.ResourceSharingLevel.NON_SHARED; - -@RunWith(SpringRunner.class) -public class NssmfManagerServiceImplTest { - - @Mock - private RestUtil restUtil; - - - private NssmfManagerServiceImpl nssiManagerService; - - @Mock - private HttpResponse tokenResponse; - - @Mock - private HttpEntity tokenEntity; - - @Mock - private HttpResponse commonResponse; - - @Mock - private HttpEntity commonEntity; - - @Mock - private StatusLine statusLine; - - @Mock - private HttpClient httpClient; - - private InputStream postStream; - - private InputStream tokenStream; - - @Mock - private NssmfAdapterConfig adapterConfig; - - @Mock - private ResourceOperationStatusRepository repository; - - @Before - public void setUp() throws Exception { - initMocks(this); - - nssiManagerService = new NssmfManagerServiceImpl(); - - Field restUtil = nssiManagerService.getClass().getDeclaredField("restUtil"); - restUtil.setAccessible(true); - restUtil.set(nssiManagerService, this.restUtil); - - Field adapterConfig = nssiManagerService.getClass().getDeclaredField("nssmfAdapterConfig"); - adapterConfig.setAccessible(true); - adapterConfig.set(nssiManagerService, this.adapterConfig); - - Field repository = nssiManagerService.getClass().getDeclaredField("repository"); - repository.setAccessible(true); - repository.set(nssiManagerService, this.repository); - // nssiManagerService.setRestUtil(this.restUtil); - - when(this.restUtil.send(any(String.class), any(HttpMethod.class), any(), any(Header.class))) - .thenCallRealMethod(); - when(this.restUtil.createResponse(any(Integer.class), any(String.class))).thenCallRealMethod(); - } - - private void createCommonMock(int statusCode, NssmfInfo nssmf) throws Exception { - when(restUtil.getToken(any(NssmfInfo.class))).thenReturn("7512eb3feb5249eca5ddd742fedddd39"); - when(restUtil.getHttpsClient()).thenReturn(httpClient); - when(restUtil.getServiceInstance(any())).thenReturn(new ServiceInstance()); - - when(statusLine.getStatusCode()).thenReturn(statusCode); - when(restUtil.getNssmfHost(any(EsrInfo.class))).thenReturn(nssmf); - - when(tokenResponse.getEntity()).thenReturn(tokenEntity); - when(tokenResponse.getStatusLine()).thenReturn(statusLine); - when(tokenEntity.getContent()).thenReturn(tokenStream); - - when(commonResponse.getEntity()).thenReturn(commonEntity); - when(commonResponse.getStatusLine()).thenReturn(statusLine); - when(commonEntity.getContent()).thenReturn(postStream); - - when(adapterConfig.getInfraAuth()).thenReturn("SW5mcmFQb3J0YWxDbGllbnQ6cGFzc3dvcmQxJA=="); - - Answer answer = invocation -> { - Object[] arguments = invocation.getArguments(); - if (arguments != null && arguments.length == 1 && arguments[0] != null) { - - HttpRequestBase base = (HttpRequestBase) arguments[0]; - if (base.getURI().toString().endsWith("/oauth/token")) { - return tokenResponse; - } else { - return commonResponse; - } - } - return commonResponse; - }; - - doAnswer(answer).when(httpClient).execute(any(HttpRequestBase.class)); - - } - - @Test - public void allocateCnNssiTest() throws Exception { - allocateNssi(CORE); - - } - - @Test - public void allocateTnNssiTest() throws Exception { - allocateNssi(TRANSPORT); - } - - @Test - public void allocateAnNssiTest() throws Exception { - allocateNssi(ACCESS); - } - - - public void allocateNssi(NetworkType domainType) throws Exception { - NssmfInfo nssmf = new NssmfInfo(); - nssmf.setUserName("nssmf-user"); - nssmf.setPassword("nssmf-pass"); - nssmf.setPort("8080"); - nssmf.setIpAddress("127.0.0.1"); - nssmf.setUrl("http://127.0.0.1:8080"); - - NssiResponse nssiRes = new NssiResponse(); - nssiRes.setJobId("4b45d919816ccaa2b762df5120f72067"); - nssiRes.setNssiId("NSSI-C-001-HDBNJ-NSSMF-01-A-ZX"); - - TokenResponse token = new TokenResponse(); - token.setAccessToken("7512eb3feb5249eca5ddd742fedddd39"); - token.setExpires(1800); - - postStream = new ByteArrayInputStream(marshal(nssiRes).getBytes(UTF_8)); - tokenStream = new ByteArrayInputStream(marshal(token).getBytes(UTF_8)); - - createCommonMock(200, nssmf); - NssmfAdapterNBIRequest nbiRequest = null; - - switch (domainType) { - case CORE: - nbiRequest = createCnAllocateNssi(); - break; - case TRANSPORT: - nbiRequest = createTnAllocateNssi(); - break; - case ACCESS: - nbiRequest = createAnAllocateNssi(); - break; - } - - assertNotNull(nbiRequest); - System.out.println(marshal(nbiRequest)); - ResponseEntity res = nssiManagerService.allocateNssi(nbiRequest); - assertNotNull(res); - assertNotNull(res.getBody()); - NssiResponse allRes = unMarshal(res.getBody().toString(), NssiResponse.class); - if (!domainType.equals(ACCESS)) { - assertEquals(allRes.getJobId(), "4b45d919816ccaa2b762df5120f72067"); - assertEquals(allRes.getNssiId(), "NSSI-C-001-HDBNJ-NSSMF-01-A-ZX"); - } - - System.out.println(res); - } - - - - private NssmfAdapterNBIRequest createCnAllocateNssi() { - CnSliceProfile sP = new CnSliceProfile(); - List sns = new LinkedList<>(); - sns.add("001-100001"); - List plmn = new LinkedList<>(); - plmn.add("460-00"); - plmn.add("460-01"); - PerfReqEmbb embb = new PerfReqEmbb(); - embb.setActivityFactor(50); - List embbList = new LinkedList<>(); - embbList.add(embb); - PerfReq perfReq = new PerfReq(); - perfReq.setPerfReqEmbbList(embbList); - List taList = new LinkedList<>(); - taList.add("1"); - taList.add("2"); - taList.add("3"); - sP.setSnssaiList(sns); - sP.setSliceProfileId("ab9af40f13f721b5f13539d87484098"); - sP.setPLMNIdList(plmn); - sP.setPerfReq(perfReq); - sP.setMaxNumberOfUEs(200); - sP.setCoverageAreaTAList(taList); - sP.setLatency(6); - sP.setResourceSharingLevel(NON_SHARED); - NsiInfo nsiInfo = new NsiInfo(); - nsiInfo.setNsiId("NSI-M-001-HDBNJ-NSMF-01-A-ZX"); - nsiInfo.setNsiName("eMBB-001"); - AllocateCnNssi cnNssi = new AllocateCnNssi(); - cnNssi.setNssiId("NSST-C-001-HDBNJ-NSSMF-01-A-ZX"); - cnNssi.setNssiName("eMBB-001"); - cnNssi.setScriptName("CN1"); - cnNssi.setSliceProfile(sP); - cnNssi.setNsiInfo(nsiInfo); - - NssmfAdapterNBIRequest nbiRequest = createNbiRequest(CORE); - nbiRequest.setAllocateCnNssi(cnNssi); - return nbiRequest; - } - - private NssmfAdapterNBIRequest createAnAllocateNssi() { - - AnSliceProfile sP = new AnSliceProfile(); - List sns = new LinkedList<>(); - sns.add("001-100001"); - List plmn = new LinkedList<>(); - plmn.add("460-00"); - plmn.add("460-01"); - PerfReqEmbb embb = new PerfReqEmbb(); - embb.setActivityFactor(50); - List embbList = new LinkedList<>(); - embbList.add(embb); - PerfReq perfReq = new PerfReq(); - perfReq.setPerfReqEmbbList(embbList); - List taList = new LinkedList<>(); - taList.add(1); - taList.add(2); - taList.add(3); - sP.setSNSSAIList(sns); - sP.setSliceProfileId("ab9af40f13f721b5f13539d87484098"); - sP.setPLMNIdList(plmn); - sP.setPerfReq(perfReq); - sP.setMaxNumberOfUEs(200); - sP.setCoverageAreaTAList(taList); - sP.setLatency(6); - sP.setResourceSharingLevel(NON_SHARED); - sP.setUeMobilityLevel(UeMobilityLevel.STATIONARY); - sP.setResourceSharingLevel(NON_SHARED); - NsiInfo nsiInfo = new NsiInfo(); - nsiInfo.setNsiId("NSI-M-001-HDBNJ-NSMF-01-A-ZX"); - nsiInfo.setNsiName("eMBB-001"); - AllocateAnNssi anNssi = new AllocateAnNssi(); - anNssi.setNssiId("NSST-C-001-HDBNJ-NSSMF-01-A-ZX"); - anNssi.setNssiName("eMBB-001"); - anNssi.setScriptName("CN1"); - anNssi.setSliceProfile(sP); - anNssi.setNsiInfo(nsiInfo); - - NssmfAdapterNBIRequest nbiRequest = createNbiRequest(ACCESS); - nbiRequest.setAllocateAnNssi(anNssi); - return nbiRequest; - } - - - private NssmfAdapterNBIRequest createTnAllocateNssi() { - TnSliceProfile sP = new TnSliceProfile(); - List sns = new LinkedList<>(); - sns.add("01-1EB5BA40"); - List plmn = new LinkedList<>(); - plmn.add("460-00"); - PerfReqEmbb embb = new PerfReqEmbb(); - embb.setActivityFactor(50); - List embbList = new LinkedList<>(); - embbList.add(embb); - - sP.setSNSSAIList(sns); - sP.setSliceProfileId("fec94836-87a0-41dc-a199-0ad9aa3890d1"); - sP.setPLMNIdList(plmn); - sP.setLatency(10); - sP.setMaxBandwidth(1000); - sP.setJitter(10); - - List networks = new LinkedList<>(); - TransportSliceNetwork network = new TransportSliceNetwork(); - List connectionLinks = new LinkedList<>(); - ConnectionLink connectionLink = new ConnectionLink(); - connectionLink.setTransportEndpointA("a47c76e3-c010-4eaf-adbb-0ba264118cab"); - connectionLink.setTransportEndpointB("c0c83e33-80d2-43da-b6cb-17b930420d74"); - connectionLinks.add(connectionLink); - network.setConnectionLinks(connectionLinks); - networks.add(network); - - NsiInfo nsiInfo = new NsiInfo(); - nsiInfo.setNsiId("NSI-M-001-HDBNJ-NSMF-01-A-ZX"); - nsiInfo.setNsiName("eMBB-001"); - AllocateTnNssi tnNssi = new AllocateTnNssi(); - tnNssi.setTransportSliceNetworks(networks); - tnNssi.setScriptName("TN"); - tnNssi.setSliceProfile(sP); - tnNssi.setNsiInfo(nsiInfo); - - NssmfAdapterNBIRequest nbiRequest = createNbiRequest(TRANSPORT); - nbiRequest.setAllocateTnNssi(tnNssi); - return nbiRequest; - } - - @Test - public void deAllocateCnNssi() throws Exception { - deAllocateNssi(CORE); - } - - @Test - public void deAllocateAnNssi() throws Exception { - deAllocateNssi(ACCESS); - } - - @Test - public void deAllocateTnNssi() throws Exception { - deAllocateNssi(TRANSPORT); - } - - public void deAllocateNssi(NetworkType domainType) throws Exception { - DeAllocateNssi deAllocateNssi = new DeAllocateNssi(); - deAllocateNssi.setTerminateNssiOption(0); - List snssai = new LinkedList<>(); - snssai.add("001-100001"); - deAllocateNssi.setNsiId("NSI-M-001-HDBNJ-NSMF-01-A-ZX"); - deAllocateNssi.setNssiId("NSSI-C-001-HDBNJ-NSSMF-01-A-ZX"); - deAllocateNssi.setScriptName("CN1"); - deAllocateNssi.setSnssaiList(snssai); - - NssmfAdapterNBIRequest nbiRequest = createNbiRequest(domainType); - nbiRequest.setDeAllocateNssi(deAllocateNssi); - - NssmfInfo nssmf = new NssmfInfo(); - nssmf.setUserName("nssmf-user"); - nssmf.setPassword("nssmf-pass"); - nssmf.setPort("8080"); - nssmf.setIpAddress("127.0.0.1"); - - NssiResponse nssiRes = new NssiResponse(); - nssiRes.setJobId("4b45d919816ccaa2b762df5120f72067"); - - TokenResponse token = new TokenResponse(); - token.setAccessToken("7512eb3feb5249eca5ddd742fedddd39"); - token.setExpires(1800); - - postStream = new ByteArrayInputStream(marshal(nssiRes).getBytes(UTF_8)); - tokenStream = new ByteArrayInputStream(marshal(token).getBytes(UTF_8)); - - createCommonMock(202, nssmf); - ResponseEntity res = nssiManagerService.deAllocateNssi(nbiRequest, "ab9af40f13f721b5f13539d87484098"); - assertNotNull(res); - assertNotNull(res.getBody()); - NssiResponse allRes = unMarshal(res.getBody().toString(), NssiResponse.class); - if (!domainType.equals(ACCESS)) { - assertEquals(allRes.getJobId(), "4b45d919816ccaa2b762df5120f72067"); - } - } - - @Test - public void activateAnNssi() throws Exception { - activateNssi(ACCESS); - } - - - @Test - public void activateCnNssi() throws Exception { - activateNssi(CORE); - } - - - @Test - public void activateTnNssi() throws Exception { - activateNssi(TRANSPORT); - } - - - private void activateNssi(NetworkType domainType) throws Exception { - NssmfInfo nssmf = new NssmfInfo(); - nssmf.setUserName("nssmf-user"); - nssmf.setPassword("nssmf-pass"); - nssmf.setPort("8080"); - nssmf.setIpAddress("127.0.0.1"); - - NssiResponse nssiRes = new NssiResponse(); - nssiRes.setJobId("4b45d919816ccaa2b762df5120f72067"); - - TokenResponse token = new TokenResponse(); - token.setAccessToken("7512eb3feb5249eca5ddd742fedddd39"); - token.setExpires(1800); - - postStream = new ByteArrayInputStream(marshal(nssiRes).getBytes(UTF_8)); - tokenStream = new ByteArrayInputStream(marshal(token).getBytes(UTF_8)); - - ActDeActNssi act = new ActDeActNssi(); - act.setNsiId("NSI-M-001-HDBNJ-NSMF-01-A-ZX"); - act.setNssiId("NSSI-C-001-HDBNJ-NSSMF-01-A-ZX"); - - NssmfAdapterNBIRequest nbiRequest = createNbiRequest(domainType); - nbiRequest.setActDeActNssi(act); - - createCommonMock(200, nssmf); - ResponseEntity res = nssiManagerService.activateNssi(nbiRequest, "001-100001"); - assertNotNull(res); - assertNotNull(res.getBody()); - NssiResponse allRes = unMarshal(res.getBody().toString(), NssiResponse.class); - if (!domainType.equals(ACCESS)) { - assertEquals(allRes.getJobId(), "4b45d919816ccaa2b762df5120f72067"); - } - } - - @Test - public void deActivateNssi() throws Exception { - NssmfInfo nssmf = new NssmfInfo(); - nssmf.setUserName("nssmf-user"); - nssmf.setPassword("nssmf-pass"); - nssmf.setPort("8080"); - nssmf.setIpAddress("127.0.0.1"); - - NssiResponse nssiRes = new NssiResponse(); - nssiRes.setJobId("4b45d919816ccaa2b762df5120f72067"); - - TokenResponse token = new TokenResponse(); - token.setAccessToken("7512eb3feb5249eca5ddd742fedddd39"); - token.setExpires(1800); - - postStream = new ByteArrayInputStream(marshal(nssiRes).getBytes(UTF_8)); - tokenStream = new ByteArrayInputStream(marshal(token).getBytes(UTF_8)); - - ActDeActNssi act = new ActDeActNssi(); - act.setNsiId("NSI-M-001-HDBNJ-NSMF-01-A-ZX"); - act.setNssiId("NSSI-C-001-HDBNJ-NSSMF-01-A-ZX"); - - NssmfAdapterNBIRequest nbiRequest = createNbiRequest(CORE); - nbiRequest.setActDeActNssi(act); - - createCommonMock(200, nssmf); - ResponseEntity res = nssiManagerService.deActivateNssi(nbiRequest, "001-100001"); - assertNotNull(res); - assertNotNull(res.getBody()); - NssiResponse allRes = unMarshal(res.getBody().toString(), NssiResponse.class); - assertEquals(allRes.getJobId(), "4b45d919816ccaa2b762df5120f72067"); - } - - @Test - public void testNssmfRequest() throws ApplicationException { - NssmfRequest nssmfRequest = new NssmfRequest(); - String sst = marshal(nssmfRequest); - System.out.println(sst); - } - - @Test - public void queryCnAllocateJobStatus() throws Exception { - queryJobStatus(CORE, ActionType.ALLOCATE.toString()); - } - - @Test - public void queryCnActivateJobStatus() throws Exception { - queryJobStatus(CORE, ActionType.ACTIVATE.toString()); - } - - @Test - public void queryCnDeActivateJobStatus() throws Exception { - queryJobStatus(CORE, ActionType.DEACTIVATE.toString()); - } - - @Test - public void queryAnJobStatus() throws Exception { - queryJobStatus(ACCESS, ActionType.ALLOCATE.toString()); - } - - public void queryJobStatus(NetworkType domainType, String action) throws Exception { - NssmfInfo nssmf = new NssmfInfo(); - nssmf.setUserName("nssmf-user"); - nssmf.setPassword("nssmf-pass"); - nssmf.setPort("8080"); - nssmf.setIpAddress("127.0.0.1"); - - JobStatusResponse jobStatusResponse = new JobStatusResponse(); - ResponseDescriptor descriptor = new ResponseDescriptor(); - descriptor.setResponseId("7512eb3feb5249eca5ddd742fedddd39"); - descriptor.setProgress(100); - descriptor.setStatusDescription("Initiating VNF Instance"); - descriptor.setStatus("FINISHED"); - jobStatusResponse.setResponseDescriptor(descriptor); - - TokenResponse token = new TokenResponse(); - token.setAccessToken("7512eb3feb5249eca5ddd742fedddd39"); - token.setExpires(1800); - - postStream = new ByteArrayInputStream(marshal(jobStatusResponse).getBytes(UTF_8)); - tokenStream = new ByteArrayInputStream(marshal(token).getBytes(UTF_8)); - - ResourceOperationStatus operationStatus = new ResourceOperationStatus(); - operationStatus.setOperationId("4b45d919816ccaa2b762df5120f72067"); - operationStatus.setResourceTemplateUUID("8ee5926d-720b-4bb2-86f9-d20e921c143b"); - operationStatus.setServiceId("NSI-M-001-HDBNJ-NSMF-01-A-ZX"); - operationStatus.setOperType(action); - - NssmfAdapterNBIRequest nbiRequest = createNbiRequest(domainType); - nbiRequest.setResponseId("7512eb3feb5249eca5ddd742fedddd39"); - List optional = new ArrayList<>(); - optional.add(operationStatus); - - doAnswer(invocation -> optional).when(repository).findByServiceIdAndOperationId(any(), any()); - - createCommonMock(200, nssmf); - - ResponseEntity res = nssiManagerService.queryJobStatus(nbiRequest, "4b45d919816ccaa2b762df5120f72067"); - assertNotNull(res); - assertNotNull(res.getBody()); - JobStatusResponse allRes = unMarshal(res.getBody().toString(), JobStatusResponse.class); - assertEquals(allRes.getResponseDescriptor().getProgress(), 100); - assertEquals(allRes.getResponseDescriptor().getStatus(), "FINISHED"); - if (!domainType.equals(ACCESS)) { - assertEquals(allRes.getResponseDescriptor().getResponseId(), "7512eb3feb5249eca5ddd742fedddd39"); - } - - } - - @Test - public void queryNSSISelectionCapability() throws Exception { - - NssmfAdapterNBIRequest nbiRequest = createNbiRequest(CORE); - ResponseEntity res = nssiManagerService.queryNSSISelectionCapability(nbiRequest); - assertNotNull(res); - assertNotNull(res.getBody()); - Map allRes = unMarshal(res.getBody().toString(), Map.class); - assertEquals(allRes.get("selection"), "NSMF"); - - System.out.println(res); - - nbiRequest.getEsrInfo().setVendor(NssmfAdapterConsts.ONAP_INTERNAL_TAG); - res = nssiManagerService.queryNSSISelectionCapability(nbiRequest); - assertNotNull(res); - assertNotNull(res.getBody()); - allRes = unMarshal(res.getBody().toString(), Map.class); - assertEquals(allRes.get("selection"), "NSSMF"); - - System.out.println(res); - - nbiRequest.getEsrInfo().setNetworkType(NetworkType.ACCESS); - res = nssiManagerService.queryNSSISelectionCapability(nbiRequest); - assertNotNull(res); - assertNotNull(res.getBody()); - allRes = unMarshal(res.getBody().toString(), Map.class); - assertEquals(allRes.get("selection"), "NSSMF"); - - System.out.println(res); - } - - private NssmfAdapterNBIRequest createNbiRequest(NetworkType networkType) { - NssmfAdapterNBIRequest nbiRequest = new NssmfAdapterNBIRequest(); - EsrInfo esrInfo = new EsrInfo(); - switch (networkType) { - case CORE: - esrInfo.setVendor("huawei"); - esrInfo.setNetworkType(CORE); - break; - case TRANSPORT: - esrInfo.setVendor("ONAP_internal"); - esrInfo.setNetworkType(TRANSPORT); - break; - case ACCESS: - esrInfo.setVendor("huawei"); - esrInfo.setNetworkType(ACCESS); - break; - } - ServiceInfo serviceInfo = new ServiceInfo(); - serviceInfo.setServiceUuid("8ee5926d-720b-4bb2-86f9-d20e921c143b"); - serviceInfo.setServiceInvariantUuid("e75698d9-925a-4cdd-a6c0-edacbe6a0b51"); - serviceInfo.setGlobalSubscriberId("5GCustomer"); - serviceInfo.setServiceType("5G"); - serviceInfo.setNsiId("NSI-M-001-HDBNJ-NSMF-01-A-ZX"); - nbiRequest.setEsrInfo(esrInfo); - nbiRequest.setServiceInfo(serviceInfo); - return nbiRequest; - } - - @Test - public void querySubnetCapability() { - NssmfAdapterNBIRequest nbiRequest = createNbiRequest(CORE); - - QuerySubnetCapability subnetCapabilityQuery = new QuerySubnetCapability(); - List subnetTypes = Arrays.asList("CN"); - subnetCapabilityQuery.setSubnetTypes(subnetTypes); - nbiRequest.setSubnetCapabilityQuery(subnetCapabilityQuery); - ResponseEntity res = nssiManagerService.querySubnetCapability(nbiRequest); - assertNotNull(res); - assertNotNull(res.getBody()); - } -} diff --git a/src/test/java/org/onap/so/adapters/nssmf/util/RestUtilTest.java b/src/test/java/org/onap/so/adapters/nssmf/util/RestUtilTest.java deleted file mode 100644 index ddc9371..0000000 --- a/src/test/java/org/onap/so/adapters/nssmf/util/RestUtilTest.java +++ /dev/null @@ -1,161 +0,0 @@ -/*- - * ============LICENSE_START======================================================= - * ONAP - SO - * ================================================================================ - # Copyright (c) 2020, CMCC Technologies Co., Ltd. - # - # Licensed under the Apache License, Version 2.0 (the "License") - # you may not use this file except in compliance with the License. - # You may obtain a copy of the License at - # - # http://www.apache.org/licenses/LICENSE-2.0 - # - # Unless required by applicable law or agreed to in writing, software - # distributed under the License is distributed on an "AS IS" BASIS, - # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - # See the License for the specific language governing permissions and - # limitations under the License. - * ============LICENSE_END========================================================= - */ -package org.onap.so.adapters.nssmf.util; - -import org.apache.commons.lang3.StringUtils; -import org.apache.http.Header; -import org.apache.http.HttpEntity; -import org.apache.http.HttpResponse; -import org.apache.http.StatusLine; -import org.apache.http.client.HttpClient; -import org.apache.http.client.methods.HttpRequestBase; -import org.hibernate.jdbc.Expectations; -import org.junit.Before; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.mockito.Mock; -import org.mockito.Mockito; -import org.mockito.MockitoAnnotations; -import org.mockito.Spy; -import org.mockito.stubbing.Answer; -import org.onap.aai.domain.yang.ServiceInstance; -import org.onap.so.adapters.nssmf.entity.NssmfInfo; -import org.onap.so.adapters.nssmf.entity.RestResponse; -import org.onap.so.adapters.nssmf.enums.HttpMethod; -import org.onap.so.adapters.nssmf.exceptions.ApplicationException; -import org.onap.so.adapters.nssmf.extclients.aai.AaiServiceProvider; -import org.onap.so.beans.nsmf.EsrInfo; -import org.onap.so.beans.nsmf.ServiceInfo; -import org.springframework.test.context.junit4.SpringRunner; -import java.io.IOException; -import java.io.InputStream; -import java.lang.reflect.Field; -import java.util.Optional; -import static org.junit.Assert.assertNotNull; -import static org.mockito.ArgumentMatchers.any; -import static org.mockito.Mockito.*; -import static org.mockito.MockitoAnnotations.initMocks; -import static org.onap.so.beans.nsmf.NetworkType.CORE; - -@RunWith(SpringRunner.class) -public class RestUtilTest { - - - @Mock - public HttpClient httpClient; - @Mock - private HttpResponse tokenResponse; - - @Mock - private HttpEntity tokenEntity; - - private InputStream tokenStream; - - @Mock - private StatusLine statusLine; - - @Mock - private AaiServiceProvider aaiSvcProv; - - @Before - public void setUp() throws Exception { - MockitoAnnotations.initMocks(this); - - // Field nssmfManagerService = controller.getClass().getDeclaredField("nssmfManagerService"); - // nssmfManagerService.setAccessible(true); - // nssmfManagerService.set(controller, this.nssmfManagerService); - } - - private void commonMock() throws IOException, ApplicationException { - - when(tokenResponse.getEntity()).thenReturn(tokenEntity); - when(tokenResponse.getStatusLine()).thenReturn(statusLine); - - when(tokenEntity.getContent()).thenReturn(tokenStream); - - when(httpClient.execute(any())).thenReturn(tokenResponse); - - // Mockito.doReturn(httpClient).when(restUtil).getHttpsClient(); - } - - @Test - public void sendTest() throws Exception { - String url = "http://127.0.0.1:8080"; - HttpMethod method = HttpMethod.PUT; - String content = "body content"; - commonMock(); - - RestUtil restUtil = new RestUtil(); - RestUtil util = Mockito.spy(restUtil); - doReturn(httpClient).when(util).getHttpsClient(); - - RestResponse restResponse = util.send(url, method, content, null); - assertNotNull(restResponse); - } - - @Test - public void serviceInstanceOperationTest() throws NoSuchFieldException, IllegalAccessException { - - RestUtil restUtil = new RestUtil(); - - Field aaiSvcProv = restUtil.getClass().getDeclaredField("aaiSvcProv"); - aaiSvcProv.setAccessible(true); - aaiSvcProv.set(restUtil, this.aaiSvcProv); - - ServiceInstance instance = new ServiceInstance(); - ServiceInfo info = getServiceInfo(); - restUtil.createServiceInstance(instance, info); - restUtil.getServiceInstance(info); - restUtil.deleteServiceInstance(info); - } - - @Test - public void getNssmfHostTest() throws NoSuchFieldException, IllegalAccessException { - RestUtil restUtil = new RestUtil(); - - Field aaiSvcProv = restUtil.getClass().getDeclaredField("aaiSvcProv"); - aaiSvcProv.setAccessible(true); - aaiSvcProv.set(restUtil, this.aaiSvcProv); - try { - restUtil.getNssmfHost(getEsrInfo()); - } catch (ApplicationException ex) { - System.out.println(ex.getErrorMsg()); - } - } - - - private EsrInfo getEsrInfo() { - EsrInfo esrInfo = new EsrInfo(); - esrInfo.setVendor("huawei"); - esrInfo.setNetworkType(CORE); - return esrInfo; - } - - private ServiceInfo getServiceInfo() { - ServiceInfo serviceInfo = new ServiceInfo(); - serviceInfo.setServiceUuid("8ee5926d-720b-4bb2-86f9-d20e921c143b"); - serviceInfo.setServiceInvariantUuid("e75698d9-925a-4cdd-a6c0-edacbe6a0b51"); - serviceInfo.setGlobalSubscriberId("5GCustomer"); - serviceInfo.setServiceType("5G"); - serviceInfo.setNsiId("NSI-M-001-HDBNJ-NSMF-01-A-ZX"); - return serviceInfo; - } - -} diff --git a/src/test/resources/application-test.yaml b/src/test/resources/application-test.yaml deleted file mode 100644 index fa323e8..0000000 --- a/src/test/resources/application-test.yaml +++ /dev/null @@ -1,60 +0,0 @@ - -aai: - auth: 2A11B07DB6214A839394AA1EC5844695F5114FC407FF5422625FB00175A3DCB8A1FF745F22867EFA72D5369D599BBD88DA8BED4233CF5586 - endpoint: https://aai.onap:30233 -logging: - path: logs - -spring: - datasource: - username: root - password: 123456 - driver-class-name: org.mariadb.jdbc.Driver - initialization-mode: always - url: jdbc:mariadb://49.232.146.162:8989/requestdb - jpa: - generate-ddl: false - show-sql: false - hibernate: - ddl-auto: none - naming-strategy: org.hibernate.cfg.ImprovedNamingStrategy - enable-lazy-load-no-trans: true - database-platform: org.hibernate.dialect.MySQL5InnoDBDialect - security: - usercredentials: - - username: bpel - password: '$2a$10$Fh9ffgPw2vnmsghsRD3ZauBL1aKXebigbq3BB1RPWtE62UDILsjke' - role: BPEL-Client - - username: mso_admin - password: '$2a$10$Fh9ffgPw2vnmsghsRD3ZauBL1aKXebigbq3BB1RPWtE62UDILsjke' - role: ACTUATOR -server: - port: 8080 - tomcat: - max-threads: 50 - -mso: - key: 07a7159d3bf51a0e53be7a8f89699be7 - site-name: localSite - logPath: ./logs/nssmf - adapters: - requestDb: - endpoint: https://so-request-db-adapter.{{ include "common.namespace" . }}:8083 - auth: Basic YnBlbDpwYXNzd29yZDEk - infra: - endpoint: https://so.{{ include "common.namespace" . }}:8080 - auth: Basic SW5mcmFQb3J0YWxDbGllbnQ6cGFzc3dvcmQxJA== - -#Actuator -management: - endpoints: - web: - base-path: /manage - exposure: - include: "*" - metrics: - se-global-registry: false - export: - prometheus: - enabled: true # Whether exporting of metrics to Prometheus is enabled. - step: 1m # Step size (i.e. reporting frequency) to use. \ No newline at end of file diff --git a/version.properties b/version.properties old mode 100644 new mode 100755 -- cgit 1.2.3-korg