Hi!
> Some tests, such as fs_ext4, need a big block device and
> the original DEVICE is some small, so create a BIG_DEVICE
> (default size 5GB).
> 
> Signed-off-by: Xiaoguang Wang <[email protected]>
> ---
>  runltp | 67 
> ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++----
>  1 file changed, 63 insertions(+), 4 deletions(-)
> 
> diff --git a/runltp b/runltp
> index 63c625f..f491beb 100755
> --- a/runltp
> +++ b/runltp
> @@ -163,6 +163,9 @@ usage()
>      -b DEVICE       Some tests require an unmounted block device
>                      to run correctly.
>      -B DEVICE_FS_TYPE The file system of test block devices.
> +    -z BIG_DEVICE   Some tests require a big unmounted block device
> +                    to run correctly.
> +    -Z BIG_DEVICE_FS_TYPE The file system of the big device
>  
>  
>      example: ${0##*/} -c 2 -i 2 -m 2,4,10240,1 -D 2,10,10240,1 -p -q  -l 
> /tmp/result-log.$$ -o /tmp/result-output.$$ -C /tmp/result-failed.$$ -d ${PWD}
> @@ -207,11 +210,12 @@ main()
>      local PAN_COMMAND=""
>      local DEFAULT_FILE_NAME_GENERATION_TIME=`date +"%Y_%b_%d-%Hh_%Mm_%Ss"`
>      local DEVICE_FS_TYPE="ext2"
> +    local BIG_DEVICE_FS_TYPE="ext2"
>      local scenfile=
>  
>      version_date=$(cat "$LTPROOT/Version")
>  
> -    while getopts a:c:C:d:D:f:F:ehi:K:g:l:m:M:Nno:pqr:s:S:t:T:w:x:b:B: arg
> +    while getopts a:c:C:d:D:f:F:ehi:K:g:l:m:M:Nno:pqr:s:S:t:T:w:x:b:B:z:Z: 
> arg
>      do  case $arg in
>          a)  EMAIL_TO=$OPTARG
>              ALT_EMAIL_OUT=1;;
> @@ -424,6 +428,8 @@ main()
>              INSTANCES="-x $OPTARG";;
>          b) DEVICE=$OPTARG;;
>          B) DEVICE_FS_TYPE=$OPTARG;;
> +        z) BIG_DEVICE=$OPTARG;;
> +        Z) BIG_DEVICE_FS_TYPE=$OPTARG;;
>          \?) usage;;
>          esac
>      done
> @@ -678,19 +684,37 @@ main()
>      }
>  
>      if [ -n "$DEVICE" ]; then
> -        sed -i "s|DEVICE|$DEVICE|"  ${TMP}/alltests
> +        sed -i "s|\s+DEVICE\s+|$DEVICE|"  ${TMP}/alltests

Actually I've been thinking how can we get rid of the ugly sed lines and
what about we:

1. Export the devices as shell variables:

   export LTP_SMALL_DEV="$DEVICE"
   export LTP_BIG_DEV="$BIG_DEVICE"

2. Change the runtest files to use $LTP_SMALL_DEV and $LTP_BIG_DEV

We would still need to disable some testcases if devices are not
available, but we will get rid of this ulgy part.

>          RC=$?
>      else
>          create_block
>          if [ $? -eq 0 ]; then
> -            sed -i "s|DEVICE|$DEVICE|"  ${TMP}/alltests
> +            sed -i "s|\s+DEVICE\s+|$DEVICE|"  ${TMP}/alltests
>              RC=$?
>          else
>              echo "no block device was specified on commandline."
>              echo "Block device could not be created using loopback device"
>              echo "Tests which require block device are disabled."
>              echo "You can specify it with option -b"
> -            sed -i "/DEVICE/d"  ${TMP}/alltests
> +            sed -i "/\s+DEVICE\s+/d"  ${TMP}/alltests
> +            RC=$?
> +        fi
> +    fi
> +
> +    if [ -n "$BIG_DEVICE" ]; then
> +        sed -i "s|BIG_DEVICE|$BIG_DEVICE|"  ${TMP}/alltests
> +        RC=$?
> +    else
> +        create_big_block
> +        if [ $? -eq 0 ]; then
> +            sed -i "s|BIG_DEVICE|$BIG_DEVICE|"  ${TMP}/alltests
> +            RC=$?
> +        else
> +            echo "no big block device was specified on commandline."
> +            echo "BIG block device could not be created using loopback 
> device"
> +            echo "Tests which require big block device are disabled."
> +            echo "You can specify it with option -z"
> +            sed -i "/BIG_DEVICE/d"  ${TMP}/alltests
>              RC=$?
>          fi
>      fi
> @@ -704,6 +728,10 @@ main()
>          sed -i "s|DEVICE_FS_TYPE|$DEVICE_FS_TYPE|"  ${TMP}/alltests
>      fi
>  
> +    if [ -n "$BIG_DEVICE" ]; then
> +        sed -i "s|BIG_DEVICE_FS_TYPE|$BIG_DEVICE_FS_TYPE|"  ${TMP}/alltests
> +    fi
> +
>      if [ $? -ne 0 ]; then
>          echo "FATAL: error during processing alltests file by sed"
>          exit 1
> @@ -979,10 +1007,41 @@ create_block()
>      fi
>  }
>  
> +create_big_block()
> +{
> +    # In most systems, the /tmp is relatively small
> +    # So create a big block device in LTPROOT
> +    BIG_DEVICE_DIR=${LTPROOT}/big_device$$

Using LTPROOT is wrong too. There are (embedded) systems that have the
LTPROOT mounted readonly or too small.

I guess that the only option here is to skip the testcases unless user
has specified device or directory to create it.

> +    mkdir -p $BIG_DEVICE_DIR
> +    dd if=/dev/zero of=${BIG_DEVICE_DIR}/test.img bs=1kB count=5120000 #5G
> +    if [ $? -ne 0 ]; then
> +        echo "Failed to create loopback device image, please check disk 
> space and re-run"
> +        return 1
> +    else
> +        ##search for an unused loop dev
> +        LOOP_BIG_DEV=$(losetup -f)
> +        if [ $? -ne 0 ]; then
> +            echo "no unused loop device is found"
> +            return 1
> +        else
> +            ##attach the created file to loop dev.
> +            losetup $LOOP_BIG_DEV ${BIG_DEVICE_DIR}/test.img
> +            if [ $? -ne 0 ]; then
> +                echo "losetup failed to create block device"
> +                return 1
> +            fi
> +            BIG_DEVICE=$LOOP_BIG_DEV
> +            return 0
> +        fi
> +    fi
> +}
> +
>  cleanup()
>  {
>      [ "$LOOP_DEV" ] && losetup -d $LOOP_DEV
> +    [ "$LOOP_BIG_DEV" ] && losetup -d $LOOP_BIG_DEV
>      rm -rf ${TMP}
> +    rm -rf ${BIG_DEVICE_DIR}
>  }

-- 
Cyril Hrubis
[email protected]

------------------------------------------------------------------------------
Rapidly troubleshoot problems before they affect your business. Most IT 
organizations don't have a clear picture of how application performance 
affects their revenue. With AppDynamics, you get 100% visibility into your 
Java,.NET, & PHP application. Start your 15-day FREE TRIAL of AppDynamics Pro!
http://pubads.g.doubleclick.net/gampad/clk?id=84349351&iu=/4140/ostg.clktrk
_______________________________________________
Ltp-list mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/ltp-list

Reply via email to