# 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.12.4. [TC-CONTENTLAUNCHER-10.5] Launch URL Verification

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

tests:
    - label:
          "TH sends a LaunchURL command to the DUT with a known good content URL
          string"
      PICS: CONTENTLAUNCHER.C.C0001
      verification: |
          ./chip-tool contentlauncher launch-url "exampleUrl"   '{"providerName":  "exampleName", "background": { "imageUrl": "exampleUrl", "color": "blue", "size" : {"width": 1.0, "height": 1.0,  "metric": 0} }}' 1 1


          [1651062947.426589][157354:157359] CHIP:TOO: Endpoint: 1 Cluster: 0x0000_050A Command 0x0000_0002
          [1651062947.426633][157354:157359] CHIP:TOO:   LaunchResponse: {
          [1651062947.426667][157354:157359] CHIP:TOO:     status: 0
          [1651062947.426686][157354:157359] CHIP:TOO:     data: exampleData
          [1651062947.426704][157354:157359] CHIP:TOO:    }


          Example tv-app log file shows receipt of launchurl command:
          [1653934858083] [86784:7552970] CHIP: [ZCL] ContentLauncherManager::HandleLaunchUrl TEST CASE ContentURL=exampleUrl DisplayString= BrandingInformation.ProviderName=exampleName
      disabled: true

    - label:
          "TH sends a LaunchURL command to the DUT with a known good content URL
          string and a display string"
      PICS: CONTENTLAUNCHER.C.C0001
      verification: |
          ./chip-tool contentlauncher launch-url "https://csa-iot.org/"   '{"providerName":  "exampleName", "background": { "imageUrl": "exampleUrl", "color": "blue", "size" : {"width": 1.0, "height": 1.0,  "metric": 0} }}' 1 1 --DisplayString "Custom Display String"


          [1651225659.477000][4263:4268] CHIP:TOO: Endpoint: 1 Cluster: 0x0000_050A Command 0x0000_0002
          [1651225659.477112][4263:4268] CHIP:TOO:   LaunchResponse: {
          [1651225659.477213][4263:4268] CHIP:TOO:     status: 0
          [1651225659.477274][4263:4268] CHIP:TOO:     data: exampleData
          [1651225659.477352][4263:4268] CHIP:TOO:    }


          Example tv-app log file shows receipt of launchurl command:
          [1653935303371] [86784:7557521] CHIP: [ZCL] ContentLauncherManager::HandleLaunchUrl TEST CASE ContentURL=https://csa-iot.org/ DisplayString=Custom Display String BrandingInformation.ProviderName=exampleName
      disabled: true

    - label:
          "TH sends a LaunchURL command to the DUT with a known good content URL
          string and a brand information object."
      PICS: CONTENTLAUNCHER.C.C0001
      verification: |
          ./chip-tool contentlauncher launch-url "https://csa-iot.org/"   '{"providerName":  "exampleName", "background": { "imageUrl": "exampleUrl", "color": "blue", "size" : {"width": 1.0, "height": 1.0,  "metric": 0} }}' 1 1


          [1651225659.477000][4263:4268] CHIP:TOO: Endpoint: 1 Cluster: 0x0000_050A Command 0x0000_0002
          [1651225659.477112][4263:4268] CHIP:TOO:   LaunchResponse: {
          [1651225659.477213][4263:4268] CHIP:TOO:     status: 0
          [1651225659.477274][4263:4268] CHIP:TOO:     data: exampleData
          [1651225659.477352][4263:4268] CHIP:TOO:    }


          Example tv-app log file shows receipt of launchurl command:
          [1653935043782] [86784:7554997] CHIP: [ZCL] ContentLauncherManager::HandleLaunchUrl TEST CASE ContentURL=https://csa-iot.org/ DisplayString= BrandingInformation.ProviderName=exampleName
      disabled: true

    - label:
          "TH sends a LaunchURL command to the DUT with a known unreachable
          content URL string."
      PICS: CONTENTLAUNCHER.C.C0001
      verification: |
          ./chip-tool contentlauncher launch-url "https://badurl"   '{"providerName":  "exampleName", "background": { "imageUrl": "exampleUrl", "color": "blue", "size" : {"width": 1.0, "height": 1.0,  "metric": 0} }}' 1 1

          [1652429829.721244][29660:29665] CHIP:TOO: Endpoint: 1 Cluster: 0x0000_050A Command 0x0000_0002
          [1652429829.721301][29660:29665] CHIP:TOO:   LaunchResponse: {
          [1652429829.721341][29660:29665] CHIP:TOO:     status: 1
          [1652429829.721368][29660:29665] CHIP:TOO:     data: exampleData
          [1652429829.721395][29660:29665] CHIP:TOO:    }

          [1654584050.322782][2478:2478] CHIP:DMG: Received command for Endpoint=1 Cluster=0x0000_050A Command=0x0000_0001
          [1654584050.322837][2478:2478] CHIP:DL: GetContentAppByEndpointId() - endpoint 1 not found
          [1654584050.322860][2478:2478] CHIP:ZCL: Content Launcher NOT returning ContentApp delegate for endpoint:1
          [1654584050.322891][2478:2478] CHIP:ZCL: ContentLauncherManager::HandleLaunchUrl
          [1654584050.322915][2478:2478] CHIP:ZCL: ContentLauncherManager::HandleLaunchUrl TEST CASE ContentURL=https://badurl DisplayString= BrandingInformation.ProviderName=exampleName
          [1654584050.322953][2478:2478] CHIP:DMG: ICR moving to [ Preparing]
      disabled: true

    - label:
          "TH sends a LaunchURL command to the DUT with a known un-authorized
          content URL string."
      PICS: CONTENTLAUNCHER.C.C0001
      verification: |
          ./chip-tool contentlauncher launch-url "https://csa-iot.org/badauth"   '{"providerName":  "exampleName", "background": { "imageUrl": "exampleUrl", "color": "blue", "size" : {"width": 1.0, "height": 1.0,  "metric": 0} }}' 1 1


          [1652429857.017897][29666:29671] CHIP:TOO: Endpoint: 1 Cluster: 0x0000_050A Command 0x0000_0002
          [1652429857.017968][29666:29671] CHIP:TOO:   LaunchResponse: {
          [1652429857.018031][29666:29671] CHIP:TOO:     status: 2
          [1652429857.018068][29666:29671] CHIP:TOO:     data: exampleData
          [1652429857.018103][29666:29671] CHIP:TOO:    }

          [1654584216.621632][2478:2478] CHIP:DMG: Received command for Endpoint=1 Cluster=0x0000_050A Command=0x0000_0001
          [1654584216.621692][2478:2478] CHIP:DL: GetContentAppByEndpointId() - endpoint 1 not found
          [1654584216.621718][2478:2478] CHIP:ZCL: Content Launcher NOT returning ContentApp delegate for endpoint:1
          [1654584216.621752][2478:2478] CHIP:ZCL: ContentLauncherManager::HandleLaunchUrl
          [1654584216.621804][2478:2478] CHIP:ZCL: ContentLauncherManager::HandleLaunchUrl TEST CASE ContentURL=https://csa-iot.org/badauth DisplayString= BrandingInformation.ProviderName=exampleName
          [1654584216.621845][2478:2478] CHIP:DMG: ICR moving to [ Preparing]
      disabled: true
