Skip to content

Commit 470d9ac

Browse files
committed
Add more test cases.
1 parent a9a5ab8 commit 470d9ac

File tree

3 files changed

+89
-22
lines changed

3 files changed

+89
-22
lines changed

newrelic/common/utilization.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -363,7 +363,7 @@ def fetch(cls):
363363
def get_ecs_container_id(cls, metadata_uri):
364364
try:
365365
http = urllib3.PoolManager()
366-
resp = http.request('GET', metadata_uri)
366+
resp = http.request("GET", metadata_uri)
367367
resp_dict = json.loads(resp.data)
368368
docker_id = resp_dict.get("DockerId")
369369
resp.release_conn()

tests/cross_agent/fixtures/ecs_container_id/ecs_mock_server.py

Lines changed: 64 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -13,13 +13,53 @@
1313
"com.amazonaws.ecs.container-name": "fargateapp",
1414
"com.amazonaws.ecs.task-arn": "arn:aws:ecs:us-west-2:123456789012:task/testcluster/1e1698469422439ea356071e581e8545",
1515
"com.amazonaws.ecs.task-definition-family": "fargatetestapp",
16-
"com.amazonaws.ecs.task-definition-version": "7"
16+
"com.amazonaws.ecs.task-definition-version": "7",
1717
},
1818
"DesiredStatus": "RUNNING",
1919
"KnownStatus": "RUNNING",
20-
"Limits": {
21-
"CPU": 2
20+
"Limits": {"CPU": 2},
21+
"CreatedAt": "2024-04-25T17:38:31.073208914Z",
22+
"StartedAt": "2024-04-25T17:38:31.073208914Z",
23+
"Type": "NORMAL",
24+
"LogDriver": "awslogs",
25+
"LogOptions": {
26+
"awslogs-create-group": "true",
27+
"awslogs-group": "/ecs/fargatetestapp",
28+
"awslogs-region": "us-west-2",
29+
"awslogs-stream": "ecs/fargateapp/1e1698469422439ea356071e581e8545",
2230
},
31+
"ContainerARN": "arn:aws:ecs:us-west-2:123456789012:container/testcluster/1e1698469422439ea356071e581e8545/050256a5-a7f3-461c-a16f-aca4eae37b01",
32+
"Networks": [
33+
{
34+
"NetworkMode": "awsvpc",
35+
"IPv4Addresses": ["10.10.10.10"],
36+
"AttachmentIndex": 0,
37+
"MACAddress": "06:d7:3f:49:1d:a7",
38+
"IPv4SubnetCIDRBlock": "10.10.10.0/20",
39+
"DomainNameServers": ["10.10.10.2"],
40+
"DomainNameSearchList": ["us-west-2.compute.internal"],
41+
"PrivateDNSName": "ip-10-10-10-10.us-west-2.compute.internal",
42+
"SubnetGatewayIpv4Address": "10.10.10.1/20",
43+
}
44+
],
45+
"Snapshotter": "overlayfs",
46+
}
47+
48+
NO_ID_RESPONSE = {
49+
"Name": "fargateapp",
50+
"DockerName": "fargateapp",
51+
"Image": "123456789012.dkr.ecr.us-west-2.amazonaws.com/fargatetest:latest",
52+
"ImageID": "sha256:1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcd",
53+
"Labels": {
54+
"com.amazonaws.ecs.cluster": "arn:aws:ecs:us-west-2:123456789012:cluster/testcluster",
55+
"com.amazonaws.ecs.container-name": "fargateapp",
56+
"com.amazonaws.ecs.task-arn": "arn:aws:ecs:us-west-2:123456789012:task/testcluster/1e1698469422439ea356071e581e8545",
57+
"com.amazonaws.ecs.task-definition-family": "fargatetestapp",
58+
"com.amazonaws.ecs.task-definition-version": "7",
59+
},
60+
"DesiredStatus": "RUNNING",
61+
"KnownStatus": "RUNNING",
62+
"Limits": {"CPU": 2},
2363
"CreatedAt": "2024-04-25T17:38:31.073208914Z",
2464
"StartedAt": "2024-04-25T17:38:31.073208914Z",
2565
"Type": "NORMAL",
@@ -28,40 +68,47 @@
2868
"awslogs-create-group": "true",
2969
"awslogs-group": "/ecs/fargatetestapp",
3070
"awslogs-region": "us-west-2",
31-
"awslogs-stream": "ecs/fargateapp/1e1698469422439ea356071e581e8545"
71+
"awslogs-stream": "ecs/fargateapp/1e1698469422439ea356071e581e8545",
3272
},
3373
"ContainerARN": "arn:aws:ecs:us-west-2:123456789012:container/testcluster/1e1698469422439ea356071e581e8545/050256a5-a7f3-461c-a16f-aca4eae37b01",
3474
"Networks": [
3575
{
3676
"NetworkMode": "awsvpc",
37-
"IPv4Addresses": [
38-
"10.10.10.10"
39-
],
77+
"IPv4Addresses": ["10.10.10.10"],
4078
"AttachmentIndex": 0,
4179
"MACAddress": "06:d7:3f:49:1d:a7",
4280
"IPv4SubnetCIDRBlock": "10.10.10.0/20",
43-
"DomainNameServers": [
44-
"10.10.10.2"
45-
],
46-
"DomainNameSearchList": [
47-
"us-west-2.compute.internal"
48-
],
81+
"DomainNameServers": ["10.10.10.2"],
82+
"DomainNameSearchList": ["us-west-2.compute.internal"],
4983
"PrivateDNSName": "ip-10-10-10-10.us-west-2.compute.internal",
50-
"SubnetGatewayIpv4Address": "10.10.10.1/20"
84+
"SubnetGatewayIpv4Address": "10.10.10.1/20",
5185
}
5286
],
53-
"Snapshotter": "overlayfs"
87+
"Snapshotter": "overlayfs",
5488
}
5589

