]>
git.proxmox.com Git - pve-ha-manager.git/blob - src/PVE/HA/Sim/TestEnv.pm
1 package PVE
::HA
::Sim
::TestEnv
;
5 use POSIX
qw(strftime EINTR);
9 use Fcntl
qw(:DEFAULT :flock);
13 use base
qw(PVE::HA::Sim::Env);
16 my ($this, $nodename, $hardware, $log_id) = @_;
18 my $class = ref($this) || $this;
20 my $self = $class->SUPER::new
($nodename, $hardware, $log_id);
22 $self->{cur_time
} = 0;
23 $self->{loop_delay
} = 0;
25 my $statusdir = $self->{hardware
}->statusdir();
26 my $logfile = "$statusdir/log";
27 $self->{logfh
} = IO
::File-
>new(">>$logfile") ||
28 die "unable to open '$logfile' - $!";
36 return $self->{cur_time
};
40 my ($self, $level, $msg) = @_;
42 return if $level eq 'debug';
46 my $time = $self->get_time();
47 $level = substr( $level, 0, 4 );
49 my $line = sprintf("%-5s %5d %12s: $msg\n", $level, $time, "$self->{nodename}/$self->{log_id}");
52 $self->{logfh
}->print($line);
53 $self->{logfh
}->flush();
57 my ($self, $delay) = @_;
59 $self->{loop_delay
} += $delay;
63 my ($self, $end_time) = @_;
65 my $cur_time = $self->{cur_time
} + $self->{loop_delay
};
67 return if $cur_time >= $end_time;
69 $self->{loop_delay
} += $end_time - $cur_time;
72 sub get_ha_manager_lock
{
75 my $res = $self->SUPER::get_ha_manager_lock
();
76 ++$self->{loop_delay
};
80 sub get_ha_agent_lock
{
81 my ($self, $node) = @_;
83 my $res = $self->SUPER::get_ha_agent_lock
($node);
84 ++$self->{loop_delay
};
90 my ($self, $starttime) = @_;
92 $self->{loop_delay
} = 0;
94 die "no starttime" if !defined($starttime);
95 die "strange start time" if $starttime < $self->{cur_time
};
97 $self->{cur_time
} = $starttime;
105 my $delay = $self->{loop_delay
};
106 $self->{loop_delay
} = 0;
108 die "loop take too long ($delay seconds)\n" if $delay > 30;
110 # $self->{cur_time} += $delay;
112 $self->{cur_time
} += 1; # easier for simulation
115 # must be 0 as we do not want to fork in the regression tests
116 sub get_max_workers
{
123 my ($self, $subject, $text) = @_;
125 # dismiss mails for regression tests