@@ -28611,6 +28611,7 @@ static int test_wolfSSL_DtlsUpdateWindow(void)
2861128611static int DFB_TEST(WOLFSSL* ssl, word32 seq, word32 len, word32 f_offset,
2861228612 word32 f_len, word32 f_count, byte ready, word32 bytesReceived)
2861328613{
28614+ EXPECT_DECLS;
2861428615 DtlsMsg* cur;
2861528616 static byte msg[100];
2861628617 static byte msgInit = 0;
@@ -28623,40 +28624,33 @@ static int DFB_TEST(WOLFSSL* ssl, word32 seq, word32 len, word32 f_offset,
2862328624 }
2862428625
2862528626 /* Sanitize test parameters */
28626- if (len > sizeof(msg))
28627- return -1;
28628- if (f_offset + f_len > sizeof(msg))
28629- return -1;
28627+ ExpectIntLE(len, sizeof(msg));
28628+ ExpectIntLE(f_offset + f_len, sizeof(msg));
2863028629
28631- DtlsMsgStore(ssl, 0, seq, msg + f_offset, len, certificate, f_offset, f_len, NULL);
28630+ if (EXPECT_SUCCESS())
28631+ DtlsMsgStore(ssl, 0, seq, msg + f_offset, len, certificate, f_offset, f_len, NULL);
2863228632
28633- if (ssl->dtls_rx_msg_list == NULL)
28634- return -100;
28633+ ExpectNotNull(ssl->dtls_rx_msg_list);
2863528634
28636- if ((cur = DtlsMsgFind(ssl->dtls_rx_msg_list, 0, seq)) == NULL)
28637- return -200;
28638- if (cur->fragBucketListCount != f_count)
28639- return -300;
28640- if (cur->ready != ready)
28641- return -400;
28642- if (cur->bytesReceived != bytesReceived)
28643- return -500;
28635+ ExpectNotNull(cur = DtlsMsgFind(ssl->dtls_rx_msg_list, 0, seq));
28636+ ExpectIntEQ(cur->fragBucketListCount, f_count);
28637+ ExpectIntEQ(cur->ready, ready);
28638+ ExpectIntEQ(cur->bytesReceived, bytesReceived);
2864428639 if (ready) {
28645- if (cur->fragBucketList != NULL)
28646- return -600;
28647- if (XMEMCMP(cur->fullMsg, msg, cur->sz) != 0)
28648- return -700;
28640+ ExpectNull(cur->fragBucketList);
28641+ ExpectBufEQ(cur->fullMsg, msg, cur->sz);
2864928642 }
2865028643 else {
2865128644 DtlsFragBucket* fb;
28652- if (cur->fragBucketList == NULL)
28653- return -800;
28654- for (fb = cur->fragBucketList; fb != NULL; fb = fb->m.m.next) {
28655- if (XMEMCMP(fb->buf, msg + fb->m.m.offset, fb->m.m.sz) != 0)
28656- return -900;
28657- }
28645+ ExpectNotNull(cur->fragBucketList);
28646+ for (fb = cur->fragBucketList; EXPECT_SUCCESS() && fb != NULL; fb = fb->m.m.next)
28647+ ExpectBufEQ(fb->buf, msg + fb->m.m.offset, fb->m.m.sz);
2865828648 }
28659- return 0;
28649+ if (EXPECT_FAIL()) {
28650+ printf("Test parameters: seq %u len %u f_offset %u f_len %u f_count %u ready %u bytesReceived %u\n",
28651+ seq, len, f_offset, f_len, f_count, ready, bytesReceived);
28652+ }
28653+ return EXPECT_RESULT();
2866028654}
2866128655
2866228656static int test_wolfSSL_DTLS_fragment_buckets(void)
@@ -28666,68 +28660,114 @@ static int test_wolfSSL_DTLS_fragment_buckets(void)
2866628660
2866728661 XMEMSET(ssl, 0, sizeof(*ssl));
2866828662
28669- ExpectIntEQ (DFB_TEST(ssl, 0, 100, 0, 100, 0, 1, 100), 0 ); /* 0-100 */
28663+ EXPECT_TEST (DFB_TEST(ssl, 0, 100, 0, 100, 0, 1, 100)); /* 0-100 */
2867028664
28671- ExpectIntEQ (DFB_TEST(ssl, 1, 100, 0, 20, 1, 0, 20), 0 ); /* 0-20 */
28672- ExpectIntEQ (DFB_TEST(ssl, 1, 100, 20, 20, 1, 0, 40), 0 ); /* 20-40 */
28673- ExpectIntEQ (DFB_TEST(ssl, 1, 100, 40, 20, 1, 0, 60), 0 ); /* 40-60 */
28674- ExpectIntEQ (DFB_TEST(ssl, 1, 100, 60, 20, 1, 0, 80), 0 ); /* 60-80 */
28675- ExpectIntEQ (DFB_TEST(ssl, 1, 100, 80, 20, 0, 1, 100), 0 ); /* 80-100 */
28665+ EXPECT_TEST (DFB_TEST(ssl, 1, 100, 0, 20, 1, 0, 20)); /* 0-20 */
28666+ EXPECT_TEST (DFB_TEST(ssl, 1, 100, 20, 20, 1, 0, 40)); /* 20-40 */
28667+ EXPECT_TEST (DFB_TEST(ssl, 1, 100, 40, 20, 1, 0, 60)); /* 40-60 */
28668+ EXPECT_TEST (DFB_TEST(ssl, 1, 100, 60, 20, 1, 0, 80)); /* 60-80 */
28669+ EXPECT_TEST (DFB_TEST(ssl, 1, 100, 80, 20, 0, 1, 100)); /* 80-100 */
2867628670
2867728671 /* Test all permutations of 3 regions */
2867828672 /* 1 2 3 */
28679- ExpectIntEQ (DFB_TEST(ssl, 2, 100, 0, 30, 1, 0, 30), 0 ); /* 0-30 */
28680- ExpectIntEQ (DFB_TEST(ssl, 2, 100, 30, 30, 1, 0, 60), 0 ); /* 30-60 */
28681- ExpectIntEQ (DFB_TEST(ssl, 2, 100, 60, 40, 0, 1, 100), 0 ); /* 60-100 */
28673+ EXPECT_TEST (DFB_TEST(ssl, 2, 100, 0, 30, 1, 0, 30)); /* 0-30 */
28674+ EXPECT_TEST (DFB_TEST(ssl, 2, 100, 30, 30, 1, 0, 60)); /* 30-60 */
28675+ EXPECT_TEST (DFB_TEST(ssl, 2, 100, 60, 40, 0, 1, 100)); /* 60-100 */
2868228676 /* 1 3 2 */
28683- ExpectIntEQ (DFB_TEST(ssl, 3, 100, 0, 30, 1, 0, 30), 0 ); /* 0-30 */
28684- ExpectIntEQ (DFB_TEST(ssl, 3, 100, 60, 40, 2, 0, 70), 0 ); /* 60-100 */
28685- ExpectIntEQ (DFB_TEST(ssl, 3, 100, 30, 30, 0, 1, 100), 0 ); /* 30-60 */
28677+ EXPECT_TEST (DFB_TEST(ssl, 3, 100, 0, 30, 1, 0, 30)); /* 0-30 */
28678+ EXPECT_TEST (DFB_TEST(ssl, 3, 100, 60, 40, 2, 0, 70)); /* 60-100 */
28679+ EXPECT_TEST (DFB_TEST(ssl, 3, 100, 30, 30, 0, 1, 100)); /* 30-60 */
2868628680 /* 2 1 3 */
28687- ExpectIntEQ (DFB_TEST(ssl, 4, 100, 30, 30, 1, 0, 30), 0 ); /* 30-60 */
28688- ExpectIntEQ (DFB_TEST(ssl, 4, 100, 0, 30, 1, 0, 60), 0 ); /* 0-30 */
28689- ExpectIntEQ (DFB_TEST(ssl, 4, 100, 60, 40, 0, 1, 100), 0 ); /* 60-100 */
28681+ EXPECT_TEST (DFB_TEST(ssl, 4, 100, 30, 30, 1, 0, 30)); /* 30-60 */
28682+ EXPECT_TEST (DFB_TEST(ssl, 4, 100, 0, 30, 1, 0, 60)); /* 0-30 */
28683+ EXPECT_TEST (DFB_TEST(ssl, 4, 100, 60, 40, 0, 1, 100)); /* 60-100 */
2869028684 /* 2 3 1 */
28691- ExpectIntEQ (DFB_TEST(ssl, 5, 100, 30, 30, 1, 0, 30), 0 ); /* 30-60 */
28692- ExpectIntEQ (DFB_TEST(ssl, 5, 100, 60, 40, 1, 0, 70), 0 ); /* 60-100 */
28693- ExpectIntEQ (DFB_TEST(ssl, 5, 100, 0, 30, 0, 1, 100), 0 ); /* 0-30 */
28685+ EXPECT_TEST (DFB_TEST(ssl, 5, 100, 30, 30, 1, 0, 30)); /* 30-60 */
28686+ EXPECT_TEST (DFB_TEST(ssl, 5, 100, 60, 40, 1, 0, 70)); /* 60-100 */
28687+ EXPECT_TEST (DFB_TEST(ssl, 5, 100, 0, 30, 0, 1, 100)); /* 0-30 */
2869428688 /* 3 1 2 */
28695- ExpectIntEQ (DFB_TEST(ssl, 6, 100, 60, 40, 1, 0, 40), 0 ); /* 60-100 */
28696- ExpectIntEQ (DFB_TEST(ssl, 6, 100, 0, 30, 2, 0, 70), 0 ); /* 0-30 */
28697- ExpectIntEQ (DFB_TEST(ssl, 6, 100, 30, 30, 0, 1, 100), 0 ); /* 30-60 */
28689+ EXPECT_TEST (DFB_TEST(ssl, 6, 100, 60, 40, 1, 0, 40)); /* 60-100 */
28690+ EXPECT_TEST (DFB_TEST(ssl, 6, 100, 0, 30, 2, 0, 70)); /* 0-30 */
28691+ EXPECT_TEST (DFB_TEST(ssl, 6, 100, 30, 30, 0, 1, 100)); /* 30-60 */
2869828692 /* 3 2 1 */
28699- ExpectIntEQ (DFB_TEST(ssl, 7, 100, 60, 40, 1, 0, 40), 0 ); /* 60-100 */
28700- ExpectIntEQ (DFB_TEST(ssl, 7, 100, 30, 30, 1, 0, 70), 0 ); /* 30-60 */
28701- ExpectIntEQ (DFB_TEST(ssl, 7, 100, 0, 30, 0, 1, 100), 0 ); /* 0-30 */
28693+ EXPECT_TEST (DFB_TEST(ssl, 7, 100, 60, 40, 1, 0, 40)); /* 60-100 */
28694+ EXPECT_TEST (DFB_TEST(ssl, 7, 100, 30, 30, 1, 0, 70)); /* 30-60 */
28695+ EXPECT_TEST (DFB_TEST(ssl, 7, 100, 0, 30, 0, 1, 100)); /* 0-30 */
2870228696
2870328697 /* Test overlapping regions */
28704- ExpectIntEQ (DFB_TEST(ssl, 8, 100, 0, 30, 1, 0, 30), 0 ); /* 0-30 */
28705- ExpectIntEQ (DFB_TEST(ssl, 8, 100, 20, 10, 1, 0, 30), 0 ); /* 20-30 */
28706- ExpectIntEQ (DFB_TEST(ssl, 8, 100, 70, 10, 2, 0, 40), 0 ); /* 70-80 */
28707- ExpectIntEQ (DFB_TEST(ssl, 8, 100, 20, 30, 2, 0, 60), 0 ); /* 20-50 */
28708- ExpectIntEQ (DFB_TEST(ssl, 8, 100, 40, 60, 0, 1, 100), 0 ); /* 40-100 */
28698+ EXPECT_TEST (DFB_TEST(ssl, 8, 100, 0, 30, 1, 0, 30)); /* 0-30 */
28699+ EXPECT_TEST (DFB_TEST(ssl, 8, 100, 20, 10, 1, 0, 30)); /* 20-30 */
28700+ EXPECT_TEST (DFB_TEST(ssl, 8, 100, 70, 10, 2, 0, 40)); /* 70-80 */
28701+ EXPECT_TEST (DFB_TEST(ssl, 8, 100, 20, 30, 2, 0, 60)); /* 20-50 */
28702+ EXPECT_TEST (DFB_TEST(ssl, 8, 100, 40, 60, 0, 1, 100)); /* 40-100 */
2870928703
2871028704 /* Test overlapping multiple regions */
28711- ExpectIntEQ(DFB_TEST(ssl, 9, 100, 0, 20, 1, 0, 20), 0); /* 0-20 */
28712- ExpectIntEQ(DFB_TEST(ssl, 9, 100, 30, 5, 2, 0, 25), 0); /* 30-35 */
28713- ExpectIntEQ(DFB_TEST(ssl, 9, 100, 40, 5, 3, 0, 30), 0); /* 40-45 */
28714- ExpectIntEQ(DFB_TEST(ssl, 9, 100, 50, 5, 4, 0, 35), 0); /* 50-55 */
28715- ExpectIntEQ(DFB_TEST(ssl, 9, 100, 60, 5, 5, 0, 40), 0); /* 60-65 */
28716- ExpectIntEQ(DFB_TEST(ssl, 9, 100, 70, 5, 6, 0, 45), 0); /* 70-75 */
28717- ExpectIntEQ(DFB_TEST(ssl, 9, 100, 30, 25, 4, 0, 55), 0); /* 30-55 */
28718- ExpectIntEQ(DFB_TEST(ssl, 9, 100, 55, 15, 2, 0, 65), 0); /* 55-70 */
28719- ExpectIntEQ(DFB_TEST(ssl, 9, 100, 75, 25, 2, 0, 90), 0); /* 75-100 */
28720- ExpectIntEQ(DFB_TEST(ssl, 9, 100, 10, 25, 0, 1, 100), 0); /* 10-35 */
28721-
28722- ExpectIntEQ(DFB_TEST(ssl, 10, 100, 0, 20, 1, 0, 20), 0); /* 0-20 */
28723- ExpectIntEQ(DFB_TEST(ssl, 10, 100, 30, 20, 2, 0, 40), 0); /* 30-50 */
28724- ExpectIntEQ(DFB_TEST(ssl, 10, 100, 0, 40, 1, 0, 50), 0); /* 0-40 */
28725- ExpectIntEQ(DFB_TEST(ssl, 10, 100, 50, 50, 0, 1, 100), 0); /* 10-35 */
28705+ EXPECT_TEST(DFB_TEST(ssl, 9, 100, 0, 20, 1, 0, 20)); /* 0-20 */
28706+ EXPECT_TEST(DFB_TEST(ssl, 9, 100, 30, 5, 2, 0, 25)); /* 30-35 */
28707+ EXPECT_TEST(DFB_TEST(ssl, 9, 100, 40, 5, 3, 0, 30)); /* 40-45 */
28708+ EXPECT_TEST(DFB_TEST(ssl, 9, 100, 50, 5, 4, 0, 35)); /* 50-55 */
28709+ EXPECT_TEST(DFB_TEST(ssl, 9, 100, 60, 5, 5, 0, 40)); /* 60-65 */
28710+ EXPECT_TEST(DFB_TEST(ssl, 9, 100, 70, 5, 6, 0, 45)); /* 70-75 */
28711+ EXPECT_TEST(DFB_TEST(ssl, 9, 100, 30, 25, 4, 0, 55)); /* 30-55 */
28712+ EXPECT_TEST(DFB_TEST(ssl, 9, 100, 55, 15, 2, 0, 65)); /* 55-70 */
28713+ EXPECT_TEST(DFB_TEST(ssl, 9, 100, 75, 25, 2, 0, 90)); /* 75-100 */
28714+ EXPECT_TEST(DFB_TEST(ssl, 9, 100, 10, 25, 0, 1, 100)); /* 10-35 */
28715+
28716+ EXPECT_TEST(DFB_TEST(ssl,10, 100, 0, 20, 1, 0, 20)); /* 0-20 */
28717+ EXPECT_TEST(DFB_TEST(ssl,10, 100, 30, 20, 2, 0, 40)); /* 30-50 */
28718+ EXPECT_TEST(DFB_TEST(ssl,10, 100, 0, 40, 1, 0, 50)); /* 0-40 */
28719+ EXPECT_TEST(DFB_TEST(ssl,10, 100, 50, 50, 0, 1, 100)); /* 50-100 */
28720+
28721+ /* Test region between other regions */
28722+ EXPECT_TEST(DFB_TEST(ssl,11, 100, 0, 20, 1, 0, 20)); /* 0-20 */
28723+ EXPECT_TEST(DFB_TEST(ssl,11, 100, 80, 20, 2, 0, 40)); /* 80-100 */
28724+ EXPECT_TEST(DFB_TEST(ssl,11, 100, 40, 20, 3, 0, 60)); /* 40-60 */
28725+ EXPECT_TEST(DFB_TEST(ssl,11, 100, 20, 20, 2, 0, 80)); /* 20-40 */
28726+ EXPECT_TEST(DFB_TEST(ssl,11, 100, 60, 20, 0, 1, 100)); /* 60-80 */
28727+
28728+ /* Test gap before first bucket (prev==NULL in gap-before branch) */
28729+ EXPECT_TEST(DFB_TEST(ssl,12, 100, 50, 20, 1, 0, 20)); /* 50-70 */
28730+ EXPECT_TEST(DFB_TEST(ssl,12, 100, 0, 20, 2, 0, 40)); /* 0-20 gap before first */
28731+ EXPECT_TEST(DFB_TEST(ssl,12, 100, 20, 30, 1, 0, 70)); /* 20-50 bridges gap */
28732+ EXPECT_TEST(DFB_TEST(ssl,12, 100, 70, 30, 0, 1, 100)); /* 70-100 */
28733+
28734+ /* Test fragment after message is already complete (ready early return) */
28735+ EXPECT_TEST(DFB_TEST(ssl,13, 100, 0,100, 0, 1, 100)); /* 0-100 complete */
28736+ EXPECT_TEST(DFB_TEST(ssl,13, 100, 0, 50, 0, 1, 100)); /* 0-50 dup on ready */
28737+
28738+ /* Test combine where next bucket is larger than cur (chosenBucket=&next) */
28739+ EXPECT_TEST(DFB_TEST(ssl,14, 100, 0, 10, 1, 0, 10)); /* 0-10 */
28740+ EXPECT_TEST(DFB_TEST(ssl,14, 100, 30, 50, 2, 0, 60)); /* 30-80 */
28741+ EXPECT_TEST(DFB_TEST(ssl,14, 100, 5, 30, 1, 0, 80)); /* 5-35 next>cur */
28742+ EXPECT_TEST(DFB_TEST(ssl,14, 100, 80, 20, 0, 1, 100)); /* 80-100 */
28743+
28744+ /* Test super fragment covering all existing buckets */
28745+ EXPECT_TEST(DFB_TEST(ssl,15, 100, 10, 10, 1, 0, 10)); /* 10-20 */
28746+ EXPECT_TEST(DFB_TEST(ssl,15, 100, 30, 10, 2, 0, 20)); /* 30-40 */
28747+ EXPECT_TEST(DFB_TEST(ssl,15, 100, 60, 10, 3, 0, 30)); /* 60-70 */
28748+ EXPECT_TEST(DFB_TEST(ssl,15, 100, 0,100, 0, 1, 100)); /* 0-100 super frag */
28749+
28750+ /* Test exact duplicate fragment */
28751+ EXPECT_TEST(DFB_TEST(ssl,16, 100, 20, 40, 1, 0, 40)); /* 20-60 */
28752+ EXPECT_TEST(DFB_TEST(ssl,16, 100, 20, 40, 1, 0, 40)); /* 20-60 exact dup */
28753+ EXPECT_TEST(DFB_TEST(ssl,16, 100, 0, 20, 1, 0, 60)); /* 0-20 */
28754+ EXPECT_TEST(DFB_TEST(ssl,16, 100, 60, 40, 0, 1, 100)); /* 60-100 */
28755+
28756+ /* Test combine bridging two buckets (combineNext, cur->data) */
28757+ EXPECT_TEST(DFB_TEST(ssl,17, 100, 0, 30, 1, 0, 30)); /* 0-30 */
28758+ EXPECT_TEST(DFB_TEST(ssl,17, 100, 60, 20, 2, 0, 50)); /* 60-80 */
28759+ EXPECT_TEST(DFB_TEST(ssl,17, 100, 20, 45, 1, 0, 80)); /* 20-65 bridge */
28760+ EXPECT_TEST(DFB_TEST(ssl,17, 100, 80, 20, 0, 1, 100)); /* 80-100 */
28761+
28762+ /* Test progressive left-extension with partial overlaps */
28763+ EXPECT_TEST(DFB_TEST(ssl,18, 100, 70, 30, 1, 0, 30)); /* 70-100 */
28764+ EXPECT_TEST(DFB_TEST(ssl,18, 100, 50, 30, 1, 0, 50)); /* 50-80 extend left */
28765+ EXPECT_TEST(DFB_TEST(ssl,18, 100, 30, 30, 1, 0, 70)); /* 30-60 extend left */
28766+ EXPECT_TEST(DFB_TEST(ssl,18, 100, 0, 40, 0, 1, 100)); /* 0-40 complete left */
2872628767
2872728768 DtlsMsgListDelete(ssl->dtls_rx_msg_list, ssl->heap);
2872828769 ssl->dtls_rx_msg_list = NULL;
2872928770 ssl->dtls_rx_msg_list_sz = 0;
28730-
2873128771 return EXPECT_RESULT();
2873228772}
2873328773
0 commit comments