Page MenuHomeFreeBSD

D47826.id147120.diff
No OneTemporary

D47826.id147120.diff

diff --git a/lib/libsbuf/tests/sbuf_core_test.c b/lib/libsbuf/tests/sbuf_core_test.c
--- a/lib/libsbuf/tests/sbuf_core_test.c
+++ b/lib/libsbuf/tests/sbuf_core_test.c
@@ -241,6 +241,153 @@
sbuf_delete(sb);
}
+
+ATF_TC(sbuf_get_flags_test);
+ATF_TC_HEAD(sbuf_get_flags_test, tc) {
+ atf_tc_set_md_var(tc, "descr", "Test subf_get_flags for returning user flags");
+}
+ATF_TC_BODY(sbuf_get_flags_test, tc){
+ struct sbuf *sb;
+
+ // Step 1: Create an auto-extended sbuf and verify initial user flags
+ sb = sbuf_new_auto();
+ ATF_REQUIRE(sb != NULL);
+ ATF_CHECK_EQ_MSG(sbuf_get_flags(sb), SBUF_AUTOEXTEND,
+ "sbuf_get_flags should return SBUF_AUTOEXTEND for auto-extend buffers");
+
+ // Step 2: Verify internal flags are not included
+ ATF_CHECK_MSG((sbuf_get_flags(sb) & SBUF_FINISHED) == 0,
+ "sbuf_get_flags should not return internal flags like SBUF_FINISHED");
+
+ // Cleanup
+ sbuf_delete(sb);
+}
+
+ATF_TC(sbuf_set_flags_test);
+ATF_TC_HEAD(sbuf_set_flags_test, tc) {
+ atf_tc_set_md_var(tc, "descr", "Test subf_set_flags for correctly setting user flags");
+}
+ATF_TC_BODY(sbuf_set_flags_test, tc){
+ struct sbuf *sb;
+
+ // Step 1: Create a fixed-length sbuf and set additional flags
+ sb = sbuf_new(NULL, NULL, 128, SBUF_FIXEDLEN);
+ ATF_REQUIRE(sb != NULL);
+
+ sbuf_set_flags(sb, SBUF_INCLUDENUL | SBUF_DRAINTOEOR);
+ ATF_CHECK_EQ_MSG(sbuf_get_flags(sb), (SBUF_INCLUDENUL | SBUF_DRAINTOEOR),
+ "sbuf_get_flags should reflect flags set by sbuf_set_flags");
+
+ // Step 2: Try setting a non-user flag and ensure it is ignored
+ sbuf_set_flags(sb, SBUF_DYNAMIC); // SBUF_DYNAMIC is not a user flag
+ ATF_CHECK_MSG((sbuf_get_flags(sb) & SBUF_DYNAMIC) == 0,
+ "sbuf_set_flags should not modify non-user flags like SBUF_DYNAMIC");
+
+ // Cleanup
+ sbuf_delete(sb);
+}
+
+ATF_TC(sbuf_clear_flags_test);
+ATF_TC_HEAD(sbuf_clear_flags_test, tc){
+ atf_tc_set_md_var(tc, "descr", "Test sbuf_clear_flags for correctly clearing user flags");
+}
+ATF_TC_BODY(sbuf_clear_flags_test, tc){
+ struct sbuf *sb;
+
+ // Step 1: Create a fixed-length sbuf and set multiple user flags
+ sb = sbuf_new(NULL, NULL, 128, SBUF_FIXEDLEN);
+ ATF_REQUIRE(sb != NULL);
+ sbuf_set_flags(sb, SBUF_INCLUDENUL | SBUF_DRAINTOEOR | SBUF_NOWAIT);
+
+ // Verify that flags are correctly set
+ ATF_CHECK_EQ_MSG(sbuf_get_flags(sb), (SBUF_FIXEDLEN | SBUF_INCLUDENUL | SBUF_DRAINTOEOR | SBUF_NOWAIT),
+ "sbuf_get_flags should reflect all user flags set");
+
+ // Step 2: Clear a single user flag
+ sbuf_clear_flags(sb, SBUF_DRAINTOEOR);
+ ATF_CHECK_EQ_MSG(sbuf_get_flags(sb), (SBUF_FIXEDLEN | SBUF_INCLUDENUL | SBUF_NOWAIT),
+ "sbuf_get_flags should exclude the cleared flag (SBUF_DRAINTOEOR)");
+
+ // Step 3: Clear multiple user flags
+ sbuf_clear_flags(sb, SBUF_INCLUDENUL | SBUF_NOWAIT);
+ ATF_CHECK_EQ_MSG(sbuf_get_flags(sb), SBUF_FIXEDLEN,
+ "sbuf_get_flags should exclude all cleared flags (SBUF_INCLUDENUL and SBUF_NOWAIT");
+
+ // Step 4: Attepmt to clear a flag that isn't set
+ sbuf_clear_flags(sb, SBUF_AUTOEXTEND); // SBUF_AUTOEXTEND was never set
+ ATF_CHECK_EQ_MSG(sbuf_get_flags(sb), SBUF_FIXEDLEN,
+ "Clearing a flag that isn't set should not affect other flags");
+
+ // Step 5: Attempt to clear a non-user flag
+ sbuf_clear_flags(sb, SBUF_DYNAMIC); // SBUF_DYNAMIC is not a user flag
+ ATF_CHECK_MSG((sbuf_get_flags(sb) & SBUF_DYNAMIC) == 0,
+ "sbuf_clear_flags should not affect non-user flags like SBUF_DYNAMIC");
+
+ // Cleanup
+ sbuf_delete(sb);
+}
+
+ATF_TC(sbuf_flags_interaction_test);
+ATF_TC_HEAD(sbuf_flags_interaction_test, tc) {
+ atf_tc_set_md_var(tc, "descr", "Test interaction of sbuf_get_flags, sbuf_set_flags, and sbuf_clear_flags");
+}
+ATF_TC_BODY(sbuf_flags_interaction_test, tc) {
+ struct sbuf *sb;
+
+ // Step 1: Create an auto-extend sbuf
+ sb = sbuf_new_auto();
+ ATF_REQUIRE(sb != NULL);
+
+ // Verify the initial user flags (only SBUF_AUTOEXTEND should be set)
+ ATF_CHECK_EQ_MSG(sbuf_get_flags(sb), SBUF_AUTOEXTEND,
+ "sbuf_get_flags should initially return SBUF_AUTOEXTEND");
+
+ // Step 2: Set additional user flags
+ sbuf_set_flags(sb, SBUF_INCLUDENUL | SBUF_DRAINTOEOR);
+ ATF_CHECK_EQ_MSG(sbuf_get_flags(sb), (SBUF_AUTOEXTEND | SBUF_INCLUDENUL | SBUF_DRAINTOEOR),
+ "sbuf_get_flags should reflect flags set by sbuf_set_flags");
+
+ // Setp 3: Clear a single user flag
+ sbuf_clear_flags(sb, SBUF_AUTOEXTEND);
+ ATF_CHECK_EQ_MSG(sbuf_get_flags(sb), (SBUF_INCLUDENUL | SBUF_DRAINTOEOR),
+ "sbuf_get_flags should exclude flags cleared by sbuf_clear_flags");
+
+ // Cleanup
+ sbuf_delete(sb);
+}
+
+
+ATF_TC(sbuf_new_positive_test);
+ATF_TC_HEAD(sbuf_new_positive_test, tc){
+ atf_tc_set_md_var(tc, "descr", "Test sbuf_new with valid inputs");
+}
+ATF_TC_BODY(sbuf_new_positive_test, tc) {
+ struct sbuf *sb;
+ char buf[128];
+
+ // Case 1: Dynamica allocation of sbuf and buffer
+ sb = sbuf_new(NULL, NULL, 128, SBUF_AUTOEXTEND);
+ ATF_REQUIRE(sb != NULL);
+ ATF_CHECK_EQ_MSG(sbuf_get_flags(sb), SBUF_AUTOEXTEND,
+ "sbuf_new should set SBUF_AUTOEXTEND when specified");
+ sbuf_delete(sb);
+
+ // Case 2: Preallocated sbuf, dynamic buffer
+ struct sbuf prealloc;
+ sb = sbuf_new(&prealloc, NULL, 128, SBUF_FIXEDLEN);
+ ATF_REQUIRE(sb == &prealloc);
+ ATF_CHECK_EQ_MSG(sbuf_get_flags(sb), SBUF_FIXEDLEN,
+ "sbuf_new should set SBUF_FIXEDLEN when specified");
+ sbuf_delete(sb);
+
+ // Case 3: Preallocated sbuf and buffer
+ sb = sbuf_new(&prealloc, buf, sizeof(buf), SBUF_FIXEDLEN);
+ ATF_REQUIRE(sb == &prealloc);
+ ATF_REQUIRE(sb->s_buf == buf);
+ ATF_CHECK_EQ_MSG(sb->s_size, sizeof(buf), "Buffer size should match preallocated buffer");
+ sbuf_delete(sb);
+}
+
ATF_TP_ADD_TCS(tp)
{
@@ -249,19 +396,24 @@
ATF_TP_ADD_TC(tp, sbuf_drain_ret0_test);
ATF_TP_ADD_TC(tp, sbuf_len_test);
ATF_TP_ADD_TC(tp, sbuf_new_fixedlen);
-#if 0
- /* TODO */
-#ifdef HAVE_SBUF_CLEAR_FLAGS
- ATF_TP_ADD_TC(tp, sbuf_clear_flags_test);
-#endif
-#ifdef HAVE_SBUF_GET_FLAGS
+
+#ifdef HAVE_SBUF_GET_FLAGS
ATF_TP_ADD_TC(tp, sbuf_get_flags_test);
-#endif
ATF_TP_ADD_TC(tp, sbuf_new_positive_test);
- ATF_TP_ADD_TC(tp, sbuf_new_negative_test);
-#ifdef HAVE_SBUF_SET_FLAGS
+#endif
+
+#if defined(HAVE_SBUF_SET_FLAGS) && defined(HAVE_SBUF_GET_FLAGS)
ATF_TP_ADD_TC(tp, sbuf_set_flags_test);
#endif
+
+#if defined(HAVE_SBUF_GET_FLAGS) && defined(HAVE_SBUF_SET_FLAGS) && defined(HAVE_SBUF_CLEAR_FLAGS)
+ ATF_TP_ADD_TC(tp, sbuf_clear_flags_test);
+ ATF_TP_ADD_TC(tp, sbuf_flags_interaction_test);
+#endif
+
+#if 0
+ /* TODO */
+ ATF_TP_ADD_TC(tp, sbuf_new_negative_test);
#endif
ATF_TP_ADD_TC(tp, sbuf_setpos_test);

File Metadata

Mime Type
text/plain
Expires
Mon, May 18, 9:35 AM (12 h, 38 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
33242360
Default Alt Text
D47826.id147120.diff (6 KB)

Event Timeline