Ignore ReinitializeDevice and DeviceCommunicationControl service password (#518)
* Fix device object ReinitializeDevice service handling examples of no-password in the device. Add unit testing of device object ReinitializeDevice service. Add API for setting ReinitializeDevice device object password. * Fix DeviceCommunicationControl service handling example of no-password in the device. --------- Co-authored-by: Steve Karg <skarg@users.sourceforge.net>
This commit is contained in:
@@ -41,15 +41,16 @@ static void test_Device_Data_Sharing(void)
|
||||
rpdata.application_data = &apdu[0];
|
||||
rpdata.application_data_len = sizeof(apdu);
|
||||
rpdata.object_type = OBJECT_DEVICE;
|
||||
rpdata.object_instance = Device_Index_To_Instance(0);;
|
||||
rpdata.object_instance = Device_Index_To_Instance(0);
|
||||
;
|
||||
Device_Property_Lists(&pRequired, &pOptional, &pProprietary);
|
||||
while ((*pRequired) != -1) {
|
||||
rpdata.object_property = *pRequired;
|
||||
rpdata.array_index = BACNET_ARRAY_ALL;
|
||||
len = Device_Read_Property(&rpdata);
|
||||
zassert_not_equal(len, BACNET_STATUS_ERROR,
|
||||
zassert_not_equal(len, BACNET_STATUS_ERROR,
|
||||
"property '%s': failed to ReadProperty!\n",
|
||||
bactext_property_name(rpdata.object_property));
|
||||
bactext_property_name(rpdata.object_property));
|
||||
if (len > 0) {
|
||||
test_len = bacapp_decode_application_data(rpdata.application_data,
|
||||
(uint8_t)rpdata.application_data_len, &value);
|
||||
@@ -83,9 +84,9 @@ static void test_Device_Data_Sharing(void)
|
||||
rpdata.object_property = *pOptional;
|
||||
rpdata.array_index = BACNET_ARRAY_ALL;
|
||||
len = Device_Read_Property(&rpdata);
|
||||
zassert_not_equal(len, BACNET_STATUS_ERROR,
|
||||
zassert_not_equal(len, BACNET_STATUS_ERROR,
|
||||
"property '%s': failed to ReadProperty!\n",
|
||||
bactext_property_name(rpdata.object_property));
|
||||
bactext_property_name(rpdata.object_property));
|
||||
if (len > 0) {
|
||||
test_len = bacapp_decode_application_data(rpdata.application_data,
|
||||
(uint8_t)rpdata.application_data_len, &value);
|
||||
@@ -127,6 +128,7 @@ static void testDevice(void)
|
||||
{
|
||||
bool status = false;
|
||||
const char *name = "Patricia";
|
||||
BACNET_REINITIALIZE_DEVICE_DATA rd_data;
|
||||
|
||||
status = Device_Set_Object_Instance_Number(0);
|
||||
zassert_equal(Device_Object_Instance_Number(), 0, NULL);
|
||||
@@ -151,22 +153,74 @@ static void testDevice(void)
|
||||
Device_Set_Model_Name(name, strlen(name));
|
||||
zassert_equal(strcmp(Device_Model_Name(), name), 0, NULL);
|
||||
|
||||
/* Reinitialize with no device password */
|
||||
rd_data.error_class = ERROR_CLASS_DEVICE;
|
||||
rd_data.error_code = ERROR_CODE_SUCCESS;
|
||||
rd_data.state = BACNET_REINIT_COLDSTART;
|
||||
characterstring_init_ansi(&rd_data.password, NULL);
|
||||
status = Device_Reinitialize_Password_Set(NULL);
|
||||
status = Device_Reinitialize(&rd_data);
|
||||
zassert_true(status, NULL);
|
||||
zassert_equal(rd_data.error_class, ERROR_CLASS_DEVICE, "error-class=%s",
|
||||
bactext_error_class_name(rd_data.error_class));
|
||||
zassert_equal(rd_data.error_code, ERROR_CODE_SUCCESS, "error-code=%s",
|
||||
bactext_error_code_name(rd_data.error_code));
|
||||
/* Reinitialize with device valid password, service no password */
|
||||
status = Device_Reinitialize_Password_Set("valid");
|
||||
zassert_true(status, NULL);
|
||||
status = characterstring_init_ansi(&rd_data.password, NULL);
|
||||
zassert_true(status, NULL);
|
||||
status = Device_Reinitialize(&rd_data);
|
||||
zassert_false(status, NULL);
|
||||
zassert_equal(rd_data.error_class, ERROR_CLASS_SECURITY, "error-class=%s",
|
||||
bactext_error_class_name(rd_data.error_class));
|
||||
zassert_equal(rd_data.error_code, ERROR_CODE_PASSWORD_FAILURE,
|
||||
"error-code=%s", bactext_error_code_name(rd_data.error_code));
|
||||
/* Reinitialize with device valid password, service invalid password */
|
||||
status = characterstring_init_ansi(&rd_data.password, "invalid");
|
||||
zassert_true(status, NULL);
|
||||
status = Device_Reinitialize(&rd_data);
|
||||
zassert_false(status, NULL);
|
||||
zassert_equal(rd_data.error_class, ERROR_CLASS_SECURITY, "error-class=%s",
|
||||
bactext_error_class_name(rd_data.error_class));
|
||||
zassert_equal(rd_data.error_code, ERROR_CODE_PASSWORD_FAILURE,
|
||||
"error-code=%s", bactext_error_code_name(rd_data.error_code));
|
||||
/* Reinitialize with device valid password, service valid password */
|
||||
characterstring_init_ansi(&rd_data.password, "valid");
|
||||
status = Device_Reinitialize(&rd_data);
|
||||
zassert_true(status, NULL);
|
||||
/* Reinitialize with device valid password, service too long password */
|
||||
characterstring_init_ansi(&rd_data.password, "abcdefghijklmnopqrstuvwxyz");
|
||||
status = Device_Reinitialize(&rd_data);
|
||||
zassert_false(status, NULL);
|
||||
zassert_equal(rd_data.error_class, ERROR_CLASS_SERVICES, "error-class=%s",
|
||||
bactext_error_class_name(rd_data.error_class));
|
||||
zassert_equal(rd_data.error_code, ERROR_CODE_PARAMETER_OUT_OF_RANGE,
|
||||
"error-code=%s", bactext_error_code_name(rd_data.error_code));
|
||||
/* Reinitialize with device no password, unsupported state */
|
||||
status = Device_Reinitialize_Password_Set(NULL);
|
||||
zassert_true(status, NULL);
|
||||
rd_data.state = BACNET_REINIT_MAX;
|
||||
status = Device_Reinitialize(&rd_data);
|
||||
zassert_false(status, NULL);
|
||||
zassert_equal(rd_data.error_class, ERROR_CLASS_SERVICES, "error-class=%s",
|
||||
bactext_error_class_name(rd_data.error_class));
|
||||
zassert_equal(rd_data.error_code, ERROR_CODE_PARAMETER_OUT_OF_RANGE,
|
||||
"error-code=%s", bactext_error_code_name(rd_data.error_code));
|
||||
|
||||
return;
|
||||
}
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
|
||||
#if defined(CONFIG_ZTEST_NEW_API)
|
||||
ZTEST_SUITE(device_tests, NULL, NULL, NULL, NULL, NULL);
|
||||
#else
|
||||
void test_main(void)
|
||||
{
|
||||
ztest_test_suite(device_tests,
|
||||
ztest_unit_test(testDevice),
|
||||
ztest_unit_test(test_Device_Data_Sharing)
|
||||
);
|
||||
ztest_test_suite(device_tests, ztest_unit_test(testDevice),
|
||||
ztest_unit_test(test_Device_Data_Sharing));
|
||||
|
||||
ztest_run_test_suite(device_tests);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user