Matter SDK Coverage Report
Current view: top level - app - TestEventTriggerDelegate.h (source / functions) Coverage Total Hit
Test: SHA:9f95d758cc04a404d4b85a9e3b8cc2551c3562e3 Lines: 100.0 % 4 4
Test Date: 2025-05-17 07:09:34 Functions: 66.7 % 3 2

            Line data    Source code
       1              : /*
       2              :  *    Copyright (c) 2022 Project CHIP Authors
       3              :  *    All rights reserved.
       4              :  *
       5              :  *    Licensed under the Apache License, Version 2.0 (the "License");
       6              :  *    you may not use this file except in compliance with the License.
       7              :  *    You may obtain a copy of the License at
       8              :  *
       9              :  *        http://www.apache.org/licenses/LICENSE-2.0
      10              :  *
      11              :  *    Unless required by applicable law or agreed to in writing, software
      12              :  *    distributed under the License is distributed on an "AS IS" BASIS,
      13              :  *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
      14              :  *    See the License for the specific language governing permissions and
      15              :  *    limitations under the License.
      16              :  */
      17              : 
      18              : #pragma once
      19              : 
      20              : #include <lib/core/CHIPError.h>
      21              : #include <lib/support/IntrusiveList.h>
      22              : #include <lib/support/Span.h>
      23              : 
      24              : #include <cstddef>
      25              : #include <cstdint>
      26              : 
      27              : namespace chip {
      28              : 
      29              : class TestEventTriggerHandler : public IntrusiveListNodeBase<IntrusiveMode::AutoUnlink>
      30              : {
      31              : public:
      32           10 :     virtual ~TestEventTriggerHandler() = default;
      33              : 
      34              :     /**
      35              :      * Handles the test event trigger based on `eventTrigger` provided.
      36              :      *
      37              :      * @param[in] eventTrigger Event trigger to handle.
      38              :      *
      39              :      * @return CHIP_NO_ERROR on success or another CHIP_ERROR on failure
      40              :      */
      41              :     virtual CHIP_ERROR HandleEventTrigger(uint64_t eventTrigger) = 0;
      42              : 
      43            2 :     static constexpr uint64_t clearEndpointInEventTrigger(uint64_t eventTrigger)
      44              :     {
      45            2 :         constexpr uint64_t kEndpointMask = 0x0000FFFF00000000;
      46            2 :         return eventTrigger & ~kEndpointMask;
      47              :     }
      48              : };
      49              : 
      50              : class TestEventTriggerDelegate
      51              : {
      52              : public:
      53              :     /* Expected byte size of the EnableKey */
      54              :     static constexpr size_t kEnableKeyLength = 16;
      55              : 
      56              :     virtual ~TestEventTriggerDelegate() {}
      57              :     /**
      58              :      * Checks to see if `enableKey` provided matches value chosen by the manufacturer.
      59              :      *
      60              :      * @param[in] enableKey Buffer of the key to verify.
      61              :      */
      62              :     virtual bool DoesEnableKeyMatch(const ByteSpan & enableKey) const = 0;
      63              : 
      64              :     /**
      65              :      * Handles the test event trigger based on `eventTrigger` provided.
      66              :      *
      67              :      * By default, this iterates over handlers added via `AddEventTriggerHandler`.
      68              :      *
      69              :      * If more specific behavior is desired, the method can be completely overridden.
      70              :      *
      71              :      * @param[in] eventTrigger Event trigger to handle.
      72              :      *
      73              :      * @return CHIP_NO_ERROR on success or another CHIP_ERROR on failure
      74              :      */
      75              :     virtual CHIP_ERROR HandleEventTriggers(uint64_t eventTrigger)
      76              :     {
      77              :         CHIP_ERROR last_error = CHIP_ERROR_INVALID_ARGUMENT;
      78              :         for (TestEventTriggerHandler & handler : mHandlerList)
      79              :         {
      80              :             last_error = handler.HandleEventTrigger(eventTrigger);
      81              :             if (last_error == CHIP_NO_ERROR)
      82              :             {
      83              :                 break;
      84              :             }
      85              :         }
      86              : 
      87              :         return last_error;
      88              :     }
      89              : 
      90              :     CHIP_ERROR AddHandler(TestEventTriggerHandler * handler)
      91              :     {
      92              :         VerifyOrReturnError(!mHandlerList.Contains(handler), CHIP_ERROR_INVALID_ARGUMENT);
      93              :         mHandlerList.PushBack(handler);
      94              :         return CHIP_NO_ERROR;
      95              :     }
      96              : 
      97              :     void RemoveHandler(TestEventTriggerHandler * handler)
      98              :     {
      99              :         VerifyOrReturn(mHandlerList.Contains(handler));
     100              :         mHandlerList.Remove(handler);
     101              :     }
     102              : 
     103              :     void ClearAllHandlers() { mHandlerList.Clear(); }
     104              : 
     105              : protected:
     106              :     IntrusiveList<TestEventTriggerHandler, IntrusiveMode::AutoUnlink> mHandlerList;
     107              : };
     108              : 
     109              : /**
     110              :  * @brief TestEventTriggerDelegate that owns its enable key in RAM.
     111              :  *
     112              :  */
     113              : class SimpleTestEventTriggerDelegate : public TestEventTriggerDelegate
     114              : {
     115              : public:
     116              :     SimpleTestEventTriggerDelegate() { memset(&mEnableKey[0], 0, sizeof(mEnableKey)); }
     117              : 
     118              :     /**
     119              :      * @brief Initialize the delegate with a key
     120              :      *
     121              :      * @param enableKey - EnableKey to use for this instance.
     122              :      * @return CHIP_NO_ERROR on success, CHIP_ERROR_INVALID_ARGUMENT if enableKey is wrong size.
     123              :      */
     124              :     CHIP_ERROR Init(ByteSpan enableKey)
     125              :     {
     126              :         VerifyOrReturnError(enableKey.size() == sizeof(mEnableKey), CHIP_ERROR_INVALID_ARGUMENT);
     127              :         MutableByteSpan ourEnableKeySpan(mEnableKey);
     128              :         return CopySpanToMutableSpan(enableKey, ourEnableKeySpan);
     129              :     }
     130              : 
     131              :     bool DoesEnableKeyMatch(const ByteSpan & enableKey) const override { return enableKey.data_equal(ByteSpan(mEnableKey)); }
     132              : 
     133              : private:
     134              :     uint8_t mEnableKey[TestEventTriggerDelegate::kEnableKeyLength];
     135              : };
     136              : 
     137              : } // namespace chip
        

Generated by: LCOV version 2.0-1