diff --git a/hooks/ceph_broker.py b/hooks/ceph_broker.py index 930487a..b12491a 100644 --- a/hooks/ceph_broker.py +++ b/hooks/ceph_broker.py @@ -179,7 +179,10 @@ def handle_replicated_pool(request, service): log(msg, level=ERROR) return {'exit-code': 1, 'stderr': msg} - pool = ReplicatedPool(service=service, name=pool_name, replicas=replicas,pg_num=pg_num) + pool = ReplicatedPool(service=service, + name=pool_name, + replicas=replicas, + pg_num=pg_num) if not pool_exists(service=service, name=pool_name): log("Creating pool '%s' (replicas=%s)" % (pool, replicas), level=INFO) diff --git a/unit_tests/test_ceph_broker.py b/unit_tests/test_ceph_broker.py index 6fd30c1..f8380ed 100644 --- a/unit_tests/test_ceph_broker.py +++ b/unit_tests/test_ceph_broker.py @@ -43,101 +43,97 @@ class CephBrokerTestCase(unittest.TestCase): {'exit-code': 1, 'stderr': "Unknown operation 'invalid_op'"}) + @mock.patch('ceph_broker.get_osds') + @mock.patch('ceph_broker.ReplicatedPool') + @mock.patch('ceph_broker.pool_exists') + @mock.patch('ceph_broker.log') + def test_process_requests_create_pool_w_pg_num(self, mock_log, + mock_pool_exists, + mock_replicated_pool, + mock_get_osds): + mock_get_osds.return_value = [0, 1, 2] + mock_pool_exists.return_value = False + reqs = json.dumps({'api-version': 1, + 'ops': [{ + 'op': 'create-pool', + 'name': 'foo', + 'replicas': 3, + 'pg_num': 100}]}) + rc = ceph_broker.process_requests(reqs) + mock_pool_exists.assert_called_with(service='admin', name='foo') + mock_replicated_pool.assert_called_with(service='admin', name='foo', + replicas=3, pg_num=100) + self.assertEqual(json.loads(rc), {'exit-code': 0}) -@mock.patch('ceph_broker.create_pool') -@mock.patch('ceph_broker.pool_exists') -@mock.patch('ceph_broker.log') -def test_process_requests_create_pool_exists(self, mock_log, - mock_pool_exists, - mock_create_pool): - mock_pool_exists.return_value = True - reqs = json.dumps({'api-version': 1, - 'ops': [{'op': 'create-pool', 'name': 'foo', - 'replicas': 3}]}) - rc = ceph_broker.process_requests(reqs) - mock_pool_exists.assert_called_with(service='admin', name='foo') - self.assertFalse(mock_create_pool.called) - self.assertEqual(json.loads(rc), {'exit-code': 0}) + @mock.patch('ceph_broker.get_osds') + @mock.patch('ceph_broker.ReplicatedPool') + @mock.patch('ceph_broker.pool_exists') + @mock.patch('ceph_broker.log') + def test_process_requests_create_pool_w_pg_num_capped(self, mock_log, + mock_pool_exists, + mock_replicated_pool, + mock_get_osds): + mock_get_osds.return_value = [0, 1, 2] + mock_pool_exists.return_value = False + reqs = json.dumps({'api-version': 1, + 'ops': [{ + 'op': 'create-pool', + 'name': 'foo', + 'replicas': 3, + 'pg_num': 300}]}) + rc = ceph_broker.process_requests(reqs) + mock_pool_exists.assert_called_with(service='admin', + name='foo') + mock_replicated_pool.assert_called_with(service='admin', name='foo', + replicas=3, pg_num=100) + self.assertEqual(json.loads(rc), {'exit-code': 0}) + self.assertEqual(json.loads(rc), {'exit-code': 0}) + @mock.patch('ceph_broker.ReplicatedPool') + @mock.patch('ceph_broker.pool_exists') + @mock.patch('ceph_broker.log') + def test_process_requests_create_pool_exists(self, mock_log, + mock_pool_exists, + mock_replicated_pool): + mock_pool_exists.return_value = True + reqs = json.dumps({'api-version': 1, + 'ops': [{'op': 'create-pool', + 'name': 'foo', + 'replicas': 3}]}) + rc = ceph_broker.process_requests(reqs) + mock_pool_exists.assert_called_with(service='admin', + name='foo') + self.assertFalse(mock_replicated_pool.create.called) + self.assertEqual(json.loads(rc), {'exit-code': 0}) -@mock.patch('ceph_broker.get_osds') -@mock.patch('ceph_broker.create_pool') -@mock.patch('ceph_broker.pool_exists') -@mock.patch('ceph_broker.log') -def test_process_requests_create_pool_w_pg_num(self, mock_log, - mock_pool_exists, - mock_create_pool, - mock_get_osds): - mock_get_osds.return_value = [0, 1, 2] - mock_pool_exists.return_value = False - reqs = json.dumps({'api-version': 1, - 'ops': [{'op': 'create-pool', 'name': - 'foo', 'replicas': 3, - 'pg_num': 100}]}) - rc = ceph_broker.process_requests(reqs) - mock_pool_exists.assert_called_with(service='admin', name='foo') - mock_create_pool.assert_called_with(service='admin', name='foo', - replicas=3, pg_num='100') - self.assertEqual(json.loads(rc), {'exit-code': 0}) + @mock.patch('ceph_broker.ReplicatedPool') + @mock.patch('ceph_broker.pool_exists') + @mock.patch('ceph_broker.log') + def test_process_requests_create_pool_rid(self, mock_log, + mock_pool_exists, + mock_replicated_pool): + mock_pool_exists.return_value = False + reqs = json.dumps({'api-version': 1, + 'request-id': '1ef5aede', + 'ops': [{ + 'op': 'create-pool', + 'name': 'foo', + 'replicas': 3}]}) + rc = ceph_broker.process_requests(reqs) + mock_pool_exists.assert_called_with(service='admin', name='foo') + mock_replicated_pool.assert_called_with(service='admin', + name='foo', + pg_num=None, + replicas=3) + self.assertEqual(json.loads(rc)['exit-code'], 0) + self.assertEqual(json.loads(rc)['request-id'], '1ef5aede') -@mock.patch('ceph_broker.get_osds') -@mock.patch('ceph_broker.create_pool') -@mock.patch('ceph_broker.pool_exists') -@mock.patch('ceph_broker.log') -def test_process_requests_create_pool_w_pg_num_capped(self, mock_log, - mock_pool_exists, - mock_create_pool, - mock_get_osds): - mock_get_osds.return_value = [0, 1, 2] - mock_pool_exists.return_value = False - reqs = json.dumps({'api-version': 1, - 'ops': [{'op': 'create-pool', 'name': - 'foo', 'replicas': 3, - 'pg_num': 300}]}) - rc = ceph_broker.process_requests(reqs) - mock_pool_exists.assert_called_with(service='admin', name='foo') - mock_create_pool.assert_called_with(service='admin', name='foo', - replicas=3, pg_num='100') - self.assertEqual(json.loads(rc), {'exit-code': 0}) - -@mock.patch('ceph_broker.create_pool') -@mock.patch('ceph_broker.pool_exists') -@mock.patch('ceph_broker.log') -def test_process_requests_create_pool_exists(self, mock_log, - mock_pool_exists, - mock_create_pool): - mock_pool_exists.return_value = True - reqs = json.dumps({'api-version': 1, - 'ops': [{'op': 'create-pool', 'name': 'foo', - 'replicas': 3}]}) - rc = ceph_broker.process_requests(reqs) - mock_pool_exists.assert_called_with(service='admin', name='foo') - self.assertFalse(mock_create_pool.called) - self.assertEqual(json.loads(rc), {'exit-code': 0}) - -@mock.patch('ceph_broker.create_pool') -@mock.patch('ceph_broker.pool_exists') -@mock.patch('ceph_broker.log') -def test_process_requests_create_pool_rid(self, mock_log, mock_pool_exists, - mock_create_pool): - mock_pool_exists.return_value = False - reqs = json.dumps({'api-version': 1, - 'request-id': '1ef5aede', - 'ops': [{'op': 'create-pool', 'name': - 'foo', 'replicas': 3}]}) - rc = ceph_broker.process_requests(reqs) - mock_pool_exists.assert_called_with(service='admin', name='foo') - mock_create_pool.assert_called_with(service='admin', name='foo', - replicas=3, pg_num=None) - self.assertEqual(json.loads(rc)['exit-code'], 0) - self.assertEqual(json.loads(rc)['request-id'], '1ef5aede') - -@mock.patch('ceph_broker.log') -def test_process_requests_invalid_api_rid(self, mock_log): - reqs = json.dumps({'api-version': 0, 'request-id': '1ef5aede', - 'ops': [{'op': 'create-pool'}]}) - rc = ceph_broker.process_requests(reqs) - self.assertEqual(json.loads(rc)['exit-code'], 1) - self.assertEqual(json.loads(rc)['stderr'], - "Missing or invalid api version (0)") - self.assertEqual(json.loads(rc)['request-id'], '1ef5aede') + @mock.patch('ceph_broker.log') + def test_process_requests_invalid_api_rid(self, mock_log): + reqs = json.dumps({'api-version': 0, 'request-id': '1ef5aede', + 'ops': [{'op': 'create-pool'}]}) + rc = ceph_broker.process_requests(reqs) + self.assertEqual(json.loads(rc)['exit-code'], 1) + self.assertEqual(json.loads(rc)['stderr'], + "Missing or invalid api version (0)") + self.assertEqual(json.loads(rc)['request-id'], '1ef5aede')