All of lore.kernel.org
 help / color / mirror / Atom feed
From: Cyril Hrubis <chrubis@suse.cz>
To: Andrea Cervesato <andrea.cervesato@suse.de>
Cc: ltp@lists.linux.it
Subject: Re: [LTP] [PATCH v1 3/9] Rewrite msg_comm.c using new LTP API
Date: Tue, 8 Mar 2022 15:47:46 +0100	[thread overview]
Message-ID: <YidskqrtEM1ZtxvB@yuki> (raw)
In-Reply-To: <20220208100948.22913-4-andrea.cervesato@suse.de>

Hi!
Similar here.

>  #define _GNU_SOURCE
> +
>  #include <sys/ipc.h>
> +#include <sys/wait.h>
>  #include <sys/msg.h>
>  #include <sys/types.h>
> -#include <sys/wait.h>
> -#include <stdio.h>
> -#include <errno.h>
> -#include "ipcns_helper.h"
> -#include "test.h"
> -#include "safe_macros.h"
> +#include "tst_test.h"
> +#include "common.h"
>  
>  #define TESTKEY 124426L
>  #define MSGSIZE 50
> -char *TCID	= "msg_comm";
> -int TST_TOTAL	= 1;
>  
>  struct sysv_msg {
>  	long mtype;
>  	char mtext[MSGSIZE];
>  };
>  
> -static void cleanup(void)
> +static int chld1_msg(LTP_ATTRIBUTE_UNUSED void *arg)
>  {
> -	tst_rmdir();
> -}
> -
> -static void setup(void)
> -{
> -	tst_require_root();
> -	check_newipc();
> -	tst_tmpdir();
> -	TST_CHECKPOINT_INIT(tst_rmdir);
> -}
> -
> -int chld1_msg(void *arg)
> -{
> -	int id, n, rval = 0;
> +	int id, ret, rval = 0;
>  	struct sysv_msg m;
>  	struct sysv_msg rec;
>  
>  	id = msgget(TESTKEY, IPC_CREAT | 0600);
> -	if (id == -1) {
> -		perror("msgget");
> -		return 2;
> -	}
> +	if (id < 0)
> +		tst_brk(TBROK, "msgget: %s", tst_strerrno(-id));
>  
>  	m.mtype = 1;
>  	m.mtext[0] = 'A';
> -	if (msgsnd(id, &m, sizeof(struct sysv_msg) - sizeof(long), 0) == -1) {
> -		perror("msgsnd");
> +
> +	ret = msgsnd(id, &m, sizeof(struct sysv_msg) - sizeof(long), 0);
> +	if (ret < 0) {
>  		msgctl(id, IPC_RMID, NULL);
> -		return 2;
> +		tst_brk(TBROK, "msgsnd: %s", tst_strerrno(-ret));
>  	}
>  
>  	/* wait for child2 to write into the message queue */
> -	TST_SAFE_CHECKPOINT_WAIT(NULL, 0);
> +	TST_CHECKPOINT_WAIT(0);
>  
>  	/* if child1 message queue has changed (by child2) report fail */
> -	n = msgrcv(id, &rec, sizeof(struct sysv_msg) - sizeof(long),
> -		   2, IPC_NOWAIT);
> -	if (n == -1 && errno != ENOMSG) {
> -		perror("msgrcv");
> +	ret = msgrcv(id, &rec, sizeof(struct sysv_msg) - sizeof(long), 2,
> +		     IPC_NOWAIT);
> +	if (ret < 0 && errno != ENOMSG) {
>  		msgctl(id, IPC_RMID, NULL);
> -		return 2;
> +		tst_brk(TBROK, "msgrcv: %s", tst_strerrno(-ret));

This is wrong in many places, the msg*() calls return -1 and set errno
so you really just need to pass TERRNO along with the TBROK.

>  	}
> +
>  	/* if mtype #2 was found in the message queue, it is fail */
> -	if (n > 0) {
> +	if (ret > 0)
>  		rval = 1;
> -	}
>  
>  	/* tell child2 to continue */
> -	TST_SAFE_CHECKPOINT_WAKE(NULL, 0);
> +	TST_CHECKPOINT_WAKE(0);
>  
>  	msgctl(id, IPC_RMID, NULL);
> +
>  	return rval;
>  }
>  
> -int chld2_msg(void *arg)
> +static int chld2_msg(LTP_ATTRIBUTE_UNUSED void *arg)
>  {
> -	int id;
> +	int id, ret;
>  	struct sysv_msg m;
>  
>  	id = msgget(TESTKEY, IPC_CREAT | 0600);
> -	if (id == -1) {
> -		perror("msgget");
> -		return 2;
> -	}
> +	if (id < 0)
> +		tst_brk(TBROK, "msgget: %s", tst_strerrno(-id));
>  
>  	m.mtype = 2;
>  	m.mtext[0] = 'B';
> -	if (msgsnd(id, &m, sizeof(struct sysv_msg) - sizeof(long), 0) == -1) {
> -		perror("msgsnd");
> +
> +	ret = msgsnd(id, &m, sizeof(struct sysv_msg) - sizeof(long), 0);
> +	if (ret < 0) {
>  		msgctl(id, IPC_RMID, NULL);
> -		return 2;
> +		tst_brk(TBROK, "msgsnd: %s", tst_strerrno(-ret));
>  	}
>  
>  	/* tell child1 to continue and wait for it */
> -	TST_SAFE_CHECKPOINT_WAKE_AND_WAIT(NULL, 0);
> +	TST_CHECKPOINT_WAKE_AND_WAIT(0);
>  
>  	msgctl(id, IPC_RMID, NULL);
> +
>  	return 0;
>  }
>  
> -static void test(void)
> +static void run(void)
>  {
>  	int status, ret = 0;
>  
> -	ret = do_clone_unshare_test(T_CLONE, CLONE_NEWIPC, chld1_msg, NULL);
> -	if (ret == -1)
> -		tst_brkm(TBROK | TERRNO, cleanup, "clone failed");
> -
> -	ret = do_clone_unshare_test(T_CLONE, CLONE_NEWIPC, chld2_msg, NULL);
> -	if (ret == -1)
> -		tst_brkm(TBROK | TERRNO, cleanup, "clone failed");
> -
> +	clone_unshare_test(T_CLONE, CLONE_NEWIPC, chld1_msg, NULL);
> +	clone_unshare_test(T_CLONE, CLONE_NEWIPC, chld2_msg, NULL);
>  
>  	while (wait(&status) > 0) {
>  		if (WIFEXITED(status) && WEXITSTATUS(status) == 1)
>  			ret = 1;
> +
>  		if (WIFEXITED(status) && WEXITSTATUS(status) == 2)
> -			tst_brkm(TBROK | TERRNO, cleanup, "error in child");
> +			tst_brk(TBROK, "error in child");
> +
>  		if (WIFSIGNALED(status)) {
> -			tst_resm(TFAIL, "child was killed with signal %s",
> -					tst_strsig(WTERMSIG(status)));
> -			return;
> +			tst_brk(TBROK, "child was killed with signal %s",
> +				tst_strsig(WTERMSIG(status)));
>  		}
>  	}
>  
> -	if (ret)
> -		tst_resm(TFAIL, "SysV msg: communication with identical keys"
> -				" between namespaces");
> -	else
> -		tst_resm(TPASS, "SysV msg: communication with identical keys"
> -				" between namespaces");
> +	if (ret) {
> +		tst_res(TFAIL, "SysV msg: communication with identical keys"
> +			       " between namespaces");
> +	} else {
> +		tst_res(TPASS, "SysV msg: communication with identical keys"
> +			       " between namespaces");
> +	}

No need to propagate anything at all, just do the PASS/FAIL in the
respective tests.

>  }
>  
> -int main(int argc, char *argv[])
> +static void setup(void)
>  {
> -	int lc;
> -
> -	tst_parse_opts(argc, argv, NULL, NULL);
> -
> -	setup();
> -
> -	for (lc = 0; TEST_LOOPING(lc); lc++)
> -		test();
> -
> -	cleanup();
> -	tst_exit();
> +	check_newipc();
>  }
> +
> +static struct tst_test test = {
> +	.test_all = run,
> +	.setup = setup,
> +	.needs_root = 1,
> +	.needs_checkpoints = 1,
> +};
> -- 
> 2.35.1
> 
> 
> -- 
> Mailing list info: https://lists.linux.it/listinfo/ltp

-- 
Cyril Hrubis
chrubis@suse.cz

-- 
Mailing list info: https://lists.linux.it/listinfo/ltp

  reply	other threads:[~2022-03-08 14:45 UTC|newest]

Thread overview: 13+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-02-08 10:09 [LTP] [PATCH v1 0/9] Rewrite sysvipc testing suite using new LTP API Andrea Cervesato
2022-02-08 10:09 ` [LTP] [PATCH v1 1/9] Remove libclone dependency from sysvipc Andrea Cervesato
2022-02-08 10:09 ` [LTP] [PATCH v1 2/9] Rewrite mesgq_nstest.c using new LTP API Andrea Cervesato
2022-03-08 14:42   ` Cyril Hrubis
2022-02-08 10:09 ` [LTP] [PATCH v1 3/9] Rewrite msg_comm.c " Andrea Cervesato
2022-03-08 14:47   ` Cyril Hrubis [this message]
2022-02-08 10:09 ` [LTP] [PATCH v1 4/9] Rewrite sem_comm.c " Andrea Cervesato
2022-03-08 14:51   ` Cyril Hrubis
2022-02-08 10:09 ` [LTP] [PATCH v1 5/9] Rewrite sem_nstest.c " Andrea Cervesato
2022-02-08 10:09 ` [LTP] [PATCH v1 6/9] Rewrite semtest_2ns.c " Andrea Cervesato
2022-02-08 10:09 ` [LTP] [PATCH v1 7/9] Rewrite shm_comm.c " Andrea Cervesato
2022-02-08 10:09 ` [LTP] [PATCH v1 8/9] Rewrite shmem_2nstest.c " Andrea Cervesato
2022-02-08 10:09 ` [LTP] [PATCH v1 9/9] Rewrite shmnstest.c " Andrea Cervesato

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=YidskqrtEM1ZtxvB@yuki \
    --to=chrubis@suse.cz \
    --cc=andrea.cervesato@suse.de \
    --cc=ltp@lists.linux.it \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.