Skip to content

Commit d945a61

Browse files
author
Michele Mancioppi
committed
test: add tests for Fargate Metadata v4
1 parent 9e28c6c commit d945a61

File tree

5 files changed

+207
-8
lines changed

5 files changed

+207
-8
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
{
2+
"DockerId": "cd189a933e5849daa93386466019ab50-2495160603",
3+
"Name": "curl",
4+
"DockerName": "curl",
5+
"Image": "111122223333.dkr.ecr.us-west-2.amazonaws.com/curltest:latest",
6+
"ImageID": "sha256:25f3695bedfb454a50f12d127839a68ad3caf91e451c1da073db34c542c4d2cb",
7+
"Labels": {
8+
"com.amazonaws.ecs.cluster": "arn:aws:ecs:us-west-2:111122223333:cluster/default",
9+
"com.amazonaws.ecs.container-name": "curl",
10+
"com.amazonaws.ecs.task-arn": "arn:aws:ecs:us-west-2:111122223333:task/default/cd189a933e5849daa93386466019ab50",
11+
"com.amazonaws.ecs.task-definition-family": "curltest",
12+
"com.amazonaws.ecs.task-definition-version": "2"
13+
},
14+
"DesiredStatus": "RUNNING",
15+
"KnownStatus": "RUNNING",
16+
"Limits": {
17+
"CPU": 10,
18+
"Memory": 128
19+
},
20+
"CreatedAt": "2020-10-08T20:09:11.44527186Z",
21+
"StartedAt": "2020-10-08T20:09:11.44527186Z",
22+
"Type": "NORMAL",
23+
"Networks": [
24+
{
25+
"NetworkMode": "awsvpc",
26+
"IPv4Addresses": [
27+
"192.0.2.3"
28+
],
29+
"AttachmentIndex": 0,
30+
"MACAddress": "0a:de:f6:10:51:e5",
31+
"IPv4SubnetCIDRBlock": "192.0.2.0/24",
32+
"DomainNameServers": [
33+
"192.0.2.2"
34+
],
35+
"DomainNameSearchList": [
36+
"us-west-2.compute.internal"
37+
],
38+
"PrivateDNSName": "ip-10-0-0-222.us-west-2.compute.internal",
39+
"SubnetGatewayIpv4Address": "192.0.2.0/24"
40+
}
41+
],
42+
"ContainerARN": "arn:aws:ecs:us-west-2:111122223333:container/05966557-f16c-49cb-9352-24b3a0dcd0e1",
43+
"LogOptions": {
44+
"awslogs-create-group": "true",
45+
"awslogs-group": "/ecs/containerlogs",
46+
"awslogs-region": "us-west-2",
47+
"awslogs-stream": "ecs/curl/cd189a933e5849daa93386466019ab50"
48+
},
49+
"LogDriver": "awslogs"
50+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,77 @@
1+
{
2+
"Cluster": "arn:aws:ecs:us-west-2:111122223333:cluster/default",
3+
"TaskARN": "arn:aws:ecs:us-west-2:111122223333:task/default/e9028f8d5d8e4f258373e7b93ce9a3c3",
4+
"Family": "curltest",
5+
"Revision": "3",
6+
"DesiredStatus": "RUNNING",
7+
"KnownStatus": "RUNNING",
8+
"Limits": {
9+
"CPU": 0.25,
10+
"Memory": 512
11+
},
12+
"PullStartedAt": "2020-10-08T20:47:16.053330955Z",
13+
"PullStoppedAt": "2020-10-08T20:47:19.592684631Z",
14+
"AvailabilityZone": "us-west-2a",
15+
"Containers": [
16+
{
17+
"DockerId": "e9028f8d5d8e4f258373e7b93ce9a3c3-2495160603",
18+
"Name": "curl",
19+
"DockerName": "curl",
20+
"Image": "111122223333.dkr.ecr.us-west-2.amazonaws.com/curltest:latest",
21+
"ImageID": "sha256:25f3695bedfb454a50f12d127839a68ad3caf91e451c1da073db34c542c4d2cb",
22+
"Labels": {
23+
"com.amazonaws.ecs.cluster": "arn:aws:ecs:us-west-2:111122223333:cluster/default",
24+
"com.amazonaws.ecs.container-name": "curl",
25+
"com.amazonaws.ecs.task-arn": "arn:aws:ecs:us-west-2:111122223333:task/default/e9028f8d5d8e4f258373e7b93ce9a3c3",
26+
"com.amazonaws.ecs.task-definition-family": "curltest",
27+
"com.amazonaws.ecs.task-definition-version": "3"
28+
},
29+
"DesiredStatus": "RUNNING",
30+
"KnownStatus": "RUNNING",
31+
"Limits": {
32+
"CPU": 10,
33+
"Memory": 128
34+
},
35+
"CreatedAt": "2020-10-08T20:47:20.567813946Z",
36+
"StartedAt": "2020-10-08T20:47:20.567813946Z",
37+
"Type": "NORMAL",
38+
"Networks": [
39+
{
40+
"NetworkMode": "awsvpc",
41+
"IPv4Addresses": [
42+
"192.0.2.3"
43+
],
44+
"IPv6Addresses": [
45+
"2001:dB8:10b:1a00:32bf:a372:d80f:e958"
46+
],
47+
"AttachmentIndex": 0,
48+
"MACAddress": "02:b7:20:19:72:39",
49+
"IPv4SubnetCIDRBlock": "192.0.2.0/24",
50+
"IPv6SubnetCIDRBlock": "2600:1f13:10b:1a00::/64",
51+
"DomainNameServers": [
52+
"192.0.2.2"
53+
],
54+
"DomainNameSearchList": [
55+
"us-west-2.compute.internal"
56+
],
57+
"PrivateDNSName": "ip-172-31-30-173.us-west-2.compute.internal",
58+
"SubnetGatewayIpv4Address": "192.0.2.0/24"
59+
}
60+
],
61+
"ClockDrift": {
62+
"ClockErrorBound": 0.5458234999999999,
63+
"ReferenceTimestamp": "2021-09-07T16:57:44Z",
64+
"ClockSynchronizationStatus": "SYNCHRONIZED"
65+
},
66+
"ContainerARN": "arn:aws:ecs:us-west-2:111122223333:container/1bdcca8b-f905-4ee6-885c-4064cb70f6e6",
67+
"LogOptions": {
68+
"awslogs-create-group": "true",
69+
"awslogs-group": "/ecs/containerlogs",
70+
"awslogs-region": "us-west-2",
71+
"awslogs-stream": "ecs/curl/e9028f8d5d8e4f258373e7b93ce9a3c3"
72+
},
73+
"LogDriver": "awslogs"
74+
}
75+
],
76+
"LaunchType": "FARGATE"
77+
}

sdk-extension/opentelemetry-sdk-extension-aws/tests/resource/test_ecs.py

+80-8
Original file line numberDiff line numberDiff line change
@@ -33,24 +33,37 @@
3333

3434

3535
def _read_file(filename: str) -> str:
36-
with open(os.path.join(os.path.dirname(__file__), filename)) as f:
36+
with open(os.path.join(os.path.dirname(__file__), 'ecs', filename)) as f:
3737
return f.read()
3838

3939

4040
MetadataV4Uri = "mock-uri-4"
4141

4242

43-
MetadataV4ContainerResponse = _read_file("metadatav4-response-container.json")
43+
MetadataV4ContainerResponseEc2 = _read_file("metadatav4-response-container-ec2.json")
4444

4545

46-
MetadataV4TaskResponse = _read_file("metadatav4-response-task.json")
46+
MetadataV4TaskResponseEc2 = _read_file("metadatav4-response-task-ec2.json")
4747

4848

49-
def _http_get_function(url: str, *args, **kwargs) -> str:
49+
MetadataV4ContainerResponseFargate = _read_file("metadatav4-response-container-fargate.json")
50+
51+
52+
MetadataV4TaskResponseFargate = _read_file("metadatav4-response-task-fargate.json")
53+
54+
55+
def _http_get_function_ec2(url: str, *args, **kwargs) -> str:
56+
if url == MetadataV4Uri:
57+
return MetadataV4ContainerResponseEc2
58+
if url == f"{MetadataV4Uri}/task":
59+
return MetadataV4TaskResponseEc2
60+
61+
62+
def _http_get_function_fargate(url: str, *args, **kwargs) -> str:
5063
if url == MetadataV4Uri:
51-
return MetadataV4ContainerResponse
64+
return MetadataV4ContainerResponseFargate
5265
if url == f"{MetadataV4Uri}/task":
53-
return MetadataV4TaskResponse
66+
return MetadataV4TaskResponseFargate
5467

5568

5669
class AwsEcsResourceDetectorTest(unittest.TestCase):
@@ -123,13 +136,13 @@ def test_simple_create_metadata_v3(
123136
@patch(
124137
"opentelemetry.sdk.extension.aws.resource.ecs._http_get",
125138
)
126-
def test_simple_create_metadata_v4(
139+
def test_simple_create_metadata_v4_launchtype_ec2(
127140
self,
128141
mock_http_get_function,
129142
mock_open_function,
130143
mock_socket_gethostname,
131144
):
132-
mock_http_get_function.side_effect = _http_get_function
145+
mock_http_get_function.side_effect = _http_get_function_ec2
133146
actual = AwsEcsResourceDetector().detect()
134147
self.maxDiff = None
135148
self.assertDictEqual(
@@ -150,3 +163,62 @@ def test_simple_create_metadata_v4(
150163
}
151164
),
152165
)
166+
167+
@patch.dict(
168+
"os.environ",
169+
{"ECS_CONTAINER_METADATA_URI_V4": MetadataV4Uri},
170+
clear=True,
171+
)
172+
@patch(
173+
"socket.gethostname",
174+
return_value=f"{MockEcsResourceAttributes[ResourceAttributes.CONTAINER_NAME]}",
175+
)
176+
@patch(
177+
"builtins.open",
178+
new_callable=mock_open,
179+
read_data=f"""14:name=systemd:/docker/{MockEcsResourceAttributes[ResourceAttributes.CONTAINER_ID]}
180+
13:rdma:/
181+
12:pids:/docker/bogusContainerIdThatShouldNotBeOneSetBecauseTheFirstOneWasPicked
182+
11:hugetlb:/docker/bogusContainerIdThatShouldNotBeOneSetBecauseTheFirstOneWasPicked
183+
10:net_prio:/docker/bogusContainerIdThatShouldNotBeOneSetBecauseTheFirstOneWasPicked
184+
9:perf_event:/docker/bogusContainerIdThatShouldNotBeOneSetBecauseTheFirstOneWasPicked
185+
8:net_cls:/docker/bogusContainerIdThatShouldNotBeOneSetBecauseTheFirstOneWasPicked
186+
7:freezer:/docker/
187+
6:devices:/docker/bogusContainerIdThatShouldNotBeOneSetBecauseTheFirstOneWasPicked
188+
5:memory:/docker/bogusContainerIdThatShouldNotBeOneSetBecauseTheFirstOneWasPicked
189+
4:blkio:/docker/bogusContainerIdThatShouldNotBeOneSetBecauseTheFirstOneWasPicked
190+
3:cpuacct:/docker/bogusContainerIdThatShouldNotBeOneSetBecauseTheFirstOneWasPicked
191+
2:cpu:/docker/bogusContainerIdThatShouldNotBeOneSetBecauseTheFirstOneWasPicked
192+
1:cpuset:/docker/bogusContainerIdThatShouldNotBeOneSetBecauseTheFirstOneWasPicked
193+
""",
194+
)
195+
@patch(
196+
"opentelemetry.sdk.extension.aws.resource.ecs._http_get",
197+
)
198+
def test_simple_create_metadata_v4_launchtype_fargate(
199+
self,
200+
mock_http_get_function,
201+
mock_open_function,
202+
mock_socket_gethostname,
203+
):
204+
mock_http_get_function.side_effect = _http_get_function_fargate
205+
actual = AwsEcsResourceDetector().detect()
206+
self.maxDiff = None
207+
self.assertDictEqual(
208+
actual.attributes.copy(),
209+
OrderedDict(
210+
{
211+
**MockEcsResourceAttributes,
212+
ResourceAttributes.AWS_LOG_GROUP_NAMES: ("/ecs/containerlogs",),
213+
ResourceAttributes.AWS_LOG_GROUP_ARNS: ("arn:aws:logs:us-west-2:111122223333:log-group:/ecs/containerlogs:*",),
214+
ResourceAttributes.AWS_LOG_STREAM_NAMES: ("ecs/curl/cd189a933e5849daa93386466019ab50",),
215+
ResourceAttributes.AWS_LOG_STREAM_ARNS: ("arn:aws:logs:us-west-2:111122223333:log-group:/ecs/containerlogs:log-stream:ecs/curl/cd189a933e5849daa93386466019ab50",),
216+
ResourceAttributes.AWS_ECS_CONTAINER_ARN: "arn:aws:ecs:us-west-2:111122223333:container/05966557-f16c-49cb-9352-24b3a0dcd0e1",
217+
ResourceAttributes.AWS_ECS_CLUSTER_ARN: "arn:aws:ecs:us-west-2:111122223333:cluster/default",
218+
ResourceAttributes.AWS_ECS_LAUNCHTYPE: "fargate",
219+
ResourceAttributes.AWS_ECS_TASK_ARN: "arn:aws:ecs:us-west-2:111122223333:task/default/e9028f8d5d8e4f258373e7b93ce9a3c3",
220+
ResourceAttributes.AWS_ECS_TASK_FAMILY: "curltest",
221+
ResourceAttributes.AWS_ECS_TASK_REVISION: "3",
222+
}
223+
),
224+
)

0 commit comments

Comments
 (0)