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/12/12 10:03:57 UTC

[incubator-dlab] branch integration-tests-ofuks-1 created (now 006ad74)

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

ofuks pushed a change to branch integration-tests-ofuks-1
in repository https://gitbox.apache.org/repos/asf/incubator-dlab.git.


      at 006ad74  Added project feature

This branch includes the following new commits:

     new 006ad74  Added project feature

The 1 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.



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


[incubator-dlab] 01/01: Added project feature

Posted by of...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

ofuks pushed a commit to branch integration-tests-ofuks-1
in repository https://gitbox.apache.org/repos/asf/incubator-dlab.git

commit 006ad749a0e3b2387d97f33ca02afff2ea69315e
Author: Oleh Fuks <ol...@gmail.com>
AuthorDate: Thu Dec 12 12:03:36 2019 +0200

    Added project feature
---
 .../java/org/apache/dlab/dto/CreateProjectDTO.java |  19 ++++
 .../org/apache/dlab/dto/EndpointStatusDTO.java     |  23 +++++
 .../java/org/apache/dlab/dto/ProjectKeyDTO.java    |  15 +++
 .../java/org/apache/dlab/dto/ProjectStatusDTO.java |  13 +++
 .../src/test/java/dlab/Constants.java              |   1 +
 .../src/test/java/dlab/project/ProjectSteps.java   | 104 ++++++++++++++++++---
 .../src/test/resources/dlab/project.feature        |   9 +-
 7 files changed, 169 insertions(+), 15 deletions(-)

diff --git a/integration-tests-cucumber/src/main/java/org/apache/dlab/dto/CreateProjectDTO.java b/integration-tests-cucumber/src/main/java/org/apache/dlab/dto/CreateProjectDTO.java
new file mode 100644
index 0000000..9d22144
--- /dev/null
+++ b/integration-tests-cucumber/src/main/java/org/apache/dlab/dto/CreateProjectDTO.java
@@ -0,0 +1,19 @@
+package org.apache.dlab.dto;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.util.Set;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class CreateProjectDTO {
+    private String name;
+    private Set<String> groups;
+    private Set<String> endpoints;
+    private String key;
+    private String tag;
+}
+
diff --git a/integration-tests-cucumber/src/main/java/org/apache/dlab/dto/EndpointStatusDTO.java b/integration-tests-cucumber/src/main/java/org/apache/dlab/dto/EndpointStatusDTO.java
new file mode 100644
index 0000000..86eafdd
--- /dev/null
+++ b/integration-tests-cucumber/src/main/java/org/apache/dlab/dto/EndpointStatusDTO.java
@@ -0,0 +1,23 @@
+package org.apache.dlab.dto;
+
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
+import lombok.Data;
+
+
+@Data
+@JsonIgnoreProperties(ignoreUnknown = true)
+public class EndpointStatusDTO {
+    private String name;
+    private Status status;
+
+
+    public enum Status {
+        CREATING,
+        STARTING,
+        RUNNING,
+        STOPPING,
+        STOPPED,
+        TERMINATING,
+        TERMINATED
+    }
+}
diff --git a/integration-tests-cucumber/src/main/java/org/apache/dlab/dto/ProjectKeyDTO.java b/integration-tests-cucumber/src/main/java/org/apache/dlab/dto/ProjectKeyDTO.java
new file mode 100644
index 0000000..faf64ca
--- /dev/null
+++ b/integration-tests-cucumber/src/main/java/org/apache/dlab/dto/ProjectKeyDTO.java
@@ -0,0 +1,15 @@
+package org.apache.dlab.dto;
+
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Data
+@JsonIgnoreProperties(ignoreUnknown = true)
+@AllArgsConstructor
+@NoArgsConstructor
+public class ProjectKeyDTO {
+    private String publicKey;
+    private String username;
+}
diff --git a/integration-tests-cucumber/src/main/java/org/apache/dlab/dto/ProjectStatusDTO.java b/integration-tests-cucumber/src/main/java/org/apache/dlab/dto/ProjectStatusDTO.java
new file mode 100644
index 0000000..efa5b28
--- /dev/null
+++ b/integration-tests-cucumber/src/main/java/org/apache/dlab/dto/ProjectStatusDTO.java
@@ -0,0 +1,13 @@
+package org.apache.dlab.dto;
+
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
+import lombok.Data;
+
+import java.util.Set;
+
+@Data
+@JsonIgnoreProperties(ignoreUnknown = true)
+public class ProjectStatusDTO {
+    private String name;
+    private Set<EndpointStatusDTO> endpoints;
+}
diff --git a/integration-tests-cucumber/src/test/java/dlab/Constants.java b/integration-tests-cucumber/src/test/java/dlab/Constants.java
index a27ed77..19309ba 100644
--- a/integration-tests-cucumber/src/test/java/dlab/Constants.java
+++ b/integration-tests-cucumber/src/test/java/dlab/Constants.java
@@ -4,4 +4,5 @@ import org.apache.dlab.util.PropertyHelper;
 
 public interface Constants {
 	String API_URI = PropertyHelper.read("dlab.api.base.uri");
+	String LOCAL_ENDPOINT = "local";
 }
