#!/bin/bash -e

# This test is not run via bats.
# A VNC session will be opened to observe the VM boot order:
# 1) from floppy  (followed by: eject floppy, reboot)
# 2) from cdrom   (followed by: eject cdrom, reboot)
# 3) from network (will timeout)
# 4) from disk

. $(dirname $0)/test_helper.bash

upload_img
upload_iso

id=$(new_ttylinux_vm)

function cleanup() {
  quit_vnc $vnc
  govc vm.destroy $id
  pkill -TERM -g $$ ^nc
}

trap cleanup EXIT

govc device.cdrom.add -vm $id > /dev/null
govc device.cdrom.insert -vm $id $GOVC_TEST_ISO

govc device.floppy.add -vm $id > /dev/null
govc device.floppy.insert -vm $id $GOVC_TEST_IMG

govc device.boot -vm $id -delay 1000 -order floppy,cdrom,ethernet,disk

vnc=$(govc vm.vnc -port 21122 -password govmomi -enable "${id}" | awk '{print $2}')

echo "booting from floppy..."
govc vm.power -on $id

open_vnc $vnc

sleep 10

govc vm.power -off $id

govc device.floppy.eject -vm $id

# this is ttylinux-live, notice the 'boot:' prompt vs 'login:' prompt when booted from disk
echo "booting from cdrom..."
govc vm.power -on $id

sleep 10

govc vm.power -off $id

govc device.cdrom.eject -vm $id

host_ip=$(echo $vnc | awk -F@ '{print $2}' | awk -F: '{print $1}')
serial_port=33233
govc device.serial.add -vm $id > /dev/null
govc device.serial.connect -vm $id $uri telnet://:$serial_port

echo "booting from network, will timeout then boot from disk..."
govc vm.power -on $id

# capture serial console
echo | nc $host_ip $serial_port 2>/dev/null &

ip=$(govc vm.ip $id)

echo "VM booted from disk (ip=$ip)"

sleep 5

govc vm.power -s $id

sleep 5
