diff --git a/ports/run/virtualbox_auto.inc b/ports/run/virtualbox_auto.inc new file mode 100644 index 0000000000..89f62409a6 --- /dev/null +++ b/ports/run/virtualbox_auto.inc @@ -0,0 +1,165 @@ +assert_spec nova + +if {[is_qemu_available]} { + puts "\nScript running on Qemu is not supported.\n" + exit +} + +set build_components { + core init virtualbox + server/part_blk + server/rump_fs + drivers/ahci + drivers/input + drivers/framebuffer + drivers/timer +} + +lappend_if [have_spec acpi] build_components drivers/acpi +lappend_if [have_spec pci] build_components drivers/pci + +build $build_components + +create_boot_directory + +set config { + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +} + +append_if [have_spec acpi] config { + + + + + + + + + + + + } + +append_if [expr ![have_spec acpi] && [have_spec pci]] config { + + + + } + +append_if [have_spec ps2] config { + + + + } + +append_if [have_spec framebuffer] config { + + + + + } + +append config $config_of_app + +append config { + +} + +install_config $config + +set boot_modules { + core init timer + part_blk ahci + ld.lib.so libc.lib.so libc_fs.lib.so + rump.lib.so rump_fs.lib.so rump_fs + virtualbox vbox-auto-test-helper +} + +# +# Stuff to generate overlay.vdi if required +# +# generate overlay VDI +#proc vdi { } { +# global vdi_image +# return "bin/$vdi_image" +#} +#proc overlay_vdi { } { return "bin/overlay.vdi" } +#proc vdi_size {} { +# catch { +# set result [ exec vboxmanage showhdinfo [vdi] | \ +# grep "^Logical" | sed "s/\[^0-9\]\\+//;s/ .*//" ] +# } +# return $result +#} +# +#file delete -force [overlay_vdi] +#if {$use_vdi} { +# if {![file exists [vdi]]} { +# puts "VDI image [vdi] missing!" +# exit -1 +# } +# catch { +# exec -ignorestderr vboxmanage createhd --filename [overlay_vdi] --size [vdi_size] --format vdi +# exec chmod a+r [overlay_vdi] +# append boot_modules "overlay.vdi" +# } +#} + +# platform-specific modules +lappend_if [have_spec ps2] boot_modules ps2_drv +lappend_if [have_spec acpi] boot_modules acpi_drv +lappend_if [have_spec pci] boot_modules pci_drv +lappend_if [have_spec framebuffer] boot_modules fb_drv +lappend_if [have_spec nova] boot_modules pci_device_pd + +build_boot_image $boot_modules + +append qemu_args " -m 1512 " +append qemu_args " -cpu phenom " diff --git a/ports/run/virtualbox_auto_disk.run b/ports/run/virtualbox_auto_disk.run new file mode 100644 index 0000000000..94cdff9af2 --- /dev/null +++ b/ports/run/virtualbox_auto_disk.run @@ -0,0 +1,54 @@ +set use_vdi 1 +set use_iso 0 +set vdi_image "win7.vdi" + +set config_of_app { + + + + + + + +} + +source ${genode_dir}/ports/run/virtualbox_auto.inc + +run_genode_until "vbox_auto_test_helper is done." 20 +exec kill [exp_pid −i $spawn_id] + +set config_of_app { + + + + } + +if {$use_iso} { +append config_of_app " + " +} + +if {$use_vdi} { +append config_of_app " + " +} + +append config_of_app { + + + + + + +} + +source ${genode_dir}/ports/run/virtualbox_auto.inc + + +run_genode_until "ignore resize request to 720x400" 20 +run_genode_until "ignore resize request to 640x480" 15 $spawn_id +run_genode_until "ignore resize request to 800x600" 25 $spawn_id +run_genode_until "ignore resize request to 800x600" 60 $spawn_id +run_genode_until "ignore resize request to 720x400" 10 $spawn_id + +puts "\nTest succeeded" diff --git a/ports/src/virtualbox/autotest/main.cc b/ports/src/virtualbox/autotest/main.cc new file mode 100644 index 0000000000..41053d293f --- /dev/null +++ b/ports/src/virtualbox/autotest/main.cc @@ -0,0 +1,34 @@ +#include +#include + +#include +#include + +static char buf[256]; + +int main(int argc, char **argv) +{ + using Genode::printf; + + int res = unlink("/ram/overlay.vdi"); + printf("unlink result %d\n", res); + + int fd_src = open("/ram/overlay-original.vdi", O_RDONLY); + int fd_dst = creat("/ram/overlay.vdi", O_CREAT); + size_t len, sum = 0; + + printf("fd_src %d fd_dst %d\n", fd_src, fd_dst); + if (fd_src < 0 || fd_dst < 0) + return 1; + + while ((len = read(fd_src, buf, sizeof(buf))) > 0) { + write(fd_dst, buf, len); + sum += len; + } + close(fd_src); + close(fd_dst); + + printf("wrote %zu bytes to overlay.vdi - res=%d\n", sum, len); + printf("vbox_auto_test_helper is done.\n"); + return 0; +} diff --git a/ports/src/virtualbox/autotest/target.mk b/ports/src/virtualbox/autotest/target.mk new file mode 100644 index 0000000000..592292e517 --- /dev/null +++ b/ports/src/virtualbox/autotest/target.mk @@ -0,0 +1,3 @@ +TARGET = vbox-auto-test-helper +SRC_CC = main.cc +LIBS = libc libc_fs