diff --git a/test/bacnet/basic/object/test/property_test.c b/test/bacnet/basic/object/test/property_test.c index 8436ae4f..9e39f750 100644 --- a/test/bacnet/basic/object/test/property_test.c +++ b/test/bacnet/basic/object/test/property_test.c @@ -8,6 +8,7 @@ */ #include #include +#include #include #include #include @@ -23,21 +24,40 @@ * @return true if the property was written successfully, false if not */ bool bacnet_object_property_write_test( - BACNET_WRITE_PROPERTY_DATA *wpdata, + BACNET_WRITE_PROPERTY_DATA *wp_data, write_property_function write_property, const int *skip_fail_property_list) { bool status = false; + bool is_array, is_list; - (void)skip_fail_property_list; - if (wpdata && write_property) { - status = write_property(wpdata); + if (property_list_member( + skip_fail_property_list, wp_data->object_property)) { + return true; + } + if (wp_data && write_property) { + status = write_property(wp_data); if (!status) { /* verify WriteProperty property is known */ zassert_not_equal( - wpdata->error_code, ERROR_CODE_UNKNOWN_PROPERTY, + wp_data->error_code, ERROR_CODE_UNKNOWN_PROPERTY, "property '%s': WriteProperty Unknown!\n", - bactext_property_name(wpdata->object_property)); + bactext_property_name(wp_data->object_property)); + } + is_array = property_list_bacnet_array_member( + wp_data->object_type, wp_data->object_property); + is_list = property_list_bacnet_list_member( + wp_data->object_type, wp_data->object_property); + if (!is_array && !is_list) { + wp_data->array_index = 0; + status = write_property(wp_data); + zassert_equal(status, false, NULL); + zassert_equal(wp_data->error_class, ERROR_CLASS_PROPERTY, NULL); + zassert_equal( + wp_data->error_code, ERROR_CODE_PROPERTY_IS_NOT_AN_ARRAY, + "property=%s error_code=%s", + bactext_property_name(wp_data->object_property), + bactext_error_code_name(wp_data->error_code)); } } @@ -61,8 +81,15 @@ void bacnet_object_property_write_parameter_init( wpdata->object_instance = rpdata->object_instance; wpdata->object_property = rpdata->object_property; wpdata->array_index = rpdata->array_index; - memcpy(&wpdata->application_data, rpdata->application_data, MAX_APDU); - wpdata->application_data_len = len; + if (len >= 0) { + memcpy( + &wpdata->application_data, rpdata->application_data, + sizeof(wpdata->application_data)); + wpdata->application_data_len = len; + } else { + wpdata->application_data_len = 0; + } + wpdata->priority = BACNET_NO_PRIORITY; wpdata->error_code = ERROR_CODE_SUCCESS; } } @@ -86,6 +113,7 @@ int bacnet_object_property_read_test( int apdu_len = 0; int read_len = 0; uint8_t *apdu; + bool is_array, is_list; BACNET_ARRAY_INDEX array_index = 0; BACNET_APPLICATION_DATA_VALUE value = { 0 }; @@ -142,6 +170,28 @@ int bacnet_object_property_read_test( read_len, BACNET_STATUS_ERROR, "property '%s': failed to read!\n", bactext_property_name(rpdata->object_property)); } + is_array = property_list_bacnet_array_member( + rpdata->object_type, rpdata->object_property); + is_list = property_list_bacnet_list_member( + rpdata->object_type, rpdata->object_property); + if (!is_array && !is_list) { + rpdata->array_index = 0; + read_len = read_property(rpdata); + zassert_equal( + read_len, BACNET_STATUS_ERROR, "property '%s': is not an array!\n", + bactext_property_name(rpdata->object_property)); + zassert_equal(read_len, BACNET_STATUS_ERROR, NULL); + zassert_equal( + rpdata->error_class, ERROR_CLASS_PROPERTY, + "property '%s': error class is %s\n", + bactext_property_name(rpdata->object_property), + bactext_error_class_name(rpdata->error_class)); + zassert_equal( + rpdata->error_code, ERROR_CODE_PROPERTY_IS_NOT_AN_ARRAY, + "property '%s': error code is %s\n", + bactext_property_name(rpdata->object_property), + bactext_error_code_name(rpdata->error_code)); + } return len; } @@ -193,7 +243,7 @@ void bacnet_object_properties_read_write_test( while ((*pOptional) != -1) { rpdata.object_property = *pOptional; rpdata.array_index = BACNET_ARRAY_ALL; - bacnet_object_property_read_test( + len = bacnet_object_property_read_test( &rpdata, read_property, skip_fail_property_list); bacnet_object_property_write_parameter_init(&wpdata, &rpdata, len); bacnet_object_property_write_test( @@ -203,7 +253,7 @@ void bacnet_object_properties_read_write_test( while ((*pProprietary) != -1) { rpdata.object_property = *pProprietary; rpdata.array_index = BACNET_ARRAY_ALL; - bacnet_object_property_read_test( + len = bacnet_object_property_read_test( &rpdata, read_property, skip_fail_property_list); bacnet_object_property_write_parameter_init(&wpdata, &rpdata, len); bacnet_object_property_write_test(