CAI Qian wrote:
> Hi,
>
> Please see comments as below.
>
> --- Veerendra <[EMAIL PROTECTED]> wrote:
>
>   
>> Hi
>>
>>    Attaching the patch for the testcase on PIDNS.
>>
>> Assertion:
>> 1. kill -9 1 from inside a container does not kill container
>> Steps:
>> a) create container
>> b) kill -9 1
>> c) Should not kill the containers
>>
>> Test Result: Currently this is failing, which eventually be passed.
>>
>> # ./pidns04
>> pid_namespace4    0  INFO  :  PIDNS test is running inside container
>> pid_namespace4    1  FAIL  :  Container init is killed by SIGKILL !!!
>> pid_namespace4    2  FAIL  :  Container init pid got killed by signal 9
>>
>> Regards
>> Veerendra C
>>
>>
>>     
>>> diff -uprN testcases/kernel/containers/pidns.old/pidns04.c
>>>       
>> testcases/kernel/containers/pidns/pidns04.c
>> --- testcases/kernel/containers/pidns.old/pidns04.c  1970-01-01 
>> 05:30:00.000000000 +0530
>> +++ testcases/kernel/containers/pidns/pidns04.c      2008-10-14 
>> 16:48:28.000000000 +0530
>> @@ -0,0 +1,165 @@
>> +/*
>> +* Copyright (c) International Business Machines Corp., 2007
>> +* This program is free software; you can redistribute it and/or modify
>> +* it under the terms of the GNU General Public License as published by
>> +* the Free Software Foundation; either version 2 of the License, or
>> +* (at your option) any later version.
>> +* This program is distributed in the hope that it will be useful,
>> +* but WITHOUT ANY WARRANTY; without even the implied warranty of
>> +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See
>> +* the GNU General Public License for more details.
>> +* You should have received a copy of the GNU General Public License
>> +* along with this program; if not, write to the Free Software
>> +* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
>> +*
>> +***************************************************************************
>> +
>> +* File: pidns04.c
>> +*
>> +* Description:
>> +*  The pidns04.c testcase builds into the ltp framework to verify
>> +*  the basic functionality of PID Namespace.
>> +*
>> +* Verify that:
>> +* 1. When parent clone a process with flag CLONE_NEWPID, the process ID of
>> +* child should be one.
>> +*
>> +* 2. When parent clone a process with flag CLONE_NEWPID, the parent process 
>> ID
>> +* of should be zero.
>> +*
>> +* 3. The container init process (one), should not get killed by the SIGKILL 
>> in 
>> +* the childNS
>> +*
>> +* Total Tests:
>> +*
>> +* Test Name: pidns04
>> +*
>> +* Test Assertion & Strategy:
>> +*
>> +* From main() clone a new child process with passing the clone_flag as 
>> +* CLONE_NEWPID. 
>> +* The container init, should not get killed by the SIGKILL inside the child 
>> NS.
>> +* Usage: <for command-line>
>> +* pidns04
>> +*
>> +* History:
>> +*
>> +* FLAG DATE         NAME                            DESCRIPTION
>> +* 08/10/08      Veerendra C <[EMAIL PROTECTED]> Verifies killing of cont 
>> init.
>> +*
>> +*******************************************************************************/
>> +#define _GNU_SOURCE 1
>> +#include <sys/wait.h>
>> +#include <assert.h>
>> +#include <stdio.h>
>> +#include <stdlib.h>
>> +#include <unistd.h>
>> +#include <string.h>
>> +#include <errno.h>
>> +#include <usctest.h>
>> +#include <test.h>
>> +#include <libclone.h>
>> +
>> +#define INIT_PID        1
>> +#define CHILD_PID       1
>> +#define PARENT_PID      0
>> +
>> +char *TCID = "pid_namespace4";
>> +int TST_TOTAL=1;
>> +int     fd[2] ;
>> +void cleanup(void);
>> +
>> +/*
>> + * child_fn1() - Inside container
>> +*/
>> +static int child_fn1(void *ttype)
>> +{
>> +    pid_t cpid, ppid;
>> +    cpid = getpid();
>> +    ppid = getppid();
>> +    char mesg[] = "I was not killed !";
>> +            /* Child process closes up read side of pipe */
>> +            close(fd[0]);
>> +
>> +    /* Comparing the values to make sure pidns is created correctly */
>> +    if(( cpid == CHILD_PID) && ( ppid == PARENT_PID ) ) {
>> +            tst_resm(TINFO, "PIDNS test is running inside container");
>> +            kill(INIT_PID, SIGKILL);
>> +            /* Verifying whether the container init is not killed, "
>> +             If so writing into the pipe created in the parent NS" */
>> +
>> +            /* Send "mesg" through the write side of pipe */
>> +            write(fd[1], mesg, (strlen(mesg)+1));
>> +    }
>> +    else {
>> +            tst_resm(TFAIL, "FAIL: Got unexpected result of"
>> +            " cpid=%d ppid=%d\n", cpid, ppid);
>> +    }
>> +    close(fd[1]);
>> +    cleanup();
>> +
>> +    /* NOT REACHED */
>> +    return 0;
>> +}
>> +
>> +/***********************************************************************
>> +*   M A I N
>> +***********************************************************************/
>> +
>> +int main(int argc, char *argv[])
>> +{
>> +    int ret, status, nbytes;
>> +        char    readbuffer[80];
>> +
>> +    pipe(fd);
>> +    ret = do_clone_unshare_test(T_CLONE, CLONE_NEWPID, child_fn1, NULL);
>> +    if ((wait(&status)) < 0) {
>> +            tst_resm(TWARN, "wait() failed, skipping this test case");
>> +            /* Cleanup & continue with next test case */
>> +            cleanup();
>> +    }
>> +    if (ret == -1) {
>> +            tst_resm(TFAIL, "clone() Failed, errno = %d :"
>> +                    " %s", ret, strerror(ret));
>> +            /* Cleanup & continue with next test case */
>> +            cleanup();
>> +    }
>> +
>> +    /* Parent process closes up write side of pipe */
>> +    close(fd[1]);
>> +    /* Read in a string from the pipe */
>> +    nbytes = read(fd[0], readbuffer, sizeof(readbuffer));
>> +
>> +    if (nbytes !=0 ) {
>> +            tst_resm(TPASS, "Container init : %s", readbuffer);
>> +    }
>> +    else {
>> +            tst_resm(TFAIL, "Container init is killed by SIGKILL !!!");
>> +    }
>> +
>> +    if (WTERMSIG(status)) {
>> +            tst_resm(TFAIL, "Container init pid got killed by signal %d",
>> +            WTERMSIG(status));
>> +    }
>> +        /* cleanup and exit */
>> +    cleanup();
>> +    close(fd[0]);
>> +
>> +    /*NOTREACHED*/
>> +    return 0;
>> +
>> +}   /* End main */
>> +
>> +/*
>> + * cleanup() - performs all ONE TIME cleanup for this test at
>> + *             completion or premature exit.
>> + */
>> +void
>> +cleanup()
>> +{
>> +    /* Clean the test testcase as LTP wants*/
>> +    TEST_CLEANUP;
>> +
>> +    /* exit with return code appropriate for results */
>> +    tst_exit();
>> +}
>> diff -uprN testcases/kernel/containers/pidns.old/runpidnstest.sh
>> testcases/kernel/containers/pidns/runpidnstest.sh
>> --- testcases/kernel/containers/pidns.old/runpidnstest.sh    2008-09-30 
>> 18:06:38.000000000 +0530
>> +++ testcases/kernel/containers/pidns/runpidnstest.sh        2008-10-14 
>> 11:25:40.000000000 +0530
>> @@ -35,4 +35,9 @@ if [ $? -ne 0 ]; then
>>      exit_code="$?"
>>      exit $exit_code
>>  fi
>> +pidns04
>> +if [ $? -ne 0 ]; then
>> +    exit_code="$?"
>> +    exit $exit_code
>> +fi
>>  exit $exit_code
>>     
>
> Look like exit_code will always be 0.
>
>   
If all the tests passes , then the exit_code will return 0.
If any of the tests fails, then the script exits with non-zero exit 
code. As it won't continue executing the remaining tests.
> Cai Qian
>
>   
- Veerendra C

-------------------------------------------------------------------------
This SF.Net email is sponsored by the Moblin Your Move Developer's challenge
Build the coolest Linux based applications with Moblin SDK & win great prizes
Grand prize is a trip for two to an Open Source event anywhere in the world
http://moblin-contest.org/redirect.php?banner_id=100&url=/
_______________________________________________
Ltp-list mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/ltp-list

Reply via email to