You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@dlab.apache.org by bh...@apache.org on 2019/06/05 11:54:22 UTC
[incubator-dlab] branch feature/projects updated: DLAB-746 added
API for checking whether used is assigned to project
This is an automated email from the ASF dual-hosted git repository.
bhliva pushed a commit to branch feature/projects
in repository https://gitbox.apache.org/repos/asf/incubator-dlab.git
The following commit(s) were added to refs/heads/feature/projects by this push:
new 9af7f10 DLAB-746 added API for checking whether used is assigned to project
9af7f10 is described below
commit 9af7f103627317bb26530d4b289f5a9769d74086
Author: bhliva <bo...@epam.com>
AuthorDate: Wed Jun 5 14:53:57 2019 +0300
DLAB-746 added API for checking whether used is assigned to project
---
.../java/com/epam/dlab/backendapi/dao/ProjectDAO.java | 2 +-
.../com/epam/dlab/backendapi/dao/ProjectDAOImpl.java | 5 +++--
.../com/epam/dlab/backendapi/dao/UserGroupDao.java | 2 ++
.../epam/dlab/backendapi/dao/UserGroupDaoImpl.java | 9 +++++++++
.../resources/InfrastructureInfoResource.java | 2 +-
.../backendapi/resources/dto/HealthStatusPageDTO.java | 11 +++++++++++
.../backendapi/service/InfrastructureInfoService.java | 3 ++-
.../epam/dlab/backendapi/service/ProjectService.java | 3 +++
.../service/impl/InfrastructureInfoServiceBase.java | 9 ++++++++-
.../backendapi/service/impl/ProjectServiceImpl.java | 19 ++++++++++++++++++-
.../resources/InfrastructureInfoResourceTest.java | 17 +++++++++--------
.../impl/InfrastructureInfoServiceBaseTest.java | 9 +++++++--
12 files changed, 74 insertions(+), 17 deletions(-)
diff --git a/services/self-service/src/main/java/com/epam/dlab/backendapi/dao/ProjectDAO.java b/services/self-service/src/main/java/com/epam/dlab/backendapi/dao/ProjectDAO.java
index f7d4ce2..9939bc5 100644
--- a/services/self-service/src/main/java/com/epam/dlab/backendapi/dao/ProjectDAO.java
+++ b/services/self-service/src/main/java/com/epam/dlab/backendapi/dao/ProjectDAO.java
@@ -21,5 +21,5 @@ public interface ProjectDAO {
void updateBudget(String project, Integer budget);
- boolean anyProjectAssigned(Set<String> groups);
+ boolean isAnyProjectAssigned(Set<String> groups);
}
diff --git a/services/self-service/src/main/java/com/epam/dlab/backendapi/dao/ProjectDAOImpl.java b/services/self-service/src/main/java/com/epam/dlab/backendapi/dao/ProjectDAOImpl.java
index 3d2bc02..3fd5e6b 100644
--- a/services/self-service/src/main/java/com/epam/dlab/backendapi/dao/ProjectDAOImpl.java
+++ b/services/self-service/src/main/java/com/epam/dlab/backendapi/dao/ProjectDAOImpl.java
@@ -1,6 +1,7 @@
package com.epam.dlab.backendapi.dao;
import com.epam.dlab.backendapi.domain.ProjectDTO;
+import com.google.common.collect.Iterables;
import org.bson.Document;
import org.bson.conversions.Bson;
@@ -53,8 +54,8 @@ public class ProjectDAOImpl extends BaseDAO implements ProjectDAO {
}
@Override
- public boolean anyProjectAssigned(Set<String> groups) {
- return false;
+ public boolean isAnyProjectAssigned(Set<String> groups) {
+ return !Iterables.isEmpty(find(PROJECTS_COLLECTION, in(GROUPS, groups)));
}
private Bson projectCondition(String name) {
diff --git a/services/self-service/src/main/java/com/epam/dlab/backendapi/dao/UserGroupDao.java b/services/self-service/src/main/java/com/epam/dlab/backendapi/dao/UserGroupDao.java
index d8fb8ec..0a4dde5 100644
--- a/services/self-service/src/main/java/com/epam/dlab/backendapi/dao/UserGroupDao.java
+++ b/services/self-service/src/main/java/com/epam/dlab/backendapi/dao/UserGroupDao.java
@@ -29,4 +29,6 @@ public interface UserGroupDao {
void removeGroup(String groupId);
+ Set<String> getUserGroups(String user);
+
}
diff --git a/services/self-service/src/main/java/com/epam/dlab/backendapi/dao/UserGroupDaoImpl.java b/services/self-service/src/main/java/com/epam/dlab/backendapi/dao/UserGroupDaoImpl.java
index a8e5a15..350f6a2 100644
--- a/services/self-service/src/main/java/com/epam/dlab/backendapi/dao/UserGroupDaoImpl.java
+++ b/services/self-service/src/main/java/com/epam/dlab/backendapi/dao/UserGroupDaoImpl.java
@@ -22,9 +22,11 @@ import com.google.inject.Singleton;
import org.bson.Document;
import java.util.Set;
+import java.util.stream.Collectors;
import static com.epam.dlab.backendapi.dao.MongoCollections.USER_GROUPS;
import static com.mongodb.client.model.Filters.eq;
+import static com.mongodb.client.model.Filters.in;
@Singleton
public class UserGroupDaoImpl extends BaseDAO implements UserGroupDao {
@@ -50,4 +52,11 @@ public class UserGroupDaoImpl extends BaseDAO implements UserGroupDao {
public void removeGroup(String groupId) {
deleteOne(USER_GROUPS, eq(ID, groupId));
}
+
+ @Override
+ public Set<String> getUserGroups(String user) {
+ return stream(find(USER_GROUPS, in(USERS_FIELD, user)))
+ .map(document -> document.getString(ID))
+ .collect(Collectors.toSet());
+ }
}
diff --git a/services/self-service/src/main/java/com/epam/dlab/backendapi/resources/InfrastructureInfoResource.java b/services/self-service/src/main/java/com/epam/dlab/backendapi/resources/InfrastructureInfoResource.java
index 6b44c33..daec244 100644
--- a/services/self-service/src/main/java/com/epam/dlab/backendapi/resources/InfrastructureInfoResource.java
+++ b/services/self-service/src/main/java/com/epam/dlab/backendapi/resources/InfrastructureInfoResource.java
@@ -73,7 +73,7 @@ public class InfrastructureInfoResource {
@ApiParam(value = "Full version of report required", defaultValue = "0")
@QueryParam("full") @DefaultValue("0") int fullReport) {
return infrastructureInfoService
- .getHeathStatus(userInfo.getName(), fullReport != 0, UserRoles.isAdmin(userInfo));
+ .getHeathStatus(userInfo, fullReport != 0, UserRoles.isAdmin(userInfo));
}
/**
diff --git a/services/self-service/src/main/java/com/epam/dlab/backendapi/resources/dto/HealthStatusPageDTO.java b/services/self-service/src/main/java/com/epam/dlab/backendapi/resources/dto/HealthStatusPageDTO.java
index cdef1bb..b7f9362 100644
--- a/services/self-service/src/main/java/com/epam/dlab/backendapi/resources/dto/HealthStatusPageDTO.java
+++ b/services/self-service/src/main/java/com/epam/dlab/backendapi/resources/dto/HealthStatusPageDTO.java
@@ -40,6 +40,8 @@ public class HealthStatusPageDTO {
private int billingQuoteUsed;
@JsonProperty
private int billingUserQuoteUsed;
+ @JsonProperty
+ private boolean projectAssigned;
/**
* Return the status of environment.
@@ -83,6 +85,11 @@ public class HealthStatusPageDTO {
return this;
}
+ public HealthStatusPageDTO withProjectAssinged(boolean isProjectAssigned) {
+ this.projectAssigned = isProjectAssigned;
+ return this;
+ }
+
/**
* Return the list of resources.
*/
@@ -146,6 +153,10 @@ public class HealthStatusPageDTO {
return admin;
}
+ public boolean isProjectAssigned() {
+ return projectAssigned;
+ }
+
public int getBillingQuoteUsed() {
return billingQuoteUsed;
}
diff --git a/services/self-service/src/main/java/com/epam/dlab/backendapi/service/InfrastructureInfoService.java b/services/self-service/src/main/java/com/epam/dlab/backendapi/service/InfrastructureInfoService.java
index b54edb9..64e45be 100644
--- a/services/self-service/src/main/java/com/epam/dlab/backendapi/service/InfrastructureInfoService.java
+++ b/services/self-service/src/main/java/com/epam/dlab/backendapi/service/InfrastructureInfoService.java
@@ -19,6 +19,7 @@
package com.epam.dlab.backendapi.service;
+import com.epam.dlab.auth.UserInfo;
import com.epam.dlab.backendapi.resources.dto.HealthStatusPageDTO;
import com.epam.dlab.backendapi.resources.dto.InfrastructureInfo;
import com.epam.dlab.dto.InfrastructureMetaInfoDTO;
@@ -26,7 +27,7 @@ import com.epam.dlab.dto.InfrastructureMetaInfoDTO;
public interface InfrastructureInfoService {
InfrastructureInfo getUserResources(String user);
- HealthStatusPageDTO getHeathStatus(String user, boolean fullReport, boolean isAdmin);
+ HealthStatusPageDTO getHeathStatus(UserInfo user, boolean fullReport, boolean isAdmin);
InfrastructureMetaInfoDTO getInfrastructureMetaInfo();
}
diff --git a/services/self-service/src/main/java/com/epam/dlab/backendapi/service/ProjectService.java b/services/self-service/src/main/java/com/epam/dlab/backendapi/service/ProjectService.java
index 2e221e1..bde43b2 100644
--- a/services/self-service/src/main/java/com/epam/dlab/backendapi/service/ProjectService.java
+++ b/services/self-service/src/main/java/com/epam/dlab/backendapi/service/ProjectService.java
@@ -1,5 +1,6 @@
package com.epam.dlab.backendapi.service;
+import com.epam.dlab.auth.UserInfo;
import com.epam.dlab.backendapi.domain.ProjectDTO;
import java.util.List;
@@ -16,4 +17,6 @@ public interface ProjectService {
void update(ProjectDTO projectDTO);
void updateBudget(String project, Integer budget);
+
+ boolean isAnyProjectAssigned(UserInfo userInfo);
}
diff --git a/services/self-service/src/main/java/com/epam/dlab/backendapi/service/impl/InfrastructureInfoServiceBase.java b/services/self-service/src/main/java/com/epam/dlab/backendapi/service/impl/InfrastructureInfoServiceBase.java
index a5d1465..919a5fc 100644
--- a/services/self-service/src/main/java/com/epam/dlab/backendapi/service/impl/InfrastructureInfoServiceBase.java
+++ b/services/self-service/src/main/java/com/epam/dlab/backendapi/service/impl/InfrastructureInfoServiceBase.java
@@ -19,6 +19,7 @@
package com.epam.dlab.backendapi.service.impl;
+import com.epam.dlab.auth.UserInfo;
import com.epam.dlab.backendapi.SelfServiceApplicationConfiguration;
import com.epam.dlab.backendapi.dao.BillingDAO;
import com.epam.dlab.backendapi.dao.EnvDAO;
@@ -27,6 +28,7 @@ import com.epam.dlab.backendapi.dao.KeyDAO;
import com.epam.dlab.backendapi.resources.dto.HealthStatusPageDTO;
import com.epam.dlab.backendapi.resources.dto.InfrastructureInfo;
import com.epam.dlab.backendapi.service.InfrastructureInfoService;
+import com.epam.dlab.backendapi.service.ProjectService;
import com.epam.dlab.dto.InfrastructureMetaInfoDTO;
import com.epam.dlab.dto.base.edge.EdgeInfo;
import com.epam.dlab.exceptions.DlabException;
@@ -52,6 +54,8 @@ public abstract class InfrastructureInfoServiceBase<T> implements Infrastructure
private SelfServiceApplicationConfiguration configuration;
@Inject
private BillingDAO billingDAO;
+ @Inject
+ private ProjectService projectService;
@SuppressWarnings("unchecked")
@@ -73,12 +77,15 @@ public abstract class InfrastructureInfoServiceBase<T> implements Infrastructure
}
@Override
- public HealthStatusPageDTO getHeathStatus(String user, boolean fullReport, boolean isAdmin) {
+ public HealthStatusPageDTO getHeathStatus(UserInfo userInfo, boolean fullReport, boolean isAdmin) {
+ final String user = userInfo.getName();
log.debug("Request the status of resources for user {}, report type {}", user, fullReport);
try {
+
return envDAO.getHealthStatusPageDTO(user, fullReport)
.withBillingEnabled(configuration.isBillingSchedulerEnabled())
.withAdmin(isAdmin)
+ .withProjectAssinged(projectService.isAnyProjectAssigned(userInfo))
.withBillingQuoteUsed(billingDAO.getBillingQuoteUsed())
.withBillingUserQuoteUsed(billingDAO.getBillingUserQuoteUsed(user));
} catch (Exception e) {
diff --git a/services/self-service/src/main/java/com/epam/dlab/backendapi/service/impl/ProjectServiceImpl.java b/services/self-service/src/main/java/com/epam/dlab/backendapi/service/impl/ProjectServiceImpl.java
index bceb5b9..d118844 100644
--- a/services/self-service/src/main/java/com/epam/dlab/backendapi/service/impl/ProjectServiceImpl.java
+++ b/services/self-service/src/main/java/com/epam/dlab/backendapi/service/impl/ProjectServiceImpl.java
@@ -1,6 +1,8 @@
package com.epam.dlab.backendapi.service.impl;
+import com.epam.dlab.auth.UserInfo;
import com.epam.dlab.backendapi.dao.ProjectDAO;
+import com.epam.dlab.backendapi.dao.UserGroupDao;
import com.epam.dlab.backendapi.domain.ProjectDTO;
import com.epam.dlab.backendapi.service.EnvironmentService;
import com.epam.dlab.backendapi.service.ProjectService;
@@ -9,17 +11,24 @@ import com.epam.dlab.exceptions.ResourceNotFoundException;
import com.google.inject.Inject;
import java.util.List;
+import java.util.Set;
import java.util.function.Supplier;
+import static java.util.stream.Collectors.toSet;
+import static java.util.stream.Stream.concat;
+
public class ProjectServiceImpl implements ProjectService {
private final ProjectDAO projectDAO;
private final EnvironmentService environmentService;
+ private final UserGroupDao userGroupDao;
@Inject
- public ProjectServiceImpl(ProjectDAO projectDAO, EnvironmentService environmentService) {
+ public ProjectServiceImpl(ProjectDAO projectDAO, EnvironmentService environmentService,
+ UserGroupDao userGroupDao) {
this.projectDAO = projectDAO;
this.environmentService = environmentService;
+ this.userGroupDao = userGroupDao;
}
@Override
@@ -60,6 +69,14 @@ public class ProjectServiceImpl implements ProjectService {
projectDAO.updateBudget(project, budget);
}
+ @Override
+ public boolean isAnyProjectAssigned(UserInfo userInfo) {
+ final Set<String> userGroups = concat(userInfo.getRoles().stream(),
+ userGroupDao.getUserGroups(userInfo.getName()).stream())
+ .collect(toSet());
+ return projectDAO.isAnyProjectAssigned(userGroups);
+ }
+
private Supplier<ResourceNotFoundException> projectNotFound() {
return () -> new ResourceNotFoundException("Project with passed name not found");
}
diff --git a/services/self-service/src/test/java/com/epam/dlab/backendapi/resources/InfrastructureInfoResourceTest.java b/services/self-service/src/test/java/com/epam/dlab/backendapi/resources/InfrastructureInfoResourceTest.java
index 30c69ff..e2ab690 100644
--- a/services/self-service/src/test/java/com/epam/dlab/backendapi/resources/InfrastructureInfoResourceTest.java
+++ b/services/self-service/src/test/java/com/epam/dlab/backendapi/resources/InfrastructureInfoResourceTest.java
@@ -19,6 +19,7 @@
package com.epam.dlab.backendapi.resources;
+import com.epam.dlab.auth.UserInfo;
import com.epam.dlab.backendapi.resources.dto.HealthStatusPageDTO;
import com.epam.dlab.backendapi.resources.dto.InfrastructureInfo;
import com.epam.dlab.backendapi.service.InfrastructureInfoService;
@@ -85,7 +86,7 @@ public class InfrastructureInfoResourceTest extends TestBase {
@Test
public void healthStatus() {
HealthStatusPageDTO hspDto = getHealthStatusPageDTO();
- when(infrastructureInfoService.getHeathStatus(anyString(), anyBoolean(), anyBoolean())).thenReturn(hspDto);
+ when(infrastructureInfoService.getHeathStatus(any(UserInfo.class), anyBoolean(), anyBoolean())).thenReturn(hspDto);
final Response response = resources.getJerseyTest()
.target("/infrastructure/status")
.queryParam("full", "1")
@@ -97,7 +98,7 @@ public class InfrastructureInfoResourceTest extends TestBase {
assertEquals(hspDto.getStatus(), response.readEntity(HealthStatusPageDTO.class).getStatus());
assertEquals(MediaType.APPLICATION_JSON, response.getHeaderString(HttpHeaders.CONTENT_TYPE));
- verify(infrastructureInfoService).getHeathStatus(eq(USER.toLowerCase()), eq(true), anyBoolean());
+ verify(infrastructureInfoService).getHeathStatus(refEq(getUserInfo()), eq(true), anyBoolean());
verifyNoMoreInteractions(infrastructureInfoService);
}
@@ -105,7 +106,7 @@ public class InfrastructureInfoResourceTest extends TestBase {
public void healthStatusWithFailedAuth() throws AuthenticationException {
authFailSetup();
HealthStatusPageDTO hspDto = getHealthStatusPageDTO();
- when(infrastructureInfoService.getHeathStatus(anyString(), anyBoolean(), anyBoolean())).thenReturn(hspDto);
+ when(infrastructureInfoService.getHeathStatus(any(UserInfo.class), anyBoolean(), anyBoolean())).thenReturn(hspDto);
final Response response = resources.getJerseyTest()
.target("/infrastructure/status")
.queryParam("full", "1")
@@ -117,14 +118,14 @@ public class InfrastructureInfoResourceTest extends TestBase {
assertEquals(hspDto.getStatus(), response.readEntity(HealthStatusPageDTO.class).getStatus());
assertEquals(MediaType.APPLICATION_JSON, response.getHeaderString(HttpHeaders.CONTENT_TYPE));
- verify(infrastructureInfoService).getHeathStatus(eq(USER.toLowerCase()), eq(true), anyBoolean());
+ verify(infrastructureInfoService).getHeathStatus(refEq(getUserInfo()), eq(true), anyBoolean());
verifyNoMoreInteractions(infrastructureInfoService);
}
@Test
public void healthStatusWithDefaultQueryParam() {
HealthStatusPageDTO hspDto = getHealthStatusPageDTO();
- when(infrastructureInfoService.getHeathStatus(anyString(), anyBoolean(), anyBoolean())).thenReturn(hspDto);
+ when(infrastructureInfoService.getHeathStatus(any(UserInfo.class), anyBoolean(), anyBoolean())).thenReturn(hspDto);
final Response response = resources.getJerseyTest()
.target("/infrastructure/status")
.request()
@@ -135,14 +136,14 @@ public class InfrastructureInfoResourceTest extends TestBase {
assertEquals(hspDto.getStatus(), response.readEntity(HealthStatusPageDTO.class).getStatus());
assertEquals(MediaType.APPLICATION_JSON, response.getHeaderString(HttpHeaders.CONTENT_TYPE));
- verify(infrastructureInfoService).getHeathStatus(eq(USER.toLowerCase()), eq(false), anyBoolean());
+ verify(infrastructureInfoService).getHeathStatus(refEq(getUserInfo()), eq(false), anyBoolean());
verifyNoMoreInteractions(infrastructureInfoService);
}
@Test
public void healthStatusWithException() {
doThrow(new DlabException("Could not return status of resources for user"))
- .when(infrastructureInfoService).getHeathStatus(anyString(), anyBoolean(), anyBoolean());
+ .when(infrastructureInfoService).getHeathStatus(any(UserInfo.class), anyBoolean(), anyBoolean());
final Response response = resources.getJerseyTest()
.target("/infrastructure/status")
.request()
@@ -152,7 +153,7 @@ public class InfrastructureInfoResourceTest extends TestBase {
assertEquals(HttpStatus.SC_INTERNAL_SERVER_ERROR, response.getStatus());
assertEquals(MediaType.APPLICATION_JSON, response.getHeaderString(HttpHeaders.CONTENT_TYPE));
- verify(infrastructureInfoService).getHeathStatus(eq(USER.toLowerCase()), eq(false), anyBoolean());
+ verify(infrastructureInfoService).getHeathStatus(refEq(getUserInfo()), eq(false), anyBoolean());
verifyNoMoreInteractions(infrastructureInfoService);
}
diff --git a/services/self-service/src/test/java/com/epam/dlab/backendapi/service/impl/InfrastructureInfoServiceBaseTest.java b/services/self-service/src/test/java/com/epam/dlab/backendapi/service/impl/InfrastructureInfoServiceBaseTest.java
index aad8094..2c7d127 100644
--- a/services/self-service/src/test/java/com/epam/dlab/backendapi/service/impl/InfrastructureInfoServiceBaseTest.java
+++ b/services/self-service/src/test/java/com/epam/dlab/backendapi/service/impl/InfrastructureInfoServiceBaseTest.java
@@ -19,6 +19,7 @@
package com.epam.dlab.backendapi.service.impl;
+import com.epam.dlab.auth.UserInfo;
import com.epam.dlab.backendapi.SelfServiceApplicationConfiguration;
import com.epam.dlab.backendapi.dao.BillingDAO;
import com.epam.dlab.backendapi.dao.EnvDAO;
@@ -27,6 +28,7 @@ import com.epam.dlab.backendapi.dao.KeyDAO;
import com.epam.dlab.backendapi.resources.dto.HealthStatusEnum;
import com.epam.dlab.backendapi.resources.dto.HealthStatusPageDTO;
import com.epam.dlab.backendapi.resources.dto.InfrastructureInfo;
+import com.epam.dlab.backendapi.service.ProjectService;
import com.epam.dlab.dto.base.edge.EdgeInfo;
import com.epam.dlab.exceptions.DlabException;
import org.bson.Document;
@@ -57,6 +59,8 @@ public class InfrastructureInfoServiceBaseTest {
private SelfServiceApplicationConfiguration configuration;
@Mock
private BillingDAO billingDAO;
+ @Mock
+ private ProjectService projectService;
@InjectMocks
private InfrastructureInfoServiceBase infrastructureInfoServiceBase = spy(InfrastructureInfoServiceBase.class);
@@ -109,11 +113,12 @@ public class InfrastructureInfoServiceBaseTest {
when(billingDAO.getBillingQuoteUsed()).thenReturn(10);
HealthStatusPageDTO actualHealthStatusPageDTO =
- infrastructureInfoServiceBase.getHeathStatus(USER, false, true);
+ infrastructureInfoServiceBase.getHeathStatus(new UserInfo(USER, "token"), false, true);
assertNotNull(actualHealthStatusPageDTO);
assertEquals(HealthStatusEnum.OK.toString(), actualHealthStatusPageDTO.getStatus());
assertFalse(actualHealthStatusPageDTO.isBillingEnabled());
assertTrue(actualHealthStatusPageDTO.isAdmin());
+ assertFalse(actualHealthStatusPageDTO.isProjectAssigned());
assertEquals(10, actualHealthStatusPageDTO.getBillingQuoteUsed());
verify(envDAO).getHealthStatusPageDTO(USER, false);
@@ -126,7 +131,7 @@ public class InfrastructureInfoServiceBaseTest {
doThrow(new DlabException("Cannot fetch health status!"))
.when(envDAO).getHealthStatusPageDTO(anyString(), anyBoolean());
try {
- infrastructureInfoServiceBase.getHeathStatus(USER, false, false);
+ infrastructureInfoServiceBase.getHeathStatus(new UserInfo(USER, null), false, false);
} catch (DlabException e) {
assertEquals("Cannot fetch health status!", e.getMessage());
}
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@dlab.apache.org
For additional commands, e-mail: commits-help@dlab.apache.org