4 # 1.) Start replication job with single disk
5 # 2.) add non-existent disk (replication fails)
6 # 3.) create disk (replication continues).
12 use lib
('.', '../..');
17 use ReplicationTestEnv
;
21 $ReplicationTestEnv::mocked_nodename
= 'node1';
31 my $replicated_volume_status = {};
33 my $mocked_remote_prepare_local_job = sub {
34 my ($ssh_info, $jobid, $vmid, $volumes, $last_sync) = @_;
36 my $target = $ssh_info->{node
};
38 my $last_snapshots = {};
40 return $last_snapshots if !defined($replicated_volume_status->{$target});
42 my $last_sync_snapname = PVE
::Replication
::replication_snapshot_name
($jobid, $last_sync);
44 foreach my $volid (keys %{$replicated_volume_status->{$target}}) {
45 my $snapname = $replicated_volume_status->{$target}->{$volid};
47 $last_snapshots->{$volid} = 1 if $last_sync_snapname eq $snapname;
50 return $last_snapshots;
53 my $mocked_remote_finalize_local_job = sub {
54 my ($ssh_info, $jobid, $vmid, $volumes, $last_sync) = @_;
59 my $mocked_replicate_volume = sub {
60 my ($ssh_info, $storecfg, $volid, $base_snapshot, $sync_snapname) = @_;
62 my $target = $ssh_info->{node
};
64 $replicated_volume_status->{$target}->{$volid} = $sync_snapname;
67 my $pve_replication_module = Test
::MockModule-
>new('PVE::Replication');
68 $pve_replication_module->mock(
69 remote_prepare_local_job
=> $mocked_remote_prepare_local_job,
70 remote_finalize_local_job
=> $mocked_remote_finalize_local_job,
71 replicate_volume
=> $mocked_replicate_volume);
79 $ReplicationTestEnv::mocked_replication_jobs
= {
87 $ReplicationTestEnv::mocked_vm_configs
= {
91 ide0
=> 'local-zfs:vm-900-disk-1,size=4G',
93 ide2
=> 'none,media=cdrom',
97 ReplicationTestEnv
::setup
();
99 ReplicationTestEnv
::register_mocked_volid
('local-zfs:vm-900-disk-1');
105 ReplicationTestEnv
::openlog
();
107 for (my $i = 0; $i < 15; $i++) {
108 ReplicationTestEnv
::track_jobs
($ctime);
112 # add a new, disk (but disk does not exist, so replication fails)
113 $ReplicationTestEnv::mocked_vm_configs-
>{900}->{ide1
} = 'local-zfs:vm-900-disk-2,size=4G';
114 for (my $i = 0; $i < 15; $i++) {
115 ReplicationTestEnv
::track_jobs
($ctime);
119 # register disk, so replication should succeed
120 ReplicationTestEnv
::register_mocked_volid
('local-zfs:vm-900-disk-2');
121 for (my $i = 0; $i < 15; $i++) {
122 ReplicationTestEnv
::track_jobs
($ctime);
126 ReplicationTestEnv
::commit_log
();