コード例 #1
0
    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
        )
コード例 #2
0
    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
        )
コード例 #3
0
    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
            })
コード例 #4
0
    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')
コード例 #5
0
    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',
            })
コード例 #6
0
    def test_event_handlers(self):
        """Test event_handlers request.
        """
        svc = localdisk_service.LocalDiskResourceService(
            img_location='/image_dir',
            reserve=42,
        )

        self.assertEqual(
            svc.event_handlers(),
            []
        )
コード例 #7
0
    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(), [])
コード例 #8
0
    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'})
コード例 #9
0
    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
        )
コード例 #10
0
    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
        )
コード例 #11
0
    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()
コード例 #12
0
    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',
            }
        )