# 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: 105.1.1. [TC-LUNIT-1.1] Global Attributes [DUT as Client]

PICS:
    - LUNIT.C

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

tests:
    - label: "Note"
      verification: |
          Chip-tool command used below are an example to verify the  DUT as client test cases. For certification test, we expect DUT should have a capability or way to run the equivalent command.
      disabled: true

    - label: "Commission DUT to TH"
      verification: |

      disabled: true

    - label: "{DUTread} (0xFFFD) ClusterRevision attribute"
      PICS: LUNIT.C.Afffd
      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 unitlocalization read  cluster-revision 1 0
          Verify DUT receives  cluster-revision attribute response on the TH(all-clusters-app) Log:
          [1659785279.519464][4122:4122] CHIP:EM: Received message of type 0x2 with protocolId (0, 1) and MessageCounter:239393541 on exchange 51048r
          [1659785279.519511][4122:4122] CHIP:EM: Handling via exchange: 51048r, Delegate: 0xaaaaeaa68fa0
          [1659785279.519548][4122:4122] CHIP:IM: Received Read request
          [1659785279.519625][4122:4122] CHIP:DMG: ReadRequestMessage =
          [1659785279.519652][4122:4122] CHIP:DMG: {
          [1659785279.519679][4122:4122] CHIP:DMG:         AttributePathIBs =
          [1659785279.519705][4122:4122] CHIP:DMG:         [
          [1659785279.519729][4122:4122] CHIP:DMG:                 AttributePathIB =
          [1659785279.519759][4122:4122] CHIP:DMG:                 {
          [1659785279.519790][4122:4122] CHIP:DMG:                         Endpoint = 0x0,
          [1659785279.519822][4122:4122] CHIP:DMG:                         Cluster = 0x2d,
          [1659785279.519853][4122:4122] CHIP:DMG:                         Attribute = 0x0000_FFFD,
          [1659785279.519877][4122:4122] CHIP:DMG:                 }
          [1659785279.519904][4122:4122] CHIP:DMG:
          [1659785279.519932][4122:4122] CHIP:DMG:         ],
          [1659785279.519960][4122:4122] CHIP:DMG:
          [1659785279.519986][4122:4122] CHIP:DMG:         isFabricFiltered = true,
          [1659785279.520011][4122:4122] CHIP:DMG:         InteractionModelRevision = 1
          [1659785279.520034][4122:4122] CHIP:DMG: },
          [1659785279.520108][4122:4122] CHIP:DMG: IM RH moving to [GeneratingReports]
          [1659785279.520189][4122:4122] CHIP:DMG: Building Reports for ReadHandler with LastReportGeneration = 0 DirtyGeneration = 0
      disabled: true

    - label: "{DUTread} (0xFFFC) FeatureMap attribute"
      PICS: LUNIT.C.Afffc
      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 unitlocalization read  feature-map 1 0
          Verify DUT receives feature-map attribute response on the TH(all-clusters-app) Log:

          [1659785328.533426][4122:4122] CHIP:IM: Received Read request
          [1659785328.533548][4122:4122] CHIP:DMG: ReadRequestMessage =
          [1659785328.533596][4122:4122] CHIP:DMG: {
          [1659785328.533637][4122:4122] CHIP:DMG:         AttributePathIBs =
          [1659785328.533685][4122:4122] CHIP:DMG:         [
          [1659785328.533730][4122:4122] CHIP:DMG:                 AttributePathIB =
          [1659785328.533785][4122:4122] CHIP:DMG:                 {
          [1659785328.533837][4122:4122] CHIP:DMG:                         Endpoint = 0x0,
          [1659785328.533894][4122:4122] CHIP:DMG:                         Cluster = 0x2d,
          [1659785328.533958][4122:4122] CHIP:DMG:                         Attribute = 0x0000_FFFC,
          [1659785328.534017][4122:4122] CHIP:DMG:                 }
          [1659785328.534072][4122:4122] CHIP:DMG:
          [1659785328.534124][4122:4122] CHIP:DMG:         ],
          [1659785328.534176][4122:4122] CHIP:DMG:
          [1659785328.534224][4122:4122] CHIP:DMG:         isFabricFiltered = true,
          [1659785328.534275][4122:4122] CHIP:DMG:         InteractionModelRevision = 1
          [1659785328.534319][4122:4122] CHIP:DMG: },
          [1659785328.534443][4122:4122] CHIP:DMG: IM RH moving to [GeneratingReports]
          [1659785328.534578][4122:4122] CHIP:DMG: Building Reports for ReadHandler with LastReportGeneration = 0 DirtyGeneration = 0
          [1659785328.534629][4122:4122] CHIP:DMG: <RE:Run> Cluster 2d, Attribute fffc is dirty
      disabled: true

    - label: "{DUTread} (0xFFFB) AttributeList attribute"
      PICS: LUNIT.C.Afffb
      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 unitlocalization read attribute-list 1 0

          Verify DUT receives attribute-list attribute response on the TH(all-clusters-app) Log:
          [1661843250.245339][2719:2719] CHIP:IM: Received Read request
          [1661843176.295960][2719:2719] CHIP:DMG: ReadRequestMessage =
          [1661843176.295989][2719:2719] CHIP:DMG: {
          [1661843176.296011][2719:2719] CHIP:DMG:         AttributePathIBs =
          [1661843176.296036][2719:2719] CHIP:DMG:         [
          [1661843176.296059][2719:2719] CHIP:DMG:                 AttributePathIB =
          [1661843176.296089][2719:2719] CHIP:DMG:                 {
          [1661843176.296118][2719:2719] CHIP:DMG:                         Endpoint = 0x0,
          [1661843176.296153][2719:2719] CHIP:DMG:                         Cluster = 0x2d,
          [1661843176.296186][2719:2719] CHIP:DMG:                         Attribute = 0x0000_FFFB,
          [1661843176.296218][2719:2719] CHIP:DMG:                 }
          [1661843176.296247][2719:2719] CHIP:DMG:
          [1661843176.296273][2719:2719] CHIP:DMG:         ],
          [1661843176.296300][2719:2719] CHIP:DMG:
          [1661843176.296325][2719:2719] CHIP:DMG:         isFabricFiltered = true,
          [1661843176.296349][2719:2719] CHIP:DMG:         InteractionModelRevision = 1
          [1661843176.296371][2719:2719] CHIP:DMG: },
          [1661843176.296442][2719:2719] CHIP:DMG: IM RH moving to [GeneratingReports]
          [1661843176.296539][2719:2719] CHIP:DMG: Building Reports for ReadHandler with LastReportGeneration = 0 DirtyGeneration = 0
          [1661843176.296567][2719:2719] CHIP:DMG: <RE:Run> Cluster 2d, Attribute fffb is dirty
          [1661843176.296588][2719:2719] CHIP:DMG: Reading attribute: Cluster=0x0000_002D Endpoint=0 AttributeId=0x0000_FFFB (expanded=0)
          [1661843176.296613][2719:2719] CHIP:DMG: AccessControl: checking f=1 a=c s=0x000000000001B669 t= c=0x0000_002D e=0 p=v
          [1661843176.296646][2719:2719] CHIP:DMG: AccessControl: allowed
      disabled: true

    - label: "{DUTread} (0xFFFA) EventList attribute"
      PICS: LUNIT.C.Afffa
      verification: |
          out of scope for V1.0
      disabled: true

    - label: "{DUTread} (0xFFF9) AcceptedCommandList attribute"
      PICS: LUNIT.C.Afff9
      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 unitlocalization read accepted-command-list 1 0
          Verify DUT receives AcceptedCommandList attribute response on the TH(all-clusters-app) Log:
          [1659785385.381041][4122:4122] CHIP:EM: Handling via exchange: 60781r, Delegate: 0xaaaaeaa68fa0
          [1661843250.245339][2719:2719] CHIP:IM: Received Read request
          [1661843250.245414][2719:2719] CHIP:DMG: ReadRequestMessage =
          [1661843250.245438][2719:2719] CHIP:DMG: {
          [1661843250.245455][2719:2719] CHIP:DMG:         AttributePathIBs =
          [1661843250.245478][2719:2719] CHIP:DMG:         [
          [1661843250.245499][2719:2719] CHIP:DMG:                 AttributePathIB =
          [1661843250.245531][2719:2719] CHIP:DMG:                 {
          [1661843250.245557][2719:2719] CHIP:DMG:                         Endpoint = 0x0,
          [1661843250.245585][2719:2719] CHIP:DMG:                         Cluster = 0x2d,
          [1661843250.245611][2719:2719] CHIP:DMG:                         Attribute = 0x0000_FFF9,
          [1661843250.245669][2719:2719] CHIP:DMG:                 }
          [1661843250.245696][2719:2719] CHIP:DMG:
          [1661843250.245718][2719:2719] CHIP:DMG:         ],
          [1661843250.245741][2719:2719] CHIP:DMG:
          [1661843250.245763][2719:2719] CHIP:DMG:         isFabricFiltered = true,
          [1661843250.245784][2719:2719] CHIP:DMG:         InteractionModelRevision = 1
          [1661843250.245802][2719:2719] CHIP:DMG: },
          [1661843250.245867][2719:2719] CHIP:DMG: IM RH moving to [GeneratingReports]
          [1661843250.245953][2719:2719] CHIP:DMG: Building Reports for ReadHandler with LastReportGeneration = 0 DirtyGeneration = 0
          [1661843250.245979][2719:2719] CHIP:DMG: <RE:Run> Cluster 2d, Attribute fff9 is dirty
          [1661843250.245997][2719:2719] CHIP:DMG: Reading attribute: Cluster=0x0000_002D Endpoint=0 AttributeId=0x0000_FFF9 (expanded=0)
          [1661843250.246019][2719:2719] CHIP:DMG: AccessControl: checking f=1 a=c s=0x000000000001B669 t= c=0x0000_002D e=0 p=v
          [1661843250.246050][2719:2719] CHIP:DMG: AccessControl: allowed
      disabled: true

    - label: "{DUTread} (0xFFF8) GeneratedCommandList attribute"
      PICS: LUNIT.C.Afff8
      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 unitlocalization read generated-command-list 1 0
          Verify DUT receives GeneratedCommandList attribute response on the TH(all-clusters-app) Log:
          [1659785447.481659][4122:4122] CHIP:IM: Received Read request
          [1659785447.481736][4122:4122] CHIP:DMG: ReadRequestMessage =
          [1659785447.481763][4122:4122] CHIP:DMG: {
          [1659785447.481785][4122:4122] CHIP:DMG:         AttributePathIBs =
          [1659785447.481813][4122:4122] CHIP:DMG:         [
          [1659785447.481837][4122:4122] CHIP:DMG:                 AttributePathIB =
          [1659785447.481864][4122:4122] CHIP:DMG:                 {
          [1659785447.481892][4122:4122] CHIP:DMG:                         Endpoint = 0x0,
          [1659785447.481923][4122:4122] CHIP:DMG:                         Cluster = 0x2d,
          [1659785447.481958][4122:4122] CHIP:DMG:                         Attribute = 0x0000_FFF8,
          [1659785447.481985][4122:4122] CHIP:DMG:                 }
          [1659785447.482014][4122:4122] CHIP:DMG:
          [1659785447.482039][4122:4122] CHIP:DMG:         ],
          [1659785447.482067][4122:4122] CHIP:DMG:
          [1659785447.482093][4122:4122] CHIP:DMG:         isFabricFiltered = true,
          [1659785447.482118][4122:4122] CHIP:DMG:         InteractionModelRevision = 1
          [1659785447.482142][4122:4122] CHIP:DMG: },
          [1659785447.482215][4122:4122] CHIP:DMG: IM RH moving to [GeneratingReports]
      disabled: true
