]>
git.proxmox.com Git - pve-ha-manager.git/blob - src/PVE/HA/Sim/TestEnv.pm
c746c903fa6f58169c9bdc0aea99d14aca4b5fb5
1 package PVE
::HA
::Sim
::TestEnv
;
5 use POSIX
qw(strftime EINTR);
8 use Fcntl
qw(:DEFAULT :flock);
12 use base
qw(PVE::HA::Sim::Env);
15 my ($this, $nodename, $hardware, $log_id) = @_;
17 my $class = ref($this) || $this;
19 my $self = $class->SUPER::new
($nodename, $hardware, $log_id);
21 $self->{cur_time
} = 0;
22 $self->{loop_delay
} = 0;
24 my $statusdir = $self->{hardware
}->statusdir();
25 my $logfile = "$statusdir/log";
26 $self->{logfh
} = IO
::File-
>new(">>$logfile") ||
27 die "unable to open '$logfile' - $!";
35 return $self->{cur_time
};
39 my ($self, $level, $msg) = @_;
41 return if $level eq 'debug';
45 my $time = $self->get_time();
46 $level = substr( $level, 0, 4 );
48 my $line = sprintf("%-5s %5d %12s: $msg\n", $level, $time, "$self->{nodename}/$self->{log_id}");
51 $self->{logfh
}->print($line);
52 $self->{logfh
}->flush();
56 my ($self, $delay) = @_;
58 $self->{loop_delay
} += $delay;
62 my ($self, $end_time) = @_;
64 my $cur_time = $self->{cur_time
} + $self->{loop_delay
};
66 return if $cur_time >= $end_time;
68 $self->{loop_delay
} += $end_time - $cur_time;
71 sub get_ha_manager_lock
{
74 my $res = $self->SUPER::get_ha_manager_lock
();
75 ++$self->{loop_delay
};
79 sub get_ha_agent_lock
{
80 my ($self, $node) = @_;
82 my $res = $self->SUPER::get_ha_agent_lock
($node);
83 ++$self->{loop_delay
};
91 $self->{loop_delay
} = 0;
93 my $starttime = $self->{hardware
}->get_time();
94 die "strange start time" if $starttime < $self->{cur_time
};
96 $self->{cur_time
} = $starttime;
104 my $delay = $self->{loop_delay
};
105 $self->{loop_delay
} = 0;
107 die "loop take too long ($delay seconds)\n" if $delay > 30;
109 # $self->{cur_time} += $delay;
111 $self->{cur_time
} += 1; # easier for simulation
114 # must be 0 as we do not want to fork in the regression tests
115 sub get_max_workers
{
122 my ($self, $subject, $text) = @_;
124 # dismiss mails for regression tests