diff --git a/appc-adapters/appc-ssh-adapter/appc-ssh-adapter-api/pom.xml b/appc-adapters/appc-ssh-adapter/appc-ssh-adapter-api/pom.xml
index dd65be6..d2f1c94 100644
--- a/appc-adapters/appc-ssh-adapter/appc-ssh-adapter-api/pom.xml
+++ b/appc-adapters/appc-ssh-adapter/appc-ssh-adapter-api/pom.xml
@@ -21,49 +21,55 @@
   ECOMP is a trademark and service mark of AT&T Intellectual Property.
   -->
 <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.appc</groupId>
-		<artifactId>appc-ssh-adapter</artifactId>
-		<version>1.3.0-SNAPSHOT</version>
-	</parent>
-	
-	<artifactId>appc-ssh-adapter-api</artifactId>
-	<packaging>bundle</packaging>
+    <modelVersion>4.0.0</modelVersion>
+    <parent>
+        <groupId>org.onap.appc</groupId>
+        <artifactId>appc-ssh-adapter</artifactId>
+        <version>1.3.0-SNAPSHOT</version>
+    </parent>
+    
+    <artifactId>appc-ssh-adapter-api</artifactId>
+    <packaging>bundle</packaging>
 
-	<dependencies>
-		<dependency>
-			<groupId>org.onap.ccsdk.sli.core</groupId>
-			<artifactId>dblib-provider</artifactId>
-		</dependency>
-	</dependencies>
+    <dependencies>
+        <dependency>
+            <groupId>org.onap.ccsdk.sli.core</groupId>
+            <artifactId>dblib-provider</artifactId>
+        </dependency>
+        <dependency>
+                <groupId>junit</groupId>
+                <artifactId>junit</artifactId>
+                <version>4.12</version>
+                <scope>test</scope>
+        </dependency>
+    </dependencies>
 
-	<build>
-		<plugins>
-			<plugin>
-				<groupId>org.apache.felix</groupId>
-				<artifactId>maven-bundle-plugin</artifactId>
-				<extensions>true</extensions>
-				<configuration>
-					<instructions>
-						<Export-Package>org.onap.appc.adapter.ssh</Export-Package>
-						<Embed-Dependency>!dblib-provider</Embed-Dependency>
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>org.apache.felix</groupId>
+                <artifactId>maven-bundle-plugin</artifactId>
+                <extensions>true</extensions>
+                <configuration>
+                    <instructions>
+                        <Export-Package>org.onap.appc.adapter.ssh</Export-Package>
+                        <Embed-Dependency>!dblib-provider</Embed-Dependency>
                         <Import-Package>!org.slf4j.impl,*;resolution:=optional</Import-Package>
-					</instructions>
-				</configuration>
-			</plugin>
-			<plugin>
-				<groupId>org.apache.maven.plugins</groupId>
-				<artifactId>maven-javadoc-plugin</artifactId>
-				<executions>
-					<execution>
-						<id>attach-javadocs</id>
-						<goals>
-							<goal>jar</goal>
-						</goals>
-					</execution>
-				</executions>
-			</plugin>
-		</plugins>
-	</build>
+                    </instructions>
+                </configuration>
+            </plugin>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-javadoc-plugin</artifactId>
+                <executions>
+                    <execution>
+                        <id>attach-javadocs</id>
+                        <goals>
+                            <goal>jar</goal>
+                        </goals>
+                    </execution>
+                </executions>
+            </plugin>
+        </plugins>
+    </build>
 </project>
diff --git a/appc-adapters/appc-ssh-adapter/appc-ssh-adapter-api/src/test/java/org/onap/appc/adapter/ssh/TestSshConnectionDetails.java b/appc-adapters/appc-ssh-adapter/appc-ssh-adapter-api/src/test/java/org/onap/appc/adapter/ssh/TestSshConnectionDetails.java
new file mode 100644
index 0000000..5906bc1
--- /dev/null
+++ b/appc-adapters/appc-ssh-adapter/appc-ssh-adapter-api/src/test/java/org/onap/appc/adapter/ssh/TestSshConnectionDetails.java
@@ -0,0 +1,62 @@
+/*
+* ============LICENSE_START=======================================================
+* ONAP : APPC
+* ================================================================================
+* Copyright 2018 TechMahindra
+*=================================================================================
+* 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.appc.adapter.ssh;
+
+import static org.junit.Assert.*;
+import org.junit.Before;
+import org.junit.Test;
+
+public class TestSshConnectionDetails {
+
+    private SshConnectionDetails sshConnectionDetails;
+
+    @Before
+    public void setUp() {
+        sshConnectionDetails = new SshConnectionDetails();
+    }
+
+    @Test
+    public void testGetHost() {
+        sshConnectionDetails.setHost("localhost");
+        assertNotNull(sshConnectionDetails.getHost());
+        assertEquals(sshConnectionDetails.getHost(), "localhost");
+    }
+
+    @Test
+    public void testGetPort() {
+        sshConnectionDetails.setPort(8080);
+        assertNotNull(sshConnectionDetails.getPort());
+        assertEquals(sshConnectionDetails.getPort(), 8080);
+    }
+
+    @Test
+    public void testGetUsername() {
+        sshConnectionDetails.setUsername("username");
+        assertNotNull(sshConnectionDetails.getUsername());
+        assertEquals(sshConnectionDetails.getUsername(), "username");
+    }
+
+    @Test
+    public void testGetPassword() {
+        sshConnectionDetails.setPassword("password");
+        assertNotNull(sshConnectionDetails.getPassword());
+        assertEquals(sshConnectionDetails.getPassword(), "password");
+    }
+}
