This patch makes nova resources available based on available os-api service extensions. Change-Id: I4810493918af6ecb5bdad8f295733f9c9f7de32e Partial-Bug: #1506875
		
			
				
	
	
		
			106 lines
		
	
	
		
			3.5 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			106 lines
		
	
	
		
			3.5 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
#
 | 
						|
#    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.
 | 
						|
 | 
						|
import json
 | 
						|
 | 
						|
import mock
 | 
						|
 | 
						|
from heat.common import template_format
 | 
						|
from heat.engine.clients.os import nova
 | 
						|
from heat.engine import scheduler
 | 
						|
from heat.tests import common
 | 
						|
from heat.tests import utils
 | 
						|
 | 
						|
sg_template = {
 | 
						|
    "heat_template_version": "2013-05-23",
 | 
						|
    "resources": {
 | 
						|
        "ServerGroup": {
 | 
						|
            "type": "OS::Nova::ServerGroup",
 | 
						|
            "properties": {
 | 
						|
                "name": "test",
 | 
						|
                "policies": ["anti-affinity"]
 | 
						|
            }
 | 
						|
        }
 | 
						|
    }
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
class FakeGroup(object):
 | 
						|
    def __init__(self, name):
 | 
						|
        self.id = name
 | 
						|
        self.name = name
 | 
						|
 | 
						|
 | 
						|
class NovaServerGroupTest(common.HeatTestCase):
 | 
						|
    def setUp(self):
 | 
						|
        super(NovaServerGroupTest, self).setUp()
 | 
						|
        self.patchobject(nova.NovaClientPlugin, 'has_extension',
 | 
						|
                         return_value=True)
 | 
						|
 | 
						|
    def _init_template(self, sg_template):
 | 
						|
        template = template_format.parse(json.dumps(sg_template))
 | 
						|
        self.stack = utils.parse_stack(template)
 | 
						|
        self.sg = self.stack['ServerGroup']
 | 
						|
        # create mock clients and objects
 | 
						|
        nova = mock.MagicMock()
 | 
						|
        self.sg.client = mock.MagicMock(return_value=nova)
 | 
						|
        self.sg_mgr = nova.server_groups
 | 
						|
 | 
						|
    def _create_sg(self, name):
 | 
						|
        if name:
 | 
						|
            sg = sg_template['resources']['ServerGroup']
 | 
						|
            sg['properties']['name'] = name
 | 
						|
            self._init_template(sg_template)
 | 
						|
            self.sg_mgr.create.return_value = FakeGroup(name)
 | 
						|
        else:
 | 
						|
            try:
 | 
						|
                sg = sg_template['resources']['ServerGroup']
 | 
						|
                del sg['properties']['name']
 | 
						|
            except Exception:
 | 
						|
                pass
 | 
						|
            self._init_template(sg_template)
 | 
						|
            name = 'test'
 | 
						|
            n = name
 | 
						|
 | 
						|
            def fake_create(name, policies):
 | 
						|
                self.assertTrue(len(name) > 1)
 | 
						|
                return FakeGroup(n)
 | 
						|
            self.sg_mgr.create = fake_create
 | 
						|
        scheduler.TaskRunner(self.sg.create)()
 | 
						|
        self.assertEqual((self.sg.CREATE, self.sg.COMPLETE),
 | 
						|
                         self.sg.state)
 | 
						|
        self.assertEqual(name, self.sg.resource_id)
 | 
						|
 | 
						|
    def test_sg_create(self):
 | 
						|
        self._create_sg('test')
 | 
						|
        expected_args = ()
 | 
						|
        expected_kwargs = {'name': 'test',
 | 
						|
                           'policies': ["anti-affinity"],
 | 
						|
                           }
 | 
						|
        self.sg_mgr.create.assert_called_once_with(*expected_args,
 | 
						|
                                                   **expected_kwargs)
 | 
						|
 | 
						|
    def test_sg_create_no_name(self):
 | 
						|
        self._create_sg(None)
 | 
						|
 | 
						|
    def test_sg_show_resource(self):
 | 
						|
        self._create_sg('test')
 | 
						|
        self.sg.client = mock.MagicMock()
 | 
						|
        s_groups = mock.MagicMock()
 | 
						|
        sg = mock.MagicMock()
 | 
						|
        sg.to_dict.return_value = {'server_gr': 'info'}
 | 
						|
        s_groups.get.return_value = sg
 | 
						|
        self.sg.client().server_groups = s_groups
 | 
						|
        self.assertEqual({'server_gr': 'info'}, self.sg.FnGetAtt('show'))
 | 
						|
        s_groups.get.assert_called_once_with('test')
 |