diff --git a/tests/suites/test_suite_ssl.data b/tests/suites/test_suite_ssl.data
index 03de4a9..f3d9ef0 100644
--- a/tests/suites/test_suite_ssl.data
+++ b/tests/suites/test_suite_ssl.data
@@ -3311,28 +3311,37 @@
 tls13_write_early_data:TEST_EARLY_DATA_HRR
 
 TLS 1.3 srv, max early data size, default
-tls13_srv_max_early_data_size:TEST_EARLY_DATA_ACCEPTED:-1
+tls13_srv_max_early_data_size:TEST_EARLY_DATA_ACCEPTED:-1:0
+
+TLS 1.3 srv, max early data size, default, reach max
+tls13_srv_max_early_data_size:TEST_EARLY_DATA_ACCEPTED:-1:1
 
 TLS 1.3 srv, max early data size, max=3 (small but !0)
-tls13_srv_max_early_data_size:TEST_EARLY_DATA_ACCEPTED:3
+tls13_srv_max_early_data_size:TEST_EARLY_DATA_ACCEPTED:3:0
+
+TLS 1.3 srv, max early data size, max=3 (small but !0), reach max
+tls13_srv_max_early_data_size:TEST_EARLY_DATA_ACCEPTED:3:1
 
 TLS 1.3 srv, max early data size, max=97
-tls13_srv_max_early_data_size:TEST_EARLY_DATA_ACCEPTED:97
+tls13_srv_max_early_data_size:TEST_EARLY_DATA_ACCEPTED:97:0
+
+TLS 1.3 srv, max early data size, max=97, reach max
+tls13_srv_max_early_data_size:TEST_EARLY_DATA_ACCEPTED:97:1
 
 TLS 1.3 srv, max early data size, server rejects, default
-tls13_srv_max_early_data_size:TEST_EARLY_DATA_SERVER_REJECTS:-1
+tls13_srv_max_early_data_size:TEST_EARLY_DATA_SERVER_REJECTS:-1:0
 
 TLS 1.3 srv, max early data size, server rejects, max=3 (very small)
-tls13_srv_max_early_data_size:TEST_EARLY_DATA_SERVER_REJECTS:3
+tls13_srv_max_early_data_size:TEST_EARLY_DATA_SERVER_REJECTS:3:0
 
 TLS 1.3 srv, max early data size, server rejects, max=97
-tls13_srv_max_early_data_size:TEST_EARLY_DATA_SERVER_REJECTS:97
+tls13_srv_max_early_data_size:TEST_EARLY_DATA_SERVER_REJECTS:97:0
 
 TLS 1.3 srv, max early data size, HRR, default
-tls13_srv_max_early_data_size:TEST_EARLY_DATA_HRR:-1
+tls13_srv_max_early_data_size:TEST_EARLY_DATA_HRR:-1:0
 
 TLS 1.3 srv, max early data size, HRR, max=3 (very small)
-tls13_srv_max_early_data_size:TEST_EARLY_DATA_HRR:3
+tls13_srv_max_early_data_size:TEST_EARLY_DATA_HRR:3:0
 
 TLS 1.3 srv, max early data size, HRR, max=97
-tls13_srv_max_early_data_size:TEST_EARLY_DATA_HRR:97
+tls13_srv_max_early_data_size:TEST_EARLY_DATA_HRR:97:0
diff --git a/tests/suites/test_suite_ssl.function b/tests/suites/test_suite_ssl.function
index fc1bc3e..5f6029e 100644
--- a/tests/suites/test_suite_ssl.function
+++ b/tests/suites/test_suite_ssl.function
@@ -4455,7 +4455,7 @@
  * an issue with mbedtls_vsnprintf().
  */
 /* BEGIN_CASE depends_on:!MBEDTLS_SSL_PROTO_TLS1_2:MBEDTLS_SSL_EARLY_DATA:MBEDTLS_SSL_CLI_C:MBEDTLS_SSL_SRV_C:MBEDTLS_DEBUG_C:MBEDTLS_TEST_AT_LEAST_ONE_TLS1_3_CIPHERSUITE:MBEDTLS_SSL_TLS1_3_KEY_EXCHANGE_MODE_EPHEMERAL_ENABLED:MBEDTLS_SSL_TLS1_3_KEY_EXCHANGE_MODE_PSK_EPHEMERAL_ENABLED:MBEDTLS_MD_CAN_SHA256:MBEDTLS_ECP_HAVE_SECP256R1:MBEDTLS_ECP_HAVE_SECP384R1:MBEDTLS_PK_CAN_ECDSA_VERIFY:MBEDTLS_SSL_SESSION_TICKETS */
-void tls13_srv_max_early_data_size(int scenario, int max_early_data_size_arg)
+void tls13_srv_max_early_data_size(int scenario, int max_early_data_size_arg, int reach_max)
 {
     int ret = -1;
     mbedtls_test_ssl_endpoint client_ep, server_ep;
@@ -4470,7 +4470,7 @@
     };
     char pattern[128];
     unsigned char buf_write[64];
-    size_t early_data_len = sizeof(buf_write);
+    size_t early_data_len;
     uint32_t expended_early_data_len = 0;
     uint32_t written_early_data_size = 0;
     int write_early_data_flag = 1;
@@ -4485,6 +4485,14 @@
     PSA_INIT();
 
     /*
+     * Reach maximum early data size exactly option only available in case of
+     * TEST_EARLY_DATA_ACCEPTED scenario.
+     */
+    if (reach_max) {
+        TEST_EQUAL(scenario, TEST_EARLY_DATA_ACCEPTED);
+    }
+
+    /*
      * Run first handshake to get a ticket from the server.
      */
 
@@ -4577,10 +4585,24 @@
         uint32_t remaining = max_early_data_size -
                              server_ep.ssl.early_data_count;
 
-        /* In case of accepted early data, reach max_early_data_size exactly. */
+        early_data_len = sizeof(buf_write);
+        /*
+         * Adjust the length of next data to write depending on the remaining
+         * number of early data bytes we are allowed to write and if we want
+         * to reach the maximum exactly or not.
+         */
         if (early_data_len >= remaining) {
-            early_data_len = remaining;
-            write_early_data_flag = 0;
+            if (reach_max) {
+                early_data_len = remaining;
+                write_early_data_flag = 0;
+            } else {
+                if (early_data_len == remaining) {
+                    early_data_len /= 2;
+                } else {
+                    early_data_len = remaining + 1;
+                    break;
+                }
+            }
         }
 
         for (size_t i = 0; i < early_data_len; i++) {
@@ -4643,8 +4665,9 @@
 
     mbedtls_debug_set_threshold(3);
 
-    early_data_len = (scenario == TEST_EARLY_DATA_ACCEPTED) ?
-                     1 : sizeof(buf_write);
+    if (reach_max) {
+        TEST_EQUAL(server_ep.ssl.early_data_count, max_early_data_size);
+    }
 
     ret = write_early_data(&(client_ep.ssl), buf_write, early_data_len);
     TEST_EQUAL(ret, early_data_len);
