4 # 1.) Start replication job with single disk
5 # 2.) add non-existent disk (replication fails)
6 # 3.) create disk (replication continues).
13 use lib
('.', '../..');
16 use ReplicationTestEnv
;
20 $ReplicationTestEnv::mocked_nodename
= 'node1';
30 my $replicated_volume_status = {};
32 my $mocked_remote_prepare_local_job = sub {
33 my ($ssh_info, $jobid, $vmid, $volumes, $storeid_list, $last_sync, $parent_snapname, $force) = @_;
35 my $target = $ssh_info->{node
};
37 my $last_snapshots = {};
39 return $last_snapshots if !defined($replicated_volume_status->{$target});
41 my $last_sync_snapname = PVE
::ReplicationState
::replication_snapshot_name
($jobid, $last_sync);
43 foreach my $volid (keys %{$replicated_volume_status->{$target}}) {
44 if (!grep { $_ eq $volid } @$volumes) {
45 delete $replicated_volume_status->{$target}->{$volid};
48 my $snapname = $replicated_volume_status->{$target}->{$volid};
50 $last_snapshots->{$volid}->{$snapname} = 1 if $last_sync_snapname eq $snapname;
53 return $last_snapshots;
56 my $mocked_remote_finalize_local_job = sub {
57 my ($ssh_info, $jobid, $vmid, $volumes, $last_sync) = @_;
62 my $mocked_replicate_volume = sub {
63 my ($ssh_info, $storecfg, $volid, $base_snapshot, $sync_snapname) = @_;
65 my $target = $ssh_info->{node
};
67 $replicated_volume_status->{$target}->{$volid} = $sync_snapname;
70 my $mocked_delete_job = sub {
73 delete $ReplicationTestEnv::mocked_replication_jobs-
>{$jobid};
76 my $pve_replication_config_module = Test
::MockModule-
>new('PVE::ReplicationConfig');
77 $pve_replication_config_module->mock(delete_job
=> $mocked_delete_job);
79 my $pve_replication_module = Test
::MockModule-
>new('PVE::Replication');
80 $pve_replication_module->mock(
81 remote_prepare_local_job
=> $mocked_remote_prepare_local_job,
82 remote_finalize_local_job
=> $mocked_remote_finalize_local_job,
83 replicate_volume
=> $mocked_replicate_volume);
91 $ReplicationTestEnv::mocked_replication_jobs
= {
99 $ReplicationTestEnv::mocked_vm_configs
= {
103 ide0
=> 'local-zfs:vm-900-disk-1,size=4G',
105 ide2
=> 'none,media=cdrom',
109 ReplicationTestEnv
::setup
();
111 ReplicationTestEnv
::register_mocked_volid
('local-zfs:vm-900-disk-1');
117 ReplicationTestEnv
::openlog
();
119 for (my $i = 0; $i < 15; $i++) {
120 ReplicationTestEnv
::track_jobs
($ctime);
124 # add a new, disk (but disk does not exist, so replication fails)
125 $ReplicationTestEnv::mocked_vm_configs-
>{900}->{ide1
} = 'local-zfs:vm-900-disk-2,size=4G';
126 for (my $i = 0; $i < 15; $i++) {
127 ReplicationTestEnv
::track_jobs
($ctime);
131 # register disk, so replication should succeed
132 ReplicationTestEnv
::register_mocked_volid
('local-zfs:vm-900-disk-2');
133 for (my $i = 0; $i < 15; $i++) {
134 ReplicationTestEnv
::track_jobs
($ctime);
138 # mark job for removal
139 $ReplicationTestEnv::mocked_replication_jobs-
>{job_900_to_node2
}->{remove_job
} = 'full';
140 for (my $i = 0; $i < 15; $i++) {
141 ReplicationTestEnv
::track_jobs
($ctime);
147 ReplicationTestEnv
::commit_log
();