# 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:
    3.8.1. [TC-SU-3.3] Transfer of Software Update Images between DUT and OTA-R

PICS:
    - MCORE.OTA.Provider

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

tests:
    - label:
          "OTA-R/TH sends a QueryImage Command to the DUT. Protocol supported
          should only list 'BDX'. DUT responds with the QueryImageResponse to
          the OTA-R/TH."
      verification: |
          ./chip-tool otasoftwareupdaterequestor announce-otaprovider 0xDEADBEEF 0 0 0 0x1234567890 0

          where 0x1234567890 is OTA Requestor node ID and 0xDEADBEEF is OTA Provider node ID

          Verify on the OTA Requestor logs receives QueryImageResponse

          [1645743053319] [97809:20280821] CHIP: [SWU] QueryImageResponse:
          [1645743053319] [97809:20280821] CHIP: [SWU]   status: 0
          [1645743053319] [97809:20280821] CHIP: [SWU]   delayedActionTime: 0 seconds
          [1645743053319] [97809:20280821] CHIP: [SWU]   imageURI: bdx://0000000000000001/test.ota
          [1645743053319] [97809:20280821] CHIP: [SWU]   softwareVersion: 1
          [1645743053319] [97809:20280821] CHIP: [SWU]   softwareVersionString: Example-Image-V0.1
          [1645743053319] [97809:20280821] CHIP: [SWU]   updateToken: 32
          [1645743053319] [97809:20280821] CHIP: [SWU]   userConsentNeeded: 0
          [1645743053319] [97809:20280821] CHIP: [SWU]   metadataForRequestor: 0
          [1645743053319] [97809:20280821] CHIP: [SWU] Update available from 0 to 1 version

          Verify on the OTA Requestor logs after image downloaded

          [1645743059327] [97809:20280957] CHIP: [SWU] OTA image downloaded to test.txt
      disabled: true

    - label:
          "TH sends a QueryImage command to the DUT. RequestorCanConsent is set
          to True by TH. DUT responds with a QueryImageResponse with
          UserConsentNeeded field set to True."
      PICS: OTAP.S.M.UserConsentNeeded
      verification: |
          Run the OTA Requestor App using command
          chip-ota-requestor-app --discriminator ${REQUESTOR_LONG_DISCRIMINATOR} --secured-device-port ${REQUESTOR_UDP_PORT} --KVS ${KVS_STORE_LOCATION} --periodicQueryTimeout ${TIME_IN_SECONDS} -c

          out/chip-ota-provider-app --discriminator 22 --secured-device-port 5565 --KVS /tmp/chip_kvs_provider --filepath /tmp/test.bin -c

          Verify that the DUT does not try to obtain User Consent from the user prior to transfer of software update image.
      disabled: true

    - label:
          "TH sends a QueryImage command to the DUT. RequestorCanConsent is set
          to True by TH. DUT responds with a QueryImageResponse with
          UserConsentNeeded field set to False."
      PICS: OTAP.S.M.UserConsentNeeded
      verification: |
          Run the OTA Requestor App using command

          chip-ota-requestor-app --discriminator ${REQUESTOR_LONG_DISCRIMINATOR} --secured-device-port ${REQUESTOR_UDP_PORT} --KVS ${KVS_STORE_LOCATION} --periodicQueryTimeout ${TIME_IN_SECONDS} -c

          out/chip-ota-provider-app --discriminator 22 --secured-device-port 5565 --KVS /tmp/chip_kvs_provider --filepath /tmp/test.bin

          Verify that the DUT tries to obtain User Consent from the user prior to transfer of software update image.
      disabled: true

    - label:
          "During the transfer of the image from the DUT, force fail the
          transfer before it completely transfers the image. Wait for the Idle
          timeout. Initiate another QueryImage Command from OTA-R/TH to the DUT."
      verification: |
          ./chip-tool otasoftwareupdaterequestor announce-otaprovider 0xDEADBEEF 0 0 0 0x1234567890 0

          where 0x1234567890 is OTA Requestor node ID and 0xDEADBEEF is OTA Provider node ID

          Kill the OTA Requestor App during the transfer of the image to the DUT before it completely transfers the image.

          Verify that the BDX Idle timeout on DUT should be no less than 5 minutes.
          [1651269360125] [23256:35291938] CHIP: [BDX] Transfer timed out

          Relaunch the OTA Requestor App and initiate another query

          ./chip-tool otasoftwareupdaterequestor announce-otaprovider 0xDEADBEEF 0 0 0 0x1234567890 0

          Verify that a new transfer of software image is started from DUT when sending another QueryImage request
      disabled: true

    - label:
          "During the transfer of the image from the DUT, force fail the
          transfer before it completely transfers the image. Initiate another
          QueryImage Command from OTA-R/TH to the DUT. Set the RC[STARTOFS] bit
          and associated STARTOFS field in the ReceiveInit Message sent from the
          TH to indicate the resumption of a transfer previously aborted."
      verification: |
          Out of scope for V1.0
      disabled: true

    - label: "Perform the OTA Update from DUT using vendor specific mechanism."
      PICS: MCORE.OTA.VendorSpecific
      verification: |
          Use vendor specific steps to initiate OTA Update and verify that the software image is transferred from the DUT
      disabled: true
