Skip to content

Commit 1090800

Browse files
yufengwangcapull[bot]
authored andcommitted
[java-matter-controller] Add pairing already-discovered command (#24916)
* [java-matter-controller] Add pairing already-discovered command * Address review comments * Update helper text
1 parent b7c2d71 commit 1090800

File tree

8 files changed

+97
-24
lines changed

8 files changed

+97
-24
lines changed

.github/workflows/tests.yaml

+14-2
Original file line numberDiff line numberDiff line change
@@ -523,7 +523,7 @@ jobs:
523523
--tool-args "commissionables" \
524524
--factoryreset \
525525
'
526-
- name: Run Pairing over Onnetwork Test
526+
- name: Run Pairing Onnetwork Test
527527
timeout-minutes: 10
528528
run: |
529529
scripts/run_in_build_env.sh \
@@ -532,9 +532,21 @@ jobs:
532532
--app-args "--discriminator 3840 --interface-id -1" \
533533
--tool-path out/linux-x64-java-matter-controller \
534534
--tool-cluster "pairing" \
535-
--tool-args "onnetwork-long --nodeid 1 --setup-payload 20202021 --discriminator 3840 -t 1000" \
535+
--tool-args "onnetwork-long --nodeid 1 --setup-pin-code 20202021 --discriminator 3840 -t 1000" \
536536
--factoryreset \
537537
'
538+
- name: Run Pairing AlreadyDiscovered Test
539+
timeout-minutes: 10
540+
run: |
541+
scripts/run_in_build_env.sh \
542+
'./scripts/tests/run_java_test.py \
543+
--app out/linux-x64-all-clusters-ipv6only-no-ble-no-wifi-tsan-clang-test/chip-all-clusters-app \
544+
--app-args "--discriminator 3840 --interface-id -1" \
545+
--tool-path out/linux-x64-java-matter-controller \
546+
--tool-cluster "pairing" \
547+
--tool-args "already-discovered --nodeid 1 --setup-pin-code 20202021 --address ::1 --port 5540 -t 1000" \
548+
--factoryreset \
549+
'
538550
- name: Uploading core files
539551
uses: actions/upload-artifact@v3
540552
if: ${{ failure() && !env.ACT }}

examples/java-matter-controller/BUILD.gn

+1
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@ java_binary("java-matter-controller") {
4242
"java/src/com/matter/controller/commands/discover/DiscoverCommissionersCommand.java",
4343
"java/src/com/matter/controller/commands/pairing/CloseSessionCommand.java",
4444
"java/src/com/matter/controller/commands/pairing/DiscoveryFilterType.java",
45+
"java/src/com/matter/controller/commands/pairing/PairAlreadyDiscoveredCommand.java",
4546
"java/src/com/matter/controller/commands/pairing/PairCodeCommand.java",
4647
"java/src/com/matter/controller/commands/pairing/PairCodePaseCommand.java",
4748
"java/src/com/matter/controller/commands/pairing/PairCodeThreadCommand.java",

examples/java-matter-controller/java/src/com/matter/controller/Main.java

+3
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,8 @@ private static void registerCommandsPairing(
6060
new PairCodeWifiCommand(controller, credentialsIssuer);
6161
PairCodeThreadCommand pairCodeThreadCommand =
6262
new PairCodeThreadCommand(controller, credentialsIssuer);
63+
PairAlreadyDiscoveredCommand pairAlreadyDiscoveredCommand =
64+
new PairAlreadyDiscoveredCommand(controller, credentialsIssuer);
6365
PairOnNetworkCommand pairOnNetworkCommand =
6466
new PairOnNetworkCommand(controller, credentialsIssuer);
6567
PairOnNetworkShortCommand pairOnNetworkShortCommand =
@@ -81,6 +83,7 @@ private static void registerCommandsPairing(
8183
clusterCommands.add(pairCodePaseCommand);
8284
clusterCommands.add(pairCodeWifiCommand);
8385
clusterCommands.add(pairCodeThreadCommand);
86+
clusterCommands.add(pairAlreadyDiscoveredCommand);
8487
clusterCommands.add(pairOnNetworkCommand);
8588
clusterCommands.add(pairOnNetworkShortCommand);
8689
clusterCommands.add(pairOnNetworkLongCommand);
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
package com.matter.controller.commands.pairing;
2+
3+
import chip.devicecontroller.ChipDeviceController;
4+
import com.matter.controller.commands.common.CredentialsIssuer;
5+
6+
public final class PairAlreadyDiscoveredCommand extends PairingCommand {
7+
public PairAlreadyDiscoveredCommand(
8+
ChipDeviceController controller, CredentialsIssuer credsIssue) {
9+
super(
10+
controller,
11+
"already-discovered",
12+
PairingModeType.ALREADY_DISCOVERED,
13+
PairingNetworkType.NONE,
14+
credsIssue);
15+
}
16+
17+
@Override
18+
protected void runCommand() {
19+
currentCommissioner()
20+
.pairDeviceWithAddress(
21+
getNodeId(),
22+
getRemoteAddr().getHostAddress(),
23+
getRemotePort(),
24+
getDiscriminator(),
25+
getSetupPINCode(),
26+
null);
27+
currentCommissioner().setCompletionListener(this);
28+
waitCompleteMs(getTimeoutMillis());
29+
}
30+
}

examples/java-matter-controller/java/src/com/matter/controller/commands/pairing/PairingCommand.java

+25-17
Original file line numberDiff line numberDiff line change
@@ -51,22 +51,6 @@ public abstract class PairingCommand extends MatterCommand
5151
private final StringBuffer mDiscoveryFilterInstanceName = new StringBuffer();
5252
private static Logger logger = Logger.getLogger(PairingCommand.class.getName());
5353

54-
public long getNodeId() {
55-
return mNodeId.get();
56-
}
57-
58-
public int getSetupPINCode() {
59-
return mSetupPINCode.get();
60-
}
61-
62-
public int getDiscriminator() {
63-
return mDiscriminator.get();
64-
}
65-
66-
public long getTimeoutMillis() {
67-
return mTimeoutMillis.get();
68-
}
69-
7054
@Override
7155
public void onConnectDeviceComplete() {
7256
logger.log(Level.INFO, "onConnectDeviceComplete");
@@ -135,10 +119,30 @@ public void onOpCSRGenerationComplete(byte[] csr) {
135119
}
136120
}
137121

122+
public long getNodeId() {
123+
return mNodeId.get();
124+
}
125+
138126
public IPAddress getRemoteAddr() {
139127
return mRemoteAddr;
140128
}
141129

130+
public int getRemotePort() {
131+
return mRemotePort.get();
132+
}
133+
134+
public int getSetupPINCode() {
135+
return mSetupPINCode.get();
136+
}
137+
138+
public int getDiscriminator() {
139+
return mDiscriminator.get();
140+
}
141+
142+
public long getTimeoutMillis() {
143+
return mTimeoutMillis.get();
144+
}
145+
142146
public PairingCommand(
143147
ChipDeviceController controller,
144148
String commandName,
@@ -170,7 +174,6 @@ public PairingCommand(
170174

171175
switch (networkType) {
172176
case NONE:
173-
case ETHERNET:
174177
break;
175178
case WIFI:
176179
addArgument("ssid", mSSID, null, false);
@@ -205,6 +208,11 @@ public PairingCommand(
205208
addArgument("device-remote-ip", mRemoteAddr, false);
206209
addArgument("device-remote-port", (short) 0, Short.MAX_VALUE, mRemotePort, null, false);
207210
break;
211+
case ALREADY_DISCOVERED:
212+
addArgument("setup-pin-code", 0, 134217727, mSetupPINCode, null, false);
213+
addArgument("device-remote-ip", mRemoteAddr, false);
214+
addArgument("device-remote-port", (short) 0, Short.MAX_VALUE, mRemotePort, null, false);
215+
break;
208216
}
209217

210218
switch (filterType) {

examples/java-matter-controller/java/src/com/matter/controller/commands/pairing/PairingModeType.java

+1
Original file line numberDiff line numberDiff line change
@@ -24,5 +24,6 @@ public enum PairingModeType {
2424
CODE_PASE_ONLY,
2525
BLE,
2626
SOFT_AP,
27+
ALREADY_DISCOVERED,
2728
ON_NETWORK;
2829
}

examples/java-matter-controller/java/src/com/matter/controller/commands/pairing/PairingNetworkType.java

-1
Original file line numberDiff line numberDiff line change
@@ -22,5 +22,4 @@ public enum PairingNetworkType {
2222
NONE,
2323
WIFI,
2424
THREAD,
25-
ETHERNET;
2625
}

scripts/tests/java/commissioning_test.py

+23-4
Original file line numberDiff line numberDiff line change
@@ -42,18 +42,24 @@ def __init__(self, thread_list: typing.List[threading.Thread], queue: queue.Queu
4242
parser.add_argument('command', help="Command name")
4343
parser.add_argument('-t', '--timeout', help="The program will return with timeout after specified seconds", default='200')
4444
parser.add_argument('-a', '--address', help="Address of the device")
45+
parser.add_argument('-p', '--port', help="Port of the remote device", default='5540')
4546
parser.add_argument('-s', '--setup-payload', dest='setup_payload',
4647
help="Setup Payload (manual pairing code or QR code content)")
48+
parser.add_argument('-c', '--setup-pin-code', dest='setup_pin_code',
49+
help="Setup PIN code which can be used for password-authenticated session establishment (PASE) with the Commissionee")
4750
parser.add_argument('-n', '--nodeid', help="The Node ID issued to the device", default='1')
4851
parser.add_argument('-d', '--discriminator', help="Discriminator of the device", default='3840')
49-
parser.add_argument('-p', '--paa-trust-store-path', dest='paa_trust_store_path',
52+
parser.add_argument('-u', '--paa-trust-store-path', dest='paa_trust_store_path',
5053
help="Path that contains valid and trusted PAA Root Certificates")
5154

5255
args = parser.parse_args(args.split())
5356

5457
self.command_name = args.command
5558
self.nodeid = args.nodeid
59+
self.address = args.address
60+
self.port = args.port
5661
self.setup_payload = args.setup_payload
62+
self.setup_pin_code = args.setup_pin_code
5763
self.discriminator = args.discriminator
5864
self.timeout = args.timeout
5965

@@ -67,11 +73,24 @@ def TestCmdOnnetworkLong(self, nodeid, setuppin, discriminator, timeout):
6773
DumpProgramOutputToQueue(self.thread_list, Fore.GREEN + "JAVA " + Style.RESET_ALL, java_process, self.queue)
6874
return java_process.wait()
6975

76+
def TestCmdAlreadyDiscovered(self, nodeid, setuppin, address, port, timeout):
77+
java_command = self.command + ['pairing', 'already-discovered', nodeid, setuppin, address, port, timeout]
78+
logging.info(f"Execute: {java_command}")
79+
java_process = subprocess.Popen(
80+
java_command, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
81+
DumpProgramOutputToQueue(self.thread_list, Fore.GREEN + "JAVA " + Style.RESET_ALL, java_process, self.queue)
82+
return java_process.wait()
83+
7084
def RunTest(self):
7185
if self.command_name == 'onnetwork-long':
72-
logging.info("Testing pairing over onnetwork-long")
73-
code = self.TestCmdOnnetworkLong(self.nodeid, self.setup_payload, self.discriminator, self.timeout)
86+
logging.info("Testing pairing onnetwork-long")
87+
code = self.TestCmdOnnetworkLong(self.nodeid, self.setup_pin_code, self.discriminator, self.timeout)
88+
if code != 0:
89+
raise Exception(f"Testing pairing onnetwork-long failed with error {code}")
90+
elif self.command_name == 'already-discovered':
91+
logging.info("Testing pairing already-discovered")
92+
code = self.TestCmdAlreadyDiscovered(self.nodeid, self.setup_pin_code, self.address, self.port, self.timeout)
7493
if code != 0:
75-
raise Exception(f"Testing onnetwork-long pairing failed with error {code}")
94+
raise Exception(f"Testing pairing already-discovered failed with error {code}")
7695
else:
7796
raise Exception(f"Unsupported command {self.command_name}")

0 commit comments

Comments
 (0)