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 2019/11/14 13:48:57 UTC
[incubator-dlab] 01/01: [DLAB-1261] Custom image is unique per
project
This is an automated email from the ASF dual-hosted git repository.
ofuks pushed a commit to branch DLAB-1261
in repository https://gitbox.apache.org/repos/asf/incubator-dlab.git
commit ee198c4e9ee2dd3a2463323e38c2691a05310032
Author: Oleh Fuks <ol...@gmail.com>
AuthorDate: Thu Nov 14 15:48:37 2019 +0200
[DLAB-1261] Custom image is unique per project
---
.../dlab/backendapi/dao/ImageExploratoryDao.java | 4 ++-
.../backendapi/dao/ImageExploratoryDaoImpl.java | 15 ++++++++--
.../resources/ImageExploratoryResource.java | 9 +++++-
.../service/ImageExploratoryService.java | 2 ++
.../service/impl/ImageExploratoryServiceImpl.java | 13 ++++++---
.../resources/ImageExploratoryResourceTest.java | 34 ++++++++++++++++++++++
.../impl/ImageExploratoryServiceImplTest.java | 17 +++++++++--
7 files changed, 83 insertions(+), 11 deletions(-)
diff --git a/services/self-service/src/main/java/com/epam/dlab/backendapi/dao/ImageExploratoryDao.java b/services/self-service/src/main/java/com/epam/dlab/backendapi/dao/ImageExploratoryDao.java
index b5b2391..0eb86c0 100644
--- a/services/self-service/src/main/java/com/epam/dlab/backendapi/dao/ImageExploratoryDao.java
+++ b/services/self-service/src/main/java/com/epam/dlab/backendapi/dao/ImageExploratoryDao.java
@@ -31,7 +31,7 @@ import java.util.Optional;
public interface ImageExploratoryDao {
- boolean exist(String user, String name);
+ boolean exist(String image, String project);
void save(Image image);
@@ -39,6 +39,8 @@ public interface ImageExploratoryDao {
List<ImageInfoRecord> getImages(String user, String dockerImage, String project, String endpoint, ImageStatus... statuses);
+ List<ImageInfoRecord> getImagesForProject(String project);
+
Optional<ImageInfoRecord> getImage(String user, String name);
List<Library> getLibraries(String user, String imageFullName, ResourceType resourceType, LibStatus status);
diff --git a/services/self-service/src/main/java/com/epam/dlab/backendapi/dao/ImageExploratoryDaoImpl.java b/services/self-service/src/main/java/com/epam/dlab/backendapi/dao/ImageExploratoryDaoImpl.java
index a27b943..c3e0ee1 100644
--- a/services/self-service/src/main/java/com/epam/dlab/backendapi/dao/ImageExploratoryDaoImpl.java
+++ b/services/self-service/src/main/java/com/epam/dlab/backendapi/dao/ImageExploratoryDaoImpl.java
@@ -49,8 +49,8 @@ public class ImageExploratoryDaoImpl extends BaseDAO implements ImageExploratory
private static final String ENDPOINT = "endpoint";
@Override
- public boolean exist(String user, String name) {
- return findOne(MongoCollections.IMAGES, userImageCondition(user, name)).isPresent();
+ public boolean exist(String image, String project) {
+ return findOne(MongoCollections.IMAGES, imageProjectCondition(image, project)).isPresent();
}
@Override
@@ -73,6 +73,13 @@ public class ImageExploratoryDaoImpl extends BaseDAO implements ImageExploratory
}
@Override
+ public List<ImageInfoRecord> getImagesForProject(String project) {
+ return find(MongoCollections.IMAGES,
+ eq(PROJECT, project),
+ ImageInfoRecord.class);
+ }
+
+ @Override
public Optional<ImageInfoRecord> getImage(String user, String name) {
return findOne(MongoCollections.IMAGES, userImageCondition(user, name), ImageInfoRecord.class);
}
@@ -127,6 +134,10 @@ public class ImageExploratoryDaoImpl extends BaseDAO implements ImageExploratory
return and(eq(USER, user), eq(IMAGE_NAME, imageName));
}
+ private Bson imageProjectCondition(String image, String project) {
+ return and(eq(IMAGE_NAME, image), eq(PROJECT, project));
+ }
+
private Document getUpdatedFields(Image image) {
return new Document(STATUS, image.getStatus().toString())
.append(IMAGE_FULL_NAME, image.getFullName())
diff --git a/services/self-service/src/main/java/com/epam/dlab/backendapi/resources/ImageExploratoryResource.java b/services/self-service/src/main/java/com/epam/dlab/backendapi/resources/ImageExploratoryResource.java
index 685d2ca..fdc15fd 100644
--- a/services/self-service/src/main/java/com/epam/dlab/backendapi/resources/ImageExploratoryResource.java
+++ b/services/self-service/src/main/java/com/epam/dlab/backendapi/resources/ImageExploratoryResource.java
@@ -68,7 +68,6 @@ public class ImageExploratoryResource {
return Response.accepted(uuid).location(imageUri).build();
}
-
@GET
public Response getImages(@Auth UserInfo ui,
@QueryParam("docker_image") String dockerImage,
@@ -81,6 +80,14 @@ public class ImageExploratoryResource {
}
@GET
+ @Path("all")
+ public Response getAllImagesForProject(@Auth UserInfo ui, @NotNull @QueryParam("project") String project) {
+ log.debug("Getting images for user {}, project {}", ui.getName(), project);
+ final List<ImageInfoRecord> images = imageExploratoryService.getImagesForProject(project);
+ return Response.ok(images).build();
+ }
+
+ @GET
@Path("{name}")
public Response getImage(@Auth UserInfo ui,
@PathParam("name") String name) {
diff --git a/services/self-service/src/main/java/com/epam/dlab/backendapi/service/ImageExploratoryService.java b/services/self-service/src/main/java/com/epam/dlab/backendapi/service/ImageExploratoryService.java
index 328d9ce..791cd05 100644
--- a/services/self-service/src/main/java/com/epam/dlab/backendapi/service/ImageExploratoryService.java
+++ b/services/self-service/src/main/java/com/epam/dlab/backendapi/service/ImageExploratoryService.java
@@ -34,4 +34,6 @@ public interface ImageExploratoryService {
List<ImageInfoRecord> getNotFailedImages(String user, String dockerImage, String project, String endpoint);
ImageInfoRecord getImage(String user, String name);
+
+ List<ImageInfoRecord> getImagesForProject(String project);
}
diff --git a/services/self-service/src/main/java/com/epam/dlab/backendapi/service/impl/ImageExploratoryServiceImpl.java b/services/self-service/src/main/java/com/epam/dlab/backendapi/service/impl/ImageExploratoryServiceImpl.java
index 8beda82..905b504 100644
--- a/services/self-service/src/main/java/com/epam/dlab/backendapi/service/impl/ImageExploratoryServiceImpl.java
+++ b/services/self-service/src/main/java/com/epam/dlab/backendapi/service/impl/ImageExploratoryServiceImpl.java
@@ -54,7 +54,7 @@ import java.util.stream.Collectors;
@Slf4j
public class ImageExploratoryServiceImpl implements ImageExploratoryService {
- private static final String IMAGE_EXISTS_MSG = "Image with name %s is already exist";
+ private static final String IMAGE_EXISTS_MSG = "Image with name %s is already exist in project %s";
private static final String IMAGE_NOT_FOUND_MSG = "Image with name %s was not found for user %s";
@Inject
@@ -76,9 +76,9 @@ public class ImageExploratoryServiceImpl implements ImageExploratoryService {
UserInstanceDTO userInstance = exploratoryDAO.fetchRunningExploratoryFields(user.getName(), exploratoryName);
- if (imageExploratoryDao.exist(user.getName(), imageName)) {
- log.error(String.format(IMAGE_EXISTS_MSG, imageName));
- throw new ResourceAlreadyExistException(String.format(IMAGE_EXISTS_MSG, imageName));
+ if (imageExploratoryDao.exist(imageName, userInstance.getProject())) {
+ log.error(String.format(IMAGE_EXISTS_MSG, imageName, userInstance.getProject()));
+ throw new ResourceAlreadyExistException(String.format(IMAGE_EXISTS_MSG, imageName, userInstance.getProject()));
}
final List<Library> libraries = libDAO.getLibraries(user.getName(), exploratoryName);
@@ -132,6 +132,11 @@ public class ImageExploratoryServiceImpl implements ImageExploratoryService {
new ResourceNotFoundException(String.format(IMAGE_NOT_FOUND_MSG, name, user)));
}
+ @Override
+ public List<ImageInfoRecord> getImagesForProject(String project) {
+ return imageExploratoryDao.getImagesForProject(project);
+ }
+
private Map<String, List<Library>> fetchComputationalLibs(List<Library> libraries) {
return libraries.stream()
.filter(resourceTypePredicate(ResourceType.COMPUTATIONAL))
diff --git a/services/self-service/src/test/java/com/epam/dlab/backendapi/resources/ImageExploratoryResourceTest.java b/services/self-service/src/test/java/com/epam/dlab/backendapi/resources/ImageExploratoryResourceTest.java
index 3a4f4ef..be35816 100644
--- a/services/self-service/src/test/java/com/epam/dlab/backendapi/resources/ImageExploratoryResourceTest.java
+++ b/services/self-service/src/test/java/com/epam/dlab/backendapi/resources/ImageExploratoryResourceTest.java
@@ -204,6 +204,40 @@ public class ImageExploratoryResourceTest extends TestBase {
}
@Test
+ public void getAllImagesForProject() {
+ when(imageExploratoryService.getImagesForProject(anyString())).thenReturn(getImageList());
+ final Response response = resources.getJerseyTest()
+ .target("/infrastructure_provision/exploratory_environment/image/all")
+ .queryParam("project", "someProject")
+ .request()
+ .header("Authorization", "Bearer " + TOKEN)
+ .get();
+
+ assertEquals(HttpStatus.SC_OK, response.getStatus());
+ assertEquals(getImageList(), response.readEntity(new GenericType<List<ImageInfoRecord>>() {}));
+ assertEquals(MediaType.APPLICATION_JSON, response.getHeaderString(HttpHeaders.CONTENT_TYPE));
+
+ verify(imageExploratoryService).getImagesForProject("someProject");
+ verifyNoMoreInteractions(imageExploratoryService);
+ }
+
+ @Test
+ public void getAllImagesForNullProject() {
+ when(imageExploratoryService.getImagesForProject(anyString())).thenReturn(getImageList());
+ final Response response = resources.getJerseyTest()
+ .target("/infrastructure_provision/exploratory_environment/image/all")
+ .request()
+ .header("Authorization", "Bearer " + TOKEN)
+ .get();
+
+ assertEquals(HttpStatus.SC_BAD_REQUEST, response.getStatus());
+ assertEquals(MediaType.APPLICATION_JSON, response.getHeaderString(HttpHeaders.CONTENT_TYPE));
+
+ verify(imageExploratoryService, never()).getImagesForProject(anyString());
+ verifyNoMoreInteractions(imageExploratoryService);
+ }
+
+ @Test
public void getImageWithException() {
doThrow(new ResourceNotFoundException("Image with name was not found for user"))
.when(imageExploratoryService).getImage(anyString(), anyString());
diff --git a/services/self-service/src/test/java/com/epam/dlab/backendapi/service/impl/ImageExploratoryServiceImplTest.java b/services/self-service/src/test/java/com/epam/dlab/backendapi/service/impl/ImageExploratoryServiceImplTest.java
index db3d7c0..39ff670 100644
--- a/services/self-service/src/test/java/com/epam/dlab/backendapi/service/impl/ImageExploratoryServiceImplTest.java
+++ b/services/self-service/src/test/java/com/epam/dlab/backendapi/service/impl/ImageExploratoryServiceImplTest.java
@@ -63,6 +63,7 @@ public class ImageExploratoryServiceImplTest {
private final String USER = "test";
private final String TOKEN = "token";
private final String EXPLORATORY_NAME = "expName";
+ private final String PROJECT = "project";
private UserInfo userInfo;
private UserInstanceDTO userInstance;
@@ -120,7 +121,7 @@ public class ImageExploratoryServiceImplTest {
verify(exploratoryDAO).fetchRunningExploratoryFields(USER, EXPLORATORY_NAME);
verify(exploratoryDAO).updateExploratoryStatus(any(ExploratoryStatusDTO.class));
- verify(imageExploratoryDao).exist(USER, imageName);
+ verify(imageExploratoryDao).exist(imageName, PROJECT);
verify(imageExploratoryDao).save(any(Image.class));
verify(libDAO).getLibraries(USER, EXPLORATORY_NAME);
verify(requestBuilder).newExploratoryImageCreate(userInfo, userInstance, imageName);
@@ -179,7 +180,7 @@ public class ImageExploratoryServiceImplTest {
verify(exploratoryDAO).fetchRunningExploratoryFields(USER, EXPLORATORY_NAME);
verify(exploratoryDAO).updateExploratoryStatus(any(ExploratoryStatusDTO.class));
- verify(imageExploratoryDao).exist(USER, imageName);
+ verify(imageExploratoryDao).exist(imageName, PROJECT);
verify(imageExploratoryDao).save(any(Image.class));
verify(libDAO).getLibraries(USER, EXPLORATORY_NAME);
verify(requestBuilder).newExploratoryImageCreate(userInfo, userInstance, imageName);
@@ -277,6 +278,16 @@ public class ImageExploratoryServiceImplTest {
imageExploratoryService.getImage(USER, "someImageName");
}
+ @Test
+ public void getImagesForProject() {
+ when(imageExploratoryDao.getImagesForProject(anyString())).thenReturn(Collections.singletonList(getImageInfoRecord()));
+
+ imageExploratoryService.getImagesForProject(PROJECT);
+
+ verify(imageExploratoryDao).getImagesForProject(PROJECT);
+ verifyNoMoreInteractions(imageExploratoryDao);
+ }
+
private ImageInfoRecord getImageInfoRecord() {
return new ImageInfoRecord("someName", "someDescription", "someProject", "someEndpoint", "someApp",
"someFullName", ImageStatus.CREATED);
@@ -301,7 +312,7 @@ public class ImageExploratoryServiceImplTest {
private UserInstanceDTO getUserInstanceDto() {
return new UserInstanceDTO().withUser(USER).withExploratoryName(EXPLORATORY_NAME)
- .withExploratoryId("explId");
+ .withExploratoryId("explId").withProject(PROJECT);
}
private UserInfo getUserInfo() {
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@dlab.apache.org
For additional commands, e-mail: commits-help@dlab.apache.org