Merge "added version no to google guava plugin dependency"
diff --git a/ms/controllerblueprints/application/etc/logback.xml b/ms/controllerblueprints/application/etc/logback.xml
index 0a75e60..6639705 100644
--- a/ms/controllerblueprints/application/etc/logback.xml
+++ b/ms/controllerblueprints/application/etc/logback.xml
@@ -33,6 +33,7 @@
 

     <logger name="org.springframework" level="info"/>

     <logger name="org.springframework.web" level="info"/>

+    <logger name="org.springframework.security.web.authentication" level="warn"/>

     <logger name="org.hibernate" level="error"/>

     <logger name="org.onap.ccsdk.apps" level="info"/>

 

diff --git a/ms/controllerblueprints/application/opt/app/onap/config/application.properties b/ms/controllerblueprints/application/opt/app/onap/config/application.properties
index d281482..e4457d0 100644
--- a/ms/controllerblueprints/application/opt/app/onap/config/application.properties
+++ b/ms/controllerblueprints/application/opt/app/onap/config/application.properties
@@ -18,6 +18,10 @@
 ms_name=org.onap.ccsdk.apps.controllerblueprints
 appVersion=1.0.0
 
+# Basic Authentication
+basic-auth.user-name=ccsdkapps
+basic-auth.hashed-pwd=$2a$10$MJxhNiOAffxbyrV9.rrOUewP9Q/ASg5Nit2cmP.yBaXGsVXo8BW3y
+
 #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
 
 logging.level.org.springframework.web=INFO
diff --git a/ms/controllerblueprints/application/pom.xml b/ms/controllerblueprints/application/pom.xml
index 24f4deb..9834924 100644
--- a/ms/controllerblueprints/application/pom.xml
+++ b/ms/controllerblueprints/application/pom.xml
@@ -55,6 +55,10 @@
         </dependency>

         <dependency>

             <groupId>org.springframework.boot</groupId>

+            <artifactId>spring-boot-starter-security</artifactId>

+        </dependency>

+        <dependency>

+            <groupId>org.springframework.boot</groupId>

             <artifactId>spring-boot-starter-actuator</artifactId>

         </dependency>

         <dependency>

@@ -68,6 +72,11 @@
             <scope>test</scope>

         </dependency>

         <dependency>

+            <groupId>org.springframework.security</groupId>

+            <artifactId>spring-security-test</artifactId>

+            <scope>test</scope>

+        </dependency>

+        <dependency>

             <groupId>org.jetbrains.kotlin</groupId>

             <artifactId>kotlin-test</artifactId>

             <scope>test</scope>

diff --git a/ms/controllerblueprints/application/src/main/java/org/onap/ccsdk/apps/controllerblueprints/ApplicationExceptionHandler.java b/ms/controllerblueprints/application/src/main/java/org/onap/ccsdk/apps/controllerblueprints/ApplicationExceptionHandler.java
index 6e9dcd7..78706d5 100644
--- a/ms/controllerblueprints/application/src/main/java/org/onap/ccsdk/apps/controllerblueprints/ApplicationExceptionHandler.java
+++ b/ms/controllerblueprints/application/src/main/java/org/onap/ccsdk/apps/controllerblueprints/ApplicationExceptionHandler.java
@@ -23,13 +23,19 @@
 import org.springframework.http.HttpStatus;

 import org.springframework.http.ResponseEntity;

 import org.springframework.http.converter.HttpMessageNotReadableException;

+import org.springframework.security.authentication.BadCredentialsException;

+import org.springframework.security.web.csrf.InvalidCsrfTokenException;

 import org.springframework.web.HttpRequestMethodNotSupportedException;

 import org.springframework.web.bind.MethodArgumentNotValidException;

 import org.springframework.web.bind.annotation.ControllerAdvice;

 import org.springframework.web.bind.annotation.ExceptionHandler;

+import org.springframework.web.bind.annotation.ResponseStatus;

 import org.springframework.web.bind.annotation.RestController;

 import org.springframework.web.context.request.WebRequest;

 

+import javax.naming.AuthenticationException;

+import java.nio.file.AccessDeniedException;

+

 @ControllerAdvice

 @RestController

 @SuppressWarnings("unused")

@@ -43,6 +49,14 @@
         return new ResponseEntity<>(exceptionResponse, HttpStatus.INTERNAL_SERVER_ERROR);

     }

 

+    @ExceptionHandler({InvalidCsrfTokenException.class, AuthenticationException.class, BadCredentialsException.class, AccessDeniedException.class})

+    @ResponseStatus(value = HttpStatus.UNAUTHORIZED)

+    public final ResponseEntity<ErrorMessage> handleAuthenticationRequest(Exception ex, WebRequest request) {

+        log.error("Authentication Exception", ex);

+        ErrorMessage exceptionResponse = new ErrorMessage(ex.getMessage(), HttpStatus.UNAUTHORIZED.value(), ex.getLocalizedMessage());

+        return new ResponseEntity<>(exceptionResponse, HttpStatus.UNAUTHORIZED);

+    }

