Add the test framework of early data

Signed-off-by: Xiaokang Qian <xiaokang.qian@arm.com>
diff --git a/programs/ssl/ssl_client2.c b/programs/ssl/ssl_client2.c
index dfae745..c15a75d 100644
--- a/programs/ssl/ssl_client2.c
+++ b/programs/ssl/ssl_client2.c
@@ -34,6 +34,10 @@
 #define MAX_REQUEST_SIZE      20000
 #define MAX_REQUEST_SIZE_STR "20000"
 
+
+/* the max record size of TLS 1.3 is 2^14 */
+#define MAX_EARLY_DATA_CHUNK_SIZE 16384
+
 #define DFL_SERVER_NAME         "localhost"
 #define DFL_SERVER_ADDR         NULL
 #define DFL_SERVER_PORT         "4433"
@@ -721,6 +725,29 @@
     return ret;
 }
 
+#if defined(MBEDTLS_SSL_EARLY_DATA)
+int ssl_write_early_data(mbedtls_ssl_context *ssl, FILE *fp,
+                         int *early_data_written)
+{
+
+    /* TODO: Will add code of calling mbedtls_ssl_write_early_data()
+     * to write real early data.
+     */
+    unsigned char early_data_buf[MAX_EARLY_DATA_CHUNK_SIZE];
+    unsigned char *p_early_data_start = &early_data_buf[0];
+    unsigned char *p_early_data_end = p_early_data_start +
+                                      MAX_EARLY_DATA_CHUNK_SIZE;
+    ((void) fp);
+    ((void) early_data_buf);
+    ((void) p_early_data_start);
+    ((void) p_early_data_end);
+    ((void) early_data_written);
+
+    return mbedtls_ssl_handshake(ssl);
+
+}
+#endif /* MBEDTLS_SSL_EARLY_DATA */
+
 int main(int argc, char *argv[])
 {
     int ret = 0, len, tail_len, i, written, frags, retry_left;
@@ -3014,7 +3041,14 @@
             goto exit;
         }
 
+#if defined(MBEDTLS_SSL_EARLY_DATA)
+
+        int early_data_written = 0;
+        while ((ret = ssl_write_early_data(&ssl, early_data_fp,
+                                           &early_data_written)) != 0) {
+#else
         while ((ret = mbedtls_ssl_handshake(&ssl)) != 0) {
+#endif
             if (ret != MBEDTLS_ERR_SSL_WANT_READ &&
                 ret != MBEDTLS_ERR_SSL_WANT_WRITE &&
                 ret != MBEDTLS_ERR_SSL_CRYPTO_IN_PROGRESS) {