From: DAN LI <li.dan@cn.fujitsu.com>
To: LTP list <ltp-list@lists.sourceforge.net>
Subject: [LTP] [PATCH 2/2] shmctl/shmctl01.c: Test features IPC_INFO, SHM_STAT, SHM_LOCK and SHM_UNLOCK.
Date: Thu, 23 May 2013 16:39:28 +0800 [thread overview]
Message-ID: <519DD5C0.107@cn.fujitsu.com> (raw)
In-Reply-To: <519DD4ED.3090907@cn.fujitsu.com>
Additional tests for features IPC_INFO, SHM_STAT, SHM_LOCK and SHM_UNLOCK.
Signed-off-by: DAN LI <li.dan@cn.fujitsu.com>
---
testcases/kernel/syscalls/ipc/shmctl/shmctl01.c | 83 ++++++++++++++++++++++---
1 file changed, 75 insertions(+), 8 deletions(-)
diff --git a/testcases/kernel/syscalls/ipc/shmctl/shmctl01.c b/testcases/kernel/syscalls/ipc/shmctl/shmctl01.c
index 34ff30c..c0f2c81 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(void);
+
+/* 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, &buf, func_lock, NULL},
+ {&shm_id_1, SHM_UNLOCK, &buf, func_unlock, NULL},
+ {&shm_id_1, IPC_RMID, &buf, 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 "
@@ -294,11 +317,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 +442,50 @@ 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(void)
+{
+ if (buf.shm_segsz != SHM_SIZE)
+ tst_resm(TFAIL, "segment size is incorrect");
+ else
+ tst_resm(TPASS, "size of attache is correct");
+}
+
+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 setted");
+ else
+ tst_resm(TFAIL, "SHM_LOCK is not setted");
+}
+
+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 not cleared");
+ 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-23 8:42 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 ` DAN LI [this message]
2013-05-23 13:01 ` [LTP] [PATCH 2/2] shmctl/shmctl01.c: Test features IPC_INFO, SHM_STAT, SHM_LOCK and SHM_UNLOCK 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
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=519DD5C0.107@cn.fujitsu.com \
--to=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