diff --git a/integration-tests-cucumber/src/test/java/dlab/project/ProjectSteps.java b/integration-tests-cucumber/src/test/java/dlab/project/ProjectSteps.java
index ed1b207..7a34abf 100644
--- a/integration-tests-cucumber/src/test/java/dlab/project/ProjectSteps.java
+++ b/integration-tests-cucumber/src/test/java/dlab/project/ProjectSteps.java
@@ -1,35 +1,117 @@
 package dlab.project;
 
+
+import com.jayway.restassured.http.ContentType;
+import com.jayway.restassured.response.Response;
+import com.jayway.restassured.specification.RequestSpecification;
 import cucumber.api.java.en.And;
 import cucumber.api.java.en.Given;
 import cucumber.api.java.en.Then;
 import cucumber.api.java.en.When;
+import dlab.util.KeycloakUtil;
+import org.apache.dlab.dto.CreateProjectDTO;
+import org.apache.dlab.dto.EndpointStatusDTO;
+import org.apache.dlab.dto.ProjectKeyDTO;
+import org.apache.dlab.dto.ProjectStatusDTO;
+import org.apache.dlab.util.JacksonMapper;
+
+import java.net.URI;
+import java.net.URISyntaxException;
+import java.time.LocalDateTime;
+import java.util.Arrays;
+import java.util.HashSet;
+import java.util.Optional;
+import java.util.Set;
+import java.util.concurrent.TimeUnit;
 