5690

5791
def simple_get(self):
58-
response = json.dumps(STANDARD_RESPONSE).encode('utf-8')
92+
response = json.dumps(STANDARD_RESPONSE).encode("utf-8")
5993
self.send_response(200)
6094
self.end_headers()
6195
self.wfile.write(response)
6296

6397

64-
@pytest.fixture(scope="session")
98+
def bad_response_get(self):
99+
response = json.dumps(NO_ID_RESPONSE).encode("utf-8")
100+
self.send_response(200)
101+
self.end_headers()
102+
self.wfile.write(response)
103+
104+
105+
@pytest.fixture(scope="function")
65106
def mock_server():
66107
with MockExternalHTTPServer(handler=simple_get) as mock_server:
67108
yield mock_server
109+
110+
111+
@pytest.fixture(scope="function")
112+
def bad_response_mock_server():
113+
with MockExternalHTTPServer(handler=bad_response_get) as bad_response_mock_server:
114+
yield bad_response_mock_server

tests/cross_agent/test_ecs_data.py

Lines changed: 24 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15,20 +15,40 @@
1515
import os
1616
import pytest
1717
import newrelic.common.utilization as u
18-
from fixtures.ecs_container_id.ecs_mock_server import mock_server
18+
from fixtures.ecs_container_id.ecs_mock_server import mock_server, bad_response_mock_server
1919
from test_pcf_utilization_data import Environ
2020

2121

2222
@pytest.mark.parametrize("env_key", ["ECS_CONTAINER_METADATA_URI_V4", "ECS_CONTAINER_METADATA_URI"])
2323
def test_ecs_docker_container_id(env_key, mock_server):
24-
mock_endpoint = 'http://localhost:%d' % mock_server.port
24+
mock_endpoint = "http://localhost:%d" % mock_server.port
2525
env_dict = {env_key: mock_endpoint}
2626

2727
with Environ(env_dict):
2828
data = u.ECSUtilization.detect()
29-
assert data == {'ecsDockerId': '1e1698469422439ea356071e581e8545-2769485393'}
29+
30+
assert data == {"ecsDockerId": "1e1698469422439ea356071e581e8545-2769485393"}
31+
32+
33+
@pytest.mark.parametrize(
34+
"env_dict", [{"ECS_CONTAINER_METADATA_URI_V4": "http:/invalid-uri"}, {"ECS_CONTAINER_METADATA_URI_V4": None}]
35+
)
36+
def test_ecs_docker_container_id_bad_uri(env_dict, mock_server):
37+
with Environ(env_dict):
38+
data = u.ECSUtilization.detect()
39+
40+
assert data is None
41+
42+
43+
def test_ecs_docker_container_id_bad_response(bad_response_mock_server):
44+
mock_endpoint = "http://localhost:%d" % bad_response_mock_server.port
45+
env_dict = {"ECS_CONTAINER_METADATA_URI": mock_endpoint}
46+
47+
with Environ(env_dict):
48+
data = u.ECSUtilization.detect()
49+
50+
assert data is None
3051

3152

3253
def test_ecs_container_id_no_metadata_env_vars():
3354
assert u.ECSUtilization.detect() is None
34-

0 commit comments

Comments
 (0)