@@ -4308,6 +4308,117 @@ def test_create_configuration_with_hints(self, mocked_execute,
43084308 mock .call (x ) for x in ['/dev/sda' , '/dev/sdb' ]
43094309 ])
43104310
4311+ @mock .patch .object (raid_utils , '_get_actual_component_devices' ,
4312+ autospec = True )
4313+ @mock .patch .object (utils , 'get_node_boot_mode' , lambda node : 'bios' )
4314+ @mock .patch .object (disk_utils , 'list_partitions' , autospec = True ,
4315+ return_value = [])
4316+ @mock .patch .object (utils , 'execute' , autospec = True )
4317+ def test_create_configuration_with_different_disks (self , mocked_execute ,
4318+ mock_list_parts ,
4319+ mocked_actual_comp ):
4320+ node = self .node
4321+ raid_config = {
4322+ "logical_disks" : [
4323+ {
4324+ "size_gb" : "10" ,
4325+ "raid_level" : "1" ,
4326+ "controller" : "software" ,
4327+ "physical_disks" : [{'name' : '/dev/sda' },
4328+ {'name' : '/dev/sdb' }],
4329+ },
4330+ {
4331+ "size_gb" : "MAX" ,
4332+ "raid_level" : "0" ,
4333+ "controller" : "software" ,
4334+ "physical_disks" : [{'name' : '/dev/sdc' },
4335+ {'name' : '/dev/sdd' }],
4336+ },
4337+ ]
4338+ }
4339+ node ['target_raid_config' ] = raid_config
4340+ device1 = hardware .BlockDevice ('/dev/sda' , 'sda' , 107374182400 , True )
4341+ device2 = hardware .BlockDevice ('/dev/sdb' , 'sdb' , 107374182400 , True )
4342+ device3 = hardware .BlockDevice ('/dev/sdc' , 'sdc' , 107374182400 , True )
4343+ device4 = hardware .BlockDevice ('/dev/sdd' , 'sdd' , 107374182400 , True )
4344+ self .hardware .list_block_devices = mock .Mock ()
4345+ self .hardware .list_block_devices .return_value = [
4346+ device1 ,
4347+ device2 ,
4348+ device3 ,
4349+ device4 ,
4350+ ]
4351+
4352+ mocked_execute .side_effect = [
4353+ None , # mklabel sda
4354+ ('42' , None ), # sgdisk -F sda
4355+ None , # mklabel sda
4356+ ('42' , None ), # sgdisk -F sdb
4357+ None , # mklabel sdc
4358+ ('42' , None ), # sgdisk -F sdc
4359+ None , # mklabel sdd
4360+ ('42' , None ), # sgdisk -F sdd
4361+ None , None , None , # parted + partx + udevadm_settle sda
4362+ None , None , None , # parted + partx + udevadm_settle sdb
4363+ None , None , None , # parted + partx + udevadm_settle sdc
4364+ None , None , None , # parted + partx + udevadm_settle sdd
4365+ None , None , None , # parted + partx + udevadm_settle sda
4366+ None , None , None , # parted + partx + udevadm_settle sdb
4367+ None , None , None , # parted + partx + udevadm_settle sdc
4368+ None , None , None , # parted + partx + udevadm_settle sdd
4369+ None , None # mdadms
4370+ ]
4371+
4372+ mocked_actual_comp .side_effect = [
4373+ ('/dev/sda1' , '/dev/sdb1' ),
4374+ ('/dev/sdc1' , '/dev/sdd1' ),
4375+ ]
4376+
4377+ result = self .hardware .create_configuration (node , [])
4378+
4379+ mocked_execute .assert_has_calls ([
4380+ mock .call ('parted' , '/dev/sda' , '-s' , '--' , 'mklabel' , 'msdos' ),
4381+ mock .call ('sgdisk' , '-F' , '/dev/sda' ),
4382+ mock .call ('parted' , '/dev/sdb' , '-s' , '--' , 'mklabel' , 'msdos' ),
4383+ mock .call ('sgdisk' , '-F' , '/dev/sdb' ),
4384+ mock .call ('parted' , '/dev/sdc' , '-s' , '--' , 'mklabel' , 'msdos' ),
4385+ mock .call ('sgdisk' , '-F' , '/dev/sdc' ),
4386+ mock .call ('parted' , '/dev/sdd' , '-s' , '--' , 'mklabel' , 'msdos' ),
4387+ mock .call ('sgdisk' , '-F' , '/dev/sdd' ),
4388+ mock .call ('parted' , '/dev/sda' , '-s' , '-a' , 'optimal' , '--' ,
4389+ 'mkpart' , 'primary' , '42s' , '10GiB' ),
4390+ mock .call ('partx' , '-av' , '/dev/sda' , attempts = 3 ,
4391+ delay_on_retry = True ),
4392+ mock .call ('udevadm' , 'settle' ),
4393+ mock .call ('parted' , '/dev/sdb' , '-s' , '-a' , 'optimal' , '--' ,
4394+ 'mkpart' , 'primary' , '42s' , '10GiB' ),
4395+ mock .call ('partx' , '-av' , '/dev/sdb' , attempts = 3 ,
4396+ delay_on_retry = True ),
4397+ mock .call ('udevadm' , 'settle' ),
4398+ mock .call ('parted' , '/dev/sdc' , '-s' , '-a' , 'optimal' , '--' ,
4399+ 'mkpart' , 'primary' , '42s' , '-1' ),
4400+ mock .call ('partx' , '-av' , '/dev/sdc' , attempts = 3 ,
4401+ delay_on_retry = True ),
4402+ mock .call ('udevadm' , 'settle' ),
4403+ mock .call ('parted' , '/dev/sdd' , '-s' , '-a' , 'optimal' , '--' ,
4404+ 'mkpart' , 'primary' , '42s' , '-1' ),
4405+ mock .call ('partx' , '-av' , '/dev/sdd' , attempts = 3 ,
4406+ delay_on_retry = True ),
4407+ mock .call ('udevadm' , 'settle' ),
4408+ mock .call ('mdadm' , '--create' , '/dev/md0' , '--force' , '--run' ,
4409+ '--metadata=1' , '--level' , '1' , '--name' , 'md0' ,
4410+ '--raid-devices' , 2 , '/dev/sda1' , '/dev/sdb1' ),
4411+ mock .call ('mdadm' , '--create' , '/dev/md1' , '--force' , '--run' ,
4412+ '--metadata=1' , '--level' , '0' , '--name' , 'md1' ,
4413+ '--raid-devices' , 2 , '/dev/sdc1' , '/dev/sdd1' )])
4414+ self .assertEqual (raid_config , result )
4415+
4416+ self .assertEqual (4 , mock_list_parts .call_count )
4417+ mock_list_parts .assert_has_calls ([
4418+ mock .call (x ) for x in ['/dev/sda' , '/dev/sdb' ,
4419+ '/dev/sdc' , '/dev/sdd' ]
4420+ ])
4421+
43114422 @mock .patch .object (utils , 'execute' , autospec = True )
43124423 @mock .patch .object (os .path , 'isdir' , autospec = True , return_value = False )
43134424 def test_create_configuration_invalid_raid_config (self ,
0 commit comments