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

Make the TBRM tests work #34864

Merged
merged 13 commits into from
Aug 9, 2024
Merged
26 changes: 23 additions & 3 deletions examples/network-manager-app/linux/tbrm.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -94,15 +94,23 @@ class FakeBorderRouterDelegate final : public ThreadBorderRouterManagement::Dele

mActivateDatasetCallback = callback;
mActivateDatasetSequence = sequenceNum;
DeviceLayer::SystemLayer().StartTimer(System::Clock::Milliseconds32(3000), CompleteDatasetActivation, this);
DeviceLayer::SystemLayer().StartTimer(System::Clock::Milliseconds32(1000), ActivateActiveDataset, this);
}

CHIP_ERROR CommitActiveDataset() override { return CHIP_NO_ERROR; }
CHIP_ERROR RevertActiveDataset() override { return CHIP_ERROR_NOT_IMPLEMENTED; }
CHIP_ERROR SetPendingDataset(const Thread::OperationalDataset & pendingDataset) override { return CHIP_ERROR_NOT_IMPLEMENTED; }

CHIP_ERROR SetPendingDataset(const Thread::OperationalDataset & pendingDataset) override
{
ReturnErrorOnFailure(mPendingDataset.Init(pendingDataset.AsByteSpan()));
uint32_t delayTimerMillis;
ReturnErrorOnFailure(mPendingDataset.GetDelayTimer(delayTimerMillis));
DeviceLayer::SystemLayer().StartTimer(System::Clock::Milliseconds32(delayTimerMillis), ActivatePendingDataset, this);
return CHIP_NO_ERROR;
}

private:
static void CompleteDatasetActivation(System::Layer *, void * context)
static void ActivateActiveDataset(System::Layer *, void * context)
{
auto * self = static_cast<FakeBorderRouterDelegate *>(context);
auto * callback = self->mActivateDatasetCallback;
Expand All @@ -111,6 +119,18 @@ class FakeBorderRouterDelegate final : public ThreadBorderRouterManagement::Dele
callback->OnActivateDatasetComplete(sequenceNum, CHIP_NO_ERROR);
}

static void ActivatePendingDataset(System::Layer *, void * context)
{
auto * self = static_cast<FakeBorderRouterDelegate *>(context);
self->mActiveDataset.Init(self->mPendingDataset.AsByteSpan());
self->mPendingDataset.Clear();
// This could just call MatterReportingAttributeChangeCallback directly
self->mAttributeChangeCallback->ReportAttributeChanged(
ThreadBorderRouterManagement::Attributes::ActiveDatasetTimestamp::Id);
self->mAttributeChangeCallback->ReportAttributeChanged(
ThreadBorderRouterManagement::Attributes::PendingDatasetTimestamp::Id);
}

AttributeChangeCallback * mAttributeChangeCallback;
Thread::OperationalDataset mActiveDataset;
Thread::OperationalDataset mPendingDataset;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -1892,6 +1892,7 @@ endpoint 1 {
handle command GetPendingDatasetRequest;
handle command DatasetResponse;
handle command SetActiveDatasetRequest;
handle command SetPendingDatasetRequest;
}

