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/09/16 08:00:45 UTC

[incubator-dlab] branch DLAB-927 updated: DLAB-927 added possibility to use multiple endpoints per project

This is an automated email from the ASF dual-hosted git repository.

bhliva pushed a commit to branch DLAB-927
in repository https://gitbox.apache.org/repos/asf/incubator-dlab.git


The following commit(s) were added to refs/heads/DLAB-927 by this push:
     new d850ed0  DLAB-927 added possibility to use multiple endpoints per project
d850ed0 is described below

commit d850ed06fd7a5f1c7f802bcf0b04d92237499b4c
Author: bhliva <bo...@epam.com>
AuthorDate: Mon Sep 16 11:00:32 2019 +0300

    DLAB-927 added possibility to use multiple endpoints per project
---
 .../epam/dlab/backendapi/dao/EndpointDAOImpl.java  |  4 +-
 .../epam/dlab/backendapi/dao/ExploratoryDAO.java   |  3 +-
 .../com/epam/dlab/backendapi/dao/ProjectDAO.java   |  4 +-
 .../epam/dlab/backendapi/dao/ProjectDAOImpl.java   |  7 ++--
 .../dlab/backendapi/resources/ProjectResource.java | 13 +++---
 .../resources/callback/ProjectCallback.java        |  6 +--
 .../backendapi/service/ExploratoryService.java     |  3 +-
 .../dlab/backendapi/service/ProjectService.java    |  4 +-
 .../service/impl/EnvironmentServiceImpl.java       | 20 +++++----
 .../service/impl/ExploratoryServiceImpl.java       | 16 +++----
 .../service/impl/ProjectServiceImpl.java           | 49 ++++++++++++++--------
 .../service/impl/ComputationalServiceImplTest.java | 35 ++++++++++++----
 .../service/impl/EdgeServiceImplTest.java          |  2 +-
 .../service/impl/ExploratoryServiceImplTest.java   | 24 ++++++++---
 .../service/impl/GitCredentialServiceImplTest.java | 12 +++++-
 .../InfrastructureTemplateServiceBaseTest.java     | 37 ++++++++++------
 .../service/impl/LibraryServiceImplTest.java       | 24 +++++++++--
 17 files changed, 178 insertions(+), 85 deletions(-)

diff --git a/services/self-service/src/main/java/com/epam/dlab/backendapi/dao/EndpointDAOImpl.java b/services/self-service/src/main/java/com/epam/dlab/backendapi/dao/EndpointDAOImpl.java
index 413d06d..a614773 100644
--- a/services/self-service/src/main/java/com/epam/dlab/backendapi/dao/EndpointDAOImpl.java
+++ b/services/self-service/src/main/java/com/epam/dlab/backendapi/dao/EndpointDAOImpl.java
@@ -6,7 +6,7 @@ import org.bson.conversions.Bson;
 import java.util.List;
 import java.util.Optional;
 
-import static com.mongodb.client.model.Filters.regex;
+import static com.mongodb.client.model.Filters.eq;
 
 public class EndpointDAOImpl extends BaseDAO implements EndpointDAO {
 
@@ -33,6 +33,6 @@ public class EndpointDAOImpl extends BaseDAO implements EndpointDAO {
 	}
 
 	private Bson endpointCondition(String name) {
-		return regex("name", "^" + name, "i");
+		return eq("name", name);
 	}
 }
diff --git a/services/self-service/src/main/java/com/epam/dlab/backendapi/dao/ExploratoryDAO.java b/services/self-service/src/main/java/com/epam/dlab/backendapi/dao/ExploratoryDAO.java
index bda1d6a..ca11b9d 100644
--- a/services/self-service/src/main/java/com/epam/dlab/backendapi/dao/ExploratoryDAO.java
+++ b/services/self-service/src/main/java/com/epam/dlab/backendapi/dao/ExploratoryDAO.java
@@ -204,12 +204,13 @@ public class ExploratoryDAO extends BaseDAO {
 				false);
 	}
 
