@@ -91,6 +91,8 @@ uic_mqtt_dotdot_user_credential_credential_association_callback_t credential_ass
9191uic_mqtt_dotdot_user_credential_get_user_checksum_callback_t get_user_checksum_command = NULL ;
9292uic_mqtt_dotdot_user_credential_get_credential_checksum_callback_t get_credential_checksum_command = NULL ;
9393uic_mqtt_dotdot_user_credential_get_all_users_checksum_callback_t get_all_users_checksum_command = NULL ;
94+ uic_mqtt_dotdot_user_credential_set_admin_pin_code_callback_t set_admin_pin_code_command = NULL ;
95+ uic_mqtt_dotdot_user_credential_deactivate_admin_pin_code_callback_t deactivate_admin_pin_code_command = NULL ;
9496// clang-format on
9597
9698// Stub functions for intercepting callback registration.
@@ -223,6 +225,20 @@ void uic_mqtt_dotdot_user_credential_get_all_users_checksum_callback_set_stub(
223225 get_all_users_checksum_command = callback;
224226}
225227
228+ void uic_mqtt_dotdot_user_credential_set_admin_pin_code_callback_set_stub (
229+ const uic_mqtt_dotdot_user_credential_set_admin_pin_code_callback_t callback,
230+ int cmock_num_calls)
231+ {
232+ set_admin_pin_code_command = callback;
233+ }
234+
235+ void uic_mqtt_dotdot_user_credential_deactivate_admin_pin_code_callback_set_stub (
236+ const uic_mqtt_dotdot_user_credential_deactivate_admin_pin_code_callback_t
237+ callback,
238+ int cmock_num_calls)
239+ {
240+ deactivate_admin_pin_code_command = callback;
241+ }
226242
227243// / Setup the test suite (called once before all test_xxx functions are called)
228244void suiteSetUp ()
@@ -308,6 +324,9 @@ void setUp()
308324 // Credential checksum
309325 uic_mqtt_dotdot_user_credential_get_credential_checksum_callback_set_Stub (&uic_mqtt_dotdot_user_credential_get_credential_checksum_callback_set_stub);
310326 uic_mqtt_dotdot_user_credential_get_all_users_checksum_callback_set_Stub (&uic_mqtt_dotdot_user_credential_get_all_users_checksum_callback_set_stub);
327+ // Admin code
328+ uic_mqtt_dotdot_user_credential_set_admin_pin_code_callback_set_Stub (&uic_mqtt_dotdot_user_credential_set_admin_pin_code_callback_set_stub);
329+ uic_mqtt_dotdot_user_credential_deactivate_admin_pin_code_callback_set_Stub (&uic_mqtt_dotdot_user_credential_deactivate_admin_pin_code_callback_set_stub);
311330 // clang-format on
312331
313332 // Run the component init
@@ -321,16 +340,21 @@ void setUp()
321340
322341 // Setup helper
323342 cpp_endpoint_node = attribute_store::attribute (endpoint_id_node);
324- }
325343
326- void set_version (zwave_cc_version_t version)
327- {
328- // Set the version
329- cpp_endpoint_node
330- .emplace_node (ATTRIBUTE (VERSION))
331- .set_reported (version);
344+ // Setup global cred capabilities
345+ cpp_endpoint_node.emplace_node (ATTRIBUTE (SUPPORT_ADMIN_PIN_CODE),
346+ static_cast <uint8_t >(1 ));
347+ cpp_endpoint_node.emplace_node (ATTRIBUTE (SUPPORT_CREDENTIAL_CHECKSUM),
348+ static_cast <uint8_t >(1 ));
349+ cpp_endpoint_node.emplace_node (ATTRIBUTE (SUPPORT_ADMIN_PIN_CODE_DEACTIVATION),
350+ static_cast <uint8_t >(1 ));
351+
352+ // Set command class version
353+ cpp_endpoint_node.emplace_node (ATTRIBUTE (VERSION)).set_reported (1 );
332354}
333355
356+
357+
334358// ///////////////////////////////////////////////////////////////////////
335359// Mqtt topics helpers
336360// ///////////////////////////////////////////////////////////////////////
@@ -2381,8 +2405,6 @@ void test_user_credential_cluster_test_credential_checksum_happy_case()
23812405
23822406void test_user_credential_cluster_test_all_users_checksum_happy_case ()
23832407{
2384- set_version (1 );
2385-
23862408 // Command not supported yet (default user capabilities SUPPORT_ALL_USERS_CHECKSUM set to 0)
23872409 TEST_ASSERT_EQUAL_MESSAGE (
23882410 SL_STATUS_FAIL,
@@ -2428,6 +2450,96 @@ void test_user_credential_cluster_test_all_users_checksum_happy_case()
24282450 " Checksum node reported value should NOT exists" );
24292451}
24302452
2453+ void test_user_credential_cluster_test_admin_set_command_happy_case ()
2454+ {
2455+ auto support_admin_pin_code_node
2456+ = cpp_endpoint_node.emplace_node (ATTRIBUTE (SUPPORT_ADMIN_PIN_CODE))
2457+ .set_reported <uint8_t >(0 );
2458+ auto status
2459+ = set_admin_pin_code_command (supporting_node_unid,
2460+ endpoint_id,
2461+ UIC_MQTT_DOTDOT_CALLBACK_TYPE_SUPPORT_CHECK,
2462+ " " );
2463+ TEST_ASSERT_EQUAL_MESSAGE (
2464+ SL_STATUS_FAIL,
2465+ status,
2466+ " Admin set should NOT be supported since SUPPORT_ADMIN_PIN_CODE is 0" );
2467+
2468+ support_admin_pin_code_node.set_reported <uint8_t >(1 );
2469+
2470+ status
2471+ = set_admin_pin_code_command (supporting_node_unid,
2472+ endpoint_id,
2473+ UIC_MQTT_DOTDOT_CALLBACK_TYPE_SUPPORT_CHECK,
2474+ " " );
2475+
2476+ TEST_ASSERT_EQUAL_MESSAGE (
2477+ SL_STATUS_OK,
2478+ status,
2479+ " Admin set should be supported since SUPPORT_ADMIN_PIN_CODE is 1" );
2480+
2481+ std::string expected_pin_code = " 1234" ;
2482+ status
2483+ = set_admin_pin_code_command (supporting_node_unid,
2484+ endpoint_id,
2485+ UIC_MQTT_DOTDOT_CALLBACK_TYPE_NORMAL,
2486+ expected_pin_code.c_str ());
2487+
2488+ auto raw_pin_code
2489+ = cpp_endpoint_node.child_by_type (ATTRIBUTE (ADMIN_PIN_CODE))
2490+ .desired <std::vector<uint8_t >>();
2491+
2492+ std::string reported_pin_code;
2493+ for (char c : raw_pin_code) {
2494+ reported_pin_code += c;
2495+ }
2496+
2497+ TEST_ASSERT_EQUAL_STRING_MESSAGE (expected_pin_code.c_str (),
2498+ reported_pin_code.c_str (),
2499+ " Admin pin code mismatch" );
2500+ }
2501+
2502+ void test_user_credential_cluster_test_admin_deactivate_command_happy_case ()
2503+ {
2504+ auto support_admin_deactivation_node
2505+ = cpp_endpoint_node
2506+ .emplace_node (ATTRIBUTE (SUPPORT_ADMIN_PIN_CODE_DEACTIVATION))
2507+ .set_reported <uint8_t >(0 );
2508+ auto status = deactivate_admin_pin_code_command (
2509+ supporting_node_unid,
2510+ endpoint_id,
2511+ UIC_MQTT_DOTDOT_CALLBACK_TYPE_SUPPORT_CHECK);
2512+ TEST_ASSERT_EQUAL_MESSAGE (SL_STATUS_FAIL,
2513+ status,
2514+ " Admin deactivation should NOT be supported since "
2515+ " SUPPORT_ADMIN_PIN_CODE_DEACTIVATION is 0" );
2516+
2517+ support_admin_deactivation_node.set_reported <uint8_t >(1 );
2518+
2519+ status = deactivate_admin_pin_code_command (
2520+ supporting_node_unid,
2521+ endpoint_id,
2522+ UIC_MQTT_DOTDOT_CALLBACK_TYPE_SUPPORT_CHECK);
2523+
2524+ TEST_ASSERT_EQUAL_MESSAGE (
2525+ SL_STATUS_OK,
2526+ status,
2527+ " Admin deactivation should be supported since SUPPORT_ADMIN_PIN_CODE is 1" );
2528+
2529+ status
2530+ = deactivate_admin_pin_code_command (supporting_node_unid,
2531+ endpoint_id,
2532+ UIC_MQTT_DOTDOT_CALLBACK_TYPE_NORMAL);
2533+
2534+ std::vector<uint8_t > expected_empty_pin_code = {0 };
2535+ TEST_ASSERT_EQUAL_UINT8_ARRAY_MESSAGE (
2536+ expected_empty_pin_code.data (),
2537+ cpp_endpoint_node.child_by_type (ATTRIBUTE (ADMIN_PIN_CODE))
2538+ .desired <std::vector<uint8_t >>()
2539+ .data (),
2540+ expected_empty_pin_code.size (),
2541+ " Admin pin code should be at empty value" );
2542+ }
24312543
24322544// /////////////////////////////////////////////////
24332545// Support tests
@@ -2538,4 +2650,5 @@ void test_user_credential_cluster_test_user_command_not_supported_happy_case()
25382650 " Delete user should not be supported" );
25392651}
25402652
2653+
25412654} // extern "C"
0 commit comments