Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Cherry Picking commits for 1.3TH (CCBs) #33758

Merged
merged 3 commits into from
Jun 6, 2024
Merged
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
33 changes: 21 additions & 12 deletions src/app/tests/suites/certification/Test_TC_OPCREDS_3_7.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -65,15 +65,14 @@ tests:
saveAs: TH1_Fabric_Index

- label:
"Step 3.2: TH1 does a non-fabric-filtered read of the Fabrics
attribute from the Node Operational Credentials cluster. Save the
FabricIndex for TH1 as TH1_Fabric_Index for future use."
PICS: OPCREDS.S.A0001
"Step 3.2: TH1 does a fabric-filtered read of the Fabrics attribute
from the Node Operational Credentials cluster. Save the FabricIndex
for TH1 as TH1_Fabric_Index for future use."
identity: "alpha"
command: "readAttribute"
cluster: "Operational Credentials"
attribute: "Fabrics"
fabricFiltered: false
fabricFiltered: true
response:
value: [{ "FabricIndex": TH1_Fabric_Index, "Label": "" }]
constraints:
Expand Down Expand Up @@ -251,21 +250,31 @@ tests:

# verification: ""
- label:
"Step 13: TH2 does a non-fabric-filtered read of the Fabrics attribute
"Step 13a: TH1 does a fabric-filtered read of the Fabrics attribute
from the Node Operational Credentials cluster"
nodeId: 0x43211234
command: "readAttribute"
cluster: "Operational Credentials"
attribute: "Fabrics"
fabricFiltered: true
response:
value: [{ "FabricIndex": TH1_Fabric_Index, "Label": "" }]
constraints:
type: list

# verification: ""
- label:
"Step 13b: TH2 does a fabric-filtered read of the Fabrics attribute
from the Node Operational Credentials cluster"
PICS: OPCREDS.S.A0001
identity: "beta"
nodeId: 0x43211234
command: "readAttribute"
cluster: "Operational Credentials"
attribute: "Fabrics"
fabricFiltered: false
fabricFiltered: true
response:
value:
[
{ "FabricIndex": TH1_Fabric_Index, "Label": "" },
{ "FabricIndex": TH2_Fabric_Index, "Label": "" },
]
value: [{ "FabricIndex": TH2_Fabric_Index, "Label": "" }]
constraints:
type: list

Expand Down
50 changes: 23 additions & 27 deletions src/python_testing/TC_RR_1_1.py
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@
import math
import queue
import random
import string
import time
from typing import Any, Dict, List, Set

Expand All @@ -36,6 +37,10 @@
#


def generate_controller_name(fabric_index: int, controller_index: int):
return f"RD{fabric_index}{string.ascii_uppercase[controller_index]}"


class TC_RR_1_1(MatterBaseTest):
def setup_class(self):
self._pseudo_random_generator = random.Random(1234)
Expand Down Expand Up @@ -96,11 +101,6 @@ async def test_TC_RR_1_1(self):
logging.info("--> User label cluster not present on any endpoitns")

# Generate list of all clients names
all_names = []
for fabric_idx in range(num_fabrics_to_commission):
for controller_idx in range(num_controllers_per_fabric):
all_names.append("RD%d%s" % (fabric_idx, chr(ord('A') + controller_idx)))
logging.info(f"Client names that will be used: {all_names}")
client_list = []

# TODO: Shall we also verify SupportedFabrics attribute, and the CapabilityMinima attribute?
Expand All @@ -119,7 +119,8 @@ async def test_TC_RR_1_1(self):
node_ids = [200 + (i * 100) for i in range(num_controllers_per_fabric - 1)]

# Prepare clients for first fabric, that includes the default controller
dev_ctrl.name = all_names.pop(0)
fabric_index = await self.read_single_attribute_check_success(cluster=Clusters.OperationalCredentials, attribute=Clusters.OperationalCredentials.Attributes.CurrentFabricIndex, dev_ctrl=dev_ctrl)
dev_ctrl.name = generate_controller_name(fabric_index, 0)
client_list.append(dev_ctrl)

if num_controllers_per_fabric > 1:
Expand All @@ -130,8 +131,8 @@ async def test_TC_RR_1_1(self):
privilege=Clusters.AccessControl.Enums.AccessControlEntryPrivilegeEnum.kAdminister,
targetNodeId=self.dut_node_id, catTags=[0x0001_0001]
)
for controller in new_controllers:
controller.name = all_names.pop(0)
for idx, controller in enumerate(new_controllers):
controller.name = generate_controller_name(fabric_index, idx+1)
client_list.extend(new_controllers)

# Step 1c - Ensure there are no leftover fabrics from another process.
Expand Down Expand Up @@ -163,11 +164,11 @@ async def test_TC_RR_1_1(self):
fabrics: List[Clusters.OperationalCredentials.Structs.FabricDescriptorStruct] = await self.read_single_attribute(
dev_ctrl, node_id=self.dut_node_id, endpoint=0,
attribute=Clusters.OperationalCredentials.Attributes.Fabrics, fabricFiltered=False)
current_fabric_index = await self.read_single_attribute_check_success(cluster=Clusters.OperationalCredentials, attribute=Clusters.OperationalCredentials.Attributes.CurrentFabricIndex)
for fabric in fabrics:
if fabric.fabricID == dev_ctrl.fabricId:
if fabric.fabricIndex == current_fabric_index:
continue

