# 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.7.2. [TC-SU-3.2] Handling different QueryImageResponse scenarios on
    Provider

PICS:
    - MCORE.OTA.Provider

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

tests:
    - label:
          "OTA-R/TH sends a QueryImage Command to the DUT. RequestorCanConsent
          field can be set to either True or False in the QueryImage Command.
          DUT responds with the QueryImageResponse to the OTA-R/TH."
      verification: |
          ./chip-tool otasoftwareupdaterequestor announce-ota-provider 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 which contains the following
          Status - UpdateAvailable
          DelayedActionTime if present should be of type uint32.
          ImageURI - contain a URI where the OTA Requestor SHOULD download a Software Image
          SoftwareVersion is the same as the new software image version.
          SoftwareVersionString - This is the string type of the Software version.
          UpdateToken - verify it is within 8-32 bytes.



          [1651265462659] [21768:35233106] CHIP: [SWU] QueryImageResponse:
          [1651265462659] [21768:35233106] CHIP: [SWU]   status: 0
          [1651265462659] [21768:35233106] CHIP: [SWU]   delayedActionTime: 0 seconds
          [1651265462659] [21768:35233106] CHIP: [SWU]   imageURI: bdx://0000000000000001/test.ota
          [1651265462659] [21768:35233106] CHIP: [SWU]   softwareVersion: 2
          [1651265462659] [21768:35233106] CHIP: [SWU]   softwareVersionString: 2.0
          [1651265462659] [21768:35233106] CHIP: [SWU]   updateToken: 32
          [1651265462659] [21768:35233106] CHIP: [SWU]   userConsentNeeded: 0
          [1651265462659] [21768:35233106] CHIP: [SWU]   metadataForRequestor: 0
          [1651265462659] [21768:35233106] CHIP: [SWU] Update available from version 1 to 2
      disabled: true

    - label:
          "There should not be any new software update available for the
          OTA-R/TH. OTA-R/TH sends a QueryImage Command to the DUT. DUT responds
          with the QueryImageResponse to the OTA-R/TH."
      verification: |
          ./chip-ota-provider-app --discriminator 22 --secured-device-port 5565 --KVS /tmp/chip_kvs_provider --filepath /tmp/test.bin -q updateNotAvailable

          ./chip-tool otasoftwareupdaterequestor announce-ota-provider 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 with the Status as Not Available

          [1645819644181] [21592:21187907] CHIP: [SWU] QueryImageResponse:
          [1645819644181] [21592:21187907] CHIP: [SWU]   status: 2
          [1645819644181] [21592:21187907] CHIP: [SWU]   delayedActionTime: 120 seconds
          [1645819644181] [21592:21187907] CHIP: [SWU]   userConsentNeeded: 0
          [1645819644181] [21592:21187907] CHIP: [SWU]   metadataForRequestor: 0
      disabled: true

    - label:
          "OTA-R/TH sends a QueryImage Command to the DUT. ProtocolSupported
          field should list BDX. DUT responds with the QueryImageResponse to the
          OTA-R/TH."
      verification: |
          ./chip-tool otasoftwareupdaterequestor announce-ota-provider 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

          [1651265462659] [21768:35233106] CHIP: [SWU] QueryImageResponse:
          [1651265462659] [21768:35233106] CHIP: [SWU]   status: 0
          [1651265462659] [21768:35233106] CHIP: [SWU]   delayedActionTime: 0 seconds
          [1651265462659] [21768:35233106] CHIP: [SWU]   imageURI: bdx://0000000000000001/test.ota
          [1651265462659] [21768:35233106] CHIP: [SWU]   softwareVersion: 2
          [1651265462659] [21768:35233106] CHIP: [SWU]   softwareVersionString: 2.0
          [1651265462659] [21768:35233106] CHIP: [SWU]   updateToken: 32
          [1651265462659] [21768:35233106] CHIP: [SWU]   userConsentNeeded: 0
          [1651265462659] [21768:35233106] CHIP: [SWU]   metadataForRequestor: 0
          [1651265462659] [21768:35233106] CHIP: [SWU] Update available from version 1 to 2

          Verify all the image URI field requirements.
      disabled: true

    - label:
          "OTA-R/TH sends a QueryImage Command to the DUT. ProtocolSupported
          field should list https. DUT responds with a QueryImageResponse to the
          OTA-R/TH."
      verification: |
          Out of scope for V1.0
      disabled: true

    - label:
          "OTA-R/TH sends a QueryImage Command to the DUT. DUT responds with the
          QueryImageResponse with QueryStatus set to Busy, DelayedActionTime set
          to 3 minutes. On the subsequent QueryImage command, DUT sends a
          QueryImageResponse back to OTA-R/TH. QueryStatus is set to
          UpdateAvailable."
      PICS: OTAP.S.M.DelayedActionTime
      verification: |
          ./chip-ota-provider-app --discriminator 22 --secured-device-port 5565 --KVS /tmp/chip_kvs_provider --filepath /tmp/test.bin -q busy -t 180

          ./chip-tool otasoftwareupdaterequestor announce-ota-provider 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 with Status as busy and DelayedActionTime as 3 minutes

          [1651265271074] [21764:35230537] CHIP: [SWU] QueryImageResponse:
          [1651265271074] [21764:35230537] CHIP: [SWU]   status: 1
          [1651265271074] [21764:35230537] CHIP: [SWU]   delayedActionTime: 180 seconds
          [1651265271074] [21764:35230537] CHIP: [SWU]   userConsentNeeded: 0
          [1651265271074] [21764:35230537] CHIP: [SWU]   metadataForRequestor: 0

          Verify that the OTA-R/TH starts the download from the DUT after the second QueryImageResponse with UpdateAvailable status.

          [1651265462659] [21768:35233106] CHIP: [SWU] QueryImageResponse:
          [1651265462659] [21768:35233106] CHIP: [SWU]   status: 0
          [1651265462659] [21768:35233106] CHIP: [SWU]   delayedActionTime: 0 seconds
          [1651265462659] [21768:35233106] CHIP: [SWU]   imageURI: bdx://0000000000000001/test.ota
          [1651265462659] [21768:35233106] CHIP: [SWU]   softwareVersion: 2
          [1651265462659] [21768:35233106] CHIP: [SWU]   softwareVersionString: 2.0
          [1651265462659] [21768:35233106] CHIP: [SWU]   updateToken: 32
          [1651265462659] [21768:35233106] CHIP: [SWU]   userConsentNeeded: 0
          [1651265462659] [21768:35233106] CHIP: [SWU]   metadataForRequestor: 0
          [1651265462659] [21768:35233106] CHIP: [SWU] Update available from version 1 to 2

          Verify that the Image downloaded by the OTA-R/TH is valid and is the same image that was supposed to be downloaded.
      disabled: true
