From: Jan Stancek <jstancek@redhat.com>
To: DAN LI <li.dan@cn.fujitsu.com>
Cc: ltp-list@lists.sourceforge.net
Subject: Re: [LTP] [PATCH V2 2/2] shmctl/shmctl01.c: Test features IPC_INFO, SHM_STAT, SHM_LOCK and SHM_UNLOCK.
Date: Fri, 24 May 2013 04:02:50 -0400 (EDT) [thread overview]
Message-ID: <302022694.6936829.1369382570708.JavaMail.root@redhat.com> (raw)
In-Reply-To: <519EF94A.5070506@cn.fujitsu.com>
----- Original Message -----
> From: "DAN LI" <li.dan@cn.fujitsu.com>
> To: ltp-list@lists.sourceforge.net
> Cc: "Jan Stancek" <jstancek@redhat.com>
> Sent: Friday, 24 May, 2013 7:23:22 AM
> Subject: [LTP] [PATCH V2 2/2] shmctl/shmctl01.c: Test features IPC_INFO, SHM_STAT, SHM_LOCK and SHM_UNLOCK.
>
>
>
> Additional tests for features IPC_INFO, SHM_STAT, SHM_LOCK and SHM_UNLOCK.
>
>
> Signed-off-by: DAN LI <li.dan@cn.fujitsu.com>
Hi,
comments inline.
> ---
> testcases/kernel/syscalls/ipc/shmctl/shmctl01.c | 87
> ++++++++++++++++++++++---
> 1 file changed, 78 insertions(+), 9 deletions(-)
>
> diff --git a/testcases/kernel/syscalls/ipc/shmctl/shmctl01.c
> b/testcases/kernel/syscalls/ipc/shmctl/shmctl01.c
> index 34ff30c..55711a7 100644
> --- a/testcases/kernel/syscalls/ipc/shmctl/shmctl01.c
> +++ b/testcases/kernel/syscalls/ipc/shmctl/shmctl01.c
> @@ -43,13 +43,18 @@
> * call cleanup
> */
>
> +#ifndef _GNU_SOURCE
> +#define _GNU_SOURCE
> +#endif
> #include "ipcshm.h"
> #include "libtestsuite.h"
>
> char *TCID = "shmctl01";
>
> static int shm_id_1 = -1;
> +static int shm_index;
> static struct shmid_ds buf;
> +static struct shminfo info;
> static long save_time;
>
> #define FIRST 0
> @@ -64,12 +69,24 @@ static pid_t pid_arr[N_ATTACH];
> static int sync_pipes[2];
>
> /* Setup, cleanup and check routines for IPC_STAT */
> -static void stat_setup(void), func_stat(void);
> +static void stat_setup(void), func_istat(void);
> static void stat_cleanup(void);
>
> /* Setup and check routines for IPC_SET */
> static void set_setup(void), func_set(void);
>
> +/* Check routine for IPC_INFO */
> +static void func_info(void);
> +
> +/* Check routine for SHM_STAT */
> +static void func_sstat(int shmid);
> +
> +/* Check routine for SHM_LOCK */
> +static void func_lock(void);
> +
> +/* Check routine for SHM_UNLOCK */
> +static void func_unlock(void);
> +
> /* Check routine for IPC_RMID */
> static void func_rmid(void);
>
> @@ -77,21 +94,27 @@ static void func_rmid(void);
> static void do_child(void);
>
> static struct test_case_t {
> + int *shmid;
> int cmd;
> + struct shmid_ds *arg;
> void (*func_test) ();
> void (*func_setup) ();
> } TC[] = {
> - {IPC_STAT, func_stat, stat_setup},
> + {&shm_id_1, IPC_STAT, &buf, func_istat, stat_setup},
> #ifndef UCLINUX
> /*
> * The second test is not applicable to uClinux;
> * shared memory segments are detached on exec(),
> * so cannot be passed to uClinux children.
> */
> - {IPC_STAT, func_stat, stat_setup},
> + {&shm_id_1, IPC_STAT, &buf, func_istat, stat_setup},
> #endif
> - {IPC_SET, func_set, set_setup},
> - {IPC_RMID, func_rmid, NULL},
> + {&shm_id_1, IPC_SET, &buf, func_set, set_setup},
> + {&shm_id_1, IPC_INFO, (struct shmid_ds *) &info, func_info, NULL},
> + {&shm_index, SHM_STAT, &buf, func_sstat, NULL},
> + {&shm_id_1, SHM_LOCK, NULL, func_lock, NULL},
> + {&shm_id_1, SHM_UNLOCK, NULL, func_unlock, NULL},
> + {&shm_id_1, IPC_RMID, NULL, func_rmid, NULL},
> };
>
> static int TST_TOTAL = ARRAY_SIZE(TC);
> @@ -146,7 +169,7 @@ int main(int argc, char *argv[])
> if (TC[i].func_setup != NULL)
> (*TC[i].func_setup) ();
>
> - TEST(shmctl(shm_id_1, TC[i].cmd, &buf));
> + TEST(shmctl(*(TC[i].shmid), TC[i].cmd, TC[i].arg));
>
> if (TEST_RETURN == -1) {
> tst_resm(TFAIL, "%s call failed - errno "
> @@ -155,7 +178,10 @@ int main(int argc, char *argv[])
> continue;
> }
> if (STD_FUNCTIONAL_TEST) {
> - (*TC[i].func_test) ();
> + if (TC[i].cmd == SHM_STAT)
> + (*TC[i].func_test) (TEST_RETURN);
This works only because original code didn't put void in parameters of func_test/setup,
and feels a bit hackish. I think better approach would be to change it to:
void (*func_test) (int);
void (*func_setup) (void);
then you can call (*TC[i].func_test) (TEST_RETURN) for all testcases,
just some of them won't make use of that parameter.
> + else
> + (*TC[i].func_test) ();
> } else {
> tst_resm(TPASS, "call succeeded");
>
> @@ -294,11 +320,11 @@ void do_child(void)
> }
>
> /*
> - * func_stat() - check the functionality of the IPC_STAT command with
> shmctl()
> + * func_istat() - check the functionality of the IPC_STAT command with
> shmctl()
> * by looking at the pid of the creator, the segement size,
> * the number of attaches and the mode.
> */
> -void func_stat(void)
> +void func_istat(void)
> {
> int fail = 0;
> pid_t pid;
> @@ -419,6 +445,49 @@ void func_set(void)
> tst_resm(TPASS, "new mode and change time are correct");
> }
>
> +static void func_info(void)
> +{
> + if (info.shmmin != 1)
> + tst_resm(TFAIL, "value of shmmin is incorrect");
> + else
> + tst_resm(TPASS, "get correct shared memory limits");
> +}
> +
> +static void func_sstat(int shmid)
> +{
> + if (shmid >= 0)
> + tst_resm(TPASS, "get correct shared memery id");
typo, memery -> memory
> + else
> + tst_resm(TFAIL, "shared memery id is incorrect");
same typo, memery -> memory
Regards,
Jan
> +}
> +
> +static void func_lock(void)
> +{
> + if (shmctl(shm_id_1, IPC_STAT, &buf) == -1) {
> + tst_resm(TBROK, "stat failed in func_lock()");
> + return;
> + }
> +
> + if (buf.shm_perm.mode & SHM_LOCKED)
> + tst_resm(TPASS, "SHM_LOCK is set");
> + else
> + tst_resm(TFAIL, "SHM_LOCK is cleared");
> +}
> +
> +static void func_unlock(void)
> +{
> + if (shmctl(shm_id_1, IPC_STAT, &buf) == -1) {
> + tst_resm(TBROK, "stat failed in func_unlock()");
> + return;
> + }
> +
> + if (buf.shm_perm.mode & SHM_LOCKED)
> + tst_resm(TFAIL, "SHM_LOCK is set");
> + else
> + tst_resm(TPASS, "SHM_LOCK is cleared");
> +}
> +
> +
> /*
> * func_rmid() - check the functionality of the IPC_RMID command with
> shmctl()
> */
> --
> 1.8.1
>
>
>
>
------------------------------------------------------------------------------
Try New Relic Now & We'll Send You this Cool Shirt
New Relic is the only SaaS-based application performance monitoring service
that delivers powerful full stack analytics. Optimize and monitor your
browser, app, & servers with just a few lines of code. Try New Relic
and get this awesome Nerd Life shirt! http://p.sf.net/sfu/newrelic_d2d_may
_______________________________________________
Ltp-list mailing list
Ltp-list@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/ltp-list
next prev parent reply other threads:[~2013-05-24 8:03 UTC|newest]
Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-05-23 8:35 [LTP] [PATCH 1/2] shmctl/shmctl01.c: cleanup DAN LI
2013-05-23 8:39 ` [LTP] [PATCH 2/2] shmctl/shmctl01.c: Test features IPC_INFO, SHM_STAT, SHM_LOCK and SHM_UNLOCK DAN LI
2013-05-23 13:01 ` Jan Stancek
2013-05-24 5:18 ` DAN LI
2013-05-24 5:23 ` [LTP] [PATCH V2 " DAN LI
2013-05-24 8:02 ` Jan Stancek [this message]
2013-05-24 9:50 ` [LTP] [PATCH V3 " DAN LI
2013-05-24 12:13 ` Jan Stancek
2013-05-24 12:47 ` Wanlong Gao
2013-05-24 12:46 ` [LTP] [PATCH 1/2] shmctl/shmctl01.c: cleanup Wanlong Gao
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=302022694.6936829.1369382570708.JavaMail.root@redhat.com \
--to=jstancek@redhat.com \
--cc=li.dan@cn.fujitsu.com \
--cc=ltp-list@lists.sourceforge.net \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox