def test_request_to_primitive(self): spec = copy.deepcopy(self.spec) body = policies.PolicyCreateRequestBody(name='foo', spec=spec) sot = policies.PolicyCreateRequest(policy=body) self.assertIsInstance(sot.policy, policies.PolicyCreateRequestBody) self.assertEqual('foo', sot.policy.name) res = sot.obj_to_primitive() self.assertIn('policy', res['senlin_object.changes']) self.assertEqual('PolicyCreateRequest', res['senlin_object.name']) self.assertEqual('senlin', res['senlin_object.namespace']) self.assertEqual('1.0', res['senlin_object.version']) data = res['senlin_object.data']['policy'] self.assertEqual('PolicyCreateRequestBody', data['senlin_object.name']) self.assertEqual('senlin', data['senlin_object.namespace']) self.assertEqual('1.0', data['senlin_object.version']) self.assertIn('name', data['senlin_object.changes']) self.assertIn('spec', data['senlin_object.changes']) pd = data['senlin_object.data'] self.assertEqual(u'foo', pd['name']) spec_data = jsonutils.loads(pd['spec']) self.assertEqual('senlin.policy.scaling', spec_data['type']) self.assertEqual('1.0', spec_data['version'])
def test_policy_create_default(self): self._setup_fakes() req = orpo.PolicyCreateRequestBody(name='Fake', spec=self.spec) result = self.svc.policy_create(self.ctx, req.obj_to_primitive()) self.assertEqual('Fake', result['name']) self.assertEqual('TestPolicy-1.0', result['type']) self.assertIsNone(result['updated_at']) self.assertIsNotNone(result['created_at']) self.assertIsNotNone(result['id'])
def test_policy_create_failed_validation(self): self._setup_fakes() mock_validate = self.patchobject(fakes.TestPolicy, 'validate') mock_validate.side_effect = exc.InvalidSpec(message='BOOM') req = orpo.PolicyCreateRequestBody(name='Fake', spec=self.spec) ex = self.assertRaises(rpc.ExpectedException, self.svc.policy_create, self.ctx, req.obj_to_primitive()) self.assertEqual(exc.InvalidSpec, ex.exc_info[0]) self.assertEqual('BOOM', str(ex.exc_info[1]))
def test_policy_create_invalid_spec(self): # This test is for the policy object constructor which may throw # exceptions if the spec is invalid self._setup_fakes() spec = copy.deepcopy(self.spec) spec['properties'] = {'KEY3': 'value3'} req = orpo.PolicyCreateRequestBody(name='Fake', spec=spec) ex = self.assertRaises(rpc.ExpectedException, self.svc.policy_create, self.ctx, req.obj_to_primitive()) self.assertEqual(exc.ESchema, ex.exc_info[0]) self.assertEqual("Required spec item 'KEY2' not provided", str(ex.exc_info[1]))
def test_policy_create_invalid_value(self): self._setup_fakes() spec = copy.deepcopy(self.spec) spec['properties']['KEY2'] = 'value3' mock_validate = self.patchobject(fakes.TestPolicy, 'validate') mock_validate.side_effect = exc.InvalidSpec( message="The specified KEY2 'value3' could not be found.") req = orpo.PolicyCreateRequestBody(name='Fake', spec=spec) ex = self.assertRaises(rpc.ExpectedException, self.svc.policy_create, self.ctx, req.obj_to_primitive()) self.assertEqual(exc.InvalidSpec, ex.exc_info[0]) self.assertEqual("The specified KEY2 'value3' could not be " "found.", str(ex.exc_info[1]))
def test_policy_create_type_not_found(self): # We skip the fakes setup, so we won't get the proper policy type spec = { 'type': 'FakePolicy', 'version': '1.0', 'properties': { 'KEY2': 6 } } req = orpo.PolicyCreateRequestBody(name='Fake', spec=spec) ex = self.assertRaises(rpc.ExpectedException, self.svc.policy_create, self.ctx, req.obj_to_primitive()) self.assertEqual(exc.ResourceNotFound, ex.exc_info[0]) self.assertEqual( "The policy_type 'FakePolicy-1.0' could " "not be found.", str(ex.exc_info[1]))
def test_request_body_to_primitive(self): spec = copy.deepcopy(self.spec) sot = policies.PolicyCreateRequestBody(name='foo', spec=spec) self.assertEqual('foo', sot.name) res = sot.obj_to_primitive() # request body self.assertEqual('PolicyCreateRequestBody', res['senlin_object.name']) self.assertEqual('1.0', res['senlin_object.version']) self.assertEqual('senlin', res['senlin_object.namespace']) self.assertIn('name', res['senlin_object.changes']) self.assertIn('spec', res['senlin_object.changes']) # spec data = res['senlin_object.data'] self.assertEqual(u'foo', data['name']) spec_data = jsonutils.loads(data['spec']) self.assertEqual('senlin.policy.scaling', spec_data['type']) self.assertEqual('1.0', spec_data['version'])
def test_policy_create_name_conflict(self, mock_get): cfg.CONF.set_override('name_unique', True) mock_get.return_value = mock.Mock() spec = { 'type': 'FakePolicy', 'version': '1.0', 'properties': { 'KEY2': 6 } } req = orpo.PolicyCreateRequestBody(name='FAKE_NAME', spec=spec) ex = self.assertRaises(rpc.ExpectedException, self.svc.policy_create, self.ctx, req.obj_to_primitive()) self.assertEqual(exc.BadRequest, ex.exc_info[0]) self.assertEqual("A policy named 'FAKE_NAME' already exists.", str(ex.exc_info[1])) mock_get.assert_called_once_with(self.ctx, 'FAKE_NAME')
def test_policy_create_request(self): spec = copy.deepcopy(self.spec) policy = policies.PolicyCreateRequestBody(name='foo', spec=spec) sot = policies.PolicyCreateRequest(policy=policy) self.assertIsInstance(sot.policy, policies.PolicyCreateRequestBody)
def test_policy_create_body(self): spec = copy.deepcopy(self.spec) sot = policies.PolicyCreateRequestBody(name='foo', spec=spec) self.assertEqual('foo', sot.name) self.assertEqual('senlin.policy.scaling', sot.spec['type']) self.assertEqual('1.0', sot.spec['version'])