Merge "[KPI] Release image 1.0.10"
diff --git a/components/datalake-handler/Changelog.md b/components/datalake-handler/Changelog.md
new file mode 100644
index 0000000..247d41e
--- /dev/null
+++ b/components/datalake-handler/Changelog.md
@@ -0,0 +1,22 @@
+# Change Log
+
+All notable changes to this project will be documented in this file.
+
+The format is based on [Keep a Changelog](http://keepachangelog.com/)
+and this project adheres to [Semantic Versioning](http://semver.org/).
+
+## [1.1.2]
+### Changed
+* CodeCoverage improvement for dcaegen2-services-data-handler (DCAEGEN2-3161)
+
+## [1.1.1] 2022-09-14
+* DCAEGEN2-3004 - Fix DL-Admin Docker docker build issue
+
+## [1.0.0] 2019-08-01
+### Initial DL-Admin UI code
+### Features
+* add button component ([9e04f08](https://gerrit.onap.org/r/dcaegen2/services/commits/9e04f08))
+* add database to design module ([eba414f](https://gerrit.onap.org/r/dcaegen2/services/commits/eba414f))
+* change the structure of the project ([f761909](https://gerrit.onap.org/r/dcaegen2/services/commits/f761909))
+* new changes for design module ([c4c391b](https://gerrit.onap.org/r/dcaegen2/services/commits/c4c391b))
+
diff --git a/components/datalake-handler/admin/Dockerfile b/components/datalake-handler/admin/Dockerfile
index 6237741..4c65959 100644
--- a/components/datalake-handler/admin/Dockerfile
+++ b/components/datalake-handler/admin/Dockerfile
@@ -1,9 +1,30 @@
+# ============LICENSE_START=======================================================
+#  Copyright (c) 2019 QCT. All rights reserved.
+#  Copyright (c) 2022 AT&T. 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.
+#
+# SPDX-License-Identifier: Apache-2.0
+# ============LICENSE_END=========================================================
+
 FROM node:alpine AS builder
 MAINTAINER Ekko Chang <ekko.chang@qct.io>
 
 LABEL org.label-schema.docker.build="docker build -t dl-admin . --no-cache" \
       org.label-schema.docker.run="docker run -p 80:80 --add-host=dl_feeder:your_feeder_ipaddress dl-admin"
 
+ENV NODE_OPTIONS "--openssl-legacy-provider"
+
 WORKDIR /app
 COPY ./src .
 COPY ./nginx .
diff --git a/components/datalake-handler/admin/pom.xml b/components/datalake-handler/admin/pom.xml
index 7cc30d7..305579d 100644
--- a/components/datalake-handler/admin/pom.xml
+++ b/components/datalake-handler/admin/pom.xml
@@ -1,26 +1,42 @@
 <?xml version="1.0" encoding="UTF-8"?>
+<!--
+    ============LICENSE_START=======================================================
+    Copyright (c) 2019 QCT. All rights reserved.
+    Copyright (c) 2022 AT&T. All rights reserved.
+    Copyright (C) 2022 Wipro Limited. 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=========================================================
+-->
 <project xmlns="http://maven.apache.org/POM/4.0.0"
-	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-	<modelVersion>4.0.0</modelVersion>
+    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
 
-	<parent>
-		<groupId>org.onap.dcaegen2.services.components</groupId>
-		<artifactId>datalake-handler</artifactId>
-		<version>1.1.1-SNAPSHOT</version>
-	</parent>
+    <parent>
+        <groupId>org.onap.dcaegen2.services.components</groupId>
+        <artifactId>datalake-handler</artifactId>
+        <version>1.1.2-SNAPSHOT</version>
+    </parent>
 
-	<groupId>org.onap.dcaegen2.services.components.datalake-handler</groupId>
-	<artifactId>admin</artifactId>
-	<packaging>pom</packaging>
-	<properties>
-		<swagger.version>2.9.2</swagger.version>
-		<dockerfile-maven.version>1.4.5</dockerfile-maven.version>
-		<docker.image.path>onap/org.onap.dcaegen2.services.datalakeadminui</docker.image.path>
-		<maven.build.timestamp.format>yyyyMMdd'T'HHmmss</maven.build.timestamp.format>
-	</properties>
-	<name>DataLake Admin</name>
-	<build>
+    <groupId>org.onap.dcaegen2.services.components.datalake-handler</groupId>
+    <artifactId>admin</artifactId>
+    <packaging>pom</packaging>
+    <properties>
+        <swagger.version>2.9.2</swagger.version>
+        <dockerfile-maven.version>1.4.5</dockerfile-maven.version>
+        <docker.image.path>onap/org.onap.dcaegen2.services.datalakeadminui</docker.image.path>
+        <maven.build.timestamp.format>yyyyMMdd'T'HHmmss</maven.build.timestamp.format>
+        <onap-gerrit-review>-changelog-missing</onap-gerrit-review>
+    </properties>
+    <name>DataLake Admin</name>
+    <build>
                 <plugins>
                         <plugin>
                                 <groupId>com.spotify</groupId>
@@ -30,58 +46,58 @@
                                     <repository>${onap.nexus.dockerregistry.daily}/${docker.image.path}</repository>
                                     <tag>${project.version}</tag>
                                     <dockerfile>Dockerfile</dockerfile>
-			        </configuration>
-				<executions>
-					<execution>
-						<id>build-datalake-admin-ui-image</id>
-						<phase>package</phase>
-						<goals>
-							<goal>build</goal>
-						</goals>
-						<configuration>
-							<useMavenSettingsForAuth>true</useMavenSettingsForAuth>
-						</configuration>
-					</execution>
-					<execution>
-						<id>tag-and-push-image-latest</id>
-						<phase>package</phase>
-						<goals>
-							<goal>tag</goal>
-							<goal>push</goal>
-						</goals>
-						<configuration>
-							<repository>${onap.nexus.dockerregistry.daily}/${docker.image.path}</repository>
-						        <tag>latest</tag>
-							<useMavenSettingsForAuth>true</useMavenSettingsForAuth>
-						</configuration>
-					</execution>
-					<execution>
-						<id>tag-and-push-image-with-version</id>
-						<phase>package</phase>
-						<goals>
-							<goal>tag</goal>
-							<goal>push</goal>
-						</goals>
-						<configuration>
-							<repository>${onap.nexus.dockerregistry.daily}/${docker.image.path}</repository>
-							<tag>${project.version}</tag>
-							<useMavenSettingsForAuth>true</useMavenSettingsForAuth>
-						</configuration>
-					</execution>
-					<execution>
-						<id>tag-and-push-image-with-version-and-date</id>
-						<phase>package</phase>
-						<goals>
-							<goal>tag</goal>
-							<goal>push</goal>
-						</goals>
-						<configuration>
-							<repository>${onap.nexus.dockerregistry.daily}/${docker.image.path}</repository>
-							<tag>${project.version}-${maven.build.timestamp}Z</tag>
-							<useMavenSettingsForAuth>true</useMavenSettingsForAuth>
-						</configuration>
-					</execution>
-				</executions>
+                    </configuration>
+                <executions>
+                    <execution>
+                        <id>build-datalake-admin-ui-image</id>
+                        <phase>package</phase>
+                        <goals>
+                            <goal>build</goal>
+                        </goals>
+                        <configuration>
+                            <useMavenSettingsForAuth>true</useMavenSettingsForAuth>
+                        </configuration>
+                    </execution>
+                    <execution>
+                        <id>tag-and-push-image-latest</id>
+                        <phase>package</phase>
+                        <goals>
+                            <goal>tag</goal>
+                            <goal>push</goal>
+                        </goals>
+                        <configuration>
+                            <repository>${onap.nexus.dockerregistry.daily}/${docker.image.path}</repository>
+                                <tag>latest</tag>
+                            <useMavenSettingsForAuth>true</useMavenSettingsForAuth>
+                        </configuration>
+                    </execution>
+                    <execution>
+                        <id>tag-and-push-image-with-version</id>
+                        <phase>package</phase>
+                        <goals>
+                            <goal>tag</goal>
+                            <goal>push</goal>
+                        </goals>
+                        <configuration>
+                            <repository>${onap.nexus.dockerregistry.daily}/${docker.image.path}</repository>
+                            <tag>${project.version}</tag>
+                            <useMavenSettingsForAuth>true</useMavenSettingsForAuth>
+                        </configuration>
+                    </execution>
+                    <execution>
+                        <id>tag-and-push-image-with-version-and-date</id>
+                        <phase>package</phase>
+                        <goals>
+                            <goal>tag</goal>
+                            <goal>push</goal>
+                        </goals>
+                        <configuration>
+                            <repository>${onap.nexus.dockerregistry.daily}/${docker.image.path}</repository>
+                            <tag>${project.version}-${maven.build.timestamp}Z</tag>
+                            <useMavenSettingsForAuth>true</useMavenSettingsForAuth>
+                        </configuration>
+                    </execution>
+                </executions>
                                 <dependencies>
                                         <dependency>
                                                 <groupId>javax.activation</groupId>
diff --git a/components/datalake-handler/admin/src/CHANGELOG.md b/components/datalake-handler/admin/src/CHANGELOG.md
deleted file mode 100644
index 0cf0870..0000000
--- a/components/datalake-handler/admin/src/CHANGELOG.md
+++ /dev/null
@@ -1,11 +0,0 @@
-# [0.0.0](https://gerrit.onap.org/r/dcaegen2/services/compare/4.0.0-ONAP...0.0.0) (2019-08-01)
-
-
-### Features
-
-* add button component ([9e04f08](https://gerrit.onap.org/r/dcaegen2/services/commits/9e04f08))
-* add database to design module ([eba414f](https://gerrit.onap.org/r/dcaegen2/services/commits/eba414f))
-* change the structure of the project ([f761909](https://gerrit.onap.org/r/dcaegen2/services/commits/f761909))
-* new changes for design module ([c4c391b](https://gerrit.onap.org/r/dcaegen2/services/commits/c4c391b))
-
-
diff --git a/components/datalake-handler/admin/src/package.json b/components/datalake-handler/admin/src/package.json
index d4e0444..30b9d88 100644
--- a/components/datalake-handler/admin/src/package.json
+++ b/components/datalake-handler/admin/src/package.json
@@ -1,6 +1,6 @@
 {
   "name": "DataLake-AdminUI",
-  "version": "0.0.0",
+  "version": "1.1.2",
   "scripts": {
     "ng": "ng",
     "start": "ng serve --host='0.0.0.0' --proxy-config proxy.conf.json",
diff --git a/components/datalake-handler/collector/pom.xml b/components/datalake-handler/collector/pom.xml
deleted file mode 100644
index a3eeff1..0000000
--- a/components/datalake-handler/collector/pom.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project xmlns="http://maven.apache.org/POM/4.0.0"
-	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-	<modelVersion>4.0.0</modelVersion>
-
-	<parent>
-		<groupId>org.onap.dcaegen2.services.components</groupId>
-		<artifactId>datalake-handler</artifactId>
-		<version>1.1.1-SNAPSHOT</version>
-	</parent>
-
-	<groupId>org.onap.dcaegen2.services.components.datalake-handler</groupId>
-	<artifactId>collector</artifactId>
-	<packaging>pom</packaging>
-	<name>DataLake Collector</name>
-
-
-
-</project>
diff --git a/components/datalake-handler/des/pom.xml b/components/datalake-handler/des/pom.xml
index 87ae944..64d382f 100644
--- a/components/datalake-handler/des/pom.xml
+++ b/components/datalake-handler/des/pom.xml
@@ -2,7 +2,8 @@
 <!--
   ~ ============LICENSE_START=======================================================
   ~ Copyright (c) 2020 China Mobile. All rights reserved.
-  ~ ================================================================================ 
+  ~ Copyright (C) 2022 Wipro Limited. 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
@@ -15,313 +16,275 @@
   ~ See the License for the specific language governing permissions and
   ~ limitations under the License.
   ~ ============LICENSE_END=========================================================
-  -->
-
+-->
 <project xmlns="http://maven.apache.org/POM/4.0.0"
-    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-    <modelVersion>4.0.0</modelVersion>
-
-    <parent>
-        <groupId>org.onap.dcaegen2.services.components</groupId>
-        <artifactId>datalake-handler</artifactId>
-        <version>1.1.1-SNAPSHOT</version>
-    </parent>
-
-    <artifactId>des</artifactId>
-    <packaging>jar</packaging>
-    <name>DataLake Extraction Service</name>
-
-    <properties>
-        <swagger.version>2.9.2</swagger.version>
-        <dockerfile-maven.version>1.4.10</dockerfile-maven.version>
-        <docker.image.path>onap/org.onap.dcaegen2.services.datalake.exposure.service</docker.image.path>
-        <maven.build.timestamp.format>yyyyMMdd'T'HHmmss</maven.build.timestamp.format>
-    </properties>
-
-    <dependencies>
-
-        <dependency>
-            <groupId>org.jdom</groupId>
-            <artifactId>jdom2</artifactId>
-            <version>2.0.6</version>
-        </dependency>
-
-        <dependency>
-            <groupId>com.facebook.presto</groupId>
-            <artifactId>presto-jdbc</artifactId>
-            <version>0.240</version>
-        </dependency>
-
-        <dependency>
-            <groupId>org.apache.hadoop</groupId>
-            <artifactId>hadoop-client</artifactId>
-            <version>${hadoop.version}</version>
-        </dependency>
-
-        <dependency>
-            <groupId>org.postgresql</groupId>
-	    <artifactId>postgresql</artifactId>
-            <version>42.2.18</version>
-        </dependency>
-
-        <dependency>
-            <groupId>org.json</groupId>
-            <artifactId>json</artifactId>
-            <version>20190722</version>
-        </dependency>
-
-        <dependency>
-            <groupId>org.apache.httpcomponents</groupId>
-            <artifactId>httpclient</artifactId>
-            <version>4.5.10</version>
-        </dependency>
-
-        <dependency>
-            <groupId>org.apache.kafka</groupId>
-            <artifactId>kafka-clients</artifactId>
-            <version>2.3.1</version>
-        </dependency>
-
-        <dependency>
+   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+   xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+   <modelVersion>4.0.0</modelVersion>
+   <parent>
+      <groupId>org.onap.dcaegen2.services.components</groupId>
+      <artifactId>datalake-handler</artifactId>
+      <version>1.1.2-SNAPSHOT</version>
+   </parent>
+   <artifactId>des</artifactId>
+   <packaging>jar</packaging>
+   <name>DataLake Extraction Service</name>
+   <properties>
+      <swagger.version>2.9.2</swagger.version>
+      <dockerfile-maven.version>1.4.10</dockerfile-maven.version>
+      <docker.image.path>onap/org.onap.dcaegen2.services.datalake.exposure.service</docker.image.path>
+      <maven.build.timestamp.format>yyyyMMdd'T'HHmmss</maven.build.timestamp.format>
+      <onap-gerrit-review>-changelog-missing</onap-gerrit-review>
+   </properties>
+   <dependencies>
+      <dependency>
+         <groupId>org.jdom</groupId>
+         <artifactId>jdom2</artifactId>
+         <version>2.0.6</version>
+      </dependency>
+      <dependency>
+         <groupId>com.facebook.presto</groupId>
+         <artifactId>presto-jdbc</artifactId>
+         <version>0.240</version>
+      </dependency>
+      <dependency>
+         <groupId>org.apache.hadoop</groupId>
+         <artifactId>hadoop-client</artifactId>
+         <version>${hadoop.version}</version>
+      </dependency>
+      <dependency>
+         <groupId>org.postgresql</groupId>
+         <artifactId>postgresql</artifactId>
+         <version>42.2.18</version>
+      </dependency>
+      <dependency>
+         <groupId>org.json</groupId>
+         <artifactId>json</artifactId>
+         <version>20190722</version>
+      </dependency>
+      <dependency>
+         <groupId>org.apache.httpcomponents</groupId>
+         <artifactId>httpclient</artifactId>
+         <version>4.5.10</version>
+      </dependency>
+      <dependency>
+         <groupId>org.apache.kafka</groupId>
+         <artifactId>kafka-clients</artifactId>
+         <version>2.3.1</version>
+      </dependency>
+      <dependency>
+         <groupId>org.springframework.boot</groupId>
+         <artifactId>spring-boot-starter-web</artifactId>
+         <version>${springboot.version}</version>
+      </dependency>
+      <dependency>
+         <groupId>org.springframework.boot</groupId>
+         <artifactId>spring-boot-starter-actuator</artifactId>
+         <version>${springboot.version}</version>
+      </dependency>
+      <dependency>
+         <groupId>org.springframework.boot</groupId>
+         <artifactId>spring-boot-starter-data-jpa</artifactId>
+         <version>${springboot.version}</version>
+      </dependency>
+      <dependency>
+         <groupId>org.springframework.boot</groupId>
+         <artifactId>spring-boot-starter-data-couchbase</artifactId>
+         <version>${springboot.version}</version>
+      </dependency>
+      <dependency>
+         <groupId>org.springframework.boot</groupId>
+         <artifactId>spring-boot-starter-test</artifactId>
+         <version>${springboot.version}</version>
+         <scope>test</scope>
+      </dependency>
+      <dependency>
+         <groupId>org.springframework.boot</groupId>
+         <artifactId>spring-boot-configuration-processor</artifactId>
+         <version>${springboot.version}</version>
+      </dependency>
+      <dependency>
+         <groupId>org.elasticsearch.client</groupId>
+         <artifactId>elasticsearch-rest-high-level-client</artifactId>
+         <version>${elasticsearchjava.version}</version>
+      </dependency>
+      <dependency>
+         <groupId>commons-io</groupId>
+         <artifactId>commons-io</artifactId>
+         <version>2.6</version>
+      </dependency>
+      <dependency>
+         <groupId>com.fasterxml.jackson.dataformat</groupId>
+         <artifactId>jackson-dataformat-yaml</artifactId>
+         <version>${jackson.version}</version>
+      </dependency>
+      <dependency>
+         <groupId>com.fasterxml.jackson.dataformat</groupId>
+         <artifactId>jackson-dataformat-xml</artifactId>
+         <version>${jackson.version}</version>
+      </dependency>
+      <dependency>
+         <groupId>com.fasterxml.jackson.core</groupId>
+         <artifactId>jackson-databind</artifactId>
+         <version>${jackson.version}</version>
+      </dependency>
+      <dependency>
+         <groupId>com.google.code.gson</groupId>
+         <artifactId>gson</artifactId>
+         <version>2.8.2</version>
+      </dependency>
+      <dependency>
+         <groupId>org.projectlombok</groupId>
+         <artifactId>lombok</artifactId>
+         <version>1.18.10</version>
+         <scope>provided</scope>
+      </dependency>
+      <dependency>
+         <groupId>io.druid</groupId>
+         <artifactId>tranquility-core_2.11</artifactId>
+         <version>0.8.3</version>
+      </dependency>
+      <dependency>
+         <groupId>org.apache.velocity</groupId>
+         <artifactId>velocity-engine-core</artifactId>
+         <version>2.1</version>
+      </dependency>
+      <dependency>
+         <groupId>org.hibernate</groupId>
+         <artifactId>hibernate-core</artifactId>
+         <version>5.3.7.Final</version>
+      </dependency>
+      <!-- jsr303 validation -->
+      <dependency>
+         <groupId>javax.validation</groupId>
+         <artifactId>validation-api</artifactId>
+         <version>2.0.1.Final</version>
+      </dependency>
+      <dependency>
+         <groupId>org.hibernate</groupId>
+         <artifactId>hibernate-validator</artifactId>
+         <version>6.1.0.Final</version>
+      </dependency>
+      <dependency>
+         <groupId>io.springfox</groupId>
+         <artifactId>springfox-swagger2</artifactId>
+         <version>${swagger.version}</version>
+         <scope>compile</scope>
+      </dependency>
+      <dependency>
+         <groupId>io.springfox</groupId>
+         <artifactId>springfox-swagger-ui</artifactId>
+         <version>${swagger.version}</version>
+         <scope>compile</scope>
+      </dependency>
+      <dependency>
+         <groupId>org.mongodb</groupId>
+         <artifactId>mongo-java-driver</artifactId>
+         <version>${mongojava.version}</version>
+      </dependency>
+      <dependency>
+         <groupId>com.couchbase.mock</groupId>
+         <artifactId>CouchbaseMock</artifactId>
+         <version>1.5.22</version>
+         <scope>test</scope>
+      </dependency>
+   </dependencies>
+   <build>
+      <plugins>
+         <plugin>
+            <groupId>org.apache.maven.plugins</groupId>
+            <artifactId>maven-deploy-plugin</artifactId>
+            <version>2.8</version>
+            <configuration>
+               <skip>true</skip>
+            </configuration>
+         </plugin>
+         <plugin>
             <groupId>org.springframework.boot</groupId>
-            <artifactId>spring-boot-starter-web</artifactId>
-            <version>${springboot.version}</version>
-        </dependency>
-
-        <dependency>
-            <groupId>org.springframework.boot</groupId>
-            <artifactId>spring-boot-starter-actuator</artifactId>
-            <version>${springboot.version}</version>
-        </dependency>
-
-        <dependency>
-            <groupId>org.springframework.boot</groupId>
-            <artifactId>spring-boot-starter-data-jpa</artifactId>
-            <version>${springboot.version}</version>
-        </dependency>
-
-        <dependency>
-            <groupId>org.springframework.boot</groupId>
-            <artifactId>spring-boot-starter-data-couchbase</artifactId>
-            <version>${springboot.version}</version>
-        </dependency>
-
-        <dependency>
-            <groupId>org.springframework.boot</groupId>
-            <artifactId>spring-boot-starter-test</artifactId>
-            <version>${springboot.version}</version>
-            <scope>test</scope>
-        </dependency>
-
-        <dependency>
-            <groupId>org.springframework.boot</groupId>
-            <artifactId>spring-boot-configuration-processor</artifactId>
-            <version>${springboot.version}</version>
-        </dependency>
-
-        <dependency>
-            <groupId>org.elasticsearch.client</groupId>
-            <artifactId>elasticsearch-rest-high-level-client</artifactId>
-            <version>${elasticsearchjava.version}</version>
-        </dependency>
-
-        <dependency>
-            <groupId>commons-io</groupId>
-            <artifactId>commons-io</artifactId>
-            <version>2.6</version>
-        </dependency>
-
-        <dependency>
-            <groupId>com.fasterxml.jackson.dataformat</groupId>
-            <artifactId>jackson-dataformat-yaml</artifactId>
-            <version>${jackson.version}</version>
-        </dependency>
-
-        <dependency>
-            <groupId>com.fasterxml.jackson.dataformat</groupId>
-            <artifactId>jackson-dataformat-xml</artifactId>
-            <version>${jackson.version}</version>
-        </dependency>
-
-        <dependency>
-            <groupId>com.fasterxml.jackson.core</groupId>
-            <artifactId>jackson-databind</artifactId>
-            <version>${jackson.version}</version>
-        </dependency>
-
-        <dependency>
-            <groupId>com.google.code.gson</groupId>
-            <artifactId>gson</artifactId>
-            <version>2.8.2</version>
-        </dependency>
-
-        <dependency>
-            <groupId>org.projectlombok</groupId>
-            <artifactId>lombok</artifactId>
-            <version>1.18.10</version>
-            <scope>provided</scope>
-        </dependency>
-
-        <dependency>
-            <groupId>io.druid</groupId>
-            <artifactId>tranquility-core_2.11</artifactId>
-            <version>0.8.3</version>
-        </dependency>
-
-        <dependency>
-            <groupId>org.apache.velocity</groupId>
-            <artifactId>velocity-engine-core</artifactId>
-            <version>2.1</version>
-        </dependency>
-
-
-        <dependency>
-            <groupId>org.hibernate</groupId>
-            <artifactId>hibernate-core</artifactId>
-            <version>5.3.7.Final</version>
-        </dependency>
-
-        <!-- jsr303 validation -->
-        <dependency>
-            <groupId>javax.validation</groupId>
-            <artifactId>validation-api</artifactId>
-            <version>2.0.1.Final</version>
-        </dependency>
-
-        <dependency>
-            <groupId>org.hibernate</groupId>
-            <artifactId>hibernate-validator</artifactId>
-            <version>6.1.0.Final</version>
-        </dependency>
-
-        <dependency>
-            <groupId>io.springfox</groupId>
-            <artifactId>springfox-swagger2</artifactId>
-            <version>${swagger.version}</version>
-            <scope>compile</scope>
-        </dependency>
-
-        <dependency>
-            <groupId>io.springfox</groupId>
-            <artifactId>springfox-swagger-ui</artifactId>
-            <version>${swagger.version}</version>
-            <scope>compile</scope>
-        </dependency>
-
-        <dependency>
-            <groupId>org.mongodb</groupId>
-            <artifactId>mongo-java-driver</artifactId>
-            <version>${mongojava.version}</version>
-        </dependency>
-
-        <dependency>
-            <groupId>com.couchbase.mock</groupId>
-            <artifactId>CouchbaseMock</artifactId>
-            <version>1.5.22</version>
-            <scope>test</scope>
-        </dependency>
-
-    </dependencies>
-
-
-    <build>
-        <plugins>
-	    <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-deploy-plugin</artifactId>
-                <version>2.8</version>
-                <configuration>
-                        <skip>true</skip>
-                </configuration>
-            </plugin>
-
-            <plugin>
-                <groupId>org.springframework.boot</groupId>
-                <artifactId>spring-boot-maven-plugin</artifactId>
-                <configuration>
-                    <classifier>execute</classifier>
-                    <executions>
-                        <execution>
-                            <goals>
-                                <goal>repackage</goal>
-                            </goals>
-                        </execution>
-                    </executions>
-                </configuration>
-            </plugin>
-            <plugin>
-                <groupId>com.spotify</groupId>
-                <artifactId>dockerfile-maven-plugin</artifactId>
-                <version>${dockerfile-maven.version}</version>
-                <configuration>
-                    <repository>${onap.nexus.dockerregistry.daily}/${docker.image.path}</repository>
-                    <tag>${project.version}</tag>
-                    <dockerfile>Dockerfile</dockerfile>
-                    <buildArgs>
-                        <JAR_FILE>${project.build.finalName}.jar</JAR_FILE>
-                    </buildArgs>
-                </configuration>
-                <executions>
-                    <execution>
-                        <id>build-sl-des-image</id>
-                        <phase>package</phase>
-                        <goals>
-                            <goal>build</goal>
-                        </goals>
-                        <configuration>
-                            <useMavenSettingsForAuth>true</useMavenSettingsForAuth>
-                        </configuration>
-                    </execution>
-                    <execution>
-                        <id>tag-and-push-image-latest</id>
-                        <phase>package</phase>
-                        <goals>
-                            <goal>tag</goal>
-                            <goal>push</goal>
-                        </goals>
-                        <configuration>
-                            <repository>${onap.nexus.dockerregistry.daily}/${docker.image.path}</repository>
-                            <tag>latest</tag>
-                            <useMavenSettingsForAuth>true</useMavenSettingsForAuth>
-                        </configuration>
-                    </execution>
-                    <execution>
-                        <id>tag-and-push-image-with-version</id>
-                        <phase>package</phase>
-                        <goals>
-                            <goal>tag</goal>
-                            <goal>push</goal>
-                        </goals>
-                        <configuration>
-                            <repository>${onap.nexus.dockerregistry.daily}/${docker.image.path}</repository>
-                            <tag>${project.version}</tag>
-                            <useMavenSettingsForAuth>true</useMavenSettingsForAuth>
-                        </configuration>
-                    </execution>
-                    <execution>
-                        <id>tag-and-push-image-with-version-and-date</id>
-                        <phase>package</phase>
-                        <goals>
-                            <goal>tag</goal>
-                            <goal>push</goal>
-                        </goals>
-                        <configuration>
-                            <repository>${onap.nexus.dockerregistry.daily}/${docker.image.path}</repository>
-                            <tag>${project.version}-${maven.build.timestamp}Z</tag>
-                            <useMavenSettingsForAuth>true</useMavenSettingsForAuth>
-                        </configuration>
-                    </execution>
-                </executions>
-                <dependencies>
-                    <!-- To make this work on JDK 9+ -->
-                    <dependency>
-                        <groupId>javax.activation</groupId>
-                        <artifactId>javax.activation-api</artifactId>
-                        <version>1.2.0</version>
-                    </dependency>
-                </dependencies>
-            </plugin>
-        </plugins>
-    </build>
+            <artifactId>spring-boot-maven-plugin</artifactId>
+            <configuration>
+               <classifier>execute</classifier>
+               <executions>
+                  <execution>
+                     <goals>
+                        <goal>repackage</goal>
+                     </goals>
+                  </execution>
+               </executions>
+            </configuration>
+         </plugin>
+         <plugin>
+            <groupId>com.spotify</groupId>
+            <artifactId>dockerfile-maven-plugin</artifactId>
+            <version>${dockerfile-maven.version}</version>
+            <configuration>
+               <repository>${onap.nexus.dockerregistry.daily}/${docker.image.path}</repository>
+               <tag>${project.version}</tag>
+               <dockerfile>Dockerfile</dockerfile>
+               <buildArgs>
+                  <JAR_FILE>${project.build.finalName}.jar</JAR_FILE>
+               </buildArgs>
+            </configuration>
+            <executions>
+               <execution>
+                  <id>build-sl-des-image</id>
+                  <phase>package</phase>
+                  <goals>
+                     <goal>build</goal>
+                  </goals>
+                  <configuration>
+                     <useMavenSettingsForAuth>true</useMavenSettingsForAuth>
+                  </configuration>
+               </execution>
+               <execution>
+                  <id>tag-and-push-image-latest</id>
+                  <phase>package</phase>
+                  <goals>
+                     <goal>tag</goal>
+                     <goal>push</goal>
+                  </goals>
+                  <configuration>
+                     <repository>${onap.nexus.dockerregistry.daily}/${docker.image.path}</repository>
+                     <tag>latest</tag>
+                     <useMavenSettingsForAuth>true</useMavenSettingsForAuth>
+                  </configuration>
+               </execution>
+               <execution>
+                  <id>tag-and-push-image-with-version</id>
+                  <phase>package</phase>
+                  <goals>
+                     <goal>tag</goal>
+                     <goal>push</goal>
+                  </goals>
+                  <configuration>
+                     <repository>${onap.nexus.dockerregistry.daily}/${docker.image.path}</repository>
+                     <tag>${project.version}</tag>
+                     <useMavenSettingsForAuth>true</useMavenSettingsForAuth>
+                  </configuration>
+               </execution>
+               <execution>
+                  <id>tag-and-push-image-with-version-and-date</id>
+                  <phase>package</phase>
+                  <goals>
+                     <goal>tag</goal>
+                     <goal>push</goal>
+                  </goals>
+                  <configuration>
+                     <repository>${onap.nexus.dockerregistry.daily}/${docker.image.path}</repository>
+                     <tag>${project.version}-${maven.build.timestamp}Z</tag>
+                     <useMavenSettingsForAuth>true</useMavenSettingsForAuth>
+                  </configuration>
+               </execution>
+            </executions>
+            <dependencies>
+               <!-- To make this work on JDK 9+ -->
+               <dependency>
+                  <groupId>javax.activation</groupId>
+                  <artifactId>javax.activation-api</artifactId>
+                  <version>1.2.0</version>
+               </dependency>
+            </dependencies>
+         </plugin>
+      </plugins>
+   </build>
 </project>
diff --git a/components/datalake-handler/des/src/test/java/org/onap/datalake/des/controller/DataExposureControllerTest.java b/components/datalake-handler/des/src/test/java/org/onap/datalake/des/controller/DataExposureControllerTest.java
index 4cadc31..c4abac9 100644
--- a/components/datalake-handler/des/src/test/java/org/onap/datalake/des/controller/DataExposureControllerTest.java
+++ b/components/datalake-handler/des/src/test/java/org/onap/datalake/des/controller/DataExposureControllerTest.java
@@ -3,6 +3,7 @@
  * ONAP : DATALAKE DES
  * ================================================================================
  * Copyright (C) 2020 China Mobile. All rights reserved.
+ * Copyright (C) 2022 Wipro Limited.
  * ================================================================================
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -21,20 +22,28 @@
 package org.onap.datalake.des.controller;
 
 import static org.junit.Assert.assertEquals;
+import static org.mockito.Mockito.doThrow;
 import static org.mockito.Mockito.when;
 
 import java.io.IOException;
 import java.sql.SQLException;
+import java.util.ArrayList;
 import java.util.HashMap;
+import java.util.List;
 import java.util.Map;
-
 import javax.servlet.http.HttpServletResponse;
 
 import org.junit.Test;
 import org.junit.runner.RunWith;
+import org.mockito.InjectMocks;
 import org.mockito.Mock;
 import org.mockito.junit.MockitoJUnitRunner;
+import org.onap.datalake.des.domain.DataExposure;
+import org.onap.datalake.des.domain.Db;
+import org.onap.datalake.des.domain.DbType;
+import org.onap.datalake.des.dto.DataExposureConfig;
 import org.onap.datalake.des.repository.DataExposureRepository;
+import org.onap.datalake.des.service.DataExposureService;
 import org.springframework.validation.BindingResult;
 
 /**
@@ -54,16 +63,157 @@
     @Mock
     private BindingResult mockBindingResult;
 
+    @Mock
+    private DataExposureService dataExposureService;
+
+    @InjectMocks
+    private DataExposureController dataExposureController;
+
+    /**
+     * Generate data exposure config.
+     *
+     * @return DataExposureConfig object
+     *
+     */
+    public DataExposureConfig getDataExposureConfig() {
+        DataExposureConfig dataExposureConfig = new DataExposureConfig();
+        dataExposureConfig.setDbId(1);
+        dataExposureConfig.setId("1");
+        dataExposureConfig.setNote("note");
+        dataExposureConfig.setSqlTemplate("sqlTemplate");
+        return dataExposureConfig;
+    }
+
+    /**
+     * Generate data exposure.
+     *
+     * @return DataExposure object
+     *
+     */
+    public DataExposure getDataExposure() {
+        DbType dbType = new DbType("ES", "Elasticsearch");
+        Db db = new Db();
+        db.setId(1);
+        db.setDbType(dbType);
+        db.setDatabase("Elasticsearch");
+
+        DataExposure dataExposure = new DataExposure();
+        dataExposure.setId("1");
+        dataExposure.setNote("note");
+        dataExposure.setSqlTemplate("sqlTemplate");
+        dataExposure.setDb(db);
+        return dataExposure;
+    }
+
     @Test(expected = NullPointerException.class)
-    public void testServe()
-            throws IOException, NoSuchFieldException, IllegalAccessException, ClassNotFoundException, SQLException {
+    public void testServeNull()
+    throws IOException, NoSuchFieldException, IllegalAccessException, ClassNotFoundException, SQLException {
         DataExposureController dataExposureController = new DataExposureController();
         String serviceId = "test";
-        Map<String, String> requestMap = new HashMap<String, String>();
+        Map < String, String > requestMap = new HashMap < String, String > ();
         requestMap.put("name", "oteNB5309");
-        HashMap<String, Object> result = dataExposureController.serve(serviceId, requestMap, mockBindingResult,
-                httpServletResponse);
+        HashMap < String, Object > result = dataExposureController.serve(serviceId, requestMap, mockBindingResult,
+            httpServletResponse);
         assertEquals(null, result);
         when(mockBindingResult.hasErrors()).thenReturn(true);
     }
+
+    @Test(expected = SQLException.class)
+    public void testServeException()
+    throws IOException, NoSuchFieldException, IllegalAccessException, ClassNotFoundException, SQLException {
+        String serviceId = "test";
+        Map < String, String > requestMap = new HashMap < String, String > ();
+        requestMap.put("name", "oteNB5309");
+
+        DataExposure dataExposure = getDataExposure();
+        when(dataExposureService.getDataExposure(serviceId)).thenReturn(dataExposure);
+        dataExposureController.serve(serviceId, requestMap, mockBindingResult,
+            httpServletResponse);
+    }
+
+    @Test
+    public void testQueryAllDataExposure() {
+        DataExposureConfig dataExposureConfig = getDataExposureConfig();
+        List < DataExposureConfig > dataExposureList = new ArrayList < > ();
+        dataExposureList.add(dataExposureConfig);
+        when(dataExposureService.queryAllDataExposure()).thenReturn(dataExposureList);
+        assertEquals(dataExposureList, dataExposureController.queryAllDataExposure());
+    }
+
+    @Test
+    public void TestQueryAllDataExposureByIdNull() throws IOException {
+        when(dataExposureService.getDataExposureById("1")).thenReturn(null);
+        assertEquals(null, dataExposureController.queryAllDataExposure("1", httpServletResponse));
+    }
+
+    @Test
+    public void TestQueryAllDataExposureById() throws IOException {
+        DataExposure dataExposure = getDataExposure();
+        when(dataExposureService.getDataExposureById("1")).thenReturn(dataExposure);
+        dataExposureController.queryAllDataExposure("1", httpServletResponse);
+    }
+
+    @Test
+    public void testCreateDataExposureNull() throws IOException {
+        DataExposure dataExposure = getDataExposure();
+        DataExposureConfig dataExposureConfig = getDataExposureConfig();
+        when(dataExposureService.getDataExposureById("1")).thenReturn(dataExposure);
+        assertEquals(null, dataExposureController.createDataExposure(dataExposureConfig, mockBindingResult, httpServletResponse));
+    }
+
+    @Test
+    public void testCreateDataExposure() throws IOException {
+        DataExposure dataExposure = getDataExposure();
+        DataExposureConfig dataExposureConfig = getDataExposureConfig();
+        when(dataExposureService.getDataExposureById("1")).thenReturn(null);
+        when(dataExposureService.fillDataExposureConfiguration(dataExposureConfig)).thenReturn(dataExposure);
+        dataExposureController.createDataExposure(dataExposureConfig, mockBindingResult, httpServletResponse);
+    }
+
+    @Test
+    public void testCreateDataExposureException() throws IOException {
+        DataExposureConfig dataExposureConfig = getDataExposureConfig();
+        when(dataExposureService.getDataExposureById("1")).thenReturn(null);
+        when(dataExposureService.fillDataExposureConfiguration(dataExposureConfig)).thenThrow(NullPointerException.class);
+        assertEquals(null, dataExposureController.createDataExposure(dataExposureConfig, mockBindingResult, httpServletResponse));
+    }
+
+    @Test
+    public void testCreateDataExposureError() throws IOException {
+        DataExposureConfig dataExposureConfig = getDataExposureConfig();
+        when(mockBindingResult.hasErrors()).thenReturn(true);
+        assertEquals(null, dataExposureController.createDataExposure(dataExposureConfig, mockBindingResult, httpServletResponse));
+    }
+
+    @Test
+    public void testUpdateDataExposureNull() throws IOException {
+        DataExposureConfig dataExposureConfig = getDataExposureConfig();
+        when(dataExposureService.getDataExposureById("1")).thenReturn(null);
+        assertEquals(null, dataExposureController.updateDataExposure(dataExposureConfig, mockBindingResult, "1", httpServletResponse));
+    }
+
+    @Test
+    public void testUpdateDataExposure() throws IOException {
+        DataExposure dataExposure = getDataExposure();
+        DataExposureConfig dataExposureConfig = getDataExposureConfig();
+        when(dataExposureService.getDataExposureById("1")).thenReturn(dataExposure);
+        dataExposureController.updateDataExposure(dataExposureConfig, mockBindingResult, "1", httpServletResponse);
+    }
+
+    @Test
+    public void testUpdateDataExposureException() throws IOException {
+        DataExposure dataExposure = getDataExposure();
+        DataExposureConfig dataExposureConfig = getDataExposureConfig();
+        when(dataExposureService.getDataExposureById("1")).thenReturn(dataExposure);
+        doThrow(NullPointerException.class).when(dataExposureService).fillDataExposureConfiguration(dataExposureConfig, dataExposure);
+        assertEquals(null, dataExposureController.updateDataExposure(dataExposureConfig, mockBindingResult, "1", httpServletResponse));
+    }
+
+    @Test
+    public void testUpdateDataExposureError() throws IOException {
+        DataExposureConfig dataExposureConfig = getDataExposureConfig();
+        when(mockBindingResult.hasErrors()).thenReturn(true);
+        assertEquals(null, dataExposureController.updateDataExposure(dataExposureConfig, mockBindingResult, "1", httpServletResponse));
+    }
+
 }
diff --git a/components/datalake-handler/des/src/test/java/org/onap/datalake/des/domain/DbTest.java b/components/datalake-handler/des/src/test/java/org/onap/datalake/des/domain/DbTest.java
index cd5c6b4..e6dba7f 100644
--- a/components/datalake-handler/des/src/test/java/org/onap/datalake/des/domain/DbTest.java
+++ b/components/datalake-handler/des/src/test/java/org/onap/datalake/des/domain/DbTest.java
@@ -3,6 +3,7 @@
  * ONAP : DataLake DES
  * ================================================================================
  * Copyright 2020 China Mobile. All rights reserved.
+ * Copyright (C) 2022 Wipro Limited.
  *=================================================================================
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -23,6 +24,7 @@
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertNotEquals;
+import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertTrue;
 
 import org.junit.Test;
@@ -74,5 +76,7 @@
         assertTrue("property2".equals(mongoDb2.getProperty2()));
         assertTrue("property3".equals(mongoDb2.getProperty3()));
         assertEquals(mongoDb2.getDbConfig().getHost(), mongoDb2.getHost());
+        assertNotNull(mongoDb1.toString());
     }
+
 }
diff --git a/components/datalake-handler/des/src/test/java/org/onap/datalake/des/domain/DbTypeTest.java b/components/datalake-handler/des/src/test/java/org/onap/datalake/des/domain/DbTypeTest.java
index 4b83a03..9f727c5 100644
--- a/components/datalake-handler/des/src/test/java/org/onap/datalake/des/domain/DbTypeTest.java
+++ b/components/datalake-handler/des/src/test/java/org/onap/datalake/des/domain/DbTypeTest.java
@@ -3,6 +3,7 @@
  * ONAP : DataLake DES
  * ================================================================================
  * Copyright 2020 China Mobile. All rights reserved.
+ * Copyright (C) 2022 Wipro Limited.
  *=================================================================================
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -37,16 +38,18 @@
 
     @Test
     public void test() {
-        DbType dbType = new DbType("ES","Elasticsearch");
+        DbType dbType = new DbType("ES", "Elasticsearch");
 
-        dbType.setTool(false); 
+        dbType.setTool(false);
 
         assertNotNull(dbType.toString());
         assertEquals(dbType, dbType);
         assertNotEquals(dbType, null);
         assertNotEquals(dbType, "ES");
 
-        DbType dbType2 = new DbType("MONGO", "MongoDB");
+        DbType dbType2 = new DbType();
+        dbType2.setId("MONGO");
+        dbType2.setName("MongoDB");
         assertNotEquals(dbType, dbType2);
         assertNotNull(dbType.hashCode());
 
@@ -59,4 +62,4 @@
         assertNull(dbType2.getDbs());
     }
 
-}
\ No newline at end of file
+}
diff --git a/components/datalake-handler/des/src/test/java/org/onap/datalake/des/dto/DbConfigTest.java b/components/datalake-handler/des/src/test/java/org/onap/datalake/des/dto/DbConfigTest.java
index ee21f47..09f868f 100644
--- a/components/datalake-handler/des/src/test/java/org/onap/datalake/des/dto/DbConfigTest.java
+++ b/components/datalake-handler/des/src/test/java/org/onap/datalake/des/dto/DbConfigTest.java
@@ -3,6 +3,7 @@
  * ONAP : DATALAKE DES
  * ================================================================================
  * Copyright (C) 2020 China Mobile. All rights reserved.
+ * Copyright (C) 2022 Wipro Limited.
  * ================================================================================
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -53,5 +54,7 @@
         assertFalse("123".equals(dbConfig.getPort()));
         dbConfig.setPoperties("driver");
         assertTrue("driver".equals(dbConfig.getPoperties()));
+        dbConfig.setDbTypeId("123");
+        assertTrue("123".equals(dbConfig.getDbTypeId()));
     }
 }
diff --git a/components/datalake-handler/des/src/test/java/org/onap/datalake/des/service/DataExposureServiceTest.java b/components/datalake-handler/des/src/test/java/org/onap/datalake/des/service/DataExposureServiceTest.java
index 254afcb..9671a94 100644
--- a/components/datalake-handler/des/src/test/java/org/onap/datalake/des/service/DataExposureServiceTest.java
+++ b/components/datalake-handler/des/src/test/java/org/onap/datalake/des/service/DataExposureServiceTest.java
@@ -3,6 +3,7 @@
  * ONAP : DataLake DES
  * ================================================================================
  * Copyright 2020 China Mobile. All rights reserved.
+ * Copyright (C) 2022 Wipro Limited.
  *=================================================================================
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -22,11 +23,9 @@
 
 import static org.junit.Assert.assertEquals;
 import static org.mockito.Mockito.when;
-
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Optional;
-
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.mockito.InjectMocks;
@@ -40,7 +39,6 @@
 import org.onap.datalake.des.repository.DataExposureRepository;
 import org.onap.datalake.des.repository.DbRepository;
 import org.springframework.context.ApplicationContext;
-
 /**
  * Test DB exposure Service.
  *
@@ -100,6 +98,34 @@
     }
 
     @Test
+    public void testGetDataExposure() {
+        Db newdb = new Db();
+        DbConfig dbConfig = getDbConfig();
+        newdb.setName(dbConfig.getName());
+        newdb.setHost(dbConfig.getHost());
+        newdb.setPort(dbConfig.getPort());
+        newdb.setEnabled(dbConfig.isEnabled());
+        newdb.setLogin(dbConfig.getLogin());
+        newdb.setPass(dbConfig.getPass());
+        newdb.setEncrypt(dbConfig.isEncrypt());
+
+        DataExposure de = new DataExposure();
+        de.setId("1");
+        de.setNote("note");
+        de.setSqlTemplate("sqlTemplate");
+        de.setDb(newdb);
+        when(dataExposureRepository.findById("1")).thenReturn(Optional.of(de));
+        assertEquals(de, dataExposureService.getDataExposure("1"));
+    }
+
+    @Test
+    public void testGetDataExposureNull() {
+        Optional < DataExposure > de = Optional.ofNullable(null);
+        when(dataExposureRepository.findById(null)).thenReturn(de);
+        assertEquals(dataExposureService.getDataExposure(null), null);
+    }
+
+    @Test
     public void testQueryAllDataExposure() {
         Db newdb = new Db();
         DbConfig dbConfig = getDbConfig();
@@ -110,20 +136,56 @@
         newdb.setLogin(dbConfig.getLogin());
         newdb.setPass(dbConfig.getPass());
         newdb.setEncrypt(dbConfig.isEncrypt());
+        
         DataExposureConfig deConfig = getDataExposureConfig();
         DataExposure de = new DataExposure();
         de.setDb(newdb);
         de.setId(deConfig.getId());
         de.setNote(deConfig.getNote());
         de.setSqlTemplate(deConfig.getSqlTemplate());
-        List<DataExposure> deList = new ArrayList<>();
+        List < DataExposure > deList = new ArrayList < > ();
         deList.add(de);
         when(dataExposureRepository.findAll()).thenReturn(deList);
-        List<DataExposureConfig> deConfigList = dataExposureService.queryAllDataExposure();
+        List < DataExposureConfig > deConfigList = dataExposureService.queryAllDataExposure();
         assertEquals(de.getId(), deConfigList.get(0).getId());
     }
 
     @Test
+    public void testQueryAllDataExposureNull() {
+        List < DataExposure > deList = new ArrayList < > ();
+        when(dataExposureRepository.findAll()).thenReturn(deList);
+        assertEquals(dataExposureService.queryAllDataExposure(), deList);
+    }
+
+    @Test
+    public void testGetDataExposureById() {
+        Db newdb = new Db();
+        DbConfig dbConfig = getDbConfig();
+        newdb.setName(dbConfig.getName());
+        newdb.setHost(dbConfig.getHost());
+        newdb.setPort(dbConfig.getPort());
+        newdb.setEnabled(dbConfig.isEnabled());
+        newdb.setLogin(dbConfig.getLogin());
+        newdb.setPass(dbConfig.getPass());
+        newdb.setEncrypt(dbConfig.isEncrypt());
+
+        DataExposure de = new DataExposure();
+        de.setId("1");
+        de.setNote("note");
+        de.setSqlTemplate("sqlTemplate");
+        de.setDb(newdb);
+        when(dataExposureRepository.findById("1")).thenReturn(Optional.of(de));
+        assertEquals(de, dataExposureService.getDataExposureById("1"));
+    }
+
+    @Test
+    public void testGetDataExposureByIdNull() {
+        Optional < DataExposure > de = Optional.ofNullable(null);
+        when(dataExposureRepository.findById(null)).thenReturn(de);
+        assertEquals(dataExposureService.getDataExposureById(null), null);
+    }
+
+    @Test
     public void testFillDataExposureConfiguration() {
         Db newdb = new Db();
         DbConfig dbConfig = getDbConfig();
@@ -153,6 +215,7 @@
         newdb.setEncrypt(dbConfig.isEncrypt());
         DataExposureConfig deConfig = getDataExposureConfig();
         when(dbRepository.findById(deConfig.getDbId())).thenReturn(Optional.of(newdb));
+        
         DataExposure de = new DataExposure();
         de.setDb(newdb);
         de.setId(deConfig.getId());
@@ -161,4 +224,20 @@
         dataExposureService.fillDataExposureConfiguration(deConfig, de);
     }
 
+    @Test(expected = IllegalArgumentException.class)
+    public void testFillDataExposureException() {
+        DataExposureConfig deConfig = getDataExposureConfig();
+        deConfig.setDbId(null);
+        dataExposureService.fillDataExposureConfiguration(deConfig);
+    }
+
+    @Test(expected = IllegalArgumentException.class)
+    public void testFillDataExposureIllegalArgumentException() {
+        DataExposureConfig deConfig = getDataExposureConfig();
+        deConfig.setDbId(1);
+        Optional < Db > dbOptional = Optional.ofNullable(null);
+        when(dbRepository.findById(deConfig.getDbId())).thenReturn(dbOptional);
+        dataExposureService.fillDataExposureConfiguration(deConfig);
+    }
+
 }
diff --git a/components/datalake-handler/feeder/pom.xml b/components/datalake-handler/feeder/pom.xml
index 49ad609..312e8dc 100644
--- a/components/datalake-handler/feeder/pom.xml
+++ b/components/datalake-handler/feeder/pom.xml
@@ -1,299 +1,319 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-	<modelVersion>4.0.0</modelVersion>
+<!--
+  ~ ============LICENSE_START=======================================================
+  ~ Copyright (C) 2018-2019 Huawei. All rights reserved.
+  ~ Copyright 2018 TechMahindra. All rights reserved.
+  ~ Copyright (C) 2019 QCT. All rights reserved.
+  ~ Copyright (c) 2019-2020 China Mobile. All rights reserved.
+  ~ Copyright (C) 2021-2022 Wipro Limited. 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=========================================================
+-->
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+   xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+   <modelVersion>4.0.0</modelVersion>
 
-	<parent>
-		<groupId>org.onap.dcaegen2.services.components</groupId>
-		<artifactId>datalake-handler</artifactId>
-		<version>1.1.1-SNAPSHOT</version>
-	</parent>
+   <parent>
+      <groupId>org.onap.dcaegen2.services.components</groupId>
+      <artifactId>datalake-handler</artifactId>
+      <version>1.1.2-SNAPSHOT</version>
+   </parent>
 
-	<groupId>org.onap.dcaegen2.services.components.datalake-handler</groupId>
-	<artifactId>feeder</artifactId>
-	<packaging>jar</packaging>
-	<name>DataLake Feeder</name>
+   <groupId>org.onap.dcaegen2.services.components.datalake-handler</groupId>
+   <artifactId>feeder</artifactId>
+   <packaging>jar</packaging>
+   <name>DataLake Feeder</name>
 
-	<properties>
-		<swagger.version>2.9.2</swagger.version>
-		<dockerfile-maven.version>1.4.5</dockerfile-maven.version>
-		<docker.image.path>onap/org.onap.dcaegen2.services.datalakefeeder</docker.image.path>
-		<maven.build.timestamp.format>yyyyMMdd'T'HHmmss</maven.build.timestamp.format>
+   <properties>
+      <swagger.version>2.9.2</swagger.version>
+      <dockerfile-maven.version>1.4.5</dockerfile-maven.version>
+      <docker.image.path>onap/org.onap.dcaegen2.services.datalakefeeder</docker.image.path>
+      <maven.build.timestamp.format>yyyyMMdd'T'HHmmss</maven.build.timestamp.format>
+      <onap-gerrit-review>-changelog-missing</onap-gerrit-review>
+   </properties>
 
-	</properties>
+   <dependencies>
 
-	<dependencies>
+      <dependency>
+         <groupId>org.jdom</groupId>
+         <artifactId>jdom2</artifactId>
+         <version>2.0.6</version>
+      </dependency>
 
-		<dependency>
-			<groupId>org.jdom</groupId>
-			<artifactId>jdom2</artifactId>
-			<version>2.0.6</version>
-		</dependency>
+      <dependency>
+         <groupId>com.facebook.presto</groupId>
+         <artifactId>presto-jdbc</artifactId>
+         <version>0.229</version>
+      </dependency>
 
-		<dependency>
-			<groupId>com.facebook.presto</groupId>
-			<artifactId>presto-jdbc</artifactId>
-			<version>0.229</version>
-		</dependency>
+      <dependency>
+         <groupId>org.apache.hadoop</groupId>
+         <artifactId>hadoop-client</artifactId>
+         <version>${hadoop.version}</version>
+      </dependency>
 
-		<dependency>
-			<groupId>org.apache.hadoop</groupId>
-			<artifactId>hadoop-client</artifactId>
-			<version>${hadoop.version}</version>
-		</dependency>
+      <dependency>
+         <groupId>org.postgresql</groupId>
+         <artifactId>postgresql</artifactId>
+         <version>42.2.18</version>
+      </dependency>
 
-                <dependency>
-                        <groupId>org.postgresql</groupId>
-                        <artifactId>postgresql</artifactId>
-                        <version>42.2.18</version>
+      <dependency>
+         <groupId>org.json</groupId>
+         <artifactId>json</artifactId>
+         <version>20190722</version>
+      </dependency>
+
+      <dependency>
+         <groupId>org.apache.httpcomponents</groupId>
+         <artifactId>httpclient</artifactId>
+         <version>4.5.10</version>
+      </dependency>
+
+      <dependency>
+         <groupId>org.apache.kafka</groupId>
+         <artifactId>kafka-clients</artifactId>
+         <version>2.3.1</version>
+      </dependency>
+
+      <dependency>
+         <groupId>org.springframework.boot</groupId>
+         <artifactId>spring-boot-starter-web</artifactId>
+         <version>${springboot.version}</version>
+      </dependency>
+
+      <dependency>
+         <groupId>org.springframework.boot</groupId>
+         <artifactId>spring-boot-starter-actuator</artifactId>
+         <version>${springboot.version}</version>
+      </dependency>
+
+      <dependency>
+         <groupId>org.springframework.boot</groupId>
+         <artifactId>spring-boot-starter-data-jpa</artifactId>
+         <version>${springboot.version}</version>
+      </dependency>
+
+      <dependency>
+         <groupId>org.springframework.boot</groupId>
+         <artifactId>spring-boot-starter-data-couchbase</artifactId>
+         <version>${springboot.version}</version>
+      </dependency>
+
+      <dependency>
+         <groupId>org.springframework.boot</groupId>
+         <artifactId>spring-boot-starter-test</artifactId>
+         <version>${springboot.version}</version>
+         <scope>test</scope>
+      </dependency>
+
+      <dependency>
+         <groupId>org.springframework.boot</groupId>
+         <artifactId>spring-boot-configuration-processor</artifactId>
+         <version>${springboot.version}</version>
+      </dependency>
+
+      <dependency>
+         <groupId>org.elasticsearch.client</groupId>
+         <artifactId>elasticsearch-rest-high-level-client</artifactId>
+         <version>${elasticsearchjava.version}</version>
+      </dependency>
+
+      <dependency>
+         <groupId>commons-io</groupId>
+         <artifactId>commons-io</artifactId>
+         <version>2.6</version>
+      </dependency>
+
+      <dependency>
+         <groupId>com.fasterxml.jackson.dataformat</groupId>
+         <artifactId>jackson-dataformat-yaml</artifactId>
+         <version>${jackson.version}</version>
+      </dependency>
+
+      <dependency>
+         <groupId>com.fasterxml.jackson.dataformat</groupId>
+         <artifactId>jackson-dataformat-xml</artifactId>
+         <version>${jackson.version}</version>
+      </dependency>
+
+      <dependency>
+         <groupId>com.fasterxml.jackson.core</groupId>
+         <artifactId>jackson-databind</artifactId>
+         <version>${jackson.version}</version>
+      </dependency>
+
+      <dependency>
+         <groupId>com.google.code.gson</groupId>
+         <artifactId>gson</artifactId>
+         <version>2.8.2</version>
+      </dependency>
+
+      <dependency>
+         <groupId>org.projectlombok</groupId>
+         <artifactId>lombok</artifactId>
+         <version>1.18.10</version>
+         <scope>provided</scope>
+      </dependency>
+
+      <dependency>
+         <groupId>io.druid</groupId>
+         <artifactId>tranquility-core_2.11</artifactId>
+         <version>0.8.3</version>
+      </dependency>
+
+      <dependency>
+         <groupId>org.apache.velocity</groupId>
+         <artifactId>velocity-engine-core</artifactId>
+         <version>2.1</version>
+      </dependency>
+
+
+      <dependency>
+         <groupId>org.hibernate</groupId>
+         <artifactId>hibernate-core</artifactId>
+         <version>5.3.7.Final</version>
+      </dependency>
+
+      <!-- jsr303 validation -->
+      <dependency>
+         <groupId>javax.validation</groupId>
+         <artifactId>validation-api</artifactId>
+         <version>2.0.1.Final</version>
+      </dependency>
+
+      <dependency>
+         <groupId>org.hibernate</groupId>
+         <artifactId>hibernate-validator</artifactId>
+         <version>6.1.0.Final</version>
+      </dependency>
+
+      <dependency>
+         <groupId>io.springfox</groupId>
+         <artifactId>springfox-swagger2</artifactId>
+         <version>${swagger.version}</version>
+         <scope>compile</scope>
+      </dependency>
+
+      <dependency>
+         <groupId>io.springfox</groupId>
+         <artifactId>springfox-swagger-ui</artifactId>
+         <version>${swagger.version}</version>
+         <scope>compile</scope>
+      </dependency>
+
+      <dependency>
+         <groupId>org.mongodb</groupId>
+         <artifactId>mongo-java-driver</artifactId>
+         <version>${mongojava.version}</version>
+      </dependency>
+      <dependency>
+         <groupId>com.couchbase.mock</groupId>
+         <artifactId>CouchbaseMock</artifactId>
+         <version>1.5.22</version>
+         <scope>test</scope>
+      </dependency>
+   </dependencies>
+
+
+   <build>
+      <plugins>
+         <plugin>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-maven-plugin</artifactId>
+            <configuration>
+               <classifier>exec</classifier>
+            </configuration>
+         </plugin>
+         <plugin>
+            <groupId>com.spotify</groupId>
+            <artifactId>dockerfile-maven-plugin</artifactId>
+            <version>${dockerfile-maven.version}</version>
+            <configuration>
+               <!-- <username>docker</username> <password>docker</password> -->
+               <!-- repository>repo.treescale.com/moguobiao/datalake-feeder-maven</repository -->
+               <!-- repository>moguobiao/datalake-feeder-maven-spotify</repository -->
+               <repository>${onap.nexus.dockerregistry.daily}/${docker.image.path}</repository>
+               <!-- <repository>mizunoami123/dl-feeder</repository> -->
+               <tag>${project.version}</tag>
+               <dockerfile>Dockerfile</dockerfile>
+               <!-- useMavenSettingsForAuth>true</useMavenSettingsForAuth -->
+               <buildArgs>
+                  <JAR_FILE>${project.build.finalName}.jar</JAR_FILE>
+               </buildArgs>
+            </configuration>
+            <executions>
+               <execution>
+                  <id>build-sl-feeder-image</id>
+                  <phase>package</phase>
+                  <goals>
+                     <goal>build</goal>
+                  </goals>
+                  <configuration>
+                     <useMavenSettingsForAuth>true</useMavenSettingsForAuth>
+                  </configuration>
+               </execution>
+               <execution>
+                  <id>tag-and-push-image-latest</id>
+                  <phase>package</phase>
+                  <goals>
+                     <goal>tag</goal>
+                     <goal>push</goal>
+                  </goals>
+                  <configuration>
+                     <repository>${onap.nexus.dockerregistry.daily}/${docker.image.path}</repository>
+                     <tag>latest</tag>
+                     <useMavenSettingsForAuth>true</useMavenSettingsForAuth>
+                  </configuration>
+               </execution>
+               <execution>
+                  <id>tag-and-push-image-with-version</id>
+                  <phase>package</phase>
+                  <goals>
+                     <goal>tag</goal>
+                     <goal>push</goal>
+                  </goals>
+                  <configuration>
+                     <repository>${onap.nexus.dockerregistry.daily}/${docker.image.path}</repository>
+                     <tag>${project.version}</tag>
+                     <useMavenSettingsForAuth>true</useMavenSettingsForAuth>
+                  </configuration>
+               </execution>
+               <execution>
+                  <id>tag-and-push-image-with-version-and-date</id>
+                  <phase>package</phase>
+                  <goals>
+                     <goal>tag</goal>
+                     <goal>push</goal>
+                  </goals>
+                  <configuration>
+                     <repository>${onap.nexus.dockerregistry.daily}/${docker.image.path}</repository>
+                     <tag>${project.version}-${maven.build.timestamp}Z</tag>
+                     <useMavenSettingsForAuth>true</useMavenSettingsForAuth>
+                  </configuration>
+               </execution>
+            </executions>
+            <dependencies>
+               <!-- To make this work on JDK 9+ -->
+               <dependency>
+                  <groupId>javax.activation</groupId>
+                  <artifactId>javax.activation-api</artifactId>
+                  <version>1.2.0</version>
                </dependency>
-
-		<dependency>
-			<groupId>org.json</groupId>
-			<artifactId>json</artifactId>
-			<version>20190722</version>
-		</dependency>
-
-		<dependency>
-			<groupId>org.apache.httpcomponents</groupId>
-			<artifactId>httpclient</artifactId>
-			<version>4.5.10</version>
-		</dependency>
-
-		<dependency>
-			<groupId>org.apache.kafka</groupId>
-			<artifactId>kafka-clients</artifactId>
-			<version>2.3.1</version>
-		</dependency>
-
-		<dependency>
-			<groupId>org.springframework.boot</groupId>
-			<artifactId>spring-boot-starter-web</artifactId>
-			<version>${springboot.version}</version>
-		</dependency>
-
-		<dependency>
-			<groupId>org.springframework.boot</groupId>
-			<artifactId>spring-boot-starter-actuator</artifactId>
-			<version>${springboot.version}</version>
-		</dependency>
-
-		<dependency>
-			<groupId>org.springframework.boot</groupId>
-			<artifactId>spring-boot-starter-data-jpa</artifactId>
-			<version>${springboot.version}</version>
-		</dependency>
-
-		<dependency>
-			<groupId>org.springframework.boot</groupId>
-			<artifactId>spring-boot-starter-data-couchbase</artifactId>
-			<version>${springboot.version}</version>
-		</dependency>
-
-		<dependency>
-			<groupId>org.springframework.boot</groupId>
-			<artifactId>spring-boot-starter-test</artifactId>
-			<version>${springboot.version}</version>
-			<scope>test</scope>
-		</dependency>
-
-		<dependency>
-			<groupId>org.springframework.boot</groupId>
-			<artifactId>spring-boot-configuration-processor</artifactId>
-			<version>${springboot.version}</version>
-		</dependency>
-
-		<dependency>
-			<groupId>org.elasticsearch.client</groupId>
-			<artifactId>elasticsearch-rest-high-level-client</artifactId>
-			<version>${elasticsearchjava.version}</version>
-		</dependency>
-
-		<dependency>
-			<groupId>commons-io</groupId>
-			<artifactId>commons-io</artifactId>
-			<version>2.6</version>
-		</dependency>
-
-		<dependency>
-			<groupId>com.fasterxml.jackson.dataformat</groupId>
-			<artifactId>jackson-dataformat-yaml</artifactId>
-			<version>${jackson.version}</version>
-		</dependency>
-
-		<dependency>
-			<groupId>com.fasterxml.jackson.dataformat</groupId>
-			<artifactId>jackson-dataformat-xml</artifactId>
-			<version>${jackson.version}</version>
-		</dependency>
-
-		<dependency>
-			<groupId>com.fasterxml.jackson.core</groupId>
-			<artifactId>jackson-databind</artifactId>
-			<version>${jackson.version}</version>
-		</dependency>
-
-		<dependency>
-			<groupId>com.google.code.gson</groupId>
-			<artifactId>gson</artifactId>
-			<version>2.8.2</version>
-		</dependency>
-
-		<dependency>
-			<groupId>org.projectlombok</groupId>
-			<artifactId>lombok</artifactId>
-			<version>1.18.10</version>
-			<scope>provided</scope>
-		</dependency>
-
-		<dependency>
-			<groupId>io.druid</groupId>
-			<artifactId>tranquility-core_2.11</artifactId>
-			<version>0.8.3</version>
-		</dependency>
-
-		<dependency>
-			<groupId>org.apache.velocity</groupId>
-			<artifactId>velocity-engine-core</artifactId>
-			<version>2.1</version>
-		</dependency>
-
-
-		<dependency>
-			<groupId>org.hibernate</groupId>
-			<artifactId>hibernate-core</artifactId>
-			<version>5.3.7.Final</version>
-		</dependency>
-
-		<!-- jsr303 validation -->
-		<dependency>
-			<groupId>javax.validation</groupId>
-			<artifactId>validation-api</artifactId>
-			<version>2.0.1.Final</version>
-		</dependency>
-
-		<dependency>
-			<groupId>org.hibernate</groupId>
-			<artifactId>hibernate-validator</artifactId>
-			<version>6.1.0.Final</version>
-		</dependency>
-
-		<dependency>
-			<groupId>io.springfox</groupId>
-			<artifactId>springfox-swagger2</artifactId>
-			<version>${swagger.version}</version>
-			<scope>compile</scope>
-		</dependency>
-
-		<dependency>
-			<groupId>io.springfox</groupId>
-			<artifactId>springfox-swagger-ui</artifactId>
-			<version>${swagger.version}</version>
-			<scope>compile</scope>
-		</dependency>
-
-		<dependency>
-			<groupId>org.mongodb</groupId>
-			<artifactId>mongo-java-driver</artifactId>
-			<version>${mongojava.version}</version>
-		</dependency>
-		<dependency>
-			<groupId>com.couchbase.mock</groupId>
-			<artifactId>CouchbaseMock</artifactId>
-			<version>1.5.22</version>
-			<scope>test</scope>
-		</dependency>
-	</dependencies>
-
-
-	<build>
-		<plugins>
-            <plugin>
-                <groupId>org.springframework.boot</groupId>
-                <artifactId>spring-boot-maven-plugin</artifactId>
-                <configuration>
-                    <classifier>exec</classifier>
-                </configuration>
-            </plugin>
-			<plugin>
-				<groupId>com.spotify</groupId>
-				<artifactId>dockerfile-maven-plugin</artifactId>
-				<version>${dockerfile-maven.version}</version>
-				<configuration> 
-				<!-- 
-					<username>docker</username>
-					<password>docker</password>  -->
-					<!-- repository>repo.treescale.com/moguobiao/datalake-feeder-maven</repository -->
-					<!-- repository>moguobiao/datalake-feeder-maven-spotify</repository -->
-			                <repository>${onap.nexus.dockerregistry.daily}/${docker.image.path}</repository>
-					<!-- <repository>mizunoami123/dl-feeder</repository> -->
-					<tag>${project.version}</tag>
-					<dockerfile>Dockerfile</dockerfile>
-					<!-- useMavenSettingsForAuth>true</useMavenSettingsForAuth -->
-					<buildArgs>
-						<JAR_FILE>${project.build.finalName}.jar</JAR_FILE>
-					</buildArgs>
-				</configuration>
-				<executions>
-					<execution>
-						<id>build-sl-feeder-image</id>
-						<phase>package</phase>
-						<goals>
-						    <goal>build</goal>
-		                                </goals>
-                                                <configuration>
-				                    <useMavenSettingsForAuth>true</useMavenSettingsForAuth>
-					        </configuration>
-					</execution>
-					<execution>
-						<id>tag-and-push-image-latest</id>
-						<phase>package</phase>
-						<goals>
-						    <goal>tag</goal>
-						    <goal>push</goal>
-					        </goals>
-						<configuration>
-							<repository>${onap.nexus.dockerregistry.daily}/${docker.image.path}</repository>
-						        <tag>latest</tag>
-						        <useMavenSettingsForAuth>true</useMavenSettingsForAuth>
-						</configuration>	
-					</execution>
-					<execution>
-						<id>tag-and-push-image-with-version</id>
-						<phase>package</phase>
-						<goals>
-						    <goal>tag</goal>
-						    <goal>push</goal>
-					        </goals>
-						<configuration>
-							<repository>${onap.nexus.dockerregistry.daily}/${docker.image.path}</repository>
-							<tag>${project.version}</tag>
-						        <useMavenSettingsForAuth>true</useMavenSettingsForAuth>
-						</configuration>	
-					</execution>
-					<execution>
-						<id>tag-and-push-image-with-version-and-date</id>
-						<phase>package</phase>
-						<goals>
-						    <goal>tag</goal>
-						    <goal>push</goal>
-					        </goals>
-						<configuration>
-							<repository>${onap.nexus.dockerregistry.daily}/${docker.image.path}</repository>
-							<tag>${project.version}-${maven.build.timestamp}Z</tag>
-							<useMavenSettingsForAuth>true</useMavenSettingsForAuth>
-					        </configuration>
-				        </execution>
-			        </executions>
-				<dependencies>
-					<!-- To make this work on JDK 9+ -->
-					<dependency>
-						<groupId>javax.activation</groupId>
-						<artifactId>javax.activation-api</artifactId>
-						<version>1.2.0</version>
-					</dependency>
-				</dependencies>
-			</plugin>
-		</plugins>
-	</build>
+            </dependencies>
+         </plugin>
+      </plugins>
+   </build>
 </project>
diff --git a/components/datalake-handler/feeder/src/main/java/org/onap/datalake/feeder/service/KafkaService.java b/components/datalake-handler/feeder/src/main/java/org/onap/datalake/feeder/service/KafkaService.java
index 2e959fa..0e617f5 100644
--- a/components/datalake-handler/feeder/src/main/java/org/onap/datalake/feeder/service/KafkaService.java
+++ b/components/datalake-handler/feeder/src/main/java/org/onap/datalake/feeder/service/KafkaService.java
@@ -3,6 +3,7 @@
  * ONAP : DataLake
  * ================================================================================
  * Copyright 2019 China Mobile
+ * Copyright (C) 2022 Wipro Limited.
  *=================================================================================
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -20,14 +21,15 @@
 
 package org.onap.datalake.feeder.service;
 
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Optional;
 import org.onap.datalake.feeder.domain.Kafka;
 import org.onap.datalake.feeder.dto.KafkaConfig;
 import org.onap.datalake.feeder.repository.KafkaRepository;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
-import java.util.*;
-
 /**
  * Service for kafkas
  *
@@ -41,15 +43,15 @@
 
     public Kafka getKafkaById(int id) {
 
-        Optional<Kafka> ret = kafkaRepository.findById(id);
+        Optional < Kafka > ret = kafkaRepository.findById(id);
         return ret.isPresent() ? ret.get() : null;
     }
 
-    public List<KafkaConfig> getAllKafka() {
+    public List < KafkaConfig > getAllKafka() {
 
-        List<KafkaConfig> kafkaConfigList = new ArrayList<>();
-        Iterable<Kafka> kafkaIterable = kafkaRepository.findAll();
-        for(Kafka portal : kafkaIterable) {
+        List < KafkaConfig > kafkaConfigList = new ArrayList < > ();
+        Iterable < Kafka > kafkaIterable = kafkaRepository.findAll();
+        for (Kafka portal: kafkaIterable) {
             kafkaConfigList.add(portal.getKafkaConfig());
         }
         return kafkaConfigList;
diff --git a/components/datalake-handler/feeder/src/test/java/org/onap/datalake/feeder/controller/DbControllerTest.java b/components/datalake-handler/feeder/src/test/java/org/onap/datalake/feeder/controller/DbControllerTest.java
index 9318ee0..889821a 100644
--- a/components/datalake-handler/feeder/src/test/java/org/onap/datalake/feeder/controller/DbControllerTest.java
+++ b/components/datalake-handler/feeder/src/test/java/org/onap/datalake/feeder/controller/DbControllerTest.java
@@ -3,6 +3,7 @@
  * ONAP : DATALAKE
  * ================================================================================
  * Copyright (C) 2018-2019 Huawei. All rights reserved.
+ * Copyright (C) 2022 Wipro Limited.
  * ================================================================================
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -29,9 +30,13 @@
 import org.mockito.junit.MockitoJUnitRunner;
 import org.onap.datalake.feeder.controller.domain.PostReturnBody;
 import org.onap.datalake.feeder.domain.Db;
+import org.onap.datalake.feeder.domain.DbType;
+import org.onap.datalake.feeder.domain.DesignType;
 import org.onap.datalake.feeder.domain.Topic;
 import org.onap.datalake.feeder.dto.DbConfig;
 import org.onap.datalake.feeder.repository.DbRepository;
+import org.onap.datalake.feeder.repository.DbTypeRepository;
+import org.onap.datalake.feeder.repository.DesignTypeRepository;
 import org.onap.datalake.feeder.service.DbService;
 import org.onap.datalake.feeder.util.TestUtil;
 import org.springframework.validation.BindingResult;
@@ -62,11 +67,20 @@
     private DbRepository dbRepository;
 
     @Mock
+    private DbTypeRepository dbTypeRepository;
+
+    @Mock
+    private DesignTypeRepository designTypeRepository;
+
+    @Mock
     private BindingResult mockBindingResult;
 
     @InjectMocks
     private DbService dbService1;
-    
+
+    @InjectMocks
+    private DbController dbController;
+
     public DbConfig getDbConfig() {
         DbConfig dbConfig = new DbConfig();
         dbConfig.setId(1);
@@ -77,16 +91,16 @@
         dbConfig.setDatabase("Elecsticsearch");
         dbConfig.setPort(123);
         dbConfig.setPoperties("driver");
-      	dbConfig.setDbTypeId("ES");
+        dbConfig.setDbTypeId("ES");
         return dbConfig;
     }
 
     public void setAccessPrivateFields(DbController dbController) throws NoSuchFieldException,
-            IllegalAccessException {
-        Field dbRepository1 = dbController.getClass().getDeclaredField("dbRepository");
-        dbRepository1.setAccessible(true);
-        dbRepository1.set(dbController, dbRepository);
-    }
+        IllegalAccessException {
+            Field dbRepository1 = dbController.getClass().getDeclaredField("dbRepository");
+            dbRepository1.setAccessible(true);
+            dbRepository1.set(dbController, dbRepository);
+        }
 
     @Before
     public void setupTest() {
@@ -101,7 +115,7 @@
         DbController dbController = new DbController();
         DbConfig dbConfig = getDbConfig();
         setAccessPrivateFields(dbController);
-        PostReturnBody<DbConfig> db = dbController.createDb(dbConfig, mockBindingResult, httpServletResponse);
+        PostReturnBody < DbConfig > db = dbController.createDb(dbConfig, mockBindingResult, httpServletResponse);
         assertEquals(200, db.getStatusCode());
         when(mockBindingResult.hasErrors()).thenReturn(true);
         db = dbController.createDb(dbConfig, mockBindingResult, httpServletResponse);
@@ -113,8 +127,8 @@
         DbController dbController = new DbController();
         DbConfig dbConfig = getDbConfig();
         when(mockBindingResult.hasErrors()).thenReturn(true);
-        PostReturnBody<DbConfig> db = dbController.updateDb(dbConfig.getId(), dbConfig, mockBindingResult,
-                                                            httpServletResponse);
+        PostReturnBody < DbConfig > db = dbController.updateDb(dbConfig.getId(), dbConfig, mockBindingResult,
+            httpServletResponse);
         assertEquals(null, db);
         //when(mockBindingResult.hasErrors()).thenReturn(false);
         setAccessPrivateFields(dbController);
@@ -135,12 +149,12 @@
         DbController dbController = new DbController();
         String name = "Elecsticsearch";
         int testId = 1234;
-        List<Db> dbs = new ArrayList<>();
+        List < Db > dbs = new ArrayList < > ();
         dbs.add(TestUtil.newDb(name));
         setAccessPrivateFields(dbController);
         when(dbRepository.findAll()).thenReturn(dbs);
-        List<Integer> list = dbController.list();
-        for (int id : list) {
+        List < Integer > list = dbController.list();
+        for (int id: list) {
             assertNotEquals(1234, id);
         }
         //dbController.deleteDb("Elecsticsearch", httpServletResponse);
@@ -155,18 +169,18 @@
         Topic topic = TestUtil.newTopic(topicName);
         topic.setEnabled(true);
         topic.setId(1);
-        Set<Topic> topics = new HashSet<>();
+        Set < Topic > topics = new HashSet < > ();
         topics.add(topic);
         Db db1 = TestUtil.newDb(dbName);
         db1.setTopics(topics);
         setAccessPrivateFields(dbController);
-        Set<Topic> elecsticsearch = dbController.getDbTopics(dbName, httpServletResponse);
+        Set < Topic > elecsticsearch = dbController.getDbTopics(dbName, httpServletResponse);
         assertEquals(Collections.emptySet(), elecsticsearch);
         when(dbRepository.findByName(dbName)).thenReturn(db1);
         elecsticsearch = dbController.getDbTopics(dbName, httpServletResponse);
-        for (Topic anElecsticsearch : elecsticsearch) {
-        	Topic tmp = TestUtil.newTopic(topicName);
-        	tmp.setId(2);
+        for (Topic anElecsticsearch: elecsticsearch) {
+            Topic tmp = TestUtil.newTopic(topicName);
+            tmp.setId(2);
             assertNotEquals(tmp, anElecsticsearch);
         }
         //dbController.deleteDb(dbName, httpServletResponse);
@@ -177,7 +191,7 @@
         DbController dbController = new DbController();
         DbConfig dbConfig = getDbConfig();
         setAccessPrivateFields(dbController);
-        PostReturnBody<DbConfig> db = dbController.createDb(dbConfig, mockBindingResult, httpServletResponse);
+        PostReturnBody < DbConfig > db = dbController.createDb(dbConfig, mockBindingResult, httpServletResponse);
         assertNotNull(db);
     }
 
@@ -185,8 +199,102 @@
     public void testVerifyConnection() throws IOException {
         DbController dbController = new DbController();
         DbConfig dbConfig = getDbConfig();
-        PostReturnBody<DbConfig> dbConfigPostReturnBody = dbController.verifyDbConnection(dbConfig, httpServletResponse);
+        PostReturnBody < DbConfig > dbConfigPostReturnBody = dbController.verifyDbConnection(dbConfig, httpServletResponse);
         assertEquals(null, dbConfigPostReturnBody);
     }
 
+    @Test
+    public void testDeleteDbNull() throws IOException {
+        Optional < Db > dbOptional = Optional.ofNullable(null);
+        when(dbRepository.findById(1)).thenReturn(dbOptional);
+        dbController.deleteDb(1, httpServletResponse);
+    }
+
+    @Test
+    public void deleteDbTest() throws IOException {
+        Db db = TestUtil.newDb("Elecsticsearch");
+        Topic topic = TestUtil.newTopic("Elecsticsearch");
+        topic.setEnabled(true);
+        topic.setId(1);
+        Set < Topic > topics = new HashSet < > ();
+        topics.add(topic);
+        db.setTopics(topics);
+        Optional < Db > dbOptional = Optional.ofNullable(db);
+        when(dbRepository.findById(1)).thenReturn(dbOptional);
+        dbController.deleteDb(1, httpServletResponse);
+    }
+
+    @Test
+    public void testUpdateDbNull() throws IOException {
+        DbConfig dbConfig = getDbConfig();
+        Db db = TestUtil.newDb("Elecsticsearch");
+        Optional < Db > dbOptional = Optional.ofNullable(db);
+        when(dbRepository.findById(dbConfig.getId())).thenReturn(dbOptional);
+        dbController.updateDb(dbConfig.getId(), dbConfig, mockBindingResult, httpServletResponse);
+    }
+
+    @Test
+    public void testDblistByTool() {
+        List < DbType > dbTypeList = new ArrayList < > ();
+        DbType dbType = new DbType("ES", "Elasticsearch");
+        Set < Db > dbs = new HashSet < > ();
+        dbs.add(TestUtil.newDb("MongoDB"));
+        dbType.setDbs(dbs);
+        dbTypeList.add(dbType);
+        when(dbTypeRepository.findByTool(false)).thenReturn(dbTypeList);
+        dbController.dblistByTool(true);
+    }
+
+    @Test
+    public void testListIdAndName() {
+        DesignType designType = new DesignType();
+        DbType dbType = new DbType("ES", "Elasticsearch");
+        Set < Db > dbs = new HashSet < > ();
+        dbs.add(TestUtil.newDb("MongoDB"));
+        dbType.setDbs(dbs);
+        designType.setName("Kibana");
+        designType.setDbType(dbType);
+        when(designTypeRepository.findById("1")).thenReturn(Optional.of(designType));
+        dbController.listIdAndName("1");
+    }
+
+    @Test
+    public void testCreateDbError() throws IOException {
+        when(mockBindingResult.hasErrors()).thenReturn(true);
+        assertEquals(null, dbController.createDb(getDbConfig(), mockBindingResult, httpServletResponse));
+    }
+
+    @Test(expected = NullPointerException.class)
+    public void testCreateDbException() throws IOException {
+        DbConfig dbConfig = getDbConfig();
+        dbConfig.setDbTypeId("");
+        dbController.createDb(dbConfig, mockBindingResult, httpServletResponse);
+    }
+
+    @Test
+    public void createDbTest() throws IOException {
+        DbConfig dbConfig = getDbConfig();
+        DbType dbType = new DbType("ES", "Elasticsearch");
+        when(dbTypeRepository.findById(dbConfig.getDbTypeId())).thenReturn(Optional.of(dbType));
+        dbController.createDb(dbConfig, mockBindingResult, httpServletResponse);
+    }
+
+    @Test
+    public void testGetDb() throws IOException {
+        DbConfig elecsticsearch = dbController.getDb(1, httpServletResponse);
+        assertEquals(null, elecsticsearch);
+    }
+
+    @Test
+    public void testGetDbTypes() throws IOException {
+        List < DbType > dbTypeList = new ArrayList < > ();
+        DbType dbType = new DbType("ES", "Elasticsearch");
+        Set < Db > dbs = new HashSet < > ();
+        dbs.add(TestUtil.newDb("MongoDB"));
+        dbType.setDbs(dbs);
+        dbTypeList.add(dbType);
+        when(dbTypeRepository.findAll()).thenReturn(dbTypeList);
+        dbController.getDbTypes(httpServletResponse);
+    }
+
 }
diff --git a/components/datalake-handler/feeder/src/test/java/org/onap/datalake/feeder/controller/DesignControllerTest.java b/components/datalake-handler/feeder/src/test/java/org/onap/datalake/feeder/controller/DesignControllerTest.java
index 4b933be..ca67099 100644
--- a/components/datalake-handler/feeder/src/test/java/org/onap/datalake/feeder/controller/DesignControllerTest.java
+++ b/components/datalake-handler/feeder/src/test/java/org/onap/datalake/feeder/controller/DesignControllerTest.java
@@ -3,6 +3,7 @@
  * ONAP : DATALAKE
  * ================================================================================
  * Copyright 2019 China Mobile
+ * Copyright (C) 2022 Wipro Limited.
  *=================================================================================
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -29,10 +30,12 @@
 import org.mockito.junit.MockitoJUnitRunner;
 import org.onap.datalake.feeder.config.ApplicationConfiguration;
 import org.onap.datalake.feeder.controller.domain.PostReturnBody;
-import org.onap.datalake.feeder.domain.*;
 import org.onap.datalake.feeder.domain.Design;
+import org.onap.datalake.feeder.domain.DesignType;
+import org.onap.datalake.feeder.domain.TopicName;
 import org.onap.datalake.feeder.dto.DesignConfig;
 import org.onap.datalake.feeder.repository.DesignTypeRepository;
+import org.onap.datalake.feeder.repository.TopicNameRepository;
 import org.onap.datalake.feeder.repository.DesignRepository;
 import org.onap.datalake.feeder.service.DesignService;
 import org.onap.datalake.feeder.service.TopicService;
@@ -46,12 +49,14 @@
 import java.util.List;
 import java.util.Optional;
 
-import static org.junit.Assert.*;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNull;
+import static org.mockito.Mockito.doThrow;
 import static org.mockito.Mockito.when;
 
 @RunWith(MockitoJUnitRunner.class)
 public class DesignControllerTest {
-  
+
     //static String Kibana_Dashboard_Import_Api = "/api/kibana/dashboards/import?exclude=index-pattern";
 
     @Mock
@@ -72,9 +77,14 @@
     @Mock
     private DesignTypeRepository designTypeRepository;
 
-    @InjectMocks
+    @Mock
+    private TopicNameRepository topicNameRepository;
+
+    @Mock
     private DesignService designService;
 
+    @InjectMocks
+    private DesignController testDesignController;
 
     @Before
     public void setupTest() {
@@ -85,40 +95,82 @@
     @Test
     public void testCreateDesign() throws NoSuchFieldException, IllegalAccessException, IOException {
 
-        DesignController testDesignController = new DesignController();
-        setAccessPrivateFields(testDesignController);
         Design testDesign = fillDomain();
+        DesignConfig designConfig = new DesignConfig();
+        when(designService.fillDesignConfiguration(designConfig)).thenReturn(testDesign);
+        testDesignController.createDesign(designConfig, mockBindingResult, httpServletResponse);
+    }
+
+    @Test
+    public void testCreateDesignNull() throws NoSuchFieldException, IllegalAccessException, IOException {
+
+        DesignConfig designConfig = new DesignConfig();
+        when(designService.fillDesignConfiguration(designConfig)).thenThrow(NullPointerException.class);
+        testDesignController.createDesign(designConfig, mockBindingResult, httpServletResponse);
+    }
+
+    @Test
+    public void testCreateDesignError() throws NoSuchFieldException, IllegalAccessException, IOException {
+
+        DesignConfig designConfig = new DesignConfig();
+        when(mockBindingResult.hasErrors()).thenReturn(true);
+        assertEquals(null, testDesignController.createDesign(designConfig, mockBindingResult, httpServletResponse));
+    }
+
+    @Test
+    public void testUpdateDesignNull() throws NoSuchFieldException, IllegalAccessException, IOException {
+
+        Design testDesign = fillDomain();
+        Integer id = 1;
         //when(topicService.getTopic(0)).thenReturn(new Topic("unauthenticated.SEC_FAULT_OUTPUT"));
-//        when(designTypeRepository.findById("Kibana Dashboard")).thenReturn(Optional.of(testDesign.getDesignType()));
-        PostReturnBody<DesignConfig> postPortal = testDesignController.createDesign(testDesign.getDesignConfig(), mockBindingResult, httpServletResponse);
+        //       when(designTypeRepository.findById("Kibana Dashboard")).thenReturn(Optional.of(testDesign.getDesignType()));
+        PostReturnBody < DesignConfig > postPortal = testDesignController.updateDesign(testDesign.getDesignConfig(), mockBindingResult, id, httpServletResponse);
         //assertEquals(postPortal.getStatusCode(), 200);
         assertNull(postPortal);
     }
 
     @Test
-    public void testUpdateDesign() throws NoSuchFieldException, IllegalAccessException, IOException {
-
-        DesignController testDesignController = new DesignController();
-        setAccessPrivateFields(testDesignController);
+    public void testUpdateDesignError() throws NoSuchFieldException, IllegalAccessException, IOException {
         Design testDesign = fillDomain();
         Integer id = 1;
-        when(designRepository.findById(id)).thenReturn((Optional.of(testDesign)));
-        //when(topicService.getTopic(0)).thenReturn(new Topic("unauthenticated.SEC_FAULT_OUTPUT"));
- //       when(designTypeRepository.findById("Kibana Dashboard")).thenReturn(Optional.of(testDesign.getDesignType()));
-        PostReturnBody<DesignConfig> postPortal = testDesignController.updateDesign(testDesign.getDesignConfig(), mockBindingResult, id, httpServletResponse);
-        //assertEquals(postPortal.getStatusCode(), 200);
-        assertNull(postPortal);
+        when(mockBindingResult.hasErrors()).thenReturn(true);
+        assertEquals(null, testDesignController.updateDesign(testDesign.getDesignConfig(), mockBindingResult, id, httpServletResponse));
+    }
+
+    @Test
+    public void testUpdateDesign() throws NoSuchFieldException, IllegalAccessException, IOException {
+        Design testDesign = fillDomain();
+        Integer id = 1;
+        when(designService.getDesign(id)).thenReturn(testDesign);
+        testDesignController.updateDesign(testDesign.getDesignConfig(), mockBindingResult, id, httpServletResponse);
+    }
+
+    @Test
+    public void testUpdateDesignException() throws NoSuchFieldException, IllegalAccessException, IOException {
+        Design testDesign = fillDomain();
+        DesignConfig designConfig = new DesignConfig();
+        Integer id = 1;
+        when(designService.getDesign(id)).thenReturn(testDesign);
+        doThrow(NullPointerException.class).when(designService).fillDesignConfiguration(designConfig, testDesign);
+        testDesignController.updateDesign(designConfig, mockBindingResult, id, httpServletResponse);
+    }
+
+    @Test
+    public void testDeleteDesignNull() throws NoSuchFieldException, IllegalAccessException, IOException {
+
+        Design testDesign = fillDomain();
+        Integer id = 1;
+        testDesign.setId(1);
+        testDesignController.deleteDesign(id, httpServletResponse);
     }
 
     @Test
     public void testDeleteDesign() throws NoSuchFieldException, IllegalAccessException, IOException {
 
-        DesignController testDesignController = new DesignController();
-        setAccessPrivateFields(testDesignController);
         Design testDesign = fillDomain();
         Integer id = 1;
         testDesign.setId(1);
-        when(designRepository.findById(id)).thenReturn((Optional.of(testDesign)));
+        when(designService.getDesign(id)).thenReturn(testDesign);
         testDesignController.deleteDesign(id, httpServletResponse);
     }
 
@@ -128,22 +180,27 @@
         DesignController testDesignController = new DesignController();
         setAccessPrivateFields(testDesignController);
         Design testDesign = fillDomain();
-        List<Design> designList = new ArrayList<>();
+        List < Design > designList = new ArrayList < > ();
         designList.add(testDesign);
-        when(designRepository.findAll()).thenReturn(designList);
-        assertEquals(1, testDesignController.queryAllDesign().size());
+        assertEquals(0, testDesignController.queryAllDesign().size());
     }
 
-    @Test(expected = NullPointerException.class)
-    public void testDeployDesign() throws NoSuchFieldException, IllegalAccessException, IOException {
+    @Test
+    public void testDeployDesignNull() throws NoSuchFieldException, IllegalAccessException, IOException {
 
-        DesignController testDesignController = new DesignController();
-        setAccessPrivateFields(testDesignController);
         Design testDesign = fillDomain();
         Integer id = 1;
         testDesign.setId(1);
-      	//when(applicationConfiguration.getKibanaDashboardImportApi()).thenReturn(Kibana_Dashboard_Import_Api);
-        when(designRepository.findById(id)).thenReturn((Optional.of(testDesign)));
+        testDesignController.deployDesign(id, httpServletResponse);
+    }
+
+    @Test
+    public void testDeployDesign() throws NoSuchFieldException, IllegalAccessException, IOException {
+
+        Design testDesign = fillDomain();
+        Integer id = 1;
+        testDesign.setId(1);
+        when(designRepository.findById(id)).thenReturn(Optional.of(new Design()));
         testDesignController.deployDesign(id, httpServletResponse);
     }
 
@@ -158,16 +215,18 @@
     }
 
 
-    public Design fillDomain(){
+    public Design fillDomain() {
         Design design = new Design();
+        design.setId(1);
         design.setName("Kibana");
         design.setBody("jsonString");
         design.setSubmitted(false);
         design.setNote("test");
         DesignType designType = new DesignType();
+        designType.setId("1");
         designType.setName("Kibana Dashboard");
         design.setDesignType(designType);
         design.setTopicName(new TopicName("unauthenticated.SEC_FAULT_OUTPUT"));
         return design;
     }
-}
\ No newline at end of file
+}
diff --git a/components/datalake-handler/feeder/src/test/java/org/onap/datalake/feeder/controller/DesignTypeControllerTest.java b/components/datalake-handler/feeder/src/test/java/org/onap/datalake/feeder/controller/DesignTypeControllerTest.java
index 91af11c..531b0b2 100644
--- a/components/datalake-handler/feeder/src/test/java/org/onap/datalake/feeder/controller/DesignTypeControllerTest.java
+++ b/components/datalake-handler/feeder/src/test/java/org/onap/datalake/feeder/controller/DesignTypeControllerTest.java
@@ -3,6 +3,7 @@
  * ONAP : DATALAKE
  * ================================================================================
  * Copyright 2019 China Mobile
+ * Copyright (C) 2022 Wipro Limited.
  *=================================================================================
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -24,50 +25,51 @@
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.mockito.InjectMocks;
+import org.mockito.Mock;
 import org.mockito.MockitoAnnotations;
 import org.mockito.junit.MockitoJUnitRunner;
 import org.onap.datalake.feeder.domain.DesignType;
+import org.onap.datalake.feeder.dto.DesignTypeConfig;
+import org.onap.datalake.feeder.repository.DesignTypeRepository;
 import org.onap.datalake.feeder.service.DesignTypeService;
 
-import java.lang.reflect.Field;
 import java.util.ArrayList;
 import java.util.List;
 
-import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.mockito.Mockito.when;
 
 @RunWith(MockitoJUnitRunner.class)
 public class DesignTypeControllerTest {
 
-    @InjectMocks
+    @Mock
+    private DesignTypeRepository designTypeRepository;
+
+    @Mock
     private DesignTypeService designTypeService;
 
+    @InjectMocks
+    private DesignTypeController designTypeController;
+
     @Before
     public void setupTest() {
         MockitoAnnotations.initMocks(this);
     }
 
-    @Test(expected = NullPointerException.class)
-    public void getTemplateTypeName() throws NoSuchFieldException, IllegalAccessException {
-
-        DesignTypeController testDesignTypeController = new DesignTypeController();
-        setAccessPrivateFields(testDesignTypeController);
-        DesignType testDesignType = fillDomain();
-        List<String> designTypeNamesList = new ArrayList<>();
-        designTypeNamesList.add(testDesignType.getName());
-        assertEquals(1, testDesignTypeController.getDesignType().size());
-    }
-
-    public void setAccessPrivateFields(DesignTypeController designTypeController) throws NoSuchFieldException, IllegalAccessException {
-
-        Field testDesignTypeService = designTypeController.getClass().getDeclaredField("designTypeService");
-        testDesignTypeService.setAccessible(true);
-        testDesignTypeService.set(designTypeController, designTypeService);
-    }
-
-
-    public DesignType fillDomain(){
+    public DesignType fillDomain() {
         DesignType designType = new DesignType();
         designType.setName("Kibana Dashboard");
         return designType;
     }
-}
\ No newline at end of file
+
+    @Test
+    public void testGetDesignType() {
+        List < DesignTypeConfig > designTypeNamesList = new ArrayList < > ();
+        List < DesignType > designTypeList = new ArrayList < > ();
+        DesignType designType = fillDomain();
+        designTypeList.add(designType);
+        when(designTypeService.getDesignTypes()).thenReturn(designTypeNamesList);
+        assertNotNull(designTypeController.getDesignType());
+    }
+
+}
diff --git a/components/datalake-handler/feeder/src/test/java/org/onap/datalake/feeder/controller/KafkaControllerTest.java b/components/datalake-handler/feeder/src/test/java/org/onap/datalake/feeder/controller/KafkaControllerTest.java
index 06aa61d..fd685fe 100644
--- a/components/datalake-handler/feeder/src/test/java/org/onap/datalake/feeder/controller/KafkaControllerTest.java
+++ b/components/datalake-handler/feeder/src/test/java/org/onap/datalake/feeder/controller/KafkaControllerTest.java
@@ -3,6 +3,7 @@
  * ONAP : DataLake
  * ================================================================================
  * Copyright 2019 China Mobile
+ * Copyright (C) 2022 Wipro Limited.
  *=================================================================================
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -35,7 +36,8 @@
 
 import java.io.IOException;
 
-import static org.junit.Assert.*;
+import static org.junit.Assert.assertEquals;
+import static org.mockito.Mockito.doThrow;
 import static org.mockito.Mockito.when;
 
 @RunWith(MockitoJUnitRunner.class)
@@ -68,17 +70,74 @@
         when(kafkaService.getKafkaById(kafkaConfig.getId())).thenReturn(null).thenReturn(kafka);
         when(kafkaRepository.save(kafka)).thenReturn(null);
         when(kafkaService.fillKafkaConfiguration(kafkaConfig)).thenReturn(kafka);
-        when(mockBindingResult.hasErrors()).thenReturn(false,true,false,true);
+        when(mockBindingResult.hasErrors()).thenReturn(false, true, false, true);
 
-        kafkaController.createKafka(kafkaConfig,mockBindingResult,httpServletResponse);
-        kafkaController.createKafka(kafkaConfig,mockBindingResult,httpServletResponse);
+        kafkaController.createKafka(kafkaConfig, mockBindingResult, httpServletResponse);
+        kafkaController.createKafka(kafkaConfig, mockBindingResult, httpServletResponse);
 
-        kafkaController.updateKafka(kafkaConfig,mockBindingResult,id,httpServletResponse);
-        kafkaController.updateKafka(kafkaConfig,mockBindingResult,id,httpServletResponse);
+        kafkaController.updateKafka(kafkaConfig, mockBindingResult, id, httpServletResponse);
+        kafkaController.updateKafka(kafkaConfig, mockBindingResult, id, httpServletResponse);
 
-        kafkaController.deleteKafka(id,httpServletResponse);
+        kafkaController.deleteKafka(id, httpServletResponse);
 
         when(kafkaService.getAllKafka()).thenReturn(null);
         kafkaController.queryAllKafka();
     }
-}
\ No newline at end of file
+
+    @Test
+    public void testCreateKafkaNull() throws IOException {
+        KafkaConfig kafkaConfig = new KafkaConfig();
+        kafkaConfig.setId(1);
+        kafkaConfig.setName("123");
+        when(kafkaService.getKafkaById(kafkaConfig.getId())).thenReturn(kafka);
+        assertEquals(null, kafkaController.createKafka(kafkaConfig, mockBindingResult, httpServletResponse));
+    }
+
+    @Test
+    public void testCreateKafkaException() throws IOException {
+        KafkaConfig kafkaConfig = new KafkaConfig();
+        kafkaConfig.setId(1);
+        kafkaConfig.setName("123");
+        when(kafkaService.getKafkaById(kafkaConfig.getId())).thenReturn(null);
+        when(kafkaService.fillKafkaConfiguration(kafkaConfig)).thenThrow(NullPointerException.class);
+        assertEquals(null, kafkaController.createKafka(kafkaConfig, mockBindingResult, httpServletResponse));
+    }
+
+    @Test
+    public void testUpdateKafkaNull() throws IOException {
+        KafkaConfig kafkaConfig = new KafkaConfig();
+        kafkaConfig.setId(1);
+        kafkaConfig.setName("123");
+        when(kafkaService.getKafkaById(kafkaConfig.getId())).thenReturn(null);
+        assertEquals(null, kafkaController.updateKafka(kafkaConfig, mockBindingResult, 1, httpServletResponse));
+    }
+
+    @Test
+    public void testUpdateKafkaException() throws IOException {
+        KafkaConfig kafkaConfig = new KafkaConfig();
+        kafkaConfig.setId(1);
+        kafkaConfig.setName("123");
+        when(kafkaService.getKafkaById(kafkaConfig.getId())).thenReturn(kafka);
+        doThrow(NullPointerException.class).when(kafkaService).fillKafkaConfiguration(kafkaConfig, kafka);
+        assertEquals(null, kafkaController.updateKafka(kafkaConfig, mockBindingResult, 1, httpServletResponse));
+    }
+
+    @Test
+    public void testDeleteKafkaNull() throws IOException {
+        when(kafkaService.getKafkaById(1)).thenReturn(null);
+        kafkaController.deleteKafka(1, httpServletResponse);
+    }
+
+    @Test
+    public void testGetKafkaDetailNull() throws IOException {
+        when(kafkaService.getKafkaById(1)).thenReturn(null);
+        kafkaController.getKafkaDetail(1, httpServletResponse);
+    }
+
+    @Test
+    public void testGetKafkaDetail() throws IOException {
+        when(kafkaService.getKafkaById(1)).thenReturn(kafka);
+        assertEquals(null, kafkaController.getKafkaDetail(1, httpServletResponse));
+    }
+
+}
diff --git a/components/datalake-handler/feeder/src/test/java/org/onap/datalake/feeder/controller/TopicControllerTest.java b/components/datalake-handler/feeder/src/test/java/org/onap/datalake/feeder/controller/TopicControllerTest.java
index 988010e..1710712 100644
--- a/components/datalake-handler/feeder/src/test/java/org/onap/datalake/feeder/controller/TopicControllerTest.java
+++ b/components/datalake-handler/feeder/src/test/java/org/onap/datalake/feeder/controller/TopicControllerTest.java
@@ -3,6 +3,7 @@
  * ONAP : DATALAKE
  * ================================================================================
  * Copyright (C) 2018-2019 Huawei. All rights reserved.
+ * Copyright (C) 2022 Wipro Limited.
  * ================================================================================
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -27,145 +28,185 @@
 import org.mockito.junit.MockitoJUnitRunner;
 import org.onap.datalake.feeder.config.ApplicationConfiguration;
 import org.onap.datalake.feeder.controller.domain.PostReturnBody;
+import org.onap.datalake.feeder.domain.Kafka;
 import org.onap.datalake.feeder.domain.Topic;
 import org.onap.datalake.feeder.dto.TopicConfig;
+import org.onap.datalake.feeder.repository.KafkaRepository;
 import org.onap.datalake.feeder.repository.TopicNameRepository;
 import org.onap.datalake.feeder.repository.TopicRepository;
 import org.onap.datalake.feeder.service.DbService;
 import org.onap.datalake.feeder.service.DmaapService;
 import org.onap.datalake.feeder.service.TopicService;
 import org.onap.datalake.feeder.util.TestUtil;
+import org.springframework.context.ApplicationContext;
 import org.springframework.validation.BindingResult;
 
 import javax.servlet.http.HttpServletResponse;
 import java.io.IOException;
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Optional;
 
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertNull;
+import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.when;
 
 @RunWith(MockitoJUnitRunner.class)
 public class TopicControllerTest {
 
-	static String DEFAULT_TOPIC_NAME = "_DL_DEFAULT_";
+    static String DEFAULT_TOPIC_NAME = "_DL_DEFAULT_";
 
-	@Mock
-	private HttpServletResponse httpServletResponse;
+    @Mock
+    private HttpServletResponse httpServletResponse;
 
-	@Mock
-	private BindingResult mockBindingResult;
+    @Mock
+    private BindingResult mockBindingResult;
 
-	@Mock
-	private TopicRepository topicRepository;
+    @Mock
+    private TopicRepository topicRepository;
 
-	@Mock
-	private TopicService topicService;
+    @Mock
+    private TopicService topicService;
 
-	@Mock
-	private TopicNameRepository topicNameRepository;
+    @Mock
+    private TopicNameRepository topicNameRepository;
 
-	@InjectMocks
-	TopicController topicController;
+    @Mock
+    private KafkaRepository kafkaRepository;
 
-	@Mock
-	private ApplicationConfiguration config;
+    @InjectMocks
+    TopicController topicController;
 
-	@Mock
-	private DbService dbService;
+    @Mock
+    private ApplicationConfiguration config;
 
-	@Mock
-	private DmaapService dmaapService;
+    @Mock
+    private ApplicationContext context;
 
-	@Before
-	public void setupTest() throws NoSuchFieldException, IllegalAccessException {
-		// While the default boolean return value for a mock is 'false',
-		// it's good to be explicit anyway:
-		when(mockBindingResult.hasErrors()).thenReturn(false);
-	}
+    @Mock
+    private DbService dbService;
 
-	@Test
-	public void testListTopic() throws IOException, NoSuchFieldException, IllegalAccessException {
-	}
+    @Mock
+    private DmaapService dmaapService;
 
-	@Test
-	public void testCreateTopic() throws IOException {
-		Topic a = TestUtil.newTopic("a");
-		a.setId(1);
-		a.setEnabled(true);
+    @Before
+    public void setupTest() throws NoSuchFieldException, IllegalAccessException {
+        // While the default boolean return value for a mock is 'false',
+        // it's good to be explicit anyway:
+        when(mockBindingResult.hasErrors()).thenReturn(false);
+    }
 
-		TopicConfig ac = a.getTopicConfig();
+    @Test
+    public void testListTopic() throws IOException, NoSuchFieldException, IllegalAccessException {}
 
-		when(topicService.fillTopicConfiguration(ac)).thenReturn(a);
-		PostReturnBody<TopicConfig> postTopic = topicController.createTopic(ac, mockBindingResult, httpServletResponse);
-		assertEquals(postTopic.getStatusCode(), 200);
+    @Test
+    public void testCreateTopic() throws IOException {
+        Topic a = TestUtil.newTopic("a");
+        a.setId(1);
+        a.setEnabled(true);
 
-		when(mockBindingResult.hasErrors()).thenReturn(true);
-		PostReturnBody<TopicConfig> topicConfig = topicController.createTopic(ac, mockBindingResult, httpServletResponse);
-		assertEquals(null, topicConfig);
-	}
+        TopicConfig ac = a.getTopicConfig();
 
-	@Test
-	public void testUpdateTopic() throws IOException {
-		Topic a = TestUtil.newTopic("a");
-		a.setId(1);
-		a.setEnabled(true);
+        when(topicService.fillTopicConfiguration(ac)).thenReturn(a);
+        PostReturnBody < TopicConfig > postTopic = topicController.createTopic(ac, mockBindingResult, httpServletResponse);
+        assertEquals(postTopic.getStatusCode(), 200);
 
-		TopicConfig ac = a.getTopicConfig();
+        when(topicService.fillTopicConfiguration(ac)).thenReturn(a);
+        a.setTtl(0);
+        PostReturnBody < TopicConfig > postTopicConfig = topicController.createTopic(ac, mockBindingResult, httpServletResponse);
+        assertEquals(postTopicConfig.getStatusCode(), 200);
 
-		when(topicService.getTopic(1)).thenReturn(a);
-		PostReturnBody<TopicConfig> postConfig1 = topicController.updateTopic(1, ac, mockBindingResult, httpServletResponse);
-		assertEquals(200, postConfig1.getStatusCode());
-		TopicConfig ret = postConfig1.getReturnBody();
-		assertEquals("a", ret.getName());
-		assertEquals(true, ret.isEnabled());
+        when(mockBindingResult.hasErrors()).thenReturn(true);
+        PostReturnBody < TopicConfig > topicConfig = topicController.createTopic(ac, mockBindingResult, httpServletResponse);
+        assertEquals(null, topicConfig);
+    }
 
-		topicController.updateTopic(0, ac, mockBindingResult, httpServletResponse);
+    @Test
+    public void testUpdateTopic() throws IOException {
+        Topic a = TestUtil.newTopic("a");
+        a.setId(1);
+        a.setEnabled(true);
 
-		when(topicService.getTopic(1)).thenReturn(null);
-		topicController.updateTopic(1, ac, mockBindingResult, httpServletResponse);
+        TopicConfig ac = a.getTopicConfig();
 
-		when(mockBindingResult.hasErrors()).thenReturn(true);
-		PostReturnBody<TopicConfig> postConfig2 = topicController.updateTopic(1, ac, mockBindingResult, httpServletResponse);
-		assertNull(postConfig2);
+        when(topicService.getTopic(1)).thenReturn(a);
+        PostReturnBody < TopicConfig > postConfig1 = topicController.updateTopic(1, ac, mockBindingResult, httpServletResponse);
+        assertEquals(200, postConfig1.getStatusCode());
+        TopicConfig ret = postConfig1.getReturnBody();
+        assertEquals("a", ret.getName());
+        assertEquals(true, ret.isEnabled());
 
-	}
+        topicController.updateTopic(0, ac, mockBindingResult, httpServletResponse);
 
-	@Test
-	public void testGetTopic() throws IOException {
-		Topic a = TestUtil.newTopic("a");
-		a.setId(1);
-		a.setEnabled(true);
+        when(topicService.getTopic(1)).thenReturn(null);
+        topicController.updateTopic(1, ac, mockBindingResult, httpServletResponse);
 
-		when(topicService.getTopic(1)).thenReturn(a);
-		TopicConfig ac = topicController.getTopic(1, httpServletResponse);
-		when(topicService.getTopic(1)).thenReturn(null);
-		ac = topicController.getTopic(1, httpServletResponse);
-	}
+        when(mockBindingResult.hasErrors()).thenReturn(true);
+        PostReturnBody < TopicConfig > postConfig2 = topicController.updateTopic(1, ac, mockBindingResult, httpServletResponse);
+        assertNull(postConfig2);
 
-	@Test
-	public void testDeleteTopic() throws IOException {
-		Topic a = TestUtil.newTopic("a");
-		a.setId(1);
-		a.setEnabled(true);
+    }
 
-		when(topicService.getTopic(1)).thenReturn(a);
-		topicController.deleteTopic(1, httpServletResponse);
-		when(topicService.getTopic(1)).thenReturn(null);
-		topicController.deleteTopic(1, httpServletResponse);
-	}
+    @Test
+    public void testGetTopic() throws IOException {
+        Topic a = TestUtil.newTopic("a");
+        a.setId(1);
+        a.setEnabled(true);
 
-	@Test
-	public void testList() {
-		ArrayList<Topic> topics = new ArrayList<>();
-		topics.add(TestUtil.newTopic("a"));
-		topics.add(TestUtil.newTopic(DEFAULT_TOPIC_NAME));
-		when(topicRepository.findAll()).thenReturn(topics);
+        when(topicService.getTopic(1)).thenReturn(a);
+        TopicConfig ac = topicController.getTopic(1, httpServletResponse);
+        when(topicService.getTopic(1)).thenReturn(null);
+        ac = topicController.getTopic(1, httpServletResponse);
+    }
 
-		List<Integer> ids = topicController.list();
-		for (Integer topic : ids) {
-			System.out.println(topic);
-		}
-	}
+    @Test
+    public void testDeleteTopic() throws IOException {
+        Topic a = TestUtil.newTopic("a");
+        a.setId(1);
+        a.setEnabled(true);
+
+        when(topicService.getTopic(1)).thenReturn(a);
+        topicController.deleteTopic(1, httpServletResponse);
+        when(topicService.getTopic(1)).thenReturn(null);
+        topicController.deleteTopic(1, httpServletResponse);
+    }
+
+    @Test
+    public void testList() {
+        ArrayList < Topic > topics = new ArrayList < > ();
+        topics.add(TestUtil.newTopic("a"));
+        topics.add(TestUtil.newTopic(DEFAULT_TOPIC_NAME));
+        when(topicRepository.findAll()).thenReturn(topics);
+
+        List < Integer > ids = topicController.list();
+        for (Integer topic: ids) {
+            System.out.println(topic);
+        }
+    }
+
+    @Test
+    public void testGetDefaultConfigNull() throws IOException {
+        Topic topic = null;
+        when(topicService.getDefaultTopicFromFeeder()).thenReturn(topic);
+        assertEquals(null, topicController.getDefaultConfig(httpServletResponse));
+    }
+
+    @Test
+    public void testGetDefaultConfig() throws IOException {
+        Topic topic = TestUtil.newTopic(DEFAULT_TOPIC_NAME);
+        when(topicService.getDefaultTopicFromFeeder()).thenReturn(topic);
+        assertEquals(topic.getName(), topicController.getDefaultConfig(httpServletResponse).getName());
+    }
+
+    @Test
+    public void testListDmaapTopics() {
+        Kafka kafka = TestUtil.newKafka("test");
+        when(kafkaRepository.findById(1)).thenReturn(Optional.of(kafka));
+        DmaapService dmaapService = mock(DmaapService.class);
+        when(context.getBean(DmaapService.class, kafka)).thenReturn(dmaapService);
+        when(dmaapService.getTopics()).thenReturn(null);
+        assertEquals(null, topicController.listDmaapTopics(1));
+    }
+
 }
diff --git a/components/datalake-handler/feeder/src/test/java/org/onap/datalake/feeder/controller/TopicNameControllerTest.java b/components/datalake-handler/feeder/src/test/java/org/onap/datalake/feeder/controller/TopicNameControllerTest.java
new file mode 100644
index 0000000..9ac5f1b
--- /dev/null
+++ b/components/datalake-handler/feeder/src/test/java/org/onap/datalake/feeder/controller/TopicNameControllerTest.java
@@ -0,0 +1,67 @@
+/*
+ * ============LICENSE_START=======================================================
+ * ONAP : DCAE
+ * ================================================================================
+ * Copyright (C) 2022 Wipro Limited.
+ * =================================================================================
+ * 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.datalake.feeder.controller;
+
+import static org.junit.Assert.assertEquals;
+import static org.mockito.Mockito.when;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.InjectMocks;
+import org.mockito.Mock;
+import org.mockito.junit.MockitoJUnitRunner;
+import org.onap.datalake.feeder.domain.Topic;
+import org.onap.datalake.feeder.domain.TopicName;
+import org.onap.datalake.feeder.repository.TopicNameRepository;
+
+@RunWith(MockitoJUnitRunner.class)
+public class TopicNameControllerTest {
+
+    @Mock
+    private TopicNameRepository topicNameRepository;
+
+    @InjectMocks
+    TopicNameController topicNameController;
+
+    @Test
+    public void testList() throws IOException {
+        List < TopicName > topicNameList = new ArrayList < > ();
+
+        TopicName topicName = new TopicName();
+        topicName.setId("1");
+        topicName.setDesigns(null);
+        Topic topic = new Topic();
+        topic.setId(1);
+        Set < Topic > topics = new HashSet < > ();
+        topics.add(topic);
+        topicName.setTopics(topics);
+        topicNameList.add(topicName);
+
+        when(topicNameRepository.findAll()).thenReturn(topicNameList);
+        List < String > retString = topicNameController.list();
+        assertEquals("1", retString.get(0));
+
+    }
+
+}
diff --git a/components/datalake-handler/feeder/src/test/java/org/onap/datalake/feeder/domain/DbTypeTest.java b/components/datalake-handler/feeder/src/test/java/org/onap/datalake/feeder/domain/DbTypeTest.java
index 4a75df1..11432e1 100644
--- a/components/datalake-handler/feeder/src/test/java/org/onap/datalake/feeder/domain/DbTypeTest.java
+++ b/components/datalake-handler/feeder/src/test/java/org/onap/datalake/feeder/domain/DbTypeTest.java
@@ -3,6 +3,7 @@
  * ONAP : DataLake
  * ================================================================================
  * Copyright 2019 China Mobile
+ * Copyright (C) 2022 Wipro Limited.
  *=================================================================================
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -19,20 +20,23 @@
  */
 package org.onap.datalake.feeder.domain;
 
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertTrue;
 import org.junit.Test;
 
-import static org.junit.Assert.*;
-
 public class DbTypeTest {
 
     @Test
-    public void test(){
-        DbType dbType = new DbType("ES","Elasticsearch");
-        
+    public void test() {
+        DbType dbType = new DbType("ES", "Elasticsearch");
+
 
         DbType dbType2 = new DbType("MONGO", "MongoDB");
-        dbType.setTool(false); 
-        
+        dbType.setTool(false);
+
 
         assertNotNull(dbType.toString());
         assertEquals(dbType, dbType);
@@ -44,10 +48,10 @@
         assertEquals("MongoDB", dbType2.getName());
         dbType2.setName(null);
         dbType2.setDefaultPort(1);
-        assertTrue(1==dbType2.getDefaultPort());
+        assertTrue(1 == dbType2.getDefaultPort());
 
         dbType2.setDbs(null);
         assertNull(dbType2.getDbs());
     }
 
-}
\ No newline at end of file
+}
diff --git a/components/datalake-handler/feeder/src/test/java/org/onap/datalake/feeder/domain/DesignTest.java b/components/datalake-handler/feeder/src/test/java/org/onap/datalake/feeder/domain/DesignTest.java
index de6fec2..efc49bf 100644
--- a/components/datalake-handler/feeder/src/test/java/org/onap/datalake/feeder/domain/DesignTest.java
+++ b/components/datalake-handler/feeder/src/test/java/org/onap/datalake/feeder/domain/DesignTest.java
@@ -3,6 +3,7 @@
  * ONAP : DATALAKE
  * ================================================================================
  * Copyright 2019 China Mobile
+ * Copyright (C) 2022 Wipro Limited.
  *=================================================================================
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -20,11 +21,12 @@
 
 package org.onap.datalake.feeder.domain;
 
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertTrue;
 import org.junit.Test;
 import org.onap.datalake.feeder.util.TestUtil;
 
-import static org.junit.Assert.*;
-
 public class DesignTest {
 
     @Test
@@ -53,4 +55,4 @@
         assertNull(design.getDbs());
     }
 
-}
\ No newline at end of file
+}
diff --git a/components/datalake-handler/feeder/src/test/java/org/onap/datalake/feeder/domain/DesignTypeTest.java b/components/datalake-handler/feeder/src/test/java/org/onap/datalake/feeder/domain/DesignTypeTest.java
index e02c2d1..da1c5ec 100644
--- a/components/datalake-handler/feeder/src/test/java/org/onap/datalake/feeder/domain/DesignTypeTest.java
+++ b/components/datalake-handler/feeder/src/test/java/org/onap/datalake/feeder/domain/DesignTypeTest.java
@@ -3,6 +3,7 @@
  * ONAP : DATALAKE
  * ================================================================================
  * Copyright 2019 China Mobile
+ * Copyright (C) 2022 Wipro Limited.
  *=================================================================================
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -20,10 +21,9 @@
 
 package org.onap.datalake.feeder.domain;
 
+import static org.junit.Assert.assertEquals;
 import org.junit.Test;
 
-import static org.junit.Assert.*;
-
 public class DesignTypeTest {
 
     @Test
@@ -40,4 +40,4 @@
         designType.getDesigns();
         designType.getDesignTypeConfig();
     }
-}
\ No newline at end of file
+}
diff --git a/components/datalake-handler/feeder/src/test/java/org/onap/datalake/feeder/dto/DesignConfigTest.java b/components/datalake-handler/feeder/src/test/java/org/onap/datalake/feeder/dto/DesignConfigTest.java
index 22ebe4f..6b0b006 100644
--- a/components/datalake-handler/feeder/src/test/java/org/onap/datalake/feeder/dto/DesignConfigTest.java
+++ b/components/datalake-handler/feeder/src/test/java/org/onap/datalake/feeder/dto/DesignConfigTest.java
@@ -3,6 +3,7 @@
  * ONAP : DATALAKE
  * ================================================================================
  * Copyright 2019 China Mobile
+ * Copyright (C) 2022 Wipro Limited.
  *=================================================================================
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -20,13 +21,13 @@
 
 package org.onap.datalake.feeder.dto;
 
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotEquals;
 import org.junit.Test;
 import org.onap.datalake.feeder.domain.Design;
 import org.onap.datalake.feeder.domain.DesignType;
 import org.onap.datalake.feeder.domain.TopicName;
 
-import static org.junit.Assert.*;
-
 public class DesignConfigTest {
 
     @Test
@@ -58,4 +59,4 @@
         assertEquals(testDesignConfig.getDesignType(), null);
     }
 
-}
\ No newline at end of file
+}
diff --git a/components/datalake-handler/feeder/src/test/java/org/onap/datalake/feeder/dto/DesignTypeConfigTest.java b/components/datalake-handler/feeder/src/test/java/org/onap/datalake/feeder/dto/DesignTypeConfigTest.java
new file mode 100644
index 0000000..a7253ae
--- /dev/null
+++ b/components/datalake-handler/feeder/src/test/java/org/onap/datalake/feeder/dto/DesignTypeConfigTest.java
@@ -0,0 +1,37 @@
+/*
+ * ============LICENSE_START=======================================================
+ * ONAP : DCAE
+ * ================================================================================
+ * Copyright (C) 2022 Wipro Limited.
+ * =================================================================================
+ * 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.datalake.feeder.dto;
+
+import static org.junit.Assert.assertEquals;
+
+import org.junit.Test;
+
+public class DesignTypeConfigTest {
+
+    @Test
+    public void testDesignTypeConfig() {
+        DesignTypeConfig designTypeConfig = new DesignTypeConfig();
+        designTypeConfig.setId("123");
+        designTypeConfig.setName("test");
+        assertEquals("123", designTypeConfig.getId());
+        assertEquals("test", designTypeConfig.getName());
+    }
+
+}
diff --git a/components/datalake-handler/feeder/src/test/java/org/onap/datalake/feeder/dto/KafkaConfigTest.java b/components/datalake-handler/feeder/src/test/java/org/onap/datalake/feeder/dto/KafkaConfigTest.java
index b210417..2d38f53 100644
--- a/components/datalake-handler/feeder/src/test/java/org/onap/datalake/feeder/dto/KafkaConfigTest.java
+++ b/components/datalake-handler/feeder/src/test/java/org/onap/datalake/feeder/dto/KafkaConfigTest.java
@@ -3,6 +3,7 @@
  * ONAP : DataLake
  * ================================================================================
  * Copyright 2019 China Mobile
+ * Copyright (C) 2022 Wipro Limited.
  *=================================================================================
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -19,12 +20,12 @@
  */
 package org.onap.datalake.feeder.dto;
 
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotEquals;
 import org.junit.Test;
 import org.onap.datalake.feeder.domain.Kafka;
 import org.onap.datalake.feeder.util.TestUtil;
 
-import static org.junit.Assert.*;
-
 /**
  * Test Kafka
  *
@@ -76,4 +77,4 @@
         assertNotEquals(null, testKafkaConfig.getTimeout());
     }
 
-}
\ No newline at end of file
+}
diff --git a/components/datalake-handler/feeder/src/test/java/org/onap/datalake/feeder/service/DesignServiceTest.java b/components/datalake-handler/feeder/src/test/java/org/onap/datalake/feeder/service/DesignServiceTest.java
index 65b373f..cdc8c42 100644
--- a/components/datalake-handler/feeder/src/test/java/org/onap/datalake/feeder/service/DesignServiceTest.java
+++ b/components/datalake-handler/feeder/src/test/java/org/onap/datalake/feeder/service/DesignServiceTest.java
@@ -3,6 +3,7 @@
  * ONAP : DCAE
  * ================================================================================
  * Copyright 2019 China Mobile
+ * Copyright (C) 2022 Wipro Limited.
  *=================================================================================
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -25,11 +26,27 @@
 import org.mockito.Mock;
 import org.mockito.junit.MockitoJUnitRunner;
 import org.onap.datalake.feeder.config.ApplicationConfiguration;
+import org.onap.datalake.feeder.domain.Db;
 import org.onap.datalake.feeder.domain.Design;
 import org.onap.datalake.feeder.domain.DesignType;
+import org.onap.datalake.feeder.domain.TopicName;
+import org.onap.datalake.feeder.dto.DesignConfig;
+import org.onap.datalake.feeder.repository.DbRepository;
+import org.onap.datalake.feeder.repository.DesignRepository;
+import org.onap.datalake.feeder.repository.DesignTypeRepository;
+import org.onap.datalake.feeder.repository.TopicNameRepository;
+import org.onap.datalake.feeder.util.TestUtil;
 
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertNull;
 import static org.mockito.Mockito.when;
 
+import java.util.ArrayList;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Optional;
+import java.util.Set;
+
 @RunWith(MockitoJUnitRunner.class)
 public class DesignServiceTest {
 
@@ -37,14 +54,26 @@
     private DesignType designType;
 
     @Mock
+    private DesignRepository designRepository;
+
+    @Mock
+    private TopicNameRepository topicNameRepository;
+
+    @Mock
+    private DbRepository dbRepository;
+
+    @Mock
     private ApplicationConfiguration applicationConfiguration;
 
+    @Mock
+    private DesignTypeRepository designTypeRepository;
+
     @InjectMocks
     private DesignService designService;
 
     @Test(expected = RuntimeException.class)
-    public void testDeploy() {
-        when(designType.getId()).thenReturn("KIBANA_DB","ES_MAPPING");
+    public void testDeployException() {
+        when(designType.getId()).thenReturn("KIBANA_DB", "ES_MAPPING");
         Design design = new Design();
         design.setDesignType(designType);
         design.setBody("jsonString");
@@ -53,4 +82,96 @@
         designService.deploy(design);
         System.out.println();
     }
-}
\ No newline at end of file
+
+    @Test
+    public void testFillDesignConfigurationNull() {
+        DesignConfig designConfig = new DesignConfig();
+        designConfig.setTopicName("topic");
+        designConfig.setDesignType("designType");
+        TopicName topicName = new TopicName("test");
+        Optional < TopicName > topicNameOptional = Optional.of(topicName);
+        when(topicNameRepository.findById(designConfig.getTopicName())).thenReturn(topicNameOptional);
+        when(designTypeRepository.findById(designConfig.getDesignType())).thenReturn(Optional.of(new DesignType()));
+        assertNull(designService.fillDesignConfiguration(designConfig).getName());
+    }
+
+    @Test
+    public void testFillDesignConfiguration() {
+        DesignConfig designConfig = new DesignConfig();
+        designConfig.setTopicName("topic");
+        designConfig.setDesignType("designType");
+
+        List < Integer > dbs = new ArrayList < > ();
+        dbs.add(1);
+        designConfig.setDbs(dbs);
+        when(topicNameRepository.findById(designConfig.getTopicName())).thenReturn(Optional.of(new TopicName()));
+        when(designTypeRepository.findById(designConfig.getDesignType())).thenReturn(Optional.of(new DesignType()));
+        when(dbRepository.findById(designConfig.getDbs().get(0))).thenReturn(Optional.of(new Db()));
+        designService.fillDesignConfiguration(designConfig).getName();
+    }
+
+    @Test(expected = IllegalArgumentException.class)
+    public void testFillDesign() {
+        Design design = new Design();
+        design.setDesignType(designType);
+        DesignConfig designConfig = new DesignConfig();
+        designService.fillDesignConfiguration(designConfig, design);
+    }
+
+    @Test
+    public void testGetDesignNull() {
+        Optional < Design > testDesign = Optional.ofNullable(null);
+        when(designRepository.findById(1)).thenReturn(testDesign);
+        assertNull(designService.getDesign(1));
+    }
+
+    @Test
+    public void testDeploy() {
+        when(designType.getId()).thenReturn("KIBANA_DB");
+        Design design = getDesign();
+        assertNotNull(designService.deploy(design));
+    }
+
+    @Test
+    public void testDeployESMappingCase() {
+        when(designType.getId()).thenReturn("ES_MAPPING");
+        Design design = getDesign();
+        assertNotNull(designService.deploy(design));
+    }
+
+    @Test
+    public void testDeployDefault() {
+        when(designType.getId()).thenReturn("KIBANA_SEARCH");
+        Design design = getDesign();
+        assertNull(designService.deploy(design));
+    }
+
+    @Test(expected = NullPointerException.class)
+    public void testQueryAllDesignNull() {
+        when(designRepository.findAll()).thenReturn(null);
+        designService.queryAllDesign();
+    }
+
+    @Test
+    public void testQueryAllDesign() {
+        List < Design > designList = new ArrayList < > ();
+        Design design = getDesign();
+        designList.add(design);
+        when(designRepository.findAll()).thenReturn(designList);
+        designService.queryAllDesign();
+    }
+
+    public Design getDesign() {
+        Design design = new Design();
+        design.setDesignType(designType);
+        design.setBody("jsonString");
+        design.setTopicName(new TopicName("1"));
+        Set < Db > dbs = new HashSet < > ();
+        Db db = TestUtil.newDb("MongoDB");
+        db.setEnabled(true);
+        dbs.add(db);
+        design.setDbs(dbs);
+        return design;
+    }
+
+}
diff --git a/components/datalake-handler/feeder/src/test/java/org/onap/datalake/feeder/service/DesignTypeServiceTest.java b/components/datalake-handler/feeder/src/test/java/org/onap/datalake/feeder/service/DesignTypeServiceTest.java
index 5879deb..28c8475 100644
--- a/components/datalake-handler/feeder/src/test/java/org/onap/datalake/feeder/service/DesignTypeServiceTest.java
+++ b/components/datalake-handler/feeder/src/test/java/org/onap/datalake/feeder/service/DesignTypeServiceTest.java
@@ -3,6 +3,7 @@
  * ONAP : DataLake
  * ================================================================================
  * Copyright 2019 China Mobile
+ * Copyright (C) 2022 Wipro Limited.
  *=================================================================================
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -25,13 +26,11 @@
 import org.mockito.Mock;
 import org.mockito.junit.MockitoJUnitRunner;
 import org.onap.datalake.feeder.domain.DesignType;
-import org.onap.datalake.feeder.dto.DesignTypeConfig;
 import org.onap.datalake.feeder.repository.DesignTypeRepository;
-
 import java.util.ArrayList;
 import java.util.List;
-
-import static org.junit.Assert.*;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
 import static org.mockito.Mockito.when;
 
 @RunWith(MockitoJUnitRunner.class)
@@ -44,16 +43,19 @@
     private DesignTypeService designTypeService;
 
     @Test
-    public void testDesignTypeService(){
-        List<DesignType> designTypeList = new ArrayList<>();
+    public void testDesignTypeService() {
+        List < DesignType > designTypeList = new ArrayList < > ();
         DesignType designType = new DesignType();
         designType.setName("test");
-        //DesignTypeConfig designTypeConfig = new DesignTypeConfig();
-        //designTypeConfig.setDesignType("test");
-        //designTypeConfig.setDisplay("test");
         designTypeList.add(designType);
         when(designTypeRepository.findAll()).thenReturn(designTypeList);
         assertNotNull(designTypeService.getDesignTypes());
     }
 
-}
\ No newline at end of file
+    @Test
+    public void testDesignTypeServiceNull() {
+        when(designTypeRepository.findAll()).thenReturn(null);
+        assertEquals(0, designTypeService.getDesignTypes().size());
+    }
+
+}
diff --git a/components/datalake-handler/feeder/src/test/java/org/onap/datalake/feeder/service/KafkaServiceTest.java b/components/datalake-handler/feeder/src/test/java/org/onap/datalake/feeder/service/KafkaServiceTest.java
index 0274d30..2cb0740 100644
--- a/components/datalake-handler/feeder/src/test/java/org/onap/datalake/feeder/service/KafkaServiceTest.java
+++ b/components/datalake-handler/feeder/src/test/java/org/onap/datalake/feeder/service/KafkaServiceTest.java
@@ -3,6 +3,7 @@
  * ONAP : DATALAKE
  * ================================================================================
  * Copyright 2019 China Mobile
+ * Copyright (C) 2022 Wipro Limited.
  *=================================================================================
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -28,12 +29,11 @@
 import org.onap.datalake.feeder.domain.Kafka;
 import org.onap.datalake.feeder.dto.KafkaConfig;
 import org.onap.datalake.feeder.repository.KafkaRepository;
-
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Optional;
-
-import static org.junit.Assert.*;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
 import static org.mockito.Mockito.when;
 
 @RunWith(MockitoJUnitRunner.class)
@@ -67,4 +67,4 @@
         kafkaService.fillKafkaConfiguration(kafkaConfig);
     }
 
-}
\ No newline at end of file
+}
diff --git a/components/datalake-handler/feeder/src/test/java/org/onap/datalake/feeder/service/PullServiceTest.java b/components/datalake-handler/feeder/src/test/java/org/onap/datalake/feeder/service/PullServiceTest.java
index d6298b8..f587f35 100644
--- a/components/datalake-handler/feeder/src/test/java/org/onap/datalake/feeder/service/PullServiceTest.java
+++ b/components/datalake-handler/feeder/src/test/java/org/onap/datalake/feeder/service/PullServiceTest.java
@@ -3,6 +3,7 @@
  * ONAP : DATALAKE
  * ================================================================================
  * Copyright 2019 China Mobile
+ * Copyright (C) 2022 Wipro Limited
  *=================================================================================
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -27,74 +28,72 @@
 import org.mockito.junit.MockitoJUnitRunner;
 import org.onap.datalake.feeder.config.ApplicationConfiguration;
 import org.springframework.context.ApplicationContext;
-
 import java.lang.reflect.Field;
 import java.util.List;
 import java.util.concurrent.ExecutorService;
 import java.util.concurrent.locks.ReentrantReadWriteLock;
-
-import static org.junit.Assert.*;
+import static org.junit.Assert.assertFalse;
 import static org.mockito.Mockito.when;
 
 @RunWith(MockitoJUnitRunner.class)
 public class PullServiceTest {
 
-	@InjectMocks
-	private PullService pullService;
+    @InjectMocks
+    private PullService pullService;
 
-	@Mock
-	private ApplicationContext context;
+    @Mock
+    private ApplicationContext context;
 
-	@Mock
-	private ApplicationConfiguration config;
+    @Mock
+    private ApplicationConfiguration config;
 
-	@Mock
-	private ExecutorService executorService;
+    @Mock
+    private ExecutorService executorService;
 
-	@Mock
-	private List<Puller> consumers;
+    @Mock
+    private List < Puller > consumers;
 
-	@Test
-	public void isRunning() {
-		assertFalse(pullService.isRunning());
-	}
+    @Test
+    public void isRunning() {
+        assertFalse(pullService.isRunning());
+    }
 
-	@Test(expected = NullPointerException.class)
-	public void start() {
-		setRunning(false);
-		pullService.start();
-		setRunning(true);
-		pullService.start();
-	}
+    @Test(expected = NullPointerException.class)
+    public void start() {
+        setRunning(false);
+        pullService.start();
+        setRunning(true);
+        pullService.start();
+    }
 
-	@Test
-	public void shutdown() {
-		when(config.getShutdownLock()).thenReturn(new ReentrantReadWriteLock());
-		setRunning(false);
-		pullService.shutdown();
-		setRunning(true);
-		pullService.shutdown();
-	}
+    @Test
+    public void shutdown() {
+        when(config.getShutdownLock()).thenReturn(new ReentrantReadWriteLock());
+        setRunning(false);
+        pullService.shutdown();
+        setRunning(true);
+        pullService.shutdown();
+    }
 
-	private void setRunning(boolean running) {
-		Field configField;
-		try {
-			configField = PullService.class.getDeclaredField("isRunning");
-			configField.setAccessible(true);
-			configField.set(pullService, running);
-		} catch (IllegalArgumentException e) {
-			// TODO Auto-generated catch block
-			e.printStackTrace();
-		} catch (IllegalAccessException e) {
-			// TODO Auto-generated catch block
-			e.printStackTrace();
+    private void setRunning(boolean running) {
+        Field configField;
+        try {
+            configField = PullService.class.getDeclaredField("isRunning");
+            configField.setAccessible(true);
+            configField.set(pullService, running);
+        } catch (IllegalArgumentException e) {
+            // TODO Auto-generated catch block
+            e.printStackTrace();
+        } catch (IllegalAccessException e) {
+            // TODO Auto-generated catch block
+            e.printStackTrace();
 
-		} catch (NoSuchFieldException e) {
-			// TODO Auto-generated catch block
-			e.printStackTrace();
-		} catch (SecurityException e) {
-			// TODO Auto-generated catch block
-			e.printStackTrace();
-		}
-	}
-}
\ No newline at end of file
+        } catch (NoSuchFieldException e) {
+            // TODO Auto-generated catch block
+            e.printStackTrace();
+        } catch (SecurityException e) {
+            // TODO Auto-generated catch block
+            e.printStackTrace();
+        }
+    }
+}
diff --git a/components/datalake-handler/feeder/src/test/java/org/onap/datalake/feeder/service/TopicConfigPollingServiceTest.java b/components/datalake-handler/feeder/src/test/java/org/onap/datalake/feeder/service/TopicConfigPollingServiceTest.java
index bd26519..e30aa7b 100644
--- a/components/datalake-handler/feeder/src/test/java/org/onap/datalake/feeder/service/TopicConfigPollingServiceTest.java
+++ b/components/datalake-handler/feeder/src/test/java/org/onap/datalake/feeder/service/TopicConfigPollingServiceTest.java
@@ -3,6 +3,7 @@
  * ONAP : DATALAKE
  * ================================================================================
  * Copyright 2019 China Mobile
+ * Copyright (C) 2022 Wipro Limited.
  *=================================================================================
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -21,6 +22,7 @@
 package org.onap.datalake.feeder.service;
 
 import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertNull;
 import static org.junit.Assert.assertTrue;
 import static org.mockito.Mockito.when;
 
@@ -30,6 +32,7 @@
 import java.util.Arrays;
 import java.util.HashMap;
 import java.util.HashSet;
+import java.util.List;
 import java.util.Map;
 import java.util.Set;
 
@@ -40,6 +43,7 @@
 import org.mockito.Mock;
 import org.mockito.junit.MockitoJUnitRunner;
 import org.onap.datalake.feeder.config.ApplicationConfiguration;
+import org.onap.datalake.feeder.domain.EffectiveTopic;
 import org.onap.datalake.feeder.domain.Kafka;
 import org.onap.datalake.feeder.util.TestUtil;
 
@@ -51,73 +55,87 @@
  */
 @RunWith(MockitoJUnitRunner.class)
 public class TopicConfigPollingServiceTest {
-	@Mock
-	private ApplicationConfiguration config;
 
-	@Mock
-	private DmaapService dmaapService;
+    @Mock
+    private ApplicationConfiguration config;
 
-	@InjectMocks
-	private TopicConfigPollingService topicConfigPollingService = new TopicConfigPollingService();
+    @Mock
+    private DmaapService dmaapService;
 
-	static String KAFKA_NAME = "kafka1";
+    @Mock
+    private Map < Integer, Map < String, List < EffectiveTopic >>> effectiveTopicMap = new HashMap < > ();
 
-	@Before
-	public void init() throws IllegalAccessException, NoSuchMethodException, InvocationTargetException, NoSuchFieldException {
-		Method init = topicConfigPollingService.getClass().getDeclaredMethod("init");
-		init.setAccessible(true);
-		init.invoke(topicConfigPollingService);
+    @InjectMocks
+    private TopicConfigPollingService topicConfigPollingService = new TopicConfigPollingService();
 
-		Set<String> activeTopics = new HashSet<>(Arrays.asList("test"));
-		Map<Integer, Set<String>> activeTopicMap = new HashMap<>();
-		activeTopicMap.put(1, activeTopics);
+    static String KAFKA_NAME = "kafka1";
 
-		Field activeTopicsField = TopicConfigPollingService.class.getDeclaredField("activeTopicMap");
-		activeTopicsField.setAccessible(true);
-		activeTopicsField.set(topicConfigPollingService, activeTopicMap);
+    @Before
+    public void init()
+    throws IllegalAccessException, NoSuchMethodException, InvocationTargetException, NoSuchFieldException {
+        Method init = topicConfigPollingService.getClass().getDeclaredMethod("init");
+        init.setAccessible(true);
+        init.invoke(topicConfigPollingService);
 
-		Method initMethod = TopicConfigPollingService.class.getDeclaredMethod("init");
-		initMethod.setAccessible(true);
-		initMethod.invoke(topicConfigPollingService);
-	}
+        Set < String > activeTopics = new HashSet < > (Arrays.asList("test"));
+        Map < Integer, Set < String >> activeTopicMap = new HashMap < > ();
+        activeTopicMap.put(1, activeTopics);
 
-	@Test
-	public void testRun() throws InterruptedException {
+        Field activeTopicsField = TopicConfigPollingService.class.getDeclaredField("activeTopicMap");
+        activeTopicsField.setAccessible(true);
+        activeTopicsField.set(topicConfigPollingService, activeTopicMap);
 
-		when(config.getCheckTopicInterval()).thenReturn(1L);
+        Method initMethod = TopicConfigPollingService.class.getDeclaredMethod("init");
+        initMethod.setAccessible(true);
+        initMethod.invoke(topicConfigPollingService);
+    }
 
-		Thread thread = new Thread(topicConfigPollingService);
-		thread.start();
+    @Test
+    public void testRun() throws InterruptedException {
 
-		Thread.sleep(50);
-		topicConfigPollingService.shutdown();
-		thread.join();
+        when(config.getCheckTopicInterval()).thenReturn(1L);
 
-		assertTrue(topicConfigPollingService.isActiveTopicsChanged(new Kafka()));
-	}
+        Thread thread = new Thread(topicConfigPollingService);
+        thread.start();
 
-	@Test
-	public void testRunNoChange() throws InterruptedException {
+        Thread.sleep(50);
+        topicConfigPollingService.shutdown();
+        thread.join();
 
-		when(config.getCheckTopicInterval()).thenReturn(1L);
+        assertTrue(topicConfigPollingService.isActiveTopicsChanged(new Kafka()));
+    }
 
-		Thread thread = new Thread(topicConfigPollingService);
-		thread.start();
+    @Test
+    public void testRunNoChange() throws InterruptedException {
 
-		Thread.sleep(50);
-		topicConfigPollingService.shutdown();
-		thread.join();
+        when(config.getCheckTopicInterval()).thenReturn(1L);
 
-		assertTrue(topicConfigPollingService.isActiveTopicsChanged(new Kafka()));
-	}
+        Thread thread = new Thread(topicConfigPollingService);
+        thread.start();
 
-	@Test
-	public void testGet() {
-		Kafka kafka = TestUtil.newKafka(KAFKA_NAME);
-		kafka.setId(1);
-		//assertNull(topicConfigPollingService.getEffectiveTopic (kafka, "test"));
-		assertNotNull(topicConfigPollingService.getActiveTopics(kafka));
+        Thread.sleep(50);
+        topicConfigPollingService.shutdown();
+        thread.join();
 
-	}
+        assertTrue(topicConfigPollingService.isActiveTopicsChanged(new Kafka()));
+    }
 
-}
\ No newline at end of file
+    @Test
+    public void testGet() {
+        Kafka kafka = TestUtil.newKafka(KAFKA_NAME);
+        kafka.setId(1);
+        //assertNull(topicConfigPollingService.getEffectiveTopic (kafka, "test"));
+        assertNotNull(topicConfigPollingService.getActiveTopics(kafka));
+
+    }
+
+    @Test
+    public void testGetEffectiveTopic() {
+        Kafka kafka = TestUtil.newKafka(KAFKA_NAME);
+        kafka.setId(1);
+        Map < String, List < EffectiveTopic >> effectiveTopicMapKafka = new HashMap < > ();
+        when(effectiveTopicMap.get(kafka.getId())).thenReturn(effectiveTopicMapKafka);
+        assertNull(topicConfigPollingService.getEffectiveTopic(kafka, "test"));
+    }
+
+}
diff --git a/components/datalake-handler/feeder/src/test/java/org/onap/datalake/feeder/service/TopicNameServiceTest.java b/components/datalake-handler/feeder/src/test/java/org/onap/datalake/feeder/service/TopicNameServiceTest.java
new file mode 100644
index 0000000..f040261
--- /dev/null
+++ b/components/datalake-handler/feeder/src/test/java/org/onap/datalake/feeder/service/TopicNameServiceTest.java
@@ -0,0 +1,55 @@
+/*
+ * ============LICENSE_START=======================================================
+ * ONAP : DCAE
+ * ================================================================================
+ * Copyright (C) 2022 Wipro Limited.
+ * =================================================================================
+ * 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.datalake.feeder.service;
+
+import static org.mockito.Mockito.when;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.List;
+
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.InjectMocks;
+import org.mockito.Mock;
+import org.mockito.junit.MockitoJUnitRunner;
+import org.onap.datalake.feeder.domain.TopicName;
+import org.onap.datalake.feeder.repository.TopicNameRepository;
+
+@RunWith(MockitoJUnitRunner.class)
+public class TopicNameServiceTest {
+
+    @Mock
+    private TopicNameRepository topicNameRepository;
+
+    @InjectMocks
+    private TopicNameService topicNameService;
+
+    @Test
+    public void testUpdate() {
+        List < TopicName > topicNameList = new ArrayList < > ();
+        topicNameList.add(new TopicName("test"));
+        Collection < String > allTopicNames = new ArrayList < > ();
+        allTopicNames.add("MONGODB");
+        when(topicNameRepository.findAll()).thenReturn(topicNameList);
+        topicNameService.update(allTopicNames);
+    }
+
+}
diff --git a/components/datalake-handler/feeder/src/test/java/org/onap/datalake/feeder/service/TopicServiceTest.java b/components/datalake-handler/feeder/src/test/java/org/onap/datalake/feeder/service/TopicServiceTest.java
index eea4750..3c03f14 100644
--- a/components/datalake-handler/feeder/src/test/java/org/onap/datalake/feeder/service/TopicServiceTest.java
+++ b/components/datalake-handler/feeder/src/test/java/org/onap/datalake/feeder/service/TopicServiceTest.java
@@ -1,53 +1,51 @@
 /*
-* ============LICENSE_START=======================================================
-* ONAP : DATALAKE
-* ================================================================================
-* Copyright 2019 China Mobile
-*=================================================================================
-* 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=========================================================
-*/
+ * ============LICENSE_START=======================================================
+ * ONAP : DATALAKE
+ * ================================================================================
+ * Copyright 2019 China Mobile
+ * Copyright (C) 2022 Wipro Limited.
+ *=================================================================================
+ * 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.datalake.feeder.service;
 
 import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertNull;
 import static org.junit.Assert.assertTrue;
-import static org.mockito.Mockito.doThrow;
 import static org.mockito.Mockito.when;
 
 import java.io.IOException;
-import java.util.*;
+import java.util.ArrayList;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Optional;
+import java.util.Set;
 
-import org.elasticsearch.client.IndicesClient;
-import org.elasticsearch.client.RequestOptions;
-import org.elasticsearch.client.RestHighLevelClient;
-import org.elasticsearch.client.indices.GetIndexRequest;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.mockito.InjectMocks;
 import org.mockito.Mock;
-import org.mockito.Mockito;
-import org.mockito.invocation.InvocationOnMock;
 import org.mockito.junit.MockitoJUnitRunner;
-import org.mockito.stubbing.Answer;
 import org.onap.datalake.feeder.config.ApplicationConfiguration;
-import org.onap.datalake.feeder.domain.*;
+import org.onap.datalake.feeder.domain.Db;
+import org.onap.datalake.feeder.domain.DbType;
+import org.onap.datalake.feeder.domain.Kafka;
+import org.onap.datalake.feeder.domain.Topic;
+import org.onap.datalake.feeder.domain.TopicName;
 import org.onap.datalake.feeder.dto.TopicConfig;
-import org.onap.datalake.feeder.enumeration.DbTypeEnum;
 import org.onap.datalake.feeder.repository.DbRepository;
+import org.onap.datalake.feeder.repository.KafkaRepository;
 import org.onap.datalake.feeder.repository.TopicNameRepository;
 import org.onap.datalake.feeder.repository.TopicRepository;
 import org.onap.datalake.feeder.service.db.ElasticsearchService;
@@ -61,127 +59,210 @@
 @RunWith(MockitoJUnitRunner.class)
 public class TopicServiceTest {
 
-	static String DEFAULT_TOPIC_NAME = "_DL_DEFAULT_";
+    static String DEFAULT_TOPIC_NAME = "_DL_DEFAULT_";
 
-	@Mock
-	private ApplicationConfiguration config;
-	
-	@Mock
-	private TopicRepository topicRepository;
+    @Mock
+    private ApplicationConfiguration config;
 
-	@Mock
-	private ElasticsearchService elasticsearchService;
+    @Mock
+    private TopicRepository topicRepository;
 
-	@Mock
-	private DbService dbService;
+    @Mock
+    private ElasticsearchService elasticsearchService;
 
-	@Mock
-	private DbRepository dbRepository;
+    @Mock
+    private DbService dbService;
 
-	@Mock
-	private TopicNameRepository topicNameRepository;
+    @Mock
+    private DbRepository dbRepository;
 
-	@InjectMocks
-	private TopicService topicService;
+    @Mock
+    private TopicNameRepository topicNameRepository;
 
-	@Test(expected = NullPointerException.class)
-	public void testGetTopic() throws IOException{
-		List<Topic> topics = new ArrayList<>();
-		Topic topic = new Topic();
-		DbType dbType = new DbType();
-		Set<Kafka> kafkas = new HashSet<>();
-		Set<Db> dbs = new HashSet<>();
-		Db db = new Db();
-		db.setName("Elasticsearch");
-		dbs.add(db);
+    @Mock
+    private KafkaRepository kafkaRepository;
 
-		dbType.setId("ES");
-		db.setDbType(dbType);
+    @InjectMocks
+    private TopicService topicService;
 
-		Kafka kafka = new Kafka();
-		kafka.setName("1234");
-		kafkas.add(kafka);
+    @Test(expected = NullPointerException.class)
+    public void testGetTopicException() throws IOException {
+        List < Topic > topics = new ArrayList < > ();
+        Topic topic = new Topic();
+        DbType dbType = new DbType();
+        Set < Kafka > kafkas = new HashSet < > ();
+        Set < Db > dbs = new HashSet < > ();
+        Db db = new Db();
+        db.setName("Elasticsearch");
+        dbs.add(db);
 
-		TopicName topicName = new TopicName();
-		topicName.setId("1234");
+        dbType.setId("ES");
+        db.setDbType(dbType);
 
-		topic.setTopicName(topicName);
-		topic.setKafkas(kafkas);
-		topic.setEnabled(true);
-		topic.setDbs(dbs);
-		topics.add(topic);
-		when(topicRepository.findAll()).thenReturn(topics);
-		when((ElasticsearchService)dbService.findDbStoreService(db)).thenReturn(new ElasticsearchService(db));
-		topicService.findTopics(kafka,topicName.getId());
-		topicService.getEnabledEffectiveTopic(kafka,topicName.getId(),true);
+        Kafka kafka = new Kafka();
+        kafka.setName("1234");
+        kafkas.add(kafka);
 
-	}
-	@Test
-	public void testGetTopicNull() {
-		Topic topic = new Topic();
-		TopicName topicName = new TopicName();
-		topicName.setId("_DL_DEFAULT_");
-		topic.setId(1234);
-		topic.setTopicName(topicName);
-		Optional<Topic> optional = Optional.of(topic);
-		when(topicRepository.findById(0)).thenReturn(optional);
-		when(config.getDefaultTopicName()).thenReturn("_DL_DEFAULT_");
-		assertEquals(topic,topicService.getTopic(0));
-		assertTrue(topicService.isDefaultTopic(topic));
-	}
+        TopicName topicName = new TopicName();
+        topicName.setId("1234");
 
-	@Test
-	public void testFillTopic(){
-		TopicConfig tConfig = new TopicConfig();
-		tConfig.setId(1234);
-		tConfig.setName("1234");
-		tConfig.setLogin("1234");
-		tConfig.setPassword("1234");
-		tConfig.setEnabled(true);
-		tConfig.setSaveRaw(true);
-		tConfig.setDataFormat("1234");
-		tConfig.setTtl(1234);
-		tConfig.setCorrelateClearedMessage(true);
-		tConfig.setMessageIdPath("1234");
-		tConfig.setAggregateArrayPath("1234");
-		tConfig.setFlattenArrayPath("1234");
-		List<Integer> sinkdbs = new ArrayList<>();
-		sinkdbs.add(1234);
-		tConfig.setSinkdbs(sinkdbs);
+        topic.setTopicName(topicName);
+        topic.setKafkas(kafkas);
+        topic.setEnabled(true);
+        topic.setDbs(dbs);
+        topics.add(topic);
+        when(topicRepository.findAll()).thenReturn(topics);
+        when((ElasticsearchService) dbService.findDbStoreService(db)).thenReturn(new ElasticsearchService(db));
+        topicService.findTopics(kafka, topicName.getId());
+        topicService.getEnabledEffectiveTopic(kafka, topicName.getId(), true);
 
-		Db db = new Db();
-		db.setId(1234);
+    }
 
-		TopicName topicName = new TopicName();
-		topicName.setId("1234");
+    @Test
+    public void testGetTopic() throws IOException {
+        ArrayList < Topic > topics = new ArrayList < > ();
+        Topic topic = new Topic();
+        Set < Kafka > kafkas = new HashSet < > ();
+        Kafka kafka = new Kafka();
+        kafka.setName("1234");
+        kafkas.add(kafka);
+        TopicName topicName = new TopicName();
+        topicName.setId(DEFAULT_TOPIC_NAME);
+        topic.setTopicName(topicName);
+        topic.setKafkas(kafkas);
+        topics.add(topic);
+        when(topicRepository.findAll()).thenReturn(topics);
+        when(config.getDefaultTopicName()).thenReturn("_DL_DEFAULT_");
+        topicService.getEnabledEffectiveTopic(new Kafka(), "test", true);
+    }
 
-		Optional<TopicName> optional = Optional.of(topicName);
-		when(dbRepository.findById(1234)).thenReturn(Optional.of(db));
-		when(topicNameRepository.findById(tConfig.getName())).thenReturn(optional);
+    @Test
+    public void testFindTopics() {
+        ArrayList < Topic > topics = new ArrayList < > ();
+        Topic topic = new Topic();
+        Set < Kafka > kafkas = new HashSet < > ();
+        Kafka kafka = new Kafka();
+        kafka.setName("1234");
+        kafkas.add(kafka);
+        TopicName topicName = new TopicName();
+        topicName.setId(DEFAULT_TOPIC_NAME);
+        topic.setTopicName(topicName);
+        topic.setKafkas(kafkas);
+        topics.add(topic);
+        when(topicRepository.findAll()).thenReturn(topics);
+        topicService.findTopics(kafka, topicName.getId());
+    }
 
-		topicService.fillTopicConfiguration(tConfig);
-	}
+    @Test
+    public void testGetTopicNull() {
+        Topic topic = new Topic();
+        TopicName topicName = new TopicName();
+        topicName.setId("_DL_DEFAULT_");
+        topic.setId(1234);
+        topic.setTopicName(topicName);
+        Optional < Topic > optional = Optional.of(topic);
+        when(topicRepository.findById(0)).thenReturn(optional);
+        when(config.getDefaultTopicName()).thenReturn("_DL_DEFAULT_");
+        assertEquals(topic, topicService.getTopic(0));
+        assertTrue(topicService.isDefaultTopic(topic));
+    }
 
-/*
-	@Test
-	public void testGetEffectiveTopic() throws IOException {
-		String name = "a";
-		Topic topic = new Topic(name);
-		topic.setEnabled(true);
-		Set<Db> dbSet = new HashSet<>();
-		dbSet.add(new Db("Elasticsearch"));
-		topic.setDbs(dbSet);
+    @Test
+    public void testFillTopic() {
+        TopicConfig tConfig = new TopicConfig();
+        tConfig.setId(1234);
+        tConfig.setName("1234");
+        tConfig.setLogin("1234");
+        tConfig.setPassword("1234");
+        tConfig.setEnabled(true);
+        tConfig.setSaveRaw(true);
+        tConfig.setDataFormat("1234");
+        tConfig.setTtl(1234);
+        tConfig.setCorrelateClearedMessage(true);
+        tConfig.setMessageIdPath("1234");
+        tConfig.setAggregateArrayPath("1234");
+        tConfig.setFlattenArrayPath("1234");
+        List < Integer > sinkdbs = new ArrayList < > ();
+        sinkdbs.add(1234);
+        tConfig.setSinkdbs(sinkdbs);
+        List < Integer > kafkas = new ArrayList < > ();
+        kafkas.add(1);
+        tConfig.setKafkas(kafkas);
 
-		when(config.getDefaultTopicName()).thenReturn(DEFAULT_TOPIC_NAME);
-		when(topicRepository.findById(DEFAULT_TOPIC_NAME)).thenReturn(Optional.of(topic));
-		when(topicRepository.findById(name)).thenReturn(Optional.of(topic));
-		when(topicRepository.findById(null)).thenReturn(Optional.empty());
+        Db db = new Db();
+        db.setId(1234);
 
-		assertEquals(topicService.getEffectiveTopic(name), topicService.getEffectiveTopic(name, false));
+        TopicName topicName = new TopicName();
+        topicName.setId("1234");
 
-		assertNotNull(topicService.getEffectiveTopic(null));
+        Optional < TopicName > optional = Optional.of(topicName);
+        when(dbRepository.findById(1234)).thenReturn(Optional.of(db));
+        when(kafkaRepository.findById(1)).thenReturn(Optional.of(new Kafka()));
+        when(topicNameRepository.findById(tConfig.getName())).thenReturn(optional);
+        topicService.fillTopicConfiguration(tConfig);
+    }
 
-		topicService.getEffectiveTopic(name, true);
-	}
-*/
+    @Test
+    public void testGetDefaultTopicFromFeeder() {
+        when(topicRepository.findByTopicName_Id(config.getDefaultTopicName())).thenReturn(new Topic());
+        topicService.getDefaultTopicFromFeeder();
+    }
+
+    @Test
+    public void testGetDefaultTopic() {
+        List < Topic > topics = new ArrayList < > ();
+        Topic topic = new Topic();
+        DbType dbType = new DbType();
+        Set < Kafka > kafkas = new HashSet < > ();
+        Set < Db > dbs = new HashSet < > ();
+        Db db = new Db();
+        db.setName("Elasticsearch");
+        dbs.add(db);
+
+        dbType.setId("ES");
+        db.setDbType(dbType);
+
+        Kafka kafka = new Kafka();
+        kafka.setName("1234");
+        kafkas.add(kafka);
+
+        TopicName topicName = new TopicName();
+        topicName.setId(DEFAULT_TOPIC_NAME);
+        topic.setTopicName(topicName);
+        topic.setKafkas(kafkas);
+        topic.setEnabled(true);
+        topic.setDbs(dbs);
+        topics.add(topic);
+        when(config.getDefaultTopicName()).thenReturn(DEFAULT_TOPIC_NAME);
+        when(topicRepository.findAll()).thenReturn(topics);
+        topicService.getDefaultTopic(kafka);
+    }
+
+    @Test
+    public void testIsDefaultTopic() {
+        assertEquals(false, topicService.isDefaultTopic(null));
+    }
+
+    /*
+    	@Test
+    	public void testGetEffectiveTopic() throws IOException {
+    		String name = "a";
+    		Topic topic = new Topic(name);
+    		topic.setEnabled(true);
+    		Set<Db> dbSet = new HashSet<>();
+    		dbSet.add(new Db("Elasticsearch"));
+    		topic.setDbs(dbSet);
+
+    		when(config.getDefaultTopicName()).thenReturn(DEFAULT_TOPIC_NAME);
+    		when(topicRepository.findById(DEFAULT_TOPIC_NAME)).thenReturn(Optional.of(topic));
+    		when(topicRepository.findById(name)).thenReturn(Optional.of(topic));
+    		when(topicRepository.findById(null)).thenReturn(Optional.empty());
+
+    		assertEquals(topicService.getEffectiveTopic(name), topicService.getEffectiveTopic(name, false));
+
+    		assertNotNull(topicService.getEffectiveTopic(null));
+
+    		topicService.getEffectiveTopic(name, true);
+    	}
+    */
 }
diff --git a/components/datalake-handler/feeder/src/test/java/org/onap/datalake/feeder/service/db/CouchbaseServiceTest.java b/components/datalake-handler/feeder/src/test/java/org/onap/datalake/feeder/service/db/CouchbaseServiceTest.java
old mode 100755
new mode 100644
index 2a7745b..0abee7f
--- a/components/datalake-handler/feeder/src/test/java/org/onap/datalake/feeder/service/db/CouchbaseServiceTest.java
+++ b/components/datalake-handler/feeder/src/test/java/org/onap/datalake/feeder/service/db/CouchbaseServiceTest.java
@@ -3,6 +3,7 @@
  * ONAP : DATALAKE
  * ================================================================================
  * Copyright (C) 2018-2019 Huawei. All rights reserved.
+ * Copyright (C) 2022 Wipro Limited.
  * ================================================================================
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -20,8 +21,12 @@
 
 package org.onap.datalake.feeder.service.db;
 
+import static org.mockito.Mockito.when;
+
+import java.lang.reflect.Field;
 import java.util.ArrayList;
 import java.util.List;
+import java.util.concurrent.locks.ReentrantReadWriteLock;
 
 import org.jetbrains.annotations.NotNull;
 import org.json.JSONObject;
@@ -29,6 +34,8 @@
 import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
+import org.mockito.InjectMocks;
+import org.mockito.Mock;
 import org.mockito.junit.MockitoJUnitRunner;
 import org.onap.datalake.feeder.config.ApplicationConfiguration;
 import org.onap.datalake.feeder.domain.Db;
@@ -46,111 +53,129 @@
 
 @RunWith(MockitoJUnitRunner.class)
 public class CouchbaseServiceTest {
-	protected final BucketConfiguration bucketConfiguration = new BucketConfiguration();
-	protected MockClient mockClient;
-	protected CouchbaseMock couchbaseMock;
-	protected Cluster cluster;
-	protected com.couchbase.client.java.Bucket bucket;
-	protected int carrierPort;
-	protected int httpPort;
+    protected final BucketConfiguration bucketConfiguration = new BucketConfiguration();
+    protected MockClient mockClient;
+    protected CouchbaseMock couchbaseMock;
+    protected Cluster cluster;
+    protected com.couchbase.client.java.Bucket bucket;
+    protected int carrierPort;
+    protected int httpPort;
 
-	protected void getPortInfo(String bucket) throws Exception {
-		httpPort = couchbaseMock.getHttpPort();
-		carrierPort = couchbaseMock.getCarrierPort(bucket);
-	}
+    @InjectMocks
+    private CouchbaseService couchbaseService;
 
-	protected void createMock(@NotNull String name, @NotNull String password) throws Exception {
-		bucketConfiguration.numNodes = 1;
-		bucketConfiguration.numReplicas = 1;
-		bucketConfiguration.numVBuckets = 1024;
-		bucketConfiguration.name = name;
-		bucketConfiguration.type = Bucket.BucketType.COUCHBASE;
-		bucketConfiguration.password = password;
-		ArrayList<BucketConfiguration> configList = new ArrayList<BucketConfiguration>();
-		configList.add(bucketConfiguration);
-		couchbaseMock = new CouchbaseMock(0, configList);
-		couchbaseMock.start();
-		couchbaseMock.waitForStartup();
-	}
+    @Mock
+    private ApplicationConfiguration config;
 
-	protected void createClient() {
-		cluster = CouchbaseCluster.create(DefaultCouchbaseEnvironment.builder().bootstrapCarrierDirectPort(carrierPort).bootstrapHttpDirectPort(httpPort).build(), "couchbase://127.0.0.1");
-		bucket = cluster.openBucket("default");
-	}
+    @Before
+    public void init() throws NoSuchFieldException, IllegalAccessException {
+        Db db = TestUtil.newDb("Couchbasedb");
+        db.setDatabase("database");
+        db.setLogin("login");
+        couchbaseService = new CouchbaseService(db);
 
-	@Before
-	public void setUp() throws Exception {
-		createMock("default", "");
-		getPortInfo("default");
-		createClient();
-	}
+        Field configField = CouchbaseService.class.getDeclaredField("config");
+        configField.setAccessible(true);
+        configField.set(couchbaseService, config);
+        couchbaseService.bucket = bucket;
+        couchbaseService.init();
+    }
 
-	@After
-	public void tearDown() {
-		if (cluster != null) {
-			cluster.disconnect();
-		}
-		if (couchbaseMock != null) {
-			couchbaseMock.stop();
-		}
-		if (mockClient != null) {
-			mockClient.shutdown();
-		}
-	}
+    protected void getPortInfo(String bucket) throws Exception {
+        httpPort = couchbaseMock.getHttpPort();
+        carrierPort = couchbaseMock.getCarrierPort(bucket);
+    }
 
-	@Test
-	public void testSaveJsonsWithTopicId() {
-		ApplicationConfiguration appConfig = new ApplicationConfiguration();
-		appConfig.setTimestampLabel("datalake_ts_");
+    protected void createMock(@NotNull String name, @NotNull String password) throws Exception {
+        bucketConfiguration.numNodes = 1;
+        bucketConfiguration.numReplicas = 1;
+        bucketConfiguration.numVBuckets = 1024;
+        bucketConfiguration.name = name;
+        bucketConfiguration.type = Bucket.BucketType.COUCHBASE;
+        bucketConfiguration.password = password;
+        ArrayList < BucketConfiguration > configList = new ArrayList < BucketConfiguration > ();
+        configList.add(bucketConfiguration);
+        couchbaseMock = new CouchbaseMock(0, configList);
+        couchbaseMock.start();
+        couchbaseMock.waitForStartup();
+    }
 
-		String text = "{ data: { data2 : { value : 'hello'}}}";
+    protected void createClient() {
+        cluster = CouchbaseCluster.create(DefaultCouchbaseEnvironment.builder().bootstrapCarrierDirectPort(carrierPort)
+            .bootstrapHttpDirectPort(httpPort).build(), "couchbase://127.0.0.1");
+        bucket = cluster.openBucket("default");
+    }
 
-		JSONObject json = new JSONObject(text);
+    @Before
+    public void setUp() throws Exception {
+        createMock("default", "");
+        getPortInfo("default");
+        createClient();
+    }
 
-		Topic topic = TestUtil.newTopic("test getMessageId");
-		topic.setMessageIdPath("/data/data2/value");
-		List<JSONObject> jsons = new ArrayList<>();
-		json.put(appConfig.getTimestampLabel(), 1234);
-		jsons.add(json);
-		CouchbaseService couchbaseService = new CouchbaseService(new Db());
-		couchbaseService.bucket = bucket;
-		couchbaseService.config = appConfig;
+    @After
+    public void tearDown() {
+        if (cluster != null) {
+            cluster.disconnect();
+        }
+        if (couchbaseMock != null) {
+            couchbaseMock.stop();
+        }
+        if (mockClient != null) {
+            mockClient.shutdown();
+        }
+    }
 
-		couchbaseService.init();
-		EffectiveTopic effectiveTopic = new EffectiveTopic(topic, "test");
-		couchbaseService.saveJsons(effectiveTopic, jsons);
+    @Test
+    public void testSaveJsonsWithTopicId() {
+        ApplicationConfiguration appConfig = new ApplicationConfiguration();
+        appConfig.setTimestampLabel("datalake_ts_");
 
-	}
+        String text = "{ data: { data2 : { value : 'hello'}}}";
 
-	@Test
-	public void testSaveJsonsWithOutTopicId() {
-		ApplicationConfiguration appConfig = new ApplicationConfiguration();
-		appConfig.setTimestampLabel("datalake_ts_");
+        JSONObject json = new JSONObject(text);
 
-		String text = "{ data: { data2 : { value : 'hello'}}}";
+        Topic topic = TestUtil.newTopic("test getMessageId");
+        topic.setMessageIdPath("/data/data2/value");
+        List < JSONObject > jsons = new ArrayList < > ();
+        json.put(appConfig.getTimestampLabel(), 1234);
+        jsons.add(json);
+        CouchbaseService couchbaseService = new CouchbaseService(new Db());
+        couchbaseService.bucket = bucket;
+        couchbaseService.config = appConfig;
 
-		JSONObject json = new JSONObject(text);
+        couchbaseService.init();
+        EffectiveTopic effectiveTopic = new EffectiveTopic(topic, "test");
+        couchbaseService.saveJsons(effectiveTopic, jsons);
 
-		Topic topic = TestUtil.newTopic("test getMessageId");
-		List<JSONObject> jsons = new ArrayList<>();
-		json.put(appConfig.getTimestampLabel(), 1234);
-		jsons.add(json);
-		CouchbaseService couchbaseService = new CouchbaseService(new Db());
-		couchbaseService.bucket = bucket;
-		couchbaseService.config = appConfig;
+    }
 
-		couchbaseService.init();
-		EffectiveTopic effectiveTopic = new EffectiveTopic(topic, "test");
-		couchbaseService.saveJsons(effectiveTopic, jsons);
-	}
+    @Test
+    public void testSaveJsonsWithOutTopicId() {
+        ApplicationConfiguration appConfig = new ApplicationConfiguration();
+        appConfig.setTimestampLabel("datalake_ts_");
 
-	@Test
-	public void testCleanupBucket() {
-		// CouchbaseService couchbaseService = new CouchbaseService(new Db());
-		// couchbaseService.bucket = bucket;
-		// ApplicationConfiguration appConfig = new ApplicationConfiguration();
-		// couchbaseService.config = appConfig;
-		// couchbaseService.cleanUp();
-	}
+        String text = "{ data: { data2 : { value : 'hello'}}}";
 
-}
\ No newline at end of file
+        JSONObject json = new JSONObject(text);
+
+        Topic topic = TestUtil.newTopic("test getMessageId");
+        List < JSONObject > jsons = new ArrayList < > ();
+        json.put(appConfig.getTimestampLabel(), 1234);
+        jsons.add(json);
+        CouchbaseService couchbaseService = new CouchbaseService(new Db());
+        couchbaseService.bucket = bucket;
+        couchbaseService.config = appConfig;
+
+        couchbaseService.init();
+        EffectiveTopic effectiveTopic = new EffectiveTopic(topic, "test");
+        couchbaseService.saveJsons(effectiveTopic, jsons);
+    }
+
+    @Test
+    public void testCleanupBucket() {
+        when(config.getShutdownLock()).thenReturn(new ReentrantReadWriteLock());
+        couchbaseService.cleanUp();
+    }
+
+}
diff --git a/components/datalake-handler/pom.xml b/components/datalake-handler/pom.xml
index 2a45c02..0db38d1 100644
--- a/components/datalake-handler/pom.xml
+++ b/components/datalake-handler/pom.xml
@@ -1,267 +1,280 @@
 <?xml version="1.0" encoding="UTF-8"?>
+<!--
+============LICENSE_START=======================================================
+    Copyright (c) 2020 China Mobile. All rights reserved.
+    Copyright (C) 2022 Wipro Limited. 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=========================================================
+-->
 <project xmlns="http://maven.apache.org/POM/4.0.0"
-	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-	<modelVersion>4.0.0</modelVersion>
+   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+   xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+   <modelVersion>4.0.0</modelVersion>
 
-	<parent>
-		<groupId>org.onap.oparent</groupId>
-		<artifactId>oparent</artifactId>
-		<version>2.0.0</version>
-	</parent>
+   <parent>
+      <groupId>org.onap.oparent</groupId>
+      <artifactId>oparent</artifactId>
+      <version>2.0.0</version>
+   </parent>
 
-	<groupId>org.onap.dcaegen2.services.components</groupId>
-	<artifactId>datalake-handler</artifactId>
-	<version>1.1.1-SNAPSHOT</version>
-	<packaging>pom</packaging>
+   <groupId>org.onap.dcaegen2.services.components</groupId>
+   <artifactId>datalake-handler</artifactId>
+   <version>1.1.2-SNAPSHOT</version>
+   <packaging>pom</packaging>
 
-	<name>dcaegen2-service-datalake-handler</name>
+   <name>dcaegen2-service-datalake-handler</name>
 
-	<modules>
-		<module>feeder</module>
-		<module>admin</module>
-		<module>collector</module>
-		<module>des</module>
-	</modules>
+   <modules>
+      <module>feeder</module>
+      <module>admin</module>
+      <module>des</module>
+   </modules>
 
-	<properties>
-		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
-		<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
-		<java.version>11</java.version>
+   <properties>
+      <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+      <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
+      <java.version>11</java.version>
 
-		<mongojava.version>3.10.1</mongojava.version>
-		<springboot.version>2.1.0.RELEASE</springboot.version>
-		<springcouchbase.version>3.1.2.RELEASE</springcouchbase.version>
-		<jackson.version>2.9.8</jackson.version>
-		<kafka.version>2.0.0</kafka.version>
-		<elasticsearchjava.version>7.1.1</elasticsearchjava.version>
-		<hadoop.version>3.2.0</hadoop.version>
+      <mongojava.version>3.10.1</mongojava.version>
+      <springboot.version>2.1.0.RELEASE</springboot.version>
+      <springcouchbase.version>3.1.2.RELEASE</springcouchbase.version>
+      <jackson.version>2.9.8</jackson.version>
+      <kafka.version>2.0.0</kafka.version>
+      <elasticsearchjava.version>7.1.1</elasticsearchjava.version>
+      <hadoop.version>3.2.0</hadoop.version>
 
-		<sonar.coverage.jacoco.xmlReportPaths>
-		  ${project.reporting.outputDirectory}/jacoco-ut/jacoco.xml
-		</sonar.coverage.jacoco.xmlReportPaths>
-	</properties>
+      <sonar.coverage.jacoco.xmlReportPaths>
+         ${project.reporting.outputDirectory}/jacoco-ut/jacoco.xml
+      </sonar.coverage.jacoco.xmlReportPaths>
+   </properties>
 
-	<dependencyManagement>
-		<dependencies>
+   <dependencyManagement>
+      <dependencies>
 
-			<dependency>
-				<groupId>org.apache.hadoop</groupId>
-				<artifactId>hadoop-client</artifactId>
-				<version>${hadoop.version}</version>
-			</dependency>
+         <dependency>
+            <groupId>org.apache.hadoop</groupId>
+            <artifactId>hadoop-client</artifactId>
+            <version>${hadoop.version}</version>
+         </dependency>
 
-			<dependency>
-				<groupId>org.mariadb.jdbc</groupId>
-				<artifactId>mariadb-java-client</artifactId>
-				<version>2.4.1</version>
-			</dependency>
+         <dependency>
+            <groupId>org.mariadb.jdbc</groupId>
+            <artifactId>mariadb-java-client</artifactId>
+            <version>2.4.1</version>
+         </dependency>
 
-			<dependency>
-				<groupId>commons-io</groupId>
-				<artifactId>commons-io</artifactId>
-				<version>2.6</version>
-			</dependency>
+         <dependency>
+            <groupId>commons-io</groupId>
+            <artifactId>commons-io</artifactId>
+            <version>2.6</version>
+         </dependency>
 
-			<dependency>
-				<groupId>com.fasterxml.jackson.core</groupId>
-				<artifactId>jackson-core</artifactId>
-				<version>${jackson.version}</version>
-			</dependency>
+         <dependency>
+            <groupId>com.fasterxml.jackson.core</groupId>
+            <artifactId>jackson-core</artifactId>
+            <version>${jackson.version}</version>
+         </dependency>
 
-			<dependency>
-				<groupId>com.fasterxml.jackson.core</groupId>
-				<artifactId>jackson-annotations</artifactId>
-				<version>${jackson.version}</version>
-			</dependency>
+         <dependency>
+            <groupId>com.fasterxml.jackson.core</groupId>
+            <artifactId>jackson-annotations</artifactId>
+            <version>${jackson.version}</version>
+         </dependency>
 
-			<dependency>
-				<groupId>com.fasterxml.jackson.core</groupId>
-				<artifactId>jackson-databind</artifactId>
-				<version>${jackson.version}</version>
-			</dependency>
+         <dependency>
+            <groupId>com.fasterxml.jackson.core</groupId>
+            <artifactId>jackson-databind</artifactId>
+            <version>${jackson.version}</version>
+         </dependency>
 
-			<dependency>
-				<groupId>com.fasterxml.jackson.dataformat</groupId>
-				<artifactId>jackson-dataformat-yaml</artifactId>
-				<version>${jackson.version}</version>
-			</dependency>
+         <dependency>
+            <groupId>com.fasterxml.jackson.dataformat</groupId>
+            <artifactId>jackson-dataformat-yaml</artifactId>
+            <version>${jackson.version}</version>
+         </dependency>
 
-			<dependency>
-				<groupId>com.fasterxml.jackson.dataformat</groupId>
-				<artifactId>jackson-dataformat-xml</artifactId>
-				<version>${jackson.version}</version>
-			</dependency>
+         <dependency>
+            <groupId>com.fasterxml.jackson.dataformat</groupId>
+            <artifactId>jackson-dataformat-xml</artifactId>
+            <version>${jackson.version}</version>
+         </dependency>
 
-			<dependency>
-				<groupId>com.google.code.gson</groupId>
-				<artifactId>gson</artifactId>
-				<version>2.8.2</version>
-			</dependency>
+         <dependency>
+            <groupId>com.google.code.gson</groupId>
+            <artifactId>gson</artifactId>
+            <version>2.8.2</version>
+         </dependency>
 
-			<dependency>
-				<groupId>io.druid</groupId>
-				<artifactId>tranquility-core_2.11</artifactId>
-				<version>0.8.3</version>
-			</dependency>
+         <dependency>
+            <groupId>io.druid</groupId>
+            <artifactId>tranquility-core_2.11</artifactId>
+            <version>0.8.3</version>
+         </dependency>
 
-			<dependency>
-				<groupId>javax.servlet</groupId>
-				<artifactId>javax.servlet-api</artifactId>
-				<version>4.0.1</version>
-				<!--scope>provided</scope -->
-			</dependency>
+         <dependency>
+            <groupId>javax.servlet</groupId>
+            <artifactId>javax.servlet-api</artifactId>
+            <version>4.0.1</version>
+            <!--scope>provided</scope -->
+         </dependency>
 
-			<dependency>
-				<groupId>org.apache.kafka</groupId>
-				<artifactId>kafka-clients</artifactId>
-				<version>${kafka.version}</version>
-			</dependency>
+         <dependency>
+            <groupId>org.apache.kafka</groupId>
+            <artifactId>kafka-clients</artifactId>
+            <version>${kafka.version}</version>
+         </dependency>
 
-			<dependency>
-				<groupId>org.apache.velocity</groupId>
-				<artifactId>velocity-engine-core</artifactId>
-				<version>2.0</version>
-			</dependency>
+         <dependency>
+            <groupId>org.apache.velocity</groupId>
+            <artifactId>velocity-engine-core</artifactId>
+            <version>2.0</version>
+         </dependency>
 
-			<dependency>
-				<groupId>org.json</groupId>
-				<artifactId>json</artifactId>
-				<version>20180813</version>
-			</dependency>
+         <dependency>
+            <groupId>org.json</groupId>
+            <artifactId>json</artifactId>
+            <version>20180813</version>
+         </dependency>
 
-			<dependency>
-				<groupId>org.mongodb</groupId>
-				<artifactId>mongo-java-driver</artifactId>
-				<version>${mongojava.version}</version>
-			</dependency>
+         <dependency>
+            <groupId>org.mongodb</groupId>
+            <artifactId>mongo-java-driver</artifactId>
+            <version>${mongojava.version}</version>
+         </dependency>
 
-			<dependency>
-				<groupId>org.projectlombok</groupId>
-				<artifactId>lombok</artifactId>
-				<version>1.18.2</version>
-			</dependency>
+         <dependency>
+            <groupId>org.projectlombok</groupId>
+            <artifactId>lombok</artifactId>
+            <version>1.18.2</version>
+         </dependency>
 
-			<dependency>
-				<groupId>org.springframework.data</groupId>
-				<artifactId>spring-data-couchbase</artifactId>
-				<version>${springcouchbase.version}</version>
-			</dependency>
+         <dependency>
+            <groupId>org.springframework.data</groupId>
+            <artifactId>spring-data-couchbase</artifactId>
+            <version>${springcouchbase.version}</version>
+         </dependency>
 
-			<dependency>
-				<groupId>org.springframework.boot</groupId>
-				<artifactId>spring-boot-starter-web</artifactId>
-				<version>${springboot.version}</version>
-			</dependency>
+         <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-web</artifactId>
+            <version>${springboot.version}</version>
+         </dependency>
 
-			<!-- tag::actuator[] -->
-			<dependency>
-				<groupId>org.springframework.boot</groupId>
-				<artifactId>spring-boot-starter-actuator</artifactId>
-				<version>${springboot.version}</version>
-			</dependency>
-			<!-- end::actuator[] -->
+         <!-- tag::actuator[] -->
+         <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-actuator</artifactId>
+            <version>${springboot.version}</version>
+         </dependency>
+         <!-- end::actuator[] -->
 
-			<dependency>
-				<groupId>org.springframework.boot</groupId>
-				<artifactId>spring-boot-starter-data-jpa</artifactId>
-				<version>${springboot.version}</version>
-			</dependency>
+         <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-data-jpa</artifactId>
+            <version>${springboot.version}</version>
+         </dependency>
 
-			<dependency>
-				<groupId>org.springframework.boot</groupId>
-				<artifactId>spring-boot-starter-data-couchbase</artifactId>
-				<version>${springboot.version}</version>
-			</dependency>
+         <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-data-couchbase</artifactId>
+            <version>${springboot.version}</version>
+         </dependency>
 
-			<dependency>
-				<groupId>org.springframework.boot</groupId>
-				<artifactId>spring-boot-starter-data-mongodb</artifactId>
-				<version>${springboot.version}</version>
-			</dependency>
+         <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-data-mongodb</artifactId>
+            <version>${springboot.version}</version>
+         </dependency>
 
-			<dependency>
-				<groupId>org.springframework.boot</groupId>
-				<artifactId>spring-boot-starter-data-rest</artifactId>
-				<version>${springboot.version}</version>
-			</dependency>
-			<!-- tag::tests[] -->
-			<dependency>
-				<groupId>org.springframework.boot</groupId>
-				<artifactId>spring-boot-starter-test</artifactId>
-				<version>${springboot.version}</version>
-				<scope>test</scope>
-			</dependency>
-			<!-- end::tests[] -->
+         <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-data-rest</artifactId>
+            <version>${springboot.version}</version>
+         </dependency>
+         <!-- tag::tests[] -->
+         <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-test</artifactId>
+            <version>${springboot.version}</version>
+            <scope>test</scope>
+         </dependency>
+         <!-- end::tests[] -->
 
-			<dependency>
-				<groupId>org.springframework.boot</groupId>
-				<artifactId>spring-boot-configuration-processor</artifactId>
-				<version>${springboot.version}</version>
-				<optional>true</optional>
-			</dependency>
+         <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-configuration-processor</artifactId>
+            <version>${springboot.version}</version>
+            <optional>true</optional>
+         </dependency>
 
-			<dependency>
-				<groupId>org.elasticsearch.client</groupId>
-				<artifactId>elasticsearch-rest-high-level-client</artifactId>
-				<version>${elasticsearchjava.version}</version>
-			</dependency>
+         <dependency>
+            <groupId>org.elasticsearch.client</groupId>
+            <artifactId>elasticsearch-rest-high-level-client</artifactId>
+            <version>${elasticsearchjava.version}</version>
+         </dependency>
 
-		</dependencies>
-	</dependencyManagement>
+      </dependencies>
+   </dependencyManagement>
 
-	<build>
-		<plugins>
-			<plugin>
-				<groupId>org.springframework.boot</groupId>
-				<artifactId>spring-boot-maven-plugin</artifactId>
-				<version>${springboot.version}</version>
-				<executions>
-					<execution>
-						<goals>
-							<goal>repackage</goal>
-						</goals>
-					</execution>
-				</executions>
-			</plugin>
+   <build>
+      <plugins>
+         <plugin>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-maven-plugin</artifactId>
+            <version>${springboot.version}</version>
+            <executions>
+               <execution>
+                  <goals>
+                     <goal>repackage</goal>
+                  </goals>
+               </execution>
+            </executions>
+         </plugin>
 
-			<plugin>
-				<artifactId>maven-failsafe-plugin</artifactId>
-				<executions>
-					<execution>
-						<goals>
-							<goal>integration-test</goal>
-							<goal>verify</goal>
-						</goals>
-					</execution>
-				</executions>
-			</plugin>
+         <plugin>
+            <artifactId>maven-failsafe-plugin</artifactId>
+            <executions>
+               <execution>
+                  <goals>
+                     <goal>integration-test</goal>
+                     <goal>verify</goal>
+                  </goals>
+               </execution>
+            </executions>
+         </plugin>
 
-			<plugin>
-				<groupId>org.apache.maven.plugins</groupId>
-				<artifactId>maven-eclipse-plugin</artifactId>
-				<configuration>
-					<downloadSources>true</downloadSources>
-					<downloadJavadocs>true</downloadJavadocs>
-				</configuration>
-			</plugin>
+         <plugin>
+            <groupId>org.apache.maven.plugins</groupId>
+            <artifactId>maven-eclipse-plugin</artifactId>
+            <configuration>
+               <downloadSources>true</downloadSources>
+               <downloadJavadocs>true</downloadJavadocs>
+            </configuration>
+         </plugin>
 
-			<plugin>
-				<groupId>org.apache.maven.plugins</groupId>
-				<artifactId>maven-deploy-plugin</artifactId>
-				<version>2.8</version>
-				<configuration>
-					<skip>true</skip>
-				</configuration>
-			</plugin>
+         <plugin>
+            <groupId>org.apache.maven.plugins</groupId>
+            <artifactId>maven-deploy-plugin</artifactId>
+            <version>2.8</version>
+            <configuration>
+               <skip>true</skip>
+            </configuration>
+         </plugin>
 
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-compiler-plugin</artifactId>
-                <version>3.8.0</version>
-            </plugin>
+         <plugin>
+            <groupId>org.apache.maven.plugins</groupId>
+            <artifactId>maven-compiler-plugin</artifactId>
+            <version>3.8.0</version>
+         </plugin>
 
-		</plugins>
-	</build>
+      </plugins>
+   </build>
 
 </project>
diff --git a/components/datalake-handler/version.properties b/components/datalake-handler/version.properties
index 9461aa9..e6eb586 100644
--- a/components/datalake-handler/version.properties
+++ b/components/datalake-handler/version.properties
@@ -1,6 +1,6 @@
 major=1
 minor=1
-patch=1
+patch=2
 base_version=${major}.${minor}.${patch}
 release_version=${base_version}
 snapshot_version=${base_version}-SNAPSHOT
diff --git a/components/kpi-computation-ms/Changelog.md b/components/kpi-computation-ms/Changelog.md
index 65ecd17..e96d788 100644
--- a/components/kpi-computation-ms/Changelog.md
+++ b/components/kpi-computation-ms/Changelog.md
@@ -5,6 +5,10 @@
 The format is based on [Keep a Changelog](http://keepachangelog.com/)
 and this project adheres to [Semantic Versioning](http://semver.org/).
 
+## [1.0.10]
+### Changed
+* Revert commit - KPI MS - Switch from Cambria library to dmaap-client library (dcaegen2/sdk) (DCAEGEN2-3180)
+
 ## [1.0.9]
 ### Changed
 * KPI MS - Vulnerability updates (DCAEGEN2-3216)
diff --git a/components/kpi-computation-ms/pom.xml b/components/kpi-computation-ms/pom.xml
index 6625181..8ee8280 100644
--- a/components/kpi-computation-ms/pom.xml
+++ b/components/kpi-computation-ms/pom.xml
@@ -29,7 +29,7 @@
 
     <groupId>org.onap.dcaegen2.services.components</groupId>
     <artifactId>kpi-ms</artifactId>
-    <version>1.0.9-SNAPSHOT</version>
+    <version>1.0.10-SNAPSHOT</version>
     <name>dcaegen2-services-kpi-computation-ms</name>
     <description>Kpi ms</description>
     <packaging>jar</packaging>
@@ -124,6 +124,11 @@
             <scope>import</scope>
         </dependency>
         <dependency>
+            <groupId>com.att.nsa</groupId>
+            <artifactId>cambriaClient</artifactId>
+            <version>0.0.1</version>
+        </dependency>
+        <dependency>
             <groupId>com.fasterxml.jackson.core</groupId>
             <artifactId>jackson-core</artifactId>
             <version>2.13.3</version>
@@ -292,11 +297,6 @@
             <artifactId>logback-core</artifactId>
             <version>1.2.11</version>
         </dependency>
-        <dependency>
-            <groupId>org.onap.dcaegen2.services.sdk.rest.services</groupId>
-            <artifactId>dmaap-client</artifactId>
-            <version>${sdk.version}</version>
-       </dependency>
     </dependencies>
 
     <build>
diff --git a/components/kpi-computation-ms/src/main/java/org/onap/dcaegen2/kpi/dmaap/DmaapClient.java b/components/kpi-computation-ms/src/main/java/org/onap/dcaegen2/kpi/dmaap/DmaapClient.java
index c5dea5e..44b6535 100644
--- a/components/kpi-computation-ms/src/main/java/org/onap/dcaegen2/kpi/dmaap/DmaapClient.java
+++ b/components/kpi-computation-ms/src/main/java/org/onap/dcaegen2/kpi/dmaap/DmaapClient.java
@@ -21,6 +21,8 @@
 
 package org.onap.dcaegen2.kpi.dmaap;
 
+import com.att.nsa.cambria.client.CambriaConsumer;
+
 import java.util.Map;
 import java.util.concurrent.Executors;
 import java.util.concurrent.ScheduledExecutorService;
@@ -30,10 +32,9 @@
 
 import org.onap.dcaegen2.kpi.models.Configuration;
 import org.onap.dcaegen2.kpi.utils.DmaapUtils;
-import org.onap.dcaegen2.services.sdk.rest.services.dmaap.client.api.MessageRouterSubscriber;
-import org.onap.dcaegen2.services.sdk.rest.services.dmaap.client.model.MessageRouterSubscribeRequest;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
+
 import org.springframework.stereotype.Component;
 
 /**
@@ -77,13 +78,12 @@
         String pmTopic = pmTopicSplit[pmTopicSplit.length - 1];
         log.debug("pm topic : {}", pmTopic);
 
-        MessageRouterSubscriber pmNotifSubscriber = dmaapUtils.buildSubscriber();
-        MessageRouterSubscribeRequest subscriberRequest = dmaapUtils.buildSubscriberRequest(configuration, pmTopic);
+        CambriaConsumer pmNotifCambriaConsumer = dmaapUtils.buildConsumer(configuration, pmTopic);
 
         ScheduledExecutorService executorPool;
 
         // create notification consumers for PM
-        NotificationConsumer pmNotificationConsumer = new NotificationConsumer(pmNotifSubscriber, subscriberRequest,
+        NotificationConsumer pmNotificationConsumer = new NotificationConsumer(pmNotifCambriaConsumer,
                 new KpiComputationCallBack());
         // start pm notification consumer threads
         executorPool = Executors.newScheduledThreadPool(10);
diff --git a/components/kpi-computation-ms/src/main/java/org/onap/dcaegen2/kpi/dmaap/KpiDmaapClient.java b/components/kpi-computation-ms/src/main/java/org/onap/dcaegen2/kpi/dmaap/KpiDmaapClient.java
index eeeb725..fb96787 100644
--- a/components/kpi-computation-ms/src/main/java/org/onap/dcaegen2/kpi/dmaap/KpiDmaapClient.java
+++ b/components/kpi-computation-ms/src/main/java/org/onap/dcaegen2/kpi/dmaap/KpiDmaapClient.java
@@ -26,11 +26,11 @@
 
 import org.onap.dcaegen2.kpi.models.Configuration;
 import org.onap.dcaegen2.kpi.utils.DmaapUtils;
-import org.onap.dcaegen2.services.sdk.rest.services.dmaap.client.api.MessageRouterPublisher;
-import org.onap.dcaegen2.services.sdk.rest.services.dmaap.client.model.MessageRouterPublishRequest;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import com.att.nsa.cambria.client.CambriaBatchingPublisher;
+
 /**
  * Client class to handle kpi interactions.
  */
@@ -62,12 +62,12 @@
         logger.info("Kpi publish topic url: {}", topicUrl);
         String[] topicSplit = topicUrl.split("\\/");
         String topic = topicSplit[topicSplit.length - 1];
-        MessageRouterPublisher messageRouterPublisher;
-        MessageRouterPublishRequest messageRouterPublishRequest;
+        CambriaBatchingPublisher cambriaBatchingPublisher;
         try {
-            messageRouterPublisher = dmaapUtils.buildPublisher();
-            messageRouterPublishRequest = dmaapUtils.buildPublisherRequest(configuration, topic);
-            NotificationProducer notificationProducer = new NotificationProducer(messageRouterPublisher, messageRouterPublishRequest);
+
+            cambriaBatchingPublisher = dmaapUtils.buildPublisher(configuration, topic);
+
+            NotificationProducer notificationProducer = new NotificationProducer(cambriaBatchingPublisher);
             notificationProducer.sendNotification(msg);
         } catch (IOException e) {
             return false;
diff --git a/components/kpi-computation-ms/src/main/java/org/onap/dcaegen2/kpi/dmaap/NotificationConsumer.java b/components/kpi-computation-ms/src/main/java/org/onap/dcaegen2/kpi/dmaap/NotificationConsumer.java
index eba6019..fbf8bc7 100644
--- a/components/kpi-computation-ms/src/main/java/org/onap/dcaegen2/kpi/dmaap/NotificationConsumer.java
+++ b/components/kpi-computation-ms/src/main/java/org/onap/dcaegen2/kpi/dmaap/NotificationConsumer.java
@@ -21,31 +21,26 @@
 
 package org.onap.dcaegen2.kpi.dmaap;
 
-import java.time.Duration;
+import com.att.nsa.cambria.client.CambriaConsumer;
 
-import org.onap.dcaegen2.services.sdk.rest.services.dmaap.client.api.MessageRouterSubscriber;
-import org.onap.dcaegen2.services.sdk.rest.services.dmaap.client.model.MessageRouterSubscribeRequest;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import com.google.gson.JsonElement;
-
 /**
  * Consume Notifications from DMAAP events.
  */
 public class NotificationConsumer implements Runnable {
+
     private static Logger log = LoggerFactory.getLogger(NotificationConsumer.class);
-    private MessageRouterSubscriber messageSubscriber;
-    private MessageRouterSubscribeRequest subscriberRequest;
+    private CambriaConsumer cambriaConsumer;
     private NotificationCallback notificationCallback;
 
     /**
      * Parameterized Constructor.
      */
-    public NotificationConsumer(MessageRouterSubscriber messageSubscriber, MessageRouterSubscribeRequest subscriberRequest, NotificationCallback notificationCallback) {
+    public NotificationConsumer(CambriaConsumer cambriaConsumer, NotificationCallback notificationCallback) {
         super();
-        this.messageSubscriber = messageSubscriber;
-        this.subscriberRequest = subscriberRequest;
+        this.cambriaConsumer = cambriaConsumer;
         this.notificationCallback = notificationCallback;
     }
 
@@ -54,14 +49,15 @@
      */
     @Override
     public void run() {
-        messageSubscriber.subscribeForElements(subscriberRequest, Duration.ofMinutes(1))
-            .map(JsonElement::getAsString)
-            .subscribe(msg -> {
+        try {
+            Iterable<String> msgs = cambriaConsumer.fetch();
+            for (String msg : msgs) {
                 log.info(msg);
                 notificationCallback.activateCallBack(msg);
-             },
-                    ex -> {
-                        log.warn("An unexpected error while receiving messages from DMaaP", ex);
-                     });
+            }
+        } catch (Exception e) {
+            log.debug("exception when fetching msgs from dmaap", e);
+        }
+
     }
 }
diff --git a/components/kpi-computation-ms/src/main/java/org/onap/dcaegen2/kpi/dmaap/NotificationProducer.java b/components/kpi-computation-ms/src/main/java/org/onap/dcaegen2/kpi/dmaap/NotificationProducer.java
index c5be6cc..3425543 100644
--- a/components/kpi-computation-ms/src/main/java/org/onap/dcaegen2/kpi/dmaap/NotificationProducer.java
+++ b/components/kpi-computation-ms/src/main/java/org/onap/dcaegen2/kpi/dmaap/NotificationProducer.java
@@ -21,47 +21,32 @@
 
 package org.onap.dcaegen2.kpi.dmaap;
 
+import com.att.nsa.cambria.client.CambriaBatchingPublisher;
+
 import java.io.IOException;
-import org.onap.dcaegen2.services.sdk.rest.services.dmaap.client.api.MessageRouterPublisher;
-import org.onap.dcaegen2.services.sdk.rest.services.dmaap.client.model.MessageRouterPublishRequest;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import com.google.gson.JsonPrimitive;
-import reactor.core.publisher.Flux;
 
 /**
  * Produces Notification on DMAAP events.
  */
 public class NotificationProducer {
-    private static Logger logger = LoggerFactory.getLogger(NotificationProducer.class);
-    private MessageRouterPublisher messageRouterPublisher;
-    private MessageRouterPublishRequest messageRouterPublishRequest;
-    
+
+    private CambriaBatchingPublisher cambriaBatchingPublisher;
+
     /**
      * Parameterized constructor.
      */
-    public NotificationProducer(MessageRouterPublisher messageRouterPublisher, MessageRouterPublishRequest messageRouterPublishRequest) {
+    public NotificationProducer(CambriaBatchingPublisher cambriaBatchingPublisher) {
         super();
-        this.messageRouterPublisher = messageRouterPublisher;
-        this.messageRouterPublishRequest = messageRouterPublishRequest;
+        this.cambriaBatchingPublisher = cambriaBatchingPublisher;
     }
 
     /**
      * sends notification to dmaap.
      */
-    public void sendNotification(String msg) throws IOException {
-        Flux.just(1, 2, 3)
-           .map(JsonPrimitive::new)
-           .transform(input -> messageRouterPublisher.put(messageRouterPublishRequest, input))
-           .subscribe(resp -> {
-               if (resp.successful()) {
-                   logger.debug("Sent a batch of messages to the MR");
-                       } else {
-                           logger.warn("Message sending has failed: {}", resp.failReason());
-                     }
-                },
-                ex -> {
-                    logger.warn("An unexpected error while sending messages to DMaaP", ex);
-                 });
+    public int sendNotification(String msg) throws IOException {
+
+        return cambriaBatchingPublisher.send("", msg);
+
     }
+
 }
diff --git a/components/kpi-computation-ms/src/main/java/org/onap/dcaegen2/kpi/utils/DmaapUtils.java b/components/kpi-computation-ms/src/main/java/org/onap/dcaegen2/kpi/utils/DmaapUtils.java
index 38c1ca8..2f1e19c 100644
--- a/components/kpi-computation-ms/src/main/java/org/onap/dcaegen2/kpi/utils/DmaapUtils.java
+++ b/components/kpi-computation-ms/src/main/java/org/onap/dcaegen2/kpi/utils/DmaapUtils.java
@@ -1,7 +1,7 @@
 /*-
  * ============LICENSE_START=======================================================
  *  Copyright (C) 2021 China Mobile.
- *  Copyright (c) 2021-2022 Wipro Limited.
+ *  Copyright (C) 2022 Wipro Limited.
  * ================================================================================
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -21,21 +21,16 @@
 
 package org.onap.dcaegen2.kpi.utils;
 
+import com.att.nsa.cambria.client.CambriaBatchingPublisher;
+import com.att.nsa.cambria.client.CambriaClientBuilders;
+import com.att.nsa.cambria.client.CambriaClientBuilders.ConsumerBuilder;
+import com.att.nsa.cambria.client.CambriaClientBuilders.PublisherBuilder;
+import com.att.nsa.cambria.client.CambriaConsumer;
+
+import java.net.MalformedURLException;
+import java.security.GeneralSecurityException;
+
 import org.onap.dcaegen2.kpi.models.Configuration;
-import org.onap.dcaegen2.services.sdk.model.streams.ImmutableAafCredentials;
-import org.onap.dcaegen2.services.sdk.model.streams.dmaap.ImmutableMessageRouterSink;
-import org.onap.dcaegen2.services.sdk.model.streams.dmaap.ImmutableMessageRouterSource;
-import org.onap.dcaegen2.services.sdk.model.streams.dmaap.MessageRouterSink;
-import org.onap.dcaegen2.services.sdk.model.streams.dmaap.MessageRouterSource;
-import org.onap.dcaegen2.services.sdk.rest.services.dmaap.client.api.DmaapClientFactory;
-import org.onap.dcaegen2.services.sdk.rest.services.dmaap.client.api.MessageRouterPublisher;
-import org.onap.dcaegen2.services.sdk.rest.services.dmaap.client.api.MessageRouterSubscriber;
-import org.onap.dcaegen2.services.sdk.rest.services.dmaap.client.model.ImmutableMessageRouterPublishRequest;
-import org.onap.dcaegen2.services.sdk.rest.services.dmaap.client.model.ImmutableMessageRouterSubscribeRequest;
-import org.onap.dcaegen2.services.sdk.rest.services.dmaap.client.model.MessageRouterPublishRequest;
-import org.onap.dcaegen2.services.sdk.rest.services.dmaap.client.model.MessageRouterSubscribeRequest;
-import org.onap.dcaegen2.services.sdk.rest.services.dmaap.client.model.config.MessageRouterPublisherConfig;
-import org.onap.dcaegen2.services.sdk.rest.services.dmaap.client.model.config.MessageRouterSubscriberConfig;
 
 /**
  * Utility class to perform actions related to Dmaap.
@@ -45,35 +40,65 @@
  */
 public class DmaapUtils {
 
-    public MessageRouterPublisher buildPublisher() {
-        final MessageRouterPublisher publisher = DmaapClientFactory
-             .createMessageRouterPublisher(MessageRouterPublisherConfig.createDefault());
-        return publisher;
+    /**
+     * Build publisher.
+     */
+    public CambriaBatchingPublisher buildPublisher(Configuration config, String topic) {
+        try {
+            return builder(config, topic).build();
+        } catch (MalformedURLException | GeneralSecurityException e) {
+            return null;
+
+        }
     }
 
-    public MessageRouterPublishRequest buildPublisherRequest(Configuration config, String topicUrl) {
-        MessageRouterSink sinkDefinition = ImmutableMessageRouterSink.builder().topicUrl(topicUrl)
-             .aafCredentials(ImmutableAafCredentials.builder().username(config.getAafUsername())
-             .password(config.getAafPassword()).build())
-             .build();
-        MessageRouterPublishRequest request = ImmutableMessageRouterPublishRequest.builder()
-             .sinkDefinition(sinkDefinition).build();
-        return request;
+    /**
+     * Build consumer.
+     */
+    public CambriaConsumer buildConsumer(Configuration config, String topic) {
+
+        try {
+            return builderConsumer(config, topic).build();
+        } catch (MalformedURLException | GeneralSecurityException e) {
+            return null;
+        }
+
     }
 
-    public MessageRouterSubscriber buildSubscriber() {
-        MessageRouterSubscriber subscriber = DmaapClientFactory
-            .createMessageRouterSubscriber(MessageRouterSubscriberConfig.createDefault());
-        return subscriber;
+    private static PublisherBuilder builder(Configuration config, String topic) {
+        if (config.isSecured()) {
+            return authenticatedBuilder(config, topic);
+        } else {
+            return unAuthenticatedBuilder(config, topic);
+        }
     }
 
-    public MessageRouterSubscribeRequest buildSubscriberRequest(Configuration config, String topicUrl) {
-        MessageRouterSource sourceDefinition = ImmutableMessageRouterSource.builder().topicUrl(topicUrl)
-             .aafCredentials(ImmutableAafCredentials.builder().username(config.getAafUsername())
-             .password(config.getAafPassword()).build())
-             .build();
-        MessageRouterSubscribeRequest request = ImmutableMessageRouterSubscribeRequest.builder()
-             .consumerGroup(config.getCg()).consumerId(config.getCid()).sourceDefinition(sourceDefinition).build();
-        return request;
+    private static PublisherBuilder authenticatedBuilder(Configuration config, String topic) {
+        return unAuthenticatedBuilder(config, topic).usingHttps().authenticatedByHttp(config.getAafUsername(),
+                config.getAafPassword());
     }
+
+    private static PublisherBuilder unAuthenticatedBuilder(Configuration config, String topic) {
+        return new CambriaClientBuilders.PublisherBuilder().usingHosts(config.getDmaapServers()).onTopic(topic)
+                .logSendFailuresAfter(5);
+    }
+
+    private static ConsumerBuilder builderConsumer(Configuration config, String topic) {
+        if (config.isSecured()) {
+            return authenticatedConsumerBuilder(config, topic);
+        } else {
+            return unAuthenticatedConsumerBuilder(config, topic);
+        }
+    }
+
+    private static ConsumerBuilder unAuthenticatedConsumerBuilder(Configuration config, String topic) {
+        return new CambriaClientBuilders.ConsumerBuilder().usingHosts(config.getDmaapServers()).onTopic(topic)
+                .knownAs(config.getCg(), config.getCid()).withSocketTimeout(config.getPollingTimeout() * 1000);
+    }
+
+    private static ConsumerBuilder authenticatedConsumerBuilder(Configuration config, String topic) {
+        return unAuthenticatedConsumerBuilder(config, topic).usingHttps().authenticatedByHttp(config.getAafUsername(),
+                config.getAafPassword());
+    }
+
 }
diff --git a/components/kpi-computation-ms/src/test/java/org/onap/dcaegen2/kpi/dmaap/DmaapClientTest.java b/components/kpi-computation-ms/src/test/java/org/onap/dcaegen2/kpi/dmaap/DmaapClientTest.java
index cc23bab..f51bf24 100644
--- a/components/kpi-computation-ms/src/test/java/org/onap/dcaegen2/kpi/dmaap/DmaapClientTest.java
+++ b/components/kpi-computation-ms/src/test/java/org/onap/dcaegen2/kpi/dmaap/DmaapClientTest.java
@@ -21,8 +21,15 @@
 
 package org.onap.dcaegen2.kpi.dmaap;
 
+import static org.mockito.Mockito.when;
+
+import com.att.nsa.cambria.client.CambriaTopicManager;
+import com.google.gson.Gson;
+import com.google.gson.JsonObject;
+
 import java.io.BufferedReader;
 import java.io.FileReader;
+import java.io.IOException;
 import java.util.ArrayList;
 import java.util.HashSet;
 import java.util.List;
@@ -32,20 +39,20 @@
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.mockito.InjectMocks;
+import org.mockito.Mock;
 import org.mockito.Mockito;
 import org.mockito.MockitoAnnotations;
 import org.onap.dcaegen2.kpi.models.Configuration;
 import org.springframework.boot.test.context.SpringBootTest;
 import org.springframework.test.context.junit4.SpringRunner;
 
-//import com.att.nsa.cambria.client.CambriaTopicManager;
-import com.google.gson.Gson;
-import com.google.gson.JsonObject;
-
 @RunWith(SpringRunner.class)
 @SpringBootTest(classes = DmaapClientTest.class)
 public class DmaapClientTest {
 
+    @Mock
+    private CambriaTopicManager topicManager;
+
     @InjectMocks
     DmaapClient client;
 
@@ -67,9 +74,18 @@
         configuration.setCid("cid");
         configuration.setPollingInterval(30);
         configuration.setPollingTimeout(100);
-        client = Mockito.mock(DmaapClient.class);
-        client.initClient();
-        Mockito.verify(client).initClient();
+
+        try {
+            when(topicManager.getTopics()).thenReturn(topics);
+
+            client = Mockito.mock(DmaapClient.class);
+            client.initClient();
+            Mockito.verify(client).initClient();
+            // Mockito.verifycreateAndConfigureTopics();
+
+        } catch (IOException e) {
+            e.printStackTrace();
+        }
     }
 
     @Test
@@ -85,6 +101,9 @@
             configuration.updateConfigurationFromJsonObject(config);
             DmaapClient client = new DmaapClient();
             client.initClient();
+            // Mockito.verify(client).startClient();
+            // Mockito.verifycreateAndConfigureTopics();
+
         } catch (Exception e) {
             e.printStackTrace();
         }
diff --git a/components/kpi-computation-ms/src/test/java/org/onap/dcaegen2/kpi/dmaap/KpiDmaapClientTest.java b/components/kpi-computation-ms/src/test/java/org/onap/dcaegen2/kpi/dmaap/KpiDmaapClientTest.java
index 81699c2..bf5b625 100644
--- a/components/kpi-computation-ms/src/test/java/org/onap/dcaegen2/kpi/dmaap/KpiDmaapClientTest.java
+++ b/components/kpi-computation-ms/src/test/java/org/onap/dcaegen2/kpi/dmaap/KpiDmaapClientTest.java
@@ -22,8 +22,6 @@
 package org.onap.dcaegen2.kpi.dmaap;
 
 import static org.junit.Assert.assertTrue;
-import static org.junit.jupiter.api.Assertions.assertEquals;
-import static org.mockito.Mockito.when;
 
 import java.io.IOException;
 import java.util.HashMap;
@@ -38,15 +36,10 @@
 import org.mockito.runners.MockitoJUnitRunner;
 import org.onap.dcaegen2.kpi.models.Configuration;
 import org.onap.dcaegen2.kpi.utils.DmaapUtils;
-import org.onap.dcaegen2.services.sdk.rest.services.dmaap.client.api.MessageRouterPublisher;
-import org.onap.dcaegen2.services.sdk.rest.services.dmaap.client.model.ImmutableMessageRouterPublishResponse;
-import org.onap.dcaegen2.services.sdk.rest.services.dmaap.client.model.MessageRouterPublishRequest;
-import org.onap.dcaegen2.services.sdk.rest.services.dmaap.client.model.MessageRouterPublishResponse;
 import org.springframework.boot.test.context.SpringBootTest;
 
-import com.google.gson.JsonPrimitive;
-
-import reactor.core.publisher.Flux;
+import com.att.nsa.cambria.client.CambriaBatchingPublisher;
+import com.att.nsa.cambria.client.CambriaConsumer;
 
 @RunWith(MockitoJUnitRunner.class)
 @SpringBootTest(classes = KpiDmaapClient.class)
@@ -56,38 +49,42 @@
     Configuration configurationMock;
 
     @Mock
-    DmaapUtils dmaapUtilsMock;    
-    
-    @Mock
-    MessageRouterPublisher messageRouterPublisher;
+    DmaapUtils dmaapUtilsMock;
 
-    @Mock
-    MessageRouterPublishRequest messageRouterPublishRequest;
-
-    @Mock
+    @InjectMocks
     KpiDmaapClient kpiDmaapClient;
 
     @Mock
+    CambriaConsumer kpiResponseCambriaConsumerMock;
+
+    @Mock
+    CambriaBatchingPublisher cambriaBatchingPublisherMock;
+
+    @Mock
     NotificationProducer notificationProducerMock;
 
+    @Before
+    public void setup() {
+        kpiDmaapClient = new KpiDmaapClient(dmaapUtilsMock, configurationMock);
+    }
+
     @Test
-    public void sendNotificationToPolicyTest() throws IOException {
+    public void sendNotificationToPolicyTest() {
         Map<String, Object> streamsPublishes = new HashMap<>();
         Map<String, String> topics = new HashMap<>();
         Map<String, Object> dmaapInfo = new HashMap<>();
         topics.put("topic_url", "https://message-router.onap.svc.cluster.local:3905/events/DCAE_KPI_OUTPUT");
         dmaapInfo.put("dmaap_info", topics);
         streamsPublishes.put("kpi_topic", dmaapInfo);
-        Mockito.when(configurationMock.getStreamsPublishes()).thenReturn(streamsPublishes);	
-        Mockito.doNothing().when(notificationProducerMock).sendNotification(Mockito.anyString());
-        io.vavr.collection.List<String> expectedItems = io.vavr.collection.List.of("kpi-1", "kpi-2", "kpi-3");
-        MessageRouterPublishResponse expectedResponse = ImmutableMessageRouterPublishResponse
-             .builder().items(expectedItems.map(JsonPrimitive::new))
-             .build();    	
-        Flux<MessageRouterPublishResponse> responses = Flux.just(expectedResponse);
-        when(messageRouterPublisher.put(Mockito.any(), Mockito.any())).thenReturn(responses);
-        when(kpiDmaapClient.sendNotificationToDmaap(Mockito.anyString())).thenReturn(Boolean.TRUE);
-        Boolean response = kpiDmaapClient.sendNotificationToDmaap(Mockito.anyString());
-        assertEquals(Boolean.TRUE, response);
+        Mockito.when(configurationMock.getStreamsPublishes()).thenReturn(streamsPublishes);
+        Mockito.when(dmaapUtilsMock.buildPublisher(configurationMock, "DCAE_KPI_OUTPUT"))
+                .thenReturn(cambriaBatchingPublisherMock);
+        try {
+            Mockito.when(cambriaBatchingPublisherMock.send("", "hello")).thenReturn(0);
+        } catch (IOException e) {
+            e.printStackTrace();
         }
+        assertTrue(kpiDmaapClient.sendNotificationToDmaap("hello"));
+
+    }
 }
diff --git a/components/kpi-computation-ms/src/test/java/org/onap/dcaegen2/kpi/dmaap/NotificationConsumerTest.java b/components/kpi-computation-ms/src/test/java/org/onap/dcaegen2/kpi/dmaap/NotificationConsumerTest.java
index 8d72d3c..69d0daa 100644
--- a/components/kpi-computation-ms/src/test/java/org/onap/dcaegen2/kpi/dmaap/NotificationConsumerTest.java
+++ b/components/kpi-computation-ms/src/test/java/org/onap/dcaegen2/kpi/dmaap/NotificationConsumerTest.java
@@ -21,53 +21,43 @@
 
 package org.onap.dcaegen2.kpi.dmaap;
 
-import static org.junit.Assert.assertNotNull;
 import static org.mockito.Mockito.when;
 
-import java.time.Duration;
+import java.util.ArrayList;
+import java.util.List;
 
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.mockito.InjectMocks;
 import org.mockito.Mock;
 import org.mockito.Mockito;
-import org.onap.dcaegen2.services.sdk.rest.services.dmaap.client.api.MessageRouterSubscriber;
-import org.onap.dcaegen2.services.sdk.rest.services.dmaap.client.model.MessageRouterSubscribeRequest;
 import org.springframework.boot.test.context.SpringBootTest;
 import org.springframework.test.context.junit4.SpringRunner;
 
-import com.google.gson.JsonElement;
-
-import reactor.core.CoreSubscriber;
-import reactor.core.publisher.Flux;
+import com.att.nsa.cambria.client.CambriaConsumer;
 
 @RunWith(SpringRunner.class)
 @SpringBootTest(classes = NotificationConsumerTest.class)
 public class NotificationConsumerTest {
 
     @Mock
+    CambriaConsumer cambriaConsumer;
+
+    @Mock
     NotificationCallback notificationCallback;
 
     @InjectMocks
     NotificationConsumer notificationConsumer;
-    
-    @Mock
-    MessageRouterSubscriber messageSubscriber;
-    
-    @Mock
-    MessageRouterSubscribeRequest subscriberRequest;
 
     @Test
     public void testNotificationConsumer() {
         try {
-            Flux<JsonElement> json = new Flux<JsonElement>() {
-                @Override
-                public void subscribe(CoreSubscriber<? super JsonElement> actual) {
-                }
-            };
+            List<String> notifications = new ArrayList<>();
+            notifications.add("notification1");
+            when(cambriaConsumer.fetch()).thenReturn(notifications);
             Mockito.doNothing().when(notificationCallback).activateCallBack(Mockito.anyString());
-            when(messageSubscriber.subscribeForElements(subscriberRequest, Duration.ofMinutes(1))).thenReturn(json);
-            assertNotNull(messageSubscriber.subscribeForElements(subscriberRequest, Duration.ofMinutes(1)));
+            notificationConsumer.run();
+
         } catch (Exception e) {
             e.printStackTrace();
         }
diff --git a/components/kpi-computation-ms/src/test/java/org/onap/dcaegen2/kpi/dmaap/NotificationProducerTest.java b/components/kpi-computation-ms/src/test/java/org/onap/dcaegen2/kpi/dmaap/NotificationProducerTest.java
index f880ec7..7ad5786 100644
--- a/components/kpi-computation-ms/src/test/java/org/onap/dcaegen2/kpi/dmaap/NotificationProducerTest.java
+++ b/components/kpi-computation-ms/src/test/java/org/onap/dcaegen2/kpi/dmaap/NotificationProducerTest.java
@@ -21,8 +21,14 @@
 
 package org.onap.dcaegen2.kpi.dmaap;
 
+import static org.junit.Assert.assertEquals;
+import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.when;
 
+import com.att.nsa.cambria.client.CambriaBatchingPublisher;
+import com.google.gson.JsonObject;
+import com.google.gson.JsonParser;
+
 import java.io.IOException;
 
 import org.junit.Test;
@@ -32,19 +38,10 @@
 import org.mockito.Mockito;
 import org.onap.dcaegen2.kpi.computation.FileUtils;
 import org.onap.dcaegen2.kpi.models.Configuration;
-import org.onap.dcaegen2.services.sdk.rest.services.dmaap.client.api.MessageRouterPublisher;
-import org.onap.dcaegen2.services.sdk.rest.services.dmaap.client.model.ImmutableMessageRouterPublishResponse;
-import org.onap.dcaegen2.services.sdk.rest.services.dmaap.client.model.MessageRouterPublishRequest;
-import org.onap.dcaegen2.services.sdk.rest.services.dmaap.client.model.MessageRouterPublishResponse;
+import org.powermock.api.mockito.PowerMockito;
 import org.springframework.boot.test.context.SpringBootTest;
 import org.springframework.test.context.junit4.SpringRunner;
 
-import com.google.gson.JsonObject;
-import com.google.gson.JsonParser;
-import com.google.gson.JsonPrimitive;
-
-import reactor.core.publisher.Flux;
-
 @RunWith(SpringRunner.class)
 @SpringBootTest(classes = NotificationProducerTest.class)
 public class NotificationProducerTest {
@@ -53,25 +50,24 @@
     private static final String CBS_CONFIG_FILE = "kpi/cbs_config2.json";
 
     @Mock
-    MessageRouterPublisher messageRouterPublisher;                                                                                                                               
-    
-    @Mock
-    MessageRouterPublishRequest messageRouterPublishRequest;
-    
+    CambriaBatchingPublisher cambriaBatchingPublisher;
+
     @InjectMocks
     NotificationProducer notificationProducer;
 
     @Test
-    public void notificationProducerTest() throws IOException {
-        io.vavr.collection.List<String> expectedItems = io.vavr.collection.List.of("kpi-1", "kpi-2", "kpi-3");
-        MessageRouterPublishResponse expectedResponse = ImmutableMessageRouterPublishResponse
-                .builder().items(expectedItems.map(JsonPrimitive::new))
-                .build();
-        Flux<MessageRouterPublishResponse> responses = Flux.just(expectedResponse);
-        when(messageRouterPublisher.put(Mockito.any(), Mockito.any())).thenReturn(responses);
-        notificationProducer.sendNotification("msg");
+    public void notificationProducerTest() {
+
+        try {
+            when(cambriaBatchingPublisher.send(Mockito.anyString(), Mockito.anyString())).thenReturn(0);
+            int result = notificationProducer.sendNotification("msg");
+            assertEquals(0, result);
+        } catch (IOException e) {
+            e.printStackTrace();
+        }
+
     }
-    
+
     @Test
     public void kpiResultWithoutConfigTest() {
 
diff --git a/components/kpi-computation-ms/version.properties b/components/kpi-computation-ms/version.properties
index f57e7a9..db099b7 100644
--- a/components/kpi-computation-ms/version.properties
+++ b/components/kpi-computation-ms/version.properties
@@ -21,7 +21,7 @@
 ###############################################################################
 major=1
 minor=0
-patch=9
+patch=10
 base_version=${major}.${minor}.${patch}
 release_version=${base_version}
 snapshot_version=${base_version}-SNAPSHOT
diff --git a/components/slice-analysis-ms/ChangeLog.md b/components/slice-analysis-ms/ChangeLog.md
index f3152d3..aa92c9c 100644
--- a/components/slice-analysis-ms/ChangeLog.md
+++ b/components/slice-analysis-ms/ChangeLog.md
@@ -4,13 +4,25 @@
 The format is based on [Keep a Changelog](http://keepachangelog.com/)
 and this project adheres to [Semantic Versioning](http://semver.org/).
 
-## [1.1.5] - 2022/08/27
+## [1.1.5] - 2022/09/14
          - [DCAEGEN2-3221](https://jira.onap.org/browse/DCAEGEN2-3221) - Slice-Analysis-Ms vulnerability updates
 
          - [DCAEGEN2-3195](https://jira.onap.org/browse/DCAEGEN2-3195) - CCVPN Kohn Enhancements for Intent-based Cloud Leased Line and Transport Slicing
 
          - [DCAEGEN2-3239](https://jira.onap.org/browse/DCAEGEN2-3239) - Enhance BandwidthEvaluator to listen on user's bandwidth threshold
 
+         - [DCAEGEN2-3238](https://jira.onap.org/browse/DCAEGEN2-3238) - Enhance BandwidthEvaluator in slice-analysis-ms to support detailed bandwidth adjustment
+
+         - [DCAEGEN2-3255](https://jira.onap.org/browse/DCAEGEN2-3255) - Fix bug of application failed to start
+
+         - [DCAEGEN2-3264](https://jira.onap.org/browse/DCAEGEN2-3264) - Fix bug that cll service instance info didn't get updated when a cll service is deleted
+
+         - [DCAEGEN2-3240](https://jira.onap.org/browse/DCAEGEN2-3240) - Implement runtime service configuration
+
+         - [DCAEGEN2-3273](https://jira.onap.org/browse/DCAEGEN2-3273) - Fix bug that config thread hang up when cbs policy is empty
+
+         - [DCAEGEN2-3270](https://jira.onap.org/browse/DCAEGEN2-3270) - Dcae slicems startup error, breaking the circular dependency.
+
 ## [1.1.4] - 2022/07/28
          - [DCAEGEN2-3120](https://jira.onap.org/browse/DCAEGEN2-3120) - Enhance sliceanalysis MS to use DCAE SDK dmaap-client lib
 
diff --git a/components/slice-analysis-ms/pom.xml b/components/slice-analysis-ms/pom.xml
index 3b2cfcd..15ae6ed 100644
--- a/components/slice-analysis-ms/pom.xml
+++ b/components/slice-analysis-ms/pom.xml
@@ -7,6 +7,7 @@
  *  Copyright (C) 2020-2022 Wipro Limited.
  *  Copyright (C) 2022 Huawei Canada Limited.
  *  Copyright (C) 2022 CTC, Inc.
+ *  Copyright (C) 2022 Huawei Technologies Co., Ltd.
  *  ================================================================================
  *     Licensed under the Apache License, Version 2.0 (the "License");
  *     you may not use this file except in compliance with the License.
@@ -316,7 +317,7 @@
                 <dependency>
                         <groupId>org.apache.tomcat.embed</groupId>
                         <artifactId>tomcat-embed-core</artifactId>
-                        <version>10.0.21</version>
+                        <version>9.0.65</version>
                 </dependency>
                 <!-- https://mvnrepository.com/artifact/nl.jqno.equalsverifier/equalsverifier -->
                 <dependency>
diff --git a/components/slice-analysis-ms/src/main/docker/config/sliceanalysisms/config_all.json b/components/slice-analysis-ms/src/main/docker/config/sliceanalysisms/config_all.json
index 12e9d08..9e23353 100644
--- a/components/slice-analysis-ms/src/main/docker/config/sliceanalysisms/config_all.json
+++ b/components/slice-analysis-ms/src/main/docker/config/sliceanalysisms/config_all.json
@@ -106,11 +106,12 @@
     "sliceanalysisms.aaiNotif.targetSource" : "UUI",
     "sliceanalysisms.aaiNotif.targetEntity" : "service-instance",
     "sliceanalysisms.ccvpnEvalInterval": 5,
-    "sliceanalysisms.ccvpnEvalThreshold": 0.8,
     "sliceanalysisms.ccvpnEvalPrecision": 100.0,
     "sliceanalysisms.ccvpnEvalPeriodicCheckOn": true,
     "sliceanalysisms.ccvpnEvalOnDemandCheckOn": true,
     "sliceanalysisms.ccvpnEvalStrategy" : "FlexibleThresholdStrategy",
+    "sliceanalysisms.ccvpnEvalUpperThreshold": 0.8,
+    "sliceanalysisms.ccvpnEvalLowerThreshold": 0.3,
     "service_calls": {
       "policy-req": []
     },
diff --git a/components/slice-analysis-ms/src/main/java/org/onap/slice/analysis/ms/MainThread.java b/components/slice-analysis-ms/src/main/java/org/onap/slice/analysis/ms/MainThread.java
index 57a831e..4456663 100644
--- a/components/slice-analysis-ms/src/main/java/org/onap/slice/analysis/ms/MainThread.java
+++ b/components/slice-analysis-ms/src/main/java/org/onap/slice/analysis/ms/MainThread.java
@@ -1,51 +1,55 @@
 /*******************************************************************************
  *  ============LICENSE_START=======================================================
- *  son-handler
+ *  slice-analysis-ms
  *  ================================================================================
  *   Copyright (C) 2019-2020 Wipro Limited.
+ *   Copyright (C) 2022 Huawei Technologies Co., Ltd.
  *   ==============================================================================
  *     Licensed under the Apache License, Version 2.0 (the "License");
  *     you may not use this file except in compliance with the License.
  *     You may obtain a copy of the License at
- *  
+ *
  *          http://www.apache.org/licenses/LICENSE-2.0
- *  
+ *
  *     Unless required by applicable law or agreed to in writing, software
  *     distributed under the License is distributed on an "AS IS" BASIS,
  *     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  *     See the License for the specific language governing permissions and
  *     limitations under the License.
  *     ============LICENSE_END=========================================================
- *  
+ *
  *******************************************************************************/
 
 package org.onap.slice.analysis.ms;
 
+import org.onap.slice.analysis.ms.service.ConfigThread;
 import org.onap.slice.analysis.ms.service.ConsumerThread;
 import org.onap.slice.analysis.ms.service.PmThread;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-/** 
+/**
  * This class starts the pm thread and consumer thread
  */
 public class MainThread {
 
-	private static Logger log = LoggerFactory.getLogger(MainThread.class);
-	
-	private MainThread() {
-		
-	}
-	
-	/**
-	 * main thread initialization.
-	 */
-	public static void initiateThreads() {
-		log.debug("initializing Pm thread & Consumer thread");
-		Thread pmThread = new Thread(new PmThread());
-		pmThread.start();
-		Thread consumerThread = new Thread(new ConsumerThread());
-		consumerThread.start();
-	}
+    private static Logger log = LoggerFactory.getLogger(MainThread.class);
+
+    private MainThread() {
+
+    }
+
+    /**
+     * main thread initialization.
+    */
+    public static void initiateThreads() {
+        log.debug("initializing Pm thread & Consumer thread");
+        Thread pmThread = new Thread(new PmThread());
+        pmThread.start();
+        Thread consumerThread = new Thread(new ConsumerThread());
+        consumerThread.start();
+        Thread configThread = new Thread(new ConfigThread());
+        configThread.start();
+    }
 
 }
diff --git a/components/slice-analysis-ms/src/main/java/org/onap/slice/analysis/ms/aai/AaiService.java b/components/slice-analysis-ms/src/main/java/org/onap/slice/analysis/ms/aai/AaiService.java
index 9459b64..b68373d 100644
--- a/components/slice-analysis-ms/src/main/java/org/onap/slice/analysis/ms/aai/AaiService.java
+++ b/components/slice-analysis-ms/src/main/java/org/onap/slice/analysis/ms/aai/AaiService.java
@@ -4,6 +4,7 @@
  *  ================================================================================
  *   Copyright (C) 2021-2022 Wipro Limited.
  *   Copyright (C) 2022 Huawei Canada Limited.
+ *   Copyright (C) 2022 Huawei Technologies Co., Ltd.
  *   ==============================================================================
  *     Licensed under the Apache License, Version 2.0 (the "License");
  *     you may not use this file except in compliance with the License.
@@ -26,10 +27,12 @@
 
 import java.util.ArrayList;
 import java.util.HashMap;
+import java.util.HashSet;
 import java.util.List;
 import java.util.Map;
 import java.util.Objects;
 
+import java.util.Set;
 import org.json.JSONArray;
 import org.json.JSONObject;
 import org.onap.slice.analysis.ms.models.Configuration;
@@ -111,6 +114,39 @@
     }
 
     /**
+     * fetch all valid cll instances
+     * @return
+     */
+    public Set<String> fetchAllCllInstances() {
+        globalSubscriberId = "IBNCustomer";
+        subscriptionServiceType = "IBN";
+        String serviceReqUrl = aaiBaseUrl + "/business/customers/customer/" + globalSubscriberId
+            + "/service-subscriptions/service-subscription/" + subscriptionServiceType + "/service-instances";
+        log.info("serviceReqUrl {}", serviceReqUrl);
+        Set<String> cllInstances = new HashSet<>();
+        try {
+            String serviceInstance =
+                restclient.sendGetRequest(serviceReqUrl, new ParameterizedTypeReference<String>() {}).getBody();
+            log.debug("The service instance response msg are :{}", serviceInstance);
+            JSONObject serviceInstanceJson = new JSONObject(serviceInstance);
+            JSONArray serviceInstanceArray = serviceInstanceJson.getJSONArray("service-instance");
+            for (int i = 0; i < serviceInstanceArray.length(); i++) {
+                JSONObject serviceObj = serviceInstanceArray.getJSONObject(i);
+                String serviceId = serviceObj.getString("service-instance-id");
+                log.debug("Jsonobject {}", serviceObj);
+                if(serviceId.startsWith("cll")){
+                    cllInstances.add(serviceId);
+                    log.debug("Add {} to latest service id list", serviceId);
+                }
+            }
+            return cllInstances;
+        } catch (Exception e) {
+            log.error("Exception while fetching serviceDetails: " + e);
+        }
+        return new HashSet<>();
+    }
+
+    /**
      * Fetches the current configuration of a Slice from AAI
      *
      * @param snssai SNSSAI ID
@@ -210,7 +246,7 @@
     /**
      * Fetches the SNSSIs of a serviceInstanceId
      *
-     * @param serviceInstanceId service instance ID
+     * @param sliceInstanceId service instance ID
      * @return snssaiList contains list of SNSSAIs
      */
     public List<String> getSnssaiList(String sliceInstanceId) {
diff --git a/components/slice-analysis-ms/src/main/java/org/onap/slice/analysis/ms/controller/ConfigFetchFromCbs.java b/components/slice-analysis-ms/src/main/java/org/onap/slice/analysis/ms/controller/ConfigFetchFromCbs.java
index 2bdb050..e69d45f 100644
--- a/components/slice-analysis-ms/src/main/java/org/onap/slice/analysis/ms/controller/ConfigFetchFromCbs.java
+++ b/components/slice-analysis-ms/src/main/java/org/onap/slice/analysis/ms/controller/ConfigFetchFromCbs.java
@@ -97,8 +97,8 @@
 
                 Type mapType = new TypeToken<Map<String, Object>>() {
                 }.getType();
-
                 if (jsonObject.getAsJsonObject("policies") != null) {
+                    log.info("Policy file exist");
                     if(jsonObject.getAsJsonObject("policies").getAsJsonArray("items").size() == 0) {
                         log.error("No policy in policy drool pdp engine, nothing to update.");
                     } else {
diff --git a/components/slice-analysis-ms/src/main/java/org/onap/slice/analysis/ms/dmaap/VesNotificationCallback.java b/components/slice-analysis-ms/src/main/java/org/onap/slice/analysis/ms/dmaap/VesNotificationCallback.java
index 584da7b..fff156c 100644
--- a/components/slice-analysis-ms/src/main/java/org/onap/slice/analysis/ms/dmaap/VesNotificationCallback.java
+++ b/components/slice-analysis-ms/src/main/java/org/onap/slice/analysis/ms/dmaap/VesNotificationCallback.java
@@ -3,6 +3,7 @@
  *  slice-analysis-ms
  *  ================================================================================
  *  Copyright (C) 2022 Huawei Canada Limited.
+ *  Copyright (C) 2022 Huawei Technologies Co., Ltd.
  *  ==============================================================================
  *     Licensed under the Apache License, Version 2.0 (the "License");
  *     you may not use this file except in compliance with the License.
@@ -21,9 +22,10 @@
 
 package org.onap.slice.analysis.ms.dmaap;
 
-import com.fasterxml.jackson.core.type.TypeReference;
 import com.fasterxml.jackson.databind.JsonNode;
 import com.fasterxml.jackson.databind.ObjectMapper;
+import java.util.Set;
+import org.onap.slice.analysis.ms.aai.AaiService;
 import org.onap.slice.analysis.ms.models.Configuration;
 import org.onap.slice.analysis.ms.models.vesnotification.NotificationFields;
 
@@ -51,6 +53,9 @@
     @Autowired
     CCVPNPmDatastore ccvpnPmDatastore;
 
+    @Autowired
+    AaiService aaiService;
+
     private static Logger log = LoggerFactory.getLogger(VesNotificationCallback.class);
 
     /**
@@ -86,10 +91,10 @@
         String uniId = null;
         String bw = null;
         try {
+            updateCllInstance();
             JsonNode node = obj.readTree(msg);
             JsonNode notificationNode = node.get(EVENT).get(NOTIFICATIONFIELDS);
             output = obj.treeToValue(notificationNode, NotificationFields.class);
-
             //Filter out target notification changeIdentifier and changeType
             notifChangeIdentifier = output.getChangeIdentifier();
             notifChangeType = output.getChangeType();
@@ -104,11 +109,18 @@
             log.error("Error converting VES msg to object, {}", e.getMessage());
         }
         if (cllId != null && uniId != null && bw != null){
-            log.info("Saving new CCVPN service usage data into ccvpnPmDatastore");
             log.debug("new bandwidth data -- serviceId: {}, uniId: {}, bw: {}", cllId, uniId, bw);
             ccvpnPmDatastore.addUsedBwToEndpoint(cllId, uniId, bw);
         }
+    }
 
+    /**
+     * Get latest services list, and update local related variables.
+     */
+    public void updateCllInstance(){
+        Set<String> instances = aaiService.fetchAllCllInstances();
+        log.debug("All valid instances are {}", instances);
+        ccvpnPmDatastore.updateCllInstances(instances);
     }
 
 }
diff --git a/components/slice-analysis-ms/src/main/java/org/onap/slice/analysis/ms/models/Configuration.java b/components/slice-analysis-ms/src/main/java/org/onap/slice/analysis/ms/models/Configuration.java
index 4b5fe2e..c159951 100644
--- a/components/slice-analysis-ms/src/main/java/org/onap/slice/analysis/ms/models/Configuration.java
+++ b/components/slice-analysis-ms/src/main/java/org/onap/slice/analysis/ms/models/Configuration.java
@@ -4,6 +4,7 @@
  *  ================================================================================
  *   Copyright (C) 2020-2022 Wipro Limited.
  *   Copyright (C) 2022 Huawei Canada Limited.
+ *   Copyright (C) 2022 Huawei Technologies Co., Ltd.
  *   ==============================================================================
  *     Licensed under the Apache License, Version 2.0 (the "License");
  *     you may not use this file except in compliance with the License.
@@ -69,12 +70,12 @@
     private String rannfnssiDetailsTemplateId;
     private String desUrl;
     private int pmDataDurationInWeeks;
-
     private int vesNotifPollingInterval;
     private String vesNotifChangeIdentifier;
     private String vesNotifChangeType;
     private int ccvpnEvalInterval;
-    private double ccvpnEvalThreshold;
+    private double ccvpnEvalUpperThreshold;
+    private double ccvpnEvalLowerThreshold;
     private double ccvpnEvalPrecision;
     private String aaiNotifTargetAction;
     private String aaiNotifTargetSource;
@@ -108,15 +109,21 @@
 
     @Override
     public String toString() {
-        return "Configuration [pgHost=" + pgHost + ", pgPort=" + pgPort + ", pgUsername=" + pgUsername + ", pgPassword="
-                + pgPassword + ", dmaapServers=" + dmaapServers + ", configDbService=" + configDbService + ", cpsUrl="
-                + cpsUrl + ", aaiUrl=" + aaiUrl + ", configDbEnabled=" + configDbEnabled + ", cg=" + cg + ", cid=" + cid
-                + ", pollingInterval=" + pollingInterval + ", pollingTimeout=" + pollingTimeout + ", aafUsername="
-                + aafUsername + ", aafPassword=" + aafPassword + ", streamsSubscribes=" + streamsSubscribes
-                + ", streamsPublishes=" + streamsPublishes + ", samples=" + samples + ", minPercentageChange="
-                + minPercentageChange + ", initialDelaySeconds=" + initialDelaySeconds + ", rannfnssiDetailsTemplateId="
-                + rannfnssiDetailsTemplateId + ", desUrl=" + desUrl + ", pmDataDurationInWeeks=" + pmDataDurationInWeeks
-                + "]";
+        return "Configuration [pgHost=" + pgHost + ", pgPort=" + pgPort + ", pgUsername=" + pgUsername +
+            ", dmaapServers=" + dmaapServers + ", configDbService=" + configDbService + ", cpsUrl="
+            + cpsUrl + ", aaiUrl=" + aaiUrl + ", configDbEnabled=" + configDbEnabled + ", cg=" + cg + ", cid=" + cid
+            + ", pollingInterval=" + pollingInterval + ", pollingTimeout=" + pollingTimeout + ", aafUsername="
+            + aafUsername + ", streamsSubscribes=" + streamsSubscribes
+            + ", streamsPublishes=" + streamsPublishes + ", samples=" + samples + ", minPercentageChange="
+            + minPercentageChange + ", initialDelaySeconds=" + initialDelaySeconds + ", rannfnssiDetailsTemplateId="
+            + rannfnssiDetailsTemplateId + ", desUrl=" + desUrl + ", pmDataDurationInWeeks=" + pmDataDurationInWeeks
+            + ", vesNotifPollingInterval=" + vesNotifPollingInterval + ", vesNotifChangeIdentifier="
+            + vesNotifChangeIdentifier + ", vesNotifChangeIdentifier=" + vesNotifChangeType + ", ccvpnEvalInterval=" +
+            ccvpnEvalInterval + ", ccvpnEvalUpperThreshold=" + ccvpnEvalUpperThreshold + ", ccvpnEvalLowerThreshold=" +
+            ccvpnEvalLowerThreshold + ", ccvpnEvalPrecision=" + ccvpnEvalPrecision + ", aaiNotifTargetAction=" +
+            aaiNotifTargetAction + ", aaiNotifTargetSource=" + aaiNotifTargetSource + ", aaiNotifTargetEntity=" +
+            aaiNotifTargetEntity + ", ccvpnEvalPeriodicCheckOn=" + ccvpnEvalPeriodicCheckOn +
+            ", ccvpnEvalOnDemandCheckOn=" + ccvpnEvalOnDemandCheckOn + ", ccvpnEvalStrategy=" + ccvpnEvalStrategy + "]";
     }
 
     /**
@@ -126,7 +133,8 @@
 
         log.info("Updating configuration from CBS");
 
-        Type mapType = new TypeToken<Map<String, Object>>() {}.getType();
+        Type mapType = new TypeToken<Map<String, Object>>() {
+        }.getType();
 
         JsonObject subscribes = jsonObject.getAsJsonObject("streams_subscribes");
         streamsSubscribes = new Gson().fromJson(subscribes, mapType);
@@ -141,7 +149,8 @@
         pgHost = jsonObject.get("postgres.host").getAsString();
 
         JsonArray servers = jsonObject.getAsJsonArray("sliceanalysisms.dmaap.server");
-        Type listType = new TypeToken<List<String>>() {}.getType();
+        Type listType = new TypeToken<List<String>>() {
+        }.getType();
         dmaapServers = new Gson().fromJson(servers, listType);
 
         cg = jsonObject.get("sliceanalysisms.cg").getAsString();
@@ -165,7 +174,8 @@
         aaiNotifTargetSource = jsonObject.get("sliceanalysisms.aaiNotif.targetSource").getAsString();
         aaiNotifTargetEntity = jsonObject.get("sliceanalysisms.aaiNotif.targetEntity").getAsString();
         ccvpnEvalInterval = jsonObject.get("sliceanalysisms.ccvpnEvalInterval").getAsInt();
-        ccvpnEvalThreshold = jsonObject.get("sliceanalysisms.ccvpnEvalThreshold").getAsDouble();
+        ccvpnEvalUpperThreshold = jsonObject.get("sliceanalysisms.ccvpnEvalUpperThreshold").getAsDouble();
+        ccvpnEvalLowerThreshold = jsonObject.get("sliceanalysisms.ccvpnEvalLowerThreshold").getAsDouble();
         ccvpnEvalPrecision = jsonObject.get("sliceanalysisms.ccvpnEvalPrecision").getAsDouble();
         ccvpnEvalPeriodicCheckOn = jsonObject.get("sliceanalysisms.ccvpnEvalPeriodicCheckOn").getAsBoolean();
         ccvpnEvalOnDemandCheckOn = jsonObject.get("sliceanalysisms.ccvpnEvalOnDemandCheckOn").getAsBoolean();
@@ -191,6 +201,6 @@
         } else {
             cpsUrl = jsonObject.get("sliceanalysisms.cps.url").getAsString();
         }
-        log.info("configuration from CBS {}", this);
+        log.info("configuration from CBS has been updated to {}", this);
     }
 }
diff --git a/components/slice-analysis-ms/src/main/java/org/onap/slice/analysis/ms/service/ConfigThread.java b/components/slice-analysis-ms/src/main/java/org/onap/slice/analysis/ms/service/ConfigThread.java
new file mode 100644
index 0000000..88477eb
--- /dev/null
+++ b/components/slice-analysis-ms/src/main/java/org/onap/slice/analysis/ms/service/ConfigThread.java
@@ -0,0 +1,75 @@
+/*******************************************************************************
+ *  ============LICENSE_START=======================================================
+ *  slice-analysis-ms
+ *  ================================================================================
+ *   Copyright (C) 2022 Huawei Technologies Co., Ltd.
+ *   ==============================================================================
+ *     Licensed under the Apache License, Version 2.0 (the "License");
+ *     you may not use this file except in compliance with the License.
+ *     You may obtain a copy of the License at
+ *
+ *          http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *     Unless required by applicable law or agreed to in writing, software
+ *     distributed under the License is distributed on an "AS IS" BASIS,
+ *     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *     See the License for the specific language governing permissions and
+ *     limitations under the License.
+ *     ============LICENSE_END=========================================================
+ *
+ *******************************************************************************/
+
+package org.onap.slice.analysis.ms.service;
+
+import org.onap.slice.analysis.ms.models.ConfigPolicy;
+import org.onap.slice.analysis.ms.service.ccvpn.CCVPNPmDatastore;
+import org.onap.slice.analysis.ms.utils.BeanUtil;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * This thread is used to convert ccvpn runtime configurations from policy to our local memory CCVPNPmDatastore
+ */
+public class ConfigThread extends Thread{
+
+    CCVPNPmDatastore ccvpnPmDatastore = BeanUtil.getBean(CCVPNPmDatastore.class);
+    private static Logger log = LoggerFactory.getLogger(ConfigThread.class);
+
+    public ConfigThread () {
+        super();
+    }
+
+    public void run() {
+        log.info("Config Thread is starting...");
+        boolean done = false;
+        while(!done) {
+            try {
+                Thread.sleep(1000);
+                ConfigPolicy configPolicy = ConfigPolicy.getInstance();
+                if(configPolicy != null && configPolicy.getConfig() != null) {
+                    String cllId = null;
+                    Boolean clBwAssuranceStatus = null;
+                    int originalBw = 0;
+                    if(configPolicy.getConfig().containsKey("cllId")){
+                        cllId = String.valueOf(configPolicy.getConfig().get("cllId"));
+                    }
+                    if(configPolicy.getConfig().containsKey("closedLoopStatus")){
+                        clBwAssuranceStatus = String.valueOf(configPolicy.getConfig().get("closedLoopStatus")).equalsIgnoreCase("true");
+                    }
+                    if(configPolicy.getConfig().containsKey("originalBw")){
+                        originalBw = Integer.parseInt(String.valueOf(configPolicy.getConfig().get("originalBw")));
+                    }
+                    if(cllId!=null && clBwAssuranceStatus!=null){
+                        ccvpnPmDatastore.updateConfigFromPolicy(cllId, clBwAssuranceStatus, originalBw);
+                    }
+                } else {
+                    log.error("Config policy is empty, nothing to update.");
+                }
+
+            } catch (Exception e) {
+                log.error("Exception in Config Thread ", e);
+                done = true;
+            }
+        }
+    }
+}
diff --git a/components/slice-analysis-ms/src/main/java/org/onap/slice/analysis/ms/service/ccvpn/BandwidthEvaluator.java b/components/slice-analysis-ms/src/main/java/org/onap/slice/analysis/ms/service/ccvpn/BandwidthEvaluator.java
index 4339180..c5e3151 100644
--- a/components/slice-analysis-ms/src/main/java/org/onap/slice/analysis/ms/service/ccvpn/BandwidthEvaluator.java
+++ b/components/slice-analysis-ms/src/main/java/org/onap/slice/analysis/ms/service/ccvpn/BandwidthEvaluator.java
@@ -3,6 +3,7 @@
  *  slice-analysis-ms
  *  ================================================================================
  *   Copyright (C) 2022 Huawei Canada Limited.
+ *   Copyright (C) 2022 Huawei Technologies Co., Ltd.
  *  ==============================================================================
  *     Licensed under the Apache License, Version 2.0 (the "License");
  *     you may not use this file except in compliance with the License.
@@ -50,21 +51,13 @@
     private Configuration configuration;
 
     @Autowired
-    AaiService aaiService;
-
-    @Autowired
-    CCVPNPmDatastore ccvpnPmDatastore;
-
-    @Autowired
     StrategyFactory strategyFactory;
 
     private Loop evaluationEventLoop;
-    private Loop aaiEventLoop;
 
     private static final Event KILL_PILL = new SimpleEvent(null, 0);
     private static final int DEFAULT_EVAL_INTERVAL = 5;
     private static final String DEFAULT_STRATEGY_NAME = "FixedUpperBoundStrategy";
-
     /**
      * Interval of each round of evaluation, defined in config_all.json
      */
@@ -86,6 +79,7 @@
         strategyName = (strategyName != null)? strategyName : DEFAULT_STRATEGY_NAME;
         evaluationInterval = (evaluationInterval == 0)? DEFAULT_EVAL_INTERVAL : evaluationInterval;
         EvaluationStrategy strategy = strategyFactory.getStrategy(strategyName);
+        log.info("{} is utilized as the bandwidth evaluatior strategy", strategyName);
 
         /**
          * Evalution main loop
@@ -97,32 +91,6 @@
             }
         };
 
-        /**
-         * AAI data consumer loop
-         */
-        aaiEventLoop = new Loop("AAIEventLoop"){
-            @Override
-            public void process(Event event) {
-                if (event.type() == SimpleEvent.Type.AAI_BW_REQ){
-                    log.debug("=== Processing new AAI network policy query at: {} ===", event.time());
-                    String serviceId = (String) event.subject();
-                    Map<String, Integer> maxBandwidthData = aaiService.fetchMaxBandwidthOfService(serviceId);
-                    if (maxBandwidthData.get("maxBandwidth") != null){
-                        log.info("Successfully retrieved bandwidth info from AAI; service: {}, bandwidth: {}",
-                                serviceId, maxBandwidthData.get("maxBandwidth"));
-                        int bwValue = maxBandwidthData.get("maxBandwidth").intValue();
-                        if (ccvpnPmDatastore.getProvBwOfSvc(serviceId) == 0){
-                            ccvpnPmDatastore.updateProvBw(serviceId, bwValue, true);
-                        } else if (ccvpnPmDatastore.getProvBwOfSvc(serviceId) != bwValue) {
-                            log.info("Service modification complete; serviceId: {} with new bandwidth: {}", serviceId, bwValue);
-                            ccvpnPmDatastore.updateProvBw(serviceId, bwValue, true);
-                            ccvpnPmDatastore.updateSvcState(serviceId, ServiceState.RUNNING);
-                        }
-                    }
-                    log.debug("=== Processing AAI network policy query complete ===");
-                }
-            }
-        };
         scheduleEvaluation();
     }
 
@@ -132,7 +100,6 @@
     @PreDestroy
     public void stop(){
         stopScheduleEvaluation();
-        aaiEventLoop.stop();
         evaluationEventLoop.stop();
     }
 
@@ -160,21 +127,21 @@
      * @param event event object
      */
     public void post(@NonNull Event event){
-        log.debug("A new event triggered, type: {}, subject: {}, at time: {}",
+        log.info("A new event triggered, type: {}, subject: {}, at time: {}",
                 event.type(), event.subject(), event.time());
-        if (event.type() == SimpleEvent.Type.AAI_BW_REQ) {
-            aaiEventLoop.add(event);
-        } else if (event.type() == SimpleEvent.Type.PERIODIC_CHECK) {
+        if (event.type() == SimpleEvent.Type.PERIODIC_CHECK) {
             evaluationEventLoop.add(event);
         } else if (event.type() == SimpleEvent.Type.ONDEMAND_CHECK) {
             evaluationEventLoop.add(event);
         }
     }
 
+    // update configuration
     private void loadConfig() {
         configuration = Configuration.getInstance();
         evaluationInterval = configuration.getCcvpnEvalInterval();
         strategyName = configuration.getCcvpnEvalStrategy();
+        log.info("Evaluation loop configs has been loaded. Strategy {}.", strategyName);
     }
 
     /**
diff --git a/components/slice-analysis-ms/src/main/java/org/onap/slice/analysis/ms/service/ccvpn/CCVPNPmDatastore.java b/components/slice-analysis-ms/src/main/java/org/onap/slice/analysis/ms/service/ccvpn/CCVPNPmDatastore.java
index 6d9b960..3e6c474 100644
--- a/components/slice-analysis-ms/src/main/java/org/onap/slice/analysis/ms/service/ccvpn/CCVPNPmDatastore.java
+++ b/components/slice-analysis-ms/src/main/java/org/onap/slice/analysis/ms/service/ccvpn/CCVPNPmDatastore.java
@@ -3,6 +3,7 @@
  *  slice-analysis-ms
  *  ================================================================================
  *   Copyright (C) 2022 Huawei Canada Limited.
+ *   Copyright (C) 2022 Huawei Technologies Co., Ltd.
  *  ==============================================================================
  *     Licensed under the Apache License, Version 2.0 (the "License");
  *     you may not use this file except in compliance with the License.
@@ -20,6 +21,10 @@
  *******************************************************************************/
 package org.onap.slice.analysis.ms.service.ccvpn;
 
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.Set;
+import lombok.Getter;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.stereotype.Component;
@@ -42,13 +47,23 @@
     private static Logger log = LoggerFactory.getLogger(CCVPNPmDatastore.class);
     private static final Pattern pattern = Pattern.compile("([0-9.]+)\\s*(kb|Kb|mb|Mb|Gb|gb)*");
     private static final int WINDOW_SIZE = 5;
+    @Getter
     private final ConcurrentMap<String, ServiceState> svcStatus = new ConcurrentHashMap<>();
     // Provisioned bandwidth of each endpoint
+    @Getter
     private final ConcurrentMap<String, Integer> endpointToProvBw = new ConcurrentHashMap<>();
     // Max bandwidth (upper-bound) of each endpoint
+    @Getter
     private final ConcurrentMap<String, Integer> upperBoundBw = new ConcurrentHashMap<>();
     // Current bandwidth usage data list from customers
+    @Getter
     private final ConcurrentMap<Endpointkey, EvictingQueue<Integer>> endpointToUsedBw = new ConcurrentHashMap<>();
+    // Original bandwidth of each endpoint
+    @Getter
+    private final ConcurrentMap<String, Integer> endpointToOriginalBw = new ConcurrentHashMap<>();
+    // Assurance Status of each endpoint
+    @Getter
+    private final ConcurrentMap<String, Boolean> closedLoopBwAssuranceStatus = new ConcurrentHashMap<>();
 
     /**
      * Given a cllId, return a map between Endpointkey and their corresponding UsedBw Queue.
@@ -88,11 +103,30 @@
         return svcStatus.getOrDefault(cllId, ServiceState.UNKNOWN);
     }
 
+    /**
+     * If ccvpn flexible threshold is on, then bandwidth can be assured within scope.
+     * @param cllId
+     * @return
+     */
     public Integer getUpperBoundBwOfSvc(String cllId){
         return upperBoundBw.getOrDefault(cllId, Integer.MAX_VALUE);
     }
 
     /**
+     * Get closed loop check status of this cll service
+     * @param cllId
+     * @return
+     */
+    public Boolean getClosedloopStatus(String cllId){
+        return closedLoopBwAssuranceStatus.getOrDefault(cllId,true);
+    }
+
+    public int getOriginalBw(String cllId) {
+        return endpointToOriginalBw.getOrDefault(cllId, 0);
+    }
+
+
+    /**
      * return the complete map of cll service status
      * @return complete map of serviceStatusMap
      */
@@ -121,6 +155,35 @@
     }
 
     /**
+     * Update the status, whether close loop bw modification of this cll service is on.
+     * @param cllId
+     * @param status
+     */
+    public void updateClosedloopStatus(String cllId, Boolean status){
+        closedLoopBwAssuranceStatus.put(cllId, status);
+    }
+
+    /**
+     * Update cll original bw, which will not influenced by closed loop bw assurance
+     * @param cllId
+     * @param originalBw
+     */
+    public void updateOriginalBw(String cllId, int originalBw){
+        endpointToOriginalBw.put(cllId, originalBw);
+    }
+
+    /**
+     * Update runtime configurations;
+     * @param cllId
+     * @param closedLoopBwAssuranceStatus
+     * @param originalBw
+     */
+    public void updateConfigFromPolicy(String cllId, Boolean closedLoopBwAssuranceStatus, int originalBw) {
+        updateClosedloopStatus(cllId, closedLoopBwAssuranceStatus);
+        updateOriginalBw(cllId, originalBw);
+    }
+
+    /**
      * Update upper bound bandwidth value to given bandwidth
      * @param cllId target cll instance id
      * @param bw new bandwidth
@@ -130,6 +193,47 @@
     }
 
     /**
+     * Update local service related variables in case cll is deleted.
+     * @param allValidCllInstances
+     */
+    public void updateCllInstances(Set<String> allValidCllInstances){
+        Set<String> invalidCllIds;
+        invalidCllIds= filterInvalidCllIds(allValidCllInstances, svcStatus.keySet());
+        for(String invalidCllId : invalidCllIds) {
+            log.debug("drop {} from endpointToUsedBw", invalidCllId);
+            endpointToUsedBw.entrySet().stream().dropWhile(map -> map.getKey().getCllId().equalsIgnoreCase(invalidCllId));
+            Iterator<Map.Entry<Endpointkey, EvictingQueue<Integer>>> iterator = endpointToUsedBw.entrySet().iterator();
+            while(iterator.hasNext()) {
+                Endpointkey endpointkey = iterator.next().getKey();
+                if(endpointkey.getCllId().equalsIgnoreCase(invalidCllId)) {
+                    endpointToUsedBw.remove(endpointkey);
+                }
+            }
+        }
+        svcStatus.keySet().removeAll(invalidCllIds);
+        invalidCllIds = filterInvalidCllIds(allValidCllInstances, endpointToProvBw.keySet());
+        endpointToProvBw.keySet().removeAll(invalidCllIds);
+        invalidCllIds = filterInvalidCllIds(allValidCllInstances, upperBoundBw.keySet());
+        upperBoundBw.keySet().removeAll(invalidCllIds);
+        invalidCllIds = filterInvalidCllIds(allValidCllInstances, endpointToOriginalBw.keySet());
+        endpointToOriginalBw.keySet().removeAll(invalidCllIds);
+        invalidCllIds = filterInvalidCllIds(allValidCllInstances, closedLoopBwAssuranceStatus.keySet());
+        closedLoopBwAssuranceStatus.keySet().removeAll(invalidCllIds);
+    }
+
+    /**
+     * Filter out cllId to be deleted
+     * @param allValidCllInstances
+     * @param currentCllInstances
+     * @return
+     */
+    public Set<String> filterInvalidCllIds(Set<String> allValidCllInstances, Set<String> currentCllInstances) {
+        Set<String> invalidCllInstances = new HashSet<>(currentCllInstances);
+        invalidCllInstances.removeAll(allValidCllInstances);
+        return invalidCllInstances;
+    }
+
+    /**
      * Update provisioned bandwidth to given bandwidth value;
      * if @param{override} is false, only write the bandwidth if it is absent.
      * Otherwise override the old value no matter if it exists or not
@@ -141,8 +245,7 @@
      * @return whether bandwidth value is changed or not.
      */
     public boolean updateProvBw(String cllId, int bw, boolean override){
-        if (!override && !endpointToProvBw.containsKey(cllId)){
-            endpointToProvBw.put(cllId, bw);
+        if ( endpointToProvBw.putIfAbsent(cllId, bw) == null || !override){
             return true;
         } else {
             if (endpointToProvBw.get(cllId) == bw){
diff --git a/components/slice-analysis-ms/src/main/java/org/onap/slice/analysis/ms/service/ccvpn/FixedUpperBoundStrategy.java b/components/slice-analysis-ms/src/main/java/org/onap/slice/analysis/ms/service/ccvpn/FixedUpperBoundStrategy.java
index 874e327..66dc6dc 100644
--- a/components/slice-analysis-ms/src/main/java/org/onap/slice/analysis/ms/service/ccvpn/FixedUpperBoundStrategy.java
+++ b/components/slice-analysis-ms/src/main/java/org/onap/slice/analysis/ms/service/ccvpn/FixedUpperBoundStrategy.java
@@ -3,6 +3,7 @@
  *  slice-analysis-ms
  *  ================================================================================
  *   Copyright (C) 2022 Huawei Canada Limited.
+ *   Copyright (C) 2022 Huawei Technologies Co., Ltd.
  *  ==============================================================================
  *     Licensed under the Apache License, Version 2.0 (the "License");
  *     you may not use this file except in compliance with the License.
@@ -34,6 +35,10 @@
 import java.util.TreeMap;
 import java.util.stream.Collectors;
 
+/**
+ * Threshold strategy can be configured via configuration
+ * If "sliceanalysisms.ccvpnEvalStrategy" is set to "FixedUpperBoundStrategy", then this class is triggered.
+ */
 @Component
 public class FixedUpperBoundStrategy implements EvaluationStrategy{
     private static Logger log = LoggerFactory.getLogger(FixedUpperBoundStrategy.class);
@@ -46,7 +51,7 @@
     /**
      * Percentage threshold of bandwidth adjustment.
      */
-    private static double threshold;
+    private static double upperThreshold;
 
     /**
      * Precision of bandwidth evaluation and adjustment.
@@ -54,7 +59,7 @@
     private static double precision; // in Mbps;
 
     @Autowired
-    BandwidthEvaluator bandwidthEvaluator;
+    NetworkPolicyMonitor networkPolicyMonitor;
 
     @Autowired
     CCVPNPmDatastore ccvpnPmDatastore;
@@ -67,6 +72,11 @@
         loadConfig();
     }
 
+    /**
+     * Periodically ensure endpoint bw adjustment is under assurance.
+     * This method will be invoked when FixedUpperBoundStrategy is set.
+     * @param event
+     */
     @Override
     public void execute(Event event){
         if (event.type() == SimpleEvent.Type.PERIODIC_CHECK && isPeriodicCheckOn()){
@@ -77,14 +87,18 @@
                 String serviceId = entry.getKey().getCllId();
                 Object[] usedBws = entry.getValue().tryReadToArray();
 
+                if (!ccvpnPmDatastore.getClosedloopStatus(serviceId)) {
+                    log.info("CCVPN Evaluator Output: service {}, closed loop bw modification is off.", serviceId);
+                    continue;
+                }
                 if (usedBws == null) {
                     // No enough data for evaluating
-                    log.debug("CCVPN Evaluator Output: service {}, not enough data to evaluate", serviceId);
+                    log.info("CCVPN Evaluator Output: service {}, not enough data to evaluate", serviceId);
                     continue;
                 }
                 if (ccvpnPmDatastore.getProvBwOfSvc(serviceId) == 0) {
                     // Max bandwidth not cached yet
-                    log.debug("CCVPN Evaluator Output: service {}, max bandwidth not cached, wait for next round", serviceId);
+                    log.info("CCVPN Evaluator Output: service {}, max bandwidth not cached, wait for next round", serviceId);
                     post(new SimpleEvent(SimpleEvent.Type.AAI_BW_REQ, serviceId));
                     continue;
                 }
@@ -110,33 +124,39 @@
             // fetch the provisioned bandwidth info if underMaintenance; otherwise send modification request
             for(Map.Entry<String, Integer> entry: candidate.entrySet()) {
                 //still doing adjustment
-                if (isServiceUnderMaintenance(entry.getKey())) {
-                    if (entry.getValue() == 0){
-                        log.debug("CCVPN Evaluator Output: service {}," +
-                                " is in maintenance state, fetching bandwidth info from AAI", entry.getKey());
+                String cllId = entry.getKey();
+                Integer newBw = entry.getValue();
+                if(!ccvpnPmDatastore.getClosedloopStatus(cllId)) {
+                    log.info("CCVPN Evaluator Output: service {} is not under closed loop assurance", cllId);
+                    continue;
+                }
+                if (isServiceUnderMaintenance(cllId)) {
+                    if (newBw == 0){
+                        log.info("CCVPN Evaluator Output: service {}," +
+                            " is in maintenance state, fetching bandwidth info from AAI", cllId);
                     } else {
-                        log.debug("CCVPN Evaluator Output: candidate {}," +
-                                " need an adjustment, but skipped due to in maintenance state", entry.getKey());
+                        log.info("CCVPN Evaluator Output: candidate {}," +
+                            " need an adjustment, but skipped due to in maintenance state", cllId);
                     }
-                    post(new SimpleEvent(SimpleEvent.Type.AAI_BW_REQ, entry.getKey()));
+                    post(new SimpleEvent(SimpleEvent.Type.AAI_BW_REQ, cllId));
                     continue;
                 }
                 //not in the mid of adjustment; we are free to adjust.
                 log.info("CCVPN Evaluator Output: candidate {}," +
-                        " need an adjustment, sending request to policy", entry.getKey());
+                    " need an adjustment, sending request to policy", entry.getKey());
                 ccvpnPmDatastore.updateSvcState(entry.getKey(), ServiceState.UNDER_MAINTENANCE);
-                sendModifyRequest(entry.getKey(), entry.getValue(), RequestOwner.DCAE);
+                sendModifyRequest(entry.getKey(), newBw, RequestOwner.DCAE);
             }
             log.debug("=== Processing periodic check complete ===");
         }
         if (event.type() == SimpleEvent.Type.ONDEMAND_CHECK && isOnDemandCheckOn()) {
-            log.debug("=== Processing upperbound adjustment request: {} ===", event.time());
+            log.info("=== Processing upperbound adjustment request: {} ===", event.time());
             JsonObject payload = (JsonObject) event.subject();
             String serviceId = payload.get(SERVICE_INSTANCE_LOCATION_ID).getAsString();
             int newBandwidth = payload.get(BANDWIDTH_TOTAL).getAsInt();
             log.info("Update service {} bandwidth upperbound to {} ", serviceId, newBandwidth);
             ccvpnPmDatastore.updateUpperBoundBw(serviceId, newBandwidth);
-            log.debug("=== Processing upperbound adjustment complete ===");
+            log.info("=== Processing upperbound adjustment complete ===");
         }
     }
 
@@ -146,16 +166,16 @@
     }
 
     /**
-     * Post/broadcast event to the BandwidthEvaluator
+     * Post/broadcast event to the networkPolicyMonitor
      * @param event event object
      */
     private void post(Event event){
-        bandwidthEvaluator.post(event);
+        networkPolicyMonitor.post(event);
     }
 
     private void loadConfig() {
         configuration = Configuration.getInstance();
-        threshold = configuration.getCcvpnEvalThreshold();
+        upperThreshold = configuration.getCcvpnEvalUpperThreshold();
         precision = configuration.getCcvpnEvalPrecision(); // in Mbps;
     }
 
@@ -179,9 +199,9 @@
     }
     // check if an adjustment is necessary
     private boolean needAdjust(String serivceId, double used, int provBandwidth, int upper){
-        log.debug("CCVPN Service Usage Analysis: usage: {}, threshold: {}, currentProvisioned {}, upperbound {}",
-                used, threshold, provBandwidth, upper);
-        return provBandwidth > upper || used > threshold * provBandwidth;
+        log.info("CCVPN Service Usage Analysis: usage: {}, threshold: {}, currentProvisioned {}, upperbound {}",
+            used, upperThreshold, provBandwidth, upper);
+        return provBandwidth > upper || used > upperThreshold * provBandwidth;
     }
 
     // calculate new bandwidth to accomodate customer
@@ -189,7 +209,7 @@
         if (cur >= upper){
             return upper;
         }
-        int expected = (int) (Math.ceil((used / threshold) * 1.2 / precision) * precision);
+        int expected = (int) (Math.ceil((used / upperThreshold) * 1.2 / precision) * precision);
         return Math.min(expected, upper);
     }
     // check is service under maint
diff --git a/components/slice-analysis-ms/src/main/java/org/onap/slice/analysis/ms/service/ccvpn/FlexibleThresholdStrategy.java b/components/slice-analysis-ms/src/main/java/org/onap/slice/analysis/ms/service/ccvpn/FlexibleThresholdStrategy.java
index d60c3ea..6b55216 100644
--- a/components/slice-analysis-ms/src/main/java/org/onap/slice/analysis/ms/service/ccvpn/FlexibleThresholdStrategy.java
+++ b/components/slice-analysis-ms/src/main/java/org/onap/slice/analysis/ms/service/ccvpn/FlexibleThresholdStrategy.java
@@ -3,6 +3,7 @@
  *  slice-analysis-ms
  *  ================================================================================
  *   Copyright (C) 2022 Huawei Canada Limited.
+ *   Copyright (C) 2022 Huawei Technologies Co., Ltd.
  *  ==============================================================================
  *     Licensed under the Apache License, Version 2.0 (the "License");
  *     you may not use this file except in compliance with the License.
@@ -20,18 +21,220 @@
  *******************************************************************************/
 package org.onap.slice.analysis.ms.service.ccvpn;
 
+import com.google.gson.JsonObject;
+import org.onap.slice.analysis.ms.models.Configuration;
+import org.onap.slice.analysis.ms.service.PolicyService;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
 
+import javax.annotation.PostConstruct;
+import java.util.Arrays;
+import java.util.Map;
+import java.util.TreeMap;
+import java.util.stream.Collectors;
+
+/**
+ * Threshold strategy can be configured via configuration
+ * If "sliceanalysisms.ccvpnEvalStrategy" is set to "FlexibleThresholdStrategy", then this class is triggered.
+ */
 @Component
-public class FlexibleThresholdStrategy implements EvaluationStrategy {
+public class FlexibleThresholdStrategy implements EvaluationStrategy{
+    private static Logger log = LoggerFactory.getLogger(FlexibleThresholdStrategy.class);
+    private Configuration configuration;
     private static final String TYPE_NAME = "FlexibleThresholdStrategy";
+    private static final String SERVICE_INSTANCE_LOCATION_ID = "service-instance-location-id";
+    private static final String BANDWIDTH_TOTAL = "bandwidth-total";
+
+    /**
+     * Percentage threshold of bandwidth increase adjustment.
+     */
+    private static double upperThreshold;
+
+    /**
+     * Percentage threshold of bandwidth decrease adjustment.
+     */
+    private static double lowerThreshold;
+
+    /**
+     * Precision of bandwidth evaluation and adjustment.
+     */
+    private static double precision; // in Mbps;
+
+    @Autowired
+    NetworkPolicyMonitor networkPolicyMonitor;
+
+    @Autowired
+    CCVPNPmDatastore ccvpnPmDatastore;
+
+    @Autowired
+    PolicyService policyService;
+
+    @PostConstruct
+    public void init() {
+        loadConfig();
+    }
+
+    /**
+     * Periodically ensure endpoint bw adjustment is under assurance.
+     * This method will be invoked when FlexibleThresholdStrategy is set.
+     * @param event
+     */
     @Override
-    public void execute(Event event) {
-        return;
+    public void execute(Event event){
+        if (event.type() == SimpleEvent.Type.PERIODIC_CHECK && isPeriodicCheckOn()){
+            log.info("=== Processing new periodic check request: {} ===", event.time());
+            Map<Endpointkey, CCVPNPmDatastore.EvictingQueue<Integer>> usedBwMap = ccvpnPmDatastore.getUsedBwMap();
+            Map<String, Integer> candidate = new TreeMap<>();
+            for(Map.Entry<Endpointkey, CCVPNPmDatastore.EvictingQueue<Integer>> entry: usedBwMap.entrySet()) {
+                String serviceId = entry.getKey().getCllId();
+                Object[] usedBws = entry.getValue().tryReadToArray();
+                // Judge whether this cll is under closed loop assurance
+                if (!ccvpnPmDatastore.getClosedloopStatus(serviceId)) {
+                    log.info("CCVPN Evaluator Output: service {}, closed loop bw modification is off.", serviceId);
+                    continue;
+                }
+                if (usedBws == null) {
+                    // Not enough data for evaluating
+                    log.info("CCVPN Evaluator Output: service {}, not enough data to evaluate", serviceId);
+                    continue;
+                }
+                if (ccvpnPmDatastore.getProvBwOfSvc(serviceId) == 0) {
+                    // Max bandwidth not cached yet
+                    log.info("CCVPN Evaluator Output: service {}, max bandwidth not cached, wait for next round", serviceId);
+                    post(new SimpleEvent(SimpleEvent.Type.AAI_BW_REQ, serviceId));
+                    continue;
+                }
+                double avg = Arrays.stream(usedBws)
+                    .mapToInt(o -> (int) o)
+                    .summaryStatistics()
+                    .getAverage();
+                int provBw = ccvpnPmDatastore.getProvBwOfSvc(serviceId);
+                int originalBw = ccvpnPmDatastore.getOriginalBw(serviceId);
+
+                if(needIncrease(serviceId, avg, provBw)){
+                    int newBw = (int) (Math.ceil((avg / upperThreshold) * 1.2 / precision) * precision);
+                    log.info("For cll {}, going to increase bw to {}", serviceId, newBw);
+                    candidate.put(serviceId, Math.max(candidate.getOrDefault(serviceId, 0), newBw));
+                } else {
+                    if(needDecrease(serviceId, avg, provBw, originalBw)) {
+                        int newBw = Math.max((int) (Math.ceil(provBw * 0.5)), originalBw);
+                        log.info("For cll {}, going to decrease bw to {}", serviceId, newBw);
+                        candidate.put(serviceId, Math.max(candidate.getOrDefault(serviceId, 0), newBw));
+                    }
+                }
+            }
+            // check svc under maintenance
+            Map<String , ServiceState> svcUnderMaintenance = getServicesUnderMaintenance();
+            for (Map.Entry<String, ServiceState> entry: svcUnderMaintenance.entrySet()){
+                candidate.putIfAbsent(entry.getKey(), 0);
+            }
+            // fetch the provisioned bandwidth info if underMaintenance; otherwise send modification request
+            for(Map.Entry<String, Integer> entry: candidate.entrySet()) {
+                //still doing adjustment
+                String cllId = entry.getKey();
+                Integer newBw = entry.getValue();
+                if(!ccvpnPmDatastore.getClosedloopStatus(cllId)) {
+                    log.info("CCVPN Evaluator Output: service {} is not under closed loop assurance", cllId);
+                    continue;
+                }
+                if (isServiceUnderMaintenance(cllId)) {
+                    if (newBw == 0){
+                        log.info("CCVPN Evaluator Output: service {}," +
+                            " is in maintenance state, fetching bandwidth info from AAI", cllId);
+                    } else {
+                        log.info("CCVPN Evaluator Output: candidate {}," +
+                            " need an adjustment, but skipped due to in maintenance state", cllId);
+                    }
+                    post(new SimpleEvent(SimpleEvent.Type.AAI_BW_REQ, cllId));
+                    continue;
+                }
+                //not in the mid of adjustment; we are free to adjust.
+                log.info("CCVPN Evaluator Output: candidate {}," +
+                    " need an adjustment, sending request to policy, service state changed to under maintenance", entry.getKey());
+                ccvpnPmDatastore.updateSvcState(entry.getKey(), ServiceState.UNDER_MAINTENANCE);
+                sendModifyRequest(entry.getKey(), newBw, RequestOwner.DCAE);
+            }
+            log.debug("=== Processing periodic check complete ===");
+        } else if (event.type() == SimpleEvent.Type.ONDEMAND_CHECK && isOnDemandCheckOn()) {
+            log.info("=== Processing upperbound adjustment request: {} ===", event.time());
+            JsonObject payload = (JsonObject) event.subject();
+            String serviceId = payload.get(SERVICE_INSTANCE_LOCATION_ID).getAsString();
+            int newBandwidth = payload.get(BANDWIDTH_TOTAL).getAsInt();
+            log.info("Update service {} bandwidth upperbound to {} ", serviceId, newBandwidth);
+            ccvpnPmDatastore.updateUpperBoundBw(serviceId, newBandwidth);
+            log.debug("=== Processing upperbound adjustment complete ===");
+        }
     }
 
     @Override
     public String getName() {
         return TYPE_NAME;
     }
+
+    /**
+     * Post/broadcast event to the networkPolicyMonitor
+     * @param event event object
+     */
+    private void post(Event event){
+        networkPolicyMonitor.post(event);
+    }
+
+    private void loadConfig() {
+        configuration = Configuration.getInstance();
+        upperThreshold = configuration.getCcvpnEvalUpperThreshold();
+        lowerThreshold = configuration.getCcvpnEvalLowerThreshold();
+        precision = configuration.getCcvpnEvalPrecision(); // in Mbps;
+    }
+
+    private boolean isPeriodicCheckOn() {
+        configuration = Configuration.getInstance();
+        return configuration.isCcvpnEvalPeriodicCheckOn();
+    }
+
+    private boolean isOnDemandCheckOn() {
+        configuration = Configuration.getInstance();
+        return configuration.isCcvpnEvalOnDemandCheckOn();
+    }
+
+    // send modification requestion
+    private void sendModifyRequest(String cllId, Integer newBandwidth, RequestOwner owner) {
+        log.info("Sending modification request to policy. RequestOwner: {} - Service: {} change to bw: {}",
+            owner, cllId, newBandwidth);
+        policyService.sendOnsetMessageToPolicy(
+            policyService.formPolicyOnsetMessageForCCVPN(cllId, newBandwidth, owner)
+        );
+    }
+
+    private boolean needIncrease(String serviceId, double currAvgUsage, int provBw) {
+        log.info("For service {} judge whether to increase, currAvg bw {}, maxBw {}", serviceId, currAvgUsage, provBw);
+        if ( currAvgUsage > upperThreshold * provBw ) {
+            log.info("decide to increase");
+            return true;
+        }
+        return false;
+    }
+
+    private boolean needDecrease(String serviceId, double currAvgUsage, int provBw, int originalBw) {
+        log.info("For service {} judge whether to decrease, original bw {}, currAvg bw {}, prov {}", serviceId, originalBw, currAvgUsage, provBw);
+        if( currAvgUsage < lowerThreshold * provBw) {
+            log.info("decide to decrease");
+            return true;
+        }
+        return false;
+    }
+
+    // check is service under maintenance
+    private boolean isServiceUnderMaintenance(String serivceId) {
+        return ccvpnPmDatastore.getStatusOfSvc(serivceId) == ServiceState.UNDER_MAINTENANCE;
+    }
+
+    // get a collection of service under maintenance
+    private Map<String, ServiceState> getServicesUnderMaintenance(){
+        return ccvpnPmDatastore.getSvcStatusMap().entrySet()
+            .stream()
+            .filter(e -> e.getValue() == ServiceState.UNDER_MAINTENANCE)
+            .collect(Collectors.toMap(p -> p.getKey(), p -> p.getValue()));
+    }
 }
diff --git a/components/slice-analysis-ms/src/main/java/org/onap/slice/analysis/ms/service/ccvpn/NetworkPolicyMonitor.java b/components/slice-analysis-ms/src/main/java/org/onap/slice/analysis/ms/service/ccvpn/NetworkPolicyMonitor.java
new file mode 100644
index 0000000..9948804
--- /dev/null
+++ b/components/slice-analysis-ms/src/main/java/org/onap/slice/analysis/ms/service/ccvpn/NetworkPolicyMonitor.java
@@ -0,0 +1,164 @@
+/*******************************************************************************
+ *  ============LICENSE_START=======================================================
+ *  slice-analysis-ms
+ *  ================================================================================
+ *   Copyright (C) 2022 Huawei Canada Limited.
+ *  ==============================================================================
+ *     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.slice.analysis.ms.service.ccvpn;
+
+import lombok.NonNull;
+import org.onap.slice.analysis.ms.aai.AaiService;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import javax.annotation.PostConstruct;
+import java.util.Map;
+import java.util.concurrent.BlockingQueue;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
+import java.util.concurrent.Future;
+import java.util.concurrent.LinkedBlockingQueue;
+
+/**
+ * Actor that processes aai network-policy query request
+ */
+@Component
+public class NetworkPolicyMonitor {
+    private static Logger log = LoggerFactory.getLogger(NetworkPolicyMonitor.class);
+    private Loop aaiEventLoop;
+    private static final Event KILL_PILL = new SimpleEvent(null, 0);
+
+    @Autowired
+    AaiService aaiService;
+
+    @Autowired
+    CCVPNPmDatastore ccvpnPmDatastore;
+
+    /**
+     * Initialize and start the NetworkPolicyMonitor.
+     */
+    @PostConstruct
+    public void init() {
+        /**
+         * AAI data consumer loop
+         */
+        aaiEventLoop = new Loop("AAIEventLoop"){
+            @Override
+            public void process(Event event) {
+                if (event.type() == SimpleEvent.Type.AAI_BW_REQ){
+                    log.debug("=== Processing new AAI network policy query at: {} ===", event.time());
+                    String serviceId = (String) event.subject();
+                    Map<String, Integer> maxBandwidthData = aaiService.fetchMaxBandwidthOfService(serviceId);
+                    if (maxBandwidthData.get("maxBandwidth") != null){
+                        log.debug("Successfully retrieved bandwidth info from AAI; service: {}, bandwidth: {}",
+                                serviceId, maxBandwidthData.get("maxBandwidth"));
+                        int bwValue = maxBandwidthData.get("maxBandwidth").intValue();
+                        if (ccvpnPmDatastore.getProvBwOfSvc(serviceId) == 0){
+                            ccvpnPmDatastore.updateProvBw(serviceId, bwValue, true);
+                            log.debug("Provision bw of cll {} updated from 0 to {}, max bw is {}", serviceId, ccvpnPmDatastore.getProvBwOfSvc(serviceId), bwValue);
+                        } else if (ccvpnPmDatastore.getProvBwOfSvc(serviceId) != bwValue) {
+                            log.debug("Service modification complete; serviceId: {} update prov bw from {} to {}", serviceId, ccvpnPmDatastore.getProvBwOfSvc(serviceId), bwValue);
+                            ccvpnPmDatastore.updateProvBw(serviceId, bwValue, true);
+                            ccvpnPmDatastore.updateSvcState(serviceId, ServiceState.RUNNING);
+                            log.debug("Service state of {} is changed to running, {}", serviceId, ccvpnPmDatastore.getStatusOfSvc(serviceId));
+                        }
+                    }
+                    log.debug("=== Processing AAI network policy query complete ===");
+                }
+            }
+        };
+    }
+
+    /**
+     * Post/broadcast event between Loops
+     * @param event event object
+     */
+    public void post(@NonNull Event event) {
+        if (event.type() == SimpleEvent.Type.AAI_BW_REQ) {
+            aaiEventLoop.add(event);
+        }
+    }
+    /**
+     * Inner loop implementation. Each loop acts like an actor.
+     */
+    private abstract class Loop implements Runnable {
+        private final String name;
+        private volatile boolean running;
+        private final BlockingQueue<Event> eventsQueue;
+        private final ExecutorService executor;
+        private volatile Future<?> dispatchFuture;
+
+        /**
+         * Constructor that accepts a loop name
+         * @param name name of this loop
+         */
+        Loop(String name){
+            this.name = name;
+            executor = Executors.newSingleThreadExecutor();
+            eventsQueue = new LinkedBlockingQueue<>();
+            dispatchFuture = executor.submit(this);
+        }
+
+        /**
+         * Add new event to this loop
+         * @param evt Event
+         * @return true
+         */
+        public boolean add(Event evt) {
+            return eventsQueue.add(evt);
+        }
+
+        /**
+         * Running loop that process event accordingly
+         */
+        @Override
+        public void run(){
+            running = true;
+            log.info("NetworkPolicyMonitor -- {} initiated", this.name);
+            while (running){
+                try{
+                    Event event = eventsQueue.take();
+                    if (event == KILL_PILL){
+                        break;
+                    }
+                    process(event);
+                } catch (InterruptedException e){
+                    log.warn("Process loop interrupted");
+                } catch (Exception | Error e){
+                    log.warn("Process loop hit an error {}", e.getMessage());
+                }
+            }
+        }
+
+        /**
+         * Operation defined by subclass for different event processing
+         * @param event incoming event
+         */
+        abstract public void process(Event event);
+
+        /**
+         * Stop this loop
+         */
+        public void stop(){
+            running = false;
+            add(KILL_PILL);
+        }
+    }
+}
diff --git a/components/slice-analysis-ms/src/main/java/org/onap/slice/analysis/ms/service/ccvpn/StrategyFactory.java b/components/slice-analysis-ms/src/main/java/org/onap/slice/analysis/ms/service/ccvpn/StrategyFactory.java
index 824731f..2feba83 100644
--- a/components/slice-analysis-ms/src/main/java/org/onap/slice/analysis/ms/service/ccvpn/StrategyFactory.java
+++ b/components/slice-analysis-ms/src/main/java/org/onap/slice/analysis/ms/service/ccvpn/StrategyFactory.java
@@ -35,7 +35,7 @@
     private static Logger log = LoggerFactory.getLogger(StrategyFactory.class);
 
     @Autowired
-    List<EvaluationStrategy> strategies;
+    public List<EvaluationStrategy> strategies;
 
     private StrategyFactory() {}
 
diff --git a/components/slice-analysis-ms/src/main/resources/logback.xml b/components/slice-analysis-ms/src/main/resources/logback.xml
index d727d05..134c25d 100644
--- a/components/slice-analysis-ms/src/main/resources/logback.xml
+++ b/components/slice-analysis-ms/src/main/resources/logback.xml
@@ -7,6 +7,7 @@
  *   Copyright (C) 2020 Wipro Limited.
  *   Copyright (C) 2022 Huawei Canada Limited.
  *   Copyright (C) 2022 CTC, Inc.
+ *   Copyright (C) 2022 Huawei Technologies Co., Ltd.
  *   ==============================================================================
  *     Licensed under the Apache License, Version 2.0 (the "License");
  *     you may not use this file except in compliance with the License.
@@ -33,7 +34,7 @@
         </layout>
     </appender>
 
-    <root level="debug">
+    <root level="info">
         <appender-ref ref="CONSOLE"/>
     </root>
 
diff --git a/components/slice-analysis-ms/src/test/java/org/onap/slice/analysis/ms/dmaap/AaiEventNotificationCallbackTest.java b/components/slice-analysis-ms/src/test/java/org/onap/slice/analysis/ms/dmaap/AaiEventNotificationCallbackTest.java
index 1674519..9fce12f 100644
--- a/components/slice-analysis-ms/src/test/java/org/onap/slice/analysis/ms/dmaap/AaiEventNotificationCallbackTest.java
+++ b/components/slice-analysis-ms/src/test/java/org/onap/slice/analysis/ms/dmaap/AaiEventNotificationCallbackTest.java
@@ -4,6 +4,7 @@
  *  ================================================================================
  *  Copyright (C) 2022 Huawei Canada Limited.
  *  Copyright (C) 2022 CTC, Inc.
+ *  Copyright (C) 2022 Huawei Technologies Co., Ltd.
  *  ==============================================================================
  *     Licensed under the Apache License, Version 2.0 (the "License");
  *     you may not use this file except in compliance with the License.
@@ -83,7 +84,8 @@
         jsonObject.addProperty("sliceanalysisms.vesNotifChangeType", "1");
         jsonObject.addProperty("sliceanalysisms.vesNotifPollingInterval", "1");
         jsonObject.addProperty("sliceanalysisms.ccvpnEvalInterval", "1");
-        jsonObject.addProperty("sliceanalysisms.ccvpnEvalThreshold", "1");
+        jsonObject.addProperty("sliceanalysisms.ccvpnEvalUpperThreshold", "1");
+        jsonObject.addProperty("sliceanalysisms.ccvpnEvalLowerThreshold", "1");
         jsonObject.addProperty("sliceanalysisms.ccvpnEvalPrecision", "1");
         jsonObject.addProperty("sliceanalysisms.ccvpnEvalPeriodicCheckOn", "1");
         jsonObject.addProperty("sliceanalysisms.ccvpnEvalOnDemandCheckOn", "1");
diff --git a/components/slice-analysis-ms/src/test/java/org/onap/slice/analysis/ms/dmaap/VesNotificationCallbackTest.java b/components/slice-analysis-ms/src/test/java/org/onap/slice/analysis/ms/dmaap/VesNotificationCallbackTest.java
index 74f75a8..97ee9fa 100644
--- a/components/slice-analysis-ms/src/test/java/org/onap/slice/analysis/ms/dmaap/VesNotificationCallbackTest.java
+++ b/components/slice-analysis-ms/src/test/java/org/onap/slice/analysis/ms/dmaap/VesNotificationCallbackTest.java
@@ -4,6 +4,7 @@
  *  ================================================================================
  *   Copyright (C) 2020 Wipro Limited.
  *   Copyright (C) 2022 Huawei Canada Limited.
+ *   Copyright (C) 2022 Huawei Technologies Co., Ltd.
  *   ==============================================================================
  *     Licensed under the Apache License, Version 2.0 (the "License");
  *     you may not use this file except in compliance with the License.
@@ -22,12 +23,20 @@
 package org.onap.slice.analysis.ms.dmaap;
 
 import com.fasterxml.jackson.databind.ObjectMapper;
+import java.util.HashSet;
+import java.util.Set;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.mockito.InjectMocks;
+import org.mockito.Mock;
 import org.mockito.Mockito;
 import org.mockito.Spy;
+import org.onap.slice.analysis.ms.aai.AaiService;
+import org.onap.slice.analysis.ms.service.ccvpn.CCVPNPmDatastore;
+import org.powermock.api.mockito.PowerMockito;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.boot.test.mock.mockito.MockBean;
 import org.springframework.test.context.junit4.SpringRunner;
 
 import java.io.IOException;
@@ -39,6 +48,12 @@
 public class VesNotificationCallbackTest {
     ObjectMapper obj = new ObjectMapper();
 
+    @Mock
+    AaiService aaiService;
+
+    @Mock
+    CCVPNPmDatastore ccvpnPmDatastore;
+
     @Spy
     @InjectMocks
     VesNotificationCallback vesNotificationCallback;
@@ -57,6 +72,11 @@
         } catch (IOException e) {
             e.printStackTrace();
         }
+        Set<String> cllInstances = new HashSet<>();
+        cllInstances.add("cll-01");
+        cllInstances.add("cll-02");
+        Mockito.when(aaiService.fetchAllCllInstances()).thenReturn(cllInstances);
+        Mockito.doNothing().when(ccvpnPmDatastore).updateCllInstances(Mockito.any());
         vesNotificationCallback.activateCallBack(input);
         Mockito.verify(vesNotificationCallback, Mockito.atLeastOnce()).activateCallBack(Mockito.anyString());
     }
diff --git a/components/slice-analysis-ms/src/test/java/org/onap/slice/analysis/ms/models/ConfigurationTest.java b/components/slice-analysis-ms/src/test/java/org/onap/slice/analysis/ms/models/ConfigurationTest.java
index 3d9b58d..7837909 100644
--- a/components/slice-analysis-ms/src/test/java/org/onap/slice/analysis/ms/models/ConfigurationTest.java
+++ b/components/slice-analysis-ms/src/test/java/org/onap/slice/analysis/ms/models/ConfigurationTest.java
@@ -4,6 +4,7 @@
  *  ================================================================================
  *   Copyright (C) 2020-2021 Wipro Limited.
  *   Copyright (C) 2022 Huawei Canada Limited.
+ *   Copyright (C) 2022 Huawei Technologies Co., Ltd.
  *   ==============================================================================
  *     Licensed under the Apache License, Version 2.0 (the "License");
  *     you may not use this file except in compliance with the License.
@@ -58,7 +59,9 @@
         configuration.setVesNotifChangeType("BandwidthChanged");
         configuration.setCcvpnEvalInterval(5);
         configuration.setCcvpnEvalPrecision(100);
-        configuration.setCcvpnEvalThreshold(0.8);
+        configuration.setCcvpnEvalUpperThreshold(0.8);
+        configuration.setCcvpnEvalLowerThreshold(0.3);
+        configuration.setCcvpnEvalStrategy("FlexibleThresholdStrategy");
         assertEquals(true,configuration.isSecured());
         assertEquals("user", configuration.getAafUsername());
         assertEquals("password", configuration.getAafPassword());
@@ -85,6 +88,8 @@
         assertEquals("BandwidthChanged", configuration.getVesNotifChangeType());
         assertEquals(5, configuration.getCcvpnEvalInterval());
         assertEquals(100.0, configuration.getCcvpnEvalPrecision(), 0.001);
-        assertEquals(0.8, configuration.getCcvpnEvalThreshold(), 0.001);
+        assertEquals(0.8, configuration.getCcvpnEvalUpperThreshold(), 0.001);
+        assertEquals(0.3, configuration.getCcvpnEvalLowerThreshold(), 0.001);
+        assertEquals("FlexibleThresholdStrategy", configuration.getCcvpnEvalStrategy());
     }
 }
diff --git a/components/slice-analysis-ms/src/test/java/org/onap/slice/analysis/ms/service/ccvpn/CCVPNPmDatastoreTest.java b/components/slice-analysis-ms/src/test/java/org/onap/slice/analysis/ms/service/ccvpn/CCVPNPmDatastoreTest.java
index 673ec6a..8b0b99f 100644
--- a/components/slice-analysis-ms/src/test/java/org/onap/slice/analysis/ms/service/ccvpn/CCVPNPmDatastoreTest.java
+++ b/components/slice-analysis-ms/src/test/java/org/onap/slice/analysis/ms/service/ccvpn/CCVPNPmDatastoreTest.java
@@ -3,6 +3,7 @@
  *  slice-analysis-ms
  *  ================================================================================
  *   Copyright (C) 2022 Huawei Canada Limited.
+ *   Copyright (C) 2022 Huawei Technologies Co., Ltd.
  *   ==============================================================================
  *     Licensed under the Apache License, Version 2.0 (the "License");
  *     you may not use this file except in compliance with the License.
@@ -21,6 +22,8 @@
 
 package org.onap.slice.analysis.ms.service.ccvpn;
 
+import java.util.HashSet;
+import java.util.Set;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.mockito.InjectMocks;
@@ -119,4 +122,28 @@
                 .mapToInt(o -> (int)o)
                 .sum() == 300602 );
     }
+
+    @Test
+    public void updateCllInstancesTest() {
+        datastore.addUsedBwToEndpoint("cll-01", "uni-n1", "300Mb");
+        datastore.updateUpperBoundBw("cll-01", 300);
+        datastore.updateProvBw("cll-01", "300");
+        datastore.updateSvcState("cll-01", ServiceState.RUNNING);
+        datastore.updateOriginalBw("cll-01", 1000);
+        datastore.updateClosedloopStatus("cll-01", true);
+        datastore.addUsedBwToEndpoint("cll-02", "uni-n2", "300Mb");
+        datastore.updateUpperBoundBw("cll-02", 300);
+        datastore.updateProvBw("cll-02", "300");
+        datastore.updateSvcState("cll-02", ServiceState.RUNNING);
+        datastore.updateOriginalBw("cll-02", 1000);
+        datastore.updateClosedloopStatus("cll-02", true);
+        Set<String> cllId = new HashSet<>();
+        cllId.add("cll-01");
+        datastore.updateCllInstances(cllId);
+        assertEquals(datastore.getEndpointToUsedBw().keySet().size(), 1);
+        assertEquals(datastore.getUpperBoundBw().keySet().equals(cllId), true);
+        assertEquals(datastore.getEndpointToProvBw().keySet().equals(cllId), true);
+        assertEquals(datastore.getSvcStatus().keySet().equals(cllId), true);
+        assertEquals(datastore.getEndpointToOriginalBw().keySet().equals(cllId), true);
+    }
 }
diff --git a/components/slice-analysis-ms/src/test/java/org/onap/slice/analysis/ms/service/ccvpn/FlexibleThresholdStrategyTest.java b/components/slice-analysis-ms/src/test/java/org/onap/slice/analysis/ms/service/ccvpn/FlexibleThresholdStrategyTest.java
new file mode 100644
index 0000000..4002892
--- /dev/null
+++ b/components/slice-analysis-ms/src/test/java/org/onap/slice/analysis/ms/service/ccvpn/FlexibleThresholdStrategyTest.java
@@ -0,0 +1,69 @@
+/*******************************************************************************

+ *  ============LICENSE_START=======================================================

+ *  slice-analysis-ms

+ *  ================================================================================

+ *   Copyright (C) 2022 Huawei Technologies Co., Ltd.

+ *  ==============================================================================

+ *     Licensed under the Apache License, Version 2.0 (the "License");

+ *     you may not use this file except in compliance with the License.

+ *     You may obtain a copy of the License at

+ *

+ *          http://www.apache.org/licenses/LICENSE-2.0

+ *

+ *     Unless required by applicable law or agreed to in writing, software

+ *     distributed under the License is distributed on an "AS IS" BASIS,

+ *     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

+ *     See the License for the specific language governing permissions and

+ *     limitations under the License.

+ *     ============LICENSE_END=========================================================

+ *

+ *******************************************************************************/

+package org.onap.slice.analysis.ms.service.ccvpn;

+

+import org.junit.Before;

+import org.junit.Test;

+import org.junit.runner.RunWith;

+import org.mockito.InjectMocks;

+import org.mockito.Mockito;

+import org.mockito.MockitoAnnotations;

+import org.mockito.Spy;

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

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

+

+@RunWith(SpringRunner.class)

+@SpringBootTest(classes = FixedUpperBoundStrategyTest.class)

+public class FlexibleThresholdStrategyTest {

+

+    @Spy

+    @InjectMocks

+    BandwidthEvaluator bandwidthEvaluator;

+

+    @Spy

+    @InjectMocks

+    FlexibleThresholdStrategy flexibleThresholdStrategy;

+

+    @Before

+    public void setUp() throws Exception {

+        MockitoAnnotations.initMocks(this);

+    }

+

+    @Test

+    public void initTest() {

+        flexibleThresholdStrategy.init();

+        Mockito.verify(flexibleThresholdStrategy, Mockito.atLeastOnce()).init();

+    }

+

+    @Test

+    public void executeTest() {

+        Event evt = new SimpleEvent(null, "{}");

+        flexibleThresholdStrategy.execute(evt);

+        Mockito.verify(flexibleThresholdStrategy, Mockito.atLeastOnce())

+            .execute(Mockito.any(Event.class));

+    }

+

+    @Test

+    public void getNameTest() {

+        flexibleThresholdStrategy.getName();

+        Mockito.verify(flexibleThresholdStrategy, Mockito.atLeastOnce()).getName();

+    }

+}

diff --git a/components/slice-analysis-ms/src/test/java/org/onap/slice/analysis/ms/service/ccvpn/NetworkPolicyMonitorTest.java b/components/slice-analysis-ms/src/test/java/org/onap/slice/analysis/ms/service/ccvpn/NetworkPolicyMonitorTest.java
new file mode 100644
index 0000000..23366ab
--- /dev/null
+++ b/components/slice-analysis-ms/src/test/java/org/onap/slice/analysis/ms/service/ccvpn/NetworkPolicyMonitorTest.java
@@ -0,0 +1,51 @@
+/*******************************************************************************
+ *  ============LICENSE_START=======================================================
+ *  slice-analysis-ms
+ *  ================================================================================
+ *   Copyright (C) 2022 Huawei Canada Limited.
+ *   ==============================================================================
+ *     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.slice.analysis.ms.service.ccvpn;
+
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.InjectMocks;
+import org.mockito.Mockito;
+import org.mockito.Spy;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.test.context.junit4.SpringRunner;
+
+@RunWith(SpringRunner.class)
+@SpringBootTest(classes = BandwidthEvaluatorTest.class)
+public class NetworkPolicyMonitorTest {
+
+    @Spy
+    @InjectMocks
+    NetworkPolicyMonitor NetworkPolicyMonitor;
+    @Test
+    public void initTest() {
+        NetworkPolicyMonitor.init();
+        Mockito.verify(NetworkPolicyMonitor, Mockito.atLeastOnce()).init();
+    }
+
+    @Test
+    public void postTest() {
+        Event evt = new SimpleEvent(null, "{}");
+        NetworkPolicyMonitor.post(evt);
+        Mockito.verify(NetworkPolicyMonitor, Mockito.atLeastOnce()).post(Mockito.any(Event.class));
+    }
+}
diff --git a/components/slice-analysis-ms/src/test/resources/config_all.json b/components/slice-analysis-ms/src/test/resources/config_all.json
index f37e438..fc18cc1 100644
--- a/components/slice-analysis-ms/src/test/resources/config_all.json
+++ b/components/slice-analysis-ms/src/test/resources/config_all.json
@@ -106,7 +106,8 @@
     "sliceanalysisms.aaiNotif.targetSource" : "UUI",
     "sliceanalysisms.aaiNotif.targetEntity" : "service-instance",
     "sliceanalysisms.ccvpnEvalInterval": 5,
-    "sliceanalysisms.ccvpnEvalThreshold": 0.8,
+    "sliceanalysisms.ccvpnEvalUpperThreshold": 0.8,
+    "sliceanalysisms.ccvpnEvalLowerThreshold": 0.3,
     "sliceanalysisms.ccvpnEvalPrecision": 100.0,
     "sliceanalysisms.ccvpnEvalPeriodicCheckOn": true,
     "sliceanalysisms.ccvpnEvalOnDemandCheckOn": true,
diff --git a/releases/slice-analysis-ms-1.1.5-container.yaml b/releases/slice-analysis-ms-1.1.5-container.yaml
new file mode 100644
index 0000000..2e05a02
--- /dev/null
+++ b/releases/slice-analysis-ms-1.1.5-container.yaml
@@ -0,0 +1,10 @@
+distribution_type: 'container'
+version: '1.1.5'
+project: 'dcaegen2-services-slice-analysis-ms'
+log_dir: 'dcaegen2-services-slice-analysis-ms-maven-docker-stage-master/794'
+containers:
+  - name: 'org.onap.dcaegen2.services.components.slice-analysis-ms'
+    version: '1.1.5-20220927T221042Z'
+container_release_tag: '1.1.5'
+ref: '63d6a20970b8b37506141a2529fe5f3e8deaa3a1'
+git_tag: '1.1.5-slice-analysis-ms'