Beispiel #1
0
    def test_rbd_volume_proxy_init(self):
        snap = u'snapshot-name'

        client = self.mock_client.return_value
        client.__enter__.return_value = client

        with mock.patch.object(self.driver, '_connect_to_rados') as \
                mock_connect_from_rados:
            with mock.patch.object(self.driver, '_disconnect_from_rados') as \
                    mock_disconnect_from_rados:
                mock_connect_from_rados.return_value = (None, None)
                mock_disconnect_from_rados.return_value = (None, None)

                with driver.RBDVolumeProxy(self.driver, self.volume_name):
                    mock_connect_from_rados.assert_called_once()
                    self.assertFalse(mock_disconnect_from_rados.called)

                mock_disconnect_from_rados.assert_called_once()

                mock_connect_from_rados.reset_mock()
                mock_disconnect_from_rados.reset_mock()

                with driver.RBDVolumeProxy(self.driver,
                                           self.volume_name,
                                           snapshot=snap):
                    mock_connect_from_rados.assert_called_once()
                    self.assertFalse(mock_disconnect_from_rados.called)

                mock_disconnect_from_rados.assert_called_once()
Beispiel #2
0
    def test_rbd_volume_proxy_init(self):
        name = u'volume-00000001'
        snap = u'snapshot-name'
        self.stubs.Set(self.driver, '_connect_to_rados', lambda x:
                       (None, None))
        self.mox.StubOutWithMock(self.driver, '_disconnect_from_rados')

        # no snapshot
        self.rbd.Image(None, str(name), snapshot=None, read_only=False) \
                .AndReturn(None)
        # snapshot
        self.rbd.Image(None, str(name), snapshot=str(snap), read_only=True) \
                .AndReturn(None)
        # error causes disconnect
        self.stubs.Set(self.rbd, 'Error', test.TestingException)
        self.rbd.Image(None, str(name), snapshot=None, read_only=False) \
                .AndRaise(test.TestingException)
        self.driver._disconnect_from_rados(None, None)

        self.mox.ReplayAll()

        driver.RBDVolumeProxy(self.driver, name)
        driver.RBDVolumeProxy(self.driver, name, snapshot=snap, read_only=True)
        self.assertRaises(test.TestingException, driver.RBDVolumeProxy,
                          self.driver, name)
Beispiel #3
0
    def test_rbd_volume_proxy_init(self):
        mock_driver = mock.Mock(name='driver')
        mock_driver._connect_to_rados.return_value = (None, None)
        with driver.RBDVolumeProxy(mock_driver, self.volume_name):
            self.assertEqual(1, mock_driver._connect_to_rados.call_count)
            self.assertFalse(mock_driver._disconnect_from_rados.called)

        self.assertEqual(1, mock_driver._disconnect_from_rados.call_count)

        mock_driver.reset_mock()

        snap = u'snapshot-name'
        with driver.RBDVolumeProxy(mock_driver, self.volume_name,
                                   snapshot=snap):
            self.assertEqual(1, mock_driver._connect_to_rados.call_count)
            self.assertFalse(mock_driver._disconnect_from_rados.called)

        self.assertEqual(1, mock_driver._disconnect_from_rados.call_count)
Beispiel #4
0
    def test_uncloneable_unreadable(self):
        self.stubs.Set(self.driver, '_get_fsid', lambda: 'abc')
        location = 'rbd://abc/pool/image/snap'
        self.stubs.Set(self.rbd, 'Error', test.TestingException)
        self.mox.StubOutWithMock(driver, 'RBDVolumeProxy')

        driver.RBDVolumeProxy(self.driver, 'image',
                              pool='pool',
                              snapshot='snap',
                              read_only=True).AndRaise(test.TestingException)

        self.mox.ReplayAll()

        self.assertFalse(self.driver._is_cloneable(location))
Beispiel #5
0
    def test_cloneable(self):
        self.stubs.Set(self.driver, '_get_fsid', lambda: 'abc')
        location = 'rbd://abc/pool/image/snap'
        mock_proxy = self.mox.CreateMockAnything()
        self.mox.StubOutWithMock(driver, 'RBDVolumeProxy')

        driver.RBDVolumeProxy(self.driver, 'image',
                              pool='pool',
                              snapshot='snap',
                              read_only=True).AndReturn(mock_proxy)
        mock_proxy.__enter__().AndReturn(mock_proxy)
        mock_proxy.__exit__(None, None, None).AndReturn(None)

        self.mox.ReplayAll()

        self.assertTrue(self.driver._is_cloneable(location))
Beispiel #6
0
    def test_create_cloned_volume(self):
        src_name = u'volume-00000001'
        dst_name = u'volume-00000002'
        mock_proxy = self.mox.CreateMockAnything()
        mock_proxy.ioctx = self.mox.CreateMockAnything()
        self.mox.StubOutWithMock(driver, 'RBDVolumeProxy')

        driver.RBDVolumeProxy(self.driver, src_name, read_only=True) \
            .AndReturn(mock_proxy)
        mock_proxy.__enter__().AndReturn(mock_proxy)
        mock_proxy.copy(mock_proxy.ioctx, str(dst_name))
        mock_proxy.__exit__(None, None, None).AndReturn(None)

        self.mox.ReplayAll()

        self.driver.create_cloned_volume(dict(name=dst_name),
                                         dict(name=src_name))
Beispiel #7
0
    def test_delete_snapshot(self):
        vol_name = u'volume-00000001'
        snap_name = u'snapshot-name'
        snapshot = dict(volume_name=vol_name, name=snap_name)
        mock_proxy = self.mox.CreateMockAnything()
        self.mox.StubOutWithMock(driver, 'RBDVolumeProxy')

        driver.RBDVolumeProxy(self.driver, vol_name) \
            .AndReturn(mock_proxy)
        mock_proxy.__enter__().AndReturn(mock_proxy)
        self.rbd.RBD_FEATURE_LAYERING = 1
        mock_proxy.unprotect_snap(str(snap_name))
        mock_proxy.remove_snap(str(snap_name))
        mock_proxy.__exit__(None, None, None).AndReturn(None)

        self.mox.ReplayAll()

        self.driver.delete_snapshot(snapshot)