Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found

Target

Select target project
  • osdu/platform/security-and-compliance/legal
  • alanbraz-ibm/legal
  • pfarrell/legal
  • ankitsharma/legal
  • manishk/legal
  • harshit283/legal
6 results
Show changes
Commits on Source (2)
......@@ -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);
}
}
}