Пример #1
0
    def test_do_trim_releases_lock(self, context, sr_get_capability, MockLock,
                                   lvutil):
        lvutil.exists.return_value = False
        sr_lock = MockLock.return_value = AlwaysFreeLock()
        sr_get_capability.return_value = [trim_util.TRIM_CAP]
        context.setup_error_codes()

        trim_util.do_trim(None, {'sr_uuid': 'some-uuid'})

        self.assertFalse(sr_lock.acquired)
Пример #2
0
    def test_do_trim_lock_released_even_if_exception_raised(
            self, context, sr_get_capability, MockLock, lvutil):
        lvutil.create.side_effect = Exception('blah')
        srlock = AlwaysFreeLock()
        MockLock.return_value = srlock
        sr_get_capability.return_value = [trim_util.TRIM_CAP]
        context.setup_error_codes()

        trim_util.do_trim(None, {'sr_uuid': 'some-uuid'})

        self.assertFalse(srlock.acquired)
Пример #3
0
    def test_do_trim_sleeps_a_sec_and_retries_three_times(
            self, context, sr_get_capability, MockLock, sleep):
        MockLock.return_value = AlwaysBusyLock()
        sr_get_capability.return_value = [trim_util.TRIM_CAP]
        context.setup_error_codes()

        trim_util.do_trim(None, {'sr_uuid': 'some-uuid'})

        self.assertEquals(
            [mock.call(1), mock.call(1),
             mock.call(1)], sleep.mock_calls)
Пример #4
0
    def test_do_trim_creates_an_lv(self, context, sr_get_capability, MockLock,
                                   lvutil):
        MockLock.return_value = AlwaysFreeLock()
        sr_get_capability.return_value = [trim_util.TRIM_CAP]
        context.setup_error_codes()

        trim_util.do_trim(None, {'sr_uuid': 'some-uuid'})

        lvutil.create.assert_called_once_with('some-uuid_trim_lv',
                                              0,
                                              'VG_XenStorage-some-uuid',
                                              size_in_percentage='100%F')
Пример #5
0
    def test_do_trim_releases_lock(self,
                                   context,
                                   sr_get_capability,
                                   MockLock,
                                   lvutil):
        lvutil.exists.return_value = False
        sr_lock = MockLock.return_value = AlwaysFreeLock()
        sr_get_capability.return_value = [trim_util.TRIM_CAP]
        context.setup_error_codes()

        trim_util.do_trim(None, {'sr_uuid': 'some-uuid'})

        self.assertFalse(sr_lock.acquired)
Пример #6
0
    def test_do_trim_removes_lv_no_leftover_trim_vol(self, context,
                                                     sr_get_capability,
                                                     MockLock, lvutil):
        lvutil.exists.return_value = False
        MockLock.return_value = AlwaysFreeLock()
        sr_get_capability.return_value = [trim_util.TRIM_CAP]
        context.setup_error_codes()

        trim_util.do_trim(None, {'sr_uuid': 'some-uuid'})

        lvutil.remove.assert_called_once_with(
            '/dev/VG_XenStorage-some-uuid/some-uuid_trim_lv',
            config_param='issue_discards=1')
Пример #7
0
    def test_do_trim_removes_lv_with_leftover_trim_vol(self, context,
                                                       sr_get_capability,
                                                       MockLock, lvutil):
        lvutil.exists.return_value = True
        MockLock.return_value = AlwaysFreeLock()
        sr_get_capability.return_value = [trim_util.TRIM_CAP]
        context.setup_error_codes()

        trim_util.do_trim(None, {'sr_uuid': 'some-uuid'})

        self.assertEquals([
            mock.call('/dev/VG_XenStorage-some-uuid/some-uuid_trim_lv'),
            mock.call('/dev/VG_XenStorage-some-uuid/some-uuid_trim_lv')
        ], lvutil.remove.mock_calls)
Пример #8
0
    def test_do_trim_removes_lv_no_leftover_trim_vol(self, context,
                                                     sr_get_capability,
                                                     MockLock, lvutil, pread2):
        lvutil.exists.return_value = False
        MockLock.return_value = AlwaysFreeLock()
        sr_get_capability.return_value = [trim_util.TRIM_CAP]
        context.setup_error_codes()

        trim_util.do_trim(None, {'sr_uuid': 'some-uuid'})

        pread2.assert_called_once_with([
            "/usr/sbin/blkdiscard", "-v",
            "/dev/VG_XenStorage-some-uuid/some-uuid_trim_lv"
        ])
