diff --git a/pom.xml b/pom.xml
index b2254166..b7d89ab9 100755
--- a/pom.xml
+++ b/pom.xml
@@ -97,6 +97,50 @@
11
+
+
+ org.jacoco
+ jacoco-maven-plugin
+ 0.8.4
+
+
+ pre-test
+
+ prepare-agent
+
+
+ surefireArgLine
+
+
+
+ post-unit-test
+ test
+
+ report
+
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-surefire-plugin
+ 3.0.0-M7
+
+
+ @{surefireArgLine}
+ 1
+
+
+
+ default-test
+ test
+
+ test
+
+
+
+
@@ -131,6 +175,34 @@
log4j-1.2-api
${log4j2.version}
+
+ org.junit.jupiter
+ junit-jupiter-engine
+ ${jupiter.version}
+ test
+
+
+ org.mockito
+ mockito-core
+ ${mockito.version}
+ test
+
+
+ org.springframework.boot
+ spring-boot-starter-test
+ ${spring.boot.data.jpa}
+ test
+
+
+ org.junit.vintage
+ junit-vintage-engine
+
+
+ org.apache.logging.log4j
+ log4j-to-slf4j
+
+
+
@@ -151,6 +223,8 @@
2.5.0
2.6
4.5.13
+ 5.8.1
+ 4.6.1
diff --git a/services/resource-service/server/pom.xml b/services/resource-service/server/pom.xml
index 24f2ab6c..4d81b160 100644
--- a/services/resource-service/server/pom.xml
+++ b/services/resource-service/server/pom.xml
@@ -59,6 +59,12 @@
grpc-services
1.25.0
+
+ io.grpc
+ grpc-testing
+ 1.25.0
+ test
+
org.springframework.boot
spring-boot-starter-data-jpa
diff --git a/services/resource-service/server/src/test/java/org.apache.airavata.mft.resource.server.handler/S3ServiceHandlerTest.java b/services/resource-service/server/src/test/java/org.apache.airavata.mft.resource.server.handler/S3ServiceHandlerTest.java
new file mode 100644
index 00000000..280f46cd
--- /dev/null
+++ b/services/resource-service/server/src/test/java/org.apache.airavata.mft.resource.server.handler/S3ServiceHandlerTest.java
@@ -0,0 +1,84 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.airavata.mft.resource.server.handler;
+
+
+import io.grpc.internal.testing.StreamRecorder;
+import org.apache.airavata.mft.resource.server.backend.ResourceBackend;
+import org.apache.airavata.mft.resource.stubs.s3.storage.S3Storage;
+import org.apache.airavata.mft.resource.stubs.s3.storage.S3StorageListRequest;
+import org.apache.airavata.mft.resource.stubs.s3.storage.S3StorageListResponse;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+import org.junit.runner.RunWith;
+import org.mockito.InjectMocks;
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
+import org.mockito.junit.MockitoJUnitRunner;
+
+import java.util.List;
+import java.util.concurrent.TimeUnit;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.fail;
+import static org.mockito.Mockito.when;
+
+@RunWith( MockitoJUnitRunner.class )
+class S3ServiceHandlerTest
+{
+
+ @InjectMocks
+ private S3ServiceHandler s3ServiceHandler;
+
+ @Mock
+ private ResourceBackend backend;
+
+
+ @BeforeEach
+ void setUp()
+ {
+ s3ServiceHandler = new S3ServiceHandler();
+ MockitoAnnotations.openMocks( this );
+ }
+
+ @Test
+ void listS3Storage() throws Exception
+ {
+
+ S3StorageListRequest request1 = S3StorageListRequest.newBuilder().setOffset( 0 ).setLimit( 10 ).build();
+ when( backend.listS3Storage( request1 ) ).thenReturn( S3StorageListResponse.newBuilder().addStorages( 0,
+ S3Storage.newBuilder().setStorageId( "1" ).setBucketName( "testBkt" ).setName( "testJCV" )
+ .setRegion( "usa-east" ) ).build() );
+
+ S3StorageListRequest request = S3StorageListRequest.newBuilder().setOffset( 0 ).setLimit( 10 ).build();
+ StreamRecorder responseOb = StreamRecorder.create();
+ s3ServiceHandler.listS3Storage( request, responseOb );
+ if ( !responseOb.awaitCompletion( 5, TimeUnit.SECONDS ) )
+ {
+ System.out.println( "Time out !" );
+ fail();
+ }
+ List results = responseOb.getValues();
+ assertEquals( 1, results.size() );
+ S3StorageListResponse response = results.get( 0 );
+ assertEquals( S3StorageListResponse.newBuilder().addStorages( 0,
+ S3Storage.newBuilder().setStorageId( "1" ).setBucketName( "testBkt" ).setName( "testJCV" )
+ .setRegion( "usa-east" ) ).build(), response );
+ }
+
+}
\ No newline at end of file
diff --git a/services/resource-service/server/src/test/java/org/apache/airavata/mft/resource/server/backend/sql/SQLResourceBackendTest.java b/services/resource-service/server/src/test/java/org/apache/airavata/mft/resource/server/backend/sql/SQLResourceBackendTest.java
new file mode 100644
index 00000000..51a916ae
--- /dev/null
+++ b/services/resource-service/server/src/test/java/org/apache/airavata/mft/resource/server/backend/sql/SQLResourceBackendTest.java
@@ -0,0 +1,75 @@
+package org.apache.airavata.mft.resource.server.backend.sql;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Optional;
+
+import org.apache.airavata.mft.resource.server.backend.sql.entity.S3StorageEntity;
+import org.apache.airavata.mft.resource.server.backend.sql.repository.S3StorageRepository;
+import org.apache.airavata.mft.resource.stubs.s3.storage.S3Storage;
+import org.apache.airavata.mft.resource.stubs.s3.storage.S3StorageGetRequest;
+import org.apache.airavata.mft.resource.stubs.s3.storage.S3StorageListRequest;
+import org.apache.airavata.mft.resource.stubs.s3.storage.S3StorageListResponse;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.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.springframework.data.domain.PageRequest;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+import static org.mockito.Mockito.when;
+
+@RunWith( MockitoJUnitRunner.class )
+class SQLResourceBackendTest
+{
+ @InjectMocks
+ private SQLResourceBackend sqlResourceBackend;
+ @Mock
+ private S3StorageRepository s3StorageRepository;
+
+ @BeforeEach
+ void setUp()
+ {
+ MockitoAnnotations.openMocks( this );
+ }
+
+ @Test
+ void listS3Storage() throws Exception
+ {
+ List storageList = new ArrayList<>();
+ S3StorageEntity storage = new S3StorageEntity();
+ storage.setStorageId( String.valueOf( 1 ) );
+ storage.setBucketName( "testBucket" );
+ storage.setName( "Bucket" );
+ storage.setRegion( "usa-east" );
+ storage.setEndpoint( "aws.com" );
+ storage.setUseTLS( true );
+ storageList.add( storage );
+ when( s3StorageRepository.findAll( PageRequest.of( 1, 5 ) ) ).thenReturn( storageList );
+ S3StorageListRequest request = S3StorageListRequest.newBuilder().setLimit( 5 ).setOffset( 1 ).build();
+ S3StorageListResponse response = sqlResourceBackend.listS3Storage( request );
+ assertTrue( response.getStoragesList().size() > 0 );
+ }
+
+ @Test
+ void getS3Storage() throws Exception
+ {
+ S3StorageEntity storage = new S3StorageEntity();
+ storage.setStorageId( String.valueOf( 1 ) );
+ storage.setBucketName( "testBucket" );
+ storage.setName( "Bucket" );
+ storage.setRegion( "usa-east" );
+ storage.setEndpoint( "aws.com" );
+ storage.setUseTLS( true );
+ when( s3StorageRepository.findById( "1" ) ).thenReturn( Optional.of( storage ) );
+ S3StorageGetRequest request = S3StorageGetRequest.newBuilder().setStorageId( "1" ).build();
+ Optional response = sqlResourceBackend.getS3Storage( request );
+ assertTrue( response.isPresent() );
+ assertEquals( "1", ( (S3Storage) response.get() ).getStorageId() );
+ }
+
+}
\ No newline at end of file