Skip to content
Snippets Groups Projects
Commit 0169c1d8 authored by Dmitriy Rudko's avatar Dmitriy Rudko :speech_balloon:
Browse files

Merge branch 'unify_logic_for_credentials' into 'master'

Unify logic for credentials (GONRG-539)

See merge request !42
parents 9c6ef97b 1b071999
No related branches found
No related tags found
1 merge request!42Unify logic for credentials (GONRG-539)
Pipeline #7730 canceled
......@@ -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>
......
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;
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));
}
}
......@@ -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);
}
}
}
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