From: BT2983 Date: Fri, 17 Aug 2018 03:48:07 +0000 (-0600) Subject: Naming micro-service code. X-Git-Tag: 0.3.0~100^2 X-Git-Url: https://gerrit.onap.org/r/gitweb?a=commitdiff_plain;h=9cbcdacf01abd92ca0952410760d3d8545b23ad8;p=ccsdk%2Fapps.git Naming micro-service code. Docker updates and tests. Change-Id: Iba669453c4035290441c757f5b1c673ab41213d6 Issue-ID: CCSDK-342 Signed-off-by: BT2983 --- diff --git a/ms/neng/.classpath b/ms/neng/.classpath index 2fd27b36..1272921b 100644 --- a/ms/neng/.classpath +++ b/ms/neng/.classpath @@ -1,43 +1,43 @@ - + - + - + - + - + - + - + - + @@ -57,5 +57,5 @@ - + diff --git a/ms/neng/.project b/ms/neng/.project index e3af4837..2ede1b82 100644 --- a/ms/neng/.project +++ b/ms/neng/.project @@ -26,12 +26,12 @@ - org.eclipse.m2e.core.maven2Builder + net.sf.eclipsecs.core.CheckstyleBuilder - net.sf.eclipsecs.core.CheckstyleBuilder + org.eclipse.m2e.core.maven2Builder diff --git a/ms/neng/opt/etc/config/application-dbless.properties b/ms/neng/opt/etc/config/application-dbless.properties new file mode 100644 index 00000000..3ac94d18 --- /dev/null +++ b/ms/neng/opt/etc/config/application-dbless.properties @@ -0,0 +1,42 @@ +#============LICENSE_START======================================================= +# ONAP : CCSDK.apps +# ================================================================================ +# Copyright (C) 2018 AT&T Intellectual Property. 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========================================================= + +#========================================================================= +# +# Configuration used for running the application from your IDE, without a DB, for testing. +# +# It uses an in-memory DB to support database related functions. +# +#========================================================================= +datasource.db.driver-class-name=org.h2.Driver +datasource.db.url=jdbc:h2:mem:tests;DB_CLOSE_DELAY=-1; +datasource.db.username=TBD +datasource.db.password=TBD +jpa.hibernate.ddl-auto=none +jpa.show-sql=true + +policymgr.clientAuth=Basic TBD +policymgr.basicAuth=Basic TBD +policymgr.url=https://TBD/pdp/api/getConfig +policymgr.environment=TEST +policymgr.ecompRequestId=xx + +aai.certPassword=TBD +aai.cert=opt/aai/keystore/TBD +aai.uriBase=https://TBD/aai/v13/ +aai.fromAppId=namegen-mS diff --git a/ms/neng/opt/etc/config/application-standalone.properties b/ms/neng/opt/etc/config/application-standalone.properties new file mode 100644 index 00000000..07ad0ee2 --- /dev/null +++ b/ms/neng/opt/etc/config/application-standalone.properties @@ -0,0 +1,44 @@ +#============LICENSE_START======================================================= +# ONAP : CCSDK.apps +# ================================================================================ +# Copyright (C) 2018 AT&T Intellectual Property. 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========================================================= + +#========================================================================= +# +# Configuration used for running the application stand-alone, in a docker +# container, without a DB. +# +# It uses an in-memory DB for supporting database related functions. +# +#========================================================================= +datasource.db.driver-class-name=org.h2.Driver +datasource.db.url=jdbc:h2:mem:tests;DB_CLOSE_DELAY=-1; +datasource.db.username=${neng_db_user} +datasource.db.password=${neng_db_pass} +jpa.hibernate.ddl-auto=none +jpa.show-sql=true + +policymgr.clientAuth=Basic TBD +policymgr.basicAuth=Basic TBD +policymgr.url=${policymgr_url} +policymgr.environment=TEST +policymgr.ecompRequestId=xx + +aai.certPassword=${aai_cert_pass} +aai.cert=opt/aai/keystore/TBD +aai.uriBase=${aai_uribase} +aai.fromAppId=namegen-mS + diff --git a/ms/neng/opt/etc/config/application.properties b/ms/neng/opt/etc/config/application.properties new file mode 100644 index 00000000..71d7a5f5 --- /dev/null +++ b/ms/neng/opt/etc/config/application.properties @@ -0,0 +1,47 @@ +#============LICENSE_START======================================================= +# ONAP : CCSDK.apps +# ================================================================================ +# Copyright (C) 2018 AT&T Intellectual Property. 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========================================================= + +#========================================================================= +# +# Main configuration for the application, used always. +# +# This can be overridden with entries in the 'application-xyz.properties' file +# when using a specific spring profile 'xyz'. +# +#========================================================================= + +datasource.db.driver-class-name=com.mysql.jdbc.Driver + +endpoints.beans.id=springbeans +endpoints.beans.sensitive=false + +logging.level.liquibase=DEBUG + +liquibase.changeLog=classpath:/db/changelog/db.changelog-master.xml + +management.security.enabled=false + +server.contextPath=/web + +#The max number of active threads in this pool +server.tomcat.max-threads=200 + +#The minimum number of threads always kept alive +server.tomcat.min-spare-threads=25 + +spring.jersey.type=filter diff --git a/ms/neng/opt/etc/config/logback.xml b/ms/neng/opt/etc/config/logback.xml new file mode 100644 index 00000000..6e0ea863 --- /dev/null +++ b/ms/neng/opt/etc/config/logback.xml @@ -0,0 +1,40 @@ + + + + + + + + + + + + + + + ${defaultPattern} + + + + + + diff --git a/ms/neng/opt/etc/config/system.properties b/ms/neng/opt/etc/config/system.properties new file mode 100644 index 00000000..d8fa4d45 --- /dev/null +++ b/ms/neng/opt/etc/config/system.properties @@ -0,0 +1,35 @@ +#============LICENSE_START======================================================= +# ONAP : CCSDK.apps +# ================================================================================ +# Copyright (C) 2018 AT&T Intellectual Property. 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========================================================= + +#========================================================================= +# +# system configuration for the application. +# +#========================================================================= + +logging.config=opt/etc/config/logback.xml + +# Spring configuration files +spring.config.location=opt/etc/config/ +spring.config.name=application + +appName=networkelementnamegen + +#Modify the below system property +info.build.version=2018.10.01 +javax.net.ssl.trustStore=opt/etc/truststore/truststore.jks diff --git a/ms/neng/pom.xml b/ms/neng/pom.xml index a282f2cc..d3d4c05e 100644 --- a/ms/neng/pom.xml +++ b/ms/neng/pom.xml @@ -32,8 +32,8 @@ org.onap.ccsdk.apps.ms.neng.service.rs 1.8 4.3.8.RELEASE - 1.5.3.RELEASE - TBD:5100 + 1.5.6.RELEASE + nexus3.onap.org:10003 local TBD TBD @@ -52,6 +52,8 @@ ${basedir}/target/jacoco-it.exec java ms-networkelementnamegen + 0.3.0 + 0.2.4 @@ -74,6 +76,39 @@ true + + + blackduck + + + blackduck-scan + + + + + + com.blackducksoftware.integration + hub-maven-plugin + 1.4.0 + false + + ${project.name} + ${project.basedir} + + + + create-bdio-file + package + + createHubOutput + + + + + + + + @@ -189,12 +224,10 @@ org.springframework spring-aop ${spring.version} - test org.springframework spring-beans - ${spring.version} org.springframework @@ -339,52 +372,68 @@ org.codehaus.mojo - com.spotify + io.fabric8 docker-maven-plugin - 0.4.11 + false - ${docker.registry}/org.onap.ccsdk.apps/${serviceArtifactName} - src/main/docker - docker-hub - https://${docker.registry} - - ${project.version} - latest - - true - - - / - ${project.build.directory} - ${project.build.finalName}.jar - - - / - ${project.build.directory} - opt/etc/config/* - - - / - ${project.build.directory} - opt/etc/keystore/* - - - / - ${project.build.directory} - opt/etc/truststore/* - - - / - ${project.build.directory} - opt/aai/keystore/* - - - / - ${project.build.directory} - etc/* - - + false + + + + onap/ccsdk-apps-ms-neng + + try + ${basedir}/src/main/docker + Dockerfile + + ${project.version} + + + / + + + + ${project.build.directory}/${build.finalName}.${project.packaging} + + + + ${basedir}/opt/etc + opt/etc + + ** + + + + + + + + org.springframework.boot @@ -441,6 +490,62 @@ + + + + + org.eclipse.m2e + lifecycle-mapping + 1.0.0 + + + + + + + org.apache.maven.plugins + + + maven-checkstyle-plugin + + + [2.17,) + + + check + + + + + + + + + + org.codehaus.mojo + + + properties-maven-plugin + + + [1.0.0,) + + + + set-system-properties + + + + + + + + + + + + + diff --git a/ms/neng/src/main/docker/Dockerfile b/ms/neng/src/main/docker/Dockerfile index db87c4c0..bcdaaef2 100644 --- a/ms/neng/src/main/docker/Dockerfile +++ b/ms/neng/src/main/docker/Dockerfile @@ -1,10 +1,32 @@ -FROM TBD:TBD/TBD/TBD/alpine-java:8_jdk +#============LICENSE_START======================================================= +# ONAP : CCSDK.apps +# ================================================================================ +# Copyright (C) 2018 AT&T Intellectual Property. 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========================================================= + +#================================================================================ +# Docker setup for the micro-service +#================================================================================ +FROM onap/ccsdk-ubuntu-image:latest VOLUME /tmp -ADD NetworkElementNameGen.jar app.jar +ADD maven/NetworkElementNameGen.jar app.jar VOLUME /opt/etc -VOLUME /opt/aai -ADD /opt/etc/ /opt/etc/ -ADD /opt/aai/ /opt/aai/ +#VOLUME /opt/aai +ADD maven/opt/etc/ /opt/etc/ +#ADD /opt/aai/ /opt/aai/ ADD startService.sh /startService.sh RUN chmod 700 /startService.sh -ENTRYPOINT ./startService.sh \ No newline at end of file +ENTRYPOINT sh /startService.sh +EXPOSE 8080 diff --git a/ms/neng/src/main/docker/startService.sh b/ms/neng/src/main/docker/startService.sh index e690311c..2e3e454c 100644 --- a/ms/neng/src/main/docker/startService.sh +++ b/ms/neng/src/main/docker/startService.sh @@ -1,9 +1,29 @@ #!/bin/sh +#============LICENSE_START======================================================= +# ONAP : CCSDK.apps +# ================================================================================ +# Copyright (C) 2018 AT&T Intellectual Property. 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========================================================= + touch /app.jar -app_args=-Dspring.profiles.active=${SPRING_PROFILE} -app_args=${app_args}" -Dpolicymgr_url="${POLICYMGR_URL}" -Dinstar_aaf_enc_pass="${AAF_PASS_ENC} -app_args=${app_args}" -Daai_cert_pass="${AAI_CERT_PASSWORD}" -Daai_uribase="${AAI_URI_BASE} -app_args=${app_args}" -Dnwelgen_db_user="${NWEG_DB_USER}" -Dnwelgen_db_pass="${NWEG_DB_PASS}" -Dnwelgen_db_url="${NWEG_DB_URL} -echo "app_args ="${app_args} -echo "app_args ="${app_args} -java -Djava.security.egd=file:/dev/./urandom ${app_args} -Xms1024m -Xmx1024m -jar /app.jar +APP_ARGS=-Dspring.profiles.active=${SPRING_PROFILE} +APP_ARGS=${APP_ARGS}" -Dpolicymgr_url="${POLICYMGR_URL}" -Dinstar_aaf_enc_pass="${AAF_PASS_ENC} +APP_ARGS=${APP_ARGS}" -Daai_cert_pass="${AAI_CERT_PASSWORD}" -Daai_uribase="${AAI_URI_BASE} +APP_ARGS=${APP_ARGS}" -Dneng_db_user="${NENG_DB_USER}" -Dneng_db_pass="${NENG_DB_PASS} +APP_ARGS=${APP_ARGS}" -Dneng_db_url="${NENG_DB_URL} +APP_ARGS=${APP_ARGS}" -cp /opt/etc/config" + +echo "APP_ARGS ="${APP_ARGS} +java -Djava.security.egd=file:/dev/./urandom ${APP_ARGS} -Xms1024m -Xmx1024m -jar /app.jar --spring.config.location=/opt/etc/config/ > /tmp/app.out 2> /tmp/app.err diff --git a/ms/neng/src/main/java/org/onap/ccsdk/apps/ms/neng/core/Application.java b/ms/neng/src/main/java/org/onap/ccsdk/apps/ms/neng/core/Application.java index e95fb7eb..6efa94de 100644 --- a/ms/neng/src/main/java/org/onap/ccsdk/apps/ms/neng/core/Application.java +++ b/ms/neng/src/main/java/org/onap/ccsdk/apps/ms/neng/core/Application.java @@ -23,10 +23,7 @@ package org.onap.ccsdk.apps.ms.neng.core; import java.util.Arrays; import org.springframework.boot.CommandLineRunner; import org.springframework.boot.SpringApplication; -import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import org.springframework.boot.autoconfigure.SpringBootApplication; -import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration; -import org.springframework.boot.autoconfigure.orm.jpa.HibernateJpaAutoConfiguration; import org.springframework.boot.builder.SpringApplicationBuilder; import org.springframework.boot.web.support.SpringBootServletInitializer; import org.springframework.context.ApplicationContext; @@ -40,7 +37,6 @@ import org.springframework.scheduling.annotation.EnableAsync; @SpringBootApplication @ComponentScan(basePackages = "org.onap.ccsdk") @EnableAsync -@EnableAutoConfiguration(exclude = {DataSourceAutoConfiguration.class, HibernateJpaAutoConfiguration.class}) public class Application extends SpringBootServletInitializer { /** * Configures the application. diff --git a/ms/neng/src/main/java/org/onap/ccsdk/apps/ms/neng/core/persistence/ApplicationConfig.java b/ms/neng/src/main/java/org/onap/ccsdk/apps/ms/neng/core/persistence/ApplicationConfig.java index d69c270c..f68add72 100644 --- a/ms/neng/src/main/java/org/onap/ccsdk/apps/ms/neng/core/persistence/ApplicationConfig.java +++ b/ms/neng/src/main/java/org/onap/ccsdk/apps/ms/neng/core/persistence/ApplicationConfig.java @@ -20,16 +20,23 @@ package org.onap.ccsdk.apps.ms.neng.core.persistence; +import java.util.Arrays; import java.util.HashMap; import java.util.Map; +import java.util.Properties; +import java.util.stream.StreamSupport; import javax.sql.DataSource; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.autoconfigure.domain.EntityScan; import org.springframework.boot.autoconfigure.orm.jpa.JpaProperties; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.boot.orm.jpa.EntityManagerFactoryBuilder; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; +import org.springframework.core.env.AbstractEnvironment; +import org.springframework.core.env.EnumerablePropertySource; import org.springframework.core.env.Environment; +import org.springframework.core.env.MutablePropertySources; import org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor; import org.springframework.data.jpa.repository.config.EnableJpaRepositories; import org.springframework.jdbc.datasource.DriverManagerDataSource; @@ -44,17 +51,32 @@ import org.springframework.transaction.annotation.EnableTransactionManagement; */ @Configuration @EnableJpaRepositories(basePackages = "org.onap.ccsdk.apps.ms.neng.persistence.repository") +@EntityScan("org.onap.ccsdk.apps.ms.neng.persistence.entity") @EnableTransactionManagement public class ApplicationConfig { @Autowired private Environment environment; + @SuppressWarnings("rawtypes") + void debugProperties() { + Properties props = new Properties(); + MutablePropertySources propSrcs = ((AbstractEnvironment)this.environment).getPropertySources(); + StreamSupport.stream(propSrcs.spliterator(), false) + .filter(ps -> ps instanceof EnumerablePropertySource) + .map(ps -> ((EnumerablePropertySource) ps).getPropertyNames()) + .flatMap(Arrays::stream) + .forEach(propName -> props.setProperty(propName, this.environment.getProperty(propName))); + System.out.println("Properties: " + props); + } + /** * Builds and returns the DataSource used for persisting the data managed by this micro-service. */ @Bean public DataSource dataSource() { + debugProperties(); + DriverManagerDataSource dataSource = new DriverManagerDataSource(); dataSource.setDriverClassName(environment.getProperty("datasource.db.driver-class-name")); dataSource.setUrl(environment.getProperty("datasource.db.url")); @@ -133,9 +155,9 @@ public class ApplicationConfig { JpaVendorAdapter jpaVendAdapter, Map hibProps, DataSource dataSource) { + debugProperties(); EntityManagerFactoryBuilder factBuilder = new EntityManagerFactoryBuilder(jpaVendAdapter, hibProps, null); - String pkgToScan = environment.getProperty("entitymanager.packagesToScan"); + String pkgToScan = "org.onap.ccsdk.apps.ms.neng.persistence.entity"; return factBuilder.dataSource(dataSource).packages(pkgToScan).build(); } - } diff --git a/ms/neng/src/main/java/org/onap/ccsdk/apps/ms/neng/core/service/SpringServiceImpl.java b/ms/neng/src/main/java/org/onap/ccsdk/apps/ms/neng/core/service/SpringServiceImpl.java index 24736b2f..79e46575 100644 --- a/ms/neng/src/main/java/org/onap/ccsdk/apps/ms/neng/core/service/SpringServiceImpl.java +++ b/ms/neng/src/main/java/org/onap/ccsdk/apps/ms/neng/core/service/SpringServiceImpl.java @@ -168,18 +168,15 @@ public class SpringServiceImpl implements SpringService { */ @Override public void addPolicy(Object request) throws Exception { - try { - @SuppressWarnings("unchecked") - Map policyData = (Map)request; - PolicyDetails pd = new PolicyDetails(); - pd.setPolicyName((String) policyData.get("policyName")); - ObjectMapper objectmapper = new ObjectMapper(); - log.info(objectmapper.writeValueAsString(policyData.get("policyValue"))); - pd.setPolicyResponse(objectmapper.writeValueAsString(policyData.get("policyValue"))); - policyDetailsRepository.save(pd); - } catch (Exception e) { - log.warning(e.getMessage()); - } + @SuppressWarnings("unchecked") + Map policyData = (Map)request; + PolicyDetails pd = new PolicyDetails(); + String name = (String) policyData.get("policyName"); + pd.setPolicyName(name); + ObjectMapper objectmapper = new ObjectMapper(); + log.info(objectmapper.writeValueAsString(policyData.get("policyValue"))); + pd.setPolicyResponse((String)policyData.get("policyValue")); + policyDetailsRepository.save(pd); } void buildUnAssignResponse(List generatedNames, NameGenResponse response) { diff --git a/ms/neng/src/main/java/org/onap/ccsdk/apps/ms/neng/core/service/rs/RestService.java b/ms/neng/src/main/java/org/onap/ccsdk/apps/ms/neng/core/service/rs/RestService.java index f8da1eee..8319a545 100644 --- a/ms/neng/src/main/java/org/onap/ccsdk/apps/ms/neng/core/service/rs/RestService.java +++ b/ms/neng/src/main/java/org/onap/ccsdk/apps/ms/neng/core/service/rs/RestService.java @@ -24,7 +24,6 @@ import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiResponse; import io.swagger.annotations.ApiResponses; -import java.util.List; import java.util.Map; import javax.validation.Valid; import javax.ws.rs.DELETE; @@ -76,9 +75,9 @@ public interface RestService { *

