# Copyright (c) 2023 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.
# Auto-generated scripts for harness use only, please review before automation. The endpoints and cluster names are currently set to default

name: 198.1.1. [TC-DISHALM-1.1] Global attributes with DUT as Server

PICS:
    - DISHALM.S

config:
    nodeId: 0x12344321
    cluster: "Basic Information"
    endpoint: 0

tests:
    - label: "Note"
      verification: |
          Step 5 is currently not supported and SHALL be skipped.
      disabled: true

    - label:
          "Step 1: Commission DUT to TH (can be skipped if done in a preceding
          test)."
      verification: |

      disabled: true

    - label: "Step 2: TH reads from the DUT the ClusterRevision attribute."
      verification: |
          ./chip-tool dishwasheralarm read cluster-revision 1 1
           Verify the "ClusterRevision" value is of unit16 and reflects the highest revision number 1 on the TH(Chip-tool) and below is the sample log provided for the raspi platform:

           [1688447208.697823][4176:4178] CHIP:TOO: Endpoint: 1 Cluster: 0x0000_005D Attribute 0x0000_FFFD DataVersion: 1386394810
           [1688447208.701428][4176:4178] CHIP:TOO: ClusterRevision: 1
           [1688447208.701860][4176:4178] CHIP:EM: <<< [E:62008i S:18101 M:251225540 (Ack:117573954)] (S) Msg TX to 1:0000000000000001 [5AF3] --- Type 0000:10 (SecureChannel:StandaloneAck)
      disabled: true

    - label: "Step 3: TH reads from the DUT the FeatureMap attribute."
      verification: |
          ./chip-tool dishwasheralarm read feature-map 1 1
           On TH(chip-tool), verify that DUT responds the Featuremap value as 1 and below is the sample log provided for the raspi platform:

           [1689841072.440418][2534:2536] CHIP:TOO: Endpoint: 1 Cluster: 0x0000_005D Attribute 0x0000_FFFC DataVersion: 3155962179
           [1689841072.440498][2534:2536] CHIP:TOO: FeatureMap: 1
           [1689841072.440655][2534:2536] CHIP:EM: <<< [E:51712i S:9959 M:43369330 (Ack:105494463)] (S) Msg TX to 1:0000000000000001 [C4B0] --- Type 0000:10 (SecureChannel:StandaloneAck)
      disabled: true

    - label: "Step 4: TH reads from the DUT the AttributeList attribute."
      verification: |
          ./chip-tool dishwasheralarm read attribute-list 1 1
           Verify " AttributeList " value consists the list of mandatory attributes (0, 2, 3, 65533, 65532, 65531, 65529, 65528) and optional attributes(1) on the TH(Chip-tool) Log:
           Below is the sample log provided for the raspi platform:
          [1692613019.157928][10524:10526] CHIP:DMG: }
          [1692613019.158276][10524:10526] CHIP:TOO: Endpoint: 1 Cluster: 0x0000_005D Attribute 0x0000_FFFB DataVersion: 2220437053
          [1692613019.158381][10524:10526] CHIP:TOO:   AttributeList: 9 entries
          [1692613019.158441][10524:10526] CHIP:TOO:     [1]: 0
          [1692613019.158479][10524:10526] CHIP:TOO:     [2]: 1
          [1692613019.158517][10524:10526] CHIP:TOO:     [3]: 2
          [1692613019.158551][10524:10526] CHIP:TOO:     [4]: 3
          [1692613019.158587][10524:10526] CHIP:TOO:     [5]: 65528
          [1692613019.158622][10524:10526] CHIP:TOO:     [6]: 65529
          [1692613019.158657][10524:10526] CHIP:TOO:     [7]: 65531
          [1692613019.158692][10524:10526] CHIP:TOO:     [8]: 65532
          [1692613019.158727][10524:10526] CHIP:TOO:     [9]: 65533
          [1692613019.158909][10524:10526] CHIP:EM: <<< [E:17897i S:25614 M:15345399 (Ack:182319742)] (S) Msg TX to 1:0000000000000001 [5213] --- Type 0000:10 (SecureChannel:StandaloneAck)
          [1692613019.158968][10524:10526] CHIP:IN: (S) Sending msg 15345399 on secure session with LSID: 25614
      disabled: true

    - label: "Step 5: TH reads from the DUT the EventList attribute."
      verification: |
          ./chip-tool dishwasheralarm read event-list 1 1
           Verify " EventList attribute " consists the list may contain optional events(1) on the TH(Chip-tool) Log:
           Below is the sample log provided for the raspi platform:

           [1689677416.105596][18367:18369] CHIP:TOO: Endpoint: 1 Cluster: 0x0000_005D Attribute 0x0000_FFFA DataVersion: 1517282962
           [1689677416.105625][18367:18369] CHIP:TOO: EventList: 1 entries
           [1689677416.105635][18367:18369] CHIP:TOO: [1]: 0
           [1689677416.105696][18367:18369] CHIP:EM: <<< [E:51484i S:36714 M:192916227 (Ack:1705890)] (S) Msg TX to 1:0000000000000001 [BFDE] --- Type 0000:10 (SecureChannel:StandaloneAck)
           [1689677416.105710][18367:18369] CHIP:IN: (S) Sending msg 192916227 on secure session with LSID: 36714
           [1689677416.105737][18367:18369] CHIP:EM: Flushed pending ack for MessageCounter:1705890 on exchange 51484i
      disabled: true

    - label: "Step 6: TH reads from the DUT the AcceptedCommandList attribute."
      verification: |
          ./chip-tool dishwasheralarm read accepted-command-list 1 1
           Verify " AcceptedCommandList " consists the list of supported events, which for this cluster should be an empty list on the TH(Chip-tool) Log and below is the sample log provided for the raspi platform:

           [1689841406.078608][2570:2572] CHIP:TOO: Endpoint: 1 Cluster: 0x0000_005D Attribute 0x0000_FFF9 DataVersion: 3155962179
           [1689841406.078674][2570:2572] CHIP:TOO: AcceptedCommandList: 2 entries
           [1689841406.078701][2570:2572] CHIP:TOO: [1]: 0
           [1689841406.078724][2570:2572] CHIP:TOO: [2]: 1
           [1689841406.078870][2570:2572] CHIP:EM: <<< [E:3182i S:59744 M:116852840 (Ack:196212236)] (S) Msg TX to 1:0000000000000001 [C4B0] --- Type 0000:10 (SecureChannel:StandaloneAck)
      disabled: true

    - label: "Step 7: TH reads from the DUT the GeneratedCommandList attribute."
      verification: |
          ./chip-tool dishwasheralarm read generated-command-list 1 1
           Verify " GeneratedCommandList " consists the list of supported events, which for this cluster should be an empty list on the TH(Chip-tool) Log and below is the sample log provided for the raspi platform:

           [1688447564.178537][4220:4222] CHIP:TOO: Endpoint: 1 Cluster: 0x0000_0057 Attribute 0x0000_FFF8 DataVersion: 1795162772
           [1688447564.178684][4220:4222] CHIP:TOO: GeneratedCommandList: 0 entries
           [1688447564.178984][4220:4222] CHIP:EM: <<< [E:5540i S:25125 M:256711779 (Ack:197472718)] (S) Msg TX to 1:0000000000000001 [10DB] --- Type 0000:10 (SecureChannel:StandaloneAck)
      disabled: true
