Merge "Neutron LBaaS: Member Behaviors"

This commit is contained in:
Jenkins 2014-08-27 15:14:51 +00:00 committed by Gerrit Code Review
commit 388dadbf36
2 changed files with 190 additions and 2 deletions

View File

@ -14,5 +14,99 @@ 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 MemberBehaviors(BaseLoadBalancersBehaviors):
OBJECT_MODEL = 'member'
def __init__(self, members_client, config):
super(MemberBehaviors, self).__init__(
lbaas_client_type=members_client, config=config)
def create_active_member(
self, subnet_id, tenant_id, address, protocol_port,
weight=None, admin_state_up=None):
"""
@summary: Creates a member and waits for it to become active
@param subnet_id: Subnet in which to access this member.
@type subnet_id: str
@param tenant_id: Tenant to which this member is owned.
@type tenant_id: str
@param address: IP address of pool member.
@type address: str
@param protocol_port: TCP or UDP port
@type protocol_port: int
@param weight: Positive integer indicating relative portion of
traffic from pool this member should receive (e.g., a member with
a weight of 10 will receive five times as much traffic as a
member with weight 2)
Default: 1
@type weight: int
@param admin_state_up: If set to False, member will be created in an
administratively down state
Default: True
@type admin_state_up: bool
@return: Response object containing response and the member
domain object
@rtype: requests.Response
"""
kwargs = {'subnet_id': subnet_id, 'tenant_id': tenant_id,
'address': address, 'protocol_port': protocol_port,
'weight': weight, 'admin_state_up': admin_state_up}
resp = self.create_active_lbaas_object(
lbaas_model_type=self.OBJECT_MODEL,
kwargs=kwargs)
return resp
def update_member_and_wait_for_active(self, weight=None,
admin_state_up=None):
"""
@summary: Updates a member and waits for it to become active
@param weight: Positive integer indicating relative portion of
traffic from pool this member should receive (e.g., a member with
a weight of 10 will receive five times as much traffic as a
member with weight 2)
Default: 1
@type weight: int
@param admin_state_up: If set to False, member will be created in an
administratively down state
Default: True
@type admin_state_up: bool
@return: Response object containing response and the member
domain object
@rtype: requests.Response
"""
kwargs = {'weight': weight, '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_member_status(self, member_id, desired_status,
interval_time=None, timeout=None):
"""
@summary: Waits for a member to reach a desired status
@param member_id: The id of the member
@type member_id: String
@param desired_status: The desired final status of the member
@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 member
domain object
@rtype: requests.Response
"""
kwargs = {'member_id': member_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,99 @@ 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.member.behaviors \
import MemberBehaviors
from cloudcafe.networking.lbaas.lbaas_api.member.client \
import MembersClient
class MemberBehaviorsFixture(unittest.TestCase):
"""
@summary: Health Monitor Behaviors Tests
"""
@classmethod
def setUpClass(cls):
super(MemberBehaviorsFixture, cls).setUpClass()
cls.auth_token = "fake_auth_token"
cls.url = "http://fake.url.endpoint"
cls.member_id = "12345"
cls.subnet_id = "SUBNET_ID"
cls.tenant_id = "453105b9-1754-413f-aab1-55f1af620750"
cls.address = "192.0.2.14"
cls.protocol_port = 8080
cls.weight = 7
cls.admin_state_up = True
cls.desired_status = "ACTIVE"
cls.interval_time = 20
cls.timeout = 120
cls.members_client = MembersClient(
url=cls.url,
auth_token=cls.auth_token,
serialize_format=cls.SERIALIZE,
deserialize_format=cls.DESERIALIZE)
cls.member_behaviors = MemberBehaviors(
members_client=cls.members_client, config=None)
class MemberBehaviorsTests(object):
@mock.patch.object(MemberBehaviors, 'create_active_member',
autospec=True)
def test_create_active_member(self, mock_request):
create_active_member_kwargs = (
{'subnet_id': self.subnet_id,
'tenant_id': self.tenant_id,
'address': self.address,
'protocol_port': self.protocol_port,
'weight': self.weight,
'admin_state_up': self.admin_state_up})
self.member_behaviors.create_active_member(
**create_active_member_kwargs)
mock_request.assert_called_once_with(
self.member_behaviors,
**create_active_member_kwargs)
@mock.patch.object(MemberBehaviors, 'update_member_and_wait_for_active',
autospec=True)
def test_update_member_and_wait_for_active(self, mock_request):
update_member_and_wait_for_active_kwargs = (
{'weight': self.weight,
'admin_state_up': self.admin_state_up})
self.member_behaviors.update_member_and_wait_for_active(
**update_member_and_wait_for_active_kwargs)
mock_request.assert_called_once_with(
self.member_behaviors,
**update_member_and_wait_for_active_kwargs)
@mock.patch.object(MemberBehaviors, 'wait_for_member_status',
autospec=True)
def test_wait_for_member_status(self, mock_request):
wait_for_member_status_kwargs = (
{'member_id': self.member_id,
'desired_status': self.desired_status,
'interval_time': self.interval_time,
'timeout': self.timeout})
self.member_behaviors.wait_for_member_status(
**wait_for_member_status_kwargs)
mock_request.assert_called_once_with(
self.member_behaviors,
**wait_for_member_status_kwargs)
class MembersClientTestsXML(MemberBehaviorsFixture,
MemberBehaviorsTests):
SERIALIZE = 'xml'
DESERIALIZE = 'xml'
class MembersClientTestsJSON(MemberBehaviorsFixture,
MemberBehaviorsTests):
SERIALIZE = 'json'
DESERIALIZE = 'json'