iotests/124: Add cluster_size mismatch test
If a backing file isn't specified in the target image and the cluster_size is larger than the bitmap granularity, we run the risk of creating bitmaps with allocated clusters but empty/no data which will prevent the proper reading of the backup in the future. Signed-off-by: John Snow <jsnow@redhat.com> Reviewed-by: Fam Zheng <famz@redhat.com> Message-id: 1456433911-24718-4-git-send-email-jsnow@redhat.com Signed-off-by: Jeff Cody <jcody@redhat.com>
This commit is contained in:
		
							parent
							
								
									4c9bca7e39
								
							
						
					
					
						commit
						cc199b16cf
					
				@ -132,14 +132,16 @@ class TestIncrementalBackupBase(iotests.QMPTestCase):
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def img_create(self, img, fmt=iotests.imgfmt, size='64M',
 | 
					    def img_create(self, img, fmt=iotests.imgfmt, size='64M',
 | 
				
			||||||
                   parent=None, parentFormat=None):
 | 
					                   parent=None, parentFormat=None, **kwargs):
 | 
				
			||||||
 | 
					        optargs = []
 | 
				
			||||||
 | 
					        for k,v in kwargs.iteritems():
 | 
				
			||||||
 | 
					            optargs = optargs + ['-o', '%s=%s' % (k,v)]
 | 
				
			||||||
 | 
					        args = ['create', '-f', fmt] + optargs + [img, size]
 | 
				
			||||||
        if parent:
 | 
					        if parent:
 | 
				
			||||||
            if parentFormat is None:
 | 
					            if parentFormat is None:
 | 
				
			||||||
                parentFormat = fmt
 | 
					                parentFormat = fmt
 | 
				
			||||||
            iotests.qemu_img('create', '-f', fmt, img, size,
 | 
					            args = args + ['-b', parent, '-F', parentFormat]
 | 
				
			||||||
                             '-b', parent, '-F', parentFormat)
 | 
					        iotests.qemu_img(*args)
 | 
				
			||||||
        else:
 | 
					 | 
				
			||||||
            iotests.qemu_img('create', '-f', fmt, img, size)
 | 
					 | 
				
			||||||
        self.files.append(img)
 | 
					        self.files.append(img)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -307,6 +309,52 @@ class TestIncrementalBackup(TestIncrementalBackupBase):
 | 
				
			|||||||
        return self.do_incremental_simple(granularity=131072)
 | 
					        return self.do_incremental_simple(granularity=131072)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def test_larger_cluster_target(self):
 | 
				
			||||||
 | 
					        '''
 | 
				
			||||||
 | 
					        Test: Create and verify backups made to a larger cluster size target.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        With a default granularity of 64KiB, verify that backups made to a
 | 
				
			||||||
 | 
					        larger cluster size target of 128KiB without a backing file works.
 | 
				
			||||||
 | 
					        '''
 | 
				
			||||||
 | 
					        drive0 = self.drives[0]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        # Create a cluster_size=128k full backup / "anchor" backup
 | 
				
			||||||
 | 
					        self.img_create(drive0['backup'], cluster_size='128k')
 | 
				
			||||||
 | 
					        self.assertTrue(self.do_qmp_backup(device=drive0['id'], sync='full',
 | 
				
			||||||
 | 
					                                           format=drive0['fmt'],
 | 
				
			||||||
 | 
					                                           target=drive0['backup'],
 | 
				
			||||||
 | 
					                                           mode='existing'))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        # Create bitmap and dirty it with some new writes.
 | 
				
			||||||
 | 
					        # overwrite [32736, 32799] which will dirty bitmap clusters at
 | 
				
			||||||
 | 
					        # 32M-64K and 32M. 32M+64K will be left undirtied.
 | 
				
			||||||
 | 
					        bitmap0 = self.add_bitmap('bitmap0', drive0)
 | 
				
			||||||
 | 
					        self.hmp_io_writes(drive0['id'],
 | 
				
			||||||
 | 
					                           (('0xab', 0, 512),
 | 
				
			||||||
 | 
					                            ('0xfe', '16M', '256k'),
 | 
				
			||||||
 | 
					                            ('0x64', '32736k', '64k')))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        # Prepare a cluster_size=128k backup target without a backing file.
 | 
				
			||||||
 | 
					        (target, _) = bitmap0.new_target()
 | 
				
			||||||
 | 
					        self.img_create(target, bitmap0.drive['fmt'], cluster_size='128k')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        # Perform Incremental Backup
 | 
				
			||||||
 | 
					        self.assertTrue(self.do_qmp_backup(device=bitmap0.drive['id'],
 | 
				
			||||||
 | 
					                                           sync='incremental',
 | 
				
			||||||
 | 
					                                           bitmap=bitmap0.name,
 | 
				
			||||||
 | 
					                                           format=bitmap0.drive['fmt'],
 | 
				
			||||||
 | 
					                                           target=target,
 | 
				
			||||||
 | 
					                                           mode='existing'))
 | 
				
			||||||
 | 
					        self.make_reference_backup(bitmap0)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        # Add the backing file, then compare and exit.
 | 
				
			||||||
 | 
					        iotests.qemu_img('rebase', '-f', drive0['fmt'], '-u', '-b',
 | 
				
			||||||
 | 
					                         drive0['backup'], '-F', drive0['fmt'], target)
 | 
				
			||||||
 | 
					        self.vm.shutdown()
 | 
				
			||||||
 | 
					        self.check_backups()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def test_incremental_transaction(self):
 | 
					    def test_incremental_transaction(self):
 | 
				
			||||||
        '''Test: Verify backups made from transactionally created bitmaps.
 | 
					        '''Test: Verify backups made from transactionally created bitmaps.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -1,5 +1,5 @@
 | 
				
			|||||||
.........
 | 
					..........
 | 
				
			||||||
----------------------------------------------------------------------
 | 
					----------------------------------------------------------------------
 | 
				
			||||||
Ran 9 tests
 | 
					Ran 10 tests
 | 
				
			||||||
 | 
					
 | 
				
			||||||
OK
 | 
					OK
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user