You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@dlab.apache.org by of...@apache.org on 2020/08/31 14:05:11 UTC
[incubator-dlab] branch develop updated: Created test for
InfrastructureInfoService
This is an automated email from the ASF dual-hosted git repository.
ofuks pushed a commit to branch develop
in repository https://gitbox.apache.org/repos/asf/incubator-dlab.git
The following commit(s) were added to refs/heads/develop by this push:
new 9435ba9 Created test for InfrastructureInfoService
9435ba9 is described below
commit 9435ba953e5c908bf8528e76307f516253343c9e
Author: Oleh Fuks <ol...@gmail.com>
AuthorDate: Mon Aug 31 17:04:50 2020 +0300
Created test for InfrastructureInfoService
---
.../resources/InfrastructureInfoResource.java | 2 +-
.../resources/dto/ProjectInfrastructureInfo.java | 4 +
.../service/InfrastructureInfoService.java | 2 +-
.../service/impl/BillingServiceImpl.java | 17 +-
.../impl/InfrastructureInfoServiceImpl.java | 86 +++--
.../resources/InfrastructureInfoResourceTest.java | 19 +-
.../service/impl/BillingServiceImplTest.java | 8 +-
.../impl/InfrastructureInfoServiceImplTest.java | 387 +++++++++++++++++++++
8 files changed, 452 insertions(+), 73 deletions(-)
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 c8952f3..deb9f96 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
@@ -70,7 +70,7 @@ public class InfrastructureInfoResource {
@Path("/status")
public HealthStatusPageDTO status(@Auth UserInfo userInfo,
@QueryParam("full") @DefaultValue("0") int fullReport) {
- return infrastructureInfoService.getHeathStatus(userInfo, fullReport != 0);
+ return infrastructureInfoService.getHeathStatus(userInfo);
}
/**
diff --git a/services/self-service/src/main/java/com/epam/dlab/backendapi/resources/dto/ProjectInfrastructureInfo.java b/services/self-service/src/main/java/com/epam/dlab/backendapi/resources/dto/ProjectInfrastructureInfo.java
index e8585ac..ab3f7a8 100644
--- a/services/self-service/src/main/java/com/epam/dlab/backendapi/resources/dto/ProjectInfrastructureInfo.java
+++ b/services/self-service/src/main/java/com/epam/dlab/backendapi/resources/dto/ProjectInfrastructureInfo.java
@@ -24,12 +24,16 @@ import com.epam.dlab.backendapi.domain.EndpointDTO;
import com.epam.dlab.dto.UserInstanceDTO;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.EqualsAndHashCode;
import lombok.ToString;
import java.util.List;
import java.util.Map;
@AllArgsConstructor
+@Builder
+@EqualsAndHashCode
@ToString
public class ProjectInfrastructureInfo {
@JsonProperty
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 ffb3531..b8fe079 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
@@ -29,7 +29,7 @@ import java.util.List;
public interface InfrastructureInfoService {
List<ProjectInfrastructureInfo> getUserResources(UserInfo user);
- HealthStatusPageDTO getHeathStatus(UserInfo user, boolean fullReport);
+ HealthStatusPageDTO getHeathStatus(UserInfo user);
InfrastructureMetaInfoDTO getInfrastructureMetaInfo();
}
diff --git a/services/self-service/src/main/java/com/epam/dlab/backendapi/service/impl/BillingServiceImpl.java b/services/self-service/src/main/java/com/epam/dlab/backendapi/service/impl/BillingServiceImpl.java
index ae47d27..d5675f0 100644
--- a/services/self-service/src/main/java/com/epam/dlab/backendapi/service/impl/BillingServiceImpl.java
+++ b/services/self-service/src/main/java/com/epam/dlab/backendapi/service/impl/BillingServiceImpl.java
@@ -168,17 +168,12 @@ public class BillingServiceImpl implements BillingService {
.stream()
.collect(Collectors.toMap(e -> e, e -> getBillingData(userInfo, e)));
- billingDataMap
- .forEach((endpointDTO, billingData) -> {
- log.info("Updating billing information for endpoint {}. Billing data {}", endpointDTO.getName(), billingData);
- try {
- if (!billingData.isEmpty()) {
- updateBillingData(endpointDTO, billingData, endpoints);
- }
- } catch (Exception e) {
- log.error("Something went wrong while trying to update billing for {}. {}", endpointDTO.getName(), e.getMessage(), e);
- }
- });
+ billingDataMap.forEach((endpointDTO, billingData) -> {
+ log.info("Updating billing information for endpoint {}. Billing data {}", endpointDTO.getName(), billingData);
+ if (!billingData.isEmpty()) {
+ updateBillingData(endpointDTO, billingData, endpoints);
+ }
+ });
}
@Override
diff --git a/services/self-service/src/main/java/com/epam/dlab/backendapi/service/impl/InfrastructureInfoServiceImpl.java b/services/self-service/src/main/java/com/epam/dlab/backendapi/service/impl/InfrastructureInfoServiceImpl.java
index 98c2f6d..a368b18 100644
--- a/services/self-service/src/main/java/com/epam/dlab/backendapi/service/impl/InfrastructureInfoServiceImpl.java
+++ b/services/self-service/src/main/java/com/epam/dlab/backendapi/service/impl/InfrastructureInfoServiceImpl.java
@@ -42,7 +42,6 @@ import com.epam.dlab.dto.azure.edge.EdgeInfoAzure;
import com.epam.dlab.dto.base.edge.EdgeInfo;
import com.epam.dlab.dto.computational.UserComputationalResource;
import com.epam.dlab.dto.gcp.edge.EdgeInfoGcp;
-import com.epam.dlab.exceptions.DlabException;
import com.google.inject.Inject;
import com.jcabi.manifests.Manifests;
import lombok.extern.slf4j.Slf4j;
@@ -69,9 +68,8 @@ public class InfrastructureInfoServiceImpl implements InfrastructureInfoService
private final BillingService billingService;
@Inject
- public InfrastructureInfoServiceImpl(ExploratoryDAO expDAO, SelfServiceApplicationConfiguration configuration,
- ProjectService projectService, EndpointService endpointService,
- BillingService billingService) {
+ public InfrastructureInfoServiceImpl(ExploratoryDAO expDAO, SelfServiceApplicationConfiguration configuration, ProjectService projectService,
+ EndpointService endpointService, BillingService billingService) {
this.expDAO = expDAO;
this.configuration = configuration;
this.projectService = projectService;
@@ -82,47 +80,41 @@ public class InfrastructureInfoServiceImpl implements InfrastructureInfoService
@Override
public List<ProjectInfrastructureInfo> getUserResources(UserInfo user) {
log.debug("Loading list of provisioned resources for user {}", user);
- try {
- List<EndpointDTO> allEndpoints = endpointService.getEndpoints();
- return projectService.getUserProjects(user, false)
- .stream()
- .map(p -> {
- List<UserInstanceDTO> exploratories = expDAO.findExploratories(user.getName(), p.getName());
- return new ProjectInfrastructureInfo(p.getName(), billingService.getBillingProjectQuoteUsed(p.getName()),
- getSharedInfo(p.getName()), exploratories, getExploratoryBillingData(exploratories),
- getEndpoints(allEndpoints, p));
- })
- .collect(Collectors.toList());
- } catch (Exception e) {
- log.error("Could not load list of provisioned resources for user: {}", user, e);
- throw new DlabException("Could not load list of provisioned resources for user: ");
- }
+ List<EndpointDTO> allEndpoints = endpointService.getEndpoints();
+ return projectService.getUserProjects(user, Boolean.FALSE)
+ .stream()
+ .map(p -> {
+ List<UserInstanceDTO> exploratories = expDAO.findExploratories(user.getName(), p.getName());
+ return ProjectInfrastructureInfo.builder()
+ .project(p.getName())
+ .billingQuoteUsed(billingService.getBillingProjectQuoteUsed(p.getName()))
+ .shared(getSharedInfo(p.getName()))
+ .exploratory(exploratories)
+ .exploratoryBilling(getExploratoryBillingData(exploratories))
+ .endpoints(getEndpoints(allEndpoints, p))
+ .build();
+ })
+ .collect(Collectors.toList());
}
@Override
- public HealthStatusPageDTO getHeathStatus(UserInfo userInfo, boolean fullReport) {
- final String user = userInfo.getName();
- log.debug("Request the status of resources for user {}, report type {}", user, fullReport);
- try {
- return HealthStatusPageDTO.builder()
- .status(HealthStatusEnum.OK.toString())
- .listResources(Collections.emptyList())
- .billingEnabled(configuration.isBillingSchedulerEnabled())
- .auditEnabled(configuration.isAuditEnabled())
- .projectAdmin(UserRoles.isProjectAdmin(userInfo))
- .admin(UserRoles.isAdmin(userInfo))
- .projectAssigned(projectService.isAnyProjectAssigned(userInfo))
- .bucketBrowser(HealthStatusPageDTO.BucketBrowser.builder()
- .view(checkAccess(userInfo, PERMISSION_VIEW))
- .upload(checkAccess(userInfo, PERMISSION_UPLOAD))
- .download(checkAccess(userInfo, PERMISSION_DOWNLOAD))
- .delete(checkAccess(userInfo, PERMISSION_DELETE))
- .build())
- .build();
- } catch (Exception e) {
- log.warn("Could not return status of resources for user {}: {}", user, e.getLocalizedMessage(), e);
- throw new DlabException(e.getMessage(), e);
- }
+ public HealthStatusPageDTO getHeathStatus(UserInfo userInfo) {
+ log.debug("Request the status of resources for user {}", userInfo.getName());
+ return HealthStatusPageDTO.builder()
+ .status(HealthStatusEnum.OK.toString())
+ .listResources(Collections.emptyList())
+ .billingEnabled(configuration.isBillingSchedulerEnabled())
+ .auditEnabled(configuration.isAuditEnabled())
+ .projectAdmin(UserRoles.isProjectAdmin(userInfo))
+ .admin(UserRoles.isAdmin(userInfo))
+ .projectAssigned(projectService.isAnyProjectAssigned(userInfo))
+ .bucketBrowser(HealthStatusPageDTO.BucketBrowser.builder()
+ .view(checkAccess(userInfo, PERMISSION_VIEW))
+ .upload(checkAccess(userInfo, PERMISSION_UPLOAD))
+ .download(checkAccess(userInfo, PERMISSION_DOWNLOAD))
+ .delete(checkAccess(userInfo, PERMISSION_DELETE))
+ .build())
+ .build();
}
@Override
@@ -149,13 +141,17 @@ public class InfrastructureInfoServiceImpl implements InfrastructureInfoService
}
private List<EndpointDTO> getEndpoints(List<EndpointDTO> allEndpoints, ProjectDTO projectDTO) {
- return allEndpoints.stream().filter(endpoint -> projectDTO.getEndpoints().stream()
- .anyMatch(endpoint1 -> endpoint1.getName().equals(endpoint.getName())))
+ return allEndpoints
+ .stream()
+ .filter(endpoint -> projectDTO.getEndpoints()
+ .stream()
+ .anyMatch(endpoint1 -> endpoint1.getName().equals(endpoint.getName())))
.collect(Collectors.toList());
}
private Map<String, Map<String, String>> getSharedInfo(String name) {
- return projectService.get(name).getEndpoints().stream()
+ return projectService.get(name).getEndpoints()
+ .stream()
.collect(Collectors.toMap(ProjectEndpointDTO::getName, this::getSharedInfo));
}
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 0f63cb9..d6a150a 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
@@ -38,10 +38,7 @@ import javax.ws.rs.core.Response;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNull;
import static org.mockito.Mockito.any;
-import static org.mockito.Mockito.anyBoolean;
-import static org.mockito.Mockito.anyString;
import static org.mockito.Mockito.doThrow;
-import static org.mockito.Mockito.eq;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.refEq;
import static org.mockito.Mockito.verify;
@@ -94,7 +91,7 @@ public class InfrastructureInfoResourceTest extends TestBase {
@Test
public void healthStatus() {
HealthStatusPageDTO hspDto = getHealthStatusPageDTO();
- when(infrastructureInfoService.getHeathStatus(any(UserInfo.class), anyBoolean())).thenReturn(hspDto);
+ when(infrastructureInfoService.getHeathStatus(any(UserInfo.class))).thenReturn(hspDto);
final Response response = resources.getJerseyTest()
.target("/infrastructure/status")
.queryParam("full", "1")
@@ -106,7 +103,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(refEq(getUserInfo()), eq(true));
+ verify(infrastructureInfoService).getHeathStatus(refEq(getUserInfo()));
verifyNoMoreInteractions(infrastructureInfoService);
}
@@ -114,7 +111,7 @@ public class InfrastructureInfoResourceTest extends TestBase {
public void healthStatusWithFailedAuth() throws AuthenticationException {
authFailSetup();
HealthStatusPageDTO hspDto = getHealthStatusPageDTO();
- when(infrastructureInfoService.getHeathStatus(any(UserInfo.class), anyBoolean())).thenReturn(hspDto);
+ when(infrastructureInfoService.getHeathStatus(any(UserInfo.class))).thenReturn(hspDto);
final Response response = resources.getJerseyTest()
.target("/infrastructure/status")
.queryParam("full", "1")
@@ -126,14 +123,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(refEq(getUserInfo()), eq(true));
+ verify(infrastructureInfoService).getHeathStatus(refEq(getUserInfo()));
verifyNoMoreInteractions(infrastructureInfoService);
}
@Test
public void healthStatusWithDefaultQueryParam() {
HealthStatusPageDTO hspDto = getHealthStatusPageDTO();
- when(infrastructureInfoService.getHeathStatus(any(UserInfo.class), anyBoolean())).thenReturn(hspDto);
+ when(infrastructureInfoService.getHeathStatus(any(UserInfo.class))).thenReturn(hspDto);
final Response response = resources.getJerseyTest()
.target("/infrastructure/status")
.request()
@@ -144,14 +141,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(refEq(getUserInfo()), eq(false));
+ verify(infrastructureInfoService).getHeathStatus(refEq(getUserInfo()));
verifyNoMoreInteractions(infrastructureInfoService);
}
@Test
public void healthStatusWithException() {
doThrow(new DlabException("Could not return status of resources for user"))
- .when(infrastructureInfoService).getHeathStatus(any(UserInfo.class), anyBoolean());
+ .when(infrastructureInfoService).getHeathStatus(any(UserInfo.class));
final Response response = resources.getJerseyTest()
.target("/infrastructure/status")
.request()
@@ -161,7 +158,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(refEq(getUserInfo()), eq(false));
+ verify(infrastructureInfoService).getHeathStatus(refEq(getUserInfo()));
verifyNoMoreInteractions(infrastructureInfoService);
}
diff --git a/services/self-service/src/test/java/com/epam/dlab/backendapi/service/impl/BillingServiceImplTest.java b/services/self-service/src/test/java/com/epam/dlab/backendapi/service/impl/BillingServiceImplTest.java
index 8553945..43439cf 100644
--- a/services/self-service/src/test/java/com/epam/dlab/backendapi/service/impl/BillingServiceImplTest.java
+++ b/services/self-service/src/test/java/com/epam/dlab/backendapi/service/impl/BillingServiceImplTest.java
@@ -187,22 +187,22 @@ public class BillingServiceImplTest extends TestBase {
@Test
public void getExploratoryBillingData() {
- when(billingDAO.findBillingData(anyString(), anyString(), anyListOf(String.class))).thenReturn(getBillingReportLineWithDifferentCurrency());
+ when(billingDAO.findBillingData(anyString(), anyString(), anyListOf(String.class))).thenReturn(getBillingReportLineWithCost());
BillingReport actualReport = billingService.getExploratoryBillingData(PROJECT, ENDPOINT, EXPLORATORY_NAME, Arrays.asList(COMPUTE_NAME, COMPUTE_NAME_2));
- assertEquals("reports should be equal", getReportWithNullCurrency(), actualReport);
+ assertEquals("reports should be equal", getReport(), actualReport);
verify(billingDAO).findBillingData(PROJECT, ENDPOINT, Arrays.asList(COMPUTE_NAME, COMPUTE_NAME_2, EXPLORATORY_NAME));
verifyNoMoreInteractions(billingDAO);
}
@Test
public void getExploratoryBillingDataWithNullCurrency() {
- when(billingDAO.findBillingData(anyString(), anyString(), anyListOf(String.class))).thenReturn(getBillingReportLineWithCost());
+ when(billingDAO.findBillingData(anyString(), anyString(), anyListOf(String.class))).thenReturn(getBillingReportLineWithDifferentCurrency());
BillingReport actualReport = billingService.getExploratoryBillingData(PROJECT, ENDPOINT, EXPLORATORY_NAME, Arrays.asList(COMPUTE_NAME, COMPUTE_NAME_2));
- assertEquals("reports should be equal", getReport(), actualReport);
+ assertEquals("reports should be equal", getReportWithNullCurrency(), actualReport);
verify(billingDAO).findBillingData(PROJECT, ENDPOINT, Arrays.asList(COMPUTE_NAME, COMPUTE_NAME_2, EXPLORATORY_NAME));
verifyNoMoreInteractions(billingDAO);
}
diff --git a/services/self-service/src/test/java/com/epam/dlab/backendapi/service/impl/InfrastructureInfoServiceImplTest.java b/services/self-service/src/test/java/com/epam/dlab/backendapi/service/impl/InfrastructureInfoServiceImplTest.java
new file mode 100644
index 0000000..5a3caa3
--- /dev/null
+++ b/services/self-service/src/test/java/com/epam/dlab/backendapi/service/impl/InfrastructureInfoServiceImplTest.java
@@ -0,0 +1,387 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package com.epam.dlab.backendapi.service.impl;
+
+import com.epam.dlab.auth.UserInfo;
+import com.epam.dlab.backendapi.conf.SelfServiceApplicationConfiguration;
+import com.epam.dlab.backendapi.dao.ExploratoryDAO;
+import com.epam.dlab.backendapi.domain.BillingReport;
+import com.epam.dlab.backendapi.domain.BillingReportLine;
+import com.epam.dlab.backendapi.domain.ProjectDTO;
+import com.epam.dlab.backendapi.domain.ProjectEndpointDTO;
+import com.epam.dlab.backendapi.resources.TestBase;
+import com.epam.dlab.backendapi.resources.dto.HealthStatusPageDTO;
+import com.epam.dlab.backendapi.resources.dto.ProjectInfrastructureInfo;
+import com.epam.dlab.backendapi.service.BillingService;
+import com.epam.dlab.backendapi.service.EndpointService;
+import com.epam.dlab.backendapi.service.ProjectService;
+import com.epam.dlab.dto.InfrastructureMetaInfoDTO;
+import com.epam.dlab.dto.UserInstanceDTO;
+import com.epam.dlab.dto.UserInstanceStatus;
+import com.epam.dlab.dto.aws.edge.EdgeInfoAws;
+import com.epam.dlab.dto.azure.edge.EdgeInfoAzure;
+import com.epam.dlab.dto.base.DataEngineType;
+import com.epam.dlab.dto.billing.BillingResourceType;
+import com.epam.dlab.dto.computational.UserComputationalResource;
+import com.epam.dlab.dto.gcp.edge.EdgeInfoGcp;
+import com.jcabi.manifests.Manifests;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.InjectMocks;
+import org.mockito.Mock;
+import org.mockito.runners.MockitoJUnitRunner;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import static org.junit.Assert.assertEquals;
+import static org.mockito.Matchers.any;
+import static org.mockito.Matchers.anyBoolean;
+import static org.mockito.Matchers.anyListOf;
+import static org.mockito.Matchers.anyString;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.verifyNoMoreInteractions;
+import static org.mockito.Mockito.when;
+
+@RunWith(MockitoJUnitRunner.class)
+public class InfrastructureInfoServiceImplTest extends TestBase {
+
+ private static final String PROJECT = "project";
+ private static final String EXPLORATORY_NAME = "exploratoryName";
+ private static final String COMPUTE_NAME = "computeName";
+ private static final String CURRENCY = "currency";
+
+ @Mock
+ private ExploratoryDAO expDAO;
+ @Mock
+ private SelfServiceApplicationConfiguration configuration;
+ @Mock
+ private ProjectService projectService;
+ @Mock
+ private EndpointService endpointService;
+ @Mock
+ private BillingService billingService;
+
+ @InjectMocks
+ private InfrastructureInfoServiceImpl infoService;
+
+ @Test
+ public void getUserResources() {
+ when(endpointService.getEndpoints()).thenReturn(Collections.singletonList(getEndpointDTO()));
+ when(projectService.getUserProjects(any(UserInfo.class), anyBoolean())).thenReturn(Collections.singletonList(getProjectDTO()));
+ when(expDAO.findExploratories(anyString(), anyString())).thenReturn(getUserInstanceDTOs());
+ when(billingService.getBillingProjectQuoteUsed(anyString())).thenReturn(10);
+ when(projectService.get(anyString())).thenReturn(getProjectDTO());
+ when(billingService.getExploratoryBillingData(anyString(), anyString(), anyString(), anyListOf(String.class))).thenReturn(getReport());
+
+ List<ProjectInfrastructureInfo> actualUserResources = infoService.getUserResources(getUserInfo());
+
+ assertEquals("resources should be equal", getProjectInfrastructureInfo(), actualUserResources);
+ verify(endpointService).getEndpoints();
+ verify(projectService).getUserProjects(getUserInfo(), Boolean.FALSE);
+ verify(expDAO).findExploratories(USER.toLowerCase(), PROJECT);
+ verify(billingService).getBillingProjectQuoteUsed(PROJECT);
+ verify(projectService).get(PROJECT);
+ verify(billingService).getExploratoryBillingData(PROJECT, ENDPOINT_NAME, EXPLORATORY_NAME, Collections.singletonList(COMPUTE_NAME));
+ verifyNoMoreInteractions(endpointService, projectService, expDAO, billingService);
+ }
+
+ @Test
+ public void getAwsUserResources() {
+ when(endpointService.getEndpoints()).thenReturn(Collections.singletonList(getEndpointDTO()));
+ when(projectService.getUserProjects(any(UserInfo.class), anyBoolean())).thenReturn(Collections.singletonList(getAwsProjectDTO()));
+ when(expDAO.findExploratories(anyString(), anyString())).thenReturn(getUserInstanceDTOs());
+ when(billingService.getBillingProjectQuoteUsed(anyString())).thenReturn(10);
+ when(projectService.get(anyString())).thenReturn(getAwsProjectDTO());
+ when(billingService.getExploratoryBillingData(anyString(), anyString(), anyString(), anyListOf(String.class))).thenReturn(getReport());
+
+ List<ProjectInfrastructureInfo> actualUserResources = infoService.getUserResources(getUserInfo());
+
+ assertEquals("resources should be equal", getAwsProjectInfrastructureInfo(), actualUserResources);
+ verify(endpointService).getEndpoints();
+ verify(projectService).getUserProjects(getUserInfo(), Boolean.FALSE);
+ verify(expDAO).findExploratories(USER.toLowerCase(), PROJECT);
+ verify(billingService).getBillingProjectQuoteUsed(PROJECT);
+ verify(projectService).get(PROJECT);
+ verify(billingService).getExploratoryBillingData(PROJECT, ENDPOINT_NAME, EXPLORATORY_NAME, Collections.singletonList(COMPUTE_NAME));
+ verifyNoMoreInteractions(endpointService, projectService, expDAO, billingService);
+ }
+
+ @Test
+ public void getAzureUserResources() {
+ when(endpointService.getEndpoints()).thenReturn(Collections.singletonList(getEndpointDTO()));
+ when(projectService.getUserProjects(any(UserInfo.class), anyBoolean())).thenReturn(Collections.singletonList(getAzureProjectDTO()));
+ when(expDAO.findExploratories(anyString(), anyString())).thenReturn(getUserInstanceDTOs());
+ when(billingService.getBillingProjectQuoteUsed(anyString())).thenReturn(10);
+ when(projectService.get(anyString())).thenReturn(getAzureProjectDTO());
+ when(billingService.getExploratoryBillingData(anyString(), anyString(), anyString(), anyListOf(String.class))).thenReturn(getReport());
+
+ List<ProjectInfrastructureInfo> actualUserResources = infoService.getUserResources(getUserInfo());
+
+ assertEquals("resources should be equal", getAzureProjectInfrastructureInfo(), actualUserResources);
+ verify(endpointService).getEndpoints();
+ verify(projectService).getUserProjects(getUserInfo(), Boolean.FALSE);
+ verify(expDAO).findExploratories(USER.toLowerCase(), PROJECT);
+ verify(billingService).getBillingProjectQuoteUsed(PROJECT);
+ verify(projectService).get(PROJECT);
+ verify(billingService).getExploratoryBillingData(PROJECT, ENDPOINT_NAME, EXPLORATORY_NAME, Collections.singletonList(COMPUTE_NAME));
+ verifyNoMoreInteractions(endpointService, projectService, expDAO, billingService);
+ }
+
+ @Test
+ public void getGcpUserResources() {
+ when(endpointService.getEndpoints()).thenReturn(Collections.singletonList(getEndpointDTO()));
+ when(projectService.getUserProjects(any(UserInfo.class), anyBoolean())).thenReturn(Collections.singletonList(getGcpProjectDTO()));
+ when(expDAO.findExploratories(anyString(), anyString())).thenReturn(getUserInstanceDTOs());
+ when(billingService.getBillingProjectQuoteUsed(anyString())).thenReturn(10);
+ when(projectService.get(anyString())).thenReturn(getGcpProjectDTO());
+ when(billingService.getExploratoryBillingData(anyString(), anyString(), anyString(), anyListOf(String.class))).thenReturn(getReport());
+
+ List<ProjectInfrastructureInfo> actualUserResources = infoService.getUserResources(getUserInfo());
+
+ assertEquals("resources should be equal", getGcpProjectInfrastructureInfo(), actualUserResources);
+ verify(endpointService).getEndpoints();
+ verify(projectService).getUserProjects(getUserInfo(), Boolean.FALSE);
+ verify(expDAO).findExploratories(USER.toLowerCase(), PROJECT);
+ verify(billingService).getBillingProjectQuoteUsed(PROJECT);
+ verify(projectService).get(PROJECT);
+ verify(billingService).getExploratoryBillingData(PROJECT, ENDPOINT_NAME, EXPLORATORY_NAME, Collections.singletonList(COMPUTE_NAME));
+ verifyNoMoreInteractions(endpointService, projectService, expDAO, billingService);
+ }
+
+ @Test
+ public void getHeathStatus() {
+ when(configuration.isBillingSchedulerEnabled()).thenReturn(Boolean.TRUE);
+ when(configuration.isAuditEnabled()).thenReturn(Boolean.TRUE);
+ when(projectService.isAnyProjectAssigned(any(UserInfo.class))).thenReturn(Boolean.TRUE);
+
+ HealthStatusPageDTO actualHeathStatus = infoService.getHeathStatus(getUserInfo());
+
+ assertEquals("HealthStatusPageDTO should be equal", getHealthStatusPageDTO(), actualHeathStatus);
+ verify(projectService).isAnyProjectAssigned(getUserInfo());
+ verify(configuration).isBillingSchedulerEnabled();
+ verify(configuration).isAuditEnabled();
+ verifyNoMoreInteractions(configuration, projectService);
+ }
+
+ @Test
+ public void getInfrastructureMetaInfo() {
+ Manifests.DEFAULT.put("GIT-Branch", "branch");
+ Manifests.DEFAULT.put("GIT-Commit", "commit");
+ Manifests.DEFAULT.put("DLab-Version", "version");
+
+ InfrastructureMetaInfoDTO actualInfrastructureMetaInfo = infoService.getInfrastructureMetaInfo();
+
+ assertEquals("InfrastructureMetaInfoDTO should be equal", getInfrastructureMetaInfoDTO(), actualInfrastructureMetaInfo);
+ }
+
+ private InfrastructureMetaInfoDTO getInfrastructureMetaInfoDTO() {
+ return InfrastructureMetaInfoDTO.builder()
+ .branch("branch")
+ .commit("commit")
+ .version("version")
+ .releaseNotes("https://github.com/apache/incubator-dlab/blob/branch/RELEASE_NOTES.md")
+ .build();
+ }
+
+ private HealthStatusPageDTO getHealthStatusPageDTO() {
+ return HealthStatusPageDTO.builder()
+ .status("ok")
+ .listResources(Collections.emptyList())
+ .billingEnabled(Boolean.TRUE)
+ .auditEnabled(Boolean.TRUE)
+ .projectAdmin(Boolean.FALSE)
+ .admin(Boolean.FALSE)
+ .projectAssigned(Boolean.TRUE)
+ .bucketBrowser(HealthStatusPageDTO.BucketBrowser.builder()
+ .view(Boolean.TRUE)
+ .upload(Boolean.TRUE)
+ .download(Boolean.TRUE)
+ .delete(Boolean.TRUE)
+ .build())
+ .build();
+ }
+
+ private List<ProjectInfrastructureInfo> getProjectInfrastructureInfo() {
+ List<ProjectInfrastructureInfo> objects = new ArrayList<>();
+ objects.add(ProjectInfrastructureInfo.builder()
+ .project(PROJECT)
+ .billingQuoteUsed(10)
+ .shared(Collections.singletonMap(ENDPOINT_NAME, Collections.emptyMap()))
+ .exploratory(getUserInstanceDTOs())
+ .exploratoryBilling(Collections.singletonList(getReport()))
+ .endpoints(Collections.singletonList(getEndpointDTO()))
+ .build());
+ return objects;
+ }
+
+ private List<ProjectInfrastructureInfo> getAwsProjectInfrastructureInfo() {
+ List<ProjectInfrastructureInfo> objects = new ArrayList<>();
+ objects.add(ProjectInfrastructureInfo.builder()
+ .project(PROJECT)
+ .billingQuoteUsed(10)
+ .shared(Collections.singletonMap(ENDPOINT_NAME, getAwsEdgeInfo()))
+ .exploratory(getUserInstanceDTOs())
+ .exploratoryBilling(Collections.singletonList(getReport()))
+ .endpoints(Collections.singletonList(getEndpointDTO()))
+ .build());
+ return objects;
+ }
+
+ private List<ProjectInfrastructureInfo> getAzureProjectInfrastructureInfo() {
+ List<ProjectInfrastructureInfo> objects = new ArrayList<>();
+ objects.add(ProjectInfrastructureInfo.builder()
+ .project(PROJECT)
+ .billingQuoteUsed(10)
+ .shared(Collections.singletonMap(ENDPOINT_NAME, getAzureEdgeInfo()))
+ .exploratory(getUserInstanceDTOs())
+ .exploratoryBilling(Collections.singletonList(getReport()))
+ .endpoints(Collections.singletonList(getEndpointDTO()))
+ .build());
+ return objects;
+ }
+
+ private List<ProjectInfrastructureInfo> getGcpProjectInfrastructureInfo() {
+ List<ProjectInfrastructureInfo> objects = new ArrayList<>();
+ objects.add(ProjectInfrastructureInfo.builder()
+ .project(PROJECT)
+ .billingQuoteUsed(10)
+ .shared(Collections.singletonMap(ENDPOINT_NAME, getGcpEdgeInfo()))
+ .exploratory(getUserInstanceDTOs())
+ .exploratoryBilling(Collections.singletonList(getReport()))
+ .endpoints(Collections.singletonList(getEndpointDTO()))
+ .build());
+ return objects;
+ }
+
+ private Map<String, String> getAwsEdgeInfo() {
+ HashMap<String, String> edge = new HashMap<>();
+ edge.put("status", "running");
+ edge.put("edge_node_ip", "publicIp");
+ edge.put("user_own_bicket_name", "ownBucketName");
+ edge.put("shared_bucket_name", "sharedBucketName");
+ return edge;
+ }
+
+ private Map<String, String> getAzureEdgeInfo() {
+ HashMap<String, String> edge = new HashMap<>();
+ edge.put("status", "running");
+ edge.put("edge_node_ip", "publicIp");
+ edge.put("user_container_name", "userContainerName");
+ edge.put("shared_container_name", "sharedContainerName");
+ edge.put("user_storage_account_name", "userStorageAccountName");
+ edge.put("shared_storage_account_name", "sharedStorageAccountName");
+ edge.put("datalake_name", "dataLakeName");
+ edge.put("datalake_user_directory_name", "dataLakeDirectoryName");
+ edge.put("datalake_shared_directory_name", "dataLakeSharedDirectoryName");
+ return edge;
+ }
+
+ private Map<String, String> getGcpEdgeInfo() {
+ HashMap<String, String> edge = new HashMap<>();
+ edge.put("status", "running");
+ edge.put("edge_node_ip", "publicIp");
+ edge.put("user_own_bucket_name", "ownBucketName");
+ edge.put("shared_bucket_name", "sharedBucketName");
+ return edge;
+ }
+
+ private ProjectDTO getProjectDTO() {
+ return ProjectDTO.builder()
+ .name(PROJECT)
+ .endpoints(Collections.singletonList(new ProjectEndpointDTO(ENDPOINT_NAME, UserInstanceStatus.RUNNING, null)))
+ .build();
+ }
+
+ private ProjectDTO getAwsProjectDTO() {
+ EdgeInfoAws edgeInfoAws = new EdgeInfoAws();
+ edgeInfoAws.setPublicIp("publicIp");
+ edgeInfoAws.setUserOwnBucketName("ownBucketName");
+ edgeInfoAws.setSharedBucketName("sharedBucketName");
+
+ return ProjectDTO.builder()
+ .name(PROJECT)
+ .endpoints(Collections.singletonList(new ProjectEndpointDTO(ENDPOINT_NAME, UserInstanceStatus.RUNNING, edgeInfoAws)))
+ .build();
+ }
+
+ private ProjectDTO getAzureProjectDTO() {
+ EdgeInfoAzure edgeInfoAzure = new EdgeInfoAzure();
+ edgeInfoAzure.setPublicIp("publicIp");
+ edgeInfoAzure.setUserContainerName("userContainerName");
+ edgeInfoAzure.setSharedContainerName("sharedContainerName");
+ edgeInfoAzure.setUserStorageAccountName("userStorageAccountName");
+ edgeInfoAzure.setSharedStorageAccountName("sharedStorageAccountName");
+ edgeInfoAzure.setDataLakeName("dataLakeName");
+ edgeInfoAzure.setDataLakeDirectoryName("dataLakeDirectoryName");
+ edgeInfoAzure.setDataLakeSharedDirectoryName("dataLakeSharedDirectoryName");
+
+ return ProjectDTO.builder()
+ .name(PROJECT)
+ .endpoints(Collections.singletonList(new ProjectEndpointDTO(ENDPOINT_NAME, UserInstanceStatus.RUNNING, edgeInfoAzure)))
+ .build();
+ }
+
+ private ProjectDTO getGcpProjectDTO() {
+ EdgeInfoGcp edgeInfoGcp = new EdgeInfoGcp();
+ edgeInfoGcp.setPublicIp("publicIp");
+ edgeInfoGcp.setUserOwnBucketName("ownBucketName");
+ edgeInfoGcp.setSharedBucketName("sharedBucketName");
+
+ return ProjectDTO.builder()
+ .name(PROJECT)
+ .endpoints(Collections.singletonList(new ProjectEndpointDTO(ENDPOINT_NAME, UserInstanceStatus.RUNNING, edgeInfoGcp)))
+ .build();
+ }
+
+ private List<UserInstanceDTO> getUserInstanceDTOs() {
+ return Collections.singletonList(
+ new UserInstanceDTO().withUser(USER).withProject(PROJECT).withExploratoryName(EXPLORATORY_NAME).withEndpoint(ENDPOINT_NAME)
+ .withResources(Collections.singletonList(getCompute()))
+ );
+ }
+
+ private UserComputationalResource getCompute() {
+ UserComputationalResource resource = new UserComputationalResource();
+ resource.setComputationalName(COMPUTE_NAME);
+ resource.setImageName(DataEngineType.SPARK_STANDALONE.getName());
+
+ return resource;
+ }
+
+ private BillingReport getReport() {
+ BillingReportLine line1 = BillingReportLine.builder().cost(1.0).user(USER).resourceType(BillingResourceType.EXPLORATORY).project(PROJECT).endpoint(ENDPOINT_NAME)
+ .resourceName(EXPLORATORY_NAME).currency(CURRENCY).build();
+ BillingReportLine line2 = BillingReportLine.builder().cost(1.0).user(USER).resourceType(BillingResourceType.COMPUTATIONAL).project(PROJECT).endpoint(ENDPOINT_NAME)
+ .resourceName(COMPUTE_NAME).exploratoryName(EXPLORATORY_NAME).currency(CURRENCY).build();
+ List<BillingReportLine> billingReportLines = Arrays.asList(line1, line2);
+
+ return BillingReport.builder()
+ .name(EXPLORATORY_NAME)
+ .reportLines(billingReportLines)
+ .totalCost(2.0)
+ .currency(CURRENCY)
+ .build();
+ }
+}
\ No newline at end of file
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@dlab.apache.org
For additional commands, e-mail: commits-help@dlab.apache.org