tests: Deserialise transport tests that exercise timeouts

Allow tests that wait to execute in parallel. This reduces the test
suite run time from ~20 seconds to ~5 seconds.

Change-Id: I9acb86a0ce919b90cc7f923b1e1c922d5614d37d
Signed-off-by: Andrew Jeffery <andrew@codeconstruct.com.au>
diff --git a/tests/meson.build b/tests/meson.build
index 82f7fde..ba538f9 100644
--- a/tests/meson.build
+++ b/tests/meson.build
@@ -27,7 +27,14 @@
 ]
 
 if get_option('abi').contains('testing')
-  tests += [ 'transport' ]
+  tests += [
+    'transport',
+    'transport/send_recv_one',
+    'transport/send_recv_timeout',
+    'transport/send_recv_unwanted',
+    'transport/send_recv_wrong_pldm_type',
+    'transport/send_recv_wrong_command_code'
+  ]
 endif
 
 if get_option('oem-ibm').allowed()
diff --git a/tests/transport.cpp b/tests/transport.cpp
index 93879dc..3fc783f 100644
--- a/tests/transport.cpp
+++ b/tests/transport.cpp
@@ -72,142 +72,6 @@
     pldm_transport_test_destroy(test);
 }
 
-TEST(Transport, send_recv_one)
-{
-    uint8_t req[] = {0x81, 0x00, 0x01, 0x01};
-    uint8_t resp[] = {0x01, 0x00, 0x01, 0x00};
-    const struct pldm_transport_test_descriptor seq[] = {
-        {
-            .type = PLDM_TRANSPORT_TEST_ELEMENT_MSG_SEND,
-            .send_msg =
-                {
-                    .dst = 1,
-                    .msg = req,
-                    .len = sizeof(req),
-                },
-        },
-        {
-            .type = PLDM_TRANSPORT_TEST_ELEMENT_LATENCY,
-            .latency =
-                {
-                    .it_interval = {0, 0},
-                    .it_value = {1, 0},
-                },
-        },
-        {
-            .type = PLDM_TRANSPORT_TEST_ELEMENT_MSG_RECV,
-            .recv_msg =
-                {
-                    .src = 1,
-                    .msg = resp,
-                    .len = sizeof(resp),
-                },
-        },
-    };
-    struct pldm_transport_test* test = NULL;
-    struct pldm_transport* ctx;
-    size_t len;
-    void* msg;
-    int rc;
-
-    EXPECT_EQ(pldm_transport_test_init(&test, seq, ARRAY_SIZE(seq)), 0);
-    ctx = pldm_transport_test_core(test);
-    rc = pldm_transport_send_recv_msg(ctx, 1, req, sizeof(req), &msg, &len);
-    EXPECT_EQ(rc, PLDM_REQUESTER_SUCCESS);
-    EXPECT_EQ(len, sizeof(resp));
-    EXPECT_EQ(memcmp(msg, resp, len), 0);
-    free(msg);
-    pldm_transport_test_destroy(test);
-}
-
-TEST(Transport, send_recv_timeout)
-{
-    uint8_t req[] = {0x81, 0x00, 0x01, 0x01};
-    const struct pldm_transport_test_descriptor seq[] = {
-        {
-            .type = PLDM_TRANSPORT_TEST_ELEMENT_MSG_SEND,
-            .send_msg =
-                {
-                    .dst = 1,
-                    .msg = req,
-                    .len = sizeof(req),
-                },
-        },
-        {
-            .type = PLDM_TRANSPORT_TEST_ELEMENT_LATENCY,
-            .latency =
-                {
-                    .it_interval = {0, 0},
-                    .it_value = {5, 0},
-                },
-        },
-    };
-    struct pldm_transport_test* test = NULL;
-    struct pldm_transport* ctx;
-    size_t len;
-    void* msg;
-    int rc;
-
-    EXPECT_EQ(pldm_transport_test_init(&test, seq, ARRAY_SIZE(seq)), 0);
-    ctx = pldm_transport_test_core(test);
-    rc = pldm_transport_send_recv_msg(ctx, 1, req, sizeof(req), &msg, &len);
-    EXPECT_EQ(rc, PLDM_REQUESTER_RECV_FAIL);
-    pldm_transport_test_destroy(test);
-}
-
-TEST(Transport, send_recv_unwanted)
-{
-    uint8_t req[] = {0x81, 0x00, 0x01, 0x01};
-    uint8_t resp[] = {0x02, 0x00, 0x01, 0x00};
-    const struct pldm_transport_test_descriptor seq[] = {
-        {
-            .type = PLDM_TRANSPORT_TEST_ELEMENT_MSG_SEND,
-            .send_msg =
-                {
-                    .dst = 1,
-                    .msg = req,
-                    .len = sizeof(req),
-                },
-        },
-        {
-            .type = PLDM_TRANSPORT_TEST_ELEMENT_LATENCY,
-            .latency =
-                {
-                    .it_interval = {0, 0},
-                    .it_value = {1, 0},
-                },
-        },
-        {
-            .type = PLDM_TRANSPORT_TEST_ELEMENT_MSG_RECV,
-            .recv_msg =
-                {
-                    .src = 2,
-                    .msg = resp,
-                    .len = sizeof(resp),
-                },
-        },
-        {
-            .type = PLDM_TRANSPORT_TEST_ELEMENT_LATENCY,
-            .latency =
-                {
-                    .it_interval = {0, 0},
-                    .it_value = {4, 0},
-                },
-        },
-    };
-    struct pldm_transport_test* test = NULL;
-    struct pldm_transport* ctx;
-    size_t len;
-    void* msg;
-    int rc;
-
-    EXPECT_EQ(pldm_transport_test_init(&test, seq, ARRAY_SIZE(seq)), 0);
-    ctx = pldm_transport_test_core(test);
-    rc = pldm_transport_send_recv_msg(ctx, 1, req, sizeof(req), &msg, &len);
-    EXPECT_EQ(rc, PLDM_REQUESTER_RECV_FAIL);
-    pldm_transport_test_destroy(test);
-}
-
 TEST(Transport, send_recv_drain_one_unwanted)
 {
     uint8_t unwanted[] = {0x01, 0x00, 0x01, 0x01};
@@ -258,112 +122,6 @@
     pldm_transport_test_destroy(test);
 }
 
