# Copyright (c) 2023 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:
    123.2.4. [TC-S-2.4] Recall scene with transition time functionality with DUT
    as Server

PICS:
    - S.S

config:
    nodeId: 0x12344321
    cluster: "Scenes Management"
    endpoint: 1
    G1:
        type: group_id
        defaultValue: 0x0001

tests:
    - label: "Wait for the commissioned device to be retrieved"
      cluster: "DelayCommands"
      command: "WaitForCommissionee"
      arguments:
          values:
              - name: "nodeId"
                value: nodeId

    - label:
          "Step 0a: TH sends KeySetWrite command in the GroupKeyManagement
          cluster to DUT using a key that is pre-installed on the TH.
          GroupKeySet fields are as follows: 1)GroupKeySetID: 0x01a1
          2)GroupKeySecurityPolicy: TrustFirst (0) 3)EpochKey0:
          a0a1a2a3a4a5a6a7a8a9aaabacadaeaf 4)EpochStartTime0: 1110000
          5)EpochKey1: b0b1b2b3b4b5b6b7b8b9babbbcbdbebf 6)EpochStartTime1:
          1110001 7)EpochKey2: c0c1c2c3c4c5c6c7c8c9cacbcccdcecf
          8)EpochStartTime2: 1110002"
      cluster: "Group Key Management"
      endpoint: 0
      command: "KeySetWrite"
      arguments:
          values:
              - name: "GroupKeySet"
                value:
                    {
                        GroupKeySetID: 0x01a1,
                        GroupKeySecurityPolicy: 0,
                        EpochKey0: "\xa0\xa1\xa2\xa3\xa4\xa5\xa6\xa7\xa8\xa9\xaa\xab\xac\xad\xae\xaf",
                        EpochStartTime0: 1110000,
                        EpochKey1: "\xb0\xb1\xb2\xb3\xb4\xb5\xb6\xb7\xb8\xb9\xba\xbb\xbc\xbd\xbe\xbf",
                        EpochStartTime1: 1110001,
                        EpochKey2: "\xc0\xc1\xc2\xc3\xc4\xc5\xc6\xc7\xc8\xc9\xca\xcb\xcc\xcd\xce\xcf",
                        EpochStartTime2: 1110002,
                    }

    - label:
          "Step 0b: TH binds GroupId 0x0001 with GroupKeySetID 0x01a1 in the
          GroupKeyMap attribute list on GroupKeyManagement cluster by writing
          the GroupKeyMap attribute with one entry as follows: List item 1:
          1)FabricIndex: 1 2)GroupId: 0x0001 3)GroupKeySetId: 0x01a1"
      cluster: "Group Key Management"
      endpoint: 0
      command: "writeAttribute"
      attribute: "GroupKeyMap"
      arguments:
          value: [{ FabricIndex: 1, GroupId: G1, GroupKeySetID: 0x01a1 }]

    - label: "Step 1: TH sends a RemoveAllGroups command to DUT."
      PICS: G.S.C04.Rsp
      cluster: "Groups"
      command: "RemoveAllGroups"

    - label:
          "Step 2a: TH sends a AddGroup command to DUT with the GroupID field
          set to G1."
      PICS: G.S.C00.Rsp
      cluster: "Groups"
      command: "AddGroup"
      arguments:
          values:
              - name: "GroupID"
                value: G1
              - name: "GroupName"
                value: "Group1"
      response:
          values:
              - name: "Status"
                value: 0
              - name: "GroupID"
                value: G1

    - label:
          "Step 2b: TH sends a RemoveAllScenes command to DUT with the GroupID
          field set to G1."
      PICS: S.S.C03.Rsp
      command: "RemoveAllScenes"
      arguments:
          values:
              - name: "GroupID"
                value: G1
      response:
          values:
              - name: "Status"
                value: 0
              - name: "GroupID"
                value: G1

    - label:
          "Step 3: TH sends a AddScene command to DUT with the GroupID field set
          to G1, the SceneID field set to 0x01, the TransitionTime field set to
          20000 (20s) and no extension fields set."
      PICS: S.S.C00.Rsp
      command: "AddScene"
      arguments:
          values:
              - name: "GroupID"
                value: G1
              - name: "SceneID"
                value: 0x01
              - name: "TransitionTime"
                value: 20000
              - name: "SceneName"
                value: "Scene1"
              - name: "ExtensionFieldSets"
                value: []

      response:
          values:
              - name: "Status"
                value: 0x00
              - name: "GroupID"
                value: G1
              - name: "SceneID"
                value: 0x01

    - label:
          "Step 4a: TH configures AC1 on DUT for all implemented application
          clusters supporting scenes."
      PICS: PICS_SDK_CI_ONLY
      cluster: "Level Control"
      command: "MoveToLevelWithOnOff"
      arguments:
          values:
              - name: "Level"
                value: 100
              - name: "TransitionTime"
                value: 0
              - name: "OptionsMask"
                value: 0
              - name: "OptionsOverride"
                value: 0

    - label:
          "Step 4a: TH configures AC1 on DUT for all implemented application
          clusters supporting scenes."
      verification: |
          ./chip-tool levelcontrol move-to-level-with-on-off 100 0 0 0 1 1

          DUT is configured with AC1 for application clusters which is implemented and supporting scenes

          [1705040301.476123][6423:6425] CHIP:DMG:                                 StatusIB =
          [1705040301.476139][6423:6425] CHIP:DMG:                                 {
          [1705040301.476152][6423:6425] CHIP:DMG:                                         status = 0x00 (SUCCESS),
          [1705040301.476164][6423:6425] CHIP:DMG:                                 },
      cluster: "LogCommands"
      command: "UserPrompt"
      PICS: PICS_SKIP_SAMPLE_APP
      arguments:
          values:
              - name: "message"
                value:
                    "Please configure AC1 on DUT and enter 'y' after the
                    configuration is complete"
              - name: "expectedValue"
                value: "y"

    - label:
          "Step 4b: TH sends a StoreScene command to DUT with the GroupID field
          set to G1 and the SceneID field set to 0x01."
      PICS: S.S.C04.Rsp
      command: "StoreScene"
      arguments:
          values:
              - name: "GroupID"
                value: G1
              - name: "SceneID"
                value: 0x01
      response:
          values:
              - name: "Status"
                value: 0x00
              - name: "GroupID"
                value: G1
              - name: "SceneID"
                value: 0x01

    - label:
          "Step 5a: TH configures AC2 on DUT for all implemented application
          clusters supporting scenes."
      PICS: PICS_SDK_CI_ONLY
      cluster: "Level Control"
      command: "MoveToLevelWithOnOff"
      arguments:
          values:
              - name: "Level"
                value: 200
              - name: "TransitionTime"
                value: 0
              - name: "OptionsMask"
                value: 0
              - name: "OptionsOverride"
                value: 0

    - label: "Wait 1s for level to change"
      cluster: "DelayCommands"
      command: "WaitForMs"
      arguments:
          values:
              - name: "ms"
                value: 1000

    - label:
          "TH confirm the DUT reached AC2 (on level control cluster) after 1s,
          which is different from AC1"
      PICS: PICS_SDK_CI_ONLY
      cluster: "Level Control"
      command: "readAttribute"
      attribute: "CurrentLevel"
      response:
          value: 200

    - label:
          "Step 5a: TH configures AC2 on DUT for all implemented application
          clusters supporting scenes."
      verification: |
          ./chip-tool levelcontrol move-to-level-with-on-off 200 0 0 0 1 1

          DUT is configured with AC2 for application clusters which is implemented,  supporting scenes and different from AC1

          [1705040820.918043][6555:6557] CHIP:DMG:                                 StatusIB =
          [1705040820.918056][6555:6557] CHIP:DMG:                                 {
          [1705040820.918068][6555:6557] CHIP:DMG:                                         status = 0x00 (SUCCESS),
          [1705040820.918080][6555:6557] CHIP:DMG:                                 },
      cluster: "LogCommands"
      command: "UserPrompt"
      PICS: PICS_SKIP_SAMPLE_APP
      arguments:
          values:
              - name: "message"
                value:
                    "Please configure AC2 on DUT and enter 'y' after the
                    configuration is complete"
              - name: "expectedValue"
                value: "y"

    - label:
          "Step 5b: TH sends a RecallScene command to DUT with the GroupID field
          set to G1 and the SceneID field set to 0x01 and the TransitionTime
          field omitted."
      PICS: S.S.C05.Rsp
      command: "RecallScene"
      arguments:
          values:
              - name: "GroupID"
                value: G1
              - name: "SceneID"
                value: 0x01

    - label: "Wait 20s"
      cluster: "DelayCommands"
      command: "WaitForMs"
      arguments:
          values:
              - name: "ms"
                value: 20500

    - label:
          "TH confirm the DUT reached AC1 (on level control cluster) after 20s"
      PICS: PICS_SDK_CI_ONLY
      cluster: "Level Control"
      command: "readAttribute"
      attribute: "CurrentLevel"
      response:
          value: 100

    - label: "DUT transitions to AC1 over 20s."
      verification: |
          DUT transitions to AC1 over 20s.

          TH confirm the DUT reached AC1 (on level control cluster) after 20s

          Read CurrentLevel attribute from level control cluster

          ./chip-tool levelcontrol read current-level 1 1

          Verify CurrentLevel attribute value on TH(chip-tool)

          [1708072116.730389][7757:7759] CHIP:DMG: }
          [1708072116.730518][7757:7759] CHIP:TOO: Endpoint: 1 Cluster: 0x0000_0008 Attribute 0x0000_0000 DataVersion: 2359286215
          [1708072116.730552][7757:7759] CHIP:TOO:   CurrentLevel: 100
      cluster: "LogCommands"
      command: "UserPrompt"
      PICS: PICS_SKIP_SAMPLE_APP
      arguments:
          values:
              - name: "message"
                value: "Please confirm that transition to AC1 was made over 20s"
              - name: "expectedValue"
                value: "y"

    - label:
          "Step 6a: TH configures AC2 on DUT for all implemented application
          clusters supporting scenes."
      PICS: S.S.C05.Rsp && PICS_SDK_CI_ONLY
      cluster: "Level Control"
      command: "MoveToLevelWithOnOff"
      arguments:
          values:
              - name: "Level"
                value: 200
              - name: "TransitionTime"
                value: 0
              - name: "OptionsMask"
                value: 0
              - name: "OptionsOverride"
                value: 0

    - label:
          "Step 6a: TH configures AC2 on DUT for all implemented application
          clusters supporting scenes."
      verification: |
          ./chip-tool levelcontrol move-to-level-with-on-off 200 0 0 0 1 1

          DUT is configured with AC2 for application clusters which is implemented,  supporting scenes and different from AC1

          [1705040820.918043][6555:6557] CHIP:DMG:                                 StatusIB =
          [1705040820.918056][6555:6557] CHIP:DMG:                                 {
          [1705040820.918068][6555:6557] CHIP:DMG:                                         status = 0x00 (SUCCESS),
          [1705040820.918080][6555:6557] CHIP:DMG:                                 },
      cluster: "LogCommands"
      command: "UserPrompt"
      PICS: S.S.C05.Rsp && PICS_SKIP_SAMPLE_APP
      arguments:
          values:
              - name: "message"
                value:
                    "Please configure AC2 on DUT and enter 'y' after the
                    configuration is complete"
              - name: "expectedValue"
                value: "y"

    - label:
          "Step 6b: TH sends a RecallScene command to DUT with the GroupID field
          set to G1, the SceneID field set to 0x01 and the TransitionTime field
          set to 5000 5s."
      PICS: S.S.C05.Rsp
      command: "RecallScene"
      arguments:
          values:
              - name: "GroupID"
                value: G1
              - name: "SceneID"
                value: 0x01
              - name: "TransitionTime"
                value: 5000

    - label: "Wait 5s"
      PICS: S.S.C05.Rsp
      cluster: "DelayCommands"
      command: "WaitForMs"
      arguments:
          values:
              - name: "ms"
                value: 5500

    - label:
          "TH confirm the DUT reached AC1 (on level control cluster) after 5s"
      PICS: S.S.C05.Rsp && PICS_SDK_CI_ONLY
      cluster: "Level Control"
      command: "readAttribute"
      attribute: "CurrentLevel"
      response:
          value: 100

    - label: "DUT transitions to AC1 over 5."
      verification: |
          DUT transitions to AC1 over 5s.

          TH confirm the DUT reached AC1 (on level control cluster) after 5s

          Read CurrentLevel attribute from level control cluster

          ./chip-tool levelcontrol read current-level 1 1

          Verify CurrentLevel attribute value on TH(chip-tool)

          [1708072116.730389][7757:7759] CHIP:DMG: }
          [1708072116.730518][7757:7759] CHIP:TOO: Endpoint: 1 Cluster: 0x0000_0008 Attribute 0x0000_0000 DataVersion: 2359286215
          [1708072116.730552][7757:7759] CHIP:TOO:   CurrentLevel: 100
      cluster: "LogCommands"
      command: "UserPrompt"
      PICS: PICS_SKIP_SAMPLE_APP
      arguments:
          values:
              - name: "message"
                value: "Please confirm that transition to AC1 was made over 5s"
              - name: "expectedValue"
                value: "y"

    - label:
          "Step 7a: TH configures AC2 on DUT for all implemented application
          clusters supporting scenes."
      PICS: PICS_SDK_CI_ONLY
      cluster: "Level Control"
      command: "MoveToLevelWithOnOff"
      arguments:
          values:
              - name: "Level"
                value: 200
              - name: "TransitionTime"
                value: 0
              - name: "OptionsMask"
                value: 0
              - name: "OptionsOverride"
                value: 0

    - label:
          "Step 7a: TH configures AC2 on DUT for all implemented application
          clusters supporting scenes."
      verification: |
          ./chip-tool levelcontrol move-to-level-with-on-off 200 0 0 0 1 1

          DUT is configured with AC2 for application clusters which is implemented,  supporting scenes and different from AC1

          [1705040820.918043][6555:6557] CHIP:DMG:                                 StatusIB =
          [1705040820.918056][6555:6557] CHIP:DMG:                                 {
          [1705040820.918068][6555:6557] CHIP:DMG:                                         status = 0x00 (SUCCESS),
          [1705040820.918080][6555:6557] CHIP:DMG:                                 },
      cluster: "LogCommands"
      command: "UserPrompt"
      PICS: PICS_SKIP_SAMPLE_APP
      arguments:
          values:
              - name: "message"
                value:
                    "Please configure AC2 on DUT and enter 'y' after the
                    configuration is complete"
              - name: "expectedValue"
                value: "y"

    - label:
          "Step 7b: TH sends a RecallScene command to DUT with the GroupID field
          set to G1, the SceneID field set to 0x01 and the TransitionTime field
          set to null (no transition time override)."
      PICS: S.S.C05.Rsp
      command: "RecallScene"
      arguments:
          values:
              - name: "GroupID"
                value: G1
              - name: "SceneID"
                value: 0x01
              - name: "TransitionTime"
                value: null

    - label: "Wait 20s"
      PICS: S.S.C05.Rsp
      cluster: "DelayCommands"
      command: "WaitForMs"
      arguments:
          values:
              - name: "ms"
                value: 20500

    - label:
          "TH confirm the DUT reached AC1 (on level control cluster) after 20s"
      PICS: S.S.C05.Rsp && PICS_SDK_CI_ONLY
      cluster: "Level Control"
      command: "readAttribute"
      attribute: "CurrentLevel"
      response:
          value: 100

    - label: "DUT transitions to AC1 over 20s."
      verification: |
          DUT transitions to AC1 over 20s.

          TH confirm the DUT reached AC1 (on level control cluster) after 20s

          Read CurrentLevel attribute from level control cluster

          ./chip-tool levelcontrol read current-level 1 1

          Verify CurrentLevel attribute value on TH(chip-tool)

          [1708072116.730389][7757:7759] CHIP:DMG: }
          [1708072116.730518][7757:7759] CHIP:TOO: Endpoint: 1 Cluster: 0x0000_0008 Attribute 0x0000_0000 DataVersion: 2359286215
          [1708072116.730552][7757:7759] CHIP:TOO:   CurrentLevel: 100
      cluster: "LogCommands"
      command: "UserPrompt"
      PICS: PICS_SKIP_SAMPLE_APP
      arguments:
          values:
              - name: "message"
                value: "Please confirm that transition to AC1 was made over 20s"
              - name: "expectedValue"
                value: "y"

    - label:
          "Step 8: TH removes the Group key set that was added by sending a
          KeySetRemove command to the GroupKeyManagement cluster with the
          GroupKeySetID field set to 0x01a1"
      cluster: "Group Key Management"
      endpoint: 0
      command: "KeySetRemove"
      arguments:
          values:
              - name: GroupKeySetID
                value: 0x01a1
