[CRIU] [PATCH] zdtm: check a test result for static/different_creds
Andrey Vagin
avagin at openvz.org
Thu Oct 1 04:50:52 PDT 2015
From: Andrew Vagin <avagin at openvz.org>
CRIU should not affect process states when it can't dump them.
Cc: Tycho Andersen <tycho.andersen at canonical.com>
Signed-off-by: Andrew Vagin <avagin at openvz.org>
---
test/zdtm.sh | 14 +++++----
test/zdtm/live/static/different_creds.c | 55 +++++++++++++++++++++------------
2 files changed, 43 insertions(+), 26 deletions(-)
diff --git a/test/zdtm.sh b/test/zdtm.sh
index a0c3520..6e265a8 100755
--- a/test/zdtm.sh
+++ b/test/zdtm.sh
@@ -801,12 +801,15 @@ EOF
# Here we may have two cases: either checkpoint is failed
# with some error code, or checkpoint is complete but return
# code is non-zero because of post dump action.
- if [ "$retcode" -ne 0 ] && [[ "$retcode" -ne 32 || -z "$dump_only" ]]; then
- if echo $TEST_EXPECTED_FAILURE | grep -q $tname; then
- echo "Got expected dump failure"
- return 0
+ if echo $TEST_EXPECTED_FAILURE | grep -q $tname; then
+ echo "Expect dump falure: $retcode"
+ if [ "$retcode" -eq 0 ]; then
+ return 1
fi
-
+ dump_only=1
+ retcode=32
+ fi
+ if [ "$retcode" -ne 0 ] && [[ "$retcode" -ne 32 || -z "$dump_only" ]]; then
if [ $BATCH_TEST -eq 0 ]; then
echo WARNING: $tname returned $retcode and left running for debug needs
else
@@ -814,7 +817,6 @@ EOF
fi
return 1
fi
- cat $ddump/dump.log* | grep Error
if [ -n "$SNAPSHOT" ]; then
snappdir=../`basename $ddump`
diff --git a/test/zdtm/live/static/different_creds.c b/test/zdtm/live/static/different_creds.c
index e2ffe23..c18216a 100644
--- a/test/zdtm/live/static/different_creds.c
+++ b/test/zdtm/live/static/different_creds.c
@@ -8,19 +8,19 @@
#include <linux/limits.h>
#include <pthread.h>
#include <syscall.h>
+#include <sys/socket.h>
#include "zdtmtst.h"
const char *test_doc = "Check that threads with different creds aren't checkpointed";
const char *test_author = "Tycho Andersen <tycho.andersen at canonical.com>";
-#define exit_group(code) \
- syscall(__NR_exit_group, code)
-
void *drop_caps_and_wait(void *arg)
{
+ int fd = *((int *) arg);
+ void *retcode = (void *)0xdeadbeaf;
cap_t caps;
- int *pipe = arg;
+ char c;
caps = cap_get_proc();
if (!caps) {
@@ -38,41 +38,45 @@ void *drop_caps_and_wait(void *arg)
goto die;
}
- close(*pipe);
+ if (write(fd, "a", 1) != 1) {
+ err("Unable to send a status");
+ goto die;
+ }
+
+ if (read(fd, &c, 1) != 1) {
+ err("Unable to read a status");
+ goto die;
+ }
- while(1)
- sleep(1000);
+ retcode = NULL;
die:
cap_free(caps);
- return NULL;
+ return retcode;
}
int main(int argc, char ** argv)
{
- int ret, pipefd[2];
+ int pipefd[2];
pthread_t thr;
-
- char buf;
+ char c;
+ void *retcode;
test_init(argc, argv);
- if (pipe(pipefd) < 0) {
+ if (socketpair(AF_FILE, SOCK_SEQPACKET, 0, pipefd)) {
err("pipe");
return -1;
}
- if (pthread_create(&thr, NULL, drop_caps_and_wait, pipefd)) {
+ if (pthread_create(&thr, NULL, drop_caps_and_wait, &pipefd[0])) {
err("Unable to create thread");
return -1;
}
- close(pipefd[1]);
/*
* Wait for child to signal us that it has droped caps.
*/
- ret = read(pipefd[0], &buf, 1);
- close(pipefd[0]);
- if (ret < 0) {
+ if (read(pipefd[1], &c, 1) != 1) {
err("read");
return 1;
}
@@ -80,8 +84,19 @@ int main(int argc, char ** argv)
test_daemon();
test_waitsig();
- fail("shouldn't dump successfully");
+ if (write(pipefd[1], &c, 1) != 1) {
+ err("write");
+ return 1;
+ }
+
+ if (pthread_join(thr, &retcode)) {
+ err("Unable to jount a thread");
+ return 1;
+ }
+ if (retcode != NULL)
+ return 1;
+
+ pass();
- exit_group(ret);
- return 1;
+ return 0;
}
--
2.4.3
More information about the CRIU
mailing list