Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions app/constants/shared_constants.py
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,7 @@ class MessageKeysEnum(str, Enum):
# Enum for DUT Pairing Modes
class DutPairingModeEnum(str, Enum):
ON_NETWORK = "onnetwork"
NFC_ON_NETWORK = "nfc-onnetwork"
BLE_WIFI = "ble-wifi"
NFC_WIFI = "nfc-wifi"
BLE_THREAD = "ble-thread"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -38,11 +38,13 @@ async def generate_command_arguments(
dut_config = config.dut_config # type: ignore[attr-defined]
test_parameters = config.test_parameters

pairing_mode = (
"on-network"
if dut_config.pairing_mode == DutPairingModeEnum.ON_NETWORK
else dut_config.pairing_mode
)
# Map TH pairing modes to SDK commissioning method names
if dut_config.pairing_mode == DutPairingModeEnum.ON_NETWORK:
pairing_mode = "on-network"
elif dut_config.pairing_mode == DutPairingModeEnum.NFC_ON_NETWORK:
pairing_mode = "nfc-on-network"
else:
pairing_mode = dut_config.pairing_mode

arguments = []
# Increase log level by adding trace log
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -108,6 +108,7 @@ async def setup(self) -> None:
if self.matter_config.dut_config.pairing_mode in (
DutPairingModeEnum.NFC_THREAD,
DutPairingModeEnum.NFC_WIFI,
DutPairingModeEnum.NFC_ON_NETWORK,
DutPairingModeEnum.THREAD_MESHCOP,
):
# When PCSC reader is used in a Docker container, pollkit should
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,7 @@
NFC_PAIRING_MODES = {
DutPairingModeEnum.NFC_WIFI.value,
DutPairingModeEnum.NFC_THREAD.value,
DutPairingModeEnum.NFC_ON_NETWORK.value,
}


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

# Map TH pairing modes to SDK commissioning method names
pairing_mode = (
"on-network"
if dut_config.pairing_mode == DutPairingModeEnum.ON_NETWORK
else dut_config.pairing_mode
)
if dut_config.pairing_mode == DutPairingModeEnum.ON_NETWORK:
pairing_mode = "on-network"
elif dut_config.pairing_mode == DutPairingModeEnum.NFC_ON_NETWORK:
pairing_mode = "nfc-on-network"
else:
pairing_mode = dut_config.pairing_mode

arguments = []
# Increase log level by adding trace log
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -100,6 +100,41 @@ async def test_generate_command_arguments_on_network() -> None:
] == arguments


@pytest.mark.asyncio
async def test_generate_command_arguments_nfc_on_network() -> None:
# Mock config
mock_config = default_environment_config.copy(deep=True) # type: ignore

# Using attributes with both - and _ word separators in test_parameters
# Both must be considered as python test arguments the way it was configured
mock_config.test_parameters = {
"paa-trust-store-path": "/paa-root-certs",
"storage_path": "/root/admin_storage.json",
}

mock_dut_config = DutConfig(
discriminator="123",
setup_code="1234",
pairing_mode=DutPairingModeEnum.NFC_ON_NETWORK,
chip_timeout=None,
)

mock_config.dut_config = mock_dut_config

arguments = await generate_command_arguments(
config=mock_config, omit_commissioning_method=False
)

assert [
"--trace-to json:log",
"--commissioning-method nfc-on-network",
"--discriminator 123",
"--passcode 1234",
"--paa-trust-store-path /paa-root-certs",
"--storage_path /root/admin_storage.json",
] == arguments


@pytest.mark.asyncio
async def test_generate_command_arguments_ble_wifi_pairing_mode() -> None:
# Mock config
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -377,6 +377,39 @@ async def test_pairing_on_network_command_params() -> None:
chip_server._ChipServer__node_id = None


@pytest.mark.asyncio
async def test_pairing_nfc_on_network_command_params() -> None:
original_trace_setting_value = matter_settings.CHIP_TOOL_TRACE
if original_trace_setting_value is True:
matter_settings.CHIP_TOOL_TRACE = False

# Attributes
runner: MatterYAMLRunner = MatterYAMLRunner()
chip_server: ChipServer = ChipServer()
discriminator = "1234"
setup_code = "0123456"

with mock.patch.object(
target=runner,
attribute="send_websocket_command",
return_value='{"results": []}',
) as mock_send_websocket_command:
result = await runner.pairing_nfc_on_network(
setup_code=setup_code,
discriminator=discriminator,
)

expected_params = f"{hex(chip_server.node_id)} {setup_code} {discriminator}"
expected_command = f"pairing nfc-onnetwork-long {expected_params}"

assert result is True
mock_send_websocket_command.assert_awaited_once_with(expected_command)

# clean up:
matter_settings.CHIP_TOOL_TRACE = original_trace_setting_value
chip_server._ChipServer__node_id = None


@pytest.mark.asyncio
@pytest.mark.parametrize(
"pairing_fn_name, pairing_cmd",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,7 @@

PAIRING_CMD = "pairing"
PAIRING_MODE_ONNETWORK = "onnetwork-long"
PAIRING_MODE_NFC_ONNETWORK = "nfc-onnetwork-long"
PAIRING_MODE_BLE_WIFI = "ble-wifi"
PAIRING_MODE_NFC_WIFI = "nfc-wifi"
PAIRING_MODE_BLE_THREAD = "ble-thread"
Expand Down Expand Up @@ -272,6 +273,18 @@ async def pairing_on_network(
discriminator,
)

async def pairing_nfc_on_network(
self,
setup_code: str,
discriminator: str,
) -> bool:
return await self.pairing(
PAIRING_MODE_NFC_ONNETWORK,
hex(self.chip_server.node_id),
setup_code,
discriminator,
)

async def pairing_ble_wifi(
self,
ssid: str,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -74,6 +74,7 @@ async def setup(self) -> None:
if self.config_matter.dut_config.pairing_mode in (
DutPairingModeEnum.NFC_THREAD,
DutPairingModeEnum.NFC_WIFI,
DutPairingModeEnum.NFC_ON_NETWORK,
):
# When PCSC reader is used in a Docker container, pollkit should
# be disabled
Expand Down Expand Up @@ -123,6 +124,11 @@ async def __commission_dut_allowing_retries(self) -> None:
async def __pair_with_dut(self) -> None:
if self.config_matter.dut_config.pairing_mode is DutPairingModeEnum.ON_NETWORK:
pair_result = await self.__pair_with_dut_onnetwork()
if (
self.config_matter.dut_config.pairing_mode
is DutPairingModeEnum.NFC_ON_NETWORK
):
pair_result = await self.__pair_with_dut_nfc_onnetwork()
elif self.config_matter.dut_config.pairing_mode is DutPairingModeEnum.BLE_WIFI:
pair_result = await self.__pair_wifi_dut_wifi_modes("ble")
elif self.config_matter.dut_config.pairing_mode is DutPairingModeEnum.NFC_WIFI:
Expand Down Expand Up @@ -157,6 +163,12 @@ async def __pair_with_dut_onnetwork(self) -> bool:
discriminator=self.config_matter.dut_config.discriminator,
)

async def __pair_with_dut_nfc_onnetwork(self) -> bool:
return await self.runner.pairing_nfc_on_network(
setup_code=self.config_matter.dut_config.setup_code,
discriminator=self.config_matter.dut_config.discriminator,
)

async def __pair_wifi_dut_wifi_modes(self, mode: str) -> bool:
if self.config_matter.network.wifi is None:
raise DUTCommissioningError("Tool config is missing wifi config.")
Expand Down
Loading