From 1b07199934d180870536d80f5308458f7aa13587 Mon Sep 17 00:00:00 2001 From: "Riabokon Stanislav(EPAM)" <stanislav_riabokon@epam.com> Date: Wed, 2 Sep 2020 19:57:42 -0400 Subject: [PATCH] https://jiraeu.epam.com/browse/GONRG-539 Moved credentials classes into core-lib-gcp. --- provider/legal-gcp/pom.xml | 2 +- .../di/DatastoreCredentialsCacheFactory.java | 23 ++++++ .../LegalTagRepositoryFactoryGcpImpl.java | 71 +++++++++-------- .../tags/LegalTagRepositoryFactoryTest.java | 78 ++++++++++++------- 4 files changed, 111 insertions(+), 63 deletions(-) create mode 100644 provider/legal-gcp/src/main/java/org/opengroup/osdu/legal/di/DatastoreCredentialsCacheFactory.java diff --git a/provider/legal-gcp/pom.xml b/provider/legal-gcp/pom.xml index e69077e0b..05a0b9e36 100644 --- a/provider/legal-gcp/pom.xml +++ b/provider/legal-gcp/pom.xml @@ -52,7 +52,7 @@ <dependency> <groupId>org.opengroup.osdu</groupId> <artifactId>core-lib-gcp</artifactId> - <version>0.1.21</version> + <version>0.3.21</version> </dependency> <dependency> <groupId>javax.servlet</groupId> diff --git a/provider/legal-gcp/src/main/java/org/opengroup/osdu/legal/di/DatastoreCredentialsCacheFactory.java b/provider/legal-gcp/src/main/java/org/opengroup/osdu/legal/di/DatastoreCredentialsCacheFactory.java new file mode 100644 index 000000000..ef979fbdb --- /dev/null +++ b/provider/legal-gcp/src/main/java/org/opengroup/osdu/legal/di/DatastoreCredentialsCacheFactory.java @@ -0,0 +1,23 @@ +package org.opengroup.osdu.legal.di; + +import org.opengroup.osdu.core.common.cache.ICache; +import org.opengroup.osdu.core.common.cache.VmCache; +import org.opengroup.osdu.core.gcp.multitenancy.credentials.DatastoreCredential; +import org.springframework.beans.factory.config.AbstractFactoryBean; +import org.springframework.stereotype.Component; + +@Component +public class DatastoreCredentialsCacheFactory extends + AbstractFactoryBean<ICache<String, DatastoreCredential>> { + + @Override + public Class<?> getObjectType() { + return ICache.class; + } + + @Override + protected ICache<String, DatastoreCredential> createInstance() throws Exception { + return new VmCache<>(5 * 60, 20); + } +} + diff --git a/provider/legal-gcp/src/main/java/org/opengroup/osdu/legal/tags/LegalTagRepositoryFactoryGcpImpl.java b/provider/legal-gcp/src/main/java/org/opengroup/osdu/legal/tags/LegalTagRepositoryFactoryGcpImpl.java index b13ff2b09..716998773 100644 --- a/provider/legal-gcp/src/main/java/org/opengroup/osdu/legal/tags/LegalTagRepositoryFactoryGcpImpl.java +++ b/provider/legal-gcp/src/main/java/org/opengroup/osdu/legal/tags/LegalTagRepositoryFactoryGcpImpl.java @@ -1,16 +1,15 @@ package org.opengroup.osdu.legal.tags; +import com.google.cloud.datastore.Datastore; import java.util.HashMap; import java.util.Map; - -import com.google.cloud.datastore.Datastore; - +import java.util.Objects; import org.apache.commons.lang3.StringUtils; -import org.opengroup.osdu.core.common.model.http.DpsHeaders; import org.opengroup.osdu.core.common.model.http.AppException; -import org.opengroup.osdu.core.gcp.multitenancy.DatastoreFactory; +import org.opengroup.osdu.core.common.model.http.DpsHeaders; +import org.opengroup.osdu.core.common.model.tenant.TenantInfo; +import org.opengroup.osdu.core.common.provider.interfaces.ITenantFactory; import org.opengroup.osdu.core.gcp.multitenancy.IDatastoreFactory; -import org.opengroup.osdu.core.gcp.multitenancy.TenantFactory; import org.opengroup.osdu.legal.provider.interfaces.ILegalTagRepository; import org.opengroup.osdu.legal.provider.interfaces.ILegalTagRepositoryFactory; import org.opengroup.osdu.legal.tags.dataaccess.DatastoreLegalTagRepository; @@ -22,37 +21,43 @@ import org.springframework.stereotype.Service; @Primary public class LegalTagRepositoryFactoryGcpImpl implements ILegalTagRepositoryFactory { - private final IDatastoreFactory factory; - private final Map<String, ILegalTagRepository> tenantRepositories = new HashMap<>(); + private final Map<String, ILegalTagRepository> tenantRepositories = new HashMap<>(); - public LegalTagRepositoryFactoryGcpImpl(){ - this(new DatastoreFactory(new TenantFactory())); - } + private TenantInfo tenantInfo; + private IDatastoreFactory factory; + private ITenantFactory tenantFactory; - LegalTagRepositoryFactoryGcpImpl(IDatastoreFactory factory){ - this.factory = factory; - } + public LegalTagRepositoryFactoryGcpImpl(TenantInfo tenantInfo, IDatastoreFactory factory, + ITenantFactory tenantFactory) { + this.tenantInfo = tenantInfo; + this.factory = factory; + this.tenantFactory = tenantFactory; + } - @Override - public ILegalTagRepository get(String tenantName){ - if(StringUtils.isBlank(tenantName)) - throw invalidTenantGivenException(tenantName); - if(!tenantRepositories.containsKey(tenantName)){ - addRepository(tenantName); - } - return tenantRepositories.get(tenantName); + @Override + public ILegalTagRepository get(String tenantName) { + if (StringUtils.isBlank(tenantName)) { + throw invalidTenantGivenException(tenantName); } - - private void addRepository(String tenantName) { - Datastore ds = factory.getDatastore(tenantName, tenantName); - if(ds == null) - throw invalidTenantGivenException(tenantName); - ILegalTagRepository repo = new ResilientLegalTagRepository(new DatastoreLegalTagRepository(ds)); - tenantRepositories.put(tenantName, repo); + if (!tenantRepositories.containsKey(tenantName)) { + addRepository(tenantName); } - - AppException invalidTenantGivenException(String tenantName){ - return new AppException(403, "Forbidden", String.format("You do not have access to the %s value given %s", - DpsHeaders.ACCOUNT_ID, tenantName)); + return tenantRepositories.get(tenantName); + } + + private void addRepository(String tenantName) { + TenantInfo tenantInfo = tenantFactory.getTenantInfo(tenantName); + Datastore ds = factory.getDatastore(tenantInfo); + if (Objects.isNull(ds)) { + throw invalidTenantGivenException(tenantName); } + ILegalTagRepository repo = new ResilientLegalTagRepository(new DatastoreLegalTagRepository(ds)); + tenantRepositories.put(tenantName, repo); + } + + AppException invalidTenantGivenException(String tenantName) { + return new AppException(403, "Forbidden", + String.format("You do not have access to the %s value given %s", + DpsHeaders.ACCOUNT_ID, tenantName)); + } } diff --git a/provider/legal-gcp/src/test/java/org/opengroup/osdu/legal/tags/LegalTagRepositoryFactoryTest.java b/provider/legal-gcp/src/test/java/org/opengroup/osdu/legal/tags/LegalTagRepositoryFactoryTest.java index f944636df..e330b00a5 100644 --- a/provider/legal-gcp/src/test/java/org/opengroup/osdu/legal/tags/LegalTagRepositoryFactoryTest.java +++ b/provider/legal-gcp/src/test/java/org/opengroup/osdu/legal/tags/LegalTagRepositoryFactoryTest.java @@ -7,48 +7,68 @@ import static org.mockito.Mockito.verify; import static org.powermock.api.mockito.PowerMockito.when; import com.google.cloud.datastore.Datastore; - +import org.junit.Before; import org.junit.Test; -import org.opengroup.osdu.core.gcp.multitenancy.DatastoreFactory; import org.opengroup.osdu.core.common.model.http.AppException; +import org.opengroup.osdu.core.common.model.tenant.TenantInfo; +import org.opengroup.osdu.core.common.provider.interfaces.ITenantFactory; +import org.opengroup.osdu.core.gcp.multitenancy.DatastoreFactory; import org.opengroup.osdu.legal.provider.interfaces.ILegalTagRepository; import org.opengroup.osdu.legal.provider.interfaces.ILegalTagRepositoryFactory; public class LegalTagRepositoryFactoryTest { - private static final String TENANT_1 = "tenant1"; + private static final String TENANT_1 = "tenant1"; + private DatastoreFactory factory; + private ITenantFactory tenantFactory; - @Test(expected = AppException.class) - public void should_throwAppException_when_givenBlankName(){ - DatastoreFactory factory = mock(DatastoreFactory.class); - ILegalTagRepositoryFactory sut = new LegalTagRepositoryFactoryGcpImpl(factory); - sut.get(""); - } + @Before + public void init() { + factory = mock(DatastoreFactory.class); + tenantFactory = mock(ITenantFactory.class); + } - @Test(expected = AppException.class) - public void should_throwAppException_when_tenantDoesNotExist(){ - DatastoreFactory factory = mock(DatastoreFactory.class); - when(factory.getDatastore(TENANT_1, TENANT_1)).thenReturn(null); + @Test(expected = AppException.class) + public void should_throwAppException_when_givenBlankName() { + TenantInfo tenantInfo = new TenantInfo(); + tenantInfo.setName(TENANT_1); + when(factory.getDatastore(tenantInfo)).thenReturn(null); + when(tenantFactory.getTenantInfo(TENANT_1)).thenReturn(null); + ILegalTagRepositoryFactory sut = new LegalTagRepositoryFactoryGcpImpl(tenantInfo, factory, + tenantFactory); + sut.get(""); + } - ILegalTagRepositoryFactory sut = new LegalTagRepositoryFactoryGcpImpl(factory); - sut.get(TENANT_1); - } + @Test(expected = AppException.class) + public void should_throwAppException_when_tenantDoesNotExist() { + TenantInfo tenantInfo = new TenantInfo(); + tenantInfo.setName(TENANT_1); + when(factory.getDatastore(tenantInfo)).thenReturn(null); + when(tenantFactory.getTenantInfo(TENANT_1)).thenReturn(null); - @Test - public void should_returnExistingRepo_when_requestingTenantThatHasPreviouslyBeenRequested(){ - Datastore ds = mock(Datastore.class); - DatastoreFactory factory = mock(DatastoreFactory.class); - when(factory.getDatastore(TENANT_1, TENANT_1)).thenReturn(ds); + ILegalTagRepositoryFactory sut = new LegalTagRepositoryFactoryGcpImpl(tenantInfo, factory, + tenantFactory); + sut.get(TENANT_1); + } - ILegalTagRepositoryFactory sut = new LegalTagRepositoryFactoryGcpImpl(factory); - ILegalTagRepository result = sut.get(TENANT_1); - assertNotNull(result); - verify(factory, times(1)).getDatastore(TENANT_1, TENANT_1); + @Test + public void should_returnExistingRepo_when_requestingTenantThatHasPreviouslyBeenRequested() { + Datastore ds = mock(Datastore.class); + DatastoreFactory factory = mock(DatastoreFactory.class); + TenantInfo tenantInfo = new TenantInfo(); + tenantInfo.setName(TENANT_1); + when(factory.getDatastore(tenantInfo)).thenReturn(ds); + when(tenantFactory.getTenantInfo(TENANT_1)).thenReturn(tenantInfo); + ILegalTagRepositoryFactory sut = new LegalTagRepositoryFactoryGcpImpl(tenantInfo, factory, + tenantFactory); + ILegalTagRepository result = sut.get(TENANT_1); + assertNotNull(result); + verify(factory, times(1)).getDatastore(tenantInfo); - result = sut.get(TENANT_1); - assertNotNull(result); - verify(factory, times(1)).getDatastore(TENANT_1, TENANT_1); + result = sut.get(TENANT_1); + assertNotNull(result); + verify(factory, times(1)).getDatastore(tenantInfo); - } + } } -- GitLab