# 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.

name: Operational Credentials Cluster Tests

config:
    nodeId: 0x12344321
    cluster: "Operational Credentials"
    endpoint: 0

tests:
    - label: "Wait for the commissioned device to be retrieved"
      cluster: "DelayCommands"
      command: "WaitForCommissionee"
      arguments:
          values:
              - name: "nodeId"
                value: nodeId

    - label: "Read number of supported fabrics"
      command: "readAttribute"
      attribute: "SupportedFabrics"
      response:
          constraints:
              type: int8u
              minValue: 4

    - label: "Read number of commissioned fabrics"
      command: "readAttribute"
      attribute: "CommissionedFabrics"
      response:
          constraints:
              type: int8u
              minValue: 1

    - label: "Read current fabric index"
      command: "readAttribute"
      attribute: "CurrentFabricIndex"
      response:
          saveAs: ourFabricIndex
          constraints:
              type: int8u
              # 0 is not a valid value, but past that we have no idea what the
              # other side will claim here.
              minValue: 1

    - label: "Remove nonexistent fabric"
      command: "RemoveFabric"
      arguments:
          values:
              - name: "FabricIndex"
                value: 243 # Pretty unlikely to have that here!
      response:
          values:
              - name: "StatusCode"
                value: 11 # InvalidFabricIndex

    - label: "Read fabric list before setting label"
      command: "readAttribute"
      attribute: "Fabrics"
      response:
          value: [
                  {
                      "FabricIndex": ourFabricIndex,
                      # Don't know what values to expect for the other bits here
                      "Label": "",
                  },
              ]

    - label: "Set the fabric label"
      command: "UpdateFabricLabel"
      arguments:
          values:
              - name: "Label"
                value: "Batcave"
      response:
          values:
              - name: "StatusCode"
                value: 0 # Ok
              - name: "FabricIndex"
                value: ourFabricIndex

    - label: "Read fabric list after setting label"
      command: "readAttribute"
      attribute: "Fabrics"
      response:
          value: [
                  {
                      "FabricIndex": ourFabricIndex,
                      # Don't know what values to expect for the other bits here
                      "Label": "Batcave",
                  },
              ]

    # TODO: Once we can commission the device onto a second fabric
    # here, try setting the fabric label from there to the same value
    # and ensure it fails.
    - label: "Set the fabric label"
      disabled: true
      command: "UpdateFabricLabel"
      identity: beta
      arguments:
          values:
              - name: "Label"
                value: "Batcave"
      response:
          values:
              - name: "StatusCode"
                value: 10 # LabelConflict

    # This test is currently disabled as it breaks on Darwin.
    # The test removes the current fabric, and Darwin test runner reuses
    # the same pairing to run all the tests. Due to that, all subsequent
    # tests fail.
    - label: "Remove fabric"
      disabled: true
      command: "RemoveFabric"
      arguments:
          values:
              - name: "FabricIndex"
                value: 1