Пример #9
0
    def test_do_trim_lock_released_even_if_exception_raised(self,
                                                            context,
                                                            sr_get_capability,
                                                            MockLock,
                                                            lvutil):
        lvutil.create.side_effect = Exception('blah')
        srlock = AlwaysFreeLock()
        MockLock.return_value = srlock
        sr_get_capability.return_value = [trim_util.TRIM_CAP]
        context.setup_error_codes()

        trim_util.do_trim(None, {'sr_uuid': 'some-uuid'})

        self.assertFalse(srlock.acquired)
Пример #10
0
    def test_do_trim_removes_lv_no_leftover_trim_vol(self,
                                                     context,
                                                     sr_get_capability,
                                                     MockLock,
                                                     lvutil):
        lvutil.exists.return_value = False
        MockLock.return_value = AlwaysFreeLock()
        sr_get_capability.return_value = [trim_util.TRIM_CAP]
        context.setup_error_codes()

        trim_util.do_trim(None, {'sr_uuid': 'some-uuid'})

        lvutil.remove.assert_called_once_with(
            '/dev/VG_XenStorage-some-uuid/some-uuid_trim_lv',
            config_param='issue_discards=1')
Пример #11
0
    def test_do_trim_creates_an_lv(self,
                                   context,
                                   sr_get_capability,
                                   MockLock,
                                   lvutil):
        MockLock.return_value = AlwaysFreeLock()
        sr_get_capability.return_value = [trim_util.TRIM_CAP]
        context.setup_error_codes()

        trim_util.do_trim(None, {'sr_uuid': 'some-uuid'})

        lvutil.create.assert_called_once_with(
            'some-uuid_trim_lv', 0, 'VG_XenStorage-some-uuid',
            size_in_percentage='100%F'
        )
Пример #12
0
    def test_do_trim_when_exception_then_returns_generic_err(self,
                                                             context,
                                                             sr_get_capability,
                                                             MockLock,
                                                             lvutil):
        lvutil._getVGstats.return_value = {'physical_size': 0,
                                           'physical_utilisation': 0,
                                           'freespace': EMPTY_VG_SPACE}
        lvutil.create.side_effect = Exception('blah')
        srlock = AlwaysFreeLock()
        MockLock.return_value = srlock
        sr_get_capability.return_value = [trim_util.TRIM_CAP]
        context.setup_error_codes()

        result = trim_util.do_trim(None, {'sr_uuid': 'some-uuid'})

        self.assertXML("""
        <?xml version="1.0" ?>
        <trim_response>
            <key_value_pair>
                <key>errcode</key>
                <value>UnknownTrimException</value>
            </key_value_pair>
            <key_value_pair>
                <key>errmsg</key>
                <value>Unknown Exception: trim failed on SR [some-uuid]</value>
            </key_value_pair>
        </trim_response>
        """, result)
Пример #13
0
    def test_do_trim_returns_exception_when_sr_full(self, context,
                                                    sr_get_capability,
                                                    MockLock, lvutil):
        lvutil._getVGstats.return_value = {
            'physical_size': 0,
            'physical_utilisation': 0,
            'freespace': 0
        }
        MockLock.return_value = AlwaysFreeLock()
        sr_get_capability.return_value = [trim_util.TRIM_CAP]
        context.setup_error_codes()

        result = trim_util.do_trim(None, {'sr_uuid': 'some-uuid'})

        self.assertXML(
            """
        <?xml version="1.0" ?>
        <trim_response>
            <key_value_pair>
                <key>errcode</key>
                <value>Trim failed on full SR</value>
            </key_value_pair>
            <key_value_pair>
                <key>errmsg</key>
                <value>No space to claim on a full SR</value>
            </key_value_pair>
        </trim_response>
        """, result)
Пример #14
0
    def test_do_trim_returns_exception_when_sr_full(self,
                                   context,
                                   sr_get_capability,
                                   MockLock,
                                   lvutil):
        lvutil._getVGstats.return_value = {'physical_size': 0,
                                           'physical_utilisation': 0,
                                           'freespace': 0}
        MockLock.return_value = AlwaysFreeLock()
        sr_get_capability.return_value = [trim_util.TRIM_CAP]
        context.setup_error_codes()

        result = trim_util.do_trim(None, {'sr_uuid': 'some-uuid'})

        self.assertXML("""
        <?xml version="1.0" ?>
        <trim_response>
            <key_value_pair>
                <key>errcode</key>
                <value>Trim failed on full SR</value>
            </key_value_pair>
            <key_value_pair>
                <key>errmsg</key>
                <value>No space to claim on a full SR</value>
            </key_value_pair>
        </trim_response>
        """, result)