+

     @ExceptionHandler({HttpMessageNotReadableException.class, MethodArgumentNotValidException.class,

             HttpRequestMethodNotSupportedException.class})

     public final ResponseEntity<ErrorMessage> handleBadRequest(Exception ex, WebRequest request) {

diff --git a/ms/controllerblueprints/application/src/main/java/org/onap/ccsdk/apps/controllerblueprints/filters/ApplicationLoggingFilter.java b/ms/controllerblueprints/application/src/main/java/org/onap/ccsdk/apps/controllerblueprints/filters/ApplicationLoggingFilter.java
index fbef55f..4476117 100644
--- a/ms/controllerblueprints/application/src/main/java/org/onap/ccsdk/apps/controllerblueprints/filters/ApplicationLoggingFilter.java
+++ b/ms/controllerblueprints/application/src/main/java/org/onap/ccsdk/apps/controllerblueprints/filters/ApplicationLoggingFilter.java
@@ -25,6 +25,8 @@
 import org.slf4j.LoggerFactory;

 import org.slf4j.MDC;

 import org.springframework.beans.factory.annotation.Value;

+import org.springframework.core.Ordered;

+import org.springframework.core.annotation.Order;

 import org.springframework.stereotype.Component;

 

 import javax.servlet.*;

@@ -40,6 +42,7 @@
  */

 @Component

 @WebFilter(asyncSupported = true, urlPatterns = {"/*"})

+@Order(Ordered.HIGHEST_PRECEDENCE)

 @SuppressWarnings("unused")

 public class ApplicationLoggingFilter implements Filter {

     private static Logger log = LoggerFactory.getLogger(ApplicationLoggingFilter.class);

diff --git a/ms/controllerblueprints/application/src/main/java/org/onap/ccsdk/apps/controllerblueprints/security/ApplicationBasicAuthenticationEntryPoint.java b/ms/controllerblueprints/application/src/main/java/org/onap/ccsdk/apps/controllerblueprints/security/ApplicationBasicAuthenticationEntryPoint.java
new file mode 100644
index 0000000..e3df3a6
--- /dev/null
+++ b/ms/controllerblueprints/application/src/main/java/org/onap/ccsdk/apps/controllerblueprints/security/ApplicationBasicAuthenticationEntryPoint.java
@@ -0,0 +1,43 @@
+/*

+ *  Copyright © 2017-2018 AT&T Intellectual Property.

+ *

+ *  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.

+ */

+

+package org.onap.ccsdk.apps.controllerblueprints.security;

+

+import org.springframework.security.core.AuthenticationException;

+import org.springframework.security.web.authentication.www.BasicAuthenticationEntryPoint;

+import org.springframework.stereotype.Component;

+import javax.servlet.http.HttpServletRequest;

+import javax.servlet.http.HttpServletResponse;

+import java.io.IOException;

+

+@Component

+public class ApplicationBasicAuthenticationEntryPoint extends BasicAuthenticationEntryPoint {

+

+    @Override

+    public void commence(final HttpServletRequest request, final HttpServletResponse response, final AuthenticationException authException)

+            throws IOException {

+        response.addHeader("WWW-Authenticate", "Basic realm=\"" + getRealmName() + "\"");

+        response.setStatus(HttpServletResponse.SC_UNAUTHORIZED);

+        response.sendError(HttpServletResponse.SC_UNAUTHORIZED, "Unauthorized");

+    }

+

+    @Override

+    public void afterPropertiesSet() throws Exception {

+        setRealmName("CCSDK-APPS");

+        super.afterPropertiesSet();

+    }

+

+}
\ No newline at end of file
diff --git a/ms/controllerblueprints/application/src/main/java/org/onap/ccsdk/apps/controllerblueprints/security/ApplicationSecurityConfigurerAdapter.java b/ms/controllerblueprints/application/src/main/java/org/onap/ccsdk/apps/controllerblueprints/security/ApplicationSecurityConfigurerAdapter.java
new file mode 100644
index 0000000..3a39d78
--- /dev/null
+++ b/ms/controllerblueprints/application/src/main/java/org/onap/ccsdk/apps/controllerblueprints/security/ApplicationSecurityConfigurerAdapter.java
@@ -0,0 +1,72 @@
+/*

+ *  Copyright © 2017-2018 AT&T Intellectual Property.

+ *

+ *  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.

+ */

+

+package org.onap.ccsdk.apps.controllerblueprints.security;

+

+import com.att.eelf.configuration.EELFLogger;

+import com.att.eelf.configuration.EELFManager;

+import org.springframework.beans.factory.annotation.Autowired;

+import org.springframework.beans.factory.annotation.Value;

+import org.springframework.context.annotation.Bean;

+import org.springframework.context.annotation.Configuration;

+import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;

+import org.springframework.security.config.annotation.web.builders.HttpSecurity;

+import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;

+import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;

+import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;

+import org.springframework.security.crypto.password.PasswordEncoder;

+

+@SuppressWarnings("unused")

+@Configuration

+@EnableWebSecurity

+public class ApplicationSecurityConfigurerAdapter extends WebSecurityConfigurerAdapter {

+

+    @Value("${basic-auth.user-name}")

+    private String userName;

+

+    @Value("${basic-auth.hashed-pwd}")

+    private String userHashedPassword;

+

+    private static EELFLogger log = EELFManager.getInstance().getLogger(ApplicationSecurityConfigurerAdapter.class);

+

+    @Autowired

+    private ApplicationBasicAuthenticationEntryPoint authenticationEntryPoint;

+

+    @Autowired

+    public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {

+        log.info("User Id {} and hashed pwd : {}", userName, userHashedPassword);

+        auth.inMemoryAuthentication()

+                .withUser(userName).password(userHashedPassword)

+                .authorities("ROLE_USER");

+    }

+

+    @Override

+    protected void configure(HttpSecurity http) throws Exception {

+        http.authorizeRequests()

+                .antMatchers("/actuator/health").permitAll()

+                .antMatchers("/**").authenticated()

+                .and()

+                .httpBasic()

+                .authenticationEntryPoint(authenticationEntryPoint);

+

+        http.csrf().disable();

+    }

+

+    @Bean

+    public PasswordEncoder passwordEncoder() {

+        return new BCryptPasswordEncoder();

+    }

+}
\ No newline at end of file
diff --git a/ms/controllerblueprints/application/src/test/java/org/onap/ccsdk/apps/controllerblueprints/ControllerBluprintsApplicationTest.java b/ms/controllerblueprints/application/src/test/java/org/onap/ccsdk/apps/controllerblueprints/ControllerBluprintsApplicationTest.java
index 61b5c50..7a5f952 100644
--- a/ms/controllerblueprints/application/src/test/java/org/onap/ccsdk/apps/controllerblueprints/ControllerBluprintsApplicationTest.java
+++ b/ms/controllerblueprints/application/src/test/java/org/onap/ccsdk/apps/controllerblueprints/ControllerBluprintsApplicationTest.java
@@ -1,6 +1,6 @@
 /*

  * Copyright © 2017-2018 AT&T Intellectual Property.

- * Modifications Copyright © 2018 IBM.

+ *

  * 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

@@ -16,8 +16,6 @@
 

 package org.onap.ccsdk.apps.controllerblueprints;

 

-import static org.assertj.core.api.Assertions.assertThat;

-

 import org.junit.Assert;

 import org.junit.Before;

 import org.junit.Test;

@@ -27,56 +25,40 @@
 import org.springframework.boot.test.context.SpringBootTest;

 import org.springframework.boot.test.context.SpringBootTest.WebEnvironment;

 import org.springframework.boot.test.web.client.TestRestTemplate;

-import org.springframework.http.HttpEntity;

-import org.springframework.http.HttpHeaders;

-import org.springframework.http.HttpMethod;

-import org.springframework.http.HttpStatus;

-import org.springframework.http.MediaType;

-import org.springframework.http.ResponseEntity;

+import org.springframework.http.*;

+import org.springframework.http.client.support.BasicAuthorizationInterceptor;

 import org.springframework.test.context.junit4.SpringRunner;

 

-import com.att.eelf.configuration.EELFLogger;

-import com.att.eelf.configuration.EELFManager;

+import static org.assertj.core.api.Assertions.assertThat;

 

 @RunWith(SpringRunner.class)

 @SpringBootTest(webEnvironment = WebEnvironment.RANDOM_PORT)

 public class ControllerBluprintsApplicationTest {

-    private static EELFLogger log = EELFManager.getInstance().getLogger(ControllerBluprintsApplicationTest.class);

-

     @Autowired

     private TestRestTemplate restTemplate;

-    private HttpHeaders headers;

-    private ResponseEntity<ConfigModel> entity;

 

     @Before

     public void setUp(){

-        headers = new HttpHeaders();

-        headers.set("Accept", MediaType.APPLICATION_JSON_VALUE);

-        entity = this.restTemplate

-                .exchange("/api/v1/config-model/1", HttpMethod.GET, new HttpEntity<>(headers),ConfigModel.class);

-        

+        BasicAuthorizationInterceptor bai = new BasicAuthorizationInterceptor("ccsdkapps", "ccsdkapps");

+        this.restTemplate.getRestTemplate().getInterceptors().add(bai);

     }

 

     @Test

     public void testConfigModel() {

-

         HttpHeaders headers = new HttpHeaders();

         headers.set("Accept", MediaType.APPLICATION_JSON_VALUE);

         ResponseEntity<ConfigModel> entity = this.restTemplate

                 .exchange("/api/v1/config-model/1", HttpMethod.GET, new HttpEntity<>(headers),ConfigModel.class);

-

         assertThat(entity.getStatusCode()).isEqualTo(HttpStatus.OK);

         Assert.assertNotNull("failed to get response Config model",entity.getBody());

     }

 

     @Test

     public void testConfigModelFailure() {

-

         HttpHeaders headers = new HttpHeaders();

         headers.set("Accept", MediaType.APPLICATION_JSON_VALUE);

         ResponseEntity<ConfigModel> entity = this.restTemplate

                 .exchange("/api/v1/config-model-not-found/1", HttpMethod.GET, new HttpEntity<>(headers),ConfigModel.class);

-

         assertThat(entity.getStatusCode()).isEqualTo(HttpStatus.NOT_FOUND);

         Assert.assertNotNull("failed to get response Config model",entity.getBody());

     }

diff --git a/ms/controllerblueprints/application/src/test/java/org/onap/ccsdk/apps/controllerblueprints/VersionSplitTest.java b/ms/controllerblueprints/application/src/test/java/org/onap/ccsdk/apps/controllerblueprints/VersionSplitTest.java
index 9445e1d..995644f 100644
--- a/ms/controllerblueprints/application/src/test/java/org/onap/ccsdk/apps/controllerblueprints/VersionSplitTest.java
+++ b/ms/controllerblueprints/application/src/test/java/org/onap/ccsdk/apps/controllerblueprints/VersionSplitTest.java
@@ -16,21 +16,34 @@
 

 package org.onap.ccsdk.apps.controllerblueprints;

 

+import com.att.eelf.configuration.EELFLogger;

+import com.att.eelf.configuration.EELFManager;

 import org.apache.commons.lang3.StringUtils;

 import org.junit.Assert;

 import org.junit.Test;

+import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;

+

 /**

  * VersionSplitTest

  *

  * @author Brinda Santh

  */

 public class VersionSplitTest {

+    private static EELFLogger log = EELFManager.getInstance().getLogger(VersionSplitTest.class);

 

     @Test

     public void testVersionSplit() {

         String version = "1.03.04";

         String[] tokens = StringUtils.split(version, '.');

         Assert.assertNotNull("failed to tokenize", tokens);

-        Assert.assertEquals("failed to three token ", 3, tokens.length );

+        Assert.assertEquals("failed to three token ", 3, tokens.length);

+    }

+

+    @Test

+    public void encodeTest() {

+        String name = "ccsdkapps";

+        BCryptPasswordEncoder bCryptPasswordEncoder = new BCryptPasswordEncoder();

+        String encodedValue = bCryptPasswordEncoder.encode(name);

+        Assert.assertTrue("Failed to match", bCryptPasswordEncoder.matches(name, encodedValue));

     }

 }
\ No newline at end of file
diff --git a/ms/controllerblueprints/application/src/test/resources/application.properties b/ms/controllerblueprints/application/src/test/resources/application.properties
index 5c6acf9..e812da5 100644
--- a/ms/controllerblueprints/application/src/test/resources/application.properties
+++ b/ms/controllerblueprints/application/src/test/resources/application.properties
@@ -20,6 +20,10 @@
 ms_name=org.onap.ccsdk.apps.controllerblueprints

 appVersion=1.0.0

 

+# Basic Authentication

+basic-auth.user-name=ccsdkapps

+basic-auth.hashed-pwd=$2a$10$MJxhNiOAffxbyrV9.rrOUewP9Q/ASg5Nit2cmP.yBaXGsVXo8BW3y

+

 #To Remove Null in JSON API Response

 spring.jackson.default-property-inclusion=non_null

 

diff --git a/ms/neng/pom.xml b/ms/neng/pom.xml
index 3f90e0a..8f6c7b1 100644
--- a/ms/neng/pom.xml
+++ b/ms/neng/pom.xml
@@ -55,10 +55,12 @@
         <project.version>0.3.0</project.version>
         <ccsdk.distribution.version>0.2.4</ccsdk.distribution.version>
         <docker.buildArg.https_proxy>${https_proxy}</docker.buildArg.https_proxy>
-		<docker.push.phase>deploy</docker.push.phase>
-                <docker.build.phase>deploy</docker.build.phase>
-		<docker.verbose>true</docker.verbose>
-		<ccsdk.project.version>${project.version}</ccsdk.project.version>
+        <docker.push.phase>deploy</docker.push.phase>
+        <docker.build.phase>deploy</docker.build.phase>
+        <docker.verbose>true</docker.verbose>
+        <ccsdk.project.version>${project.version}</ccsdk.project.version>
+        <image.name>onap/ccsdk-apps-ms-neng</image.name>
+
     </properties>
 
     <profiles>
@@ -114,72 +116,111 @@
             </build>
         </profile>
 
-	<profile>
-		<id>dockerTBD</id>
-		<build>
-			<plugins>
-				<plugin>
-					<groupId>com.spotify</groupId>
-					<artifactId>docker-maven-plugin</artifactId>
-					<version>0.4.11</version>
-					<executions>
-						<execution>
-							<id>push-images</id>
-							<phase>${docker.build.phase}</phase>
-							<goals>
-								<goal>build</goal>
-								<goal>push</goal>
-							</goals>
-						</execution>
-					</executions>
-					<configuration>
-						<imageName>${docker.registry}/onap/ccsdk-apps-ms-neng:${project.version}</imageName>
-						<dockerDirectory>${basedir}/target/docker</dockerDirectory>
-						<serverId>docker-hub</serverId>
-						<registryUrl>https://${docker.registry}</registryUrl>
-						<imageTags>
-							<imageTag>${project.version}</imageTag>
-							<imageTag>${project.version}-STAGING-${maven.build.timestamp}</imageTag>
-							<imageTag>${project.docker.latesttag.version}</imageTag>
-						</imageTags>
-						<forceTags>true</forceTags>
-						<resources>
-							<resource>
-								<targetPath>/</targetPath>
-								<directory>${project.build.directory}</directory>
-								<include>${project.build.finalName}.jar</include>
-							</resource>
-							<resource>
-								<targetPath>/</targetPath>
-								<directory>${project.build.directory}</directory>
-								<include>opt/etc/config/*</include>
-							</resource>
-							<resource>
-								<targetPath>/</targetPath>
-								<directory>${project.build.directory}</directory>
-								<include>opt/etc/keystore/*</include>
-							</resource>
-							<resource>
-								<targetPath>/</targetPath>
-								<directory>${project.build.directory}</directory>
-								<include>opt/etc/truststore/*</include>
-							</resource>
-							<resource>
-								<targetPath>/</targetPath>
-								<directory>${project.build.directory}</directory>
-								<include>opt/aai/keystore/*</include>
-							</resource>
-							<resource>
-								<targetPath>/</targetPath>
-								<directory>${project.build.directory}</directory>
-								<include>etc/*</include>
-							</resource>
-						</resources>
-					</configuration>
-				</plugin>
-			</plugins>
-		</build>
-	</profile>
+        <profile>
+            <id>docker</id>
+            <build>
+                <plugins>
+                    <plugin>
+                        <artifactId>maven-resources-plugin</artifactId>
+                        <version>2.6</version>
+                        <executions>
+                            <execution>
+                                <id>copy-dockerfile</id>
+                                <goals>
+                                    <goal>copy-resources</goal>
+                                </goals>
+                                <phase>${docker.build.phase}</phase>
+                                <configuration>
+                                    <outputDirectory>${basedir}/target/docker-stage</outputDirectory>
+                                    <resources>
+                                        <resource>
+                                            <directory>src/main/docker</directory>
+                                            <includes>
+                                                <include>startService.sh</include>
+                                                <include>Dockerfile</include>
+                                            </includes>
+                                            <filtering>true</filtering>
+                                        </resource>
+                                    </resources>
+                                </configuration>
+                            </execution>
+                            <execution>
+                                <id>copy-app-jar</id>
+                                <goals>
+                                    <goal>copy-resources</goal>
+                                </goals>
+                                <phase>${docker.build.phase}</phase>
+                                <configuration>
+                                    <outputDirectory>${basedir}/target/docker-stage</outputDirectory>
+                                    <resources>
+                                        <resource>
+                                            <directory>${basedir}/target/</directory>
+                                            <includes>
+                                                <include>NetworkElementNameGen.jar</include>
+                                            </includes>
+                                            <filtering>false</filtering>
+                                        </resource>
+                                    </resources>
+                                </configuration>
+                            </execution>
+                            <execution>
+                                <id>copy-config</id>
+                                <goals>
+                                    <goal>copy-resources</goal>
+                                </goals>
+                                <phase>${docker.build.phase}</phase>
+                                <configuration>
+                                    <outputDirectory>${basedir}/target/docker-stage/opt/etc/config</outputDirectory>
+                                    <resources>
+                                        <resource>
+                                            <directory>${basedir}/opt/etc/config</directory>
+                                            <includes>
+                                                <include>*</include>
+                                            </includes>
+                                            <filtering>true</filtering>
+                                        </resource>
+                                    </resources>
+                                </configuration>
+                            </execution>
+                        </executions>
+                    </plugin>
+    
+    
+                    <plugin>
+                        <groupId>io.fabric8</groupId>
+                        <artifactId>docker-maven-plugin</artifactId>
+                        <version>0.26.1</version>
+                        <inherited>false</inherited>
+                        <configuration>
+                            <images>
+                                <image>
+                                    <name>${image.name}</name>
+                                    <build>
+                                        <cleanup>try</cleanup>
+                                        <dockerFileDir>${basedir}/target/docker-stage</dockerFileDir>
+                                        <tags>
+                                            <tag>${project.version}</tag>
+                                            <tag>${project.docker.latesttag.version}</tag>
+                                        </tags>
+                                    </build>
+                                </image>
+                            </images>
+                            <verbose>true</verbose>
+                        </configuration>
+                        <executions>
+                            <execution>
+                                <id>push-images</id>
+                                <phase>${docker.build.phase}</phase>
+                                <goals>
+                                    <goal>build</goal>
+                                    <goal>push</goal>
+                                </goals>
+                            </execution>
+                        </executions>
+                    </plugin>
+                </plugins>
+            </build>
+        </profile>
 
     </profiles>
 
@@ -271,11 +312,11 @@
             <groupId>org.liquibase</groupId>
             <artifactId>liquibase-core</artifactId>
         </dependency>
-		<dependency>
-			<groupId>org.mariadb.jdbc</groupId>
-			<artifactId>mariadb-java-client</artifactId>
-			<version>${mariadb.connector.version}</version>
-		</dependency>
+        <dependency>
+            <groupId>org.mariadb.jdbc</groupId>
+            <artifactId>mariadb-java-client</artifactId>
+            <version>${mariadb.connector.version}</version>
+        </dependency>
         <dependency>
             <groupId>com.h2database</groupId>
             <artifactId>h2</artifactId>
@@ -331,6 +372,7 @@
     <build>
         <finalName>NetworkElementNameGen</finalName>
         <plugins>
+
             <plugin>
                 <groupId>org.codehaus.groovy.maven</groupId>
                 <artifactId>gmaven-plugin</artifactId>
@@ -474,68 +516,6 @@
                 <artifactId>exec-maven-plugin</artifactId>
                 <groupId>org.codehaus.mojo</groupId>
             </plugin>
-            <!--
-            <plugin>
-                <groupId>io.fabric8</groupId>
-                <artifactId>docker-maven-plugin</artifactId>
-                <inherited>false</inherited>
-                <configuration>
-                    <verbose>false</verbose>
-                    <images>
-                        <image>
-                            <name>onap/ccsdk-apps-ms-neng</name>
-                            <build>
-                                <cleanup>try</cleanup>
-                                <dockerFileDir>${basedir}/src/main/docker</dockerFileDir>
-                                <dockerFile>Dockerfile</dockerFile>
-                                <tags>
-                                    <tag>${project.version}</tag>
-                                </tags>
-
-                               <assembly>
-                                    <targetDir>/</targetDir>
-                                    <inline>
-                                        <files>
-                                            <file>
-                                                <source>${project.build.directory}/${build.finalName}.${project.packaging}</source>
-                                            </file>
-                                        </files>
-                                        <fileSet>
-                                            <directory>${basedir}/opt/etc</directory>
-                                            <outputDirectory>opt/etc</outputDirectory>
-                                            <includes>
-                                                <include>**</include>
-                                            </includes>
-                                        </fileSet>
-                                    </inline>
-                                </assembly>
-
-
-                            </build>
-                        </image>
-                    </images>
-                </configuration>
-                <executions>
-                    <execution>
-                        <id>generate-images</id>
-                        <phase>package</phase>
-                        <goals>
-                            <goal>build</goal>
-                        </goals>
-                    </execution>
-
-                    <execution>
-                        <id>push-images</id>
-                        <phase>deploy</phase>
-                        <goals>
-                            <goal>build</goal>
-                            <goal>push</goal>
-                        </goals>
-                    </execution>
-                </executions>
-            </plugin>
-            -->
-
  
             <plugin>
                 <groupId>org.springframework.boot</groupId>
@@ -550,16 +530,9 @@
                 </executions>
             </plugin>
         </plugins>
+
         <resources>
             <resource>
-                <directory>src/main/docker</directory>
-                <targetPath>../docker</targetPath>
-                <filtering>true</filtering>
-                <includes>
-                    <include>**/*</include>
-                </includes>
-            </resource>
-            <resource>
                 <directory>src/main/resources</directory>
                 <filtering>true</filtering>
                 <includes>
diff --git a/ms/neng/src/test/java/org/onap/ccsdk/apps/ms/neng/persistence/entity/IdentifierMapTest.java b/ms/neng/src/test/java/org/onap/ccsdk/apps/ms/neng/persistence/entity/IdentifierMapTest.java
new file mode 100644
index 0000000..dc51042
--- /dev/null
+++ b/ms/neng/src/test/java/org/onap/ccsdk/apps/ms/neng/persistence/entity/IdentifierMapTest.java
@@ -0,0 +1,98 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP : CCSDK.apps
+ * ================================================================================
+ * Copyright (C) 2018 IBM.
+ * ================================================================================
+ * 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.ccsdk.apps.ms.neng.persistence.entity;
+
+import java.sql.Timestamp;
+import java.text.DateFormat;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+
+import org.junit.Assert;
+import org.junit.Before;
+import org.junit.Test;
+
+public class IdentifierMapTest {
+	private IdentifierMap identifierMap;
+
+    @Before
+    public void setUp() {
+    	identifierMap = new IdentifierMap();
+    }
+
+    @Test
+    public void testGetSetIdentifierMapId() {
+    	identifierMap.setIdentifierMapId(1);
+        Integer expected = 1;
+        Assert.assertEquals(expected, identifierMap.getIdentifierMapId());
+    }
+    
+    @Test
+    public void testGetSetPolicyFnName() {
+    	identifierMap.setPolicyFnName("PolicyFnName");
+        String expected = "PolicyFnName";
+        Assert.assertEquals(expected, identifierMap.getPolicyFnName());
+    }
+    
+    @Test
+    public void testGetSetJsFnName() {
+    	identifierMap.setJsFnName("JsFnName");
+        String expected = "JsFnName";
+        Assert.assertEquals(expected, identifierMap.getJsFnName());
+    }
+    
+    @Test
+    public void testGetSetCreatedTime() throws ParseException {
+    	DateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy");
+        Date date = dateFormat.parse("23/09/2007");
+        long time = date.getTime();
+        Timestamp timeStamp = new Timestamp(time);
+    	identifierMap.setCreatedTime(timeStamp);
+    	Timestamp expected = timeStamp;
+        Assert.assertEquals(expected, identifierMap.getCreatedTime());
+    }
+    
+    @Test
+    public void testGetSetCreatedBy() {
+    	identifierMap.setCreatedBy("Name");
+        String expected = "Name";
+        Assert.assertEquals(expected, identifierMap.getCreatedBy());
+    }
+    
+    @Test
+    public void testGetSetLastUpdatedTime() throws ParseException {
+    	DateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy");
+        Date date = dateFormat.parse("23/09/2007");
+        long time = date.getTime();
+        Timestamp timeStamp = new Timestamp(time);
+    	identifierMap.setLastUpdatedTime(timeStamp);
+    	Timestamp expected = timeStamp;
+        Assert.assertEquals(expected, identifierMap.getLastUpdatedTime());
+    }
+    
+    @Test
+    public void testGetSetLastUpdatedBy() {
+    	identifierMap.setLastUpdatedBy("Name");
+        String expected = "Name";
+        Assert.assertEquals(expected, identifierMap.getLastUpdatedBy());
+    }
+    
+}
diff --git a/ms/neng/src/test/java/org/onap/ccsdk/apps/ms/neng/persistence/entity/PolicyDetailsTest.java b/ms/neng/src/test/java/org/onap/ccsdk/apps/ms/neng/persistence/entity/PolicyDetailsTest.java
new file mode 100644
index 0000000..7050868
--- /dev/null
+++ b/ms/neng/src/test/java/org/onap/ccsdk/apps/ms/neng/persistence/entity/PolicyDetailsTest.java
@@ -0,0 +1,75 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP : CCSDK.apps
+ * ================================================================================
+ * Copyright (C) 2018 IBM.
+ * ================================================================================
+ * 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.ccsdk.apps.ms.neng.persistence.entity;
+
+
+import java.sql.Timestamp;
+import java.text.DateFormat;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+
+import org.junit.Assert;
+import org.junit.Before;
+import org.junit.Test;
+
+public class PolicyDetailsTest {
+	private PolicyDetails policyDetails;
+
+    @Before
+    public void setUp() {
+    	policyDetails = new PolicyDetails();
+    }
+
+    @Test
+    public void testGetSetPolicyId() {
+    	policyDetails.setPolicyId(1);
+        Integer expected = 1;
+        Assert.assertEquals(expected, policyDetails.getPolicyId());
+    }
+    
+    @Test
+    public void testGetSetPolicyName() {
+    	policyDetails.setPolicyName("PolicyName");
+        String expected = "PolicyName";
+        Assert.assertEquals(expected, policyDetails.getPolicyName());
+    }
+    
+    @Test
+    public void testGetSetPolicyResponse() {
+    	policyDetails.setPolicyResponse("PolicyResponse");
+        String expected = "PolicyResponse";
+        Assert.assertEquals(expected, policyDetails.getPolicyResponse());
+    }
+    
+    @Test
+    public void testGetSetCreatedTime() throws ParseException {
+    	DateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy");
+        Date date = dateFormat.parse("23/09/2007");
+        long time = date.getTime();
+        Timestamp timeStamp = new Timestamp(time);
+    	policyDetails.setCreatedTime(timeStamp);
+        String expected = "PolicyResponse";
+        Assert.assertEquals(timeStamp, policyDetails.getCreatedTime());
+    }
+    
+    
+}
diff --git a/ms/neng/src/test/java/org/onap/ccsdk/apps/ms/neng/persistence/entity/ServiceParameterTest.java b/ms/neng/src/test/java/org/onap/ccsdk/apps/ms/neng/persistence/entity/ServiceParameterTest.java
new file mode 100644
index 0000000..42118a5
--- /dev/null
+++ b/ms/neng/src/test/java/org/onap/ccsdk/apps/ms/neng/persistence/entity/ServiceParameterTest.java
@@ -0,0 +1,95 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP : CCSDK.apps
+ * ================================================================================
+ * Copyright (C) 2018 IBM.
+ * ================================================================================
+ * 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.ccsdk.apps.ms.neng.persistence.entity;
+
+import java.sql.Timestamp;
+import java.text.DateFormat;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+
+import org.junit.Assert;
+import org.junit.Before;
+import org.junit.Test;
+
+public class ServiceParameterTest {
+	private ServiceParameter serviceParameter;
+
+    @Before
+    public void setUp() {
+    	serviceParameter = new ServiceParameter();
+    }
+
+    @Test
+    public void testGetSetServiceParameterId() {
+    	serviceParameter.setServiceParameterId(1);
+        Integer expected = 1;
+        Assert.assertEquals(expected, serviceParameter.getServiceParameterId());
+    }
+    
+    @Test
+    public void testGetSetName() {
+    	serviceParameter.setName("Name");
+        String expected = "Name";
+        Assert.assertEquals(expected, serviceParameter.getName());
+    }
+    
+    @Test
+    public void testGetSetValue() {
+    	serviceParameter.setValue("Value");
+        String expected = "Value";
+        Assert.assertEquals(expected, serviceParameter.getValue());
+    }
+    
+    @Test
+    public void testGetSetCreatedTime() throws ParseException {
+    	  DateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy");
+          Date date = dateFormat.parse("23/09/2007");
+          long time = date.getTime();
+          Timestamp timeStamp = new Timestamp(time);
+    	serviceParameter.setCreatedTime(timeStamp);
+        Assert.assertEquals(timeStamp, serviceParameter.getCreatedTime());
+    }
+    
+    @Test
+    public void testGetSetCreatedBy() {
+    	serviceParameter.setCreatedBy("CreatedBy");
+        String expected = "CreatedBy";
+        Assert.assertEquals(expected, serviceParameter.getCreatedBy());
+    }
+    
+    @Test
+    public void testGetSetLastUpdatedBy() {
+    	serviceParameter.setLastUpdatedBy("LastUpdatedBy");
+        String expected = "LastUpdatedBy";
+        Assert.assertEquals(expected, serviceParameter.getLastUpdatedBy());
+    }
+    
+    @Test
+    public void testGetSetLastUpdatedTime() throws ParseException {
+    	  DateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy");
+          Date date = dateFormat.parse("23/09/2007");
+          long time = date.getTime();
+          Timestamp timeStamp = new Timestamp(time);
+    	serviceParameter.setLastUpdatedTime(timeStamp);
+        Assert.assertEquals(timeStamp, serviceParameter.getLastUpdatedTime());
+    }
+}
diff --git a/ms/vlantag-api/src/test/java/org/onap/ccsdk/apps/ms/vlangtagapi/core/model/UnassignVlanTagResponseOutputTest.java b/ms/vlantag-api/src/test/java/org/onap/ccsdk/apps/ms/vlangtagapi/core/model/UnassignVlanTagResponseOutputTest.java
new file mode 100644
index 0000000..cec0da9
--- /dev/null
+++ b/ms/vlantag-api/src/test/java/org/onap/ccsdk/apps/ms/vlangtagapi/core/model/UnassignVlanTagResponseOutputTest.java
@@ -0,0 +1,68 @@
+/*******************************************************************************
+ * Copyright © 2018 IBM.
+ * 
+ * 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.
+ ******************************************************************************/
+
+package org.onap.ccsdk.apps.ms.vlangtagapi.core.model;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.onap.ccsdk.apps.ms.vlantagapi.core.model.UnassignVlanTagResponseOutput;
+
+
+public class UnassignVlanTagResponseOutputTest {
+    private UnassignVlanTagResponseOutput unassignVlanTagResponseOutput;
+    private UnassignVlanTagResponseOutput unassignVlanTagResponseOutput1;
+    
+    @Before
+    public void setUp()
+    {
+        unassignVlanTagResponseOutput= new UnassignVlanTagResponseOutput();
+        unassignVlanTagResponseOutput1= new UnassignVlanTagResponseOutput();
+    }
+    
+    @Test
+    public void testVlanType()
+    {
+        unassignVlanTagResponseOutput.vlanType("vlanType");
+        assertEquals("vlanType", unassignVlanTagResponseOutput.getVlanType());
+    }
+    
+    @Test
+    public void testKey()
+    {
+        unassignVlanTagResponseOutput.key("key");
+        assertEquals("key", unassignVlanTagResponseOutput.getVlanTagKey());
+    }
+    
+    @Test
+    public void testVlantagName()
+    {
+        unassignVlanTagResponseOutput.vlantagName("vlantagName");
+        assertEquals("vlantagName", unassignVlanTagResponseOutput.getVlantagName());
+    }
+    
+    @Test
+    public void testEqualsAndHashCode()
+    {
+        assertTrue(unassignVlanTagResponseOutput.equals(unassignVlanTagResponseOutput1));
+        assertTrue((Integer)unassignVlanTagResponseOutput.hashCode() instanceof Integer);
+    }
+}
diff --git a/ms/vlantag-api/src/test/java/org/onap/ccsdk/apps/ms/vlangtagapi/core/model/UnassignVlanTagResponseTest.java b/ms/vlantag-api/src/test/java/org/onap/ccsdk/apps/ms/vlangtagapi/core/model/UnassignVlanTagResponseTest.java
new file mode 100644
index 0000000..4712d14
--- /dev/null
+++ b/ms/vlantag-api/src/test/java/org/onap/ccsdk/apps/ms/vlangtagapi/core/model/UnassignVlanTagResponseTest.java
@@ -0,0 +1,71 @@
+/*******************************************************************************
+ * Copyright © 2018 IBM.
+ * 
+ * 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.
+ ******************************************************************************/
+
+package org.onap.ccsdk.apps.ms.vlangtagapi.core.model;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.onap.ccsdk.apps.ms.vlantagapi.core.model.UnassignVlanTagResponse;
+import org.onap.ccsdk.apps.ms.vlantagapi.core.model.UnassignVlanTagResponseOutput;
+
+public class UnassignVlanTagResponseTest {
+
+    private UnassignVlanTagResponse unassignVlanTagResponse;
+    private UnassignVlanTagResponse unassignVlanTagResponse1;
+    
+    @Before
+    public void setUp()
+    {
+        unassignVlanTagResponse= new UnassignVlanTagResponse();
+        unassignVlanTagResponse1= new UnassignVlanTagResponse();
+    }
+    
+    @Test
+    public void testOutput()
+    {
+        List<UnassignVlanTagResponseOutput> output= new ArrayList<>();
+        unassignVlanTagResponse.output(output);
+        assertEquals(output, unassignVlanTagResponse.getOutput());
+    }
+    
+    @Test
+    public void testErrorCode()
+    {
+        unassignVlanTagResponse.errorCode(200);
+        Integer errorCode=200;
+        assertEquals(errorCode, unassignVlanTagResponse.getErrorCode());
+    }
+    
+    @Test
+    public void testErrorMessage()
+    {
+        unassignVlanTagResponse.errorMessage("testErrorMessage");
+        assertEquals("testErrorMessage", unassignVlanTagResponse.getErrorMessage());
+    }
+    
+    @Test
+    public void testEqualsAndHashCode()
+    {
+        assertTrue(unassignVlanTagResponse.equals(unassignVlanTagResponse1));
+        assertTrue((Integer)unassignVlanTagResponse.hashCode() instanceof Integer);
+    }
+}
diff --git a/ms/vlantag-api/src/test/java/org/onap/ccsdk/apps/ms/vlangtagapi/core/model/VlanTagTest.java b/ms/vlantag-api/src/test/java/org/onap/ccsdk/apps/ms/vlangtagapi/core/model/VlanTagTest.java
new file mode 100644
index 0000000..dafc89a
--- /dev/null
+++ b/ms/vlantag-api/src/test/java/org/onap/ccsdk/apps/ms/vlangtagapi/core/model/VlanTagTest.java
@@ -0,0 +1,61 @@
+/*******************************************************************************
+ * Copyright © 2018 IBM.
+ * 
+ * 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.
+ ******************************************************************************/
+
+package org.onap.ccsdk.apps.ms.vlangtagapi.core.model;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.onap.ccsdk.apps.ms.vlantagapi.core.model.VlanTag;
+
+public class VlanTagTest {
+    private VlanTag vlanTag;
+    private VlanTag vlanTag1;
+
+    @Before
+    public void setUp() {
+        vlanTag = new VlanTag();
+        vlanTag1 = new VlanTag();
+    }
+
+    @Test
+    public void testVlanUuid() {
+        vlanTag.vlanUuid("vlanUuid");
+        assertEquals("vlanUuid", vlanTag.getVlanUuid());
+    }
+    
+    @Test
+    public void testVlantagName() {
+        vlanTag.vlantagName("vlantagName");
+        assertEquals("vlantagName", vlanTag.getVlantagName());
+    }
+
+    @Test
+    public void testVlantagValue() {
+        vlanTag.vlantagValue("vlantagValue");
+        assertEquals("vlantagValue", vlanTag.getVlantagValue());
+    }
+
+    @Test
+    public void testEqualsAndHashCode() {
+        assertTrue(vlanTag.equals(vlanTag1));
+        assertTrue((Integer)vlanTag.hashCode() instanceof Integer);
+    }
+    
+    
+}