Skip to content

Commit e553986

Browse files
committed
Add nfc-ethernet DUT pairing mode for python_testing suites
Add NFC_ETHERNET to DutPairingModeEnum and NFC_PAIRING_MODES so python_testing (SDK) tests can commission Matter-over-Ethernet devices via NFC, mirroring the connectedhomeip Python controller support already merged upstream (project-chip/connectedhomeip#43657). generate_command_arguments() requires no code change: since nfc-ethernet is not part of the wifi or thread pairing-mode tuples, it falls straight through to the existing NFC handling that suppresses --discriminator/--passcode and injects NFC_Reader_index. YAML/chip-tool test support is intentionally out of scope here, since chip-tool itself does not support nfc-ethernet yet (project-chip/connectedhomeip#43613 is still open upstream). Adds test coverage mirroring the existing nfc-wifi/nfc-thread tests in test_utils.py and test_test_environment_config.py. Related: project-chip/certification-tool#1067
1 parent bd725d3 commit e553986

3 files changed

Lines changed: 43 additions & 3 deletions

File tree

app/constants/shared_constants.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,7 @@ class DutPairingModeEnum(str, Enum):
6161
ON_NETWORK = "onnetwork"
6262
BLE_WIFI = "ble-wifi"
6363
NFC_WIFI = "nfc-wifi"
64+
NFC_ETHERNET = "nfc-ethernet"
6465
BLE_THREAD = "ble-thread"
6566
WIFIPAF_WIFI = "wifipaf-wifi"
6667
NFC_THREAD = "nfc-thread"
@@ -69,5 +70,6 @@ class DutPairingModeEnum(str, Enum):
6970

7071
NFC_PAIRING_MODES = {
7172
DutPairingModeEnum.NFC_WIFI.value,
73+
DutPairingModeEnum.NFC_ETHERNET.value,
7274
DutPairingModeEnum.NFC_THREAD.value,
7375
}

test_collections/matter/sdk_tests/support/tests/matter/test_test_environment_config.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -330,7 +330,7 @@ def test_create_config_matter_with_non_thread_modes_no_ba_params_succeeds(
330330
assert config_matter.dut_config.pairing_mode == pairing_mode
331331

332332

333-
@pytest.mark.parametrize("pairing_mode", ["nfc-thread", "nfc-wifi"])
333+
@pytest.mark.parametrize("pairing_mode", ["nfc-thread", "nfc-wifi", "nfc-ethernet"])
334334
def test_create_config_matter_nfc_without_discriminator_and_setup_code_succeeds(
335335
pairing_mode: str,
336336
) -> None:
@@ -369,7 +369,7 @@ def test_create_config_matter_nfc_without_discriminator_and_setup_code_succeeds(
369369
assert config_matter.dut_config.setup_code is None
370370

371371

372-
@pytest.mark.parametrize("pairing_mode", ["nfc-thread", "nfc-wifi"])
372+
@pytest.mark.parametrize("pairing_mode", ["nfc-thread", "nfc-wifi", "nfc-ethernet"])
373373
def test_create_config_matter_nfc_with_discriminator_succeeds(
374374
pairing_mode: str,
375375
) -> None:
@@ -405,7 +405,7 @@ def test_create_config_matter_nfc_with_discriminator_succeeds(
405405
assert config_matter.dut_config.discriminator == "3840"
406406

407407

408-
@pytest.mark.parametrize("pairing_mode", ["nfc-thread", "nfc-wifi"])
408+
@pytest.mark.parametrize("pairing_mode", ["nfc-thread", "nfc-wifi", "nfc-ethernet"])
409409
def test_create_config_matter_nfc_with_setup_code_succeeds(
410410
pairing_mode: str,
411411
) -> None:

test_collections/matter/sdk_tests/support/tests/python_tests/test_utils.py

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -187,6 +187,43 @@ async def test_generate_command_arguments_nfc_wifi_pairing_mode() -> None:
187187
] == arguments
188188

189189

190+
@pytest.mark.asyncio
191+
async def test_generate_command_arguments_nfc_ethernet_pairing_mode() -> None:
192+
# Mock config
193+
mock_config = default_environment_config.copy(deep=True) # type: ignore
194+
195+
mock_config.test_parameters = {
196+
"paa-trust-store-path": "/paa-root-certs",
197+
"storage_path": "/root/admin_storage.json",
198+
}
199+
200+
mock_dut_config = DutConfig(
201+
pairing_mode=DutPairingModeEnum.NFC_ETHERNET,
202+
chip_timeout=None,
203+
)
204+
205+
mock_config.dut_config = mock_dut_config
206+
207+
arguments = await generate_command_arguments(
208+
config=mock_config, omit_commissioning_method=False
209+
)
210+
211+
# NFC-Ethernet needs neither --wifi-* nor --thread-dataset-hex arguments,
212+
# since Ethernet devices don't require network credentials to commission.
213+
assert [
214+
"--trace-to json:log",
215+
f"--commissioning-method {DutPairingModeEnum.NFC_ETHERNET.value}",
216+
"--paa-trust-store-path /paa-root-certs",
217+
"--storage_path /root/admin_storage.json",
218+
"--int-arg",
219+
"NFC_Reader_index:0",
220+
] == arguments
221+
assert "--discriminator" not in " ".join(arguments)
222+
assert "--passcode" not in " ".join(arguments)
223+
assert "--wifi-ssid" not in " ".join(arguments)
224+
assert "--thread-dataset-hex" not in " ".join(arguments)
225+
226+
190227
@pytest.mark.asyncio
191228
async def test_generate_command_arguments_ble_thread() -> None:
192229
# Mock config
@@ -382,6 +419,7 @@ async def test_generate_command_arguments_nfc_thread_for_external_network() -> N
382419
NFC_PAIRING_MODES_PARAMS = [
383420
pytest.param(DutPairingModeEnum.NFC_THREAD, id="nfc-thread"),
384421
pytest.param(DutPairingModeEnum.NFC_WIFI, id="nfc-wifi"),
422+
pytest.param(DutPairingModeEnum.NFC_ETHERNET, id="nfc-ethernet"),
385423
]
386424

387425
MOCK_THREAD_DATASET = (

0 commit comments

Comments
 (0)