Skip to content

Commit

Permalink
Replacing functional test for container metadata file
Browse files Browse the repository at this point in the history
  • Loading branch information
linkar-ec2 committed Dec 10, 2018
1 parent 40bc811 commit 4c4a1aa
Show file tree
Hide file tree
Showing 17 changed files with 645 additions and 86 deletions.
8 changes: 6 additions & 2 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -172,7 +172,7 @@ test-artifacts-linux: $(LINUX_ARTIFACTS_TARGETS)
test-artifacts: test-artifacts-windows test-artifacts-linux

# Run our 'test' registry needed for integ and functional tests
test-registry: netkitten volumes-test namespace-tests pause-container squid awscli image-cleanup-test-images fluentd agent-introspection-validator taskmetadata-validator v3-task-endpoint-validator
test-registry: netkitten volumes-test namespace-tests pause-container squid awscli image-cleanup-test-images fluentd agent-introspection-validator taskmetadata-validator v3-task-endpoint-validator container-metadata-file-validator
@./scripts/setup-test-registry

test-in-docker:
Expand Down Expand Up @@ -266,7 +266,7 @@ namespace-tests:

# TODO, replace this with a build on dockerhub or a mechanism for the
# functional tests themselves to build this
.PHONY: squid awscli fluentd gremlin agent-introspection-validator taskmetadata-validator v3-task-endpoint-validator image-cleanup-test-images ecr-execution-role-image container-health-check-image telemetry-test-image
.PHONY: squid awscli fluentd gremlin agent-introspection-validator taskmetadata-validator v3-task-endpoint-validator container-metadata-file-validator image-cleanup-test-images ecr-execution-role-image container-health-check-image telemetry-test-image
squid:
$(MAKE) -C misc/squid $(MFLAGS)

Expand Down Expand Up @@ -294,6 +294,9 @@ taskmetadata-validator:
v3-task-endpoint-validator:
$(MAKE) -C misc/v3-task-endpoint-validator $(MFLAGS)

container-metadata-file-validator:
$(MAKE) -C misc/container-metadata-file-validator $(MFLAGS)

ecr-execution-role-image:
$(MAKE) -C misc/ecr $(MFLAGS)

Expand Down Expand Up @@ -355,6 +358,7 @@ clean:
-$(MAKE) -C misc/agent-introspection-validator $(MFLAGS) clean
-$(MAKE) -C misc/taskmetadata-validator $(MFLAGS) clean
-$(MAKE) -C misc/v3-task-endpoint-validator $(MFLAGS) clean
-$(MAKE) -C misc/container-metadata-file-validator $(MFLAGS) clean
-$(MAKE) -C misc/container-health $(MFLAGS) clean
-$(MAKE) -C misc/telemetry $(MFLAGS) clean
-rm -f .get-deps-stamp
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
{
"family": "ecsftest-container-metadata-file-validator-windows",
"containerDefinitions": [{
"image": "amazon/amazon-ecs-container-metadata-file-validator-windows",
"name": "container-metadata-file-validator",
"memory": 512,
"cpu": 1024,
"healthCheck": {
"command": ["CMD-SHELL", "echo hello"],
"interval": 5,
"timeout": 5,
"retries": 2,
"startPeriod": 1
},
"entryPoint": ["powershell"],
"command": ["$env:AWS_REGION=\"$$$TEST_REGION$$$\";.\\container-metadata-file-validator-windows.exe; exit $LASTEXITCODE"],
"logConfiguration": {
"logDriver": "awslogs",
"options": {
"awslogs-group":"ecs-functional-tests",
"awslogs-region":"$$$TEST_REGION$$$",
"awslogs-stream-prefix":"$$$TEST_AWSLOGS_STREAM_PREFIX$$$"
}
}
}]
}

Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
{
"family": "ecsftest-container-metadata-file-validator",
"containerDefinitions": [{
"image": "127.0.0.1:51670/amazon/amazon-ecs-container-metadata-file-validator:latest",
"name": "container-metadata-file-validator",
"memory": 50,
"healthCheck": {
"command": ["CMD-SHELL", "echo hello"],
"interval": 5,
"timeout": 5,
"retries": 2,
"startPeriod": 1
},
"logConfiguration": {
"logDriver": "awslogs",
"options": {
"awslogs-group":"ecs-functional-tests",
"awslogs-region":"$$$TEST_REGION$$$",
"awslogs-stream-prefix":"$$$TEST_AWSLOGS_STREAM_PREFIX$$$"
}
}
}]
}

