예제 #1
0
    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'])
예제 #2
0
    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'])
예제 #3
0
    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]))
예제 #4
0
    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]))
예제 #5
0
    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]))
예제 #6
0
    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]))
예제 #7
0
    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'])
예제 #8
0
    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')
예제 #9
0
    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)
예제 #10
0
 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'])