-TEST(Transport, send_recv_wrong_pldm_type)
-{
-    uint8_t req[] = {0x81, 0x00, 0x01, 0x01};
-    uint8_t resp[] = {0x01, 0x01, 0x01, 0x00};
-    const struct pldm_transport_test_descriptor seq[] = {
-        {
-            .type = PLDM_TRANSPORT_TEST_ELEMENT_MSG_SEND,
-            .send_msg =
-                {
-                    .dst = 1,
-                    .msg = req,
-                    .len = sizeof(req),
-                },
-        },
-        {
-            .type = PLDM_TRANSPORT_TEST_ELEMENT_LATENCY,
-            .latency =
-                {
-                    .it_interval = {0, 0},
-                    .it_value = {1, 0},
-                },
-        },
-        {
-            .type = PLDM_TRANSPORT_TEST_ELEMENT_MSG_RECV,
-            .recv_msg =
-                {
-                    .src = 2,
-                    .msg = resp,
-                    .len = sizeof(resp),
-                },
-        },
-        {
-            .type = PLDM_TRANSPORT_TEST_ELEMENT_LATENCY,
-            .latency =
-                {
-                    .it_interval = {0, 0},
-                    .it_value = {4, 0},
-                },
-        },
-    };
-    struct pldm_transport_test* test = NULL;
-    struct pldm_transport* ctx;
-    size_t len;
-    void* msg;
-    int rc;
-
-    EXPECT_EQ(pldm_transport_test_init(&test, seq, ARRAY_SIZE(seq)), 0);
-    ctx = pldm_transport_test_core(test);
-    rc = pldm_transport_send_recv_msg(ctx, 1, req, sizeof(req), &msg, &len);
-    EXPECT_EQ(rc, PLDM_REQUESTER_RECV_FAIL);
-    pldm_transport_test_destroy(test);
-}
-
-TEST(Transport, send_recv_wrong_command_code)
-{
-    uint8_t req[] = {0x81, 0x00, 0x01, 0x01};
-    uint8_t resp[] = {0x01, 0x00, 0x02, 0x00};
-    const struct pldm_transport_test_descriptor seq[] = {
-        {
-            .type = PLDM_TRANSPORT_TEST_ELEMENT_MSG_SEND,
-            .send_msg =
-                {
-                    .dst = 1,
-                    .msg = req,
-                    .len = sizeof(req),
-                },
-        },
-        {
-            .type = PLDM_TRANSPORT_TEST_ELEMENT_LATENCY,
-            .latency =
-                {
-                    .it_interval = {0, 0},
-                    .it_value = {1, 0},
-                },
-        },
-        {
-            .type = PLDM_TRANSPORT_TEST_ELEMENT_MSG_RECV,
-            .recv_msg =
-                {
-                    .src = 2,
-                    .msg = resp,
-                    .len = sizeof(resp),
-                },
-        },
-        {
-            .type = PLDM_TRANSPORT_TEST_ELEMENT_LATENCY,
-            .latency =
-                {
-                    .it_interval = {0, 0},
-                    .it_value = {4, 0},
-                },
-        },
-    };
-    struct pldm_transport_test* test = NULL;
-    struct pldm_transport* ctx;
-    size_t len;
-    void* msg;
-    int rc;
-
-    EXPECT_EQ(pldm_transport_test_init(&test, seq, ARRAY_SIZE(seq)), 0);
-    ctx = pldm_transport_test_core(test);
-    rc = pldm_transport_send_recv_msg(ctx, 1, req, sizeof(req), &msg, &len);
-    EXPECT_EQ(rc, PLDM_REQUESTER_RECV_FAIL);
-    pldm_transport_test_destroy(test);
-}
-
 TEST(Transport, send_recv_req_echo)
 {
     uint8_t req[] = {0x81, 0x00, 0x01, 0x01};
diff --git a/tests/transport/send_recv_one.cpp b/tests/transport/send_recv_one.cpp
new file mode 100644
index 0000000..f411e48
--- /dev/null
+++ b/tests/transport/send_recv_one.cpp
@@ -0,0 +1,53 @@
+#include "array.h"
+#include "libpldm/transport.h"
+#include "transport/test.h"
+
+#include <gtest/gtest.h>
+
+TEST(Transport, send_recv_one)
+{
+    uint8_t req[] = {0x81, 0x00, 0x01, 0x01};
+    uint8_t resp[] = {0x01, 0x00, 0x01, 0x00};
+    const struct pldm_transport_test_descriptor seq[] = {
+        {
+            .type = PLDM_TRANSPORT_TEST_ELEMENT_MSG_SEND,
+            .send_msg =
+                {
+                    .dst = 1,
+                    .msg = req,
+                    .len = sizeof(req),
+                },
+        },
+        {
+            .type = PLDM_TRANSPORT_TEST_ELEMENT_LATENCY,
+            .latency =
+                {
+                    .it_interval = {0, 0},
+                    .it_value = {1, 0},
+                },
+        },
+        {
+            .type = PLDM_TRANSPORT_TEST_ELEMENT_MSG_RECV,
+            .recv_msg =
+                {
+                    .src = 1,
+                    .msg = resp,
+                    .len = sizeof(resp),
+                },
+        },
+    };
+    struct pldm_transport_test* test = NULL;
+    struct pldm_transport* ctx;
+    size_t len;
+    void* msg;
+    int rc;
+
+    EXPECT_EQ(pldm_transport_test_init(&test, seq, ARRAY_SIZE(seq)), 0);
+    ctx = pldm_transport_test_core(test);
+    rc = pldm_transport_send_recv_msg(ctx, 1, req, sizeof(req), &msg, &len);
+    EXPECT_EQ(rc, PLDM_REQUESTER_SUCCESS);
+    EXPECT_EQ(len, sizeof(resp));
+    EXPECT_EQ(memcmp(msg, resp, len), 0);
+    free(msg);
+    pldm_transport_test_destroy(test);
+}
diff --git a/tests/transport/send_recv_timeout.cpp b/tests/transport/send_recv_timeout.cpp
new file mode 100644
index 0000000..d2d6853
--- /dev/null
+++ b/tests/transport/send_recv_timeout.cpp
@@ -0,0 +1,40 @@
+#include "array.h"
+#include "libpldm/transport.h"
+#include "transport/test.h"
+
+#include <gtest/gtest.h>
+
+TEST(Transport, send_recv_timeout)
+{
+    uint8_t req[] = {0x81, 0x00, 0x01, 0x01};
+    const struct pldm_transport_test_descriptor seq[] = {
+        {
+            .type = PLDM_TRANSPORT_TEST_ELEMENT_MSG_SEND,
+            .send_msg =
+                {
+                    .dst = 1,
+                    .msg = req,
+                    .len = sizeof(req),
+                },
+        },
+        {
+            .type = PLDM_TRANSPORT_TEST_ELEMENT_LATENCY,
+            .latency =
+                {
+                    .it_interval = {0, 0},
+                    .it_value = {5, 0},
+                },
+        },
+    };
+    struct pldm_transport_test* test = NULL;
+    struct pldm_transport* ctx;
+    size_t len;
+    void* msg;
+    int rc;
+
+    EXPECT_EQ(pldm_transport_test_init(&test, seq, ARRAY_SIZE(seq)), 0);
+    ctx = pldm_transport_test_core(test);
+    rc = pldm_transport_send_recv_msg(ctx, 1, req, sizeof(req), &msg, &len);
+    EXPECT_EQ(rc, PLDM_REQUESTER_RECV_FAIL);
+    pldm_transport_test_destroy(test);
+}
diff --git a/tests/transport/send_recv_unwanted.cpp b/tests/transport/send_recv_unwanted.cpp
new file mode 100644
index 0000000..7b3ebff
--- /dev/null
+++ b/tests/transport/send_recv_unwanted.cpp
@@ -0,0 +1,58 @@
+#include "array.h"
+#include "libpldm/transport.h"
+#include "transport/test.h"
+
+#include <gtest/gtest.h>
+
+TEST(Transport, send_recv_unwanted)
+{
+    uint8_t req[] = {0x81, 0x00, 0x01, 0x01};
+    uint8_t resp[] = {0x02, 0x00, 0x01, 0x00};
+    const struct pldm_transport_test_descriptor seq[] = {
+        {
+            .type = PLDM_TRANSPORT_TEST_ELEMENT_MSG_SEND,
+            .send_msg =
+                {
+                    .dst = 1,
+                    .msg = req,
+                    .len = sizeof(req),
+                },
+        },
+        {
+            .type = PLDM_TRANSPORT_TEST_ELEMENT_LATENCY,
+            .latency =
+                {
+                    .it_interval = {0, 0},
+                    .it_value = {1, 0},
+                },
+        },
+        {
+            .type = PLDM_TRANSPORT_TEST_ELEMENT_MSG_RECV,
+            .recv_msg =
+                {
+                    .src = 2,
+                    .msg = resp,
+                    .len = sizeof(resp),
+                },
+        },
+        {
+            .type = PLDM_TRANSPORT_TEST_ELEMENT_LATENCY,
+            .latency =
+                {
+                    .it_interval = {0, 0},
+                    .it_value = {4, 0},
+                },
+        },
+    };
+    struct pldm_transport_test* test = NULL;
+    struct pldm_transport* ctx;
+    size_t len;
+    void* msg;
+    int rc;
+
+    EXPECT_EQ(pldm_transport_test_init(&test, seq, ARRAY_SIZE(seq)), 0);
+    ctx = pldm_transport_test_core(test);
+    rc = pldm_transport_send_recv_msg(ctx, 1, req, sizeof(req), &msg, &len);
+    EXPECT_EQ(rc, PLDM_REQUESTER_RECV_FAIL);
+    pldm_transport_test_destroy(test);
+}
diff --git a/tests/transport/send_recv_wrong_command_code.cpp b/tests/transport/send_recv_wrong_command_code.cpp
new file mode 100644
index 0000000..f40a82a
--- /dev/null
+++ b/tests/transport/send_recv_wrong_command_code.cpp
@@ -0,0 +1,58 @@
+#include "array.h"
+#include "libpldm/transport.h"
+#include "transport/test.h"
+
+#include <gtest/gtest.h>
+
+TEST(Transport, send_recv_wrong_command_code)
+{
+    uint8_t req[] = {0x81, 0x00, 0x01, 0x01};
+    uint8_t resp[] = {0x01, 0x00, 0x02, 0x00};
+    const struct pldm_transport_test_descriptor seq[] = {
+        {
+            .type = PLDM_TRANSPORT_TEST_ELEMENT_MSG_SEND,
+            .send_msg =
+                {
+                    .dst = 1,
+                    .msg = req,
+                    .len = sizeof(req),
+                },
+        },
+        {
+            .type = PLDM_TRANSPORT_TEST_ELEMENT_LATENCY,
+            .latency =
+                {
+                    .it_interval = {0, 0},
+                    .it_value = {1, 0},
+                },
+        },
+        {
+            .type = PLDM_TRANSPORT_TEST_ELEMENT_MSG_RECV,
+            .recv_msg =
+                {
+                    .src = 2,
+                    .msg = resp,
+                    .len = sizeof(resp),
+                },
+        },
+        {
+            .type = PLDM_TRANSPORT_TEST_ELEMENT_LATENCY,
+            .latency =
+                {
+                    .it_interval = {0, 0},
+                    .it_value = {4, 0},
+                },
+        },
+    };
+    struct pldm_transport_test* test = NULL;
+    struct pldm_transport* ctx;
+    size_t len;
+    void* msg;
+    int rc;
+
+    EXPECT_EQ(pldm_transport_test_init(&test, seq, ARRAY_SIZE(seq)), 0);
+    ctx = pldm_transport_test_core(test);
+    rc = pldm_transport_send_recv_msg(ctx, 1, req, sizeof(req), &msg, &len);
+    EXPECT_EQ(rc, PLDM_REQUESTER_RECV_FAIL);
+    pldm_transport_test_destroy(test);
+}
diff --git a/tests/transport/send_recv_wrong_pldm_type.cpp b/tests/transport/send_recv_wrong_pldm_type.cpp
new file mode 100644
index 0000000..e57207d
--- /dev/null
+++ b/tests/transport/send_recv_wrong_pldm_type.cpp
@@ -0,0 +1,58 @@
+#include "array.h"
+#include "libpldm/transport.h"
+#include "transport/test.h"
+
+#include <gtest/gtest.h>
+
+TEST(Transport, send_recv_wrong_pldm_type)
+{
+    uint8_t req[] = {0x81, 0x00, 0x01, 0x01};
+    uint8_t resp[] = {0x01, 0x01, 0x01, 0x00};
+    const struct pldm_transport_test_descriptor seq[] = {
+        {
+            .type = PLDM_TRANSPORT_TEST_ELEMENT_MSG_SEND,
+            .send_msg =
+                {
+                    .dst = 1,
+                    .msg = req,
+                    .len = sizeof(req),
+                },
+        },
+        {
+            .type = PLDM_TRANSPORT_TEST_ELEMENT_LATENCY,
+            .latency =
+                {
+                    .it_interval = {0, 0},
+                    .it_value = {1, 0},
+                },
+        },
+        {
+            .type = PLDM_TRANSPORT_TEST_ELEMENT_MSG_RECV,
+            .recv_msg =
+                {
+                    .src = 2,
+                    .msg = resp,
+                    .len = sizeof(resp),
+                },
+        },
+        {
+            .type = PLDM_TRANSPORT_TEST_ELEMENT_LATENCY,
+            .latency =
+                {
+                    .it_interval = {0, 0},
+                    .it_value = {4, 0},
+                },
+        },
+    };
+    struct pldm_transport_test* test = NULL;
+    struct pldm_transport* ctx;
+    size_t len;
+    void* msg;
+    int rc;
+
+    EXPECT_EQ(pldm_transport_test_init(&test, seq, ARRAY_SIZE(seq)), 0);
+    ctx = pldm_transport_test_core(test);
+    rc = pldm_transport_send_recv_msg(ctx, 1, req, sizeof(req), &msg, &len);
+    EXPECT_EQ(rc, PLDM_REQUESTER_RECV_FAIL);
+    pldm_transport_test_destroy(test);
+}