# 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: 65.3.1. [TC-PSCFG-3.1] Attributes with client as DUT

PICS:
    - PSCFG.C
    - PSCFG.C.AM-READ
    - PSCFG.C.AO-READ
    - PSCFG.C.AM-WRITE
    - PSCFG.C.AO-WRITE

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

tests:
    - label:
          "DUT reads all supported mandatory attributes from TH once at a time
          in a manufacturer specific order"
      verification: |
          ./chip-tool powersourceconfiguration read sources 1 0

          verify the " sources response" on the TH (all-cluster-app) log:

          [1650881032.387446][2715:2715] CHIP:IM: Received Read request
          [1650881032.387500][2715:2715] CHIP:DMG: ReadRequestMessage =
          [1650881032.387527][2715:2715] CHIP:DMG: {
          [1650881032.387549][2715:2715] CHIP:DMG:         AttributePathIBs =
          [1650881032.387578][2715:2715] CHIP:DMG:         [
          [1650881032.387602][2715:2715] CHIP:DMG:                 AttributePathIB =
          [1650881032.387629][2715:2715] CHIP:DMG:                 {
          [1650881032.387657][2715:2715] CHIP:DMG:                         Endpoint = 0x0,
          [1650881032.387690][2715:2715] CHIP:DMG:                         Cluster = 0x2e,
          [1650881032.387722][2715:2715] CHIP:DMG:                         Attribute = 0x0000_0000,
          [1650881032.387750][2715:2715] CHIP:DMG:                 }
          [1650881032.387781][2715:2715] CHIP:DMG:
          [1650881032.387807][2715:2715] CHIP:DMG:         ],
          [1650881032.387836][2715:2715] CHIP:DMG:
          [1650881032.387862][2715:2715] CHIP:DMG:         isFabricFiltered = true,
          [1650881032.387887][2715:2715] CHIP:DMG:         InteractionModelRevision = 1
          [1650881032.387910][2715:2715] CHIP:DMG: },
          [1650881032.387979][2715:2715] CHIP:DMG: IM RH moving to [GeneratingReports]
          [1650881032.388058][2715:2715] CHIP:DMG: Building Reports for ReadHandler with LastReportGeneration = 0 DirtyGeneration = 0
          [1650881032.388087][2715:2715] CHIP:DMG: <RE:Run> Cluster 2e, Attribute 0 is dirty
          [1650881032.388109][2715:2715] CHIP:DMG: Reading attribute: Cluster=0x0000_002E Endpoint=0 AttributeId=0x0000_0000 (expanded=0)
      disabled: true

    - label:
          "DUT reads all supported optional attributes from TH once 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 once 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 once 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 aga"
      verification: |
          ./chip-tool powersourceconfiguration read attribute-list 1 0

          Verify the ReadRequestMessage the TH (all-cluster-minimal-app) log:

          [1663147271.622589][2750:2750] CHIP:IM: Received Read request
          [1663147271.622666][2750:2750] CHIP:DMG: ReadRequestMessage =
          [1663147271.622692][2750:2750] CHIP:DMG: {
          [1663147271.622714][2750:2750] CHIP:DMG: 	AttributePathIBs =
          [1663147271.622739][2750:2750] CHIP:DMG: 	[
          [1663147271.622789][2750:2750] CHIP:DMG: 		AttributePathIB =
          [1663147271.622821][2750:2750] CHIP:DMG: 		{
          [1663147271.622849][2750:2750] CHIP:DMG: 			Endpoint = 0x0,
          [1663147271.622880][2750:2750] CHIP:DMG: 			Cluster = 0x2e,
          [1663147271.622914][2750:2750] CHIP:DMG: 			Attribute = 0x0000_FFFB,
          [1663147271.622943][2750:2750] CHIP:DMG: 		}
          [1663147271.622971][2750:2750] CHIP:DMG:
          [1663147271.622996][2750:2750] CHIP:DMG: 	],
          [1663147271.623023][2750:2750] CHIP:DMG:
          [1663147271.623049][2750:2750] CHIP:DMG: 	isFabricFiltered = true,
          [1663147271.623074][2750:2750] CHIP:DMG: 	InteractionModelRevision = 1
          [1663147271.623097][2750:2750] CHIP:DMG: },
          [1663147271.623168][2750:2750] CHIP:DMG: IM RH moving to [GeneratingReports]
          [1663147271.623246][2750:2750] CHIP:DMG: Building Reports for ReadHandler with LastReportGeneration = 0 DirtyGeneration = 0
          [1663147271.623274][2750:2750] CHIP:DMG: <RE:Run> Cluster 2e, Attribute fffb is dirty


          ./chip-tool powersourceconfiguration read sources 1 0

          verify the " sources response" on the TH (all-cluster-minimal-app) log:

          [1650881032.387446][2715:2715] CHIP:IM: Received Read request
          [1650881032.387500][2715:2715] CHIP:DMG: ReadRequestMessage =
          [1650881032.387527][2715:2715] CHIP:DMG: {
          [1650881032.387549][2715:2715] CHIP:DMG:         AttributePathIBs =
          [1650881032.387578][2715:2715] CHIP:DMG:         [
          [1650881032.387602][2715:2715] CHIP:DMG:                 AttributePathIB =
          [1650881032.387629][2715:2715] CHIP:DMG:                 {
          [1650881032.387657][2715:2715] CHIP:DMG:                         Endpoint = 0x0,
          [1650881032.387690][2715:2715] CHIP:DMG:                         Cluster = 0x2e,
          [1650881032.387722][2715:2715] CHIP:DMG:                         Attribute = 0x0000_0000,
          [1650881032.387750][2715:2715] CHIP:DMG:                 }
          [1650881032.387781][2715:2715] CHIP:DMG:
          [1650881032.387807][2715:2715] CHIP:DMG:         ],
          [1650881032.387836][2715:2715] CHIP:DMG:
          [1650881032.387862][2715:2715] CHIP:DMG:         isFabricFiltered = true,
          [1650881032.387887][2715:2715] CHIP:DMG:         InteractionModelRevision = 1
          [1650881032.387910][2715:2715] CHIP:DMG: },
          [1650881032.387979][2715:2715] CHIP:DMG: IM RH moving to [GeneratingReports]
          [1650881032.388058][2715:2715] CHIP:DMG: Building Reports for ReadHandler with LastReportGeneration = 0 DirtyGeneration = 0
          [1650881032.388087][2715:2715] CHIP:DMG: <RE:Run> Cluster 2e, Attribute 0 is dirty
          [1650881032.388109][2715:2715] CHIP:DMG: Reading attribute: Cluster=0x0000_002E Endpoint=0 AttributeId=0x0000_0000 (expanded=0)
      disabled: true

    - label:
          "DUT reads all supported optional attributes from TH one at a time in
          a manufacturer specific orde"
      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 orde"
      verification: |
          This cluster doesn"t have any writable attributes
      disabled: true
