[LTP] [PATCH] syscalls/msgrcv07: Add functional test for MSG_COPY flag
Cyril Hrubis
chrubis@suse.cz
Fri Aug 14 15:28:55 CEST 2020
Hi!
> +static void test_msg_copy(void)
> +{
> + struct msqid_ds buf = {0};
> +
> + if (!msg_copy_sup)
> + tst_res(TCONF, "kernel doesn't support MSG_COPY flag, skip it");
> + prepare_queue();
> +
> + /*
> + * If MSG_COPY flag was specified, then mtype is interpreted as number
> + * of the message to copy.
> + */
> + SAFE_MSGRCV(queue_id, &rcv_buf, MSGSIZE, 0, MSG_COPY | IPC_NOWAIT);
> + if (strcmp(rcv_buf.mtext, MSG1) == 0 && rcv_buf.type == MSGTYPE1)
> + tst_res(TPASS, "msgrcv(MSG_COPY) got MSGTYPE1 msg data"
> + " correctly");
> + else
> + tst_res(TFAIL, "msgrcv(MSG_COPY) got MSGTYPE1 msg data"
> + " incorrectly");
> +
> + SAFE_MSGRCV(queue_id, &rcv_buf, MSGSIZE, 1, MSG_COPY | IPC_NOWAIT);
> + if (strcmp(rcv_buf.mtext, MSG2) == 0 && rcv_buf.type == MSGTYPE2)
> + tst_res(TPASS, "msgrcv(MSG_COPY) got MSGTYPE2 msg data"
> + " correctly");
> + else
> + tst_res(TFAIL, "msgrcv(MSG_COPY) got MSGTYPE2 msg data"
> + " incorrectly");
> +
> + SAFE_MSGCTL(queue_id, IPC_STAT, &buf);
> + if (buf.msg_qnum == 2)
> + tst_res(TPASS, "msgrcv(MSG_COPY) succeeded, msg queue "
> + "still has 2 msg");
> + else
> + tst_res(TFAIL, "msgrcv(MSG_COPY) msg queue expected 2 msg num,"
> + " but only got %d", (int)buf.msg_qnum);
> + SAFE_MSGCTL(queue_id, IPC_RMID, NULL);
> +}
>
> static void setup(void)
> {
> msgkey = GETIPCKEY();
> + prepare_queue();
> + TEST(msgrcv(queue_id, &rcv_buf, MSGSIZE, MSGTYPE1, MSG_COPY));
> + if (TST_RET != -1)
> + tst_res(TINFO, "msgrcv succeeded unexpectedly, kernel doesn't"
> + " support MSG_COPY flag");
> +
> + if (TST_ERR == EINVAL) {
> + tst_res(TINFO, "msgrcv failed as expected when not using"
> + " MSG_COPY and IPC_NOWAIT concurrently");
> + msg_copy_sup = 1;
> + } else if (TST_ERR == ENOSYS) {
> + tst_res(TINFO, "kernel doesn't enable CONFIG_CHECKPOINT_RESTORE");
> + } else {
> + tst_res(TINFO | TTERRNO, "msgrcv failed when not using MSG_COPY"
> + "and IPC_NOWAIT concurrently, expected EINVAL but got");
> + }
Why can't we just check for ENOSYS in the test_msg_copy() instead?
--
Cyril Hrubis
chrubis@suse.cz
More information about the ltp
mailing list