-	public List<UserInstanceDTO> fetchProjectExploratoriesWhereStatusNotIn(String project,
+	public List<UserInstanceDTO> fetchProjectExploratoriesWhereStatusNotIn(String project, String endpoint,
 																		   UserInstanceStatus... statuses) {
 		final List<String> statusList = statusList(statuses);
 		return getUserInstances(
 				and(
 						eq(PROJECT, project),
+						eq("endpoint", endpoint),
 						not(in(STATUS, statusList))
 				),
 				false);
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 1bc806e..0a2216a 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
@@ -2,7 +2,6 @@ package com.epam.dlab.backendapi.dao;
 
 import com.epam.dlab.auth.UserInfo;
 import com.epam.dlab.backendapi.domain.ProjectDTO;
-import com.epam.dlab.backendapi.domain.UpdateProjectDTO;
 import com.epam.dlab.dto.UserInstanceStatus;
 import com.epam.dlab.dto.base.edge.EdgeInfo;
 
@@ -20,13 +19,14 @@ public interface ProjectDAO {
 	void create(ProjectDTO projectDTO);
 
 	void updateStatus(String projectName, ProjectDTO.Status status);
+
 	void updateEdgeStatus(String projectName, String endpoint, UserInstanceStatus status);
 
 	void updateEdgeInfo(String projectName, String endpointName, EdgeInfo edgeInfo);
 
 	Optional<ProjectDTO> get(String name);
 
-	boolean update(UpdateProjectDTO projectDTO);
+	boolean update(ProjectDTO projectDTO);
 
 	void remove(String name);
 
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 7da6e15..bc9db38 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
@@ -2,7 +2,6 @@ package com.epam.dlab.backendapi.dao;
 
 import com.epam.dlab.auth.UserInfo;
 import com.epam.dlab.backendapi.domain.ProjectDTO;
-import com.epam.dlab.backendapi.domain.UpdateProjectDTO;
 import com.epam.dlab.dto.UserInstanceStatus;
 import com.epam.dlab.dto.base.edge.EdgeInfo;
 import com.google.common.collect.Iterables;
@@ -16,6 +15,7 @@ import java.util.Collections;
 import java.util.List;
 import java.util.Optional;
 import java.util.Set;
+import java.util.stream.Collectors;
 
 import static com.mongodb.client.model.Filters.*;
 
@@ -86,10 +86,11 @@ public class ProjectDAOImpl extends BaseDAO implements ProjectDAO {
 	}
 
 	@Override
-	public boolean update(UpdateProjectDTO projectDTO) {
+	public boolean update(ProjectDTO projectDTO) {
 		BasicDBObject updateProject = new BasicDBObject();
 		updateProject.put(GROUPS, projectDTO.getGroups());
-		updateProject.put(ENDPOINTS, projectDTO.getEndpoints());
+		updateProject.put(ENDPOINTS,
+				projectDTO.getEndpoints().stream().map(this::convertToBson).collect(Collectors.toList()));
 		return updateOne(PROJECTS_COLLECTION, projectCondition(projectDTO.getName()),
 				new Document(SET, updateProject)).getMatchedCount() > 0L;
 	}
diff --git a/services/self-service/src/main/java/com/epam/dlab/backendapi/resources/ProjectResource.java b/services/self-service/src/main/java/com/epam/dlab/backendapi/resources/ProjectResource.java
index 1df46d9..59251c6 100644
--- a/services/self-service/src/main/java/com/epam/dlab/backendapi/resources/ProjectResource.java
+++ b/services/self-service/src/main/java/com/epam/dlab/backendapi/resources/ProjectResource.java
@@ -174,7 +174,7 @@ public class ProjectResource {
 	@PUT
 	@RolesAllowed("/api/project")
 	public Response updateProject(@Parameter(hidden = true) @Auth UserInfo userInfo, UpdateProjectDTO projectDTO) {
-		projectService.update(projectDTO);
+		projectService.update(userInfo, projectDTO);
 		return Response.ok().build();
 	}
 
@@ -185,14 +185,13 @@ public class ProjectResource {
 					content = @Content(mediaType = MediaType.APPLICATION_JSON,
 							schema = @Schema(implementation = ErrorDTO.class)))
 	})
-	@DELETE
-	@Path("{name}")
+	@POST
+	@Path("terminate")
 	@RolesAllowed("/api/project")
-	public Response removeProject(
+	public Response removeProjectEndpoint(
 			@Parameter(hidden = true) @Auth UserInfo userInfo,
-			@Parameter(description = "Project name")
-			@PathParam("name") String name) {
-		projectService.terminate(userInfo, name);
+			ProjectActionFormDTO projectActionDTO) {
+		projectService.terminateEndpoint(userInfo, projectActionDTO.getEndpoint(), projectActionDTO.getProjectName());
 		return Response.ok().build();
 	}
 
diff --git a/services/self-service/src/main/java/com/epam/dlab/backendapi/resources/callback/ProjectCallback.java b/services/self-service/src/main/java/com/epam/dlab/backendapi/resources/callback/ProjectCallback.java
index b349f08..e5e9f93 100644
--- a/services/self-service/src/main/java/com/epam/dlab/backendapi/resources/callback/ProjectCallback.java
+++ b/services/self-service/src/main/java/com/epam/dlab/backendapi/resources/callback/ProjectCallback.java
@@ -42,15 +42,15 @@ public class ProjectCallback {
 		if (UserInstanceStatus.RUNNING == status && Objects.nonNull(projectResult.getEdgeInfo())) {
 			projectDAO.updateEdgeInfo(projectName, projectResult.getEndpointName(), projectResult.getEdgeInfo());
 		} else {
-			updateExploratoriesStatusIfNeeded(status, projectResult.getProjectName());
+			updateExploratoriesStatusIfNeeded(status, projectResult.getProjectName(), projectResult.getEndpointName());
 			projectDAO.updateEdgeStatus(projectName, projectResult.getEndpointName(), status);
 		}
 		return Response.ok().build();
 	}
 
-	private void updateExploratoriesStatusIfNeeded(UserInstanceStatus status, String projectName) {
+	private void updateExploratoriesStatusIfNeeded(UserInstanceStatus status, String projectName, String endpoint) {
 		if (UserInstanceStatus.TERMINATED == status) {
-			exploratoryService.updateProjectExploratoryStatuses(projectName, UserInstanceStatus.TERMINATED);
+			exploratoryService.updateProjectExploratoryStatuses(projectName, endpoint, UserInstanceStatus.TERMINATED);
 		}
 	}
 }
diff --git a/services/self-service/src/main/java/com/epam/dlab/backendapi/service/ExploratoryService.java b/services/self-service/src/main/java/com/epam/dlab/backendapi/service/ExploratoryService.java
index 2dec798..76956c6 100644
--- a/services/self-service/src/main/java/com/epam/dlab/backendapi/service/ExploratoryService.java
+++ b/services/self-service/src/main/java/com/epam/dlab/backendapi/service/ExploratoryService.java
@@ -40,7 +40,8 @@ public interface ExploratoryService {
 	String create(UserInfo userInfo, Exploratory exploratory, String project);
 
 	void updateExploratoryStatuses(String user, UserInstanceStatus status);
-	void updateProjectExploratoryStatuses(String project, UserInstanceStatus status);
+
+	void updateProjectExploratoryStatuses(String project, String endpoint, UserInstanceStatus status);
 
 	void updateExploratoriesReuploadKeyFlag(String user, boolean reuploadKeyRequired,
 											UserInstanceStatus... exploratoryStatuses);
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 c2b407b..50eaede 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
@@ -17,13 +17,13 @@ public interface ProjectService {
 
 	ProjectDTO get(String name);
 
-	void terminate(UserInfo userInfo, String name);
+	void terminateEndpoint(UserInfo userInfo, String endpoint, String name);
 
 	void start(UserInfo userInfo, String endpoint, String name);
 
 	void stop(UserInfo userInfo, String endpoint, String name);
 
-	void update(UpdateProjectDTO projectDTO);
+	void update(UserInfo userInfo, UpdateProjectDTO projectDTO);
 
 	void updateBudget(String project, Integer budget);
 
diff --git a/services/self-service/src/main/java/com/epam/dlab/backendapi/service/impl/EnvironmentServiceImpl.java b/services/self-service/src/main/java/com/epam/dlab/backendapi/service/impl/EnvironmentServiceImpl.java
index 2e101d8..700c4ee 100644
--- a/services/self-service/src/main/java/com/epam/dlab/backendapi/service/impl/EnvironmentServiceImpl.java
+++ b/services/self-service/src/main/java/com/epam/dlab/backendapi/service/impl/EnvironmentServiceImpl.java
@@ -37,7 +37,10 @@ import com.google.inject.Inject;
 import com.google.inject.Singleton;
 import lombok.extern.slf4j.Slf4j;
 
-import java.util.*;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.List;
+import java.util.Set;
 import java.util.stream.Stream;
 
 import static com.epam.dlab.backendapi.resources.dto.UserDTO.Status.ACTIVE;
@@ -223,19 +226,18 @@ public class EnvironmentServiceImpl implements EnvironmentService {
 	private List<UserResourceInfo> getProjectEnv(ProjectDTO projectDTO, List<UserInstanceDTO> allInstances) {
 		final Stream<UserResourceInfo> userResources = allInstances.stream()
 				.filter(instance -> instance.getProject().equals(projectDTO.getName())).map(this::toUserResourceInfo);
-		/*if (projectDTO.getEndpointEdgeInfo() != null) {
-			final Stream<UserResourceInfo> edges = projectDTO.getEndpointEdgeInfo().values()
+		if (projectDTO.getEndpoints() != null) {
+			final Stream<UserResourceInfo> edges = projectDTO.getEndpoints()
 					.stream()
-					.map(ei -> new UserResourceInfo().withResourceType(ResourceEnum.EDGE_NODE)
-							.withResourceStatus(ProjectDTO.Status.from(projectDTO.getStatus()).toString())
+					.map(e -> new UserResourceInfo().withResourceType(ResourceEnum.EDGE_NODE)
+							.withResourceStatus(e.getStatus().toString())
 							.withProject(projectDTO.getName())
-							.withIp(ei.getPublicIp()));
-			return Stream.concat(Stream.of(edgeResource), userResources)
+							.withIp(e.getEdgeInfo() != null ? e.getEdgeInfo().getIp() : null));
+			return Stream.concat(edges, userResources)
 					.collect(toList());
 		} else {
 			return userResources.collect(toList());
-		}*/
-		return Collections.emptyList();
+		}
 	}
 
 	private UserResourceInfo toUserResourceInfo(UserInstanceDTO userInstance) {
diff --git a/services/self-service/src/main/java/com/epam/dlab/backendapi/service/impl/ExploratoryServiceImpl.java b/services/self-service/src/main/java/com/epam/dlab/backendapi/service/impl/ExploratoryServiceImpl.java
index 1fb1a9e..9c5594b 100644
--- a/services/self-service/src/main/java/com/epam/dlab/backendapi/service/impl/ExploratoryServiceImpl.java
+++ b/services/self-service/src/main/java/com/epam/dlab/backendapi/service/impl/ExploratoryServiceImpl.java
@@ -132,8 +132,8 @@ public class ExploratoryServiceImpl implements ExploratoryService {
 	}
 
 	@Override
-	public void updateProjectExploratoryStatuses(String project, UserInstanceStatus status) {
-		exploratoryDAO.fetchProjectExploratoriesWhereStatusNotIn(project, TERMINATED, FAILED)
+	public void updateProjectExploratoryStatuses(String project, String endpoint, UserInstanceStatus status) {
+		exploratoryDAO.fetchProjectExploratoriesWhereStatusNotIn(project, endpoint, TERMINATED, FAILED)
 				.forEach(ui -> updateExploratoryStatus(ui.getExploratoryName(), status, ui.getUser()));
 	}
 
@@ -175,8 +175,9 @@ public class ExploratoryServiceImpl implements ExploratoryService {
 				exploratoryName);
 		final ExploratoryReconfigureSparkClusterActionDTO updateClusterConfigDTO =
 				requestBuilder.newClusterConfigUpdate(userInfo, userInstanceDTO, config);
-		final String uuid = provisioningService.post(endpointService.get(userInstanceDTO.getEndpoint()).getUrl() + EXPLORATORY_RECONFIGURE_SPARK, token, updateClusterConfigDTO,
-				String.class);
+		final String uuid =
+				provisioningService.post(endpointService.get(userInstanceDTO.getEndpoint()).getUrl() + EXPLORATORY_RECONFIGURE_SPARK, token, updateClusterConfigDTO,
+						String.class);
 		requestId.put(userName, uuid);
 		exploratoryDAO.updateExploratoryFields(new ExploratoryStatusDTO()
 				.withUser(userName)
@@ -240,9 +241,10 @@ public class ExploratoryServiceImpl implements ExploratoryService {
 			updateExploratoryStatus(exploratoryName, status, userInfo.getName());
 
 			UserInstanceDTO userInstance = exploratoryDAO.fetchExploratoryFields(userInfo.getName(), exploratoryName);
-			final String uuid = provisioningService.post(endpointService.get(userInstance.getEndpoint()).getUrl() + action,
-					userInfo.getAccessToken(),
-					getExploratoryActionDto(userInfo, status, userInstance), String.class);
+			final String uuid =
+					provisioningService.post(endpointService.get(userInstance.getEndpoint()).getUrl() + action,
+							userInfo.getAccessToken(),
+							getExploratoryActionDto(userInfo, status, userInstance), String.class);
 			requestId.put(userInfo.getName(), uuid);
 			return uuid;
 		} catch (Exception t) {
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 ac6c63d..d9496cc 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
@@ -6,6 +6,7 @@ import com.epam.dlab.backendapi.annotation.Project;
 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.domain.ProjectEndpointDTO;
 import com.epam.dlab.backendapi.domain.RequestId;
 import com.epam.dlab.backendapi.domain.UpdateProjectDTO;
 import com.epam.dlab.backendapi.service.EndpointService;
@@ -21,9 +22,11 @@ import com.google.inject.Inject;
 import com.google.inject.name.Named;
 import lombok.extern.slf4j.Slf4j;
 
+import java.util.HashSet;
 import java.util.List;
 import java.util.Set;
 import java.util.function.Supplier;
+import java.util.stream.Collectors;
 
 import static java.util.stream.Collectors.toSet;
 import static java.util.stream.Stream.concat;
@@ -92,13 +95,10 @@ public class ProjectServiceImpl implements ProjectService {
 	}
 
 	@Override
-	public void terminate(UserInfo userInfo, String name) {
-		get(name).getEndpoints().forEach(endpoint -> projectActionOnCloud(userInfo, name, TERMINATE_PRJ_API,
-				endpoint.getName()));
-
-		exploratoryService.updateProjectExploratoryStatuses(name, UserInstanceStatus.TERMINATING);
-		projectDAO.updateStatus(name, ProjectDTO.Status.DELETING);
-
+	public void terminateEndpoint(UserInfo userInfo, String endpoint, String name) {
+		projectActionOnCloud(userInfo, name, TERMINATE_PRJ_API, endpoint);
+		projectDAO.updateEdgeStatus(name, endpoint, UserInstanceStatus.TERMINATING);
+		exploratoryService.updateProjectExploratoryStatuses(name, endpoint, UserInstanceStatus.TERMINATING);
 	}
 
 	@BudgetLimited
@@ -115,10 +115,20 @@ public class ProjectServiceImpl implements ProjectService {
 	}
 
 	@Override
-	public void update(UpdateProjectDTO projectDTO) {
-		if (!projectDAO.update(projectDTO)) {
-			throw projectNotFound().get();
-		}
+	public void update(UserInfo userInfo, UpdateProjectDTO projectDTO) {
+		final ProjectDTO project = projectDAO.get(projectDTO.getName()).orElseThrow(projectNotFound());
+		final Set<String> endpoints = project.getEndpoints()
+				.stream()
+				.map(ProjectEndpointDTO::getName)
+				.collect(toSet());
+		final HashSet<String> newEndpoints = new HashSet<>(projectDTO.getEndpoints());
+		newEndpoints.removeAll(endpoints);
+		final List<ProjectEndpointDTO> endpointsToBeCreated = newEndpoints.stream()
+				.map(e -> new ProjectEndpointDTO(e, UserInstanceStatus.CREATING, null))
+				.collect(Collectors.toList());
+		project.getEndpoints().addAll(endpointsToBeCreated);
+		projectDAO.update(project);
+		endpointsToBeCreated.forEach(e -> createEndpoint(userInfo, project, e.getName()));
 	}
 
 	@Override
@@ -141,19 +151,22 @@ public class ProjectServiceImpl implements ProjectService {
 
 	private void createProjectOnCloud(UserInfo user, ProjectDTO projectDTO) {
 		try {
-			projectDTO.getEndpoints().forEach(endpoint -> {
-				String uuid =
-						provisioningService.post(endpointService.get(endpoint.getName()).getUrl() + CREATE_PRJ_API,
-								user.getAccessToken(),
-								requestBuilder.newProjectCreate(user, projectDTO, endpoint.getName()), String.class);
-				requestId.put(user.getName(), uuid);
-			});
+			projectDTO.getEndpoints().forEach(endpoint -> createEndpoint(user, projectDTO,
+					endpoint.getName()));
 		} catch (Exception e) {
 			log.error("Can not create project due to: {}", e.getMessage());
 			projectDAO.updateStatus(projectDTO.getName(), ProjectDTO.Status.FAILED);
 		}
 	}
 
+	private void createEndpoint(UserInfo user, ProjectDTO projectDTO, String endpointName) {
+		String uuid =
+				provisioningService.post(endpointService.get(endpointName).getUrl() + CREATE_PRJ_API,
+						user.getAccessToken(),
+						requestBuilder.newProjectCreate(user, projectDTO, endpointName), String.class);
+		requestId.put(user.getName(), uuid);
+	}
+
 
 	private void projectActionOnCloud(UserInfo user, String projectName, String provisioningApiUri, String endpoint) {
 		try {
diff --git a/services/self-service/src/test/java/com/epam/dlab/backendapi/service/impl/ComputationalServiceImplTest.java b/services/self-service/src/test/java/com/epam/dlab/backendapi/service/impl/ComputationalServiceImplTest.java
index 78e8459..376b458 100644
--- a/services/self-service/src/test/java/com/epam/dlab/backendapi/service/impl/ComputationalServiceImplTest.java
+++ b/services/self-service/src/test/java/com/epam/dlab/backendapi/service/impl/ComputationalServiceImplTest.java
@@ -23,9 +23,11 @@ import com.epam.dlab.auth.UserInfo;
 import com.epam.dlab.backendapi.SelfServiceApplicationConfiguration;
 import com.epam.dlab.backendapi.dao.ComputationalDAO;
 import com.epam.dlab.backendapi.dao.ExploratoryDAO;
+import com.epam.dlab.backendapi.domain.EndpointDTO;
 import com.epam.dlab.backendapi.domain.RequestId;
 import com.epam.dlab.backendapi.resources.dto.ComputationalCreateFormDTO;
 import com.epam.dlab.backendapi.resources.dto.SparkStandaloneClusterCreateForm;
+import com.epam.dlab.backendapi.service.EndpointService;
 import com.epam.dlab.backendapi.service.TagService;
 import com.epam.dlab.backendapi.util.RequestBuilder;
 import com.epam.dlab.dto.SchedulerJobDTO;
@@ -99,6 +101,8 @@ public class ComputationalServiceImplTest {
 	private RequestId requestId;
 	@Mock
 	private TagService tagService;
+	@Mock
+	private EndpointService endpointService;
 
 	@InjectMocks
 	private ComputationalServiceImpl computationalService;
@@ -121,6 +125,7 @@ public class ComputationalServiceImplTest {
 
 	@Test
 	public void createSparkCluster() {
+		when(endpointService.get(anyString())).thenReturn(endpointDTO());
 		when(computationalDAO.addComputational(anyString(), anyString(),
 				any(SparkStandaloneClusterResource.class))).thenReturn(true);
 		when(exploratoryDAO.fetchExploratoryFields(anyString(), anyString())).thenReturn(userInstance);
@@ -144,12 +149,12 @@ public class ComputationalServiceImplTest {
 				refEq(userInfo), refEq(userInstance), refEq(sparkClusterCreateForm));
 
 		verify(provisioningService)
-				.post(ComputationalAPI.COMPUTATIONAL_CREATE_SPARK, TOKEN, compBaseMocked, String.class);
+				.post(endpointDTO().getUrl() + ComputationalAPI.COMPUTATIONAL_CREATE_SPARK, TOKEN, compBaseMocked,
+						String.class);
 
 		verify(requestId).put(USER, UUID);
 		verifyNoMoreInteractions(configuration, computationalDAO, requestBuilder, provisioningService, requestId);
 	}
-
 	@Test
 	public void createSparkClusterWhenResourceAlreadyExists() {
 		when(computationalDAO.addComputational(anyString(), anyString(),
@@ -218,6 +223,7 @@ public class ComputationalServiceImplTest {
 
 	@Test
 	public void terminateComputationalEnvironment() {
+		when(endpointService.get(anyString())).thenReturn(endpointDTO());
 		when(computationalDAO.updateComputationalStatus(any(ComputationalStatusDTO.class)))
 				.thenReturn(mock(UpdateResult.class));
 		String explId = "explId";
@@ -248,7 +254,7 @@ public class ComputationalServiceImplTest {
 		verify(requestBuilder).newComputationalTerminate(userInfo, EXPLORATORY_NAME, explId, COMP_NAME, compId,
 				DataEngineType.CLOUD_SERVICE, null);
 
-		verify(provisioningService).post(ComputationalAPI.COMPUTATIONAL_TERMINATE_CLOUD_SPECIFIC, TOKEN, ctDto,
+		verify(provisioningService).post(endpointDTO().getUrl() + ComputationalAPI.COMPUTATIONAL_TERMINATE_CLOUD_SPECIFIC, TOKEN, ctDto,
 				String.class);
 
 		verify(requestId).put(USER, UUID);
@@ -341,6 +347,7 @@ public class ComputationalServiceImplTest {
 
 	@Test
 	public void createDataEngineService() {
+		when(endpointService.get(anyString())).thenReturn(endpointDTO());
 		when(computationalDAO.addComputational(anyString(), anyString(), any(UserComputationalResource.class)))
 				.thenReturn(true);
 		when(exploratoryDAO.fetchExploratoryFields(anyString(), anyString())).thenReturn(userInstance);
@@ -364,7 +371,8 @@ public class ComputationalServiceImplTest {
 				refEq(userInfo), refEq(userInstance), any(ComputationalCreateFormDTO.class));
 
 		verify(provisioningService)
-				.post(ComputationalAPI.COMPUTATIONAL_CREATE_CLOUD_SPECIFIC, TOKEN, compBaseMocked, String.class);
+				.post(endpointDTO().getUrl() + ComputationalAPI.COMPUTATIONAL_CREATE_CLOUD_SPECIFIC, TOKEN,
+						compBaseMocked, String.class);
 
 		verify(requestId).put(USER, UUID);
 		verifyNoMoreInteractions(computationalDAO, exploratoryDAO, requestBuilder, provisioningService, requestId);
@@ -412,6 +420,7 @@ public class ComputationalServiceImplTest {
 
 	@Test
 	public void createDataEngineServiceWhenMethodNewComputationalCreateThrowsException() {
+		when(endpointService.get(anyString())).thenReturn(endpointDTO());
 		when(computationalDAO.addComputational(anyString(), anyString(), any(UserComputationalResource.class)))
 				.thenReturn(true);
 		when(exploratoryDAO.fetchExploratoryFields(anyString(), anyString())).thenReturn(userInstance);
@@ -444,6 +453,7 @@ public class ComputationalServiceImplTest {
 	public void stopSparkCluster() {
 		final UserInstanceDTO exploratory = getUserInstanceDto();
 		exploratory.setResources(singletonList(getUserComputationalResource(RUNNING, DOCKER_DLAB_DATAENGINE)));
+		when(endpointService.get(anyString())).thenReturn(endpointDTO());
 		when(exploratoryDAO.fetchExploratoryFields(anyString(), anyString(), anyBoolean())).thenReturn(exploratory);
 		when(computationalDAO.updateComputationalStatus(any(ComputationalStatusDTO.class)))
 				.thenReturn(mock(UpdateResult.class));
@@ -461,7 +471,8 @@ public class ComputationalServiceImplTest {
 		verify(exploratoryDAO).fetchExploratoryFields(USER, EXPLORATORY_NAME, true);
 		verify(requestBuilder).newComputationalStop(refEq(userInfo), refEq(exploratory), eq(COMP_NAME));
 		verify(provisioningService)
-				.post(eq("computational/stop/spark"), eq(TOKEN), refEq(computationalStopDTO), eq(String.class));
+				.post(eq(endpointDTO().getUrl() + "computational/stop/spark"), eq(TOKEN), refEq(computationalStopDTO),
+						eq(String.class));
 		verify(requestId).put(USER, "someUuid");
 		verifyNoMoreInteractions(computationalDAO, exploratoryDAO, requestBuilder,
 				provisioningService, requestId);
@@ -480,6 +491,7 @@ public class ComputationalServiceImplTest {
 
 	@Test
 	public void startSparkCluster() {
+		when(endpointService.get(anyString())).thenReturn(endpointDTO());
 		final UserInstanceDTO exploratory = getUserInstanceDto();
 		exploratory.setResources(singletonList(getUserComputationalResource(STOPPED, DOCKER_DLAB_DATAENGINE)));
 		when(exploratoryDAO.fetchExploratoryFields(anyString(), anyString(), anyBoolean())).thenReturn(exploratory);
@@ -499,7 +511,9 @@ public class ComputationalServiceImplTest {
 		verify(exploratoryDAO).fetchExploratoryFields(USER, EXPLORATORY_NAME, true);
 		verify(requestBuilder).newComputationalStart(refEq(userInfo), refEq(exploratory), eq(COMP_NAME));
 		verify(provisioningService)
-				.post(eq("computational/start/spark"), eq(TOKEN), refEq(computationalStartDTO), eq(String.class));
+				.post(eq(endpointDTO().getUrl() + "computational/start/spark"), eq(TOKEN),
+						refEq(computationalStartDTO),
+						eq(String.class));
 		verify(requestId).put(USER, "someUuid");
 		verifyNoMoreInteractions(computationalDAO, exploratoryDAO, requestBuilder,
 				provisioningService, requestId);
@@ -562,6 +576,7 @@ public class ComputationalServiceImplTest {
 
 	@Test
 	public void testUpdateSparkClusterConfig() {
+		when(endpointService.get(anyString())).thenReturn(endpointDTO());
 		final ComputationalClusterConfigDTO clusterConfigDTO = new ComputationalClusterConfigDTO();
 		final UserInstanceDTO userInstanceDto = getUserInstanceDto();
 		final List<ClusterConfig> config = Collections.singletonList(new ClusterConfig());
@@ -585,7 +600,8 @@ public class ComputationalServiceImplTest {
 				.withExploratoryName(EXPLORATORY_NAME)
 				.withComputationalName(COMP_NAME)
 				.withStatus(UserInstanceStatus.RECONFIGURING.toString()), "self"));
-		verify(provisioningService).post(eq("computational/spark/reconfigure"), eq(getUserInfo().getAccessToken()),
+		verify(provisioningService).post(eq(endpointDTO().getUrl() + "computational/spark/reconfigure"),
+				eq(getUserInfo().getAccessToken()),
 				refEq(new ComputationalClusterConfigDTO()), eq(String.class));
 
 	}
@@ -702,6 +718,11 @@ public class ComputationalServiceImplTest {
 				.build();
 	}
 
+	private EndpointDTO endpointDTO() {
+		return new EndpointDTO("test", "url", "", null);
+	}
+
+
 	private UserComputationalResource getUserComputationalResource(UserInstanceStatus status, String imageName) {
 		UserComputationalResource ucResource = new UserComputationalResource();
 		ucResource.setComputationalName(COMP_NAME);
diff --git a/services/self-service/src/test/java/com/epam/dlab/backendapi/service/impl/EdgeServiceImplTest.java b/services/self-service/src/test/java/com/epam/dlab/backendapi/service/impl/EdgeServiceImplTest.java
index 09784eb..6e47ca1 100644
--- a/services/self-service/src/test/java/com/epam/dlab/backendapi/service/impl/EdgeServiceImplTest.java
+++ b/services/self-service/src/test/java/com/epam/dlab/backendapi/service/impl/EdgeServiceImplTest.java
@@ -216,7 +216,7 @@ public class EdgeServiceImplTest {
 		try {
 			edgeService.terminate(userInfo);
 		} catch (DlabException e) {
-			assertEquals("Could not terminate EDGE node: Could not infrastructure/edge/terminate EDGE node : " +
+			assertEquals("Could not terminate EDGE node: " +
 					"Cannot create instance of resource class ", e.getMessage());
 		}
 		verify(keyDAO).getEdgeStatus(USER);
diff --git a/services/self-service/src/test/java/com/epam/dlab/backendapi/service/impl/ExploratoryServiceImplTest.java b/services/self-service/src/test/java/com/epam/dlab/backendapi/service/impl/ExploratoryServiceImplTest.java
index 6a4e771..aa02ccd 100644
--- a/services/self-service/src/test/java/com/epam/dlab/backendapi/service/impl/ExploratoryServiceImplTest.java
+++ b/services/self-service/src/test/java/com/epam/dlab/backendapi/service/impl/ExploratoryServiceImplTest.java
@@ -23,7 +23,9 @@ import com.epam.dlab.auth.UserInfo;
 import com.epam.dlab.backendapi.dao.ComputationalDAO;
 import com.epam.dlab.backendapi.dao.ExploratoryDAO;
 import com.epam.dlab.backendapi.dao.GitCredsDAO;
+import com.epam.dlab.backendapi.domain.EndpointDTO;
 import com.epam.dlab.backendapi.domain.RequestId;
+import com.epam.dlab.backendapi.service.EndpointService;
 import com.epam.dlab.backendapi.service.TagService;
 import com.epam.dlab.backendapi.util.RequestBuilder;
 import com.epam.dlab.dto.StatusEnvBaseDTO;
@@ -81,6 +83,8 @@ public class ExploratoryServiceImplTest {
 	private RequestId requestId;
 	@Mock
 	private TagService tagService;
+	@Mock
+	private EndpointService endpointService;
 
 	@InjectMocks
 	private ExploratoryServiceImpl exploratoryService;
@@ -96,6 +100,7 @@ public class ExploratoryServiceImplTest {
 
 	@Test
 	public void start() {
+		when(endpointService.get(anyString())).thenReturn(endpointDTO());
 		when(exploratoryDAO.updateExploratoryStatus(any(StatusEnvBaseDTO.class))).thenReturn(mock(UpdateResult.class));
 		when(exploratoryDAO.fetchExploratoryFields(anyString(), anyString())).thenReturn(userInstance);
 
@@ -120,7 +125,7 @@ public class ExploratoryServiceImplTest {
 
 		verify(exploratoryDAO).updateExploratoryStatus(refEq(statusEnvBaseDTO, "self"));
 		verify(exploratoryDAO).fetchExploratoryFields(USER, EXPLORATORY_NAME);
-		verify(provisioningService).post(exploratoryStart, TOKEN, egcuDto, String.class);
+		verify(provisioningService).post(endpointDTO().getUrl() + exploratoryStart, TOKEN, egcuDto, String.class);
 		verify(requestId).put(USER, UUID);
 		verifyNoMoreInteractions(exploratoryDAO, provisioningService, requestId);
 	}
@@ -147,6 +152,7 @@ public class ExploratoryServiceImplTest {
 
 	@Test
 	public void stop() {
+		when(endpointService.get(anyString())).thenReturn(endpointDTO());
 		when(exploratoryDAO.updateExploratoryStatus(any(StatusEnvBaseDTO.class))).thenReturn(mock(UpdateResult.class));
 		when(computationalDAO.updateComputationalStatusesForExploratory(any(StatusEnvBaseDTO.class))).thenReturn(1);
 		when(exploratoryDAO.fetchExploratoryFields(anyString(), anyString())).thenReturn(userInstance);
@@ -168,7 +174,7 @@ public class ExploratoryServiceImplTest {
 
 		verify(exploratoryDAO).updateExploratoryStatus(refEq(statusEnvBaseDTO, "self"));
 		verify(exploratoryDAO).fetchExploratoryFields(USER, EXPLORATORY_NAME);
-		verify(provisioningService).post(exploratoryStop, TOKEN, eaDto, String.class);
+		verify(provisioningService).post(endpointDTO().getUrl() + exploratoryStop, TOKEN, eaDto, String.class);
 		verify(computationalDAO).updateComputationalStatusesForExploratory(userInfo.getName(), EXPLORATORY_NAME,
 				UserInstanceStatus.STOPPING, UserInstanceStatus.TERMINATING, UserInstanceStatus.FAILED,
 				UserInstanceStatus.TERMINATED, UserInstanceStatus.STOPPED);
@@ -198,6 +204,7 @@ public class ExploratoryServiceImplTest {
 
 	@Test
 	public void terminate() {
+		when(endpointService.get(anyString())).thenReturn(endpointDTO());
 		when(exploratoryDAO.updateExploratoryStatus(any(StatusEnvBaseDTO.class))).thenReturn(mock(UpdateResult.class));
 		when(computationalDAO.updateComputationalStatusesForExploratory(any(StatusEnvBaseDTO.class))).thenReturn(1);
 		when(exploratoryDAO.fetchExploratoryFields(anyString(), anyString())).thenReturn(userInstance);
@@ -223,7 +230,7 @@ public class ExploratoryServiceImplTest {
 						.TERMINATING, UserInstanceStatus.TERMINATING, UserInstanceStatus.TERMINATED,
 				UserInstanceStatus.FAILED);
 		verify(requestBuilder).newExploratoryStop(userInfo, userInstance);
-		verify(provisioningService).post(exploratoryTerminate, TOKEN, eaDto, String.class);
+		verify(provisioningService).post(endpointDTO().getUrl() + exploratoryTerminate, TOKEN, eaDto, String.class);
 		verify(requestId).put(USER, UUID);
 		verifyNoMoreInteractions(exploratoryDAO, computationalDAO, requestBuilder, provisioningService, requestId);
 	}
@@ -250,6 +257,7 @@ public class ExploratoryServiceImplTest {
 
 	@Test
 	public void create() {
+		when(endpointService.get(anyString())).thenReturn(endpointDTO());
 		doNothing().when(exploratoryDAO).insertExploratory(any(UserInstanceDTO.class));
 		ExploratoryGitCredsDTO egcDto = new ExploratoryGitCredsDTO();
 		when(gitCredsDAO.findGitCreds(anyString())).thenReturn(egcDto);
@@ -272,7 +280,7 @@ public class ExploratoryServiceImplTest {
 		verify(exploratoryDAO).insertExploratory(userInstance);
 		verify(gitCredsDAO).findGitCreds(USER);
 		verify(requestBuilder).newExploratoryCreate(exploratory, userInfo, egcDto, Collections.emptyMap());
-		verify(provisioningService).post(exploratoryCreate, TOKEN, ecDto, String.class);
+		verify(provisioningService).post(endpointDTO().getUrl() + exploratoryCreate, TOKEN, ecDto, String.class);
 		verify(requestId).put(USER, UUID);
 		verifyNoMoreInteractions(exploratoryDAO, gitCredsDAO, requestBuilder, provisioningService, requestId);
 	}
@@ -308,6 +316,7 @@ public class ExploratoryServiceImplTest {
 
 	@Test
 	public void createWhenMethodNewExploratoryCreateThrowsException() {
+		when(endpointService.get(anyString())).thenReturn(endpointDTO());
 		doNothing().when(exploratoryDAO).insertExploratory(any(UserInstanceDTO.class));
 		ExploratoryGitCredsDTO egcDto = new ExploratoryGitCredsDTO();
 		when(gitCredsDAO.findGitCreds(anyString())).thenReturn(egcDto);
@@ -449,6 +458,7 @@ public class ExploratoryServiceImplTest {
 	@Test
 	public void testUpdateExploratoryClusterConfig() {
 
+		when(endpointService.get(anyString())).thenReturn(endpointDTO());
 		when(exploratoryDAO.fetchRunningExploratoryFields(anyString(), anyString())).thenReturn(getUserInstanceDto());
 		when(requestBuilder.newClusterConfigUpdate(any(UserInfo.class), any(UserInstanceDTO.class),
 				anyListOf(ClusterConfig.class))).thenReturn(new ExploratoryReconfigureSparkClusterActionDTO());
@@ -461,7 +471,7 @@ public class ExploratoryServiceImplTest {
 		verify(requestBuilder).newClusterConfigUpdate(refEq(getUserInfo()), refEq(getUserInstanceDto()),
 				refEq(singletonList(new ClusterConfig())));
 		verify(requestId).put(USER, UUID);
-		verify(provisioningService).post(eq("exploratory/reconfigure_spark"), eq(TOKEN),
+		verify(provisioningService).post(eq(endpointDTO().getUrl() + "exploratory/reconfigure_spark"), eq(TOKEN),
 				refEq(new ExploratoryReconfigureSparkClusterActionDTO(), "self"), eq(String.class));
 		verify(exploratoryDAO).updateExploratoryFields(refEq(new ExploratoryStatusDTO()
 				.withUser(USER)
@@ -542,4 +552,8 @@ public class ExploratoryServiceImplTest {
 				.withStatus(status);
 	}
 
+	private EndpointDTO endpointDTO() {
+		return new EndpointDTO("test", "url", "", null);
+	}
+
 }
diff --git a/services/self-service/src/test/java/com/epam/dlab/backendapi/service/impl/GitCredentialServiceImplTest.java b/services/self-service/src/test/java/com/epam/dlab/backendapi/service/impl/GitCredentialServiceImplTest.java
index 2029cea..f6191a1 100644
--- a/services/self-service/src/test/java/com/epam/dlab/backendapi/service/impl/GitCredentialServiceImplTest.java
+++ b/services/self-service/src/test/java/com/epam/dlab/backendapi/service/impl/GitCredentialServiceImplTest.java
@@ -22,7 +22,9 @@ package com.epam.dlab.backendapi.service.impl;
 import com.epam.dlab.auth.UserInfo;
 import com.epam.dlab.backendapi.dao.ExploratoryDAO;
 import com.epam.dlab.backendapi.dao.GitCredsDAO;
+import com.epam.dlab.backendapi.domain.EndpointDTO;
 import com.epam.dlab.backendapi.domain.RequestId;
+import com.epam.dlab.backendapi.service.EndpointService;
 import com.epam.dlab.backendapi.util.RequestBuilder;
 import com.epam.dlab.dto.UserInstanceDTO;
 import com.epam.dlab.dto.exploratory.ExploratoryGitCredsDTO;
@@ -56,6 +58,8 @@ public class GitCredentialServiceImplTest {
 	private RequestBuilder requestBuilder;
 	@Mock
 	private RequestId requestId;
+	@Mock
+	private EndpointService endpointService;
 
 	@InjectMocks
 	private GitCredentialServiceImpl gitCredentialService;
@@ -65,6 +69,7 @@ public class GitCredentialServiceImplTest {
 		String token = "token";
 		UserInfo userInfo = new UserInfo(USER, token);
 		doNothing().when(gitCredsDAO).updateGitCreds(anyString(), any(ExploratoryGitCredsDTO.class));
+		when(endpointService.get(anyString())).thenReturn(endpointDTO());
 
 		String exploratoryName = "explName";
 		UserInstanceDTO uiDto = new UserInstanceDTO().withExploratoryName(exploratoryName).withUser(USER);
@@ -85,7 +90,8 @@ public class GitCredentialServiceImplTest {
 		verify(gitCredsDAO).updateGitCreds(USER, egcDto);
 		verify(exploratoryDAO).fetchRunningExploratoryFields(USER);
 		verify(requestBuilder).newGitCredentialsUpdate(userInfo, uiDto, egcDto);
-		verify(provisioningService).post("exploratory/git_creds", token, egcuDto, String.class);
+		verify(provisioningService).post(endpointDTO().getUrl() + "exploratory/git_creds", token, egcuDto,
+				String.class);
 		verify(requestId).put(USER, uuid);
 		verifyNoMoreInteractions(gitCredsDAO, exploratoryDAO, requestBuilder, provisioningService, requestId);
 	}
@@ -160,4 +166,8 @@ public class GitCredentialServiceImplTest {
 		verify(gitCredsDAO).findGitCreds(USER, true);
 		verifyNoMoreInteractions(gitCredsDAO);
 	}
+
+	private EndpointDTO endpointDTO() {
+		return new EndpointDTO("test", "url", "", null);
+	}
 }
diff --git a/services/self-service/src/test/java/com/epam/dlab/backendapi/service/impl/InfrastructureTemplateServiceBaseTest.java b/services/self-service/src/test/java/com/epam/dlab/backendapi/service/impl/InfrastructureTemplateServiceBaseTest.java
index 907da6b..fdbacab 100644
--- a/services/self-service/src/test/java/com/epam/dlab/backendapi/service/impl/InfrastructureTemplateServiceBaseTest.java
+++ b/services/self-service/src/test/java/com/epam/dlab/backendapi/service/impl/InfrastructureTemplateServiceBaseTest.java
@@ -22,7 +22,9 @@ 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.SettingsDAO;
+import com.epam.dlab.backendapi.domain.EndpointDTO;
 import com.epam.dlab.backendapi.domain.ProjectDTO;
+import com.epam.dlab.backendapi.service.EndpointService;
 import com.epam.dlab.dto.base.computational.FullComputationalTemplate;
 import com.epam.dlab.dto.imagemetadata.ComputationalMetadataDTO;
 import com.epam.dlab.dto.imagemetadata.ComputationalResourceShapeDto;
@@ -51,6 +53,8 @@ public class InfrastructureTemplateServiceBaseTest {
 	private RESTService provisioningService;
 	@Mock
 	private ProjectDAO projectDAO;
+	@Mock
+	private EndpointService endpointService;
 
 	@InjectMocks
 	private InfrastructureTemplateServiceBaseChild infrastructureTemplateServiceBaseChild =
@@ -58,6 +62,7 @@ public class InfrastructureTemplateServiceBaseTest {
 
 	@Test
 	public void getExploratoryTemplates() {
+		when(endpointService.get(anyString())).thenReturn(endpointDTO());
 		ExploratoryMetadataDTO emDto1 = new ExploratoryMetadataDTO("someImage1");
 		HashMap<String, List<ComputationalResourceShapeDto>> shapes1 = new HashMap<>();
 		shapes1.put("Memory optimized", Arrays.asList(
@@ -76,8 +81,8 @@ public class InfrastructureTemplateServiceBaseTest {
 						"someRam2", 6)));
 		emDto2.setExploratoryEnvironmentShapes(shapes2);
 		List<ExploratoryMetadataDTO> expectedEmdDtoList = Arrays.asList(emDto1, emDto2);
-		/*when(projectDAO.get(anyString())).thenReturn(Optional.of(new ProjectDTO("project", Collections.emptySet(),
-				Collections.singleton("project"), null, null, null)));*/
+		when(projectDAO.get(anyString())).thenReturn(Optional.of(new ProjectDTO("project", Collections.emptySet(),
+				null, null, null, null)));
 		when(provisioningService.get(anyString(), anyString(), any())).thenReturn(expectedEmdDtoList.toArray());
 		when(settingsDAO.getConfOsFamily()).thenReturn("someConfOsFamily");
 
@@ -87,13 +92,14 @@ public class InfrastructureTemplateServiceBaseTest {
 		assertNotNull(actualEmdDtoList);
 		assertEquals(expectedEmdDtoList, actualEmdDtoList);
 
-		verify(provisioningService).get("docker/exploratory", "token", ExploratoryMetadataDTO[].class);
+		verify(provisioningService).get(endpointDTO().getUrl() + "docker/exploratory", "token", ExploratoryMetadataDTO[].class);
 		verify(settingsDAO, times(2)).getConfOsFamily();
 		verifyNoMoreInteractions(provisioningService, settingsDAO);
 	}
 
 	@Test
 	public void getExploratoryTemplatesWithException() {
+		when(endpointService.get(anyString())).thenReturn(endpointDTO());
 		doThrow(new DlabException("Could not load list of exploratory templates for user"))
 				.when(provisioningService).get(anyString(), anyString(), any());
 
@@ -103,20 +109,21 @@ public class InfrastructureTemplateServiceBaseTest {
 		} catch (DlabException e) {
 			assertEquals("Could not load list of exploratory templates for user", e.getMessage());
 		}
-		verify(provisioningService).get("docker/exploratory", "token", ExploratoryMetadataDTO[].class);
+		verify(provisioningService).get(endpointDTO().getUrl() + "docker/exploratory", "token", ExploratoryMetadataDTO[].class);
 		verifyNoMoreInteractions(provisioningService);
 	}
 
 	@Test
 	public void getComputationalTemplates() throws NoSuchFieldException, IllegalAccessException {
 
+		when(endpointService.get(anyString())).thenReturn(endpointDTO());
 		final ComputationalMetadataDTO computationalMetadataDTO = new ComputationalMetadataDTO("dataengine-service");
 		computationalMetadataDTO.setComputationResourceShapes(Collections.emptyMap());
 		List<ComputationalMetadataDTO> expectedCmdDtoList = Collections.singletonList(
 				computationalMetadataDTO
 		);
-		/*when(projectDAO.get(anyString())).thenReturn(Optional.of(new ProjectDTO("project", Collections.emptySet(),
-				Collections.singleton("project"), null, null, null)));*/
+		when(projectDAO.get(anyString())).thenReturn(Optional.of(new ProjectDTO("project", Collections.emptySet(),
+				null, null, null, null)));
 		when(provisioningService.get(anyString(), anyString(), any())).thenReturn(expectedCmdDtoList.toArray(new ComputationalMetadataDTO[]{}));
 
 		List<FullComputationalTemplate> expectedFullCmdDtoList = expectedCmdDtoList.stream()
@@ -132,12 +139,13 @@ public class InfrastructureTemplateServiceBaseTest {
 			assertTrue(areFullComputationalTemplatesEqual(expectedFullCmdDtoList.get(i), actualFullCmdDtoList.get(i)));
 		}
 
-		verify(provisioningService).get("docker/computational", "token", ComputationalMetadataDTO[].class);
+		verify(provisioningService).get(endpointDTO().getUrl() + "docker/computational", "token", ComputationalMetadataDTO[].class);
 		verifyNoMoreInteractions(provisioningService);
 	}
 
 	@Test
 	public void getComputationalTemplatesWhenMethodThrowsException() {
+		when(endpointService.get(anyString())).thenReturn(endpointDTO());
 		doThrow(new DlabException("Could not load list of computational templates for user"))
 				.when(provisioningService).get(anyString(), anyString(), any());
 
@@ -147,18 +155,20 @@ public class InfrastructureTemplateServiceBaseTest {
 		} catch (DlabException e) {
 			assertEquals("Could not load list of computational templates for user", e.getMessage());
 		}
-		verify(provisioningService).get("docker/computational", "token", ComputationalMetadataDTO[].class);
+		verify(provisioningService).get(endpointDTO().getUrl() + "docker/computational", "token",
+				ComputationalMetadataDTO[].class);
 		verifyNoMoreInteractions(provisioningService);
 	}
 
 	@Test
 	public void getComputationalTemplatesWithInapproprietaryImageName() {
+		when(endpointService.get(anyString())).thenReturn(endpointDTO());
 		final ComputationalMetadataDTO computationalMetadataDTO = new ComputationalMetadataDTO("dataengine-service");
 		computationalMetadataDTO.setComputationResourceShapes(Collections.emptyMap());
 		List<ComputationalMetadataDTO> expectedCmdDtoList = Collections.singletonList(computationalMetadataDTO);
 		when(provisioningService.get(anyString(), anyString(), any())).thenReturn(expectedCmdDtoList.toArray(new ComputationalMetadataDTO[]{}));
-		/*when(projectDAO.get(anyString())).thenReturn(Optional.of(new ProjectDTO("project", Collections.emptySet(),
-				Collections.singleton("project"), null, null,null)));*/
+		when(projectDAO.get(anyString())).thenReturn(Optional.of(new ProjectDTO("project", Collections.emptySet(),
+				null, null, null, null)));
 
 		UserInfo userInfo = new UserInfo("test", "token");
 		try {
@@ -166,14 +176,13 @@ public class InfrastructureTemplateServiceBaseTest {
 		} catch (IllegalArgumentException e) {
 			assertEquals("Unknown data engine null", e.getMessage());
 		}
-		verify(provisioningService).get("docker/computational", "token", ComputationalMetadataDTO[].class);
+		verify(provisioningService).get(endpointDTO().getUrl() + "docker/computational", "token", ComputationalMetadataDTO[].class);
 		verifyNoMoreInteractions(provisioningService);
 	}
 
 	private boolean areFullComputationalTemplatesEqual(FullComputationalTemplate object1,
 													   FullComputationalTemplate object2) throws NoSuchFieldException,
 			IllegalAccessException {
-		String project = "";//TODO CHANGEIT
 		Field computationalMetadataDTO1 = object1.getClass().getDeclaredField("computationalMetadataDTO");
 		computationalMetadataDTO1.setAccessible(true);
 		Field computationalMetadataDTO2 = object2.getClass().getDeclaredField("computationalMetadataDTO");
@@ -187,4 +196,8 @@ public class InfrastructureTemplateServiceBaseTest {
 			return new FullComputationalTemplate(metadataDTO);
 		}
 	}
+
+	private EndpointDTO endpointDTO() {
+		return new EndpointDTO("test", "url", "", null);
+	}
 }
diff --git a/services/self-service/src/test/java/com/epam/dlab/backendapi/service/impl/LibraryServiceImplTest.java b/services/self-service/src/test/java/com/epam/dlab/backendapi/service/impl/LibraryServiceImplTest.java
index 9354fd3..4a076f8 100644
--- a/services/self-service/src/test/java/com/epam/dlab/backendapi/service/impl/LibraryServiceImplTest.java
+++ b/services/self-service/src/test/java/com/epam/dlab/backendapi/service/impl/LibraryServiceImplTest.java
@@ -22,11 +22,13 @@ package com.epam.dlab.backendapi.service.impl;
 import com.epam.dlab.auth.UserInfo;
 import com.epam.dlab.backendapi.dao.ExploratoryDAO;
 import com.epam.dlab.backendapi.dao.ExploratoryLibDAO;
+import com.epam.dlab.backendapi.domain.EndpointDTO;
 import com.epam.dlab.backendapi.domain.RequestId;
 import com.epam.dlab.backendapi.resources.dto.LibInfoRecord;
 import com.epam.dlab.backendapi.resources.dto.LibInstallFormDTO;
 import com.epam.dlab.backendapi.resources.dto.LibKey;
 import com.epam.dlab.backendapi.resources.dto.LibraryStatus;
+import com.epam.dlab.backendapi.service.EndpointService;
 import com.epam.dlab.backendapi.util.RequestBuilder;
 import com.epam.dlab.dto.UserInstanceDTO;
 import com.epam.dlab.dto.computational.UserComputationalResource;
@@ -81,6 +83,8 @@ public class LibraryServiceImplTest {
 	private RequestId requestId;
 	@Mock
 	private RESTService provisioningService;
+	@Mock
+	private EndpointService endpointService;
 
 	@Rule
 	public ExpectedException expectedException = ExpectedException.none();
@@ -142,6 +146,7 @@ public class LibraryServiceImplTest {
 		libraryInstallDTO.setLibs(libsToInstall);
 		final UserInfo user = getUser();
 
+		when(endpointService.get(anyString())).thenReturn(endpointDTO());
 		when(exploratoryDAO.fetchExploratoryFields(anyString(), anyString(), anyString())).thenReturn(getUserInstanceDto());
 		when(provisioningService.post(anyString(), anyString(), any(LibraryInstallDTO.class), any())).thenReturn(UUID);
 		when(requestBuilder.newLibInstall(any(UserInfo.class), any(UserInstanceDTO.class),
@@ -156,7 +161,7 @@ public class LibraryServiceImplTest {
 		verify(libraryDAO).getLibrary(USER, EXPLORATORY_NAME, COMPUTATIONAL_NAME, LIB_GROUP, LIB_NAME);
 		verify(requestBuilder).newLibInstall(refEq(user), refEq(getUserInstanceDto()),
 				refEq(getUserComputationalResourceWithName(COMPUTATIONAL_NAME)), eq(libsToInstall));
-		verify(provisioningService).post(eq("library/computational/lib_install"), eq(user.getAccessToken()),
+		verify(provisioningService).post(eq(endpointDTO().getUrl() + "library/computational/lib_install"), eq(user.getAccessToken()),
 				refEq(libraryInstallDTO), eq(String.class));
 		verify(libraryDAO).addLibrary(eq(USER), eq(EXPLORATORY_NAME), eq(COMPUTATIONAL_NAME),
 				refEq(libsToInstall.get(0)), eq(false));
@@ -172,6 +177,7 @@ public class LibraryServiceImplTest {
 		libraryInstallDTO.setLibs(libsToInstall);
 		final UserInfo user = getUser();
 
+		when(endpointService.get(anyString())).thenReturn(endpointDTO());
 		when(exploratoryDAO.fetchExploratoryFields(anyString(), anyString(), anyString())).thenReturn(getUserInstanceDto());
 		when(provisioningService.post(anyString(), anyString(), any(LibraryInstallDTO.class), any())).thenReturn(UUID);
 		when(requestBuilder.newLibInstall(any(UserInfo.class), any(UserInstanceDTO.class),
@@ -192,6 +198,7 @@ public class LibraryServiceImplTest {
 		libraryInstallDTO.setLibs(libsToInstall);
 		final UserInfo user = getUser();
 
+		when(endpointService.get(anyString())).thenReturn(endpointDTO());
 		when(exploratoryDAO.fetchExploratoryFields(anyString(), anyString(), anyString())).thenReturn(getUserInstanceDto());
 		when(provisioningService.post(anyString(), anyString(), any(LibraryInstallDTO.class), any())).thenReturn(UUID);
 		when(requestBuilder.newLibInstall(any(UserInfo.class), any(UserInstanceDTO.class),
@@ -210,7 +217,8 @@ public class LibraryServiceImplTest {
 				refEq(libsToInstall.get(0)), eq(true));
 		verify(requestBuilder).newLibInstall(refEq(user), refEq(getUserInstanceDto()),
 				refEq(getUserComputationalResourceWithName(COMPUTATIONAL_NAME)), eq(libsToInstall));
-		verify(provisioningService).post(eq("library/computational/lib_install"), eq(user.getAccessToken()),
+		verify(provisioningService).post(eq(endpointDTO().getUrl() + "library/computational/lib_install"),
+				eq(user.getAccessToken()),
 				refEq(libraryInstallDTO), eq(String.class));
 		verify(requestId).put(user.getName(), UUID);
 		verifyNoMoreInteractions(libraryDAO, requestBuilder, provisioningService, requestId, exploratoryDAO);
@@ -225,6 +233,7 @@ public class LibraryServiceImplTest {
 		libraryInstallDTO.setLibs(libsToInstall);
 		final UserInfo user = getUser();
 
+		when(endpointService.get(anyString())).thenReturn(endpointDTO());
 		when(exploratoryDAO.fetchExploratoryFields(anyString(), anyString(), anyString())).thenReturn(getUserInstanceDto());
 		when(provisioningService.post(anyString(), anyString(), any(LibraryInstallDTO.class), any())).thenReturn(UUID);
 		when(requestBuilder.newLibInstall(any(UserInfo.class), any(UserInstanceDTO.class),
@@ -250,6 +259,7 @@ public class LibraryServiceImplTest {
 		libraryInstallDTO.setLibs(libsToInstall);
 		final UserInfo user = getUser();
 
+		when(endpointService.get(anyString())).thenReturn(endpointDTO());
 		when(exploratoryDAO.fetchRunningExploratoryFields(anyString(), anyString())).thenReturn(getUserInstanceDto());
 		when(provisioningService.post(anyString(), anyString(), any(LibraryInstallDTO.class), any())).thenReturn(UUID);
 		when(requestBuilder.newLibInstall(any(UserInfo.class), any(UserInstanceDTO.class),
@@ -262,7 +272,7 @@ public class LibraryServiceImplTest {
 
 		verify(libraryDAO).getLibrary(USER, EXPLORATORY_NAME, LIB_GROUP, LIB_NAME);
 		verify(requestBuilder).newLibInstall(refEq(user), refEq(getUserInstanceDto()), eq(libsToInstall));
-		verify(provisioningService).post(eq("library/exploratory/lib_install"), eq(user.getAccessToken()),
+		verify(provisioningService).post(eq(endpointDTO().getUrl() + "library/exploratory/lib_install"), eq(user.getAccessToken()),
 				refEq(libraryInstallDTO), eq(String.class));
 		verify(libraryDAO).addLibrary(eq(USER), eq(EXPLORATORY_NAME), refEq(libsToInstall.get(0)), eq(false));
 		verify(requestId).put(user.getName(), UUID);
@@ -277,6 +287,7 @@ public class LibraryServiceImplTest {
 		libraryInstallDTO.setLibs(libsToInstall);
 		final UserInfo user = getUser();
 
+		when(endpointService.get(anyString())).thenReturn(endpointDTO());
 		when(exploratoryDAO.fetchRunningExploratoryFields(anyString(), anyString())).thenReturn(getUserInstanceDto());
 		when(provisioningService.post(anyString(), anyString(), any(LibraryInstallDTO.class), any())).thenReturn(UUID);
 		when(requestBuilder.newLibInstall(any(UserInfo.class), any(UserInstanceDTO.class),
@@ -292,7 +303,7 @@ public class LibraryServiceImplTest {
 		verify(libraryDAO).addLibrary(eq(USER), eq(EXPLORATORY_NAME), refEq(libsToInstall.get(0)), eq(true));
 		verify(requestBuilder).newLibInstall(refEq(user), refEq(getUserInstanceDto()), eq(libsToInstall));
 		verify(exploratoryDAO).fetchRunningExploratoryFields(USER, EXPLORATORY_NAME);
-		verify(provisioningService).post(eq("library/exploratory/lib_install"), eq(user.getAccessToken()),
+		verify(provisioningService).post(eq(endpointDTO().getUrl() + "library/exploratory/lib_install"), eq(user.getAccessToken()),
 				refEq(libraryInstallDTO), eq(String.class));
 		verify(requestId).put(USER, uuid);
 		verifyNoMoreInteractions(libraryDAO, requestBuilder, provisioningService, requestId, exploratoryDAO);
@@ -305,6 +316,7 @@ public class LibraryServiceImplTest {
 		libraryInstallDTO.setLibs(libsToInstall);
 		final UserInfo user = getUser();
 
+		when(endpointService.get(anyString())).thenReturn(endpointDTO());
 		when(exploratoryDAO.fetchRunningExploratoryFields(anyString(), anyString())).thenReturn(getUserInstanceDto());
 		when(provisioningService.post(anyString(), anyString(), any(LibraryInstallDTO.class), any())).thenReturn(UUID);
 		when(requestBuilder.newLibInstall(any(UserInfo.class), any(UserInstanceDTO.class),
@@ -407,4 +419,8 @@ public class LibraryServiceImplTest {
 		);
 	}
 
+	private EndpointDTO endpointDTO() {
+		return new EndpointDTO("test", "url", "", null);
+	}
+
 }


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@dlab.apache.org
For additional commands, e-mail: commits-help@dlab.apache.org