+import static com.jayway.restassured.RestAssured.given;
+import static dlab.Constants.API_URI;
+import static dlab.Constants.LOCAL_ENDPOINT;
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.hamcrest.core.IsEqual.equalTo;
 import static org.junit.Assert.fail;
 
 public class ProjectSteps {
 
-	@Then("User wait maximum {string} minutes while project is creating")
-	public void userWaitMaximumMinutesWhileProjectIsCreating(String arg0) {
-		fail("Not implemented");
+	private RequestSpecification createProjectRequest;
+	private RequestSpecification generateKeysRequest;
+	private Response response;
+	private String projectName;
+
+
+	@Given("There is no project with name {string} in DLab")
+	public void thereIsNoProjectWithNameInDLab(String projectName) throws URISyntaxException {
+		assertThat(authenticatedRequest()
+				.get(new URI(API_URI + "project/" + projectName))
+				.getStatusCode(), equalTo(404));
 	}
 
 	@When("User send create new project request")
 	public void userSendCreateNewProjectRequest() {
+		response = createProjectRequest.post(API_URI + "project");
 	}
 
-	@And("User try to create new project with name {string}, endpoints {string}, groups {string} " +
-			"and key {string}")
-	public void userTryToCreateNewProjectWithNameEndpointsGroupsAndKey(String arg0, String arg1, String arg2,
-																	   String arg3) {
-	}
+	@And("User try to create new project with name {string}, endpoints {string}, groups {string} and publicKey")
+	public void userTryToCreateNewProjectWithNameEndpointsGroupsAndKey(String projectName, String endpoints,
+																	   String groups) {
+		this.projectName = projectName;
+		String publicKey = generateKeysRequest.post(API_URI + "project/keys")
+				.getBody().as(ProjectKeyDTO.class)
+				.getPublicKey();
+		Set<String> endpointSet = getSetFromString(endpoints);
+		Set<String> groupSet = getSetFromString(groups);
+
+		createProjectRequest = given()
+				.body(JacksonMapper.marshall(new CreateProjectDTO(projectName, groupSet, endpointSet, publicKey, projectName)))
+				.auth()
+				.oauth2(KeycloakUtil.getToken())
+				.contentType(ContentType.JSON);
 
-	@Given("There is no project with name {string} in DLab")
-	public void thereIsNoProjectWithNameInDLab(String arg0) {
 	}
 
 	@Then("Status code is {int}")
-	public void statusCodeIs(int arg0) {
+	public void statusCodeIs(int code) {
+		assertThat(response.getStatusCode(), equalTo(code));
+	}
+
+	@Then("User wait maximum {int} minutes while project is creating")
+	public void userWaitMaximumMinutesWhileProjectIsCreating(int timeout) throws URISyntaxException, InterruptedException {
+		boolean isRunning = false;
+		LocalDateTime withTimeout = LocalDateTime.now().plusMinutes(timeout);
+		while (!isRunning && LocalDateTime.now().isBefore(withTimeout)) {
+			ProjectStatusDTO projectDTO = authenticatedRequest()
+					.get(new URI(API_URI + "project/" + projectName))
+					.getBody().as(ProjectStatusDTO.class);
+
+			assertThat(projectDTO.getName(), equalTo(projectName));
+
+			Optional<EndpointStatusDTO> localEndpoint = projectDTO.getEndpoints()
+					.stream()
+					.filter(e -> LOCAL_ENDPOINT.equals(e.getName()))
+					.findAny();
+			isRunning = localEndpoint.isPresent() && EndpointStatusDTO.Status.RUNNING == localEndpoint.get().getStatus();
+			TimeUnit.MINUTES.sleep(1);
+		}
+
+		if (!isRunning) {
+			fail("Timeout for project status check reached!");
+		}
+	}
+
+	@And("User try to generate new publicKey")
+	public void userTryToGenerateNewPublicKey() {
+		generateKeysRequest = given().auth()
+				.oauth2(KeycloakUtil.getToken())
+				.contentType(ContentType.JSON);
+	}
+
+	private HashSet<String> getSetFromString(String string) {
+		return new HashSet<>(Arrays.asList(string.split(",")));
+	}
 
+	private RequestSpecification authenticatedRequest() {
+		return given()
+				.auth()
+				.oauth2(KeycloakUtil.getToken());
 	}
 }
diff --git a/integration-tests-cucumber/src/test/resources/dlab/project.feature b/integration-tests-cucumber/src/test/resources/dlab/project.feature
index e717e63..2da19fa 100644
--- a/integration-tests-cucumber/src/test/resources/dlab/project.feature
+++ b/integration-tests-cucumber/src/test/resources/dlab/project.feature
@@ -4,10 +4,11 @@ Feature: Project management in DLab
   Scenario Outline: Create new project when it does not exist
 
     Given There is no project with name "<name>" in DLab
-    And User try to create new project with name "<name>", endpoints "<endpoints>", groups "<groups>" and key "<key>"
+    And User try to generate new publicKey
+    And User try to create new project with name "<name>", endpoints "<endpoints>", groups "<groups>" and publicKey
     When User send create new project request
-    Then User wait maximum "<timeout>" minutes while project is creating
+    Then User wait maximum <timeout> minutes while project is creating
     Then Status code is 200
     Examples:
-      | name | endpoints | groups   | key              | timeout |
-      | prj1 | test      | $anyyser | publicKeyContent | 10      |
\ No newline at end of file
+      | name | endpoints | groups   | timeout |
+      | prj1 | local     | $anyuser | 20      |
\ 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