Merge "Neutron LBaaS: LoadBalancer Behaviors"

This commit is contained in:
Jenkins 2014-09-08 15:02:25 +00:00 committed by Gerrit Code Review
commit 44739fad44
2 changed files with 187 additions and 2 deletions

View File

@ -14,5 +14,93 @@ See the License for the specific language governing permissions and
limitations under the License.
"""
from cafe.engine.behaviors import BaseBehavior
from cloudcafe.networking.lbaas.common.behaviors import \
BaseLoadBalancersBehaviors
class LoadBalancerBehaviors(BaseLoadBalancersBehaviors):
OBJECT_MODEL = 'loadbalancer'
def __init__(self, load_balancers_client, config):
super(LoadBalancerBehaviors, self).__init__(
lbaas_client_type=load_balancers_client, config=config)
def create_active_load_balancer(
self, name, vip_subnet, tenant_id,
description=None, vip_address=None, admin_state_up=None):
"""
@summary: Creates a load balancer and waits for it to become active
@param name: Name of the load balancer.
@type name: str
@param vip_subnet: Subnet from which to allocate a virtual IP address.
@type vip_subnet: str
@param tenant_id: Tenant that will own this load balancer.
@type tenant_id: str
@param description: Detailed description of the load balancer.
@type description: str
@param vip_address: IP address to assign to VIP.
@type vip_address: str
@param admin_state_up: Defines whether an active load balancer is
functioning or not
@type admin_state_up: bool
@return: Response object containing response and the load balancer
domain object
@rtype: requests.Response
"""
kwargs = {'name': name, 'vip_subnet': vip_subnet,
'tenant_id': tenant_id, 'description': description,
'vip_address': vip_address, 'admin_state_up': admin_state_up}
resp = self.create_active_lbaas_object(
lbaas_model_type=self.OBJECT_MODEL,
kwargs=kwargs)
return resp
def update_load_balancer_and_wait_for_active(
self, name=None, description=None, admin_state_up=None):
"""
@summary: Updates a load balancer and waits for it to become active
@param name: Name of the load balancer.
@type name: str
@param description: Detailed description of the load balancer.
@type description: str
@param admin_state_up: Defines whether an active load balancer is
functioning or not
@type admin_state_up: bool
@return: Response object containing response and the load balancer
domain object
@rtype: requests.Response
"""
kwargs = {'name': name,
'description': description,
'admin_state_up': admin_state_up}
resp = self.update_lbaas_object_and_wait_for_active(
lbaas_model_type=self.OBJECT_MODEL,
kwargs=kwargs)
return resp
def wait_for_load_balancer_status(self, load_balancer_id, desired_status,
interval_time=None, timeout=None):
"""
@summary: Waits for a load balancer to reach a desired status
@param load_balancer_id: The id of the load balancer
@type load_balancer_id: String
@param desired_status: The desired final status of the load balancer
@type desired_status: String
@param interval_time: The amount of time in seconds to wait
between polling
@type interval_time: Integer
@param interval_time: The amount of time in seconds to wait
before aborting
@type interval_time: Integer
@return: Response object containing response and the load balancer
domain object
@rtype: requests.Response
"""
kwargs = {'load_balancer_id': load_balancer_id,
'desired_status': desired_status,
'interval_time': interval_time,
'timeout': timeout}
resp = self.wait_for_lbaas_object_status(
lbaas_model_type=self.OBJECT_MODEL, **kwargs)
return resp

View File

@ -14,5 +14,102 @@ See the License for the specific language governing permissions and
limitations under the License.
"""
from cafe.engine.behaviors import BaseBehavior
import mock
import unittest
from cloudcafe.networking.lbaas.lbaas_api.load_balancer.behaviors import \
LoadBalancerBehaviors
from cloudcafe.networking.lbaas.lbaas_api.load_balancer.client import \
LoadBalancersClient
class LoadBalancerBehaviorsFixture(unittest.TestCase):
"""
@summary: Load Balancer Behaviors Tests
"""
@classmethod
def setUpClass(cls):
super(LoadBalancerBehaviorsFixture, cls).setUpClass()
cls.auth_token = "fake_auth_token"
cls.url = "http://fake.url.endpoint"
cls.load_balancer_id = "12345"
cls.name = "a-new-loadbalancer"
cls.vip_subnet = "SUBNET_ID"
cls.tenant_id = "7725fe12-1c14-4f45-ba8e-44bf01763578"
cls.admin_state_up = True
cls.description = "A very simple example load balancer."
cls.vip_address = "1.2.3.4"
cls.desired_status = "ACTIVE"
cls.interval_time = 20
cls.timeout = 120
cls.load_balancers_client = LoadBalancersClient(
url=cls.url,
auth_token=cls.auth_token,
serialize_format=cls.SERIALIZE,
deserialize_format=cls.DESERIALIZE)
cls.load_balancer_behaviors = LoadBalancerBehaviors(
load_balancers_client=cls.load_balancers_client, config=None)
class LoadBalancerBehaviorsTests(object):
@mock.patch.object(LoadBalancerBehaviors, 'create_active_load_balancer',
autospec=True)
def test_create_active_load_balancer(self, mock_request):
create_active_load_balancer_kwargs = (
{'name': self.name,
'vip_subnet': self.vip_subnet,
'tenant_id': self.tenant_id,
'description': self.description,
'vip_address': self.vip_address,
'admin_state_up': self.admin_state_up})
self.load_balancer_behaviors.create_active_load_balancer(
**create_active_load_balancer_kwargs)
mock_request.assert_called_once_with(
self.load_balancer_behaviors,
**create_active_load_balancer_kwargs)
@mock.patch.object(LoadBalancerBehaviors,
'update_load_balancer_and_wait_for_active',
autospec=True)
def test_update_load_balancer_and_wait_for_active(self, mock_request):
update_load_balancer_and_wait_for_active_kwargs = (
{'name': self.name,
'description': self.description,
'admin_state_up': self.admin_state_up})
self.load_balancer_behaviors.\
update_load_balancer_and_wait_for_active(
**update_load_balancer_and_wait_for_active_kwargs)
mock_request.assert_called_once_with(
self.load_balancer_behaviors,
**update_load_balancer_and_wait_for_active_kwargs)
@mock.patch.object(LoadBalancerBehaviors, 'wait_for_load_balancer_status',
autospec=True)
def test_wait_for_load_balancer_status(self, mock_request):
wait_for_load_balancer_status_kwargs = (
{'load_balancer_id': self.load_balancer_id,
'desired_status': self.desired_status,
'interval_time': self.interval_time,
'timeout': self.timeout})
self.load_balancer_behaviors.wait_for_load_balancer_status(
**wait_for_load_balancer_status_kwargs)
mock_request.assert_called_once_with(
self.load_balancer_behaviors,
**wait_for_load_balancer_status_kwargs)
class LoadBalancersClientTestsXML(LoadBalancerBehaviorsFixture,
LoadBalancerBehaviorsTests):
SERIALIZE = 'xml'
DESERIALIZE = 'xml'
class LoadBalancersClientTestsJSON(LoadBalancerBehaviorsFixture,
LoadBalancerBehaviorsTests):
SERIALIZE = 'json'
DESERIALIZE = 'json'