# Copyright (c) 2021 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: 84.2.1. [TC-DESC-2.1] Descriptor Cluster Attributes [DUT-Server]

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

tests:
    - label:
          "TH reads DeviceTypeList and PartsList attributes from DUT for
          Endpoint 0"
      PICS: DESC.S.A0000 && DESC.S.A0004 && DESC.S.A0003
      verification: |
          ./chip-tool descriptor read device-list 1 0

          Verify on the TH Log:

          [1641454498.809603][16120:16125] CHIP:TOO: Descriptor.DeviceList response: 1 entries
          [1641454498.809737][16120:16125] CHIP:TOO:   [1]: {
          [1641454498.809780][16120:16125] CHIP:TOO:     Type: 22
          [1641454498.809817][16120:16125] CHIP:TOO:     Revision: 1
          [1641454498.809852][16120:16125] CHIP:TOO:   }
          [1641454498.809938][16120:16125] CHIP:EM: Sending Standalone Ack for MessageCounter:52943 on exchange 24061i
      disabled: true

    - label:
          "TH reads DeviceTypeList and PartsList attributes from DUT for each
          Endpoint supported by DUT (except Endpoint 0)."
      PICS: DESC.S.A0000 && DESC.S.A0004 && DESC.S.A0003
      verification: |
          ./chip-tool descriptor read device-list 1 1

          Verify on the TH Log:


          [1657200303.724408][2509:2514] CHIP:TOO: Endpoint: 1 Cluster: 0x0000_001D Attribute 0x0000_0000 DataVersion: 1624758542
          [1657200303.724508][2509:2514] CHIP:TOO:   device list: 1 entries
          [1657200303.724565][2509:2514] CHIP:TOO:     [1]: {
          [1657200303.724594][2509:2514] CHIP:TOO:       Type: 256
          [1657200303.724621][2509:2514] CHIP:TOO:       Revision: 1
          [1657200303.724647][2509:2514] CHIP:TOO:      }
      disabled: true

    - label: "TH reads ServerList attribute."
      PICS: DESC.S.A0001
      verification: |
          ./chip-tool descriptor read server-list 1 0

          Verify on the TH Log:

          [1654155402.956829][3701:3706] CHIP:TOO:   server list: 26 entries
          [1654155402.956863][3701:3706] CHIP:TOO:     [1]: 3
          [1654155402.956889][3701:3706] CHIP:TOO:     [2]: 4
          [1654155402.956914][3701:3706] CHIP:TOO:     [3]: 29
          [1654155402.956939][3701:3706] CHIP:TOO:     [4]: 30
          [1654155402.956963][3701:3706] CHIP:TOO:     [5]: 31
          [1654155402.956988][3701:3706] CHIP:TOO:     [6]: 40
          [1654155402.957012][3701:3706] CHIP:TOO:     [7]: 42
          [1654155402.957037][3701:3706] CHIP:TOO:     [8]: 43
          [1654155402.957061][3701:3706] CHIP:TOO:     [9]: 44
          [1654155402.957086][3701:3706] CHIP:TOO:     [10]: 45
          [1654155402.957110][3701:3706] CHIP:TOO:     [11]: 46
          [1654155402.957135][3701:3706] CHIP:TOO:     [12]: 47
          [1654155402.957159][3701:3706] CHIP:TOO:     [13]: 48
          [1654155402.957183][3701:3706] CHIP:TOO:     [14]: 49
          [1654155402.957207][3701:3706] CHIP:TOO:     [15]: 50
          [1654155402.957231][3701:3706] CHIP:TOO:     [16]: 51
          [1654155402.957256][3701:3706] CHIP:TOO:     [17]: 52
          [1654155402.957280][3701:3706] CHIP:TOO:     [18]: 53
          [1654155402.957304][3701:3706] CHIP:TOO:     [19]: 54
          [1654155402.957328][3701:3706] CHIP:TOO:     [20]: 55
          [1654155402.957352][3701:3706] CHIP:TOO:     [21]: 60
          [1654155402.957376][3701:3706] CHIP:TOO:     [22]: 62
          [1654155402.957400][3701:3706] CHIP:TOO:     [23]: 63
          [1654155402.957424][3701:3706] CHIP:TOO:     [24]: 64
          [1654155402.957449][3701:3706] CHIP:TOO:     [25]: 65
          [1654155402.957473][3701:3706] CHIP:TOO:     [26]: 1029
      disabled: true

    - label: "TH reads ClientList attribute"
      PICS: DESC.S.A0002
      verification: |
          ./chip-tool descriptor read client-list 1 0

          Verify on the TH Log:

          [1650281818.533446][9679:9684] CHIP:TOO: Endpoint: 0 Cluster: 0x0000_001D Attribute 0x0000_0002 DataVersion: 1976976904
          [1650281818.533514][9679:9684] CHIP:TOO:   client list: 1 entries
          [1650281818.533563][9679:9684] CHIP:TOO:     [1]: 41
      disabled: true

    - label: "TH reads PartsList attribute."
      PICS: DESC.S.A0003
      verification: |
          ./chip-tool descriptor read  parts-list 1 0

          Verify on the TH Log:

          [1641456769.777217][16238:16244] CHIP:DMG:      SuppressResponse = true,
          [1641456769.777267][16238:16244] CHIP:DMG: }
          [1641456769.777839][16238:16244] CHIP:TOO: Descriptor.PartsList response: 2 entries
          [1641456769.777925][16238:16244] CHIP:TOO:   [1]: 1
          [1641456769.777978][16238:16244] CHIP:TOO:   [2]: 2
          [1641456769.778080][16238:16244] CHIP:EM: Sending Standalone Ack for MessageCounter:2830202 on exchange 38042i
      disabled: true

    - label:
          "The cluster tests applicable to each Device Type should be executed
          to make sure all mandatory (and applicable optional)
          attributes/commands are implemented."
      verification: |
          verification step to be updated.
      disabled: true
