Add unit test for copies API
Change-Id: I069a3483c1365461818c6e293e5b4e58cb68fa5b
This commit is contained in:
parent
b6342feeb6
commit
31eab8eb6c
|
@ -0,0 +1,122 @@
|
|||
# Licensed under the Apache License, Version 2.0 (the "License"); you may
|
||||
# not use this file except in compliance with the License. You may obtain
|
||||
# a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||
# License for the specific language governing permissions and limitations
|
||||
# under the License.
|
||||
from mock import mock
|
||||
|
||||
from karbor.api.v1 import copies
|
||||
from karbor import context
|
||||
from karbor import exception
|
||||
from karbor.tests import base
|
||||
from karbor.tests.unit.api import fakes
|
||||
from webob import exc
|
||||
|
||||
PROVIDER_ID_1 = 'efc6a88b-9096-4bb6-8634-cda182a6e12a'
|
||||
PROVIDER_ID_2 = '3241a88b-9096-4bb6-8634-cda182a6e12a'
|
||||
DEFAULT_PROJECT_ID = '39bb894794b741e982bd26144d2949f6'
|
||||
DEFAULT_PLAN_ID = '603b894794b741e982bd26144d2949f6'
|
||||
|
||||
|
||||
class FakePlan(object):
|
||||
def __init__(self, values):
|
||||
self.id = values.get('id')
|
||||
self.provider_id = values.get('provider_id')
|
||||
self.parameters = values.get('parameters')
|
||||
|
||||
|
||||
class CopiesApiTest(base.TestCase):
|
||||
|
||||
def setUp(self):
|
||||
super(CopiesApiTest, self).setUp()
|
||||
self.controller = copies.CopiesController()
|
||||
self.ctxt = context.RequestContext('demo',
|
||||
DEFAULT_PROJECT_ID, True)
|
||||
|
||||
@mock.patch('karbor.objects.Plan.get_by_id')
|
||||
@mock.patch('karbor.services.protection.api.API.list_checkpoints')
|
||||
@mock.patch('karbor.services.protection.api.API.copy')
|
||||
def test_copies_create(self, mock_copy,
|
||||
mock_list_checkpoints, mock_plan_get):
|
||||
mock_plan_get.return_value = FakePlan(
|
||||
{'id': DEFAULT_PLAN_ID,
|
||||
'provider_id': PROVIDER_ID_1,
|
||||
'parameters': {}})
|
||||
mock_list_checkpoints.return_value = ['fake_checkpoint_id']
|
||||
copy = self._copy_in_request_body(DEFAULT_PLAN_ID, {})
|
||||
body = {"copy": copy}
|
||||
req = fakes.HTTPRequest.blank('/v1/copies')
|
||||
self.controller.create(req, PROVIDER_ID_1, body=body)
|
||||
self.assertEqual(True, mock_copy.called)
|
||||
|
||||
def test_copies_create_with_invalid_provider_id(self):
|
||||
copy = self._copy_in_request_body(DEFAULT_PLAN_ID, {})
|
||||
body = {"copy": copy}
|
||||
req = fakes.HTTPRequest.blank('/v1/copies')
|
||||
self.assertRaises(exception.InvalidInput, self.controller.create, req,
|
||||
'fake_invalid_provider_id', body=body)
|
||||
|
||||
@mock.patch('karbor.objects.Plan.get_by_id')
|
||||
def test_copies_create_with_invalid_plan(self, mock_plan_get):
|
||||
mock_plan_get.side_effect = exception.PlanNotFound
|
||||
copy = self._copy_in_request_body(DEFAULT_PLAN_ID, {})
|
||||
body = {"copy": copy}
|
||||
req = fakes.HTTPRequest.blank('/v1/copies')
|
||||
self.assertRaises(exc.HTTPNotFound, self.controller.create, req,
|
||||
PROVIDER_ID_1, body=body)
|
||||
|
||||
@mock.patch('karbor.objects.Plan.get_by_id')
|
||||
def test_copies_create_with_different_provider_id(self, mock_plan_get):
|
||||
mock_plan_get.return_value = FakePlan(
|
||||
{'id': DEFAULT_PLAN_ID,
|
||||
'provider_id': PROVIDER_ID_2,
|
||||
'parameters': {}})
|
||||
copy = self._copy_in_request_body(DEFAULT_PLAN_ID, {})
|
||||
body = {"copy": copy}
|
||||
req = fakes.HTTPRequest.blank('/v1/copies')
|
||||
self.assertRaises(exception.InvalidInput, self.controller.create, req,
|
||||
PROVIDER_ID_1, body=body)
|
||||
|
||||
@mock.patch('karbor.objects.Plan.get_by_id')
|
||||
@mock.patch('karbor.services.protection.api.API.list_checkpoints')
|
||||
def test_copies_create_with_no_checkpoints_exist(
|
||||
self, mock_list_checkpoints, mock_plan_get):
|
||||
mock_plan_get.return_value = FakePlan(
|
||||
{'id': DEFAULT_PLAN_ID,
|
||||
'provider_id': PROVIDER_ID_1,
|
||||
'parameters': {}})
|
||||
mock_list_checkpoints.return_value = []
|
||||
copy = self._copy_in_request_body(DEFAULT_PLAN_ID, {})
|
||||
body = {"copy": copy}
|
||||
req = fakes.HTTPRequest.blank('/v1/copies')
|
||||
self.assertRaises(exception.InvalidInput, self.controller.create, req,
|
||||
PROVIDER_ID_1, body=body)
|
||||
|
||||
@mock.patch('karbor.objects.Plan.get_by_id')
|
||||
@mock.patch('karbor.services.protection.api.API.list_checkpoints')
|
||||
@mock.patch('karbor.services.protection.api.API.copy')
|
||||
def test_copies_create_with_protection_copy_failed(
|
||||
self, mock_copy, mock_list_checkpoints, mock_plan_get):
|
||||
mock_plan_get.return_value = FakePlan(
|
||||
{'id': DEFAULT_PLAN_ID,
|
||||
'provider_id': PROVIDER_ID_1,
|
||||
'parameters': {}})
|
||||
mock_list_checkpoints.return_value = ['fake_checkpoint_id']
|
||||
mock_copy.side_effect = exception.FlowError
|
||||
copy = self._copy_in_request_body(DEFAULT_PLAN_ID, {})
|
||||
body = {"copy": copy}
|
||||
req = fakes.HTTPRequest.blank('/v1/copies')
|
||||
self.assertRaises(exception.FlowError, self.controller.create,
|
||||
req, PROVIDER_ID_1, body=body)
|
||||
|
||||
def _copy_in_request_body(self, plan_id, parameters):
|
||||
return {
|
||||
'plan_id': plan_id,
|
||||
'parameters': parameters
|
||||
}
|
Loading…
Reference in New Issue