# This is not the initial client's fabric, so remove it.
# This is not the test client's fabric, so remove it.
await dev_ctrl.SendCommand(
self.dut_node_id, 0, Clusters.OperationalCredentials.Commands.RemoveFabric(fabricIndex=fabric.fabricIndex))

Expand All @@ -184,13 +185,13 @@ async def test_TC_RR_1_1(self):
new_fabric_admin = new_certificate_authority.NewFabricAdmin(vendorId=0xFFF1, fabricId=admin_index)

new_admin_ctrl = new_fabric_admin.NewController(nodeId=dev_ctrl.nodeId, catTags=[0x0001_0001])
new_admin_ctrl.name = all_names.pop(0)
client_list.append(new_admin_ctrl)
await CommissioningBuildingBlocks.AddNOCForNewFabricFromExisting(commissionerDevCtrl=dev_ctrl,
newFabricDevCtrl=new_admin_ctrl,
existingNodeId=self.dut_node_id,
newNodeId=self.dut_node_id)

fabric_index = await self.read_single_attribute_check_success(cluster=Clusters.OperationalCredentials, attribute=Clusters.OperationalCredentials.Attributes.CurrentFabricIndex, dev_ctrl=new_admin_ctrl)
new_admin_ctrl.name = generate_controller_name(fabric_index, 0)
client_list.append(new_admin_ctrl)
if num_controllers_per_fabric > 1:
new_controllers = await CommissioningBuildingBlocks.CreateControllersOnFabric(
fabricAdmin=new_fabric_admin,
Expand All @@ -200,8 +201,8 @@ async def test_TC_RR_1_1(self):
targetNodeId=self.dut_node_id,
catTags=[0x0001_0001]
)
for controller in new_controllers:
controller.name = all_names.pop(0)
for idx, controller in enumerate(new_controllers):
controller.name = generate_controller_name(fabric_index, idx+1)

client_list.extend(new_controllers)

Expand All @@ -224,10 +225,8 @@ async def test_TC_RR_1_1(self):
# Step 2: Set the Label field for each fabric and BasicInformation.NodeLabel to 32 characters
logging.info("Step 2: Setting the Label field for each fabric and BasicInformation.NodeLabel to 32 characters")

for table_idx in range(len(fabric_table)):
# Client is client A for each fabric to set the Label field
fabric = fabric_table[table_idx]
client_name = "RD%dA" % table_idx
for fabric in fabric_table:
client_name = generate_controller_name(fabric.fabricIndex, 0)
client = client_by_name[client_name]

# Send the UpdateLabel command
Expand Down Expand Up @@ -451,10 +450,8 @@ async def test_TC_RR_1_1(self):
# Create a list of per-fabric clients to use for filling group resources accross all fabrics.
fabric_unique_clients: List[Any] = []

for table_idx in range(len(fabric_table)):
# Client is client A for each fabric
fabric = fabric_table[table_idx]
client_name = "RD%dA" % table_idx
for fabric in fabric_table:
client_name = generate_controller_name(fabric.fabricIndex, 0)
fabric_unique_clients.append(client_by_name[client_name])

# Step 13: Write and verify indicated_max_group_keys_per_fabric group keys to all fabrics.
Expand Down Expand Up @@ -696,9 +693,8 @@ async def send_acl(self,
enable_access_to_group_cluster: bool,
fabric_table: List[
Clusters.OperationalCredentials.Structs.FabricDescriptorStruct]):
for table_idx, fabric in enumerate(fabric_table):
# Client is client A for each fabric
client_name = "RD%dA" % table_idx
for fabric in fabric_table:
client_name = generate_controller_name(fabric.fabricIndex, 0)
client = client_by_name[client_name]

acl = self.build_acl(enable_access_to_group_cluster)
Expand Down
19 changes: 19 additions & 0 deletions src/python_testing/TC_SC_3_6.py
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@
import queue
import time
from threading import Event
from typing import List

import chip.clusters as Clusters
from chip.clusters import ClusterObjects as ClustersObjects
Expand Down Expand Up @@ -123,6 +124,24 @@ async def test_TC_SC_3_6(self):
)
asserts.assert_greater_equal(capability_minima.caseSessionsPerFabric, 3)

logging.info("Pre-condition: Remove all pre-existing fabrics on the device that do not belong to the TH")
commissioned_fabric_count: int = await self.read_single_attribute(
dev_ctrl, node_id=self.dut_node_id,
endpoint=0, attribute=Clusters.OperationalCredentials.Attributes.CommissionedFabrics)

if commissioned_fabric_count > 1:
fabrics: List[Clusters.OperationalCredentials.Structs.FabricDescriptorStruct] = await self.read_single_attribute(
dev_ctrl, node_id=self.dut_node_id, endpoint=0,
attribute=Clusters.OperationalCredentials.Attributes.Fabrics, fabricFiltered=False)
current_fabric_index = await self.read_single_attribute_check_success(cluster=Clusters.OperationalCredentials, attribute=Clusters.OperationalCredentials.Attributes.CurrentFabricIndex)
for fabric in fabrics:
if fabric.fabricIndex == current_fabric_index:
continue
# This is not the test client's fabric, so remove it.
logging.info(f"Removing extra fabric at {fabric.fabricIndex} from device.")
await dev_ctrl.SendCommand(
self.dut_node_id, 0, Clusters.OperationalCredentials.Commands.RemoveFabric(fabricIndex=fabric.fabricIndex))

logging.info("Pre-conditions: use existing fabric to configure new fabrics so that total is %d fabrics" %
num_fabrics_to_commission)

Expand Down
Loading