# 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: 68.3.1. [TC-BOOL-3.1] Attributes with Client as DUT

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

tests:
    - label:
          "DUT reads all supported mandatory attributes from TH one at a time in
          a manufacturer specific order"
      verification: |
          ./chip-tool booleanstate read state-value 1 1

          Verify read command is received in DUT as client side log

          [1658847009.838448][28392:28392] CHIP:IM: Received Read request
          [1658847009.838537][28392:28392] CHIP:DMG: ReadRequestMessage =
          [1658847009.838570][28392:28392] CHIP:DMG: {
          [1658847009.838598][28392:28392] CHIP:DMG:         AttributePathIBs =
          [1658847009.838630][28392:28392] CHIP:DMG:         [
          [1658847009.838660][28392:28392] CHIP:DMG:                 AttributePathIB =
          [1658847009.838694][28392:28392] CHIP:DMG:                 {
          [1658847009.838728][28392:28392] CHIP:DMG:                         Endpoint = 0x1,
          [1658847009.838766][28392:28392] CHIP:DMG:                         Cluster = 0x45,
          [1658847009.838806][28392:28392] CHIP:DMG:                         Attribute = 0x0000_0000,
          [1658847009.838843][28392:28392] CHIP:DMG:                 }
          [1658847009.838878][28392:28392] CHIP:DMG:
          [1658847009.838909][28392:28392] CHIP:DMG:         ],
          [1658847009.838943][28392:28392] CHIP:DMG:
          [1658847009.838975][28392:28392] CHIP:DMG:         isFabricFiltered = true,
          [1658847009.839006][28392:28392] CHIP:DMG:         InteractionModelRevision = 1
          [1658847009.839034][28392:28392] CHIP:DMG: },
          [1658847009.839120][28392:28392] CHIP:DMG: IM RH moving to [GeneratingReports]
          [1658847009.839332][28392:28392] CHIP:DMG: Building Reports for ReadHandler with LastReportGeneration = 0 DirtyGeneration = 0
          [1658847009.839386][28392:28392] CHIP:DMG: <RE:Run> Cluster 45, Attribute 0 is dirty
          [1658847009.839426][28392:28392] CHIP:DMG: Reading attribute: Cluster=0x0000_0045 Endpoint=1 AttributeId=0x0000_0000 (expanded=0)
          [1658847009.839474][28392:28392] CHIP:DMG: AccessControl: checking f=1 a=c s=0x000000000001B669 t= c=0x0000_0045 e=1 p=v
          [1658847009.839528][28392:28392] CHIP:DMG: AccessControl: allowed
      disabled: true

    - label:
          "DUT reads all supported optional attributes from TH one at a time in
          a manufacturer specific order"
      verification: |
          This cluster doesn"t have any  optional attribute
      disabled: true

    - label:
          "DUT writes a suitable value to all supported mandatory attributes on
          the TH one at a time in a manufacturer specific order"
      verification: |
          This cluster doesn"t have any writable attributes
      disabled: true

    - label:
          "DUT writes a suitable value to all supported optional attributes on
          the TH one at a time in a manufacturer specific order"
      verification: |
          This cluster doesn"t have any writable attributes
      disabled: true

    - label:
          "Configure TH such that it implements mandatory and none of the
          optional attributes of the server-side of the cluster, and that it
          also reflects this in global attributes such as FeatureMap and
          AttributeList. Commission DUT to TH again"
      verification: |
          ./chip-tool booleanstate read attribute-list 1 1

          Verify none of the optional attributes of the server-side of the cluster is listed  in DUT as client side log
          [1654244313219] [91456:3997555] CHIP: [TOO] Endpoint: 1 Cluster: 0x0000_0045 Attribute 0x0000_FFFB DataVersion: 2739318439
          [1654244313220] [91456:3997555] CHIP: [TOO]   AttributeList: 6 entries
          [1654244313220] [91456:3997555] CHIP: [TOO]     [1]: 0
          [1654244313220] [91456:3997555] CHIP: [TOO]     [2]: 65528
          [1654244313220] [91456:3997555] CHIP: [TOO]     [3]: 65529
          [1654244313220] [91456:3997555] CHIP: [TOO]     [4]: 65531
          [1654244313220] [91456:3997555] CHIP: [TOO]     [5]: 65532
          [1654244313220] [91456:3997555] CHIP: [TOO]     [6]: 65533

           ./chip-tool booleanstate read state-value 1 1

          Verify read command is received in DUT as client side log

          [1658847009.838448][28392:28392] CHIP:IM: Received Read request
          [1658847009.838537][28392:28392] CHIP:DMG: ReadRequestMessage =
          [1658847009.838570][28392:28392] CHIP:DMG: {
          [1658847009.838598][28392:28392] CHIP:DMG:         AttributePathIBs =
          [1658847009.838630][28392:28392] CHIP:DMG:         [
          [1658847009.838660][28392:28392] CHIP:DMG:                 AttributePathIB =
          [1658847009.838694][28392:28392] CHIP:DMG:                 {
          [1658847009.838728][28392:28392] CHIP:DMG:                         Endpoint = 0x1,
          [1658847009.838766][28392:28392] CHIP:DMG:                         Cluster = 0x45,
          [1658847009.838806][28392:28392] CHIP:DMG:                         Attribute = 0x0000_0000,
          [1658847009.838843][28392:28392] CHIP:DMG:                 }
          [1658847009.838878][28392:28392] CHIP:DMG:
          [1658847009.838909][28392:28392] CHIP:DMG:         ],
          [1658847009.838943][28392:28392] CHIP:DMG:
          [1658847009.838975][28392:28392] CHIP:DMG:         isFabricFiltered = true,
          [1658847009.839006][28392:28392] CHIP:DMG:         InteractionModelRevision = 1
          [1658847009.839034][28392:28392] CHIP:DMG: },
          [1658847009.839120][28392:28392] CHIP:DMG: IM RH moving to [GeneratingReports]
          [1658847009.839332][28392:28392] CHIP:DMG: Building Reports for ReadHandler with LastReportGeneration = 0 DirtyGeneration = 0
          [1658847009.839386][28392:28392] CHIP:DMG: <RE:Run> Cluster 45, Attribute 0 is dirty
          [1658847009.839426][28392:28392] CHIP:DMG: Reading attribute: Cluster=0x0000_0045 Endpoint=1 AttributeId=0x0000_0000 (expanded=0)
          [1658847009.839474][28392:28392] CHIP:DMG: AccessControl: checking f=1 a=c s=0x000000000001B669 t= c=0x0000_0045 e=1 p=v
          [1658847009.839528][28392:28392] CHIP:DMG: AccessControl: allowed
      disabled: true

    - label:
          "DUT reads all supported optional attributes from TH one at a time in
          a manufacturer specific order"
      verification: |
          This cluster doesn"t have any  optional attribute
      disabled: true

    - label:
          "DUT writes a suitable value to all supported optional attributes on
          the TH one at a time in a manufacturer specific order"
      verification: |
          This cluster doesn"t have any  optional attribute
      disabled: true
