diff options
Diffstat (limited to 'run-tests-in-vagrant.sh')
| -rwxr-xr-x | run-tests-in-vagrant.sh | 326 | 
1 files changed, 200 insertions, 126 deletions
diff --git a/run-tests-in-vagrant.sh b/run-tests-in-vagrant.sh index 029439f68af..162b6893eb7 100755 --- a/run-tests-in-vagrant.sh +++ b/run-tests-in-vagrant.sh @@ -1,56 +1,75 @@  #!/bin/bash  ############################################################################### -# TODO: Allow subset of tests to be executed when VM starts.                  # -# TODO: Provide option to destroy the VM.                                     # +# TODO: Support other OSes.                                                   #  ###############################################################################  ORIGIN_DIR=$PWD  autostart="no" +destroy_after_test="no" +os="fedora" +destroy_now="no" +run_tests_args="" +redirect=">/dev/null 2>&1" +ssh="no" +custom_cflags="" + + +pushd () { +    command pushd "$@" >/dev/null +} + +popd () { +    command popd "$@" >/dev/null +}  function parse_args () {      args=`getopt \                --options a \ -              --long autostart \ +              --long autostart,os:,destroy-now,destroy-after-test,verbose,ssh \                -n 'run-tests-in-vagrant.sh' \                --  "$@"`      eval set -- "$args"      while true; do          case "$1" in              -a|--autostart) autostart="yes"; shift ;; +            --destroy-after-test) destroy_after_test="yes"; shift ;; +            --destroy-now)  destroy_now="yes"; shift ;; +            --ssh)  sshvm="yes"; shift ;; +            --os) +                case "$2" in +                    "") shift 2 ;; +                     *) os="$2" ; shift 2 ;; +                esac ;; +            --verbose)  redirect=""; shift ;;              --) shift ; break ;;              *) echo "Internal error!" ; exit 1;;          esac      done +    run_tests_args="$@"  }  function force_location()  {      current_dir=$(dirname $0); -    if [ ! -f ${current_dir}/tests/vagrant/vagrant-template/Vagrantfile ]; then +    if [ ! -f ${current_dir}/tests/vagrant/vagrant-template-fedora/Vagrantfile ]; then          echo "Aborting." -        echo          echo "The tests/vagrant subdirectory seems to be missing." -        echo          echo "Please correct the problem and try again." -        echo          exit 1      fi  }  function vagrant_check()  { -    vagrant -v >/dev/null 2>&1; +    vagrant -v >/dev/null  2>&1;      if [ $? -ne 0 ]; then          echo "Aborting"          echo "Vagrant not found. Please install Vagrant and try again."          echo "On Fedora, run "dnf install vagrant vagrant-libvirt" "          exit 1 -    else -        echo "Found Vagrant, continuing...." -        echo      fi  } @@ -63,142 +82,197 @@ function ansible_check()          echo "Ansible not found. Please install Ansible and try again."          echo "On Fedora, run "dnf install ansible" "          exit 1 +    fi +} + +function set_branchname_from_git_branch() +{ +    BRANCHNAME=`git rev-parse --abbrev-ref HEAD` +    if [ $? -ne 0 ]; then +        echo "Could not get branch name from git, will exit" +        exit 1 +    fi +} + + +function destroy_vm_and_exit() +{ +    echo "!!!!!!!!!!!!!!!!!!!!!!!!!!!!CAUTION!!!!!!!!!!!!!!!!!!!!!!!!!!!!" +    echo "This will destroy VM and delete tests/vagrant/${BRANCHNAME} dir" +    echo +    while true; do +        read -p "Do you want to continue?" yn +        case $yn in +            [Yy]* ) break;; +            * ) echo "Did not get an yes, exiting."; exit 1 ;; +        esac +    done +    if [ -d "tests/vagrant/${BRANCHNAME}" ]; then +        pushd "tests/vagrant/${BRANCHNAME}" +        eval vagrant destroy $redirect +        popd +        rm -rf "tests/vagrant/${BRANCHNAME}" +        exit 0      else -        echo "Found Ansible, continuing...." -        echo +        echo "Could not find vagrant dir for corresponding git branch, exiting" +        exit 1      fi  } -parse_args "$@" -echo "Checking current dir...." -force_location -echo -echo +function create_vagrant_dir() +{ +    mkdir -p tests/vagrant/$BRANCHNAME +    if [ -d "tests/vagrant/vagrant-template-${os}" ]; then +        echo "Copying tests/vagrant/vagrant-template-${os} dir to tests/vagrant/${BRANCHNAME} ...." +        cp -R tests/vagrant/vagrant-template-${os}/* tests/vagrant/$BRANCHNAME +    else +        echo "Could not find template files for requested os $os, exiting" +        exit 1 +    fi +} -echo "Testing for Vagrant...." -vagrant_check -echo -echo -echo "Testing for Ansible...." -ansible_check -echo -echo +function start_vm() +{ +    echo "Doing vagrant up...." +    pushd "tests/vagrant/${BRANCHNAME}" +    eval vagrant up $redirect +    if [ $? -eq 0 ] +    then +            popd +    else +            echo "Vagrant up failed, exiting...."; +            popd +            exit 1 +    fi +} -BRANCHNAME=`git rev-parse --abbrev-ref HEAD` -echo "Copying tests/vagrant/vagrant-template dir to tests/vagrant/$BRANCHNAME" -mkdir -p tests/vagrant/$BRANCHNAME -cp -R tests/vagrant/vagrant-template/* tests/vagrant/$BRANCHNAME -echo "Change dir to vagrant dir: tests/vagrant/$BRANCHNAME" -echo "Vagrant directory is tests/vagrant/$BRANCHNAME" -echo -echo +function set_vm_attributes() +{ +    if [ "x$autostart" == "xyes" ] ; then +        virsh autostart ${BRANCHNAME}_vagrant-testVM +    fi +} +function copy_source_code() +{ +    echo "Copying source code from host machine to VM...." +    pushd "tests/vagrant/${BRANCHNAME}" +    vagrant ssh-config > ssh_config +    rsync -az -e "ssh -F ssh_config" --rsync-path="sudo rsync" "$ORIGIN_DIR/." vagrant-testVM:/home/vagrant/glusterfs +    if [ $? -eq 0 ] +    then +            popd +    else +            echo "Copy failed, exiting...." +            popd +            exit 1 +    fi +} + +function compile_gluster() +{ +    echo "Source compile and install Gluster...." +    pushd "tests/vagrant/${BRANCHNAME}" +    vagrant ssh -c "cd /home/vagrant/glusterfs ; sudo make clean $redirect" -- -t +    vagrant ssh -c "cd /home/vagrant/glusterfs ; sudo ./autogen.sh $redirect" -- -t +    if [ $? -ne 0 ] +    then +            echo "autogen failed, exiting...." +            popd +            exit 1 +    fi +    # GCC on fedora complains about uninitialized variables and +    # GCC on centos6 does not under don't warn on uninitialized variables flag. +    if [ "x$os" == "fedora" ] ; then +            custom_cflags="CFLAGS='-g -O0 -Werror -Wall -Wno-error=cpp -Wno-error=maybe-uninitialized'" +    else +            custom_cflags="CFLAGS='-g -O0 -Werror -Wall'" +    fi -echo "Doing vagrant up...." -cd tests/vagrant/$BRANCHNAME -vagrant up -if [ $? -eq 0 ] -then -        echo "Vagrant up successful" -        cd $ORIGIN_DIR -else -        echo "Vagrant up failed, exiting...."; -        cd $ORIGIN_DIR -        exit 1 -fi -echo -echo +    custom_cflags= +    vagrant ssh -c "cd /home/vagrant/glusterfs ; \ +            sudo \ +            $custom_cflags \ +            ./configure \ +            --prefix=/usr \ +            --exec-prefix=/usr \ +            --bindir=/usr/bin \ +            --sbindir=/usr/sbin \ +            --sysconfdir=/etc \ +            --datadir=/usr/share \ +            --includedir=/usr/include \ +            --libdir=/usr/lib64 \ +            --libexecdir=/usr/libexec \ +            --localstatedir=/var \ +            --sharedstatedir=/var/lib \ +            --mandir=/usr/share/man \ +            --infodir=/usr/share/info \ +            --libdir=/usr/lib64 \ +            --enable-debug $redirect" -- -t +    if [ $? -ne 0 ] +    then +            echo "configure failed, exiting...." +            popd +            exit 1 +    fi +    vagrant ssh -c "cd /home/vagrant/glusterfs; sudo make -j install $redirect" -- -t +    if [ $? -ne 0 ] +    then +            echo "make failed, exiting...." +            popd +            exit 1 +    fi +    popd +} +function run_tests() +{ +    pushd "tests/vagrant/${BRANCHNAME}" +    vagrant ssh -c "cd /home/vagrant/glusterfs; sudo ./run-tests.sh $run_tests_args" -- -t +    popd +} -if [ "x$autostart" == "xyes" ] ; then -    echo "autostart option enabled, calling virsh autostart" -    virsh autostart ${BRANCHNAME}_vagrant-testVM -    echo -    echo -fi +function ssh_into_vm_using_exec() +{ +    pushd "tests/vagrant/${BRANCHNAME}" +    exec vagrant ssh +    popd +} -echo "Copying source code from host machine to VM" -cd tests/vagrant/$BRANCHNAME -vagrant ssh-config > ssh_config -rsync -az -e "ssh -F ssh_config" --rsync-path="sudo rsync" "$ORIGIN_DIR/." vagrant-testVM:/home/vagrant/glusterfs -if [ $? -eq 0 ] -then -        echo "Copied." -        cd $ORIGIN_DIR -else -        echo "Copy failed, exiting...." -        cd $ORIGIN_DIR -        exit 1 -fi -echo  echo +parse_args "$@" +# Check environment for dependencies +force_location +vagrant_check +ansible_check -cd tests/vagrant/$BRANCHNAME -vagrant ssh -c 'cd /home/vagrant/glusterfs ; sudo make clean' -- -t -cd $ORIGIN_DIR -echo -echo +# We have one vm per git branch, query git branch +set_branchname_from_git_branch -cd tests/vagrant/$BRANCHNAME -vagrant ssh -c 'cd /home/vagrant/glusterfs ; sudo ./autogen.sh' -- -t -if [ $? -ne 0 ] -then -        echo "autogen failed, exiting...." -        cd $ORIGIN_DIR -        exit 1 +if [ "x$destroy_now" == "xyes" ] ; then +    destroy_vm_and_exit  fi -cd $ORIGIN_DIR -echo -echo -cd tests/vagrant/$BRANCHNAME -vagrant ssh -c 'cd /home/vagrant/glusterfs ; \ -        CFLAGS="-g -O0 -Werror -Wall -Wno-error=cpp -Wno-error=maybe-uninitialized" \ -        sudo ./configure \ -        --prefix=/usr \ -        --exec-prefix=/usr \ -        --bindir=/usr/bin \ -        --sbindir=/usr/sbin \ -        --sysconfdir=/etc \ -        --datadir=/usr/share \ -        --includedir=/usr/include \ -        --libdir=/usr/lib64 \ -        --libexecdir=/usr/libexec \ -        --localstatedir=/var \ -        --sharedstatedir=/var/lib \ -        --mandir=/usr/share/man \ -        --infodir=/usr/share/info \ -        --libdir=/usr/lib64 \ -        --enable-debug' -- -t -if [ $? -ne 0 ] -then -        echo "configure failed, exiting...." -        cd $ORIGIN_DIR -        exit 1 +if [ "x$sshvm" == "xyes" ] ; then +    ssh_into_vm_using_exec  fi -cd $ORIGIN_DIR -echo -echo -cd tests/vagrant/$BRANCHNAME -vagrant ssh -c 'cd /home/vagrant/glusterfs; sudo make -j install' -- -t -if [ $? -ne 0 ] -then -        echo "make failed, exiting...." -        cd $ORIGIN_DIR -        exit 1 -fi -cd $ORIGIN_DIR -echo -echo -cd tests/vagrant/$BRANCHNAME -vagrant ssh -c "cd /home/vagrant/glusterfs; sudo ./run-tests.sh $*" -- -t -cd $ORIGIN_DIR -echo -echo +create_vagrant_dir +start_vm +set_vm_attributes + + + +copy_source_code +compile_gluster +run_tests + +if [ "x$destroy_after_test" == "xyes" ] ; then +    destroy_vm_and_exit +fi  | 
