# Copyright (c) 2023 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: 116.2.1. [TC-DRLK-2.1] Attributes check [DUT - Server]

PICS:
    - DRLK.S

config:
    nodeId: 0x12344321
    cluster: "Door Lock"
    endpoint: 1

    WaitAfterLockAandUnlockDoor:
        type: int16u
        defaultValue: 5000

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

    - label: "Step 1a: TH reads LockState attribute from DUT"
      PICS: DRLK.S.A0000
      command: "readAttribute"
      attribute: "LockState"
      response:
          saveAs: LockStateValue
          constraints:
              type: enum8
              minValue: 0
              maxValue: 3

    - label: "Step 1b: TH writes LockState attribute as 1"
      PICS: DRLK.S.A0000
      command: "writeAttribute"
      attribute: "LockState"
      arguments:
          value: 1
      response:
          error: UNSUPPORTED_WRITE

    - label: "Step 1c: TH reads LockState attribute from DUT"
      PICS: DRLK.S.A0000
      command: "readAttribute"
      attribute: "LockState"
      response:
          value: LockStateValue

    - label: "Step 1d: TH sends SetUser Command to DUT"
      PICS: DRLK.S.F08 && DRLK.S.C1a.Rsp
      command: "SetUser"
      timedInteractionTimeoutMs: 1000
      arguments:
          values:
              - name: "OperationType"
                value: 0
              - name: "UserIndex"
                value: 1
              - name: "UserName"
                value: "xxx"
              - name: "UserUniqueID"
                value: 6452
              - name: "UserStatus"
                value: 1
              - name: "UserType"
                value: 0
              - name: "CredentialRule"
                value: 0

    - label:
          "Step 1e: TH reads MinPINCodeLength attribute and saves the value as
          min_pin_code_length"
      PICS: DRLK.S.F08 && DRLK.S.F00
      command: "readAttribute"
      attribute: "MinPINCodeLength"
      response:
          saveAs: min_pin_code_length
          constraints:
              type: int8u
              minValue: 0
              maxValue: 255

    - label:
          "Step 1f: TH reads MaxPINCodeLength attribute and saves the value as
          max_pin_code_length"
      PICS: DRLK.S.F08 && DRLK.S.F00
      command: "readAttribute"
      attribute: "MaxPINCodeLength"
      response:
          saveAs: max_pin_code_length
          constraints:
              type: int8u
              minValue: 0
              maxValue: 255

    - label: "Step 1g: TH sends SetCredential Command"
      PICS: DRLK.S.F00 && DRLK.S.F08 && DRLK.S.C22.Rsp && DRLK.S.C23.Tx
      command: "SetCredential"
      timedInteractionTimeoutMs: 1000
      arguments:
          values:
              - name: "OperationType"
                value: 0
              - name: "Credential"
                value: { CredentialType: 1, CredentialIndex: 1 }
              - name: "CredentialData"
                value: "123456"
              - name: "UserIndex"
                value: 1
              - name: "UserStatus"
                value: null
              - name: "UserType"
                value: null

    - label:
          "Step 1h: TH sends a Lock Door command to the DUT. If DRLK.S.F00(PIN)
          & DRLK.S.F07(COTA), include a Valid PINCode in the Lock Door command."
      PICS: DRLK.S.C00.Rsp && DRLK.S.F00 && DRLK.S.F07 && DRLK.S.A0000
      command: "LockDoor"
      timedInteractionTimeoutMs: 1000
      arguments:
          values:
              - name: "PINCode"
                value: "123456"

    - label:
          "Step 1h: TH sends a Lock Door command to the DUT without pin_code."
      PICS: DRLK.S.C00.Rsp && !DRLK.S.F00 && !DRLK.S.F07 && DRLK.S.A0000
      command: "LockDoor"
      timedInteractionTimeoutMs: 1000

    - label: "Wait after Lock Door"
      PICS: DRLK.S.C00.Rsp
      cluster: "DelayCommands"
      command: "WaitForMs"
      arguments:
          values:
              - name: "ms"
                value: WaitAfterLockAandUnlockDoor
    - label: "Step 1h: TH reads LockState attribute from DUT"
      PICS: DRLK.S.A0000
      command: "readAttribute"
      attribute: "LockState"
      response:
          value: 1
    - label:
          "Step 1i: TH sends a Unlock Door command to the DUT. If
          DRLK.S.F00(PIN) & DRLK.S.F07(COTA), include a Valid PINCode in the
          Unlock Door command"
      PICS: DRLK.S.C01.Rsp && DRLK.S.F00 && DRLK.S.F07 && DRLK.S.A0000
      command: "UnlockDoor"
      timedInteractionTimeoutMs: 1000
      arguments:
          values:
              - name: "PINCode"
                value: "123456"

    - label:
          "Step 1i: TH sends a Unlock Door command to the DUT without pincode."
      PICS: DRLK.S.C01.Rsp && !DRLK.S.F00 && !DRLK.S.F07 && DRLK.S.A0000
      command: "UnlockDoor"
      timedInteractionTimeoutMs: 1000

    - label: "Wait after Unlock Door"
      PICS: DRLK.S.C00.Rsp
      cluster: "DelayCommands"
      command: "WaitForMs"
      arguments:
          values:
              - name: "ms"
                value: WaitAfterLockAandUnlockDoor

    - label: "Step 1i: TH reads LockState attribute from DUT"
      PICS: DRLK.S.A0000
      command: "readAttribute"
      attribute: "LockState"
      response:
          value: 2

    - label: "Step 1j: Simulate a not fully locked scenario on the DUT."
      PICS:
          DRLK.S.A0000 && DRLK.S.M.SimulateNotFullyLocked &&
          PICS_SKIP_SAMPLE_APP
      verification: |
          vendor will give instructions on how to simulate if applicable and if that is possible, then send the below command to read the lock state attribute.

          ./chip-tool doorlock read lock-state 1 1
      cluster: "LogCommands"
      command: "UserPrompt"
      arguments:
          values:
              - name: "message"
                value: "Enter 'y' after success"
              - name: "expectedValue"
                value: "y"

    - label: "Step 2a: TH reads LockType attribute from DUT"
      PICS: DRLK.S.A0001
      command: "readAttribute"
      attribute: "LockType"
      response:
          saveAs: LockTypeValue
          constraints:
              type: enum8
              minValue: 0
              maxValue: 11

    - label: "Step 2b: TH writes LockType attribute as 10"
      PICS: DRLK.S.A0001
      command: "writeAttribute"
      attribute: "LockType"
      arguments:
          value: 10
      response:
          error: UNSUPPORTED_WRITE

    - label: "Step 2c: TH reads LockType attribute from DUT"
      PICS: DRLK.S.A0001
      command: "readAttribute"
      attribute: "LockType"
      response:
          value: LockTypeValue

    - label: "Step 3a: TH reads ActuatorEnabled attribute from DUT"
      PICS: DRLK.S.A0002
      command: "readAttribute"
      attribute: "ActuatorEnabled"
      response:
          saveAs: ActuatorEnabledValue
          constraints:
              type: boolean
              minValue: 0
              maxValue: 1

    - label: "Step 3b: TH writes ActuatorEnabled attribute as 0"
      PICS: DRLK.S.A0002
      command: "writeAttribute"
      attribute: "ActuatorEnabled"
      arguments:
          value: 0
      response:
          error: UNSUPPORTED_WRITE

    - label: "Step 3c: TH reads ActuatorEnabled attribute from DUT"
      PICS: DRLK.S.A0002
      command: "readAttribute"
      attribute: "ActuatorEnabled"
      response:
          value: ActuatorEnabledValue

    - label: "Step 4a: TH reads DoorState attribute from DUT"
      PICS: DRLK.S.F05 && DRLK.S.A0003
      command: "readAttribute"
      attribute: "DoorState"
      response:
          saveAs: DoorStateValue
          constraints:
              type: enum8
              minValue: 0
              maxValue: 5

    - label: "Step 4b: TH writes DoorState attribute as 1"
      PICS: DRLK.S.F05 && DRLK.S.A0003
      command: "writeAttribute"
      attribute: "DoorState"
      arguments:
          value: 1
      response:
          error: UNSUPPORTED_WRITE

    - label: "Step 4c: TH reads DoorState attribute from DUT"
      PICS: DRLK.S.F05 && DRLK.S.A0003
      command: "readAttribute"
      attribute: "DoorState"
      response:
          value: DoorStateValue

    - label: "Step 5a: TH reads DoorOpenEvents attribute from DUT"
      PICS: DRLK.S.F05 && DRLK.S.A0004
      command: "readAttribute"
      attribute: "DoorOpenEvents"
      response:
          constraints:
              type: int32u
              minValue: 0
              maxValue: 4294967294

    - label: "Step 5b: TH writes DoorOpenEvents attribute as 0"
      PICS: DRLK.S.A0004
      command: "writeAttribute"
      attribute: "DoorOpenEvents"
      arguments:
          value: 0

    #- label: "Step 5c: TH reads DoorOpenEvents attribute from DUT"
    #  PICS: DRLK.S.A0004.Write
    #  command: "readAttribute"
    #  attribute: "DoorOpenEvents"
    #  response:
    #      value: 10

    #Test plan issue: https://github.com/CHIP-Specifications/chip-test-plans/issues/2863
    - label: "Step 5c: TH reads DoorOpenEvents attribute from DUT"
      PICS: DRLK.S.A0004 && PICS_SKIP_SAMPLE_APP
      verification: |
          This is an Optional attribute, so its not compulsory to get the expected outcome

          ./chip-tool doorlock read door-open-events 1 1

          Via the TH (chip-tool), verify that the DoorOpenEvents attribute value as 10.

          [1654675019.286903][3337:3342] CHIP:DMG:                                        status = 0x86 (UNSUPPORTED_ATTRIBUTE),
          [1654675019.286939][3337:3342] CHIP:DMG:                                },
          [1654675019.286974][3337:3342] CHIP:DMG:
          [1654675019.287003][3337:3342] CHIP:DMG:                        },
          [1654675019.287039][3337:3342] CHIP:DMG:
          [1654675019.287067][3337:3342] CHIP:DMG:                },
          [1654675019.287100][3337:3342] CHIP:DMG:
          [1654675019.287125][3337:3342] CHIP:DMG:        ],
          [1654675019.287156][3337:3342] CHIP:DMG:
          [1654675019.287182][3337:3342] CHIP:DMG:        SuppressResponse = true,
          [1654675019.287209][3337:3342] CHIP:DMG:        InteractionModelRevision = 1
      cluster: "LogCommands"
      command: "UserPrompt"
      arguments:
          values:
              - name: "message"
                value: "Enter 'y' after success"
              - name: "expectedValue"
                value: "y"

    - label: "Step 6a: TH reads DoorClosedEvents attribute from DUT"
      PICS: DRLK.S.F05 && DRLK.S.A0005
      command: "readAttribute"
      attribute: "DoorClosedEvents"
      response:
          constraints:
              type: int32u
              minValue: 0
              maxValue: 4294967294

    - label: "Step 6b: TH writes DoorClosedEvents attribute as 0"
      PICS: DRLK.S.A0005
      command: "writeAttribute"
      attribute: "DoorClosedEvents"
      arguments:
          value: 0

    #- label: "Step 6c: TH reads DoorClosedEvents attribute from DUT"
    #  PICS: DRLK.S.A0005.Write
    #  command: "readAttribute"
    #  attribute: "DoorClosedEvents"
    #  response:
    #      value: 11

    #Test plan issue: https://github.com/CHIP-Specifications/chip-test-plans/issues/2863
    - label: "Step 6c: TH reads DoorOpenEvents attribute from DUT"
      PICS: DRLK.S.A0005 && PICS_SKIP_SAMPLE_APP
      verification: |
          This is an Optional attribute, so its not compulsory to get the expected outcome

          ./chip-tool doorlock read door-closed-events 1 1

          Via the TH (chip-tool), verify that the DoorClosedEvents attribute value as 11.

          [1654675103.637778][3346:3351] CHIP:DMG:                                StatusIB =
          [1654675103.637816][3346:3351] CHIP:DMG:                                {
          [1654675103.637853][3346:3351] CHIP:DMG:                                        status = 0x86 (UNSUPPORTED_ATTRIBUTE),
          [1654675103.637886][3346:3351] CHIP:DMG:                                },
          [1654675103.637923][3346:3351] CHIP:DMG:
          [1654675103.637956][3346:3351] CHIP:DMG:                        },
          [1654675103.637994][3346:3351] CHIP:DMG:
          [1654675103.638021][3346:3351] CHIP:DMG:                },
          [1654675103.638054][3346:3351] CHIP:DMG:
          [1654675103.638078][3346:3351] CHIP:DMG:        ],
          [1654675103.638109][3346:3351] CHIP:DMG:
          [1654675103.638133][3346:3351] CHIP:DMG:        SuppressResponse = true,
          [1654675103.638159][3346:3351] CHIP:DMG:        InteractionModelRevision = 1
      cluster: "LogCommands"
      command: "UserPrompt"
      arguments:
          values:
              - name: "message"
                value: "Enter 'y' after success"
              - name: "expectedValue"
                value: "y"

    - label: "Step 7a: TH reads OpenPeriod attribute from DUT"
      PICS: DRLK.S.F05 && DRLK.S.A0006
      command: "readAttribute"
      attribute: "OpenPeriod"
      response:
          constraints:
              type: int16u
              minValue: 0
              maxValue: 65534

    - label: "Step 7b: TH writes OpenPeriod attribute as 2 minutes"
      PICS: DRLK.S.A0006
      command: "writeAttribute"
      attribute: "OpenPeriod"
      arguments:
          value: 2

    - label: "Step 7c: TH reads OpenPeriod attribute from DUT"
      PICS: DRLK.S.A0006
      command: "readAttribute"
      attribute: "OpenPeriod"
      response:
          value: 2

    - label: "Step 8a: TH reads NumberOfTotal UsersSupported attribute from DUT"
      PICS: DRLK.S.F08 && DRLK.S.A0011
      command: "readAttribute"
      attribute: "NumberOfTotalUsersSupported"
      response:
          saveAs: NumberOfTotalUsersSupportedValue
          constraints:
              type: int16u
              minValue: 0
              maxValue: 65534

    - label: "Step 8b: TH writes NumberOfTotal UsersSupported attribute as 20"
      PICS: DRLK.S.F08 && DRLK.S.A0011
      command: "writeAttribute"
      attribute: "NumberOfTotalUsersSupported"
      arguments:
          value: 20
      response:
          error: UNSUPPORTED_WRITE

    - label: "Step 8c: TH reads NumberOfTotal UsersSupported attribute from DUT"
      PICS: DRLK.S.F08 && DRLK.S.A0011
      command: "readAttribute"
      attribute: "NumberOfTotalUsersSupported"
      response:
          value: NumberOfTotalUsersSupportedValue

    - label: "Step 9a: TH reads NumberOfPINUsersSupported attribute from DUT"
      PICS: DRLK.S.F00 && DRLK.S.A0012
      command: "readAttribute"
      attribute: "NumberOfPINUsersSupported"
      response:
          saveAs: NumberOfPINUsersSupportedValue
          constraints:
              type: int16u
              minValue: 0
              maxValue: 65534

    - label: "Step 9b: TH writes NumberOfPINUsersSupported attribute as 25"
      PICS: DRLK.S.F00 && DRLK.S.A0012
      command: "writeAttribute"
      attribute: "NumberOfPINUsersSupported"
      arguments:
          value: 25
      response:
          error: UNSUPPORTED_WRITE

    - label: "Step 9c: TH reads NumberOfPINUsersSupported attribute from DUT"
      PICS: DRLK.S.F00 && DRLK.S.A0012
      command: "readAttribute"
      attribute: "NumberOfPINUsersSupported"
      response:
          value: NumberOfPINUsersSupportedValue

    - label: "Step 10a: TH reads NumberOfRFID UsersSupported attribute from DUT"
      PICS: DRLK.S.F01 && DRLK.S.A0013
      command: "readAttribute"
      attribute: "NumberOfRFIDUsersSupported"
      response:
          saveAs: NumberOfRFIDUsersSupportedValue
          constraints:
              type: int16u
              minValue: 0
              maxValue: 65534

    - label: "Step 10b: TH writes NumberOfRFID UsersSupported attribute as 30"
      PICS: DRLK.S.F01 && DRLK.S.A0013
      command: "writeAttribute"
      attribute: "NumberOfRFIDUsersSupported"
      arguments:
          value: 30
      response:
          error: UNSUPPORTED_WRITE

    - label: "Step 10c: TH reads NumberOfRFID UsersSupported attribute from DUT"
      PICS: DRLK.S.F01 && DRLK.S.A0013
      command: "readAttribute"
      attribute: "NumberOfRFIDUsersSupported"
      response:
          value: NumberOfRFIDUsersSupportedValue

    - label:
          "Step 11a: TH reads NumberOfWeekDays SchedulesSupporterUser attribute
          from DUT"
      PICS: DRLK.S.F04 && DRLK.S.A0014
      command: "readAttribute"
      attribute: "NumberOfWeekDaySchedulesSupportedPerUser"
      response:
          saveAs: NumberOfWeekDaysSchedulesSupporterUserValue
          constraints:
              type: int8u
              minValue: 0
              maxValue: 253

    - label:
          "Step 11b: TH writes NumberOfWeekDaySchedules SupportedPerUser
          attribute as 31"
      PICS: DRLK.S.F04 && DRLK.S.A0014
      command: "writeAttribute"
      attribute: "NumberOfWeekDaySchedulesSupportedPerUser"
      arguments:
          value: 31
      response:
          error: UNSUPPORTED_WRITE

    - label:
          "Step 11c: TH reads NumberOfWeekDaySchedules SupportedPerUser
          attribute from DUT"
      PICS: DRLK.S.F04 && DRLK.S.A0014
      command: "readAttribute"
      attribute: "NumberOfWeekDaySchedulesSupportedPerUser"
      response:
          value: NumberOfWeekDaysSchedulesSupporterUserValue

    - label:
          "Step 12a: TH reads NumberOfYearDay SchedulesSupportedPeruser
          attribute from DUT"
      PICS: DRLK.S.F0a && DRLK.S.A0015
      command: "readAttribute"
      attribute: "NumberOfYearDaySchedulesSupportedPerUser"
      response:
          saveAs: NumberOfYearDaySchedulesSupportedPeruserValue
          constraints:
              type: int8u
              minValue: 0
              maxValue: 253

    - label:
          "Step 12b: TH writes NumberOfYearDay SchedulesSupportedPerUser
          attribute as 35"
      PICS: DRLK.S.F0a && DRLK.S.A0015
      command: "writeAttribute"
      attribute: "NumberOfYearDaySchedulesSupportedPerUser"
      arguments:
          value: 35
      response:
          error: UNSUPPORTED_WRITE

    - label:
          "Step 12c: TH reads NumberOfYearDay SchedulesSupportedPerUser
          attribute from DUT"
      PICS: DRLK.S.F0a && DRLK.S.A0015
      command: "readAttribute"
      attribute: "NumberOfYearDaySchedulesSupportedPerUser"
      response:
          value: NumberOfYearDaySchedulesSupportedPeruserValue

    - label:
          "Step 13a: TH reads NumberOfHoliDay SchedulesSupported attribute from
          DUT"
      PICS: DRLK.S.F0b && DRLK.S.A0016
      command: "readAttribute"
      attribute: "NumberOfHolidaySchedulesSupported"
      response:
          saveAs: NumberOfHoliDaySchedulesSupportedValue
          constraints:
              type: int8u
              minValue: 0
              maxValue: 253

    - label:
          "Step 13b: TH writes NumberOfHoliday SchedulesSupported attribute as
          36"
      PICS: DRLK.S.F0b && DRLK.S.A0016
      command: "writeAttribute"
      attribute: "NumberOfHolidaySchedulesSupported"
      arguments:
          value: 36
      response:
          error: UNSUPPORTED_WRITE

    - label:
          "Step 13c: TH reads NumberOfHoliday SchedulesSupported attribute from
          DUT"
      PICS: DRLK.S.F0b && DRLK.S.A0016
      command: "readAttribute"
      attribute: "NumberOfHolidaySchedulesSupported"
      response:
          value: NumberOfHoliDaySchedulesSupportedValue

    - label: "Step 14a: TH reads MaxPINCodeLength attribute from DUT"
      PICS: DRLK.S.F00 && DRLK.S.A0017
      command: "readAttribute"
      attribute: "MaxPINCodeLength"
      response:
          saveAs: MaxPINCodeLengthValue
          constraints:
              type: int8u
              minValue: 0
              maxValue: 255

    - label: "Step 14b: TH writes MaxPINCodeLength attribute as 85"
      PICS: DRLK.S.F00 && DRLK.S.A0017
      command: "writeAttribute"
      attribute: "MaxPINCodeLength"
      arguments:
          value: 85
      response:
          error: UNSUPPORTED_WRITE

    - label: "Step 14c: TH reads MaxPINCodeLength attribute from DUT"
      PICS: DRLK.S.F00 && DRLK.S.A0017
      command: "readAttribute"
      attribute: "MaxPINCodeLength"
      response:
          value: MaxPINCodeLengthValue

    - label: "Step 15a: TH reads MinPINCodeLength attribute from DUT"
      PICS: DRLK.S.F00 && DRLK.S.A0018
      command: "readAttribute"
      attribute: "MinPINCodeLength"
      response:
          saveAs: MinPINCodeLengthValue
          constraints:
              type: int8u
              minValue: 0
              maxValue: 255

    - label: "Step 15b: TH writes MinPINCodeLength attribute as 63"
      PICS: DRLK.S.F00 && DRLK.S.A0018
      command: "writeAttribute"
      attribute: "MinPINCodeLength"
      arguments:
          value: 63
      response:
          error: UNSUPPORTED_WRITE

    - label: "Step 15c: TH reads MinPINCodeLength attribute from DUT"
      PICS: DRLK.S.F00 && DRLK.S.A0018
      command: "readAttribute"
      attribute: "MinPINCodeLength"
      response:
          value: MinPINCodeLengthValue

    - label: "Step 16a: TH reads MaxRFIDCodeLength attribute from DUT"
      PICS: DRLK.S.F01 && DRLK.S.A0019
      command: "readAttribute"
      attribute: "MaxRFIDCodeLength"
      response:
          saveAs: MaxRFIDCodeLengthValue
          constraints:
              type: int8u
              minValue: 0
              maxValue: 255

    - label: "Step 16b: TH writes MaxRFIDCodeLength attribute as 46"
      PICS: DRLK.S.F01 && DRLK.S.A0019
      command: "writeAttribute"
      attribute: "MaxRFIDCodeLength"
      arguments:
          value: 46
      response:
          error: UNSUPPORTED_WRITE

    - label: "Step 16c: TH reads MaxRFIDCodeLength attribute from DUT"
      PICS: DRLK.S.F01 && DRLK.S.A0019
      command: "readAttribute"
      attribute: "MaxRFIDCodeLength"
      response:
          value: MaxRFIDCodeLengthValue

    - label: "Step 17a: TH reads MinRFIDCodeLength attribute from DUT"
      PICS: DRLK.S.F01 && DRLK.S.A001a
      command: "readAttribute"
      attribute: "MinRFIDCodeLength"
      response:
          saveAs: MinRFIDCodeLengthValue
          constraints:
              type: int16u
              minValue: 0
              maxValue: 255

    - label: "Step 17b: TH writes MinRFIDCodeLength attribute as 17"
      PICS: DRLK.S.F01 && DRLK.S.A001a
      command: "writeAttribute"
      attribute: "MinRFIDCodeLength"
      arguments:
          value: 17
      response:
          error: UNSUPPORTED_WRITE

    - label: "Step 17c: TH reads MinRFIDCodeLength attribute from DUT"
      PICS: DRLK.S.F01 && DRLK.S.A001a
      command: "readAttribute"
      attribute: "MinRFIDCodeLength"
      response:
          value: MinRFIDCodeLengthValue

    - label: "Step 18a: TH reads Credential RulesSupport attribute from DUT"
      PICS: DRLK.S.F08 && DRLK.S.A001b
      command: "readAttribute"
      attribute: "CredentialRulesSupport"
      response:
          saveAs: CredentialRulesSupportValue
          constraints:
              type: bitmap8
              minValue: 0
              maxValue: 2

    - label:
          "Step 18b: TH writes Credential RulesSupport attribute as bit 0 is set
          to 1"
      PICS: DRLK.S.F08 && DRLK.S.A001b
      command: "writeAttribute"
      attribute: "CredentialRulesSupport"
      arguments:
          value: 1
      response:
          error: UNSUPPORTED_WRITE

    - label: "Step 18c: TH reads Credential RulesSupport attribute from DUT"
      PICS: DRLK.S.F08 && DRLK.S.A001b
      command: "readAttribute"
      attribute: "CredentialRulesSupport"
      response:
          value: CredentialRulesSupportValue

    - label:
          "Step 19a: TH reads Language attribute from DUT TH saves the values as
          Current_Language Code"
      PICS: DRLK.S.A0021
      command: "readAttribute"
      attribute: "Language"
      response:
          saveAs: Current_Language_Code
          constraints:
              type: char_string
              maxLength: 3

    - label: "Step 19b: TH writes Language attribute as fr"
      PICS: DRLK.S.A0021 && DRLK.S.M.LanguageAttributeWritable
      command: "writeAttribute"
      attribute: "Language"
      arguments:
          value: "fr"

    - label: "Step 19b: TH writes Language attribute as fr"
      PICS: DRLK.S.A0021 && !DRLK.S.M.LanguageAttributeWritable
      command: "writeAttribute"
      attribute: "Language"
      arguments:
          value: "fr"
      response:
          error: UNSUPPORTED_WRITE

    - label: "Step 19c: TH reads Language attribute from DUT"
      PICS: DRLK.S.A0021 && DRLK.S.M.LanguageAttributeWritable
      command: "readAttribute"
      attribute: "Language"
      response:
          value: "fr"

    - label: "Step 19c: TH reads Language attribute from DUT"
      PICS: DRLK.S.A0021 && !DRLK.S.M.LanguageAttributeWritable
      command: "readAttribute"
      attribute: "Language"
      response:
          value: Current_Language_Code

    - label:
          "Step 20a: TH reads LEDSettings attribute from DUT TH saves the values
          as Current_LEDSettings value"
      PICS: DRLK.S.A0022
      command: "readAttribute"
      attribute: "LEDSettings"
      response:
          saveAs: Current_LEDSettings
          constraints:
              type: int8u
              minValue: 0
              maxValue: 2

    - label: "Step 20b: TH writes LEDSettings attribute as 2"
      PICS: DRLK.S.M.LEDSettingsAttributeWritable && DRLK.S.A0022
      command: "writeAttribute"
      attribute: "LEDSettings"
      arguments:
          value: 2

    - label: "Step 20b: TH writes LEDSettings attribute as 2"
      PICS: " !DRLK.S.M.LEDSettingsAttributeWritable && DRLK.S.A0022 "
      command: "writeAttribute"
      attribute: "LEDSettings"
      arguments:
          value: 2
      response:
          error: UNSUPPORTED_WRITE

    - label: "Step 20c: TH reads LEDSettings attribute from DUT"
      PICS: DRLK.S.M.LEDSettingsAttributeWritable && DRLK.S.A0022
      command: "readAttribute"
      attribute: "LEDSettings"
      response:
          value: 2

    - label: "Step 20c: TH reads LEDSettings attribute from DUT"
      PICS: " !DRLK.S.M.LEDSettingsAttributeWritable && DRLK.S.A0022 "
      command: "readAttribute"
      attribute: "LEDSettings"
      response:
          value: Current_LEDSettings

    - label:
          "Step 21a: TH reads AutoRelockTime attribute from DUT TH saves the
          values as Current_AutoRelockTime"
      PICS: DRLK.S.A0023
      command: "readAttribute"
      attribute: "AutoRelockTime"
      response:
          saveAs: Current_AutoRelockTime
          constraints:
              type: int32u
              minValue: 0
              maxValue: 4294967294

    - label: "Step 21b: TH writes AutoRelockTime attribute as 180 seconds"
      PICS: DRLK.S.M.AutoRelockTimeAttributeWritable && DRLK.S.A0023
      command: "writeAttribute"
      attribute: "AutoRelockTime"
      arguments:
          value: 180

    - label: "Step 21b: TH writes AutoRelockTime attribute as 180 seconds"
      PICS: " !DRLK.S.M.AutoRelockTimeAttributeWritable && DRLK.S.A0023 "
      command: "writeAttribute"
      attribute: "AutoRelockTime"
      arguments:
          value: 180
      response:
          error: UNSUPPORTED_WRITE

    - label: "Step 21c: TH reads AutoRelockTime attribute from DUT"
      PICS: DRLK.S.M.AutoRelockTimeAttributeWritable && DRLK.S.A0023
      command: "readAttribute"
      attribute: "AutoRelockTime"
      response:
          value: 180

    - label: "Step 21c: TH reads AutoRelockTime attribute from DUT"
      PICS: " !DRLK.S.M.AutoRelockTimeAttributeWritable && DRLK.S.A0023 "
      command: "readAttribute"
      attribute: "AutoRelockTime"
      response:
          value: Current_AutoRelockTime

    - label:
          "Step 22a: TH reads SoundVolume attribute from DUT TH saves the values
          as Current_SoundVolume value"
      PICS: DRLK.S.A0024
      command: "readAttribute"
      attribute: "SoundVolume"
      response:
          saveAs: Current_SoundVolume
          constraints:
              type: int16u
              minValue: 0
              maxValue: 3

    - label: "Step 22b: TH writes SoundVolume attribute as 3"
      PICS: DRLK.S.M.SoundVolumeAttributeWritable && DRLK.S.A0024
      command: "writeAttribute"
      attribute: "SoundVolume"
      arguments:
          value: 3

    - label: "Step 22b: TH writes SoundVolume attribute as 3"
      PICS: " !DRLK.S.M.SoundVolumeAttributeWritable && DRLK.S.A0024 "
      command: "writeAttribute"
      attribute: "SoundVolume"
      arguments:
          value: 3
      response:
          error: UNSUPPORTED_WRITE

    - label: "Step 22c: TH reads SoundVolume attribute from DUT"
      PICS: DRLK.S.M.SoundVolumeAttributeWritable && DRLK.S.A0024
      command: "readAttribute"
      attribute: "SoundVolume"
      response:
          value: 3

    - label: "Step 22c: TH reads SoundVolume attribute from DUT"
      PICS: " !DRLK.S.M.SoundVolumeAttributeWritable && DRLK.S.A0024 "
      command: "readAttribute"
      attribute: "SoundVolume"
      response:
          value: Current_SoundVolume

    - label: "Step 23a: TH reads Supported OperatingModes attribute from DUT"
      PICS: DRLK.S.A0026
      command: "readAttribute"
      attribute: "SupportedOperatingModes"
      response:
          saveAs: Current_Supported
          constraints:
              type: enum16
              anyOf:
                  [
                      0xFFF6,
                      0xFFF4,
                      0xFFF2,
                      0xFFF0,
                      0xFFE6,
                      0xFFE4,
                      0xFFE2,
                      0xFFE0,
                  ]

    - label:
          "Step 23b: TH writes Supported OperatingModes attribute as bit 0 is
          set to 0"
      PICS: DRLK.S.A0026
      command: "writeAttribute"
      attribute: "SupportedOperatingModes"
      arguments:
          value: 0
      response:
          error: UNSUPPORTED_WRITE

    - label: "Step 23c: TH reads Supported OperatingModes attribute from DUT"
      PICS: DRLK.S.A0026
      command: "readAttribute"
      attribute: "SupportedOperatingModes"
      response:
          value: Current_Supported

    - label:
          "Step 24a: TH reads OperatingMode attribute from DUT TH saves the
          values as Current_OperatingMode value"
      PICS: DRLK.S.A0025
      command: "readAttribute"
      attribute: "OperatingMode"
      response:
          saveAs: Current_OperatingMode
          constraints:
              type: enum8
              minValue: 0
              maxValue: 4

    - label:
          "Step 24b: TH writes OperatingMode attribute to a value as Normal and
          the new value is present in SupportedOperatingModes"
      PICS: DRLK.S.M.OperatingModeAttributeWritable && DRLK.S.A0025
      command: "writeAttribute"
      attribute: "OperatingMode"
      arguments:
          value: 0

    - label:
          "Step 24b: TH writes OperatingMode attribute to a value as Normal and
          the new value is present in SupportedOperatingModes"
      PICS: " !DRLK.S.M.OperatingModeAttributeWritable && DRLK.S.A0025 "
      command: "writeAttribute"
      attribute: "OperatingMode"
      arguments:
          value: 0
      response:
          error: UNSUPPORTED_WRITE

    - label:
          "Step 24c: TH writes OperatingMode attribute to a value as
          NoRemoteLockUnlock and the new value is present in Supported
          OperatingModes"
      PICS: DRLK.S.M.OperatingModeAttributeWritable && DRLK.S.A0025
      command: "writeAttribute"
      attribute: "OperatingMode"
      arguments:
          value: 3

    - label:
          "Step 24c: TH writes OperatingMode attribute to a value as
          NoRemoteLockUnlock and the new value is present in Supported
          OperatingModes"
      PICS: " !DRLK.S.M.OperatingModeAttributeWritable && DRLK.S.A0025 "
      command: "writeAttribute"
      attribute: "OperatingMode"
      arguments:
          value: 3
      response:
          error: UNSUPPORTED_WRITE

    - label: "Step 24d: TH reads OperatingMode attribute from DUT"
      PICS: DRLK.S.M.OperatingModeAttributeWritable && DRLK.S.A0025
      command: "readAttribute"
      attribute: "OperatingMode"
      response:
          constraints:
              anyOf: [0, 3]

    - label: "Step 24d: TH reads OperatingMode attribute from DUT"
      PICS: " !DRLK.S.M.OperatingModeAttributeWritable && DRLK.S.A0025 "
      command: "readAttribute"
      attribute: "OperatingMode"
      response:
          value: Current_OperatingMode

    - label:
          "Step 25a: TH reads Default ConfigurationRegister attribute from DUT"
      PICS: DRLK.S.A0027
      command: "readAttribute"
      attribute: "DefaultConfigurationRegister"
      response:
          saveAs: ConfigurationRegisterValue
          constraints:
              type: bitmap16
              minValue: 0
              maxValue: 7

    - label:
          "Step 25b: TH writes Default ConfigurationRegister attribute as bit 0
          is set to 1"
      PICS: DRLK.S.A0027
      command: "writeAttribute"
      attribute: "DefaultConfigurationRegister"
      arguments:
          value: 1
      response:
          error: UNSUPPORTED_WRITE

    - label:
          "Step 25c: TH reads Default ConfigurationRegister attribute from DUT"
      PICS: DRLK.S.A0027
      command: "readAttribute"
      attribute: "DefaultConfigurationRegister"
      response:
          value: ConfigurationRegisterValue

    - label:
          "Step 26a: TH reads EnableLocalProgramming attribute from DUT TH saves
          the values as Current_EnableLocal Programming value"
      PICS: DRLK.S.A0028
      command: "readAttribute"
      attribute: "EnableLocalProgramming"
      response:
          saveAs: Current_EnableLocal_Programming
          constraints:
              type: boolean

    - label: "Step 26b: TH writes EnableLocalProgramming attribute as false"
      PICS: DRLK.S.M.EnableLocalProgrammingAttributeWritable && DRLK.S.A0028
      command: "writeAttribute"
      attribute: "EnableLocalProgramming"
      arguments:
          value: 0

    - label: "Step 26b: TH writes EnableLocalProgramming attribute as false"
      PICS:
          " !DRLK.S.M.EnableLocalProgrammingAttributeWritable && DRLK.S.A0028 "
      command: "writeAttribute"
      attribute: "EnableLocalProgramming"
      arguments:
          value: 0
      response:
          error: UNSUPPORTED_WRITE

    - label: "Step 26c: TH reads EnableLocalProgramming attribute from DUT"
      PICS: DRLK.S.M.EnableLocalProgrammingAttributeWritable && DRLK.S.A0028
      command: "readAttribute"
      attribute: "EnableLocalProgramming"
      response:
          value: 0

    - label: "Step 26c: TH reads EnableLocalProgramming attribute from DUT"
      PICS:
          " !DRLK.S.M.EnableLocalProgrammingAttributeWritable && DRLK.S.A0028 "
      command: "readAttribute"
      attribute: "EnableLocalProgramming"
      response:
          value: Current_EnableLocal_Programming

    - label: "Step 27a: TH reads EnableOneTouchLocking attribute from DUT"
      PICS: DRLK.S.A0029
      command: "readAttribute"
      attribute: "EnableOneTouchLocking"
      response:
          constraints:
              type: boolean

    - label: "Step 27b: TH writes EnableOneTouchLocking attribute as true"
      PICS: DRLK.S.A0029
      command: "writeAttribute"
      attribute: "EnableOneTouchLocking"
      arguments:
          value: 1

    - label: "Step 27c: TH reads EnableOneTouchLocking attribute from DUT"
      PICS: DRLK.S.A0029
      command: "readAttribute"
      attribute: "EnableOneTouchLocking"
      response:
          value: 1

    - label: "Step 28a: TH reads EnableInside StatusLED attribute from DUT"
      PICS: DRLK.S.A002a
      command: "readAttribute"
      attribute: "EnableInsideStatusLED"
      response:
          constraints:
              type: boolean

    - label: "Step 28b: TH writes EnableInsideStatusLED attribute as true"
      PICS: DRLK.S.A002a
      command: "writeAttribute"
      attribute: "EnableInsideStatusLED"
      arguments:
          value: 1

    - label: "Step 28c: TH reads EnableInsideStatusLED attribute from DUT"
      PICS: DRLK.S.A002a
      command: "readAttribute"
      attribute: "EnableInsideStatusLED"
      response:
          value: 1

    - label: "Step 29a: TH reads EnablePrivacyModeButton attribute from DUT"
      PICS: DRLK.S.A002b
      command: "readAttribute"
      attribute: "EnablePrivacyModeButton"
      response:
          constraints:
              type: boolean

    - label: "Step 29b: TH writes EnablePrivacy ModeButton attribute as true"
      PICS: DRLK.S.A002b
      command: "writeAttribute"
      attribute: "EnablePrivacyModeButton"
      arguments:
          value: 1

    - label: "Step 29c: TH reads EnablePrivacyModeButton attribute from DUT"
      PICS: DRLK.S.A002b
      command: "readAttribute"
      attribute: "EnablePrivacyModeButton"
      response:
          value: 1

    - label:
          "Step 30a: TH reads LocalProgrammingFeatures attribute from DUT TH
          saves the values as Current_LocalProgramming Features value"
      PICS: DRLK.S.A002c
      command: "readAttribute"
      attribute: "LocalProgrammingFeatures"
      response:
          saveAs: Current_LocalProgramming_Features
          constraints:
              type: bitmap8
              minValue: 0
              maxValue: 3

    - label:
          "Step 30b: TH reads LocalProgrammingFeatures attribute from DUT.
          DRLK.S.A0028(EnableLocalProgramming) is True."
      PICS: DRLK.S.A002c && DRLK.S.A0028
      command: "readAttribute"
      attribute: "LocalProgrammingFeatures"
      response:
          constraints:
              type: bitmap8
              hasMasksSet: [0x1, 0x2, 0x4, 0x8]

    - label:
          "Step 30b: TH reads LocalProgrammingFeatures attribute from DUT.
          DRLK.S.A0028(EnableLocalProgramming) is False."
      PICS: DRLK.S.A002c && !DRLK.S.A0028
      command: "readAttribute"
      attribute: "LocalProgrammingFeatures"
      response:
          constraints:
              type: bitmap8
              hasMasksClear: [0x1, 0x2, 0x4, 0x8]

    - label:
          "Step 30c: TH writes to LocalProgrammingFeatures to disable all the
          features (Change all bits to 0)"
      PICS: DRLK.S.M.LocalProgrammingFeaturesAttributeWritable && DRLK.S.A0028
      command: "writeAttribute"
      attribute: "LocalProgrammingFeatures"
      arguments:
          value: 0

    - label:
          "Step 30c: TH reads LocalProgrammingFeatures attribute from DUT.
          DRLK.S.A0028(EnableLocalProgramming) is False."
      PICS: DRLK.S.M.EnableLocalProgrammingAttributeWritable && DRLK.S.A0028
      command: "readAttribute"
      attribute: "LocalProgrammingFeatures"
      response:
          constraints:
              type: bitmap8
              hasMasksClear: [0x1, 0x2, 0x4, 0x8]

    - label: "Step 30d: TH sets the EnableLocalProgramming attribute to False"
      PICS: DRLK.S.M.EnableLocalProgrammingAttributeWritable && DRLK.S.A002c
      command: "writeAttribute"
      attribute: "EnableLocalProgramming"
      arguments:
          value: false

    - label:
          "Step 30d: Verify that all the 4 bits in the LocalProgrammingFeatures
          is set to 0."
      PICS: DRLK.S.M.EnableLocalProgrammingAttributeWritable && DRLK.S.A002c
      command: "readAttribute"
      attribute: "LocalProgrammingFeatures"
      response:
          constraints:
              type: bitmap8
              hasMasksClear: [0x1, 0x2, 0x4, 0x8]

    - label: "Step 30e: TH sets the EnableLocalProgramming attribute to True"
      PICS: DRLK.S.M.EnableLocalProgrammingAttributeWritable && DRLK.S.A002c
      command: "writeAttribute"
      attribute: "EnableLocalProgramming"
      arguments:
          value: true

    - label:
          "Step 30e: Verify that all the 4 bits in the LocalProgrammingFeatures
          is set to 1."
      PICS: DRLK.S.M.EnableLocalProgrammingAttributeWritable && DRLK.S.A002c
      command: "readAttribute"
      attribute: "LocalProgrammingFeatures"
      response:
          constraints:
              type: bitmap8
              hasMasksSet: [0x1, 0x2, 0x4, 0x8]

    - label:
          "Step 30f: TH sends a write message to change any one of the bits of
          the LocalProgrammingFeatures."
      PICS: DRLK.S.A002c && DRLK.S.M.LocalProgrammingFeaturesAttributeWritable
      command: "writeAttribute"
      attribute: "LocalProgrammingFeatures"
      arguments:
          value: 2

    - label:
          "Step 30f: Verify that the correct bit has been changed by doing a
          Read on LocalProgrammingFeatures attribute.."
      PICS: DRLK.S.M.LocalProgrammingFeaturesAttributeWritable
      command: "readAttribute"
      attribute: "LocalProgrammingFeatures"
      response:
          constraints:
              type: bitmap8
              hasMasksSet: [0x2]

    - label:
          "Step 30g: TH sends a write message to change any one of the bits of
          the LocalProgrammingFeatures."
      PICS: DRLK.S.A002c
      command: "writeAttribute"
      attribute: "LocalProgrammingFeatures"
      arguments:
          value: 2
      response:
          error: UNSUPPORTED_WRITE

    - label:
          "Step 31a: TH reads WrongCodeEntry Limit attribute from DUT TH saves
          the values as Current_WrongCode EntryLimit value"
      PICS: ( DRLK.S.F00 || DRLK.S.F01 ) && DRLK.S.A0030
      command: "readAttribute"
      attribute: "WrongCodeEntryLimit"
      response:
          saveAs: Current_WrongCode_EntryLimit
          constraints:
              type: int8u
              minValue: 1
              maxValue: 255

    - label: "Step 31b: TH writes WrongCodeEntryLimit attribute as 8"
      PICS:
          " ( DRLK.S.F00 || DRLK.S.F01 ) && DRLK.S.A0030 &&
          DRLK.S.M.WrongCodeEntryLimitAttributeWritable "
      command: "writeAttribute"
      attribute: "WrongCodeEntryLimit"
      arguments:
          value: 8

    - label: "Step 31b: TH writes WrongCodeEntryLimit attribute as 8"
      PICS:
          " ( DRLK.S.F00 || DRLK.S.F01 ) && DRLK.S.A0030 &&
          !DRLK.S.M.WrongCodeEntryLimitAttributeWritable "
      command: "writeAttribute"
      attribute: "WrongCodeEntryLimit"
      arguments:
          value: 8
      response:
          error: UNSUPPORTED_WRITE

    - label: "Step 31c: TH reads WrongCode EntryLimit attribute"
      PICS:
          " ( DRLK.S.F00 || DRLK.S.F01 ) && DRLK.S.A0030 &&
          DRLK.S.M.WrongCodeEntryLimitAttributeWritable "
      command: "readAttribute"
      attribute: "WrongCodeEntryLimit"
      response:
          value: 8

    - label: "Step 31c: TH reads WrongCode EntryLimit attribute"
      PICS:
          " ( DRLK.S.F00 || DRLK.S.F01 ) && DRLK.S.A0030 &&
          !DRLK.S.M.WrongCodeEntryLimitAttributeWritable "
      command: "readAttribute"
      attribute: "WrongCodeEntryLimit"
      response:
          value: Current_WrongCode_EntryLimit

    - label: "Step 31b: TH writes WrongCodeEntryLimit attribute as 8"
      PICS:
          " ( DRLK.S.F00 || DRLK.S.F01 ) && DRLK.S.A0030 &&
          DRLK.S.M.WrongCodeEntryLimitAttributeWritable "
      command: "writeAttribute"
      attribute: "WrongCodeEntryLimit"
      arguments:
          value: 8

    - label: "Step 31b: TH writes WrongCodeEntryLimit attribute as 8"
      PICS:
          " ( DRLK.S.F00 || DRLK.S.F01 ) && DRLK.S.A0030 &&
          !DRLK.S.M.WrongCodeEntryLimitAttributeWritable "
      command: "writeAttribute"
      attribute: "WrongCodeEntryLimit"
      arguments:
          value: 8
      response:
          error: UNSUPPORTED_WRITE

    - label:
          "Step 32a: TH reads UserCodeTemporary DisableTime attribute from DUT
          TH saves the values as Current_UserCode TemporaryDisableTime"
      PICS: ( DRLK.S.F00 || DRLK.S.F01 ) && DRLK.S.A0031
      command: "readAttribute"
      attribute: "UserCodeTemporaryDisableTime"
      response:
          saveAs: Current_UserCode_TemporaryDisableTime
          constraints:
              type: int8u
              minValue: 1
              maxValue: 255

    - label: "Step 32b: TH writes UserCodeTemporaryDisableTime attribute as 120"
      PICS:
          " ( DRLK.S.F00 || DRLK.S.F01 ) && DRLK.S.A0031 &&
          DRLK.S.M.UserCodedTemporaryDisableTimeAttributeWritable "
      command: "writeAttribute"
      attribute: "UserCodeTemporaryDisableTime"
      arguments:
          value: 120

    - label: "Step 32b: TH writes UserCodeTemporaryDisableTime attribute as 120"
      PICS:
          " ( DRLK.S.F00 || DRLK.S.F01 ) && DRLK.S.A0031 &&
          !DRLK.S.M.UserCodedTemporaryDisableTimeAttributeWritable "
      command: "writeAttribute"
      attribute: "UserCodeTemporaryDisableTime"
      arguments:
          value: 120
      response:
          error: UNSUPPORTED_WRITE

    - label: "Step 32c: TH reads UserCodeTemporary DisableTime attribute"
      PICS:
          " ( DRLK.S.F00 || DRLK.S.F01 ) && DRLK.S.A0031 &&
          DRLK.S.M.UserCodedTemporaryDisableTimeAttributeWritable "
      command: "readAttribute"
      attribute: "UserCodeTemporaryDisableTime"
      response:
          value: 120

    - label: "Step 32c: TH reads UserCodeTemporary DisableTime attribute"
      PICS:
          " ( DRLK.S.F00 || DRLK.S.F01 ) && DRLK.S.A0031 &&
          !DRLK.S.M.UserCodedTemporaryDisableTimeAttributeWritable "
      command: "readAttribute"
      attribute: "UserCodeTemporaryDisableTime"
      response:
          value: Current_UserCode_TemporaryDisableTime

    - label:
          "Step 33a: TH reads RequirePINfor RemoteOperation attribute from DUT"
      PICS: DRLK.S.F07 && DRLK.S.F00 && DRLK.S.A0033
      command: "readAttribute"
      attribute: "RequirePINforRemoteOperation"
      response:
          saveAs: Current_RequirePINFor_RemoteOperation
          constraints:
              type: boolean

    - label:
          "Step 33b: TH writes RequirePINfor RemoteOperation attribute as true"
      PICS:
          DRLK.S.F07 && DRLK.S.F00 && DRLK.S.A0033 &&
          DRLK.S.M.RequirePINForRemoteOperationAttributeWritable
      command: "writeAttribute"
      attribute: "RequirePINforRemoteOperation"
      arguments:
          value: 1

    - label:
          "Step 33b: TH writes RequirePINfor RemoteOperation attribute as true"
      PICS:
          " DRLK.S.F07 && DRLK.S.F00 && DRLK.S.A0033 &&
          !DRLK.S.M.RequirePINForRemoteOperationAttributeWritable "
      command: "writeAttribute"
      attribute: "RequirePINforRemoteOperation"
      arguments:
          value: 1
      response:
          error: UNSUPPORTED_WRITE

    - label: "Step 33c: TH reads RequirePINfor RemoteOperation attribute"
      PICS:
          DRLK.S.F07 && DRLK.S.F00 && DRLK.S.A0033 &&
          DRLK.S.M.RequirePINForRemoteOperationAttributeWritable
      command: "readAttribute"
      attribute: "RequirePINforRemoteOperation"
      response:
          value: 1

    - label: "Step 33c: TH reads RequirePINfor RemoteOperation attribute"
      PICS:
          " DRLK.S.F07 && DRLK.S.F00 && DRLK.S.A0033 &&
          !DRLK.S.M.RequirePINForRemoteOperationAttributeWritable "
      command: "readAttribute"
      attribute: "RequirePINforRemoteOperation"
      response:
          value: Current_RequirePINFor_RemoteOperation

    - label:
          "Step 34a: TH reads ExpiringUserTimeOut attribute from DUT TH saves
          the values as Current_ExpiringUserTimeOut"
      PICS: DRLK.S.F08 && DRLK.S.A0035
      command: "readAttribute"
      attribute: "ExpiringUserTimeout"
      response:
          saveAs: Current_ExpiringUserTimeOut
          constraints:
              type: int16u
              minValue: 1
              maxValue: 2880

    - label: "Step 34b: TH writes ExpiringUserTimeout attribute as 10 minutes"
      PICS:
          DRLK.S.F08 && DRLK.S.A0035 &&
          DRLK.S.M.ExpiringUserTimeOutAttributeWritable
      command: "writeAttribute"
      attribute: "ExpiringUserTimeout"
      arguments:
          value: 10

    - label: "Step 34b: TH writes ExpiringUserTimeout attribute as 10 minutes"
      PICS:
          DRLK.S.F08 && !DRLK.S.M.ExpiringUserTimeOutAttributeWritable &&
          DRLK.S.A0035
      command: "writeAttribute"
      attribute: "ExpiringUserTimeout"
      arguments:
          value: 10
      response:
          error: UNSUPPORTED_WRITE

    - label: "Step 34c: TH reads ExpiringUserTimeout attribute"
      PICS:
          DRLK.S.F08 && DRLK.S.A0035 &&
          DRLK.S.M.ExpiringUserTimeOutAttributeWritable
      command: "readAttribute"
      attribute: "ExpiringUserTimeout"
      response:
          value: 10

    - label: "Step 34c: TH reads ExpiringUserTimeout attribute"
      PICS:
          " DRLK.S.F08 && DRLK.S.A0035 &&
          !DRLK.S.M.ExpiringUserTimeOutAttributeWritable "
      command: "readAttribute"
      attribute: "ExpiringUserTimeout"
      response:
          value: Current_ExpiringUserTimeOut

    - label:
          "Step 35a: TH reads NumberOfCredentials SupportedPerUser attribute
          from DUT"
      PICS: DRLK.S.F08 && DRLK.S.A001c
      command: "readAttribute"
      attribute: "NumberOfCredentialsSupportedPerUser"
      response:
          saveAs: NumberOfCredentialsSupportedPerUserValue
          constraints:
              type: int8u
              minValue: 0
              maxValue: 255

    - label:
          "Step 35b: TH writes NumberOfCredentials SupportedPerUser attribute as
          85"
      PICS: DRLK.S.F08 && DRLK.S.A001c
      command: "writeAttribute"
      attribute: "NumberOfCredentialsSupportedPerUser"
      arguments:
          value: 85
      response:
          error: UNSUPPORTED_WRITE

    - label:
          "Step 35c: TH reads NumberOfCredentials SupportedPerUser attribute
          from DUT"
      PICS: DRLK.S.F08 && DRLK.S.A001c
      command: "readAttribute"
      attribute: "NumberOfCredentialsSupportedPerUser"
      response:
          value: NumberOfCredentialsSupportedPerUserValue

    - label: "Step 36: TH sends ClearCredential Command to DUT"
      PICS: DRLK.S.F00 && DRLK.S.F08 && DRLK.S.C26.Rsp
      command: "ClearCredential"
      timedInteractionTimeoutMs: 1000
      arguments:
          values:
              - name: "Credential"
                value: { CredentialType: 1, CredentialIndex: 1 }

    - label:
          "Step 37: TH sends ClearUser Command to DUT with the UserIndex as 1"
      PICS: DRLK.S.F08 && DRLK.S.C1d.Rsp
      command: "ClearUser"
      timedInteractionTimeoutMs: 1000
      arguments:
          values:
              - name: "UserIndex"
                value: 1

    - label: "Step 38a: TH reads AliroReaderVerificationKey attribute from DUT"
      PICS: DRLK.S.F0d && DRLK.S.A0080
      command: "readAttribute"
      attribute: "AliroReaderVerificationKey"
      response:
          saveAs: verificationkey
          constraints:
              type: octet_string
              minLength: 65
              maxLength: 65

    - label:
          "Step 38b: TH writes AliroReaderVerificationKey attribute as an octstr
          value of length 65 which is different from verificationkey"
      PICS: DRLK.S.F0d && DRLK.S.A0080
      command: "writeAttribute"
      attribute: "AliroReaderVerificationKey"
      arguments:
          value: "047a4c992d753924cdf3779a3c84fec2debaa6f0b3084450878acc7ddcce7856ae57b1ebbe2561015103dd7474c2a183675378ec55f1e465ac3436bf3dd5ca54d4"
      response:
          error: UNSUPPORTED_WRITE

    - label: "Step 38c: TH reads AliroReaderVerificationKey attribute from DUT"

      PICS: DRLK.S.F0d && DRLK.S.A0080
      command: "readAttribute"
      attribute: "AliroReaderVerificationKey"
      response:
          value: verificationkey

    - label: "Step 39a: TH reads AliroReaderGroupIdentifier attribute from DUT"
      PICS: DRLK.S.F0d && DRLK.S.A0081
      command: "readAttribute"
      attribute: "AliroReaderGroupIdentifier"
      response:
          saveAs: aliroreadergrpidentifier
          constraints:
              type: octet_string
              minLength: 16
              maxLength: 16

    - label:
          "Step 39b: TH writes AliroReaderGroupIdentifier attribute as octstr
          value of length 16 which is different from aliroreadergrpidentifier"
      PICS: DRLK.S.F0d && DRLK.S.A0081
      command: "writeAttribute"
      attribute: "AliroReaderVerificationKey"
      arguments:
          value: "047a4c992d753924"
      response:
          error: UNSUPPORTED_WRITE

    - label: "Step 39c: TH reads AliroReaderGroupIdentifier attribute from DUT"
      PICS: DRLK.S.F0d && DRLK.S.A0081
      command: "readAttribute"
      attribute: "AliroReaderGroupIdentifier"
      response:
          value: aliroreadergrpidentifier
    - label:
          "Step 40a: TH reads AliroReaderGroupSubIdentifier attribute from DUT"
      PICS: DRLK.S.F0d && DRLK.S.A0082
      command: "readAttribute"
      attribute: "AliroReaderGroupSubIdentifier"
      response:
          saveAs: aliroreadergrpsubidentifier
          constraints:
              type: octet_string
              minLength: 16
              maxLength: 16

    - label:
          "Step 40b: TH writes AliroReaderGroupSubIdentifier attribute as octstr
          value of length 16 which is different from aliroreadergrpsubidentifier"
      PICS: DRLK.S.F0d && DRLK.S.A0082
      command: "writeAttribute"
      attribute: "AliroReaderGroupSubIdentifier"
      arguments:
          value: "047a4c992d75368"
      response:
          error: UNSUPPORTED_WRITE

    - label: "Step 40c: TH reads AliroReaderGroupIdentifier attribute from DUT"
      PICS: DRLK.S.F0d && DRLK.S.A0082
      command: "readAttribute"
      attribute: "AliroReaderGroupSubIdentifier"
      response:
          value: aliroreadergrpsubidentifier

    - label:
          "Step 41a: TH reads AliroExpeditedTransactionSupportedProtocolVersions
          attribute from DUT"
      PICS: DRLK.S.F0d && DRLK.S.A0083
      command: "readAttribute"
      attribute: "AliroExpeditedTransactionSupportedProtocolVersions"
      response:
          saveAs: aliroprotocolversion
          constraints:
              type: list
              maxLength: 16

    - label:
          "Step 41b: TH writes
          AliroExpeditedTransactionSupportedProtocolVersions attribute as list
          which is different from aliroprotocolversion"
      PICS: DRLK.S.F0d && DRLK.S.A0083
      command: "writeAttribute"
      attribute: "AliroExpeditedTransactionSupportedProtocolVersions"
      arguments:
          value: ["\x01", "\x02"]
      response:
          error: UNSUPPORTED_WRITE

    - label:
          "Step 41c: TH reads AliroExpeditedTransactionSupportedProtocolVersions
          attribute from DUT"
      PICS: DRLK.S.F0d && DRLK.S.A0083
      command: "readAttribute"
      attribute: "AliroExpeditedTransactionSupportedProtocolVersions"
      response:
          value: aliroprotocolversion

    - label: "Step 42a: TH reads AliroGroupResolvingKey attribute from DUT"
      PICS: DRLK.S.F0d && DRLK.S.A0084
      command: "readAttribute"
      attribute: "AliroGroupResolvingKey"
      response:
          saveAs: alirogrpresolvingkey
          constraints:
              type: octet_string
              minLength: 16
              maxLength: 16

    - label:
          "Step 42b: TH writes AliroGroupResolvingKey attribute as octstr value
          of length 16 which is different from alirogrpresolvingkey"
      PICS: DRLK.S.F0d && DRLK.S.A0084
      command: "writeAttribute"
      attribute: "AliroGroupResolvingKey"
      arguments:
          value: "047a4c992d75368"
      response:
          error: UNSUPPORTED_WRITE

    - label: "Step 42c: TH reads AliroGroupResolvingKey attribute from DUT"
      PICS: DRLK.S.F0d && DRLK.S.A0084
      command: "readAttribute"
      attribute: "AliroGroupResolvingKey"
      response:
          value: alirogrpresolvingkey

    - label:
          "Step 43a: TH reads AliroSupportedBLEUWBProtocolVersions attribute
          from DUT"
      PICS: DRLK.S.F0d && DRLK.S.A0085
      command: "readAttribute"
      attribute: "AliroSupportedBLEUWBProtocolVersions"
      response:
          saveAs: alirobleuwbprotocolversion
          constraints:
              type: list
              maxLength: 16

    - label:
          "Step 43b: TH writes AliroSupportedBLEUWBProtocolVersions attribute as
          list which is different from alirobleuwbprotocolversion"
      PICS: DRLK.S.F0d && DRLK.S.A0085
      command: "writeAttribute"
      attribute: "AliroSupportedBLEUWBProtocolVersions"
      arguments:
          value: ["\x01", "\x02"]
      response:
          error: UNSUPPORTED_WRITE

    - label: "Step 43c: TH reads AliroGroupResolvingKey attribute from DUT"
      PICS: DRLK.S.F0d && DRLK.S.A0085
      command: "readAttribute"
      attribute: "AliroSupportedBLEUWBProtocolVersions"
      response:
          value: alirobleuwbprotocolversion

    - label: "Step 44a: TH reads AliroBLEAdvertisingVersion attribute from DUT"
      PICS: DRLK.S.F0d && DRLK.S.A0086
      command: "readAttribute"
      attribute: "AliroBLEAdvertisingVersion"
      response:
          saveAs: alirobleadvversion
          constraints:
              type: int8u
              minValue: 0
              maxValue: 255

    - label:
          "Step 44b: TH writes AliroBLEAdvertisingVersion attribute as any value
          different from alirobleadvversion"
      PICS: DRLK.S.F0d && DRLK.S.A0086
      command: "writeAttribute"
      attribute: "AliroBLEAdvertisingVersion"
      arguments:
          value: 85
      response:
          error: UNSUPPORTED_WRITE

    - label: "Step 44c: TH reads AliroBLEAdvertisingVersion attribute from DUT"
      PICS: DRLK.S.F0d && DRLK.S.A0086
      command: "readAttribute"
      attribute: "AliroBLEAdvertisingVersion"
      response:
          value: alirobleadvversion

    - label:
          "Step 45a: TH reads NumberOfAliroCredentialIssuerKeysSupported
          attribute from DUT"
      PICS: DRLK.S.F0d && DRLK.S.A0087
      command: "readAttribute"
      attribute: "NumberOfAliroCredentialIssuerKeysSupported"
      response:
          saveAs: alirokeysupported
          constraints:
              type: int16u
              minValue: 0
              maxValue: 65534

    - label:
          "Step 45b: TH writes NumberOfAliroCredentialIssuerKeysSupported
          attribute as any value different from alirokeysupported"
      PICS: DRLK.S.F0d && DRLK.S.A0087
      command: "writeAttribute"
      attribute: "NumberOfAliroCredentialIssuerKeysSupported"
      arguments:
          value: 30
      response:
          error: UNSUPPORTED_WRITE

    - label:
          "Step 45c: TH reads NumberOfAliroCredentialIssuerKeysSupported
          attribute from DUT"
      PICS: DRLK.S.F0d && DRLK.S.A0087
      command: "readAttribute"
      attribute: "NumberOfAliroCredentialIssuerKeysSupported"
      response:
          value: alirokeysupported

    - label:
          "Step 46a: TH reads NumberOfAliroEndpointKeysSupported attribute from
          DUT"
      PICS: DRLK.S.F0d && DRLK.S.A0088
      command: "readAttribute"
      attribute: "NumberOfAliroEndpointKeysSupported"
      response:
          saveAs: aliroepkeysupported
          constraints:
              type: int16u
              minValue: 0
              maxValue: 65534

    - label:
          "Step 46b: TH writes NumberOfAliroEndpointKeysSupported attribute as
          any value different from aliroepkeysupported"
      PICS: DRLK.S.F0d && DRLK.S.A0088
      command: "writeAttribute"
      attribute: "NumberOfAliroEndpointKeysSupported"
      arguments:
          value: 1000
      response:
          error: UNSUPPORTED_WRITE

    - label:
          "Step 46c: TH reads NumberOfAliroEndpointKeysSupported attribute from
          DUT"
      PICS: DRLK.S.F0d && DRLK.S.A0088
      command: "readAttribute"
      attribute: "NumberOfAliroEndpointKeysSupported"
      response:
          value: aliroepkeysupported
