@@ -74,7 +74,6 @@ async def setup_class(self):
74
74
new_certificate_authority = self .certificate_authority_manager .NewCertificateAuthority ()
75
75
new_fabric_admin = new_certificate_authority .NewFabricAdmin (vendorId = 0xFFF1 , fabricId = 2 )
76
76
paa_path = str (self .matter_test_config .paa_trust_store_path )
77
- print (f"paa_path = { paa_path } ------------------------------------------------" )
78
77
self .TH_server_controller = new_fabric_admin .NewController (nodeId = 112233 , paaTrustStorePath = paa_path )
79
78
self .server_nodeid = 1111
80
79
await self .TH_server_controller .CommissionOnNetwork (nodeId = self .server_nodeid , setupPinCode = passcode , filterType = ChipDeviceCtrl .DiscoveryFilterType .LONG_DISCRIMINATOR , filter = discriminator )
@@ -88,17 +87,23 @@ def teardown_class(self):
88
87
89
88
os .remove (self .kvs )
90
89
super ().teardown_class ()
91
-
92
90
93
- #@per_endpoint_test(has_cluster(Clusters.CommissionerControl))
94
- @async_test_body
91
+ @per_endpoint_test (has_cluster (Clusters .CommissionerControl ))
95
92
async def test_TC_CCTRL_3_1 (self ):
93
+ self .is_ci = self .check_pics ('PICS_SDK_CI_ONLY' )
94
+
95
+ #self.step(1)
96
96
th_server_fabrics = await self .read_single_attribute_check_success (cluster = Clusters .OperationalCredentials , attribute = Clusters .OperationalCredentials .Attributes .Fabrics , dev_ctrl = self .TH_server_controller , node_id = self .server_nodeid , endpoint = 0 )
97
+ #self.step(2)
97
98
th_server_vid = await self .read_single_attribute_check_success (cluster = Clusters .BasicInformation , attribute = Clusters .BasicInformation .Attributes .VendorID , dev_ctrl = self .TH_server_controller , node_id = self .server_nodeid , endpoint = 0 )
99
+ #self.step(3)
98
100
th_server_pid = await self .read_single_attribute_check_success (cluster = Clusters .BasicInformation , attribute = Clusters .BasicInformation .Attributes .ProductID , dev_ctrl = self .TH_server_controller , node_id = self .server_nodeid , endpoint = 0 )
99
101
100
- # TODO: Read event, not yet implemented in mock
102
+ #self.step(4)
103
+ event_path = [(self .matter_test_config .endpoint , Clusters .CommissionerControl .Events .CommissioningRequestResult , 1 )]
104
+ events = await self .default_controller .ReadEvent (nodeid = self .dut_node_id , events = event_path )
101
105
106
+ #self.step(5)
102
107
ipaddr = ipaddress .IPv6Address ('::1' )
103
108
cmd = Clusters .CommissionerControl .Commands .CommissionNode (requestId = 1 , responseTimeoutSeconds = 30 , ipAddress = ipaddr .packed , port = self .port )
104
109
try :
@@ -107,8 +112,8 @@ async def test_TC_CCTRL_3_1(self):
107
112
except InteractionModelError as e :
108
113
asserts .assert_equal (e .status , Status .Failure , "Incorrect error returned" )
109
114
115
+ #self.step(6)
110
116
params = await self .openCommissioningWindow (dev_ctrl = self .default_controller , node_id = self .dut_node_id )
111
-
112
117
pase_nodeid = self .dut_node_id + 1
113
118
await self .default_controller .FindOrEstablishPASESession (setupCode = params .commissioningParameters .setupQRCode , nodeid = pase_nodeid )
114
119
try :
@@ -117,19 +122,112 @@ async def test_TC_CCTRL_3_1(self):
117
122
except InteractionModelError as e :
118
123
asserts .assert_equal (e .status , Status .UnsupportedAccess , "Incorrect error returned" )
119
124
125
+ # self.step(7)
120
126
good_request_id = 0x1234567887654321
121
127
cmd = Clusters .CommissionerControl .Commands .RequestCommissioningApproval (requestId = good_request_id , vendorId = th_server_vid , productId = th_server_pid )
122
128
try :
123
129
await self .send_single_cmd (cmd = cmd , node_id = pase_nodeid )
124
- asserts .fail ("Unexpected success on CommissionNode " )
130
+ asserts .fail ("Unexpected success on RequestCommissioningApproval over PASE " )
125
131
except InteractionModelError as e :
126
132
asserts .assert_equal (e .status , Status .UnsupportedAccess , "Incorrect error returned" )
127
133
134
+ #self.step(8)
135
+ if not events :
136
+ new_event = await self .default_controller .ReadEvent (nodeid = self .dut_node_id , events = event_path )
137
+ else :
138
+ event_nums = [e .Header .EventNumber for e in events ]
139
+ new_event = await self .default_controller .ReadEvent (nodeid = self .dut_node_id , events = event_path , eventNumberFilter = max (event_nums )+ 1 )
140
+ asserts .assert_equal (new_event , [], "Unexpected event" )
128
141
129
- # TODO: read event - need to implement in the mock
130
142
143
+ #self.step(9)
144
+ bad_vid = 0x6006
145
+ cmd = Clusters .CommissionerControl .Commands .RequestCommissioningApproval (requestId = good_request_id , vendorId = bad_vid , productId = th_server_pid )
131
146
# If no exception is raised, this is success
132
147
await self .send_single_cmd (cmd )
133
148
149
+ #self.step(10)
150
+ if not self .is_ci :
151
+ self .wait_for_use_input ("Approve Commissioning approval request using manufacturer specified mechanism" )
152
+
153
+ #self.step(11)
154
+ if not events :
155
+ new_event = await self .default_controller .ReadEvent (nodeid = self .dut_node_id , events = event_path )
156
+ else :
157
+ event_nums = [e .Header .EventNumber for e in events ]
158
+ new_event = await self .default_controller .ReadEvent (nodeid = self .dut_node_id , events = event_path , eventNumberFilter = max (event_nums )+ 1 )
159
+ asserts .assert_equal (len (new_event ), 1 , "Unexpected event list len" )
160
+ asserts .assert_equal (new_event [0 ].Data .statusCode , 0 , "Unexpected status code" )
161
+ asserts .assert_equal (new_event [0 ].Data .clientNodeId , self .matter_test_config .controller_node_id , "Unexpected client node id" )
162
+ asserts .assert_equal (new_event [0 ].Data .requestId , good_request_id , "Unexpected request ID" )
163
+
164
+ #self.step(12)
165
+ bad_request_id = 0x1234567887654322
166
+ cmd = Clusters .CommissionerControl .Commands .CommissionNode (requestId = bad_request_id , responseTimeoutSeconds = 30 )
167
+ try :
168
+ await self .send_single_cmd (cmd = cmd )
169
+ asserts .fail ("Unexpected success on CommissionNode" )
170
+ except InteractionModelError as e :
171
+ asserts .assert_equal (e .status , Status .Failure , "Incorrect error returned" )
172
+
173
+ #self.step(13)
174
+ cmd = Clusters .CommissionerControl .Commands .CommissionNode (requestId = good_request_id , responseTimeoutSeconds = 29 )
175
+ try :
176
+ await self .send_single_cmd (cmd = cmd )
177
+ asserts .fail ("Unexpected success on CommissionNode" )
178
+ except InteractionModelError as e :
179
+ asserts .assert_equal (e .status , Status .Failure , "Incorrect error returned" )
180
+
181
+ #self.step(14)
182
+ cmd = Clusters .CommissionerControl .Commands .CommissionNode (requestId = good_request_id , responseTimeoutSeconds = 121 )
183
+ try :
184
+ await self .send_single_cmd (cmd = cmd )
185
+ asserts .fail ("Unexpected success on CommissionNode" )
186
+ except InteractionModelError as e :
187
+ asserts .assert_equal (e .status , Status .Failure , "Incorrect error returned" )
188
+
189
+ #self.step(15)
190
+ cmd = Clusters .CommissionerControl .Commands .CommissionNode (requestId = good_request_id , responseTimeoutSeconds = 30 )
191
+ resp = await self .send_single_cmd (cmd )
192
+ asserts .assert_equal (type (resp ), Clusters .CommissionerControl .Commands .ReverseOpenCommissioningWindow , "Incorrect response type" )
193
+
194
+ #self.step(16)
195
+ #TODO: we do not have a direct line to OpenEnhancedCommissioningWindow. Need to add plumbing
196
+ # For now, open with anything so the below command is ok
197
+ await self .openCommissioningWindow (dev_ctrl = self .TH_server_controller , node_id = self .server_nodeid )
198
+
199
+ #self.step(17)
200
+ logging .info ("Test now waits for 30 seconds" )
201
+ #time.sleep(30)
202
+
203
+ #self.step(18)
204
+ print (f'server node id { self .server_nodeid } ' )
205
+ th_server_fabrics_new = await self .read_single_attribute_check_success (cluster = Clusters .OperationalCredentials , attribute = Clusters .OperationalCredentials .Attributes .Fabrics , dev_ctrl = self .TH_server_controller , node_id = self .server_nodeid , endpoint = 0 )
206
+ asserts .assert_equal (len (th_server_fabrics ), len (th_server_fabrics_new ), "Unexpected number of fabrics on TH_SERVER" )
207
+
208
+ #self.step(19)
209
+ cmd = Clusters .AdministratorCommissioning .Commands .RevokeCommissioning ()
210
+ await self .send_single_cmd (cmd , dev_ctrl = self .TH_server_controller , node_id = self .server_nodeid , timedRequestTimeoutMs = 5000 , endpoint = 0 )
211
+
212
+ #self.step(20)
213
+ good_request_id = 0x1234567812345678
214
+ cmd = Clusters .CommissionerControl .Commands .RequestCommissioningApproval (requestId = good_request_id , vendorId = th_server_vid , productId = th_server_pid , label = "Test Ecosystem" )
215
+ self .send_single_cmd (cmd )
216
+
217
+ #self.step(21)
218
+ if not self .is_ci :
219
+ self .wait_for_use_input ("Approve Commissioning approval request using manufacturer specified mechanism" )
220
+
221
+ #self.step(22)
222
+ events = new_event
223
+ event_nums = [e .Header .EventNumber for e in events ]
224
+ new_event = await self .default_controller .ReadEvent (nodeid = self .dut_node_id , events = event_path , eventNumberFilter = max (event_nums )+ 1 )
225
+ asserts .assert_equal (len (new_event ), 1 , "Unexpected event list len" )
226
+ asserts .assert_equal (new_event [0 ].Data .statusCode , 0 , "Unexpected status code" )
227
+ asserts .assert_equal (new_event [0 ].Data .clientNodeId , self .matter_test_config .controller_node_id , "Unexpected client node id" )
228
+ asserts .assert_equal (new_event [0 ].Data .requestId , good_request_id , "Unexpected request ID" )
229
+
230
+
231
+
134
232
if __name__ == "__main__" :
135
233
default_matter_test_main ()
0 commit comments