This is not used by clients -- it is here to help with diagnostics. */ @GET - @Path("/v1/getpolicyresponse/{policyName}") + @Path("/v1/getpolicyresponse") @Produces({MediaType.APPLICATION_JSON}) - public List> getPolicyResponse(@QueryParam("policyName") String policyName) throws Exception; + public Response getPolicyResponse(@QueryParam("policyName") String policyName) throws Exception; /** * API to add a naming policy to the database cache in this micro-service. diff --git a/ms/neng/src/main/java/org/onap/ccsdk/apps/ms/neng/core/service/rs/RestServiceImpl.java b/ms/neng/src/main/java/org/onap/ccsdk/apps/ms/neng/core/service/rs/RestServiceImpl.java index ed5723b6..bc8cab42 100644 --- a/ms/neng/src/main/java/org/onap/ccsdk/apps/ms/neng/core/service/rs/RestServiceImpl.java +++ b/ms/neng/src/main/java/org/onap/ccsdk/apps/ms/neng/core/service/rs/RestServiceImpl.java @@ -20,10 +20,7 @@ package org.onap.ccsdk.apps.ms.neng.core.service.rs; -import com.fasterxml.jackson.core.type.TypeReference; -import com.fasterxml.jackson.databind.ObjectMapper; import java.util.HashMap; -import java.util.List; import java.util.Map; import java.util.logging.Logger; import javax.validation.Valid; @@ -90,13 +87,11 @@ public class RestServiceImpl implements RestService { * API to return naming policy cached in this micro-service. */ @Override - public List> getPolicyResponse(String policyName) throws Exception { + public Response getPolicyResponse(String policyName) throws Exception { + log.info("get-policy: " + policyName); + PolicyDetails policyDetails = service.getPolicyDetails(policyName); - List> policyResponse = null; - ObjectMapper mapper = new ObjectMapper(); - policyResponse = mapper.readValue(policyDetails.getPolicyResponse(), - new TypeReference>>() {}); - return policyResponse; + return Response.ok().entity(policyDetails.getPolicyResponse()).build(); } /** @@ -109,6 +104,7 @@ public class RestServiceImpl implements RestService { service.addPolicy(request); respMap.put("status", "Policy added successfully"); } catch (Exception e) { + log.warning(e.getMessage()); respMap.put("status", "Failed"); } return respMap; diff --git a/ms/neng/src/main/java/org/onap/ccsdk/apps/ms/neng/service/extinf/impl/PolicyFinderServiceDbImpl.java b/ms/neng/src/main/java/org/onap/ccsdk/apps/ms/neng/service/extinf/impl/PolicyFinderServiceDbImpl.java index d283b362..9cb434ff 100644 --- a/ms/neng/src/main/java/org/onap/ccsdk/apps/ms/neng/service/extinf/impl/PolicyFinderServiceDbImpl.java +++ b/ms/neng/src/main/java/org/onap/ccsdk/apps/ms/neng/service/extinf/impl/PolicyFinderServiceDbImpl.java @@ -49,6 +49,9 @@ public class PolicyFinderServiceDbImpl extends PolicyFinderServiceImpl { ObjectMapper objectmapper = new ObjectMapper(); objectmapper.enable(DeserializationFeature.ACCEPT_EMPTY_STRING_AS_NULL_OBJECT); PolicyDetails policyDetails = policyDetailsRepo.findPolicyResponseByName(policyName); + if (policyDetails == null) { + throw new Exception("Unable to find the policy " + policyName); + } List> respObj = objectmapper.readValue(policyDetails.getPolicyResponse(), new TypeReference>>() {}); transformConfigObject(objectmapper, respObj); diff --git a/ms/neng/src/test/java/org/onap/ccsdk/apps/ms/neng/core/gen/NameGeneratorExcMissingData.java b/ms/neng/src/test/java/org/onap/ccsdk/apps/ms/neng/core/gen/NameGeneratorExcMissingDataTest.java similarity index 99% rename from ms/neng/src/test/java/org/onap/ccsdk/apps/ms/neng/core/gen/NameGeneratorExcMissingData.java rename to ms/neng/src/test/java/org/onap/ccsdk/apps/ms/neng/core/gen/NameGeneratorExcMissingDataTest.java index 4b1d1eac..d05644b8 100644 --- a/ms/neng/src/test/java/org/onap/ccsdk/apps/ms/neng/core/gen/NameGeneratorExcMissingData.java +++ b/ms/neng/src/test/java/org/onap/ccsdk/apps/ms/neng/core/gen/NameGeneratorExcMissingDataTest.java @@ -44,7 +44,7 @@ import org.onap.ccsdk.apps.ms.neng.core.validator.AaiNameValidator; import org.onap.ccsdk.apps.ms.neng.core.validator.DbNameValidator; @RunWith(MockitoJUnitRunner.class) -public class NameGeneratorExcMissingData { +public class NameGeneratorExcMissingDataTest { @Mock private PolicyParameters policyParams = mock(PolicyParameters.class); @Mock diff --git a/ms/neng/src/test/java/org/onap/ccsdk/apps/ms/neng/core/seq/TestSequenceGenerator.java b/ms/neng/src/test/java/org/onap/ccsdk/apps/ms/neng/core/seq/SequenceGeneratorTest.java similarity index 99% rename from ms/neng/src/test/java/org/onap/ccsdk/apps/ms/neng/core/seq/TestSequenceGenerator.java rename to ms/neng/src/test/java/org/onap/ccsdk/apps/ms/neng/core/seq/SequenceGeneratorTest.java index fcee4da0..23bbc7c0 100644 --- a/ms/neng/src/test/java/org/onap/ccsdk/apps/ms/neng/core/seq/TestSequenceGenerator.java +++ b/ms/neng/src/test/java/org/onap/ccsdk/apps/ms/neng/core/seq/SequenceGeneratorTest.java @@ -36,7 +36,7 @@ import org.onap.ccsdk.apps.ms.neng.persistence.repository.ServiceParameterReposi @RunWith(MockitoJUnitRunner.class) -public class TestSequenceGenerator { +public class SequenceGeneratorTest { @Mock private GeneratedNameRespository genNameRepo = mock(GeneratedNameRespository.class); @Mock diff --git a/ms/neng/src/test/java/org/onap/ccsdk/apps/ms/neng/core/service/SpringServiceIntTest.java b/ms/neng/src/test/java/org/onap/ccsdk/apps/ms/neng/core/service/SpringServiceIntTest.java index a1873692..c3815f43 100644 --- a/ms/neng/src/test/java/org/onap/ccsdk/apps/ms/neng/core/service/SpringServiceIntTest.java +++ b/ms/neng/src/test/java/org/onap/ccsdk/apps/ms/neng/core/service/SpringServiceIntTest.java @@ -33,6 +33,7 @@ import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; +import javax.ws.rs.core.Response; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; @@ -194,19 +195,15 @@ public class SpringServiceIntTest { restServiceImpl.releaseNetworkElementName(request); } - @Test - public void testRestGetPolicyResponse() throws Exception { - List> policyResponse = - restServiceImpl.getPolicyResponse("JQINSRIOV.Config_MS_SriovBigJson.1.xml"); - assertNotNull(policyResponse); - } - @Test public void testRestAddPolicyToDb() throws Exception { Map policy = new HashMap<>(); - policy.put("policyName", "policyname"); - policy.put("policyValue", "policyname"); + policy.put("policyName", "JQINSRIOV.Config_MS_SriovBigJson.1.xml"); + policy.put("policyValue", "some policy"); restServiceImpl.addPolicyToDb(policy); + + Response policyResponse = restServiceImpl.getPolicyResponse("JQINSRIOV.Config_MS_SriovBigJson.1.xml"); + assertNotNull(policyResponse); } @Test diff --git a/ms/neng/src/test/resources/application-test.properties b/ms/neng/src/test/resources/application-test.properties index ca8ac129..ae425c38 100644 --- a/ms/neng/src/test/resources/application-test.properties +++ b/ms/neng/src/test/resources/application-test.properties @@ -1,38 +1,13 @@ -info.build.artifact=@project.artifactId@ -info.build.name=@project.name@ -info.build.description=@project.description@ -info.build.version=@project.version@ - -spring.jersey.type=filter - -logging.level.root=info -logging.level.org.glassfish=info -logging.level.org.glassfish.jersey=info - -spring.autoconfigure.exclude=org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration,org.springframework.boot.autoconfigure.orm.jpa.HibernateJpaAutoConfiguration - -logging.pattern.console=%clr(%d{yyyy-MM-dd HH:mm:ss.SSS}){faint} %clr(%5p) %clr($ threadId: {PID:- }){magenta} %clr(---){faint} %clr([ hostname: %X{hostname} serviceName: %X{serviceName} version: %X{version} transactionId: %X{transactionId} requestTimeStamp: %X{requestTimestamp} responseTimeStamp: %X{responseTimestamp} duration: %X{duration}]){yellow} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n%wex - -liquibase.changeLog=classpath:/h2db/changelog/h2db.changelog-master.xml -logging.level.liquibase: DEBUG - -spring.jersey.type=filter -spring.mvc.urls=swagger,docs,prometheus,auditevents,info,heapdump,autoconfig,beans,loggers,dump,env,trace,health,configprops,mappings - -server.contextPath=/web - -spring.datasource.driver-class-name=org.h2.Driver -spring.datasource.username=sa -spring.datasource.password=sa -spring.jpa.hibernate.ddl-auto=none -spring.jpa.show-sql=true -spring.datasource.url=jdbc:h2:mem:tests;DB_CLOSE_DELAY=-1; +#========================================================================= +# +# Configuration for the test profile, which is used to run integration +# tests of the application, normally in your IDE. +# +#========================================================================= datasource.db.driver-class-name=org.h2.Driver datasource.db.url=jdbc:h2:mem:tests;DB_CLOSE_DELAY=-1; -datasource.db.username=sa -datasource.db.password=sa -jpa.hibernate.ddl-auto=none -jpa.show-sql=true +datasource.db.username=none +datasource.db.password=none -entitymanager.packagesToScan=org.onap.ccsdk.apps.ms.neng.persistence.entity +liquibase.changeLog=classpath:/h2db/changelog/h2db.changelog-master.xml diff --git a/ms/neng/src/test/resources/h2db/changelog/h2db.changelog-master.xml b/ms/neng/src/test/resources/h2db/changelog/h2db.changelog-master.xml index 496a2e9d..2826e4d4 100644 --- a/ms/neng/src/test/resources/h2db/changelog/h2db.changelog-master.xml +++ b/ms/neng/src/test/resources/h2db/changelog/h2db.changelog-master.xml @@ -1,5 +1,23 @@ - + $TEMP_FILE +printf '"policyName": "sanity-policy-' >> $TEMP_FILE +printf $EXTERNAL_KEY >> $TEMP_FILE +printf '", "policyValue" : "' >> $TEMP_FILE +cat ./policy-1.json | sed 's/\"/\\\"/g' | tr '\n' ' ' | tr '\r' ' ' >> $TEMP_FILE +echo '"}' >> $TEMP_FILE + +echo "===================================================" +echo "====== Adding Policy: ===========================" +cat $TEMP_FILE +echo "" +echo "===================================================" + +echo "===================================================" +curl -vi -H "Content-Type: application/json" --data @$TEMP_FILE $PROTOCOL://$HOST:$PORT/$URL +echo "===================================================" + +rm -f $TEMP_FILE diff --git a/ms/neng/src/test/sanity/env.sh b/ms/neng/src/test/sanity/env.sh new file mode 100644 index 00000000..8685bcf8 --- /dev/null +++ b/ms/neng/src/test/sanity/env.sh @@ -0,0 +1,26 @@ +#!/bin/bash +#============LICENSE_START======================================================= +# ONAP : CCSDK.apps +# ================================================================================ +# Copyright (C) 2018 AT&T Intellectual Property. 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========================================================= + +#================================================================================== +# Sets up environment for testing. +#================================================================================== + +PORT=8080 +HOST=localhost +PROTOCOL=http diff --git a/ms/neng/src/test/sanity/gen-name.sh b/ms/neng/src/test/sanity/gen-name.sh new file mode 100644 index 00000000..fb106eda --- /dev/null +++ b/ms/neng/src/test/sanity/gen-name.sh @@ -0,0 +1,52 @@ +#!/bin/bash +#============LICENSE_START======================================================= +# ONAP : CCSDK.apps +# ================================================================================ +# Copyright (C) 2018 AT&T Intellectual Property. 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========================================================= + +#================================================================================== +# This script does a sanity test on the generate-name API of this micro-service. +#================================================================================== + +. ./env.sh +URL=web/service/v1/genNetworkElementName +TEMP_FILE=/tmp/gen-name.$$.$RANDOM +EXTERNAL_KEY=${2:-123456789} + +USE_DB=${1:-'Y'} +USE_DB_BOOL=$([ "$USE_DB" == "Y" ] && echo "true" || echo "false") + +printf '{ "UseDb": "' > $TEMP_FILE +printf $USE_DB_BOOL >> $TEMP_FILE +printf '", "elements": [ { "external-key": "sanity-' >> $TEMP_FILE +printf $EXTERNAL_KEY >> $TEMP_FILE +printf '", "policy-instance-name": "sanity-policy-' >> $TEMP_FILE +printf $EXTERNAL_KEY >> $TEMP_FILE +printf '", "NF_NAMING_CODE": "helloname", ' >> $TEMP_FILE +printf '"resource-name": "sanity-1", "naming-type": "sanity-1" } ] }' >> $TEMP_FILE + +echo "===================================================" +echo "======== Generating name with request: ============" +cat $TEMP_FILE +echo "" +echo "===================================================" + +echo "===================================================" +curl -vi -H "Content-Type: application/json" --data @$TEMP_FILE $PROTOCOL://$HOST:$PORT/$URL +echo "===================================================" + +rm -f $TEMP_FILE + diff --git a/ms/neng/src/test/sanity/get-policy.sh b/ms/neng/src/test/sanity/get-policy.sh new file mode 100644 index 00000000..5c7136b6 --- /dev/null +++ b/ms/neng/src/test/sanity/get-policy.sh @@ -0,0 +1,32 @@ +#!/bin/bash +#============LICENSE_START======================================================= +# ONAP : CCSDK.apps +# ================================================================================ +# Copyright (C) 2018 AT&T Intellectual Property. 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========================================================= + +#================================================================================== +# This script does a sanity test on the get-policy API of this micro-service. +# +#================================================================================== + +. ./env.sh +URL=web/service/v1/getpolicyresponse +EXTERNAL_KEY=${1:-123456789} + +echo "===================================================" +echo "====== Finding Policy: ===========================" +curl -vi $PROTOCOL://$HOST:$PORT/$URL?policyName=sanity-policy-$EXTERNAL_KEY +echo "===================================================" diff --git a/ms/neng/src/test/sanity/hello.sh b/ms/neng/src/test/sanity/hello.sh new file mode 100644 index 00000000..baa5b703 --- /dev/null +++ b/ms/neng/src/test/sanity/hello.sh @@ -0,0 +1,38 @@ +#!/bin/bash +#============LICENSE_START======================================================= +# ONAP : CCSDK.apps +# ================================================================================ +# Copyright (C) 2018 AT&T Intellectual Property. 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========================================================= + +#================================================================================== +# This script does a sanity test on the micro-service, by sending the 'hello' message. +# +#================================================================================== +. ./env.sh +URL=web/service/hello + +echo "===================================================" +echo "===================================================" +echo 'This should show {"message":"Hello world!"}' +echo "===================================================" +curl -vi $PROTOCOL://$HOST:$PORT/$URL + +echo "===================================================" +echo "===================================================" +echo 'This should show {"message":"Hello you!"}' +echo "===================================================" +curl -vi $PROTOCOL://$HOST:$PORT/$URL?name=you +echo "===================================================" diff --git a/ms/neng/src/test/sanity/policy-1.json b/ms/neng/src/test/sanity/policy-1.json new file mode 100644 index 00000000..e85bc790 --- /dev/null +++ b/ms/neng/src/test/sanity/policy-1.json @@ -0,0 +1,32 @@ +[ + { + "config": { + "content": { + "naming-models":[ + { + "naming-properties":[ + { "property-name" : "COMPLEX", "property-operation" : "substr(5)" }, + { "property-name" : "SEQUENCE", "increment-sequence":{ + "max" : "zzz" , "scope" : "ENTIRETY" , "start-value" : "001" , "length" : "3", + "increment" : "1" , "sequence-type" : "alpha-numeric"} + }, + {"property-name" : "NF_NAMING_CODE"} + ], + "naming-type" : "VNF", + "nfRole" : "vPE", + "naming-recipe" : "COMPLEX|SEQUENCE|NF_NAMING_CODE" + }, + { + "naming-properties":[ + {"property-name" : "NF_NAMING_CODE"} + ], + "naming-type" : "sanity-1", + "nfRole" : "sanity-1", + "naming-recipe" : "NF_NAMING_CODE" + } + ] + } + }, + "policyName": "sanity-policy-1" + } +] diff --git a/ms/neng/src/test/sanity/release-name.sh b/ms/neng/src/test/sanity/release-name.sh new file mode 100644 index 00000000..2a6d16df --- /dev/null +++ b/ms/neng/src/test/sanity/release-name.sh @@ -0,0 +1,49 @@ +#!/bin/bash +#============LICENSE_START======================================================= +# ONAP : CCSDK.apps +# ================================================================================ +# Copyright (C) 2018 AT&T Intellectual Property. 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========================================================= + +#================================================================================== +# This script does a sanity test on the release-name API of this micro-service. +#================================================================================== + +. ./env.sh +URL=web/service/v1/genNetworkElementName +TEMP_FILE=/tmp/gen-name.$$.$RANDOM +EXTERNAL_KEY=${2:-123456789} + +USE_DB=${1:-'Y'} +USE_DB_BOOL=$([ "$USE_DB" == "Y" ] && echo "true" || echo "false") + +printf '{ "UseDb": "' > $TEMP_FILE +printf $USE_DB_BOOL >> $TEMP_FILE +printf '", "elements": [ { "external-key": "sanity-' >> $TEMP_FILE +printf $EXTERNAL_KEY >> $TEMP_FILE +printf '", "resource-name": "sanity-1" } ] }' >> $TEMP_FILE + +echo "===================================================" +echo "======= Releasing name with request: ==============" +cat $TEMP_FILE +echo "" +echo "===================================================" + +echo "===================================================" +curl -vi -X "DELETE" -H "Content-Type: application/json" --data @$TEMP_FILE $PROTOCOL://$HOST:$PORT/$URL +echo "===================================================" + +rm -f $TEMP_FILE + diff --git a/ms/neng/src/test/sanity/suite.sh b/ms/neng/src/test/sanity/suite.sh new file mode 100644 index 00000000..79d5b414 --- /dev/null +++ b/ms/neng/src/test/sanity/suite.sh @@ -0,0 +1,31 @@ +#!/bin/bash +#============LICENSE_START======================================================= +# ONAP : CCSDK.apps +# ================================================================================ +# Copyright (C) 2018 AT&T Intellectual Property. 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========================================================= + +#================================================================================== +# This script does a sanity test on the APIs of the micro-service. +#================================================================================== + +EXTERNAL_KEY=$(date +%s)$RANDOM + +./hello.sh +./add-policy.sh $EXTERNAL_KEY +./get-policy.sh $EXTERNAL_KEY +./gen-name.sh Y $EXTERNAL_KEY +./release-name.sh Y $EXTERNAL_KEY +