Пример #15
0
    def test_do_trim_when_exception_then_returns_generic_err(
            self, context, sr_get_capability, MockLock, lvutil):
        lvutil._getVGstats.return_value = {
            'physical_size': 0,
            'physical_utilisation': 0,
            'freespace': EMPTY_VG_SPACE
        }
        lvutil.create.side_effect = Exception('blah')
        srlock = AlwaysFreeLock()
        MockLock.return_value = srlock
        sr_get_capability.return_value = [trim_util.TRIM_CAP]
        context.setup_error_codes()

        result = trim_util.do_trim(None, {'sr_uuid': 'some-uuid'})

        self.assertXML(
            """
        <?xml version="1.0" ?>
        <trim_response>
            <key_value_pair>
                <key>errcode</key>
                <value>UnknownTrimException</value>
            </key_value_pair>
            <key_value_pair>
                <key>errmsg</key>
                <value>Unknown Exception: trim failed on SR [some-uuid]</value>
            </key_value_pair>
        </trim_response>
        """, result)
Пример #16
0
    def test_do_trim_removes_lv_no_leftover_trim_vol(self,
                                                     context,
                                                     sr_get_capability,
                                                     MockLock,
                                                     lvutil,
                                                     pread2):
        lvutil.exists.return_value = False
        MockLock.return_value = AlwaysFreeLock()
        sr_get_capability.return_value = [trim_util.TRIM_CAP]
        context.setup_error_codes()

        trim_util.do_trim(None, {'sr_uuid': 'some-uuid'})

        pread2.assert_called_once_with(
            ["/usr/sbin/blkdiscard","-v",
            "/dev/VG_XenStorage-some-uuid/some-uuid_trim_lv"])
Пример #17
0
    def test_do_trim_creates_an_lv(self, context, sr_get_capability, MockLock,
                                   lvutil):
        lvutil._getVGstats.return_value = {
            'physical_size': 0,
            'physical_utilisation': 0,
            'freespace': EMPTY_VG_SPACE
        }
        MockLock.return_value = AlwaysFreeLock()
        sr_get_capability.return_value = [trim_util.TRIM_CAP]
        context.setup_error_codes()

        trim_util.do_trim(None, {'sr_uuid': 'some-uuid'})

        lvutil.create.assert_called_once_with('some-uuid_trim_lv',
                                              0,
                                              'VG_XenStorage-some-uuid',
                                              size_in_percentage='100%F')
Пример #18
0
    def test_do_trim_removes_lv_with_leftover_trim_vol(self,
                                                      context,
                                                      sr_get_capability,
                                                      MockLock,
                                                      lvutil):
        lvutil.exists.return_value = True
        MockLock.return_value = AlwaysFreeLock()
        sr_get_capability.return_value = [trim_util.TRIM_CAP]
        context.setup_error_codes()

        trim_util.do_trim(None, {'sr_uuid': 'some-uuid'})

        self.assertEquals([
                mock.call('/dev/VG_XenStorage-some-uuid/some-uuid_trim_lv'),
                mock.call(
                    '/dev/VG_XenStorage-some-uuid/some-uuid_trim_lv')
            ], lvutil.remove.mock_calls)
Пример #19
0
    def test_do_trim_creates_an_lv(self,
                                   context,
                                   sr_get_capability,
                                   MockLock,
                                   lvutil):
        lvutil._getVGstats.return_value = {'physical_size': 0,
                                           'physical_utilisation': 0,
                                           'freespace': EMPTY_VG_SPACE}
        MockLock.return_value = AlwaysFreeLock()
        sr_get_capability.return_value = [trim_util.TRIM_CAP]
        context.setup_error_codes()

        trim_util.do_trim(None, {'sr_uuid': 'some-uuid'})

        lvutil.create.assert_called_once_with(
            'some-uuid_trim_lv', 0, 'VG_XenStorage-some-uuid',
            size_in_percentage='100%F'
        )
Пример #20
0
    def test_do_trim_sleeps_a_sec_and_retries_three_times(self,
                                                          context,
                                                          sr_get_capability,
                                                          MockLock,
                                                          sleep):
        MockLock.return_value = AlwaysBusyLock()
        sr_get_capability.return_value = [trim_util.TRIM_CAP]
        context.setup_error_codes()

        trim_util.do_trim(None, {'sr_uuid': 'some-uuid'})

        self.assertEquals([
                mock.call(1),
                mock.call(1),
                mock.call(1)
            ],
            sleep.mock_calls
        )
Пример #21
0
    def test_do_trim_when_trim_succeeded_returns_true(self, context,
                                                      sr_get_capability,
                                                      MockLock, lvutil):
        MockLock.return_value = AlwaysFreeLock()
        sr_get_capability.return_value = [trim_util.TRIM_CAP]
        context.setup_error_codes()

        result = trim_util.do_trim(None, {'sr_uuid': 'some-uuid'})

        self.assertEquals('True', result)