This file was deleted.

This file was deleted.

52 changes: 52 additions & 0 deletions agent/functional_tests/tests/functionaltests_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -635,6 +635,58 @@ func testV3TaskEndpoint(t *testing.T, taskName, containerName, networkMode, awsl
assert.Equal(t, 42, exitCode, fmt.Sprintf("Expected exit code of 42; got %d", exitCode))
}

// testContainerMetadataFile validates that the metadata file from the
// ECS_CONTAINER_METADATA_FILE environment variable contains all the required
// fields
func testContainerMetadataFile(t *testing.T, taskName, awslogsPrefix string) {
agentOptions := &AgentOptions{
ExtraEnvironment: map[string]string{
"ECS_ENABLE_CONTAINER_METADATA": "true",
"ECS_AVAILABLE_LOGGING_DRIVERS": `["awslogs"]`,
},
}

agent := RunAgent(t, agentOptions)
defer agent.Cleanup()
agent.RequireVersion(">=1.15.0")

tdOverrides := make(map[string]string)
tdOverrides["$$$TEST_REGION$$$"] = *ECS.Config.Region
tdOverrides["$$$TEST_AWSLOGS_STREAM_PREFIX$$$"] = awslogsPrefix

task, err := agent.StartTaskWithTaskDefinitionOverrides(t, taskName, tdOverrides)
containerName := "container-metadata-file-validator"

require.NoError(t, err, "Error start task")
err = task.WaitRunning(waitTaskStateChangeDuration)
require.NoError(t, err, "Error waiting for task to run")
containerId, err := agent.ResolveTaskDockerID(task, containerName)
require.NoError(t, err, "Error resolving docker id for container in task")

// Container should have the ExtraEnvironment variable ECS_CONTAINER_METADATA_URI
containerMetaData, err := agent.DockerClient.InspectContainer(containerId)
require.NoError(t, err, "Could not inspect container for task")
containerMetadataFileFound := false
if containerMetaData.Config != nil {
for _, env := range containerMetaData.Config.Env {
if strings.HasPrefix(env, "ECS_CONTAINER_METADATA_FILE=") {
containerMetadataFileFound = true
break
}
}
}
if !containerMetadataFileFound {
task.Stop()
t.Fatal("Could not find ECS_CONTAINER_METADATA_FILE in the container environment variable")
}

err = task.WaitStopped(waitTaskStateChangeDuration)
require.NoError(t, err, "Error waiting for task to transition to STOPPED")

exitCode, _ := task.ContainerExitcode(containerName)
assert.Equal(t, 42, exitCode, fmt.Sprintf("Expected exit code of 42; got %d", exitCode))
}

