test_astlpc: Add network_{init,destroy}() helpers
Make it easy to set up two endpoints that have completed the binding
initialisation sequence and a ready to send messages.
Signed-off-by: Andrew Jeffery <andrew@aj.id.au>
Change-Id: I0efa8fdd69e1635adfa84823ba0402023b643216
diff --git a/tests/test_astlpc.c b/tests/test_astlpc.c
index 9e77b9e..e95673a 100644
--- a/tests/test_astlpc.c
+++ b/tests/test_astlpc.c
@@ -172,13 +172,48 @@
mctp_destroy(ep->mctp);
}
+struct astlpc_test {
+ struct astlpc_endpoint bmc;
+ struct astlpc_endpoint host;
+ uint8_t kcs[2];
+ uint8_t *lpc_mem;
+};
+
+static void network_init(struct astlpc_test *ctx)
+{
+ const size_t lpc_size = 1 * 1024 * 1024;
+
+ ctx->lpc_mem = calloc(1, lpc_size);
+ assert(ctx->lpc_mem);
+
+ /* BMC initialisation */
+ endpoint_init(&ctx->bmc, 8, MCTP_BINDING_ASTLPC_MODE_BMC, &ctx->kcs,
+ ctx->lpc_mem, lpc_size);
+
+ /* Host initialisation */
+ endpoint_init(&ctx->host, 9, MCTP_BINDING_ASTLPC_MODE_HOST, &ctx->kcs,
+ ctx->lpc_mem, lpc_size);
+
+ /* BMC processes host channel init request, alerts host */
+ mctp_astlpc_poll(ctx->bmc.astlpc);
+ assert(ctx->kcs[KCS_REG_STATUS] & KCS_STATUS_CHANNEL_ACTIVE);
+ assert(ctx->kcs[KCS_REG_DATA] == 0xff);
+
+ /* Host dequeues channel init result */
+ mctp_astlpc_poll(ctx->host.astlpc);
+}
+
+static void network_destroy(struct astlpc_test *ctx)
+{
+ endpoint_destroy(&ctx->bmc);
+ endpoint_destroy(&ctx->host);
+ free(ctx->lpc_mem);
+}
+
static void astlpc_test_packetised_message_bmc_to_host(void)
{
+ struct astlpc_test ctx = { 0 };
uint8_t msg[2 * MCTP_BTU];
- struct astlpc_endpoint bmc, host;
- size_t lpc_size;
- uint8_t kcs[2] = { 0 };
- void *lpc_mem;
int rc;
/* Test harness initialisation */
@@ -186,55 +221,37 @@
memset(&msg[0], 0x5a, MCTP_BTU);
memset(&msg[MCTP_BTU], 0xa5, MCTP_BTU);
- lpc_size = 1 * 1024 * 1024;
- lpc_mem = calloc(1, lpc_size);
- assert(lpc_mem);
-
- /* BMC initialisation */
- endpoint_init(&bmc, 8, MCTP_BINDING_ASTLPC_MODE_BMC, &kcs, lpc_mem,
- lpc_size);
-
- /* Host initialisation */
- endpoint_init(&host, 9, MCTP_BINDING_ASTLPC_MODE_HOST, &kcs, lpc_mem,
- lpc_size);
-
- /* BMC receives host channel init request */
- mctp_astlpc_poll(bmc.astlpc);
-
- /* Host dequeues data */
- mctp_astlpc_poll(host.astlpc);
+ network_init(&ctx);
/* BMC sends a message */
- rc = mctp_message_tx(bmc.mctp, 9, msg, sizeof(msg));
+ rc = mctp_message_tx(ctx.bmc.mctp, 9, msg, sizeof(msg));
assert(rc == 0);
- assert(kcs[MCTP_ASTLPC_KCS_REG_STATUS] & KCS_STATUS_OBF);
- assert(kcs[MCTP_ASTLPC_KCS_REG_DATA] == 0x01);
+ assert(ctx.kcs[MCTP_ASTLPC_KCS_REG_STATUS] & KCS_STATUS_OBF);
+ assert(ctx.kcs[MCTP_ASTLPC_KCS_REG_DATA] == 0x01);
/* Verify it's the packet we expect */
- assert(!memcmp(lpc_mem + RX_BUFFER_DATA, &msg[0], MCTP_BTU));
+ assert(!memcmp(ctx.lpc_mem + RX_BUFFER_DATA, &msg[0], MCTP_BTU));
/* Host receives a packet */
- mctp_astlpc_poll(host.astlpc);
+ mctp_astlpc_poll(ctx.host.astlpc);
/* Host returns Rx area ownership to BMC */
- assert(!(kcs[MCTP_ASTLPC_KCS_REG_STATUS] & KCS_STATUS_OBF));
- assert(kcs[MCTP_ASTLPC_KCS_REG_DATA] == 0x02);
- assert(kcs[MCTP_ASTLPC_KCS_REG_STATUS] & KCS_STATUS_IBF);
+ assert(!(ctx.kcs[MCTP_ASTLPC_KCS_REG_STATUS] & KCS_STATUS_OBF));
+ assert(ctx.kcs[MCTP_ASTLPC_KCS_REG_DATA] == 0x02);
+ assert(ctx.kcs[MCTP_ASTLPC_KCS_REG_STATUS] & KCS_STATUS_IBF);
/* BMC dequeues ownership hand-over and sends the queued packet */
- rc = mctp_astlpc_poll(bmc.astlpc);
+ rc = mctp_astlpc_poll(ctx.bmc.astlpc);
assert(rc == 0);
/* Host receives a message */
- assert(kcs[MCTP_ASTLPC_KCS_REG_STATUS] & KCS_STATUS_OBF);
- assert(kcs[MCTP_ASTLPC_KCS_REG_DATA] == 0x01);
+ assert(ctx.kcs[MCTP_ASTLPC_KCS_REG_STATUS] & KCS_STATUS_OBF);
+ assert(ctx.kcs[MCTP_ASTLPC_KCS_REG_DATA] == 0x01);
/* Verify it's the packet we expect */
- assert(!memcmp(lpc_mem + RX_BUFFER_DATA, &msg[MCTP_BTU], MCTP_BTU));
+ assert(!memcmp(ctx.lpc_mem + RX_BUFFER_DATA, &msg[MCTP_BTU], MCTP_BTU));
- endpoint_destroy(&bmc);
- endpoint_destroy(&host);
- free(lpc_mem);
+ network_destroy(&ctx);
}
static void astlpc_test_simple_init(void)