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

name: 237.1.1. [TC-DEM-1.1] Global Attributes with DUT as Server

PICS:
    - DEM.S

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

tests:
    - 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 deviceenergymanagement read cluster-revision 1 1

          On TH(chip-tool), Verify the ClusterRevision attribute value as 2:
          Below mentioned log is based on the RPI implementation, Value may vary on real DUT

          [1705565332.698601][7061:7063] CHIP:TOO: Endpoint: 1 Cluster: 0x0000_0098 Attribute 0x0000_FFFD DataVersion: 1117764527
          [1705565332.698668][7061:7063] CHIP:TOO:   ClusterRevision: 3
      disabled: true

    - label: "Step 3: TH reads from the DUT the FeatureMap attribute."
      verification: |
          ./chip-tool deviceenergymanagement read feature-map 1 1

          Via the TH (chip-tool), verify that theFeatureMap attribute contains the value. Below mentioned log is based on the RPI implementation, Value may vary on real DUT


          [1705565302.904580][7054:7056] CHIP:TOO: Endpoint: 1 Cluster: 0x0000_0098 Attribute 0x0000_FFFC DataVersion: 1117764527
          [1705565302.904631][7054:7056] CHIP:TOO:   FeatureMap: 127
      disabled: true

    - label: "Step 4: TH reads from the DUT the AttributeList attribute."
      verification: |
          ./chip-tool deviceenergymanagement  read attribute-list 1 1

          Via the TH (chip-tool), verify that  the AttributeList attribute contains
          - Mandatory entries:0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0xfff8, 0xfff9, 0xfffb, 0xfffc and 0xfffd
          - Based on feature support:- 0x0005, 0x0006, 0x0007
          Below mentioned log is based on the RPI implementation, Value may vary on real DUT

          [1705649142.831039][6212:6214] CHIP:TOO: Endpoint: 1 Cluster: 0x0000_0098 Attribute 0x0000_FFFB DataVersion: 633673396
          [1705649142.831110][6212:6214] CHIP:TOO:   AttributeList: 13 entries
          [1705649142.831151][6212:6214] CHIP:TOO:     [1]: 0
          [1705649142.831174][6212:6214] CHIP:TOO:     [2]: 1
          [1705649142.831208][6212:6214] CHIP:TOO:     [3]: 2
          [1705649142.831230][6212:6214] CHIP:TOO:     [4]: 3
          [1705649142.831261][6212:6214] CHIP:TOO:     [5]: 4
          [1705649142.831283][6212:6214] CHIP:TOO:     [6]: 5
          [1705649142.831304][6212:6214] CHIP:TOO:     [7]: 6
          [1705649142.831336][6212:6214] CHIP:TOO:     [8]: 7
          [1705649142.831359][6212:6214] CHIP:TOO:     [9]: 65528
          [1705649142.831390][6212:6214] CHIP:TOO:     [10]: 65529
          [1705649142.831434][6212:6214] CHIP:TOO:     [11]: 65531
          [1705649142.831458][6212:6214] CHIP:TOO:     [12]: 65532
          [1705649142.831490][6212:6214] CHIP:TOO:     [13]: 65533
      disabled: true

    - label: "Step 5*: TH reads from the DUT the EventList attribute."
      verification: |
          EventList is currently not supported and SHALL be skipped.

          ./chip-tool deviceenergymanagement  read event-list 1 1

           Via the TH (chip-tool), verify that the EventList attribute. Below mentioned log is based on the RPI implementation, Value may vary on real DUT

          [1703745599.166331][1300:1302] CHIP:DMG:                                 StatusIB =
          [1703745599.166364][1300:1302] CHIP:DMG:                                 {
          [1703745599.166419][1300:1302] CHIP:DMG:                                         status = 0x86 (UNSUPPORTED_ATTRIBUTE),
          [1703745599.166450][1300:1302] CHIP:DMG:                                 },
      disabled: true

    - label: "Step 6: TH reads from the DUT the AcceptedCommandList attribute."
      verification: |
          ./chip-tool deviceenergymanagement read accepted-command-list 1 1

          On TH(chip-tool), Verify the  AcceptedCommandList attribute that contains 7 entries:
          Below mentioned log is based on the RPI implementation, Value may vary on real DUT

          [1705649342.947638][6221:6223] CHIP:TOO: Endpoint: 1 Cluster: 0x0000_0098 Attribute 0x0000_FFF9 DataVersion: 633673396
          [1705649342.947712][6221:6223] CHIP:TOO:   AcceptedCommandList: 8 entries
          [1705649342.947754][6221:6223] CHIP:TOO:     [1]: 0
          [1705649342.947779][6221:6223] CHIP:TOO:     [2]: 1
          [1705649342.947802][6221:6223] CHIP:TOO:     [3]: 2
          [1705649342.947825][6221:6223] CHIP:TOO:     [4]: 3
          [1705649342.947848][6221:6223] CHIP:TOO:     [5]: 4
          [1705649342.947871][6221:6223] CHIP:TOO:     [6]: 5
          [1705649342.947894][6221:6223] CHIP:TOO:     [7]: 6
          [1705649342.947917][6221:6223] CHIP:TOO:     [8]: 7
      disabled: true

    - label: "Step 7: TH reads from the DUT the GeneratedCommandList attribute."
      verification: |
          ./chip-tool deviceenergymanagement read generated-command-list 1 1

          On TH(chip-tool), Verify the  GeneratedCommandList attribute that contains  1 entries:

          [1705567897.076935][7141:7143] CHIP:TOO: Endpoint: 1 Cluster: 0x0000_0098 Attribute 0x0000_FFF8 DataVersion: 1117764527
          [1705567897.076989][7141:7143] CHIP:TOO:   GeneratedCommandList: 0 entries
      disabled: true
