# 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:
    12.4.15. [TC-CNET-4.17] [Wi-Fi] Verification for attributes check
    [DUT-Client]

PICS:
    - CNET.C.F00

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

tests:
    - label: "DUT reads the MaxNetworks attribute from the TH"
      PICS: CNET.S.A0000
      verification: |
          ./chip-tool networkcommissioning read max-networks 1 0

          Verify MaxNetworks attribute on the TH/All-cluster-app Log:

          [1646216356.472036][7021:7026] CHIP:DMG:        SuppressResponse = true,
          [1646216356.472088][7021:7026] CHIP:DMG:        InteractionModelRevision = 1
          [1646216356.472136][7021:7026] CHIP:DMG: }
          [1646216356.472388][7021:7026] CHIP:TOO: Endpoint: 0 Cluster: 0x0000_0031 Attribute 0x0000_0000DataVersion: 1979781767
          [1646216356.472511][7021:7026] CHIP:TOO:  MaxNetworks: 1
          [1646216356.472624][7021:7026] CHIP:EM: Sending Standalone Ack for MessageCounter:4914191 on exchange 38527i
      disabled: true

    - label: "DUT reads the Networks attribute from the TH"
      PICS: CNET.S.A0001
      verification: |
          ./chip-tool networkcommissioning read networks 1 0


          Verify Networks entiries and its status on the TH/All-cluster-app Log:

          [1654250379.881780][5309:5314] CHIP:TOO: Endpoint: 0 Cluster: 0x0000_0031 Attribute 0x0000_0001 DataVersion: 3741733376
          [1654250379.881974][5309:5314] CHIP:TOO:   Networks: 1 entries
          [1654250379.882123][5309:5314] CHIP:TOO:     [1]: {
          [1654250379.882196][5309:5314] CHIP:TOO:       NetworkID: 47524C50726976617465
          [1654250379.882257][5309:5314] CHIP:TOO:       Connected: TRUE
          [1654250379.882312][5309:5314] CHIP:TOO:      }
      disabled: true

    - label: "DUT reads ScanMaxTimeSeconds attribute from the TH"
      PICS: CNET.S.A0002
      verification: |
          ./chip-tool networkcommissioning read scan-max-time-seconds 1 0

          Verify  ScanMaxTimeSeconds on the TH/All-cluster-app Log:


          [1653473784.850830][29813:29818] CHIP:TOO: Endpoint: 0 Cluster: 0x0000_0031 Attribute 0x0000_0002 DataVersion: 1600858167
          [1653473784.850916][29813:29818] CHIP:TOO:   ScanMaxTimeSeconds: 10
          [1653473784.851029][29813:29818] CHIP:EM: Sending Standalone Ack for MessageCounter:16671548 on exchange 37205i
      disabled: true

    - label: "DUT reads ConnectMaxTimeSeconds attribute from the TH"
      PICS: CNET.S.A0003
      verification: |
          ./chip-tool networkcommissioning read connect-max-time-seconds 1 0


          Verify ConnectMaxTimeSeconds on the TH/All-cluster-app Log:

          [1653473821.367214][29821:29826] CHIP:TOO: Endpoint: 0 Cluster: 0x0000_0031 Attribute 0x0000_0003 DataVersion: 1600858167
          [1653473821.367283][29821:29826] CHIP:TOO:   ConnectMaxTimeSeconds: 20
          [1653473821.367379][29821:29826] CHIP:EM: Sending Standalone Ack for MessageCounter:187119 on exchange 50022i
      disabled: true

    - label: "DUT reads InterfaceEnabled attribute from the TH"
      PICS: CNET.S.A0004
      verification: |
          ./chip-tool networkcommissioning read interface-enabled 1 0


          Verify InterfaceEnabled on the TH/All-cluster-app Log:

          [1653473893.275901][29834:29839] CHIP:TOO: Endpoint: 0 Cluster: 0x0000_0031 Attribute 0x0000_0004 DataVersion: 1600858167
          [1653473893.275964][29834:29839] CHIP:TOO:   InterfaceEnabled: TRUE
          [1653473893.276084][29834:29839] CHIP:EM: Sending Standalone Ack for MessageCounter:13157245 on exchange 55578i
      disabled: true

    - label: "DUT reads LastNetworkingStatus attribute from the TH"
      PICS: CNET.S.A0005
      verification: |
          ./chip-tool networkcommissioning read last-networking-status 1 0


          Verify LastNetworkingStatus on the TH/All-cluster-app Log:

          [1653473918.484769][29840:29845] CHIP:TOO: Endpoint: 0 Cluster: 0x0000_0031 Attribute 0x0000_0005 DataVersion: 1600858167
          [1653473918.484843][29840:29845] CHIP:TOO:   LastNetworkingStatus: 0
          [1653473918.484940][29840:29845] CHIP:EM: Sending Standalone Ack for MessageCounter:10161085 on exchange 18769i
      disabled: true

    - label: "DUT reads LastNetworkID attribute from the TH"
      PICS: CNET.S.A0006
      verification: |
          ./chip-tool networkcommissioning read last-network-id 1

          Verify LastNetworkID on the TH/All-cluster-app Log:

          "[1653474059.383553][27286:27291] CHIP:TOO: Endpoint: 0 Cluster: 0x0000_0031 Attribute 0x0000_0006 DataVersion: 1912591449
          [1653474059.383618][27286:27291] CHIP:TOO:   LastNetworkID: 47524C50726976617465
          [1653474059.383723][27286:27291] CHIP:EM: Sending Standalone Ack for MessageCounter:6975079 on exchange 34674i"
      disabled: true

    - label: "DUT reads LastConnectErrorValue attribute from the TH"
      PICS: CNET.S.A0007
      verification: |
          ./chip-tool networkcommissioning read last-connect-error-value 1 0

          Verify LastConnectErrorValue on the TH/All-cluster-app Log:

          [1653474102.061746][29860:29865] CHIP:TOO: Endpoint: 0 Cluster: 0x0000_0031 Attribute 0x0000_0007 DataVersion: 1600858167
          [1653474102.061812][29860:29865] CHIP:TOO:   LastConnectErrorValue: null
          [1653474102.061934][29860:29865] CHIP:EM: Sending Standalone Ack for MessageCounter:5193529 on exchange 29546i
      disabled: true
