diff --git a/heat_tempest_plugin/tests/functional/test_lbaasv2.py b/heat_tempest_plugin/tests/functional/test_lbaasv2.py deleted file mode 100644 index 3439179..0000000 --- a/heat_tempest_plugin/tests/functional/test_lbaasv2.py +++ /dev/null @@ -1,159 +0,0 @@ -# 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.tests.functional import functional_base - - -class LoadBalancerv2Test(functional_base.FunctionalTestsBase): - - create_template = ''' -heat_template_version: 2016-04-08 -parameters: - subnet: - type: string -resources: - loadbalancer: - type: OS::Neutron::LBaaS::LoadBalancer - properties: - description: aLoadBalancer - vip_subnet: { get_param: subnet } - listener: - type: OS::Neutron::LBaaS::Listener - properties: - description: aListener - loadbalancer: { get_resource: loadbalancer } - protocol: HTTP - protocol_port: 80 - connection_limit: 5555 - pool: - type: OS::Neutron::LBaaS::Pool - properties: - description: aPool - lb_algorithm: ROUND_ROBIN - protocol: HTTP - listener: { get_resource: listener } - poolmember: - type: OS::Neutron::LBaaS::PoolMember - properties: - address: 1.1.1.1 - pool: { get_resource: pool } - protocol_port: 1111 - subnet: { get_param: subnet } - weight: 255 - # pm2 - healthmonitor: - type: OS::Neutron::LBaaS::HealthMonitor - properties: - delay: 3 - type: HTTP - timeout: 3 - max_retries: 3 - pool: { get_resource: pool } -outputs: - loadbalancer: - value: { get_attr: [ loadbalancer, show ] } - pool: - value: { get_attr: [ pool, show ] } - poolmember: - value: { get_attr: [ poolmember, show ] } - listener: - value: { get_attr: [ listener, show ] } - healthmonitor: - value: { get_attr: [ healthmonitor, show ] } -''' - - add_member = ''' - poolmember2: - type: OS::Neutron::LBaaS::PoolMember - properties: - address: 2.2.2.2 - pool: { get_resource: pool } - protocol_port: 2222 - subnet: { get_param: subnet } - weight: 222 -''' - - def setUp(self): - super(LoadBalancerv2Test, self).setUp() - if not self.is_network_extension_supported('lbaasv2'): - self.skipTest('LBaasv2 extension not available, skipping') - - @decorators.idempotent_id('2f4a476c-cba7-448b-a7c1-85f7284f0293') - def test_create_update_loadbalancer(self): - parameters = { - 'subnet': self.conf.fixed_subnet_name, - } - stack_identifier = self.stack_create(template=self.create_template, - parameters=parameters) - stack = self.client.stacks.get(stack_identifier) - output = self._stack_output(stack, 'loadbalancer') - self.assertEqual('ONLINE', output['operating_status']) - - template = self.create_template.replace('ROUND_ROBIN', 'SOURCE_IP') - template = template.replace('3', '6') - template = template.replace('255', '256') - template = template.replace('5555', '7777') - template = template.replace('aLoadBalancer', 'updatedLoadBalancer') - template = template.replace('aPool', 'updatedPool') - template = template.replace('aListener', 'updatedListener') - self.update_stack(stack_identifier, template=template, - parameters=parameters) - stack = self.client.stacks.get(stack_identifier) - - output = self._stack_output(stack, 'loadbalancer') - self.assertEqual('ONLINE', output['operating_status']) - self.assertEqual('updatedLoadBalancer', output['description']) - output = self._stack_output(stack, 'pool') - self.assertEqual('SOURCE_IP', output['lb_algorithm']) - self.assertEqual('updatedPool', output['description']) - output = self._stack_output(stack, 'poolmember') - self.assertEqual(256, output['weight']) - output = self._stack_output(stack, 'healthmonitor') - self.assertEqual(6, output['delay']) - self.assertEqual(6, output['timeout']) - self.assertEqual(6, output['max_retries']) - output = self._stack_output(stack, 'listener') - self.assertEqual(7777, output['connection_limit']) - self.assertEqual('updatedListener', output['description']) - - @decorators.idempotent_id('104f59ae-a3c8-4c12-98e5-a7bc0007878d') - def test_add_delete_poolmember(self): - parameters = { - 'subnet': self.conf.fixed_subnet_name, - } - stack_identifier = self.stack_create(template=self.create_template, - parameters=parameters) - stack = self.client.stacks.get(stack_identifier) - output = self._stack_output(stack, 'loadbalancer') - self.assertEqual('ONLINE', output['operating_status']) - output = self._stack_output(stack, 'pool') - self.assertEqual(1, len(output['members'])) - # add pool member - template = self.create_template.replace('# pm2', self.add_member) - self.update_stack(stack_identifier, template=template, - parameters=parameters) - stack = self.client.stacks.get(stack_identifier) - output = self._stack_output(stack, 'loadbalancer') - self.assertEqual('ONLINE', output['operating_status']) - output = self._stack_output(stack, 'pool') - self.assertEqual(2, len(output['members'])) - # delete pool member - self.update_stack(stack_identifier, template=self.create_template, - parameters=parameters) - stack = self.client.stacks.get(stack_identifier) - output = self._stack_output(stack, 'loadbalancer') - self.assertEqual('ONLINE', output['operating_status']) - output = self._stack_output(stack, 'pool') - self.assertEqual(1, len(output['members'])) diff --git a/heat_tempest_plugin/tests/scenario/templates/app_server_lbv2_neutron.yaml b/heat_tempest_plugin/tests/scenario/templates/app_server_lbv2_neutron.yaml deleted file mode 100644 index ca4117b..0000000 --- a/heat_tempest_plugin/tests/scenario/templates/app_server_lbv2_neutron.yaml +++ /dev/null @@ -1,76 +0,0 @@ -heat_template_version: 2015-10-15 - -description: | - App server that is a member of Neutron Pool. - -parameters: - - image: - type: string - - flavor: - type: string - - net: - type: string - - sec_group: - type: string - - pool: - type: string - - app_port: - type: number - - timeout: - type: number - - subnet: - type: string - - wc_extra_args: - type: string - default: "" - -resources: - - config: - type: OS::Test::WebAppConfig - properties: - app_port: { get_param: app_port } - wc_curl_cli: - list_join: - - " " - - [ get_attr: [ handle, curl_cli ], get_param: wc_extra_args ] - - server: - type: OS::Nova::Server - properties: - image: { get_param: image } - flavor: { get_param: flavor } - networks: - - network: { get_param: net } - security_groups: - - { get_param: sec_group } - user_data_format: RAW - user_data: { get_resource: config } - - handle: - type: OS::Heat::WaitConditionHandle - - waiter: - type: OS::Heat::WaitCondition - depends_on: server - properties: - timeout: { get_param: timeout } - handle: { get_resource: handle } - - pool_member: - type: OS::Neutron::LBaaS::PoolMember - depends_on: waiter - properties: - address: { get_attr: [ server, networks, { get_param: net }, 0 ] } - pool: { get_param: pool } - protocol_port: { get_param: app_port } - subnet: { get_param: subnet } diff --git a/heat_tempest_plugin/tests/scenario/templates/lb_member.yaml b/heat_tempest_plugin/tests/scenario/templates/lb_member.yaml deleted file mode 100644 index a974968..0000000 --- a/heat_tempest_plugin/tests/scenario/templates/lb_member.yaml +++ /dev/null @@ -1,69 +0,0 @@ -heat_template_version: pike -parameters: - image: - type: string - flavor: - type: string - network: - type: string - sec_group: - type: string - pool: - type: string - app_port: - type: number - timeout: - type: number - default: 120 - subnet: - type: string - -resources: - server: - type: OS::Nova::Server - properties: - image: {get_param: image} - flavor: {get_param: flavor} - networks: - - network: {get_param: network} - security_groups: - - {get_param: sec_group} - user_data_format: RAW - user_data: - str_replace: - template: | - #! /bin/sh -v - Body=$(hostname) - Response="HTTP/1.1 200 OK\r\nContent-Length: ${#Body}\r\n\r\n$Body" - while true; do - wc_notify --data-binary '{"status": "SUCCESS"}' - if [ $? -eq 0 ]; then - break - fi - sleep 10 - done - while true ; do - echo -e $Response | nc -llp PORT - done - params: - PORT: {get_param: app_port} - wc_notify: { get_attr: [handle, curl_cli]} - - handle: - type: OS::Heat::WaitConditionHandle - - waiter: - type: OS::Heat::WaitCondition - depends_on: server - properties: - timeout: {get_param: timeout} - handle: {get_resource: handle} - - pool_member: - type: OS::Octavia::PoolMember - depends_on: waiter - properties: - address: {get_attr: [server, networks, {get_param: network}, 0]} - pool: {get_param: pool} - protocol_port: {get_param: app_port} - subnet: {get_param: subnet} diff --git a/heat_tempest_plugin/tests/scenario/templates/test_autoscaling_lb_neutron.yaml b/heat_tempest_plugin/tests/scenario/templates/test_autoscaling_lb_neutron.yaml deleted file mode 100644 index 033581a..0000000 --- a/heat_tempest_plugin/tests/scenario/templates/test_autoscaling_lb_neutron.yaml +++ /dev/null @@ -1,117 +0,0 @@ -heat_template_version: 2015-04-30 - -description: | - Template which tests Neutron load balancing requests to members of - Heat AutoScalingGroup. - Instances must be running some webserver on a given app_port - producing HTTP response that is different between servers - but stable over time for given server. - -parameters: - flavor: - type: string - image: - type: string - net: - type: string - subnet: - type: string - public_net: - type: string - app_port: - type: number - default: 8080 - lb_port: - type: number - default: 80 - timeout: - type: number - default: 600 - wc_extra_args: - type: string - default: "" - -resources: - - sec_group: - type: OS::Neutron::SecurityGroup - properties: - rules: - - remote_ip_prefix: 0.0.0.0/0 - protocol: tcp - port_range_min: { get_param: app_port } - port_range_max: { get_param: app_port } - - asg: - type: OS::Heat::AutoScalingGroup - properties: - desired_capacity: 1 - max_size: 2 - min_size: 1 - resource: - type: OS::Test::NeutronAppServer - properties: - image: { get_param: image } - flavor: { get_param: flavor } - net: { get_param: net} - sec_group: { get_resource: sec_group } - app_port: { get_param: app_port } - pool_id: { get_resource: pool } - timeout: { get_param: timeout } - wc_extra_args: { get_param: wc_extra_args } - - scale_up: - type: OS::Heat::ScalingPolicy - properties: - adjustment_type: change_in_capacity - auto_scaling_group_id: { get_resource: asg } - scaling_adjustment: 1 - - scale_down: - type: OS::Heat::ScalingPolicy - properties: - adjustment_type: change_in_capacity - auto_scaling_group_id: { get_resource: asg } - scaling_adjustment: -1 - - health_monitor: - type: OS::Neutron::HealthMonitor - properties: - delay: 3 - type: HTTP - timeout: 3 - max_retries: 3 - - pool: - type: OS::Neutron::Pool - properties: - lb_method: ROUND_ROBIN - protocol: HTTP - subnet: { get_param: subnet } - monitors: - - { get_resource: health_monitor } - vip: - protocol_port: { get_param: lb_port } - - floating_ip: - type: OS::Neutron::FloatingIP - properties: - floating_network: { get_param: public_net } - port_id: - { get_attr: [pool, vip, 'port_id'] } - - loadbalancer: - type: OS::Neutron::LoadBalancer - properties: - pool_id: { get_resource: pool } - protocol_port: { get_param: app_port } - -outputs: - lburl: - description: URL of the loadbalanced app - value: - str_replace: - template: http://IP_ADDRESS:PORT - params: - IP_ADDRESS: { get_attr: [ floating_ip, floating_ip_address ] } - PORT: { get_param: lb_port } diff --git a/heat_tempest_plugin/tests/scenario/templates/test_autoscaling_lbv2_neutron.yaml b/heat_tempest_plugin/tests/scenario/templates/test_autoscaling_lbv2_neutron.yaml deleted file mode 100644 index a26f7f7..0000000 --- a/heat_tempest_plugin/tests/scenario/templates/test_autoscaling_lbv2_neutron.yaml +++ /dev/null @@ -1,120 +0,0 @@ -heat_template_version: 2015-04-30 - -description: | - Template which tests Neutron load balancing requests to members of - Heat AutoScalingGroup. This uses LBaas V2. - Instances must be running some webserver on a given app_port - producing HTTP response that is different between servers - but stable over time for given server. - -parameters: - flavor: - type: string - image: - type: string - net: - type: string - subnet: - type: string - public_net: - type: string - app_port: - type: number - default: 8080 - lb_port: - type: number - default: 80 - timeout: - type: number - default: 600 - wc_extra_args: - type: string - default: "" - -resources: - - sec_group: - type: OS::Neutron::SecurityGroup - properties: - rules: - - remote_ip_prefix: 0.0.0.0/0 - protocol: tcp - port_range_min: { get_param: app_port } - port_range_max: { get_param: app_port } - - asg: - type: OS::Heat::AutoScalingGroup - properties: - desired_capacity: 1 - max_size: 2 - min_size: 1 - resource: - type: OS::Test::NeutronAppServer - properties: - image: { get_param: image } - flavor: { get_param: flavor } - net: { get_param: net} - sec_group: { get_resource: sec_group } - app_port: { get_param: app_port } - pool: { get_resource: pool } - subnet: { get_param: subnet } - timeout: { get_param: timeout } - wc_extra_args: { get_param: wc_extra_args } - - scale_up: - type: OS::Heat::ScalingPolicy - properties: - adjustment_type: change_in_capacity - auto_scaling_group_id: { get_resource: asg } - scaling_adjustment: 1 - - scale_down: - type: OS::Heat::ScalingPolicy - properties: - adjustment_type: change_in_capacity - auto_scaling_group_id: { get_resource: asg } - scaling_adjustment: -1 - - health_monitor: - type: OS::Neutron::LBaaS::HealthMonitor - properties: - delay: 3 - type: HTTP - timeout: 3 - max_retries: 3 - pool: { get_resource: pool } - - pool: - type: OS::Neutron::LBaaS::Pool - properties: - lb_algorithm: ROUND_ROBIN - protocol: HTTP - listener: { get_resource: listener } - - listener: - type: OS::Neutron::LBaaS::Listener - properties: - loadbalancer: { get_resource: loadbalancer } - protocol: HTTP - protocol_port: { get_param: lb_port } - - loadbalancer: - type: OS::Neutron::LBaaS::LoadBalancer - properties: - vip_subnet: { get_param: subnet } - - floating_ip: - type: OS::Neutron::FloatingIP - properties: - floating_network: { get_param: public_net } - port_id: { get_attr: [loadbalancer, vip_port_id] } - -outputs: - lburl: - description: URL of the loadbalanced app - value: - str_replace: - template: http://IP_ADDRESS:PORT - params: - IP_ADDRESS: { get_attr: [ floating_ip, floating_ip_address ] } - PORT: { get_param: lb_port } diff --git a/heat_tempest_plugin/tests/scenario/test_autoscaling_lb.py b/heat_tempest_plugin/tests/scenario/test_autoscaling_lb.py deleted file mode 100644 index 3323bc5..0000000 --- a/heat_tempest_plugin/tests/scenario/test_autoscaling_lb.py +++ /dev/null @@ -1,114 +0,0 @@ -# -# 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 time - -import requests -from tempest.lib import decorators - -from heat_tempest_plugin.common import test -from heat_tempest_plugin.tests.scenario import scenario_base - - -class AutoscalingLoadBalancerTest(scenario_base.ScenarioTestsBase): - """The class is responsible for testing ASG + LBv1 scenario. - - The very common use case tested is an autoscaling group - of some web application servers behind a loadbalancer. - """ - - def setUp(self): - super(AutoscalingLoadBalancerTest, self).setUp() - self.template_name = 'test_autoscaling_lb_neutron.yaml' - self.app_server_template_name = 'app_server_neutron.yaml' - self.webapp_template_name = 'netcat-webapp.yaml' - if not self.is_network_extension_supported('lbaas'): - self.skipTest('LBaas v1 extension not available, skipping') - - def check_num_responses(self, url, expected_num, retries=10): - resp = set() - for count in range(retries): - time.sleep(1) - try: - r = requests.get(url, verify=self.verify_cert) - except requests.exceptions.ConnectionError: - # The LB may not be up yet, let's retry - continue - # skip unsuccessful requests - if r.status_code == 200: - resp.add(r.text) - self.assertEqual(expected_num, len(resp)) - - @decorators.idempotent_id('48ddbc45-cef6-4640-acd6-7efc281833b9') - def test_autoscaling_loadbalancer_neutron(self): - """Check work of AutoScaing and Neutron LBaaS v1 resource in Heat. - - The scenario is the following: - 1. Launch a stack with a load balancer and autoscaling group - of one server, wait until stack create is complete. - 2. Check that there is only one distinctive response from - loadbalanced IP. - 3. Signal the scale_up policy, wait until all resources in - autoscaling group are complete. - 4. Check that now there are two distinctive responses from - loadbalanced IP. - """ - - parameters = { - 'flavor': self.conf.minimal_instance_type, - 'image': self.conf.minimal_image_ref, - 'net': self.conf.fixed_network_name, - 'subnet': self.conf.fixed_subnet_name, - 'public_net': self.conf.floating_network_name, - 'app_port': 8080, - 'lb_port': 80, - 'timeout': 600 - } - if self.conf.vm_to_heat_api_insecure: - parameters['wc_extra_args'] = '--insecure' - - app_server_template = self._load_template( - __file__, self.app_server_template_name, self.sub_dir - ) - webapp_template = self._load_template( - __file__, self.webapp_template_name, self.sub_dir - ) - files = {'appserver.yaml': app_server_template, - 'webapp.yaml': webapp_template} - env = {'resource_registry': - {'OS::Test::NeutronAppServer': 'appserver.yaml', - 'OS::Test::WebAppConfig': 'webapp.yaml'}} - # Launch stack - sid = self.launch_stack( - template_name=self.template_name, - parameters=parameters, - files=files, - environment=env - ) - stack = self.client.stacks.get(sid) - lb_url = self._stack_output(stack, 'lburl') - # Check number of distinctive responces, must be 1 - self.check_num_responses(lb_url, 1) - - # Signal the scaling hook - self.client.resources.signal(sid, 'scale_up') - - # Wait for AutoScalingGroup update to finish - asg = self.client.resources.get(sid, 'asg') - test.call_until_true(self.conf.build_timeout, - self.conf.build_interval, - self.check_autoscale_complete, - asg.physical_resource_id, 2, sid, 'asg') - - # Check number of distinctive responses, must now be 2 - self.check_num_responses(lb_url, 2) diff --git a/heat_tempest_plugin/tests/scenario/test_autoscaling_lbv2.py b/heat_tempest_plugin/tests/scenario/test_autoscaling_lbv2.py deleted file mode 100644 index eee1fbc..0000000 --- a/heat_tempest_plugin/tests/scenario/test_autoscaling_lbv2.py +++ /dev/null @@ -1,114 +0,0 @@ -# -# 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 time - -import requests -from tempest.lib import decorators - -from heat_tempest_plugin.common import test -from heat_tempest_plugin.tests.scenario import scenario_base - - -class AutoscalingLoadBalancerv2Test(scenario_base.ScenarioTestsBase): - """The class is responsible for testing ASG + LBv2 scenario. - - The very common use case tested is an autoscaling group - of some web application servers behind a loadbalancer. - """ - - def setUp(self): - super(AutoscalingLoadBalancerv2Test, self).setUp() - self.template_name = 'test_autoscaling_lbv2_neutron.yaml' - self.app_server_template_name = 'app_server_lbv2_neutron.yaml' - self.webapp_template_name = 'netcat-webapp.yaml' - if not self.is_network_extension_supported('lbaasv2'): - self.skipTest('LBaasv2 extension not available, skipping') - - def check_num_responses(self, url, expected_num, retries=20): - resp = set() - for count in range(retries): - time.sleep(2) - try: - r = requests.get(url, verify=self.verify_cert) - except requests.exceptions.ConnectionError: - # The LB may not be up yet, let's retry - continue - # skip unsuccessful requests - if r.status_code == 200: - resp.add(r.text) - if len(resp) == expected_num: - break - self.assertEqual(expected_num, len(resp)) - - @decorators.idempotent_id('89459930-aa61-4557-989b-3429d3b3b612') - def test_autoscaling_loadbalancer_neutron(self): - """Check work of AutoScaing and Neutron LBaaS v2 resource in Heat. - - The scenario is the following: - 1. Launch a stack with a load balancer and autoscaling group - of one server, wait until stack create is complete. - 2. Check that there is only one distinctive response from - loadbalanced IP. - 3. Signal the scale_up policy, wait until all resources in - autoscaling group are complete. - 4. Check that now there are two distinctive responses from - loadbalanced IP. - """ - - parameters = { - 'flavor': self.conf.minimal_instance_type, - 'image': self.conf.minimal_image_ref, - 'net': self.conf.fixed_network_name, - 'subnet': self.conf.fixed_subnet_name, - 'public_net': self.conf.floating_network_name - } - if self.conf.vm_to_heat_api_insecure: - parameters['wc_extra_args'] = '--insecure' - - app_server_template = self._load_template( - __file__, self.app_server_template_name, self.sub_dir - ) - webapp_template = self._load_template( - __file__, self.webapp_template_name, self.sub_dir - ) - files = {'appserver.yaml': app_server_template, - 'webapp.yaml': webapp_template} - env = {'resource_registry': - {'OS::Test::NeutronAppServer': 'appserver.yaml', - 'OS::Test::WebAppConfig': 'webapp.yaml'}} - - # Launch stack - sid = self.launch_stack( - template_name=self.template_name, - parameters=parameters, - files=files, - environment=env - ) - stack = self.client.stacks.get(sid) - lb_url = self._stack_output(stack, 'lburl') - # Check number of distinctive responces, must be 1 - self.check_num_responses(lb_url, 1) - - # Signal the scaling hook - self.client.resources.signal(sid, 'scale_up') - - # Wait for AutoScalingGroup update to finish - asg = self.client.resources.get(sid, 'asg') - test.call_until_true(self.conf.build_timeout, - self.conf.build_interval, - self.check_autoscale_complete, - asg.physical_resource_id, 2, sid, 'asg') - - # Check number of distinctive responses, must now be 2 - self.check_num_responses(lb_url, 2)