]>
Commit | Line | Data |
---|---|---|
533d82ca | 1 | package PVE::HA::Sim::TestEnv; |
95ca6580 DM |
2 | |
3 | use strict; | |
4 | use warnings; | |
9ce193a0 | 5 | use POSIX qw(strftime EINTR); |
91dab9ce | 6 | use Data::Dumper; |
158bd429 | 7 | use JSON; |
9ce193a0 DM |
8 | use IO::File; |
9 | use Fcntl qw(:DEFAULT :flock); | |
95ca6580 | 10 | |
17654a06 | 11 | use PVE::HA::Tools; |
87b82b15 DM |
12 | |
13 | use base qw(PVE::HA::Sim::Env); | |
95ca6580 | 14 | |
5a127c5f | 15 | sub new { |
bf93e2a2 | 16 | my ($this, $nodename, $hardware, $log_id) = @_; |
0bba8f60 | 17 | |
733c8e5f | 18 | my $class = ref($this) || $this; |
553197d3 | 19 | |
87b82b15 | 20 | my $self = $class->SUPER::new($nodename, $hardware, $log_id); |
3c36cbca | 21 | |
f25a336a DM |
22 | $self->{cur_time} = 0; |
23 | $self->{loop_delay} = 0; | |
24 | ||
8a6e5294 DM |
25 | my $statusdir = $self->{hardware}->statusdir(); |
26 | my $logfile = "$statusdir/log"; | |
27 | $self->{logfh} = IO::File->new(">>$logfile") || | |
28 | die "unable to open '$logfile' - $!"; | |
29 | ||
5a127c5f DM |
30 | return $self; |
31 | } | |
32 | ||
95ca6580 DM |
33 | sub get_time { |
34 | my ($self) = @_; | |
35 | ||
f25a336a | 36 | return $self->{cur_time}; |
95ca6580 DM |
37 | } |
38 | ||
8a6e5294 DM |
39 | sub log { |
40 | my ($self, $level, $msg) = @_; | |
41 | ||
9e115dd0 TL |
42 | return if $level eq 'debug'; |
43 | ||
8a6e5294 DM |
44 | chomp $msg; |
45 | ||
46 | my $time = $self->get_time(); | |
41870e2b | 47 | $level = substr( $level, 0, 4 ); |
8a6e5294 DM |
48 | |
49 | my $line = sprintf("%-5s %5d %12s: $msg\n", $level, $time, "$self->{nodename}/$self->{log_id}"); | |
50 | print $line; | |
51 | ||
52 | $self->{logfh}->print($line); | |
53 | $self->{logfh}->flush(); | |
54 | } | |
55 | ||
95ca6580 DM |
56 | sub sleep { |
57 | my ($self, $delay) = @_; | |
58 | ||
f25a336a DM |
59 | $self->{loop_delay} += $delay; |
60 | } | |
61 | ||
62 | sub sleep_until { | |
63 | my ($self, $end_time) = @_; | |
64 | ||
65 | my $cur_time = $self->{cur_time} + $self->{loop_delay}; | |
66 | ||
67 | return if $cur_time >= $end_time; | |
68 | ||
69 | $self->{loop_delay} += $end_time - $cur_time; | |
95ca6580 DM |
70 | } |
71 | ||
0d00a7da DM |
72 | sub get_ha_manager_lock { |
73 | my ($self) = @_; | |
74 | ||
87b82b15 | 75 | my $res = $self->SUPER::get_ha_manager_lock(); |
f25a336a | 76 | ++$self->{loop_delay}; |
158bd429 | 77 | return $res; |
95ca6580 DM |
78 | } |
79 | ||
3fed383d | 80 | sub get_ha_agent_lock { |
8a6e5294 | 81 | my ($self, $node) = @_; |
3fed383d | 82 | |
8a6e5294 | 83 | my $res = $self->SUPER::get_ha_agent_lock($node); |
3fed383d DM |
84 | ++$self->{loop_delay}; |
85 | ||
86 | return $res; | |
87 | } | |
88 | ||
95ca6580 | 89 | sub loop_start_hook { |
733c8e5f | 90 | my ($self, $starttime) = @_; |
95ca6580 | 91 | |
f25a336a | 92 | $self->{loop_delay} = 0; |
95ca6580 | 93 | |
733c8e5f DM |
94 | die "no starttime" if !defined($starttime); |
95 | die "strange start time" if $starttime < $self->{cur_time}; | |
96 | ||
97 | $self->{cur_time} = $starttime; | |
98 | ||
95ca6580 DM |
99 | # do nothing |
100 | } | |
101 | ||
102 | sub loop_end_hook { | |
103 | my ($self) = @_; | |
104 | ||
f25a336a DM |
105 | my $delay = $self->{loop_delay}; |
106 | $self->{loop_delay} = 0; | |
95ca6580 | 107 | |
53a449bf | 108 | die "loop take too long ($delay seconds)\n" if $delay > 30; |
95ca6580 | 109 | |
17b5cf98 DM |
110 | # $self->{cur_time} += $delay; |
111 | ||
112 | $self->{cur_time} += 1; # easier for simulation | |
95ca6580 DM |
113 | } |
114 | ||
cde77779 | 115 | sub is_node_shutdown { |
d42219a3 TL |
116 | my ($self) = @_; |
117 | ||
118 | my $node = $self->{nodename}; | |
119 | my $cstatus = $self->{hardware}->read_hardware_status_nolock(); | |
120 | ||
121 | die "undefined node status for node '$node'" if !defined($cstatus->{$node}); | |
122 | ||
7987c18c | 123 | return defined($cstatus->{$node}->{shutdown}) ? 1 : 0; |
d42219a3 TL |
124 | } |
125 | ||
a28fa330 TL |
126 | # must be 0 as we do not want to fork in the regression tests |
127 | sub get_max_workers { | |
128 | my ($self) = @_; | |
129 | ||
130 | return 0; | |
131 | } | |
132 | ||
95ca6580 | 133 | 1; |