# 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]

PICS:
    - DESC.S

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
