Skip to content

Commit 032b285

Browse files
committed
Add unit test for network interface setup
1 parent a59f9c9 commit 032b285

File tree

2 files changed

+76
-2
lines changed

2 files changed

+76
-2
lines changed

cli/src/pcluster/templates/queues_stack.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
OS_MAPPING,
1616
PCLUSTER_COMPUTE_RESOURCE_NAME_TAG,
1717
PCLUSTER_QUEUE_NAME_TAG,
18-
PCLUSTER_S3_ARTIFACTS_DICT,
18+
PCLUSTER_S3_ARTIFACTS_DICT, P6E_GB200,
1919
)
2020
from pcluster.templates.cdk_builder_utils import (
2121
CdkLaunchTemplateBuilder,
@@ -368,7 +368,7 @@ def add_network_interfaces(
368368
):
369369
"""Generate launch template network interfaces list"""
370370

371-
is_gb200 = compute_resource.instance_types[0] == "p6e-gb200.36xlarge"
371+
is_gb200 = compute_resource.instance_types[0].split(".")[0] == P6E_GB200
372372
interface = "efa" if compute_resource.efa and compute_resource.efa.enabled and not is_gb200 else None
373373

374374
compute_lt_nw_interfaces = [

cli/tests/pcluster/templates/test_queues_stack.py

Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,14 @@
11
import json
2+
from unittest.mock import MagicMock, patch
23

34
import pytest
45
from assertpy import assert_that
6+
from constructs import Construct
57
from freezegun import freeze_time
68

79
from pcluster.schemas.cluster_schema import ClusterSchema
810
from pcluster.templates.cdk_builder import CDKTemplateBuilder
11+
from pcluster.templates.queues_stack import QueuesStack, add_network_interfaces
912
from pcluster.utils import load_json_dict, load_yaml_dict
1013
from tests.pcluster.aws.dummy_aws_api import mock_aws_api
1114
from tests.pcluster.models.dummy_s3_bucket import dummy_cluster_bucket, mock_bucket_object_utils
@@ -152,6 +155,77 @@ def test_compute_nodes_dna_json(
152155
assert_that(json.loads(compute_node_extra_json)).is_equal_to(expected_compute_node_extra_json)
153156

154157

158+
class NetworkCard:
159+
def __init__(self, index, max_interfaces=1):
160+
self._index = index
161+
self._max_interfaces = max_interfaces
162+
163+
def network_card_index(self):
164+
return self._index
165+
166+
def maximum_network_interfaces(self):
167+
return self._max_interfaces
168+
169+
170+
@pytest.mark.parametrize(
171+
"efa_enabled, instance_type, network_cards_list, expected_interfaces",
172+
[
173+
(
174+
True,
175+
"p6e-gb200.36xlarge",
176+
[NetworkCard(0), NetworkCard(1), NetworkCard(2, 2), NetworkCard(3), NetworkCard(4, 2)],
177+
[
178+
{"network_card_index": 0, "interface_type": None, "device_index": 0},
179+
{"network_card_index": 1, "interface_type": "efa-only", "device_index": 0},
180+
{"network_card_index": 2, "interface_type": "efa", "device_index": 1},
181+
{"network_card_index": 3, "interface_type": "efa-only", "device_index": 0},
182+
{"network_card_index": 4, "interface_type": "efa", "device_index": 1},
183+
],
184+
),
185+
(
186+
False,
187+
"p6e-gb200.36xlarge",
188+
[NetworkCard(0), NetworkCard(1), NetworkCard(2, 2), NetworkCard(3), NetworkCard(4, 2)],
189+
[
190+
{"network_card_index": 0, "interface_type": None, "device_index": 0},
191+
{"network_card_index": 2, "interface_type": None, "device_index": 1},
192+
{"network_card_index": 4, "interface_type": None, "device_index": 1},
193+
],
194+
),
195+
(
196+
True,
197+
"c6in.32xlarge",
198+
[NetworkCard(0), NetworkCard(1, 2), NetworkCard(2, 2)],
199+
[
200+
{"network_card_index": 0, "interface_type": "efa", "device_index": 0},
201+
{"network_card_index": 1, "interface_type": "efa", "device_index": 1},
202+
{"network_card_index": 2, "interface_type": "efa", "device_index": 1},
203+
],
204+
),
205+
],
206+
)
207+
def test_add_compute_resource_launch_template(
208+
mocker, efa_enabled, instance_type, test_datadir, network_cards_list, expected_interfaces
209+
):
210+
mock_compute_resource = MagicMock()
211+
mock_compute_resource.name = "test-compute-resource"
212+
mock_compute_resource.instance_types = [instance_type]
213+
mock_compute_resource.efa.enabled = efa_enabled
214+
mock_compute_resource.network_cards_list = network_cards_list
215+
216+
mock_queue = MagicMock()
217+
mock_queue.name = "test-queue"
218+
219+
network_interfaces = add_network_interfaces(mock_queue, mock_compute_resource, ["sg-12345"])
220+
221+
assert len(network_interfaces) == len(expected_interfaces)
222+
223+
for actual, expected in zip(network_interfaces, expected_interfaces):
224+
assert actual.network_card_index == expected["network_card_index"]
225+
assert actual.interface_type == expected["interface_type"]
226+
assert actual.device_index == expected["device_index"]
227+
228+
155229
def render_join(elem: dict):
156230
sep = str(elem[0])
157231
body = elem[1]

0 commit comments

Comments
 (0)