]> git.proxmox.com Git - qemu-server.git/commitdiff
qemu-server: make nodename mock-able for tests
authorThomas Lamprecht <t.lamprecht@proxmox.com>
Tue, 10 Dec 2019 10:05:39 +0000 (11:05 +0100)
committerThomas Lamprecht <t.lamprecht@proxmox.com>
Tue, 10 Dec 2019 10:08:33 +0000 (11:08 +0100)
Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
PVE/QemuServer.pm
test/run_config2command_tests.pl

index 00a12c759f9a803f8f32ad583465ea42b1ef2bb2..0b4c597368ff0c0fc5554b9c5ba888ef1a9b507f 100644 (file)
@@ -108,7 +108,11 @@ sub cgroups_write {
 
 }
 
-my $nodename = PVE::INotify::nodename();
+my $nodename_cache;
+sub nodename {
+    $nodename_cache //= PVE::INotify::nodename();
+    return $nodename_cache;
+}
 
 my $cpu_vendor_list = {
     # Intel CPUs
@@ -2805,6 +2809,7 @@ sub config_list {
     my $res = {};
     return $res if !$vmlist || !$vmlist->{ids};
     my $ids = $vmlist->{ids};
+    my $nodename = nodename();
 
     foreach my $vmid (keys %$ids) {
        my $d = $ids->{$vmid};
@@ -2863,7 +2868,7 @@ sub shared_nodes {
 
     my $nodelist = PVE::Cluster::get_nodelist();
     my $nodehash = { map { $_ => 1 } @$nodelist };
-    my $nodename = PVE::INotify::nodename();
+    my $nodename = nodename();
 
     foreach_drive($conf, sub {
        my ($ds, $drive) = @_;
@@ -3461,6 +3466,7 @@ sub config_to_command {
     my $ostype = $conf->{ostype};
     my $winversion = windows_version($ostype);
     my $kvm = $conf->{kvm};
+    my $nodename = nodename();
 
     my $arch = get_vm_arch($conf);
     my $kvm_binary = get_command_for_arch($arch);
@@ -3884,7 +3890,6 @@ sub config_to_command {
 
        my $pciaddr = print_pci_addr("spice", $bridges, $arch, $machine_type);
 
-       my $nodename = PVE::INotify::nodename();
        my $pfamily = PVE::Tools::get_host_address_family($nodename);
        my @nodeaddrs = PVE::Tools::getaddrinfo_all('localhost', family => $pfamily);
        die "failed to get an ip address of type $pfamily for 'localhost'\n" if !@nodeaddrs;
@@ -5318,7 +5323,7 @@ sub vm_start {
            if ($statefile eq 'tcp') {
                my $localip = "localhost";
                my $datacenterconf = PVE::Cluster::cfs_read_file('datacenter.cfg');
-               my $nodename = PVE::INotify::nodename();
+               my $nodename = nodename();
 
                if (!defined($migration_type)) {
                    if (defined($datacenterconf->{migration}->{type})) {
@@ -5458,7 +5463,7 @@ sub vm_start {
 
        #start nbd server for storage migration
        if ($targetstorage) {
-           my $nodename = PVE::INotify::nodename();
+           my $nodename = nodename();
            my $localip = $get_migration_ip->($migration_network, $nodename);
            my $pfamily = PVE::Tools::get_host_address_family($nodename);
            my $storage_migrate_port = PVE::Tools::next_migrate_port($pfamily);
index 6c2383da17b4f0cf3f2c4d394eed2a2af8c5431f..c75be5385b0da5b0efe5628e40207ee4dd4d30cd 100755 (executable)
@@ -7,8 +7,12 @@ use lib qw(..);
 
 use Test::More;
 use Test::MockModule;
+use Socket qw(AF_INET AF_INET6);
 
 use PVE::Tools qw(file_get_contents file_set_contents run_command);
+use PVE::INotify;
+use PVE::SysFSTools;
+
 use PVE::QemuConfig;
 use PVE::QemuServer;
 use PVE::QemuServer::Monitor;
@@ -164,6 +168,26 @@ $pve_common_tools->mock(
 
        return '61000';
     },
+    getaddrinfo_all => sub {
+       my ($hostname, @opts) = @_;
+       die "need stable hostname" if $hostname ne 'localhost';
+       return (
+           {
+               addr => Socket::pack_sockaddr_in(0, Socket::INADDR_LOOPBACK),
+               family => AF_INET, # IPv4
+               protocol => 6,
+               socktype => 1,
+           },
+       );
+    },
+);
+
+my $pve_common_inotify;
+$pve_common_inotify = Test::MockModule->new('PVE::INotify');
+$pve_common_inotify->mock(
+    nodename => sub {
+       return 'localhost';
+    },
 );
 
 my $pve_common_sysfstools;