Skip to content

Commit

Permalink
feat(test): Add integ test cases for ECS CreateServerGroup for task d…
Browse files Browse the repository at this point in the history
…efinitions input and artifacts (#5042)

Co-authored-by: Parag Bhingre <pbhingre@gmail.com>
Co-authored-by: mergify[bot] <37929162+mergify[bot]@users.noreply.github.com>
  • Loading branch information
3 people committed Oct 30, 2020
1 parent 96cd916 commit df785b0
Show file tree
Hide file tree
Showing 5 changed files with 273 additions and 0 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -365,4 +365,142 @@ public void createServerGroup_errorIfCreateServiceFails()
String.format("Failed to observe task failure after %s seconds", TASK_RETRY_SECONDS),
TASK_RETRY_SECONDS);
}

@DisplayName(
".\n===\n"
+ "Given description w/ inputs, EC2 launch type "
+ "with no load balancing successfully submit createServerGroup operation"
+ "\n===")
@Test
public void createServerGroup_InputsEc2WithoutLoadBalacingTest()
throws IOException, InterruptedException {

// given
String url = getTestUrl(CREATE_SG_TEST_PATH);
String requestBody =
generateStringFromTestFile("/createServerGroup-inputs-ec2-withoutLoadBalacing.json");
String expectedServerGroupName = "ecs-integInputsEc2NoLoadBalancing";
setEcsAccountCreds();

// when
String taskId =
given()
.contentType(ContentType.JSON)
.body(requestBody)
.when()
.post(url)
.then()
.statusCode(200)
.contentType(ContentType.JSON)
.body("id", notNullValue())
.body("resourceUri", containsString("/task/"))
.extract()
.path("id");

retryUntilTrue(
() -> {
List<Object> taskHistory =
get(getTestUrl("/task/" + taskId))
.then()
.contentType(ContentType.JSON)
.extract()
.path("history");
if (taskHistory
.toString()
.contains(String.format("Done creating 1 of %s-v000", expectedServerGroupName))) {
return true;
}
return false;
},
String.format("Failed to detect service creation in %s seconds", TASK_RETRY_SECONDS),
TASK_RETRY_SECONDS);

// then
ArgumentCaptor<RegisterTaskDefinitionRequest> registerTaskDefArgs =
ArgumentCaptor.forClass(RegisterTaskDefinitionRequest.class);
verify(mockECS).registerTaskDefinition(registerTaskDefArgs.capture());
RegisterTaskDefinitionRequest seenTaskDefRequest = registerTaskDefArgs.getValue();
assertEquals(expectedServerGroupName, seenTaskDefRequest.getFamily());
assertEquals(1, seenTaskDefRequest.getContainerDefinitions().size());

ArgumentCaptor<CreateServiceRequest> createServiceArgs =
ArgumentCaptor.forClass(CreateServiceRequest.class);
verify(mockECS).createService(createServiceArgs.capture());
CreateServiceRequest seenCreateServRequest = createServiceArgs.getValue();
assertEquals("EC2", seenCreateServRequest.getLaunchType());
assertEquals(expectedServerGroupName + "-v000", seenCreateServRequest.getServiceName());
}

@DisplayName(
".\n===\n"
+ "Given description w/ inputs, EC2 launch type"
+ "and service discovery registry fields, "
+ "successfully submit createServerGroup operation"
+ "\n===")
@Test
public void createServerGroup_InputsEc2ServiceDiscoveryTest()
throws IOException, InterruptedException {

// given
String url = getTestUrl(CREATE_SG_TEST_PATH);
String requestBody =
generateStringFromTestFile("/createServerGroup-inputs-ec2-serviceDiscovery.json");
String expectedServerGroupName = "ecs-integInputsEc2WithServiceDiscovery";
setEcsAccountCreds();

// when
String taskId =
given()
.contentType(ContentType.JSON)
.body(requestBody)
.when()
.post(url)
.then()
.statusCode(200)
.contentType(ContentType.JSON)
.body("id", notNullValue())
.body("resourceUri", containsString("/task/"))
.extract()
.path("id");

retryUntilTrue(
() -> {
List<Object> taskHistory =
get(getTestUrl("/task/" + taskId))
.then()
.contentType(ContentType.JSON)
.extract()
.path("history");
if (taskHistory
.toString()
.contains(String.format("Done creating 1 of %s-v000", expectedServerGroupName))) {
return true;
}
return false;
},
String.format("Failed to detect service creation in %s seconds", TASK_RETRY_SECONDS),
TASK_RETRY_SECONDS);

// then
ArgumentCaptor<RegisterTaskDefinitionRequest> registerTaskDefArgs =
ArgumentCaptor.forClass(RegisterTaskDefinitionRequest.class);
verify(mockECS).registerTaskDefinition(registerTaskDefArgs.capture());
RegisterTaskDefinitionRequest seenTaskDefRequest = registerTaskDefArgs.getValue();
assertEquals(expectedServerGroupName, seenTaskDefRequest.getFamily());
assertEquals(1, seenTaskDefRequest.getContainerDefinitions().size());

ArgumentCaptor<CreateServiceRequest> createServiceArgs =
ArgumentCaptor.forClass(CreateServiceRequest.class);
verify(mockECS).createService(createServiceArgs.capture());
CreateServiceRequest seenCreateServRequest = createServiceArgs.getValue();
assertEquals("EC2", seenCreateServRequest.getLaunchType());
assertEquals(expectedServerGroupName + "-v000", seenCreateServRequest.getServiceName());
assertEquals(80, seenCreateServRequest.getServiceRegistries().get(0).getContainerPort());
assertEquals(
"arn:aws:servicediscovery:us-west-2:910995322324:service/srv-ckeydmrhzmqh6yfz",
seenCreateServRequest.getServiceRegistries().get(0).getRegistryArn());
assertEquals(
true,
seenCreateServRequest.getServiceRegistries().get(0).getContainerName().contains("v000"));
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,7 @@
import io.restassured.http.ContentType;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.util.HashMap;
import java.util.List;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.DisplayName;
Expand Down Expand Up @@ -319,4 +320,62 @@ public void createServerGroup_ArtifactsFARGATETgMappingsTest()
assertEquals(80, serviceLB.getContainerPort().intValue());
assertEquals("integArtifactsFargateTgMappings-cluster", seenCreateServRequest.getCluster());
}

