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

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: "Power Source Configuration"
    endpoint: 0

tests:
    #- label: "Wait for the device to be commissioned"
    #  cluster: "DelayCommands"
    #  command: "WaitForCommissioning"

    - label: "Read attribute: Sources"
      PICS: PSCFG.C.AM-READ
      wait: "readAttribute"
      attribute: "Sources"

    - 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: |
          Product maker needs to provide instructions for how to trigger the command on the DUT. For comparison, the DUT behavior for this test step can be simulated using chip-tool (when DUT is a commissioner/Client)


          ./chip-tool powersourceconfiguration read attribute-list 1 0

          Verify the attribute-list response 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 feature-map 1 0

          Verify the feature-map response  the TH (all-cluster-minimal-app) log:

          [1676551043.650050][58234:58234] CHIP:IM: Received Read request
          [1676551043.650118][58234:58234] CHIP:DMG: ReadRequestMessage =
          [1676551043.650132][58234:58234] CHIP:DMG: {
          [1676551043.650139][58234:58234] CHIP:DMG:         AttributePathIBs =
          [1676551043.650148][58234:58234] CHIP:DMG:         [
          [1676551043.650155][58234:58234] CHIP:DMG:                 AttributePathIB =
          [1676551043.650164][58234:58234] CHIP:DMG:                 {
          [1676551043.650174][58234:58234] CHIP:DMG:                         Endpoint = 0x0,
          [1676551043.650183][58234:58234] CHIP:DMG:                         Cluster = 0x2e,
          [1676551043.650193][58234:58234] CHIP:DMG:                         Attribute = 0x0000_FFFC,
          [1676551043.650203][58234:58234] CHIP:DMG:                 }
          [1676551043.650218][58234:58234] CHIP:DMG:
          [1676551043.650227][58234:58234] CHIP:DMG:         ],
          [1676551043.650241][58234:58234] CHIP:DMG:
          [1676551043.650251][58234:58234] CHIP:DMG:         isFabricFiltered = true,
          [1676551043.650261][58234:58234] CHIP:DMG:         InteractionModelRevision = 1
          [1676551043.650269][58234:58234] CHIP:DMG: },


          ./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)
      cluster: "LogCommands"
      command: "UserPrompt"
      PICS: PICS_SKIP_SAMPLE_APP
      arguments:
          values:
              - name: "message"
                value: "Enter 'y' after success"
              - name: "expectedValue"
                value: "y"

    - 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
      cluster: "LogCommands"
      command: "UserPrompt"
      PICS: PICS_SKIP_SAMPLE_APP
      arguments:
          values:
              - name: "message"
                value: "Enter 'y' after success"
              - name: "expectedValue"
                value: "y"

    - 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
      cluster: "LogCommands"
      command: "UserPrompt"
      PICS: PICS_SKIP_SAMPLE_APP
      arguments:
          values:
              - name: "message"
                value: "Enter 'y' after success"
              - name: "expectedValue"
                value: "y"
