]> git.proxmox.com Git - qemu-server.git/blobdiff - test/run_config2command_tests.pl
split get_basic_machine_info into get_vm_arch and get_vm_machine
[qemu-server.git] / test / run_config2command_tests.pl
index 3fe48553faba8fe706b969e17450c988bc9dfbde..9b0b3bb3fb0471992086228dcce00094b8fd1eeb 100755 (executable)
@@ -105,7 +105,13 @@ my $qemu_server_module;
 $qemu_server_module = Test::MockModule->new('PVE::QemuServer');
 $qemu_server_module->mock(
     kvm_user_version => sub {
-       return $current_test->{qemu_version} // $base_env->{real_qemu_version};
+       return $current_test->{qemu_version} // $base_env->{real_qemu_version} // '2.12';
+    },
+    kvm_version => sub {
+       return $current_test->{qemu_version} // $base_env->{real_qemu_version} // '2.12';
+    },
+    kernel_has_vhost_net => sub {
+       return 1; # TODO: make this per-test configurable?
     },
     get_host_arch => sub() {
        return $current_test->{host_arch} // 'x86_64';
@@ -125,6 +131,53 @@ $qemu_server_config->mock(
     },
 );
 
+my $pve_common_tools;
+$pve_common_tools = Test::MockModule->new('PVE::Tools');
+$pve_common_tools->mock(
+    next_vnc_port => sub {
+       my ($family, $address) = @_;
+
+       return '5900';
+    },
+    next_spice_port => sub {
+       my ($family, $address) = @_;
+
+       return '61000';
+    },
+);
+
+sub diff($$) {
+    my ($a, $b) = @_;
+    return if $a eq $b;
+
+    my ($ra, $wa) = POSIX::pipe();
+    my ($rb, $wb) = POSIX::pipe();
+    my $ha = IO::Handle->new_from_fd($wa, 'w');
+    my $hb = IO::Handle->new_from_fd($wb, 'w');
+
+    open my $diffproc, '-|', 'diff', '-up', "/proc/self/fd/$ra", "/proc/self/fd/$rb"
+       or die "failed to run program 'diff': $!";
+    POSIX::close($ra);
+    POSIX::close($rb);
+
+    open my $f1, '<', \$a;
+    open my $f2, '<', \$b;
+    my ($line1, $line2);
+    do {
+       $ha->print($line1) if defined($line1 = <$f1>);
+       $hb->print($line2) if defined($line2 = <$f2>);
+    } while (defined($line1 // $line2));
+    close $f1;
+    close $f2;
+    close $ha;
+    close $hb;
+
+    local $/ = undef;
+    my $diff = <$diffproc>;
+    close $diffproc;
+    die "files differ:\n$diff";
+}
+
 sub do_test($) {
     my ($config_fn) = @_;
 
@@ -150,13 +203,21 @@ sub do_test($) {
     if (-f $cmd_fn) {
        my $cmdline_expected = file_get_contents($cmd_fn);
 
-       my $cmd_expected = [ sort split /\s*\\?\n\s*/, $cmdline_expected ];
-       my $cmd = [ sort split /\s*\\?\n\s*/, $cmdline ];
+       my $cmd_expected = [ split /\s*\\?\n\s*/, $cmdline_expected ];
+       my $cmd = [ split /\s*\\?\n\s*/, $cmdline ];
 
        # comment out for easier debugging
        #file_set_contents("$cmd_fn.tmp", $cmdline);
 
-       is_deeply($cmd, $cmd_expected, "$testname")
+       my $exp = join("\n", @$cmd_expected);
+       my $got = join("\n", @$cmd);
+       eval { diff($exp, $got) };
+       if (my $err = $@) {
+           fail("$testname");
+           note($err);
+       } else {
+           pass("$testname");
+       }
     } else {
        file_set_contents($cmd_fn, $cmdline);
     }