From b1d35570df08ee879e80cd3690ccdd9e331b7f9d Mon Sep 17 00:00:00 2001 From: Alexander Boettcher Date: Wed, 19 Apr 2017 10:43:14 +0200 Subject: [PATCH] vbox5: add shared folder test Issue #2338 --- repos/ports/run/vbox4_win7_32_share.run | 332 +--------------------- repos/ports/run/vbox5_win7_64_share.run | 23 ++ repos/ports/run/vbox_share.inc | 362 ++++++++++++++++++++++++ repos/ports/run/vm_auto_share.vbox | 188 ------------ repos/ports/run/vm_win7_32_share.vbox | 105 +++++++ repos/ports/run/vm_win7_64_share.vbox | 105 +++++++ tool/autopilot.list | 1 + 7 files changed, 599 insertions(+), 517 deletions(-) create mode 100644 repos/ports/run/vbox5_win7_64_share.run create mode 100644 repos/ports/run/vbox_share.inc delete mode 100644 repos/ports/run/vm_auto_share.vbox create mode 100644 repos/ports/run/vm_win7_32_share.vbox create mode 100644 repos/ports/run/vm_win7_64_share.vbox diff --git a/repos/ports/run/vbox4_win7_32_share.run b/repos/ports/run/vbox4_win7_32_share.run index 2b350b5096..3b2f7b920d 100644 --- a/repos/ports/run/vbox4_win7_32_share.run +++ b/repos/ports/run/vbox4_win7_32_share.run @@ -1,79 +1,3 @@ -# -# This script is used to test the shared folder support of Vbox@Genode/NOVA. -# -# Requirements to run this script: -# - hard disk with 4 primary partitions -# - on the 4. partition an ext2 filesystem is expected with following files: -# -- /win7.vdi -# -- /ram/overlay_win7.vdi -# -# The overlay file must be generated beforehand, e.g.: -# -# vboxmanage showhdinfo win7.vdi -# -# to find out the size of the vdi and then to create the overlay: -# -# vboxmanage createhd --filename overlay_win7.vdi --size [vdi_size] --format vdi -# -# -# -# -# The Windows image (win7.vdi) is prepared to contain a bat file with following -# content: -# -# :check -# IF EXIST E:\test.bat (GOTO start) ELSE (timeout /t 3 >nul) -# GOTO check -# -# :start -# -# call E:\test.bat -# -# This file must be configured to be autostarted by Windows, e.g change the -# value in the registry entry at -# -# HKEY_CURRENT_USER\Software/Microsoft\Windows\CurrentVersion\Run -# -# to the batch file in the Windows vdi image as described above. -# -# -# What this script does: -# -# A VM containing a Win7 image is started configured with two different -# Virtualbox fileshares (D: and E:). One contains a test file (test.bin), -# which will be copied by the Windows VM from the one file share over to the -# second one. -# On Genode side a Noux instance is running a bash shell with the two -# filesystems mounted. The shell is scripted by this script to wait for -# completion of the copy operation performed by the Windows VM. If this is -# detected, the bash scripts use sha1sum to generate hashes of the original -# test file of the one file system share and of the copy on the second file -# system share. This run scripts then compares the hashes and reports -# "Test succeeded" if they are identical. -# -# This script generates the test file out of /dev/urandom and generates a -# batch file test.bat which is placed in the shared folder for the VM. test.bat -# is invoked by the batch file running already in the Windows VM as described -# beforehand. test.bat contains the actual instructions to be performed by -# the VM - for this script to copy the test.bin file from D: to E:. - -if {[have_include "power_on/qemu"]} { - puts "\nRun script does not support Qemu.\n" - exit 0 -} - -# Tested for nova and muen. -if {(![have_spec nova] && ![have_spec muen])} { - puts "Platform is unsupported." - exit 0 -} - -set virtualbox_binary "virtualbox-rem" -if {[have_spec muen]} { set virtualbox_binary "virtualbox-muen" } -if {[have_spec nova]} { set virtualbox_binary "virtualbox-nova" } -set virtualbox5_binary "virtualbox5-rem" -if {[have_spec nova]} { set virtualbox5_binary "virtualbox5-nova" } - set flavor "win7" set use_vbox4 1 @@ -86,262 +10,12 @@ set use_overlay_from_disk 1 set overlay_image "overlay_${flavor}.vdi" set use_rumpfs 1 -set use_usb 0 +set use_usb 1 set use_ps2 [have_spec ps2] set use_vms 1 set use_cpu_load 0 -# -# Create .bat file to be executed by Win VM -# -set template_bat_fd [open "bin/template.bat" w] -puts $template_bat_fd {:check -IF EXIST E:\start.txt (GOTO start) ELSE (timeout /t 3 >nul) -GOTO check +set vbox_file "vm_${flavor}_32_share.vbox" -:start - -copy D:\test.bin E:\test.bin -copy D:\template.bat E:\done.txt -shutdown /s /t 00} - -close $template_bat_fd - -# Convert bat file to dos format -catch { exec unix2dos bin/template.bat } - -# -# Create random test binary to be copied via shared folder of vbox -# -catch { exec dd if=/dev/urandom of=bin/test.bin bs=4096 count=8160 } - -# -# Step 1: prepare and start the actual VM -# -set build_components { - server/ram_fs server/report_rom - server/tcp_terminal drivers/nic - lib/libc_noux - noux/minimal -} - -# -# Build Noux packages only once -# -foreach pkg {bash coreutils} { - lappend_if [expr ![file exists bin/$pkg]] build_components noux-pkg/$pkg } - -set boot_modules { - ram_fs - noux libc_noux.lib.so bash.tar coreutils.tar - tcp_terminal lwip.lib.so nic_drv report_rom - test.bin template.bat - vm_auto_share.vbox -} - -set config_of_app { - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - } -append config_of_app " - " -append config_of_app { - - - - - - } - -append_if [expr $use_ram_fs] config_of_app { - } - -append config_of_app { - - - - - - - } - -append_if [expr $use_ram_fs] config_of_app { - - - } - -append config_of_app { - - - - - - - - - - -} - -source ${genode_dir}/repos/ports/run/virtualbox_auto.inc - -exec tar cfv bin/bash.tar -h -C bin/bash . -exec tar cfv bin/coreutils.tar -h -C bin/coreutils . -exec cp ${genode_dir}/repos/ports/run/vm_auto_share.vbox bin/. - -build_boot_image $boot_modules - -# -# Step 2: Read out TCP/IP address of tcp_terminal running on Genode target -# -run_genode_until {\[init -> tcp_terminal\] got IP address [0-9]+\.[0-9]+\.[0-9]+\.[0-9]+} 20 -set serial_id [output_spawn_id] - -regexp {\[init -> tcp_terminal\] got IP address [0-9]+\.[0-9]+\.[0-9]+\.[0-9]+} $output serial_ip_addr -regexp {[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+} $serial_ip_addr serial_ip_addr - -# -# Step 3: Wait until Windows is up for sure -# - - -run_genode_until {\[init -\> vbox1\].*Guest Additions capability report:.*seamless: yes, hostWindowMapping: no, graphics: yes} 300 $serial_id - - -# -# Step 4 : connect to Noux of the running Genode target and issue bash commands -# via netcat -# -puts "\nTest shared folder\n" - -spawn netcat $serial_ip_addr 8888 -set noux_id $spawn_id - -run_genode_until {\[init -> tcp_terminal\] connection established} 20 $serial_id - -# -# Step 5 : interact with netcat -> ... -> tcp_terminal -> Noux -> bash -# - -# Windows does not like trailing zeros introduced by our ROM service. -# -> .bat script does not find labels like 'check' with zero bytes -# so - delete zero bytes -puts $noux_id "cat from/template\.bat | tr -d \"\\0\" >to/test\.bat" - -# SHA1 of original file -puts $noux_id "sha1sum from/test.bin" - -# Tell Windows VM to start copying -puts $noux_id "echo \"start\" > to/start\.txt" - -# Wait until Windows finished copying -puts $noux_id "while \[ ! -f to/done\.txt ]" -puts $noux_id "do" -puts $noux_id "sleep 5" -puts $noux_id "done" - -# Wait until VM signaled shutdown state -run_genode_until {\[init\] child "vbox1" exited with exit value 0} 120 $serial_id - -# SHA1 of copied file -puts $noux_id "sha1sum to/test.bin" - -# Wait for output of bash shell until last SHA1 sum is calculated -run_genode_until {[[:xdigit:]]+ to/test\.bin} 50 $noux_id - - -# cleanup created files -foreach pkg {bash coreutils} { exec rm -f bin/$pkg.tar } -exec rm -f bin/test.bin -exec rm -f bin/template.bat -exec rm -f bin/vm_auto_share.vbox - - -# -# Step 5: Compare sha1sum of original file and of copy made by .bat file in VM -# -set sha1sum_original [regexp -inline {[[:xdigit:]]+ from/test\.bin} $output] -set sha1sum_copy [regexp -inline {[[:xdigit:]]+ to/test\.bin} $output] -set sha1sum_original [regexp -inline {[[:xdigit:]]+} $sha1sum_original] -set sha1sum_copy [regexp -inline {[[:xdigit:]]+} $sha1sum_copy] - -puts -nonewline "\n$sha1sum_original ?= $sha1sum_copy --> " -if {$sha1sum_original eq ""} { - puts " empty -> no " -} else { - if {$sha1sum_original != $sha1sum_copy} { - puts "no" - exit -1 - } else { - puts "yes" - } -} +source ${genode_dir}/repos/ports/run/vbox_share.inc diff --git a/repos/ports/run/vbox5_win7_64_share.run b/repos/ports/run/vbox5_win7_64_share.run new file mode 100644 index 0000000000..8f8da1d337 --- /dev/null +++ b/repos/ports/run/vbox5_win7_64_share.run @@ -0,0 +1,23 @@ +assert_spec 64bit + +set flavor "win7_64" + +set use_vbox4 0 +set use_vbox5 1 + +set vdi_image "${flavor}.vdi" +# Write overlay back to harddisk if set to 0 +set use_ram_fs 1 +set use_overlay_from_disk 1 +set overlay_image "overlay_${flavor}.vdi" +set use_rumpfs 1 + +set use_usb 1 +set use_ps2 [have_spec ps2] + +set use_vms 1 +set use_cpu_load 0 + +set vbox_file "vm_${flavor}_share.vbox" + +source ${genode_dir}/repos/ports/run/vbox_share.inc diff --git a/repos/ports/run/vbox_share.inc b/repos/ports/run/vbox_share.inc new file mode 100644 index 0000000000..78f93b4c84 --- /dev/null +++ b/repos/ports/run/vbox_share.inc @@ -0,0 +1,362 @@ +# +# This script is used to test the shared folder support of Vbox@Genode/NOVA. +# +# Requirements to run this script: +# - hard disk with 4 primary partitions +# - on the 4. partition an ext2 filesystem is expected with following files: +# -- /win7.vdi +# -- /ram/overlay_win7.vdi +# +# The overlay file must be generated beforehand, e.g.: +# +# vboxmanage showhdinfo win7.vdi +# +# to find out the size of the vdi and then to create the overlay: +# +# vboxmanage createhd --filename overlay_win7.vdi --size [vdi_size] --format vdi +# +# +# +# +# The Windows image (win7.vdi) is prepared to contain a bat file with following +# content: +# +# :check +# IF EXIST E:\test.bat (GOTO start) ELSE (timeout /t 3 >nul) +# GOTO check +# +# :start +# +# call E:\test.bat +# +# This file must be configured to be autostarted by Windows, e.g change the +# value in the registry entry at +# +# HKEY_CURRENT_USER\Software/Microsoft\Windows\CurrentVersion\Run +# +# to the batch file in the Windows vdi image as described above. +# +# +# What this script does: +# +# A VM containing a Win7 image is started configured with two different +# Virtualbox fileshares (D: and E:). One contains a test file (test.bin), +# which will be copied by the Windows VM from the one file share over to the +# second one. +# On Genode side a Noux instance is running a bash shell with the two +# filesystems mounted. The shell is scripted by this script to wait for +# completion of the copy operation performed by the Windows VM. If this is +# detected, the bash scripts use sha1sum to generate hashes of the original +# test file of the one file system share and of the copy on the second file +# system share. This run scripts then compares the hashes and reports +# "Test succeeded" if they are identical. +# +# This script generates the test file out of /dev/urandom and generates a +# batch file test.bat which is placed in the shared folder for the VM. test.bat +# is invoked by the batch file running already in the Windows VM as described +# beforehand. test.bat contains the actual instructions to be performed by +# the VM - for this script to copy the test.bin file from D: to E:. + +if {[have_include "power_on/qemu"]} { + puts "\nRun script does not support Qemu.\n" + exit 0 +} + +# Tested for nova and muen. +if {(![have_spec nova] && ![have_spec muen])} { + puts "Platform is unsupported." + exit 0 +} + +set virtualbox_binary "virtualbox-rem" +if {[have_spec muen]} { set virtualbox_binary "virtualbox-muen" } +if {[have_spec nova]} { set virtualbox_binary "virtualbox-nova" } +set virtualbox5_binary "virtualbox5-rem" +if {[have_spec nova]} { set virtualbox5_binary "virtualbox5-nova" } + +# +# Create .bat file to be executed by Win VM +# +set template_bat_fd [open "bin/template.bat" w] +puts $template_bat_fd {:check +IF EXIST E:\start.txt (GOTO start) ELSE (timeout /t 3 >nul) +GOTO check + +:start + +copy D:\test.bin E:\test.bin +copy D:\template.bat E:\done.txt +shutdown /s /t 00} + +close $template_bat_fd + +# Convert bat file to dos format +catch { exec unix2dos bin/template.bat } + +# +# Create random test binary to be copied via shared folder of vbox +# +catch { exec dd if=/dev/urandom of=bin/test.bin bs=4096 count=8160 } + +# +# Step 1: prepare and start the actual VM +# +set build_components { + server/input_merger + server/ram_fs server/report_rom + server/tcp_terminal drivers/nic + lib/libc_noux + noux/minimal +} + +# +# Build Noux packages only once +# +foreach pkg {bash coreutils} { + lappend_if [expr ![file exists bin/$pkg]] build_components noux-pkg/$pkg } + +set boot_modules { + ram_fs + noux libc_noux.lib.so bash.tar coreutils.tar + tcp_terminal lwip.lib.so nic_drv report_rom + input_merger + test.bin template.bat +} + +append boot_modules $vbox_file + +set config_of_app { + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + } +append_if [expr $use_ps2] config_of_app { + } +append_if [expr $use_usb] config_of_app { + } +append config_of_app { + + } +append_if [expr $use_ps2] config_of_app { + } +append_if [expr $use_usb] config_of_app { + } +append config_of_app { + + + + + } +append_if [expr $use_vbox4] config_of_app " + " +append_if [expr $use_vbox5] config_of_app " + " +append config_of_app { + + + + + + } + +append_if [expr $use_ram_fs] config_of_app { + } + +append config_of_app { + + + + + + + } + +append_if [expr $use_ram_fs] config_of_app { + + + } + +append config_of_app { + + + + + + + + + + + +} + +source ${genode_dir}/repos/ports/run/virtualbox_auto.inc + +exec tar cfv bin/bash.tar -h -C bin/bash . +exec tar cfv bin/coreutils.tar -h -C bin/coreutils . +exec cp ${genode_dir}/repos/ports/run/$vbox_file bin/. + +build_boot_image $boot_modules + +# +# Step 2: Read out TCP/IP address of tcp_terminal running on Genode target +# +run_genode_until {\[init -> tcp_terminal\] got IP address [0-9]+\.[0-9]+\.[0-9]+\.[0-9]+} 20 +set serial_id [output_spawn_id] + +regexp {\[init -> tcp_terminal\] got IP address [0-9]+\.[0-9]+\.[0-9]+\.[0-9]+} $output serial_ip_addr +regexp {[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+} $serial_ip_addr serial_ip_addr + +# +# Step 3: Wait until Windows is up for sure +# + + +run_genode_until {\[init -\> vbox1\].*Guest Additions capability report:.*seamless: yes, hostWindowMapping: no, graphics: yes} 300 $serial_id + + +# +# Step 4 : connect to Noux of the running Genode target and issue bash commands +# via netcat +# +puts "\nTest shared folder\n" + +spawn netcat $serial_ip_addr 8888 +set noux_id $spawn_id +set spawn_id_list [list $noux_id $serial_id] + +run_genode_until {\[init -> tcp_terminal\] connection established} 20 $spawn_id_list + +# +# Step 5 : interact with netcat -> ... -> tcp_terminal -> Noux -> bash +# + +# Windows does not like trailing zeros introduced by our ROM service. +# -> .bat script does not find labels like 'check' with zero bytes +# so - delete zero bytes +puts $noux_id "cat from/template\.bat | tr -d \"\\0\" >to/test\.bat" + +# SHA1 of original file +puts $noux_id "sha1sum from/test.bin" + +# Tell Windows VM to start copying +puts $noux_id "echo \"start\" > to/start\.txt" + +# Wait until Windows finished copying +puts $noux_id "while \[ ! -f to/done\.txt ]" +puts $noux_id "do" +puts $noux_id "sleep 5" +puts $noux_id "done" + +# Wait until VM signaled shutdown state +run_genode_until {\[init\] child "vbox1" exited with exit value 0} 120 $spawn_id_list + +# SHA1 of copied file +puts $noux_id "sha1sum to/test.bin" + +# Wait for output of bash shell until last SHA1 sum is calculated +run_genode_until {[[:xdigit:]]+ to/test\.bin} 50 $spawn_id_list + + +# cleanup created files +foreach pkg {bash coreutils} { exec rm -f bin/$pkg.tar } +exec rm -f bin/test.bin +exec rm -f bin/template.bat +exec rm -f bin/$vbox_file + + +# +# Step 5: Compare sha1sum of original file and of copy made by .bat file in VM +# +set sha1sum_original [regexp -inline {[[:xdigit:]]+ from/test\.bin} $output] +set sha1sum_copy [regexp -inline {[[:xdigit:]]+ to/test\.bin} $output] +set sha1sum_original [regexp -inline {[[:xdigit:]]+} $sha1sum_original] +set sha1sum_copy [regexp -inline {[[:xdigit:]]+} $sha1sum_copy] + +puts -nonewline "\n$sha1sum_original ?= $sha1sum_copy --> " +if {$sha1sum_original eq ""} { + puts " empty -> no " +} else { + if {$sha1sum_original != $sha1sum_copy} { + puts "no" + exit -1 + } else { + puts "yes" + } +} diff --git a/repos/ports/run/vm_auto_share.vbox b/repos/ports/run/vm_auto_share.vbox deleted file mode 100644 index 09f2e07735..0000000000 --- a/repos/ports/run/vm_auto_share.vbox +++ /dev/null @@ -1,188 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/repos/ports/run/vm_win7_32_share.vbox b/repos/ports/run/vm_win7_32_share.vbox new file mode 100644 index 0000000000..1576012152 --- /dev/null +++ b/repos/ports/run/vm_win7_32_share.vbox @@ -0,0 +1,105 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/repos/ports/run/vm_win7_64_share.vbox b/repos/ports/run/vm_win7_64_share.vbox new file mode 100644 index 0000000000..41190ff610 --- /dev/null +++ b/repos/ports/run/vm_win7_64_share.vbox @@ -0,0 +1,105 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tool/autopilot.list b/tool/autopilot.list index 013924d5e7..e465b559b1 100644 --- a/tool/autopilot.list +++ b/tool/autopilot.list @@ -55,6 +55,7 @@ vbox4_win81_64 vbox4_win10_64 vbox5_win7_32 vbox5_win7_64 +vbox5_win7_64_share vbox5_win10_64 tz_vmm vmm