Пример #22
0
    def test_do_trim_when_trim_succeeded_returns_true(self,
                                                      context,
                                                      sr_get_capability,
                                                      MockLock,
                                                      lvutil):
        MockLock.return_value = AlwaysFreeLock()
        sr_get_capability.return_value = [trim_util.TRIM_CAP]
        context.setup_error_codes()

        result = trim_util.do_trim(None, {'sr_uuid': 'some-uuid'})

        self.assertEquals('True', result)
Пример #23
0
    def test_do_trim_when_trim_succeeded_returns_true(self, context,
                                                      sr_get_capability,
                                                      MockLock, lvutil,
                                                      pread2):
        lvutil._getVGstats.return_value = {
            'physical_size': 0,
            'physical_utilisation': 0,
            'freespace': EMPTY_VG_SPACE
        }
        MockLock.return_value = AlwaysFreeLock()
        sr_get_capability.return_value = [trim_util.TRIM_CAP]
        context.setup_error_codes()

        result = trim_util.do_trim(None, {'sr_uuid': 'some-uuid'})

        self.assertEquals('True', result)
Пример #24
0
    def test_do_trim_when_trim_succeeded_returns_true(self,
                                                      context,
                                                      sr_get_capability,
                                                      MockLock,
                                                      lvutil,
                                                      pread2):
        lvutil._getVGstats.return_value = {'physical_size': 0,
                                           'physical_utilisation': 0,
                                           'freespace': EMPTY_VG_SPACE}
        MockLock.return_value = AlwaysFreeLock()
        sr_get_capability.return_value = [trim_util.TRIM_CAP]
        context.setup_error_codes()

        result = trim_util.do_trim(None, {'sr_uuid': 'some-uuid'})

        self.assertEquals('True', result)
Пример #25
0
    def test_do_trim_error_code_trim_not_supported(self, context,
                                                   sr_get_capability):
        sr_get_capability.return_value = []
        context.setup_error_codes()

        result = trim_util.do_trim(None, {'sr_uuid': 'some-uuid'})

        self.assertXML(
            """
        <?xml version="1.0" ?>
        <trim_response>
            <key_value_pair>
                <key>errcode</key>
                <value>UnsupportedSRForTrim</value>
            </key_value_pair>
            <key_value_pair>
                <key>errmsg</key>
                <value>Trim on [some-uuid] not supported</value>
            </key_value_pair>
        </trim_response>
        """, result)
Пример #26
0
    def test_do_trim_error_code_trim_not_supported(self,
                                                   context,
                                                   sr_get_capability):
        sr_get_capability.return_value = []
        context.setup_error_codes()

        result = trim_util.do_trim(None, {'sr_uuid': 'some-uuid'})

        self.assertXML("""
        <?xml version="1.0" ?>
        <trim_response>
            <key_value_pair>
                <key>errcode</key>
                <value>UnsupportedSRForTrim</value>
            </key_value_pair>
            <key_value_pair>
                <key>errmsg</key>
                <value>Trim on [some-uuid] not supported</value>
            </key_value_pair>
        </trim_response>
        """, result)
Пример #27
0
    def test_do_trim_unable_to_obtain_lock_on_sr(self, context,
                                                 sr_get_capability, MockLock,
                                                 sleep):
        MockLock.return_value = AlwaysBusyLock()
        sr_get_capability.return_value = [trim_util.TRIM_CAP]
        context.setup_error_codes()

        result = trim_util.do_trim(None, {'sr_uuid': 'some-uuid'})

        self.assertXML(
            """
        <?xml version="1.0" ?>
        <trim_response>
            <key_value_pair>
                <key>errcode</key>
                <value>SRUnavailable</value>
            </key_value_pair>
            <key_value_pair>
                <key>errmsg</key>
                <value>Unable to get SR lock [some-uuid]</value>
            </key_value_pair>
        </trim_response>
        """, result)
Пример #28
0
    def test_do_trim_unable_to_obtain_lock_on_sr(self,
                                                 context,
                                                 sr_get_capability,
                                                 MockLock,
                                                 sleep):
        MockLock.return_value = AlwaysBusyLock()
        sr_get_capability.return_value = [trim_util.TRIM_CAP]
        context.setup_error_codes()

        result = trim_util.do_trim(None, {'sr_uuid': 'some-uuid'})

        self.assertXML("""
        <?xml version="1.0" ?>
        <trim_response>
            <key_value_pair>
                <key>errcode</key>
                <value>SRUnavailable</value>
            </key_value_pair>
            <key_value_pair>
                <key>errmsg</key>
                <value>Unable to get SR lock [some-uuid]</value>
            </key_value_pair>
        </trim_response>
        """, result)