server cluster ThreadNetworkDirectory {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3407,6 +3407,14 @@
"source": "client",
"isIncoming": 1,
"isEnabled": 1
},
{
"name": "SetPendingDatasetRequest",
"code": 4,
"mfgCode": null,
"source": "client",
"isIncoming": 1,
"isEnabled": 1
}
],
"attributes": [
Expand Down Expand Up @@ -3500,7 +3508,7 @@
"storageOption": "External",
"singleton": 0,
"bounded": 0,
"defaultValue": "",
"defaultValue": null,
"reportable": 1,
"minInterval": 1,
"maxInterval": 65534,
Expand Down
11 changes: 11 additions & 0 deletions src/app/tests/suites/certification/PICS.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -10298,6 +10298,17 @@ PICS:
- label: "Does the device implement the ActiveEndpoints attribute?"
id: PWRTL.S.A0001

#
# Thread Border Router Management Cluster
#
- label:
"Does the device implement the Thread Border Router Management cluster
as a server?"
id: TBRM.S

- label: "Does the device support the PanChange feature?"
id: TBRM.S.F00

#
# Thread Network Directory Cluster
#
Expand Down
116 changes: 116 additions & 0 deletions src/app/tests/suites/certification/Test_TC_TBRM_2_2.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,116 @@
# Copyright (c) 2024 Project CHIP Authors
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

name: "[TC-TBRM-2.2] Initial Dataset configuration of Thread Border Router"

PICS:
- TBRM.S

config:
nodeId: 0x12344321
cluster: Thread Border Router Management
endpoint: 1
PIXIT.TBRM.THREAD_ACTIVE_DATASET:
type: octet_string
defaultValue: "hex:0e080000000000010000000300001235060004001fffe002082ad51c02fe8f64f20708fddb8af85255f93a051083e2b9b2cc609b00125adbf823ea2ab20102c4d904100a133626c411d7de02a570ca3c3d80470c0402a0f7f8031054687265616441637469766554657374"
# Active Timestamp ----^^^^^^^^^^^^^^^^
PIXIT.TBRM.THREAD_ACTIVE_DATASET.ACTIVE_TIMESTAMP: 0x10000
PIXIT.TBRM.THREAD_INVALID_DATASET:
type: octet_string
defaultValue: "hex:00112233"

# Precondition:
# The DUT does not have an Active Dataset

tests:
- label: "Wait for the commissioned device to be retrieved"
cluster: DelayCommands
command: WaitForCommissionee
arguments:
values:
- name: nodeId
value: nodeId

- label: "TH reads the ActiveDatasetTimestamp attribute from the DUT"
command: readAttribute
attribute: ActiveDatasetTimestamp
response:
value: null

- label: "TH reads the PendingDatasetTimestamp attribute from the DUT"
command: readAttribute
attribute: PendingDatasetTimestamp
response:
value: null

- label:
"TH sends a valid ActiveDatasetRequest command to the DUT without
having armed the fail-safe"
command: SetActiveDatasetRequest
arguments:
values:
- name: ActiveDataset
value: PIXIT.TBRM.THREAD_ACTIVE_DATASET
response:
error: FAILSAFE_REQUIRED

- label: "TH sends ArmFailSafe command to the DUT"
cluster: General Commissioning
command: ArmFailSafe
endpoint: 0
arguments:
values:
- name: ExpiryLengthSeconds
value: 900
- name: Breadcrumb
value: 1

- label: "TH sends an invalid ActiveDatasetRequest command to the DUT"
command: SetActiveDatasetRequest
arguments:
values:
- name: ActiveDataset
value: PIXIT.TBRM.THREAD_INVALID_DATASET
response:
error: INVALID_COMMAND

- label: "TH sends a valid ActiveDatasetRequest command to the DUT"
command: SetActiveDatasetRequest
arguments:
values:
- name: ActiveDataset
value: PIXIT.TBRM.THREAD_ACTIVE_DATASET

- label: "TH reads the InterfaceEnabled attribute from the DUT"
command: readAttribute
attribute: InterfaceEnabled
response:
value: true

- label: "TH reads the ActiveDatasetTimestamp attribute from the DUT"
command: readAttribute
attribute: ActiveDatasetTimestamp
response:
value: PIXIT.TBRM.THREAD_ACTIVE_DATASET.ACTIVE_TIMESTAMP
constraints:
type: int64u

- label: "TH sends a valid GetActiveDatasetRequest command to the DUT"
command: GetActiveDatasetRequest
response:
values:
- name: Dataset
value: PIXIT.TBRM.THREAD_ACTIVE_DATASET
constraints:
type: octet_string
154 changes: 154 additions & 0 deletions src/app/tests/suites/certification/Test_TC_TBRM_2_3.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,154 @@
# Copyright (c) 2024 Project CHIP Authors
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

name: "[TC-TBRM-2.3] Change dataset configuration of Thread Border Router"

PICS:
- TBRM.S
- TBRM.S.F00

config:
nodeId: 0x12344321
cluster: Thread Border Router Management
endpoint: 1
PIXIT.TBRM.THREAD_ACTIVE_DATASET:
type: octet_string
defaultValue: "hex:0e080000000000010000000300001235060004001fffe002082ad51c02fe8f64f20708fddb8af85255f93a051083e2b9b2cc609b00125adbf823ea2ab20102c4d904100a133626c411d7de02a570ca3c3d80470c0402a0f7f8031054687265616441637469766554657374"
PIXIT.TBRM.THREAD_PENDING_DATASET:
type: octet_string
defaultValue: "hex:0e080000000000020000340400004e2035060004001fffe002082ad51c02fe8f64f20708fddb8af85255f93a051083e2b9b2cc609b00125adbf823ea2ab20102c4d904100a133626c411d7de02a570ca3c3d80470c0402a0f7f8030d54687265616450656e64696e67000300000c33080000000000010000"
# Active Timestamp ----^^^^^^^^^^^^^^^^
# Delay Timer -----------------------------^^^^^^^^ == 20000ms Note: waitForReport has a hard-coded 30 second timeout
PIXIT.TBRM.THREAD_PENDING_DATASET.ACTIVE_TIMESTAMP: 0x20000

# Precondition:
# The DUT does not have an Active Dataset

tests:
- label: "Wait for the commissioned device to be retrieved"
cluster: DelayCommands
command: WaitForCommissionee
arguments:
values:
- name: nodeId
value: nodeId

- label: "TH reads the ActiveDatasetTimestamp attribute from the DUT"
command: readAttribute
attribute: ActiveDatasetTimestamp
response:
saveAs: initialActiveTimestamp
value: null

- label: "TH sends ArmFailSafe command to the DUT"
cluster: General Commissioning
command: ArmFailSafe
endpoint: 0
arguments:
values:
- name: ExpiryLengthSeconds
value: 60
- name: Breadcrumb
value: 1

# TODO: runIf: initialActiveTimestamp == null
- label: "TH sends a valid ActiveDatasetRequest command to the DUT"
command: SetActiveDatasetRequest
arguments:
values:
- name: ActiveDataset
value: PIXIT.TBRM.THREAD_ACTIVE_DATASET

# TODO: runIf: initialActiveTimestamp == null
- label:
"TH subscribes to the ActiveDatasetTimestamp attribute from the DUT"
command: subscribeAttribute
attribute: ActiveDatasetTimestamp
minInterval: 1
maxInterval: 60
response:
saveAs: initialActiveTimestamp
constraints:
type: int64u
hasValue: true # not null

- label: "TH reads the PendingDatasetTimestamp attribute from the DUT"
command: readAttribute
attribute: PendingDatasetTimestamp
response:
saveAs: initialPendingTimestamp
constraints:
type: int64u

- label: "TH sends ArmFailSafe command to the DUT"
cluster: General Commissioning
command: ArmFailSafe
endpoint: 0
arguments:
values:
- name: ExpiryLengthSeconds
value: 900
- name: Breadcrumb
value: 1

- label: "TH sends a SetPendingDatasetRequest command to the DUT"
command: SetPendingDatasetRequest
arguments:
values:
- name: PendingDataset
value: PIXIT.TBRM.THREAD_PENDING_DATASET

- label: "TH sends a GetPendingDatasetRequest command to the DUT"
command: GetPendingDatasetRequest
response:
values:
- name: Dataset
value: PIXIT.TBRM.THREAD_PENDING_DATASET
constraints:
type: octet_string

- label: "TH reads the PendingDatasetTimestamp attribute from the DUT"
command: readAttribute
attribute: PendingDatasetTimestamp
response:
value: PIXIT.TBRM.THREAD_PENDING_DATASET.ACTIVE_TIMESTAMP
constraints:
type: int64u

- label: "TH waits for an ActiveDatasetTimestamp report"
command: waitForReport
attribute: ActiveDatasetTimestamp
response:
value: PIXIT.TBRM.THREAD_PENDING_DATASET.ACTIVE_TIMESTAMP

- label: "TH reads the PendingDatasetTimestamp attribute from the DUT"
command: readAttribute
attribute: PendingDatasetTimestamp
response:
value: null

- label: "TH sends a valid GetActiveDatasetRequest command to the DUT"
command: GetActiveDatasetRequest
response:
values:
- name: Dataset
value: PIXIT.TBRM.THREAD_PENDING_DATASET
constraints:
type: octet_string

- label: "TH reads the InterfaceEnabled attribute from the DUT"
command: readAttribute
attribute: InterfaceEnabled
response:
value: true
4 changes: 4 additions & 0 deletions src/app/tests/suites/certification/ci-pics-values
Original file line number Diff line number Diff line change
Expand Up @@ -3017,6 +3017,10 @@ PWRTL.S.F01=0
PWRTL.S.F02=1
PWRTL.S.F03=1

# Thread Border Router Management Cluster
TBRM.S=1
TBRM.S.F00=1

# Thread Network Directory Cluster
THNETDIR.S=1

Expand Down
Loading
Loading