def test_initialize_img(self): """Test service initialization (image). """ # Access to a protected member _init_vg of a client class # pylint: disable=W0212 svc = localdisk_service.LocalDiskResourceService( img_location='/image_dir', reserve=42, ) treadmill.lvm.vgactivate.side_effect = \ subprocess.CalledProcessError(returncode=5, cmd='lvm') mock_init_blkdev = treadmill.services.localdisk_service._init_block_dev mock_init_blkdev.return_value = '/dev/test' treadmill.lvm.lvsdisplay.return_value = [] svc.initialize(self.root) treadmill.lvm.vgactivate.assert_called_with(group='treadmill') mock_init_blkdev.assert_called_with('/image_dir', 42) treadmill.services.localdisk_service._init_vg.assert_called_with( 'treadmill', '/dev/test', ) treadmill.lvm.lvsdisplay.assert_called_with(group='treadmill') self.assertTrue( treadmill.services.localdisk_service._refresh_vg_status.called )
def test_initialize_blk(self): """Test service initialization (block device). """ # Access to a protected member _init_vg of a client class # pylint: disable=W0212 svc = localdisk_service.LocalDiskResourceService( block_dev='/dev/test', ) treadmill.lvm.vgactivate.side_effect = \ subprocess.CalledProcessError(returncode=5, cmd='lvm') treadmill.lvm.lvsdisplay.return_value = [] svc.initialize(self.root) treadmill.lvm.vgactivate.assert_called_with(group='treadmill') # If provided, we should try to create the block device self.assertFalse( treadmill.services.localdisk_service._init_block_dev.called ) treadmill.services.localdisk_service._init_vg.assert_called_with( 'treadmill', '/dev/test', ) self.assertTrue( treadmill.services.localdisk_service._refresh_vg_status.called )
def test_report_status(self): """Test service status reporting. """ # Access to a protected member _vg_status # pylint: disable=W0212 svc = localdisk_service.LocalDiskResourceService( block_dev='/dev/block', vg_name='treadmill', read_bps='100M', write_bps='100M', read_iops=1000, write_iops=1000) svc._vg_status = { 'extent_size': 4, 'extent_free': 512, 'extent_nb': 512, } status = svc.report_status() self.assertEqual( status, { 'extent_size': 4, 'extent_free': 512, 'extent_nb': 512, 'size': 512 * 4, 'read_bps': '100M', 'write_bps': '100M', 'read_iops': 1000, 'write_iops': 1000 })
def test_on_delete_request_busy(self): """Test processing of a localdisk delete request. """ # Access to a protected member # pylint: disable=W0212 svc = localdisk_service.LocalDiskResourceService( block_dev='/dev/block', vg_name='treadmill', read_bps='100M', write_bps='100M', read_iops=1000, write_iops=1000) request_id = 'myproid.test-0-ID1234' # trying to lvremote fails treadmill.lvm.lvremove.side_effect = (subproc.CalledProcessError( returncode=5, cmd='lvm'), ) self.assertRaises(subproc.CalledProcessError, svc.on_delete_request, request_id) treadmill.lvm.lvdisplay.assert_called_with('tm-ID1234', group='treadmill') treadmill.lvm.lvremove.assert_called_with('tm-ID1234', group='treadmill')
def test_on_create_request(self): """Test processing of a localdisk create request. """ # Access to a protected member _vg_status # pylint: disable=W0212 svc = localdisk_service.LocalDiskResourceService( block_dev='/dev/block', vg_name='treadmill', read_bps='100M', write_bps='100M', read_iops=1000, write_iops=1000) svc._vg_status = { 'extent_size': 4 * 1024**3, 'extent_free': 512, } request = { 'size': '100M', } request_id = 'myproid.test-0-ID1234' treadmill.lvm.lvdisplay.return_value = { 'block_dev': '/dev/test', 'dev_major': 42, 'dev_minor': 43, 'extent_size': 10, 'name': 'tm-ID1234', } localdisk = svc.on_create_request(request_id, request) treadmill.lvm.lvcreate.assert_called_with( volume='tm-ID1234', group='treadmill', size_in_bytes=100 * 1024**2, ) self.assertTrue(treadmill.localdiskutils.refresh_vg_status.called) cgrp = os.path.join('treadmill/apps', request_id) treadmill.cgroups.create.assert_called_with('blkio', cgrp) treadmill.cgroups.set_value.assert_has_calls([ mock.call('blkio', cgrp, 'blkio.throttle.read_bps_device', '42:43 20971520'), mock.call('blkio', cgrp, 'blkio.throttle.read_iops_device', '42:43 100'), mock.call('blkio', cgrp, 'blkio.throttle.write_bps_device', '42:43 20971520'), mock.call('blkio', cgrp, 'blkio.throttle.write_iops_device', '42:43 100'), ], any_order=True) self.assertEqual( localdisk, { 'block_dev': '/dev/test', 'dev_major': 42, 'dev_minor': 43, 'extent_size': 10, 'name': 'tm-ID1234', })
def test_event_handlers(self): """Test event_handlers request. """ svc = localdisk_service.LocalDiskResourceService( img_location='/image_dir', reserve=42, ) self.assertEqual( svc.event_handlers(), [] )
def test_event_handlers(self): """Test event_handlers request. """ svc = localdisk_service.LocalDiskResourceService( block_dev='/dev/block', vg_name='treadmill', read_bps='100M', write_bps='100M', read_iops=1000, write_iops=1000) self.assertEqual(svc.event_handlers(), [])
def test_report_status(self): """Test service status reporting. """ # Access to a protected member _status # pylint: disable=W0212 svc = localdisk_service.LocalDiskResourceService( img_location='/image_dir', reserve=42, ) svc._status = {'test': 'me'} status = svc.report_status() self.assertEqual(status, {'test': 'me'})
def test_initialize_quick(self): """Test service initialization (quick restart). """ # Access to a protected member _init_vg of a client class # pylint: disable=W0212 svc = localdisk_service.LocalDiskResourceService( img_location='/image_dir', reserve=42, ) treadmill.lvm.vgactivate.return_value = True treadmill.lvm.lvsdisplay.return_value = [ { 'block_dev': '/dev/treadmill/ESE0g3hyf7nxv', 'dev_major': 253, 'dev_minor': 1, 'extent_alloc': -1, 'extent_size': 256, 'group': 'treadmill', 'name': 'ESE0g3hyf7nxv', 'open_count': 1, }, { 'block_dev': '/dev/treadmill/oRHxZN5QldMdz', 'dev_major': 253, 'dev_minor': 0, 'extent_alloc': -1, 'extent_size': 1280, 'group': 'treadmill', 'name': 'oRHxZN5QldMdz', 'open_count': 1, }, ] svc.initialize(self.root) treadmill.lvm.vgactivate.assert_called_with(group='treadmill') # If present, we should *not* try to re-init the volume group self.assertFalse( treadmill.services.localdisk_service._init_block_dev.called ) self.assertFalse(treadmill.services.localdisk_service._init_vg.called) self.assertTrue( treadmill.services.localdisk_service._refresh_vg_status.called )
def test_on_delete_request(self): """Test processing of a localdisk delete request. """ # Access to a protected member # pylint: disable=W0212 svc = localdisk_service.LocalDiskResourceService( img_location='/image_dir', reserve=42, ) request_id = 'myproid.test-0-ID1234' svc.on_delete_request(request_id) treadmill.lvm.lvremove.assert_called_with('ID1234', group='treadmill') self.assertTrue( treadmill.services.localdisk_service._refresh_vg_status.called )
def test_on_delete_request(self): """Test processing of a localdisk delete request. """ # Access to a protected member # pylint: disable=W0212 svc = localdisk_service.LocalDiskResourceService( block_dev='/dev/block', vg_name='treadmill', read_bps='100M', write_bps='100M', read_iops=1000, write_iops=1000) request_id = 'myproid.test-0-ID1234' svc.on_delete_request(request_id) treadmill.lvm.lvdisplay.assert_called_with('tm-ID1234', group='treadmill') treadmill.lvm.lvremove.assert_called_with('tm-ID1234', group='treadmill') treadmill.localdiskutils.refresh_vg_status.assert_called()
def test_on_create_request_existing(self): """Test processing of a localdisk create request when volume already created. """ # Access to a protected member _status # pylint: disable=W0212 svc = localdisk_service.LocalDiskResourceService( img_location='/image_dir', reserve=42, ) svc._status = { 'extent_size': 4*1024**3, 'extent_free': 512, } treadmill.lvm.lvdisplay.return_value = { 'block_dev': '/dev/test', 'dev_major': 42, 'dev_minor': 43, 'name': 'ID1234', } request = { 'size': '100M', } request_id = 'myproid.test-0-ID1234' localdisk = svc.on_create_request(request_id, request) # Reset all mocks treadmill.cgroups.create.reset_mock() treadmill.cgroups.set_value.reset_mock() treadmill.fs.create_filesystem.reset_mock() treadmill.lvm.lvcreate.reset_mock() treadmill.lvm.lvdisplay.reset_mock() treadmill.services.localdisk_service._refresh_vg_status.reset_mock() treadmill.lvm.lvdisplay.return_value = { 'block_dev': '/dev/test', 'dev_major': 24, 'dev_minor': 34, 'name': 'ID1234', } # Issue a second request localdisk = svc.on_create_request(request_id, request) self.assertFalse(treadmill.lvm.lvcreate.called) self.assertFalse( treadmill.services.localdisk_service._refresh_vg_status.called ) cgrp = os.path.join('treadmill/apps', request_id) treadmill.cgroups.create.assert_called_with( 'blkio', cgrp ) treadmill.cgroups.set_value.assert_has_calls( [ mock.call('blkio', cgrp, 'blkio.throttle.read_bps_device', '24:34 20971520'), mock.call('blkio', cgrp, 'blkio.throttle.read_iops_device', '24:34 100'), mock.call('blkio', cgrp, 'blkio.throttle.write_bps_device', '24:34 20971520'), mock.call('blkio', cgrp, 'blkio.throttle.write_iops_device', '24:34 100'), ], any_order=True ) self.assertEqual( localdisk, { 'block_dev': '/dev/test', 'dev_major': 24, 'dev_minor': 34, 'name': 'ID1234', } )