func TestContainerInstanceTags(t *testing.T) {
// We need long container instance ARN for tagging APIs, PutAccountSettingInput
// will enable long container instance ARN.
Expand Down
29 changes: 4 additions & 25 deletions agent/functional_tests/tests/functionaltests_unix_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -474,6 +474,10 @@ func TestV3TaskEndpointHostNetworkMode(t *testing.T) {
testV3TaskEndpoint(t, "v3-task-endpoint-validator", "v3-task-endpoint-validator", "host", "ecs-functional-tests-v3-task-endpoint-validator")
}

func TestContainerMetadataFile(t *testing.T) {
testContainerMetadataFile(t, "container-metadata-file-validator", "ecs-functional-tests-container-metadata-file-validator")
}

// TestMemoryOvercommit tests the MemoryReservation of container can be configured in task definition
func TestMemoryOvercommit(t *testing.T) {
agent := RunAgent(t, nil)
Expand Down Expand Up @@ -597,31 +601,6 @@ func fluentdDriverTest(taskDefinition string, t *testing.T) {
assert.NoError(t, err, "failed to find the log tag specified in the task definition")
}

// TestMetadataServiceValidator tests that the metadata file can be accessed from the
// container using the ECS_CONTAINER_METADATA_FILE environment variables
func TestMetadataServiceValidator(t *testing.T) {
agentOptions := &AgentOptions{
ExtraEnvironment: map[string]string{
"ECS_ENABLE_CONTAINER_METADATA": "true",
},
}

agent := RunAgent(t, agentOptions)
defer agent.Cleanup()
agent.RequireVersion(">=1.15.0")

task, err := agent.StartTask(t, "mdservice-validator-unix")
require.NoError(t, err, "Register task definition failed")
defer task.Stop()

// clean up
err = task.WaitStopped(2 * time.Minute)
require.NoError(t, err, "Error waiting for task to transition to STOPPED")
exitCode, _ := task.ContainerExitcode("mdservice-validator-unix")

assert.Equal(t, 42, exitCode, fmt.Sprintf("Expected exit code of 42; got %d", exitCode))
}

// TestAgentIntrospectionValidator tests that the agent introspection endpoint can
// be accessed from within the container.
func TestAgentIntrospectionValidator(t *testing.T) {
Expand Down
38 changes: 2 additions & 36 deletions agent/functional_tests/tests/functionaltests_windows_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -184,42 +184,8 @@ func TestV3TaskEndpointDefaultNetworkMode(t *testing.T) {
testV3TaskEndpoint(t, "v3-task-endpoint-validator-windows", "v3-task-endpoint-validator-windows", "", "ecs-functional-tests-v3-task-endpoint-validator-windows")
}

// TestMetadataServiceValidator Tests that the metadata file can be accessed from the
// container using the ECS_CONTAINER_METADATA_FILE environment variables
func TestMetadataServiceValidator(t *testing.T) {
agentOptions := &AgentOptions{
ExtraEnvironment: map[string]string{
"ECS_ENABLE_CONTAINER_METADATA": "true",
},
}

agent := RunAgent(t, agentOptions)
defer agent.Cleanup()
agent.RequireVersion(">=1.15.0")

tdOverride := make(map[string]string)
tdOverride["$$$TEST_REGION$$$"] = *ECS.Config.Region
tdOverride["$$$NETWORK_MODE$$$"] = ""

task, err := agent.StartTaskWithTaskDefinitionOverrides(t, "mdservice-validator-windows", tdOverride)
if err != nil {
t.Fatalf("Error starting mdservice-validator-windows: %v", err)
}

// clean up
err = task.WaitStopped(waitTaskStateChangeDuration)
require.NoError(t, err, "Error waiting for task to transition to STOPPED")

containerID, err := agent.ResolveTaskDockerID(task, "mdservice-validator-windows")
if err != nil {
t.Fatalf("Error resolving docker id for container in task: %v", err)
}

containerMetaData, err := agent.DockerClient.InspectContainer(containerID)
require.NoError(t, err, "Could not inspect container for task")

exitCode := containerMetaData.State.ExitCode
assert.Equal(t, 42, exitCode, fmt.Sprintf("Expected exit code of 42; got %d", exitCode))
func TestContainerMetadataFile(t *testing.T) {
testContainerMetadataFile(t, "container-metadata-file-validator-windows", "ecs-functional-tests-container-metadata-file-validator-windows")
}

// TestTelemetry tests whether agent can send metrics to TACS
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
# Copyright 2018 Amazon.com, Inc. or its affiliates. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License"). You may
# not use this file except in compliance with the License. A copy of the
# License is located at
#
# http://aws.amazon.com/apache2.0/
#
# or in the "license" file accompanying this file. This file 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.

FROM microsoft/windowsservercore:latest

ADD container-metadata-file-validator-windows.exe container-metadata-file-validator-windows.exe
Loading

0 comments on commit 4c4a1aa

Please sign in to comment.