[prev in list] [next in list] [prev in thread] [next in thread] 

List:       ltp-list
Subject:    Re: [LTP]
From:       "Mitani" <mitani () ryobi ! co ! jp>
Date:       2010-08-02 4:36:45
Message-ID: 000601cb31fc$50629a30$f127ce90$ () co ! jp
[Download RAW message or body]

> -----Original Message-----
> From: Garrett Cooper [mailto:yanegomi@gmail.com]
> Sent: Saturday, July 17, 2010 7:51 AM
> To: Mitani
> Cc: ltp-list@lists.sourceforge.net
> Subject: Re: [LTP] "Containers" test was "TFAIL" but "PASS"
> is in log results
> 
> On Fri, Jul 16, 2010 at 3:50 PM, Garrett Cooper <yanegomi@gmail.com>
> wrote:
> > On Thu, Jul 15, 2010 at 9:19 PM, Mitani <mitani@ryobi.co.jp> wrote:
> >> Hi,
> >>
> >> With RHEL5.4/5.5 systems, I noticed that "Containers" test failed
> but
> >> "Containers" is PASS in log results:
> >>
> >> ---<log results file>-------------
> >> ...
> >> hangup01                       PASS       0
> >> Containers                     PASS       0
> >> BindMounts                     PASS       0
> >> ...
> >> ----------------
> >>
> >> ---<detail in redirected file>-------------
> >> ...
> >> check_netns_enabled    1  TFAIL  :  unshare syscall smoke test
> failed:
> >> errno=EINVAL(22): Invalid argument
> >> Network namespaces not enabled in kernel.  Not running netns tests.
> >> ...
> >> ----------------
> >>
> >> The source which returned with "Invalid argument" is
> >> "check_netns_enabled.c":
> >>
> >> ---<check_netns_enabled.c>-------------
> >> main()
> >> {
> >>        /* Checking if the kernel supports unshare with netns
> capabilities.
> >> */
> >>        if (syscall(__NR_unshare, CLONE_NEWNET | CLONE_NEWNS) < 0)
> {
> >>                tst_resm (TFAIL | TERRNO, "unshare syscall smoke
> test
> >> failed");
> >>        }
> >>        tst_exit();
> >> }
> >> ----------------
> >>
> >> In RHEL5.4/5.5 systems, unshare() does not support the argument
> >> "CLONE_NEWNET".
> >> But I feel strange that log results is "PASS" in spite of "TFAIL"
> exit.
> >>
> >> "container_test.sh" which calls "check_netns_enabled.c" is as
> follows:
> >> ---<container_test.sh>-------------
> >> ...
> >> check_netns_enabled
> >> if [ $? -eq 0 ]; then
> >>        echo "Running netns tests."
> >>        runnetnstest.sh
> >> else
> >>        echo "Network namespaces not enabled in kernel.  Not
> running netns
> >> tests."
> >> fi
> >> ...
> >> ----------------
> >>
> >> According to above source, "check_netns_enabled.c" is only the
> judgement
> >> whether "runnetnstest.sh" test can be called or not.
> >> So, I think that "TFAIL" is not suitable for the test impossibility
> >> message.
> >> "TCONF" is more suitable for the message than "TFAIL", I think.
> >> But, if "TCONF" is used instead of "TFAIL", "tst_exit" returns with
> 0.
> >> And the test shell "runnetnstest.sh" is called against intention.
> >>
> >>
> >> I thought up two ways of solutions.
> >> (1) Insert "exit(1)" just after "tst_resm()" of
> "check_netns_enabled.c"
> >> (2) Replace "TFAIL" with "TWARN", instead of "TCONF".
> >>
> >> But above solutions are both irregular measures, I think.
> >>
> >> If there are other good measures, please give me advice.
> >>
> >>
> >> In the following, I nominate a temporary patch for an example:
> >>
> >> Signed-off-by: Tomonori Mitani <mitani@ryobi.co.jp>
> >>
> >> ===(1)=========
> >> ---
> a/testcases/kernel/containers/netns/check_netns_enabled.c   2010-
> 07-12
> >> 02:01:45.000000000 +0900
> >> +++
> b/testcases/kernel/containers/netns/check_netns_enabled.c   2010-
> 07-16
> >> 11:58:14.000000000 +0900
> >> @@ -43,7 +43,8 @@
> >>  {
> >>        /* Checking if the kernel supports unshare with netns
> capabilities.
> >> */
> >>         if (syscall(__NR_unshare, CLONE_NEWNET | CLONE_NEWNS) <
> 0) {
> >> -               tst_resm (TFAIL | TERRNO, "unshare syscall smoke
> test
> >> failed");
> >> +               tst_resm (TCONF | TERRNO, "unshare syscall smoke
> test
> >> failed");
> >> +               exit (1);
> >>        }
> >>        tst_exit();
> >>  }
> >> ============
> >>
> >> ===(2)=========
> >> ---
> a/testcases/kernel/containers/netns/check_netns_enabled.c   2010-
> 07-12
> >> 02:01:45.000000000 +0900
> >> +++
> b/testcases/kernel/containers/netns/check_netns_enabled.c   2010-
> 07-16
> >> 11:56:47.000000000 +0900
> >> @@ -43,7 +43,7 @@
> >>  {
> >>        /* Checking if the kernel supports unshare with netns
> capabilities.
> >> */
> >>         if (syscall(__NR_unshare, CLONE_NEWNET | CLONE_NEWNS) <
> 0) {
> >> -               tst_resm (TFAIL | TERRNO, "unshare syscall smoke
> test
> >> failed");
> >> +               tst_resm (TWARN | TERRNO, "unshare syscall smoke
> test
> >> failed");
> >>        }
> >>        tst_exit();
> >>  }
> >> ============
> >
> > Uh, that would introduce a more serious problem because the netns
> > tests are keyed on whether or not that script passes or fails.
> 
> s/script/app/
> 
> > If you can provide a more stable means of detecting whether or not
> > CLONE_* is available with netns, and integrate that into the tests,
> > that would be a better idea.
> 
> Thanks,
> -Garrett


Sorry for my late answer.

I considered how to judge detecting whether or not CLONE_* is available.
However, I hit only about errno judgment.

Signed-off-by: Tomonori Mitani <mitani@ryobi.co.jp>

============
--- a/testcases/kernel/containers/netns/check_netns_enabled.c	2010-07-30 02:23:32.000000000 +0900
+++ b/testcases/kernel/containers/netns/check_netns_enabled.c	2010-08-02 10:38:31.000000000 +0900
@@ -42,8 +42,12 @@
 main()
 {
 	/* Checking if the kernel supports unshare with netns capabilities. */
-        if (syscall(__NR_unshare, CLONE_NEWNET | CLONE_NEWNS) < 0) {
-		tst_resm (TFAIL | TERRNO, "unshare syscall smoke test failed");
+	if (syscall(__NR_unshare, CLONE_NEWNET | CLONE_NEWNS) < 0) {
+		if (errno == EINVAL) {
+			tst_resm (TWARN | TERRNO, "unshare syscall not support CLONE_NEWNET or CLONE_NEWNS");
+		} else {
+			tst_resm (TFAIL | TERRNO, "unshare syscall smoke test failed");
+		}
 	}
 	tst_exit();
 }
============


Thanks--

-Tomonori Mitani

["check_netns_enabled.patch" (application/octet-stream)]

--- a/testcases/kernel/containers/netns/check_netns_enabled.c	2010-07-30 02:23:32.000000000 +0900
+++ b/testcases/kernel/containers/netns/check_netns_enabled.c	2010-08-02 10:38:31.000000000 +0900
@@ -42,8 +42,12 @@
 main()
 {
 	/* Checking if the kernel supports unshare with netns capabilities. */
-        if (syscall(__NR_unshare, CLONE_NEWNET | CLONE_NEWNS) < 0) {
-		tst_resm (TFAIL | TERRNO, "unshare syscall smoke test failed");
+	if (syscall(__NR_unshare, CLONE_NEWNET | CLONE_NEWNS) < 0) {
+		if (errno == EINVAL) {
+			tst_resm (TWARN | TERRNO, "unshare syscall not support CLONE_NEWNET or CLONE_NEWNS");
+		} else {
+			tst_resm (TFAIL | TERRNO, "unshare syscall smoke test failed");
+		}
 	}
 	tst_exit();
 }


------------------------------------------------------------------------------
The Palm PDK Hot Apps Program offers developers who use the
Plug-In Development Kit to bring their C/C++ apps to Palm for a share
of $1 Million in cash or HP Products. Visit us here for more details:
http://p.sf.net/sfu/dev2dev-palm

_______________________________________________
Ltp-list mailing list
Ltp-list@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/ltp-list


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic