heat-tempest-plugin/heat_tempest_plugin/tests/scenario/test_octavia_lbaas.py

96 lines
4.1 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.
from tempest.lib import decorators
from heat_tempest_plugin.common import test
from heat_tempest_plugin.tests.scenario import scenario_base
@test.requires_resource_type('OS::Octavia::LoadBalancer')
class LoadBalancerTest(scenario_base.ScenarioTestsBase):
def setUp(self):
super(LoadBalancerTest, self).setUp()
self.template_name = 'octavia_lbaas.yaml'
self.member_template_name = 'lb_member.yaml'
self.sub_dir = 'templates'
def _create_stack(self):
self.parameters = {
'flavor': self.conf.minimal_instance_type,
'image': self.conf.minimal_image_ref,
'network': self.conf.fixed_network_name,
'subnet': self.conf.fixed_subnet_name
}
member_template = self._load_template(
__file__, self.member_template_name, self.sub_dir
)
self.files = {'lb_member.yaml': member_template}
self.env = {'resource_registry': {
'OS::Test::PoolMember': self.member_template_name}}
return self.launch_stack(self.template_name,
parameters=self.parameters,
files=self.files,
environment=self.env)
@decorators.idempotent_id('5d2c4452-4433-4438-899c-7711c01d3c50')
def test_create_update_loadbalancer(self):
statuses = ['PENDING_UPDATE', 'ACTIVE']
stack_identifier = self._create_stack()
stack = self.client.stacks.get(stack_identifier)
output = self._stack_output(stack, 'loadbalancer')
self.assertIn(output['provisioning_status'], statuses)
self.parameters['lb_algorithm'] = 'SOURCE_IP'
self.update_stack(stack_identifier,
parameters=self.parameters,
existing=True)
stack = self.client.stacks.get(stack_identifier)
output = self._stack_output(stack, 'loadbalancer')
self.assertIn(output['provisioning_status'], statuses)
output = self._stack_output(stack, 'pool')
self.assertEqual('SOURCE_IP', output['lb_algorithm'])
@decorators.idempotent_id('970e91af-1be8-4990-837b-66f9b5aff2b9')
def test_add_delete_poolmember(self):
statuses = ['PENDING_UPDATE', 'ACTIVE']
stack_identifier = self._create_stack()
stack = self.client.stacks.get(stack_identifier)
output = self._stack_output(stack, 'loadbalancer')
self.assertIn(output['provisioning_status'], statuses)
output = self._stack_output(stack, 'pool')
self.assertEqual(1, len(output['members']))
# add pool member
self.parameters['member_count'] = 2
self.update_stack(stack_identifier,
parameters=self.parameters,
existing=True)
stack = self.client.stacks.get(stack_identifier)
output = self._stack_output(stack, 'loadbalancer')
self.assertIn(output['provisioning_status'], statuses)
output = self._stack_output(stack, 'pool')
self.assertEqual(2, len(output['members']))
# delete pool member
self.parameters['member_count'] = 1
self.update_stack(stack_identifier,
parameters=self.parameters,
existing=True)
stack = self.client.stacks.get(stack_identifier)
output = self._stack_output(stack, 'loadbalancer')
self.assertIn(output['provisioning_status'], statuses)
output = self._stack_output(stack, 'pool')
self.assertEqual(1, len(output['members']))