Skip to content
Snippets Groups Projects
Commit 927fa58f authored by Riabokon Stanislav(EPAM)[GCP]'s avatar Riabokon Stanislav(EPAM)[GCP]
Browse files
Moved credentials classes into core-lib-gcp.
parent 2501cf0a
No related branches found
No related tags found
6 merge requests!68Integration tests for Google Cloud Run (GONRG-1016),!57Wip unique backed name across gcp mykola zamkovyi,!56Readme for gcp (GONRG-838),!51Publish CICD Community for Legal GONRG-636,!50Wip unique backed name across gcp mykola zamkovyi,!42Unify logic for credentials (GONRG-539)
...@@ -52,7 +52,7 @@ ...@@ -52,7 +52,7 @@
<dependency> <dependency>
<groupId>org.opengroup.osdu</groupId> <groupId>org.opengroup.osdu</groupId>
<artifactId>core-lib-gcp</artifactId> <artifactId>core-lib-gcp</artifactId>
<version>0.1.21</version> <version>0.3.21</version>
</dependency> </dependency>
<dependency> <dependency>
<groupId>javax.servlet</groupId> <groupId>javax.servlet</groupId>
......
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);
}
}
package org.opengroup.osdu.legal.tags; package org.opengroup.osdu.legal.tags;
import com.google.cloud.datastore.Datastore;
import java.util.HashMap; import java.util.HashMap;
import java.util.Map; import java.util.Map;
import java.util.Objects;
import com.google.cloud.datastore.Datastore;
import org.apache.commons.lang3.StringUtils; 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.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.IDatastoreFactory;
import org.opengroup.osdu.core.gcp.multitenancy.TenantFactory;
import org.opengroup.osdu.legal.provider.interfaces.ILegalTagRepository; import org.opengroup.osdu.legal.provider.interfaces.ILegalTagRepository;
import org.opengroup.osdu.legal.provider.interfaces.ILegalTagRepositoryFactory; import org.opengroup.osdu.legal.provider.interfaces.ILegalTagRepositoryFactory;
import org.opengroup.osdu.legal.tags.dataaccess.DatastoreLegalTagRepository; import org.opengroup.osdu.legal.tags.dataaccess.DatastoreLegalTagRepository;
...@@ -22,37 +21,43 @@ import org.springframework.stereotype.Service; ...@@ -22,37 +21,43 @@ import org.springframework.stereotype.Service;
@Primary @Primary
public class LegalTagRepositoryFactoryGcpImpl implements ILegalTagRepositoryFactory { 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(){ private TenantInfo tenantInfo;
this(new DatastoreFactory(new TenantFactory())); private IDatastoreFactory factory;
} private ITenantFactory tenantFactory;
LegalTagRepositoryFactoryGcpImpl(IDatastoreFactory factory){ public LegalTagRepositoryFactoryGcpImpl(TenantInfo tenantInfo, IDatastoreFactory factory,
this.factory = factory; ITenantFactory tenantFactory) {
} this.tenantInfo = tenantInfo;
this.factory = factory;
this.tenantFactory = tenantFactory;
}
@Override @Override
public ILegalTagRepository get(String tenantName){ public ILegalTagRepository get(String tenantName) {
if(StringUtils.isBlank(tenantName)) if (StringUtils.isBlank(tenantName)) {
throw invalidTenantGivenException(tenantName); throw invalidTenantGivenException(tenantName);
if(!tenantRepositories.containsKey(tenantName)){
addRepository(tenantName);
}
return tenantRepositories.get(tenantName);
} }
if (!tenantRepositories.containsKey(tenantName)) {
private void addRepository(String tenantName) { addRepository(tenantName);
Datastore ds = factory.getDatastore(tenantName, tenantName);
if(ds == null)
throw invalidTenantGivenException(tenantName);
ILegalTagRepository repo = new ResilientLegalTagRepository(new DatastoreLegalTagRepository(ds));
tenantRepositories.put(tenantName, repo);
} }
return tenantRepositories.get(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)); 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));
}
} }
...@@ -7,48 +7,68 @@ import static org.mockito.Mockito.verify; ...@@ -7,48 +7,68 @@ import static org.mockito.Mockito.verify;
import static org.powermock.api.mockito.PowerMockito.when; import static org.powermock.api.mockito.PowerMockito.when;
import com.google.cloud.datastore.Datastore; import com.google.cloud.datastore.Datastore;
import org.junit.Before;
import org.junit.Test; 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.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.ILegalTagRepository;
import org.opengroup.osdu.legal.provider.interfaces.ILegalTagRepositoryFactory; import org.opengroup.osdu.legal.provider.interfaces.ILegalTagRepositoryFactory;
public class LegalTagRepositoryFactoryTest { 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) @Before
public void should_throwAppException_when_givenBlankName(){ public void init() {
DatastoreFactory factory = mock(DatastoreFactory.class); factory = mock(DatastoreFactory.class);
ILegalTagRepositoryFactory sut = new LegalTagRepositoryFactoryGcpImpl(factory); tenantFactory = mock(ITenantFactory.class);
sut.get(""); }
}
@Test(expected = AppException.class) @Test(expected = AppException.class)
public void should_throwAppException_when_tenantDoesNotExist(){ public void should_throwAppException_when_givenBlankName() {
DatastoreFactory factory = mock(DatastoreFactory.class); TenantInfo tenantInfo = new TenantInfo();
when(factory.getDatastore(TENANT_1, TENANT_1)).thenReturn(null); 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); @Test(expected = AppException.class)
sut.get(TENANT_1); 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 ILegalTagRepositoryFactory sut = new LegalTagRepositoryFactoryGcpImpl(tenantInfo, factory,
public void should_returnExistingRepo_when_requestingTenantThatHasPreviouslyBeenRequested(){ tenantFactory);
Datastore ds = mock(Datastore.class); sut.get(TENANT_1);
DatastoreFactory factory = mock(DatastoreFactory.class); }
when(factory.getDatastore(TENANT_1, TENANT_1)).thenReturn(ds);
ILegalTagRepositoryFactory sut = new LegalTagRepositoryFactoryGcpImpl(factory); @Test
ILegalTagRepository result = sut.get(TENANT_1); public void should_returnExistingRepo_when_requestingTenantThatHasPreviouslyBeenRequested() {
assertNotNull(result); Datastore ds = mock(Datastore.class);
verify(factory, times(1)).getDatastore(TENANT_1, TENANT_1); 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); result = sut.get(TENANT_1);
assertNotNull(result); assertNotNull(result);
verify(factory, times(1)).getDatastore(TENANT_1, TENANT_1); verify(factory, times(1)).getDatastore(tenantInfo);
} }
} }
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment