Skip to content

Commit 4d938bf

Browse files
committed
Added support for nfc-onnetwork.
1 parent 0ae226e commit 4d938bf

8 files changed

Lines changed: 110 additions & 10 deletions

File tree

app/constants/shared_constants.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,7 @@ class MessageKeysEnum(str, Enum):
5959
# Enum for DUT Pairing Modes
6060
class DutPairingModeEnum(str, Enum):
6161
ON_NETWORK = "onnetwork"
62+
NFC_ON_NETWORK = "nfc-onnetwork"
6263
BLE_WIFI = "ble-wifi"
6364
NFC_WIFI = "nfc-wifi"
6465
BLE_THREAD = "ble-thread"

test_collections/matter/sdk_tests/support/performance_tests/models/utils.py

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -38,11 +38,14 @@ async def generate_command_arguments(
3838
dut_config = config.dut_config # type: ignore[attr-defined]
3939
test_parameters = config.test_parameters
4040

41-
pairing_mode = (
42-
"on-network"
43-
if dut_config.pairing_mode == DutPairingModeEnum.ON_NETWORK
44-
else dut_config.pairing_mode
45-
)
41+
// TH env uses "onnetwork" whereas SDK uses "on-network"
42+
// Same thing for "nfc-onnetwork" and "nfc-on-network"
43+
if dut_config.pairing_mode == DutPairingModeEnum.ON_NETWORK:
44+
pairing_mode = "on-network"
45+
elif dut_config.pairing_mode == DutPairingModeEnum.NFC_ON_NETWORK:
46+
pairing_mode = "nfc-on-network"
47+
else:
48+
pairing_mode = dut_config.pairing_mode
4649

4750
arguments = []
4851
# Increase log level by adding trace log

test_collections/matter/sdk_tests/support/python_testing/models/test_suite.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -108,6 +108,7 @@ async def setup(self) -> None:
108108
if self.matter_config.dut_config.pairing_mode in (
109109
DutPairingModeEnum.NFC_THREAD,
110110
DutPairingModeEnum.NFC_WIFI,
111+
DutPairingModeEnum.NFC_ON_NETWORK,
111112
DutPairingModeEnum.THREAD_MESHCOP,
112113
):
113114
# When PCSC reader is used in a Docker container, pollkit should

test_collections/matter/sdk_tests/support/python_testing/models/utils.py

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,7 @@
5555
NFC_PAIRING_MODES = {
5656
DutPairingModeEnum.NFC_WIFI.value,
5757
DutPairingModeEnum.NFC_THREAD.value,
58+
DutPairingModeEnum.NFC_ON_NETWORK.value,
5859
}
5960

6061

@@ -65,11 +66,12 @@ async def generate_command_arguments(
6566
test_parameters = config.test_parameters
6667

6768
# Map TH pairing modes to SDK commissioning method names
68-
pairing_mode = (
69-
"on-network"
70-
if dut_config.pairing_mode == DutPairingModeEnum.ON_NETWORK
71-
else dut_config.pairing_mode
72-
)
69+
if dut_config.pairing_mode == DutPairingModeEnum.ON_NETWORK:
70+
pairing_mode = "on-network"
71+
elif dut_config.pairing_mode == DutPairingModeEnum.NFC_ON_NETWORK:
72+
pairing_mode = "nfc-on-network"
73+
else:
74+
pairing_mode = dut_config.pairing_mode
7375

7476
arguments = []
7577
# Increase log level by adding trace log

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

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -100,6 +100,41 @@ async def test_generate_command_arguments_on_network() -> None:
100100
] == arguments
101101

102102

103+
@pytest.mark.asyncio
104+
async def test_generate_command_arguments_nfc_on_network() -> None:
105+
# Mock config
106+
mock_config = default_environment_config.copy(deep=True) # type: ignore
107+
108+
# Using attributes with both - and _ word separators in test_parameters
109+
# Both must be considered as python test arguments the way it was configured
110+
mock_config.test_parameters = {
111+
"paa-trust-store-path": "/paa-root-certs",
112+
"storage_path": "/root/admin_storage.json",
113+
}
114+
115+
mock_dut_config = DutConfig(
116+
discriminator="123",
117+
setup_code="1234",
118+
pairing_mode=DutPairingModeEnum.NFC_ON_NETWORK,
119+
chip_timeout=None,
120+
)
121+
122+
mock_config.dut_config = mock_dut_config
123+
124+
arguments = await generate_command_arguments(
125+
config=mock_config, omit_commissioning_method=False
126+
)
127+
128+
assert [
129+
"--trace-to json:log",
130+
"--commissioning-method nfc-on-network",
131+
"--discriminator 123",
132+
"--passcode 1234",
133+
"--paa-trust-store-path /paa-root-certs",
134+
"--storage_path /root/admin_storage.json",
135+
] == arguments
136+
137+
103138
@pytest.mark.asyncio
104139
async def test_generate_command_arguments_ble_wifi_pairing_mode() -> None:
105140
# Mock config

test_collections/matter/sdk_tests/support/tests/yaml_tests/test_matter_yaml_runner.py

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -377,6 +377,39 @@ async def test_pairing_on_network_command_params() -> None:
377377
chip_server._ChipServer__node_id = None
378378

379379

380+
@pytest.mark.asyncio
381+
async def test_pairing_nfc_on_network_command_params() -> None:
382+
original_trace_setting_value = matter_settings.CHIP_TOOL_TRACE
383+
if original_trace_setting_value is True:
384+
matter_settings.CHIP_TOOL_TRACE = False
385+
386+
# Attributes
387+
runner: MatterYAMLRunner = MatterYAMLRunner()
388+
chip_server: ChipServer = ChipServer()
389+
discriminator = "1234"
390+
setup_code = "0123456"
391+
392+
with mock.patch.object(
393+
target=runner,
394+
attribute="send_websocket_command",
395+
return_value='{"results": []}',
396+
) as mock_send_websocket_command:
397+
result = await runner.pairing_nfc_on_network(
398+
setup_code=setup_code,
399+
discriminator=discriminator,
400+
)
401+
402+
expected_params = f"{hex(chip_server.node_id)} {setup_code} {discriminator}"
403+
expected_command = f"pairing nfc-onnetwork-long {expected_params}"
404+
405+
assert result is True
406+
mock_send_websocket_command.assert_awaited_once_with(expected_command)
407+
408+
# clean up:
409+
matter_settings.CHIP_TOOL_TRACE = original_trace_setting_value
410+
chip_server._ChipServer__node_id = None
411+
412+
380413
@pytest.mark.asyncio
381414
@pytest.mark.parametrize(
382415
"pairing_fn_name, pairing_cmd",

test_collections/matter/sdk_tests/support/yaml_tests/matter_yaml_runner.py

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,7 @@
5656

5757
PAIRING_CMD = "pairing"
5858
PAIRING_MODE_ONNETWORK = "onnetwork-long"
59+
PAIRING_MODE_NFC_ONNETWORK = "nfc-onnetwork-long"
5960
PAIRING_MODE_BLE_WIFI = "ble-wifi"
6061
PAIRING_MODE_NFC_WIFI = "nfc-wifi"
6162
PAIRING_MODE_BLE_THREAD = "ble-thread"
@@ -272,6 +273,18 @@ async def pairing_on_network(
272273
discriminator,
273274
)
274275

276+
async def pairing_nfc_on_network(
277+
self,
278+
setup_code: str,
279+
discriminator: str,
280+
) -> bool:
281+
return await self.pairing(
282+
PAIRING_MODE_NFC_ONNETWORK,
283+
hex(self.chip_server.node_id),
284+
setup_code,
285+
discriminator,
286+
)
287+
275288
async def pairing_ble_wifi(
276289
self,
277290
ssid: str,

test_collections/matter/sdk_tests/support/yaml_tests/models/chip_suite.py

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,7 @@ async def setup(self) -> None:
7474
if self.config_matter.dut_config.pairing_mode in (
7575
DutPairingModeEnum.NFC_THREAD,
7676
DutPairingModeEnum.NFC_WIFI,
77+
DutPairingModeEnum.NFC_ON_NETWORK,
7778
):
7879
# When PCSC reader is used in a Docker container, pollkit should
7980
# be disabled
@@ -123,6 +124,11 @@ async def __commission_dut_allowing_retries(self) -> None:
123124
async def __pair_with_dut(self) -> None:
124125
if self.config_matter.dut_config.pairing_mode is DutPairingModeEnum.ON_NETWORK:
125126
pair_result = await self.__pair_with_dut_onnetwork()
127+
if (
128+
self.config_matter.dut_config.pairing_mode
129+
is DutPairingModeEnum.NFC_ON_NETWORK
130+
):
131+
pair_result = await self.__pair_with_dut_nfc_onnetwork()
126132
elif self.config_matter.dut_config.pairing_mode is DutPairingModeEnum.BLE_WIFI:
127133
pair_result = await self.__pair_wifi_dut_wifi_modes("ble")
128134
elif self.config_matter.dut_config.pairing_mode is DutPairingModeEnum.NFC_WIFI:
@@ -157,6 +163,12 @@ async def __pair_with_dut_onnetwork(self) -> bool:
157163
discriminator=self.config_matter.dut_config.discriminator,
158164
)
159165

166+
async def __pair_with_dut_nfc_onnetwork(self) -> bool:
167+
return await self.runner.pairing_nfc_on_network(
168+
setup_code=self.config_matter.dut_config.setup_code,
169+
discriminator=self.config_matter.dut_config.discriminator,
170+
)
171+
160172
async def __pair_wifi_dut_wifi_modes(self, mode: str) -> bool:
161173
if self.config_matter.network.wifi is None:
162174
raise DUTCommissioningError("Tool config is missing wifi config.")

0 commit comments

Comments
 (0)