Skip to content

Commit 39ed842

Browse files
committed
[utest] add strict name-check coverage in object_tc
1 parent 24e2c52 commit 39ed842

File tree

1 file changed

+79
-0
lines changed

1 file changed

+79
-0
lines changed

src/utest/object_tc.c

Lines changed: 79 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
* 2025-07-18 kurisaW First commit
99
* 2025-11-13 CYFS Add standardized documentation block for object_tc
1010
* 2025-11-19 Rbb666 Refactor tests, add stress and error-path coverage
11+
* 2025-12-12 CYFS add strict name-check tests
1112
*/
1213

1314
/**
@@ -140,6 +141,30 @@ static rt_err_t generate_unique_name(char *buf,
140141
return -RT_ENOMEM;
141142
}
142143

144+
#if defined(RT_USING_STRICT_NAME_CHECKS) && defined(RT_DEBUGING_ASSERT)
145+
struct strict_assert_capture
146+
{
147+
rt_bool_t armed;
148+
rt_uint16_t hit_count;
149+
const char *expr;
150+
const char *func;
151+
rt_size_t line;
152+
};
153+
154+
static struct strict_assert_capture strict_assert_capture_state;
155+
156+
static void strict_assert_hook(const char *ex, const char *func, rt_size_t line)
157+
{
158+
if (!strict_assert_capture_state.armed)
159+
return;
160+
161+
strict_assert_capture_state.hit_count++;
162+
strict_assert_capture_state.expr = ex;
163+
strict_assert_capture_state.func = func;
164+
strict_assert_capture_state.line = line;
165+
}
166+
#endif /* defined(RT_USING_STRICT_NAME_CHECKS) && defined(RT_DEBUGING_ASSERT) */
167+
143168
static void test_object_name_handling(void)
144169
{
145170
struct rt_object static_obj;
@@ -415,6 +440,57 @@ static void test_object_error_paths(void)
415440
rt_object_detach(&obj);
416441
}
417442

443+
#if defined(RT_USING_STRICT_NAME_CHECKS) && defined(RT_DEBUGING_ASSERT)
444+
static void test_object_strict_name_checks(void)
445+
{
446+
struct rt_object base_obj;
447+
struct rt_object duplicate_obj;
448+
struct rt_object overflow_obj;
449+
char duplicate_name[TEST_RT_NAME_MAX];
450+
char overflow_name[TEST_RT_NAME_MAX + 8];
451+
rt_size_t base_len;
452+
void (*prev_hook)(const char *, const char *, rt_size_t) = rt_assert_hook;
453+
454+
uassert_true(generate_unique_name(duplicate_name, sizeof(duplicate_name), "strict", RT_Object_Class_Thread) == RT_EOK);
455+
rt_object_init(&base_obj, RT_Object_Class_Thread, duplicate_name);
456+
457+
rt_assert_set_hook(strict_assert_hook);
458+
459+
strict_assert_capture_state.hit_count = 0;
460+
strict_assert_capture_state.expr = RT_NULL;
461+
strict_assert_capture_state.func = RT_NULL;
462+
strict_assert_capture_state.line = 0;
463+
strict_assert_capture_state.armed = RT_TRUE;
464+
rt_object_init(&duplicate_obj, RT_Object_Class_Thread, duplicate_name);
465+
uassert_true(strict_assert_capture_state.hit_count >= 1);
466+
uassert_not_null(strict_assert_capture_state.expr);
467+
uassert_str_equal(strict_assert_capture_state.expr, "duplicate == RT_NULL");
468+
strict_assert_capture_state.armed = RT_FALSE;
469+
rt_object_detach(&duplicate_obj);
470+
471+
uassert_true(generate_unique_name(overflow_name, sizeof(overflow_name), "strict", RT_Object_Class_Thread) == RT_EOK);
472+
base_len = rt_strlen(overflow_name);
473+
rt_memset(overflow_name + base_len, 'x', sizeof(overflow_name) - base_len - 1);
474+
overflow_name[sizeof(overflow_name) - 1] = '\0';
475+
uassert_true(rt_strlen(overflow_name) > TEST_RT_NAME_MAX - 1);
476+
477+
strict_assert_capture_state.hit_count = 0;
478+
strict_assert_capture_state.expr = RT_NULL;
479+
strict_assert_capture_state.func = RT_NULL;
480+
strict_assert_capture_state.line = 0;
481+
strict_assert_capture_state.armed = RT_TRUE;
482+
rt_object_init(&overflow_obj, RT_Object_Class_Thread, overflow_name);
483+
uassert_true(strict_assert_capture_state.hit_count >= 1);
484+
uassert_not_null(strict_assert_capture_state.expr);
485+
uassert_str_equal(strict_assert_capture_state.expr, "obj_name_len <= RT_NAME_MAX - 1");
486+
strict_assert_capture_state.armed = RT_FALSE;
487+
rt_object_detach(&overflow_obj);
488+
489+
rt_assert_set_hook(prev_hook);
490+
rt_object_detach(&base_obj);
491+
}
492+
#endif /* defined(RT_USING_STRICT_NAME_CHECKS) && defined(RT_DEBUGING_ASSERT) */
493+
418494
#ifdef RT_USING_HEAP
419495
static rt_err_t custom_destroy_cb(void *data)
420496
{
@@ -516,6 +592,9 @@ static void test_object_suite(void)
516592
UTEST_UNIT_RUN(test_object_error_paths);
517593
#ifdef RT_USING_HEAP
518594
UTEST_UNIT_RUN(test_custom_object_lifecycle);
595+
#endif
596+
#if defined(RT_USING_STRICT_NAME_CHECKS) && defined(RT_DEBUGING_ASSERT)
597+
UTEST_UNIT_RUN(test_object_strict_name_checks);
519598
#endif
520599
UTEST_UNIT_RUN(test_object_pressure);
521600
}

0 commit comments

Comments
 (0)