Skip to content
This repository has been archived by the owner on Oct 4, 2023. It is now read-only.

Commit

Permalink
Kvm infrastructure for running local tests (#139)
Browse files Browse the repository at this point in the history
  • Loading branch information
Omer Akram authored and David Barth committed Feb 14, 2017
1 parent 869af40 commit 1da0882
Show file tree
Hide file tree
Showing 5 changed files with 128 additions and 8 deletions.
4 changes: 2 additions & 2 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -69,7 +69,7 @@
"vinyl-source-stream": "~1.1.0",
"watchify": "~3.1.2",
"wdio-junit-reporter": "^0.1.0",
"wdio-mocha-framework": "^0.5.4",
"webdriverio": "^4.4.0"
"wdio-mocha-framework": "^0.5.8",
"webdriverio": "^4.6.1"
}
}
2 changes: 2 additions & 0 deletions spread/image/create-image.sh
Original file line number Diff line number Diff line change
Expand Up @@ -136,6 +136,8 @@ rm /writable/system-data/var/lib/console-conf/complete
# Mark us done
touch /writable/system-data/var/lib/devmode-firstboot/complete
echo ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDQhliDv2ql/5YW/XE6nKd8Do9lhzeLC6ubUD8qO294FQ3hJdxhXJhJnSTmDbvDtzyviYhRitw03+pnKLv7SMBlvReX1QwsaxJdflW7pP8tll5tbqDCiLv66KewApLUQuPXAtgJCtYlwyOhHQNbw1fs37AsicmcKgpr0ow2GpNqgwCNwf8cizCD4XceafeJ4pwO+LTM1Y4uXqsFPfY21t1PVxKDwhcZ/4P/9zheyrMP+5xNsFBzUWMM9icKJUn3YDXRjaTIOB8+eam5xuqJZC1Ig4ZjBrRcp3vohDvsVccTcLXzbdBFNIxao/ZhrMW/PeKLcvVY+z4gX3Ev3eqx4GOP snapweb.ci@gmail.com > /home/test/.ssh/authorized_keys
# Reboot the system as its now prepared for the user
reboot
EOF
Expand Down
87 changes: 87 additions & 0 deletions tests/kvm-exec.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,87 @@
#!/bin/sh

FILE_PID=kvm.pid
FILE_MONITOR=monitor
PORT_SSH=8022
IMAGE_BOOTABLE=${IMAGE_BOOTABLE:-ubuntu-core-16.img}

is_vm_running() {
if [ -e $FILE_PID ] && [ -e $FILE_MONITOR ]; then
return 0
fi
return 1
}

send_cmd() {
QEMU_MONITOR_COMMAND=$1
echo "${QEMU_MONITOR_COMMAND}" | socat - UNIX-CONNECT:${FILE_MONITOR}
}

stop_vm() {
send_cmd quit
}

start_vm() {

if [ ! -e ${IMAGE_BOOTABLE} ]; then
IMAGE_BOOTABLE=${HOME}/.spread/qemu/${IMAGE_BOOTABLE}
if [ ! -e ${IMAGE_BOOTABLE} ]; then
echo "Unable to find a bootable image"
exit 1
fi
fi

qemu-system-x86_64 \
-enable-kvm -snapshot \
-m 500 \
-net nic -net user,hostfwd=tcp::$PORT_SSH-:22,hostfwd=tcp::4201-:4201 \
-drive file=$IMAGE_BOOTABLE,format=raw \
-pidfile $FILE_PID \
-monitor unix:$FILE_MONITOR,server,nowait \
-serial unix:$FILE_MONITOR.serial,server,nowait \
-nographic &
}

if [ $# -ne 1 ]; then
echo "Need exactly one argument to run."
echo "Try running as $0 start|stop|status"
exit 1
fi

if [ $1 != "start" ] && [ $1 != "stop" ] && [ $1 != "status" ]; then
echo "Invalid argument provided."
echo "Try running as $0 start|stop|status"
exit 1
fi

if [ $1 = "start" ]; then
if is_vm_running; then
echo "Cannot start vm is already running."
exit 1
fi
echo "Starting"
start_vm
fi

if [ $1 = "stop" ]; then
if is_vm_running; then
stop_vm
# If VM still running, force clean
if is_vm_running; then
rm $FILE_PID
rm $FILE_MONITOR
fi
echo "Stopped"
exit 1
fi
echo "Nothing to stop."
exit 1
fi

if [ $1 = "status" ]; then
if is_vm_running; then
echo "Running"
else
echo "Not running"
fi
fi
15 changes: 9 additions & 6 deletions tests/remote-install-snap.sh
Original file line number Diff line number Diff line change
Expand Up @@ -11,10 +11,13 @@ fi

snap_name="${snap##*/}"

ssh -p $port $user@$host "if [ -d tmpsnaps ]; then rm -rf tmpsnaps; fi; mkdir tmpsnaps;"
scp -P $port $snap $user@$host:/home/$user/tmpsnaps/
ssh -p $port $user@$host "sudo snap remove snapweb >/dev/null"
ssh -p $port $user@$host "sudo snap install /home/$user/tmpsnaps/$snap_name --devmode"
SSH_OPTS="-o StrictHostKeyChecking=no"
SSH_OPTS="$SSH_OPTS -p $port $user@$host"

ssh ${SSH_OPTS} "if [ -d tmpsnaps ]; then rm -rf tmpsnaps; fi; mkdir tmpsnaps;"
scp -P $port $snap $user@$host:~/tmpsnaps/
ssh ${SSH_OPTS} "sudo snap remove snapweb >/dev/null"
ssh ${SSH_OPTS} "sudo snap install ~/tmpsnaps/$snap_name --devmode"
# need to manually connect interfaces as snapd won't do it anymore in devmode
ssh -p $port $user@$host "sudo snap connect snapweb:snapd-control"
ssh -p $port $user@$host "sudo snap connect snapweb:timeserver-control"
ssh ${SSH_OPTS} "sudo snap connect snapweb:snapd-control"
ssh ${SSH_OPTS} "sudo snap connect snapweb:timeserver-control"
28 changes: 28 additions & 0 deletions tests/setup-remote-kvm.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
#!/usr/bin/env bash
set +x

user=$1
host=$2
port=$3
snap=$4
kvm_user=test
home=~

if [ $# -lt 4 ]; then
echo "Invalid number of arguments provided"
echo "Run as ./$0 user host kvm_ssh_port snap_file"
exit 1
fi

ssh $user@$host "if [ -d image ]; then rm -rf image; fi"
scp -r ../spread/image/ $user@$host:~/
scp -r kvm-exec.sh $user@$host:~/image/
ssh $user@$host "apt update"
ssh $user@$host "apt -y install qemu-kvm socat ubuntu-image kpartx"
ssh $user@$host "cd image; ./create-image.sh"
ssh $user@$host "cd image; ./kvm-exec.sh stop"
ssh $user@$host "cd image; ./kvm-exec.sh start >/dev/null"
sleep 120
ssh-keygen -f "$home/.ssh/known_hosts" -R [$host]:$port
./remote-install-snap.sh $kvm_user $host $port $4
./run-tests.sh $kvm_user $host $port true

0 comments on commit 1da0882

Please sign in to comment.