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 |