@DisplayName(
".\n===\n"
+ "Given description w/ task def artifacts, EC2 launch type, and new target group fields "
+ "without container definition, gives an exception(Provided task definition does not contain any container definitions). "
+ "\n===")
@Test
public void createServerGroup_errorIfNoContainersTest() throws IOException, InterruptedException {

// given
String url = getTestUrl(CREATE_SG_TEST_PATH);
String requestBody =
generateStringFromTestFile("/createServerGroup-artifact-EC2-targetGroupMappings.json");

setEcsAccountCreds();

ByteArrayInputStream byteArrayInputStreamOfArtifactsForEC2Type =
new ByteArrayInputStream(
generateStringFromTestArtifactFile(
"createServerGroup-artifact-EC2-targetGroup-WithNoContainers-artifactFile.json")
.getBytes());

when(mockArtifactDownloader.download(any(Artifact.class)))
.thenReturn(byteArrayInputStreamOfArtifactsForEC2Type);

String taskId =
given()
.contentType(ContentType.JSON)
.body(requestBody)
.when()
.post(url)
.then()
.statusCode(200)
.contentType(ContentType.JSON)
.body("id", notNullValue())
.body("resourceUri", containsString("/task/"))
.extract()
.path("id");

retryUntilTrue(
() -> {
HashMap<String, Object> status =
get(getTestUrl("/task/" + taskId))
.then()
.contentType(ContentType.JSON)
.extract()
.path("status");
assertEquals(
true,
status
.get("status")
.toString()
.contains("Provided task definition does not contain any container definitions"));
return status.get("failed").equals(true);
},
String.format("Failed to detect task failure, in %s seconds", TASK_RETRY_SECONDS),
TASK_RETRY_SECONDS);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
{
"family": "PLACEHOLDER",
"containerDefinitions": [],
"cpu": "256",
"memory": "512",
"requiresCompatibilities": [
"EC2"
],
"executionRoleArn": "arn:aws:iam:::executionRole/testExecutionRole:1",
"networkMode": "bridge",
"taskRoleArn" : "arn:aws:iam:::role/testTaskRole:1"
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
{
"account": "ecs-account",
"application": "ecs",
"availabilityZones": {
"us-west-1": [
"us-west-1a",
"us-west-1c"
]
},
"capacity": {
"desired": 1,
"max": 1,
"min": 1
},
"cloudProvider": "ecs",
"computeUnits": 256,
"credentials": "ecs-account",
"dockerImageAddress": "nginx",
"ecsClusterName": "integInputsEc2WithServiceDiscovery-cluster",
"launchType": "EC2",
"networkMode": "bridge",
"placementStrategySequence": [],
"reservedMemory": 512,
"stack": "integInputsEc2WithServiceDiscovery",
"serviceDiscoveryAssociations": [
{
"containerPort": 80,
"registry": {
"account": "ecs-my-aws-devel-acct",
"arn": "arn:aws:servicediscovery:us-west-2:910995322324:service/srv-ckeydmrhzmqh6yfz",
"displayName": "spinnaker-ecs-demo-artifacts1 (srv-ckeydmrhzmqh6yfz)",
"id": "srv-ckeydmrhzmqh6yfz",
"name": "spinnaker-ecs-demo-artifacts1",
"region": "us-west-2"
}
}
]
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
{
"account": "ecs-account",
"application": "ecs",
"availabilityZones": {
"us-west-1": [
"us-west-1a",
"us-west-1c"
]
},
"capacity": {
"desired": 1,
"max": 1,
"min": 1
},
"cloudProvider": "ecs",
"computeUnits": 256,
"containerPort": 80,
"credentials": "ecs-account",
"dockerImageAddress": "nginx",
"ecsClusterName": "integInputsEc2NoLoadBalancing-cluster",
"launchType": "EC2",
"networkMode": "bridge",
"placementStrategySequence": [],
"reservedMemory": 512,
"stack": "integInputsEc2NoLoadBalancing"
}

0 comments on commit df785b0

Please sign in to comment.