self.update_pool('rbd', 'disabled')
self.assertStatus(200)
+
+ def test_site_name(self):
+ expected_site_name = {'site_name': 'site-a'}
+ self._task_put('/api/block/mirroring/site_name', expected_site_name)
+ self.assertStatus(200)
+
+ site_name = self._get('/api/block/mirroring/site_name')
+ self.assertStatus(200)
+ self.assertEqual(expected_site_name, site_name)
import rbd
from . import ApiController, Endpoint, Task, BaseController, ReadPermission, \
- RESTController
+ UpdatePermission, RESTController
from .rbd import _rbd_call
from .. import mgr
_get_content_data.reset()
+@ApiController('/block/mirroring', Scope.RBD_MIRRORING)
+class RbdMirroring(BaseController):
+
+ @Endpoint(method='GET', path='site_name')
+ @handle_rbd_mirror_error()
+ @ReadPermission
+ def get(self):
+ return self._get_site_name()
+
+ @Endpoint(method='PUT', path='site_name')
+ @handle_rbd_mirror_error()
+ @UpdatePermission
+ def set(self, site_name):
+ rbd.RBD().mirror_site_name_set(mgr.rados, site_name)
+ return self._get_site_name()
+
+ def _get_site_name(self):
+ return {'site_name': rbd.RBD().mirror_site_name_get(mgr.rados)}
+
+
@ApiController('/block/mirroring/summary', Scope.RBD_MIRRORING)
class RbdMirroringSummary(BaseController):
from . import ControllerTestCase
from .. import mgr
from ..controllers.summary import Summary
-from ..controllers.rbd_mirroring import RbdMirroringSummary
+from ..controllers.rbd_mirroring import RbdMirroring, RbdMirroringSummary
from ..services import progress
}
+class RbdMirroringControllerTest(ControllerTestCase):
+
+ @classmethod
+ def setup_server(cls):
+ # pylint: disable=protected-access
+ RbdMirroring._cp_config['tools.authenticate.on'] = False
+ # pylint: enable=protected-access
+
+ cls.setup_controllers([RbdMirroring])
+
+ @mock.patch('dashboard.controllers.rbd_mirroring.rbd.RBD')
+ def test_site_name(self, mock_rbd):
+ result = {'site_name': 'fsid'}
+ mock_rbd_instance = mock_rbd.return_value
+ mock_rbd_instance.mirror_site_name_get.return_value = \
+ result['site_name']
+
+ self._get('/api/block/mirroring/site_name')
+ self.assertStatus(200)
+ self.assertJsonBody(result)
+
+ result['site_name'] = 'site-a'
+ mock_rbd_instance.mirror_site_name_get.return_value = \
+ result['site_name']
+ self._put('/api/block/mirroring/site_name', result)
+ self.assertStatus(200)
+ self.assertJsonBody(result)
+ mock_rbd_instance.mirror_site_name_set.assert_called_with(
+ mock.ANY, result['site_name'])
+
+
class RbdMirroringSummaryControllerTest(ControllerTestCase):
@classmethod