# 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:
    4.1.22. [TC-CADMIN-1.22] Open commissioning window - durations max and max+1
    [ECM] [DUT - Commissionee]

PICS:
    - CADMIN.S

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

tests:
    - label: "Reset DUT_CE to factory defaults"
      verification: |
          verification step to be updated.
      disabled: true

    - label: "TH_CR1 starts a commissioning process with DUT_CE using ECM"
      PICS: CADMIN.S.C00.Rsp
      verification: |
          "1. Provision the device using 1st controller chip tool(use above instructions) ,
          "
      disabled: true

    - label:
          "TH_CR1 opens a commissioning window on DUT_CE with a value of 900
          seconds"
      PICS: CADMIN.S.C00.Rsp
      verification: |
          On 1st controller chip tool, open commissioning window

          Below is the example when using chip tool as controller


          For ECM,
          ./chip-tool pairing open-commissioning-window 1 1 900 1000 3840

          [1635925713.966786][9695:9700] CHIP:SC: Success status report received. Session was established
          [1635925713.966839][9695:9700] CHIP:IN: New secure session created for device 0x0000000000000001, key 33!!
          [1635925713.966938][9695:9700] CHIP:CTL: OpenCommissioningWindow for device ID 1
          [1635925713.972601][9695:9700] CHIP:DMG: ICR moving to [AddingComm]
          [1635925713.972705][9695:9700] CHIP:DMG: ICR moving to [AddedComma]
          [1635925713.972815][9695:9700] CHIP:IN: Prepared encrypted message 0xaaaad9b57d10 to 0x0000000000000001 of type 0x8 and protocolId (0, 1) on exchange 31056i with MessageCounter:0.
          [1635925713.972876][9695:9700] CHIP:IN: Sending encrypted msg 0xaaaad9b57d10 with MessageCounter:0 to 0x0000000000000001 at monotonic time: 13449459 msec
          [1635925713.973006][9695:9700] CHIP:DMG: ICR moving to [CommandSen]
          [1635925713.973061][9695:9700] CHIP:CTL: Manual pairing code: [35484132896]
          [1635925713.973120][9695:9700] CHIP:CTL: SetupQRCode: [MT:00000CQM00A7F87ZT10]
          [1635925713.973178][9695:9700] CHIP:EM: Sending Standalone Ack for MessageCounter:1964916542 on exchange 31055i
      disabled: true

    - label: "Wait for commissioning Window to 901 seconds"
      verification: |
          Wait for commissioning Window to Timeout
      disabled: true

    - label:
          "TH_CR1 reads the window status to verify the DUT_CE window is closed"
      PICS: CADMIN.S.A0000
      verification: |
          On 1st controller read window status

          ./chip-tool administratorcommissioning read window-status 1 0

          CHIP:TOO: Endpoint: 0 Cluster: 0x0000_003C Attribute 0x0000_0000 DataVersion: 2849200592
          [1651137648.760469][14047:14052] CHIP:TOO:   WindowStatus: 0
          [1651137648.760534][14047:14052] CHIP:EM: Sending Standalone Ack for MessageCounter:5527412 on exchange 14590i
      disabled: true

    - label:
          "TH_CR1 opens a commissioning window on DUT_CE with a value of 901
          seconds"
      PICS: CADMIN.S.C00.Rsp
      verification: |
          On 1st controller chip tool, open commissioning window

          Below is the example when using chip tool as controller


          For ECM,
          ./chip-tool pairing open-commissioning-window 1 1 901 1000 3840

          CHIP:DMG: Received Command Response Status for Endpoint=0 Cluster=0x0000_003C Command=0x0000_0001 Status=0x85
          [1652860801.225084][9512:9517] CHIP:TOO: Error: IM Error 0x00000585: General error: 0x85 (INVALID_COMMAND)
          [1652860801.225173][9512:9517] CHIP:DMG: ICR moving to [AwaitingDe]
          [1652860801.225294][9512:9517] CHIP:EM: Sending Standalone Ack for MessageCounter:4191961 on exchange 37827i
      disabled: true

    - label:
          "TH_CR1 reads the window status to verify the DUT_CE window is closed"
      PICS: CADMIN.S.A0000
      verification: |
          On TH1 controller read window status

          ./chip-tool administratorcommissioning read window-status 1 0

          CHIP:TOO: Endpoint: 0 Cluster: 0x0000_003C Attribute 0x0000_0000 DataVersion: 2849200592
          [1651137648.760469][14047:14052] CHIP:TOO:   WindowStatus: 0
          [1651137648.760534][14047:14052] CHIP:EM: Sending Standalone Ack for MessageCounter:5527412 on exchange 14590i
      disabled: true
