Add tags API tests
This patch adds some API tests in the create, list and update methods of the Octavia objects that support Tags. Tags are supported on Octavia API version 2.5 or later. Change-Id: Ib14852d57535508fecee2705e704954cfd078474
This commit is contained in:
parent
beb1cbaebb
commit
540bb3b4d0
@ -56,6 +56,7 @@ CONNECTION_LIMIT = 'connection_limit'
|
||||
INSERT_HEADERS = 'insert_headers'
|
||||
X_FORWARDED_FOR = 'X-Forwarded-For'
|
||||
X_FORWARDED_PORT = 'X-Forwarded-Port'
|
||||
TAGS = 'tags'
|
||||
TIMEOUT_CLIENT_DATA = 'timeout_client_data'
|
||||
TIMEOUT_MEMBER_CONNECT = 'timeout_member_connect'
|
||||
TIMEOUT_MEMBER_DATA = 'timeout_member_data'
|
||||
|
@ -27,7 +27,7 @@ class HealthMonitorClient(base_client.BaseLBaaSClient):
|
||||
resource_name = 'healthmonitor'
|
||||
|
||||
def create_healthmonitor(self, pool_id, type, delay, timeout, max_retries,
|
||||
max_retries_down=Unset, name=Unset,
|
||||
max_retries_down=Unset, name=Unset, tags=Unset,
|
||||
http_method=Unset, url_path=Unset,
|
||||
expected_codes=Unset, admin_state_up=Unset,
|
||||
return_object_only=True):
|
||||
@ -44,6 +44,7 @@ class HealthMonitorClient(base_client.BaseLBaaSClient):
|
||||
changing the operating status of the member to
|
||||
ERROR.
|
||||
:param name: Human-readable name of the resource.
|
||||
:param tags: Human-readable tags of the resource.
|
||||
:param http_method: The HTTP method that the health monitor uses for
|
||||
requests.
|
||||
:param url_path: The HTTP URL path of the request sent by the monitor
|
||||
@ -167,7 +168,7 @@ class HealthMonitorClient(base_client.BaseLBaaSClient):
|
||||
|
||||
def update_healthmonitor(self, healthmonitor_id, delay=Unset,
|
||||
timeout=Unset, max_retries=Unset,
|
||||
max_retries_down=Unset, name=Unset,
|
||||
max_retries_down=Unset, name=Unset, tags=Unset,
|
||||
http_method=Unset, url_path=Unset,
|
||||
expected_codes=Unset, admin_state_up=Unset,
|
||||
return_object_only=True):
|
||||
@ -183,6 +184,7 @@ class HealthMonitorClient(base_client.BaseLBaaSClient):
|
||||
changing the operating status of the member to
|
||||
ERROR.
|
||||
:param name: Human-readable name of the resource.
|
||||
:param tags: Human-readable tags of the resource.
|
||||
:param http_method: The HTTP method that the health monitor uses for
|
||||
requests.
|
||||
:param url_path: The HTTP URL path of the request sent by the monitor
|
||||
|
@ -27,7 +27,7 @@ class L7PolicyClient(base_client.BaseLBaaSClient):
|
||||
resource_name = 'l7policy'
|
||||
|
||||
def create_l7policy(self, listener_id, action, name=Unset,
|
||||
description=Unset, admin_state_up=Unset,
|
||||
description=Unset, tags=Unset, admin_state_up=Unset,
|
||||
position=Unset, redirect_pool_id=Unset,
|
||||
redirect_url=Unset, return_object_only=True):
|
||||
"""Create a l7policy.
|
||||
@ -36,6 +36,7 @@ class L7PolicyClient(base_client.BaseLBaaSClient):
|
||||
:param action: The l7policy action.
|
||||
:param name: Human-readable name of the resource.
|
||||
:param description: A human-readable description for the resource.
|
||||
:param tags: A human-readable tags of the resource.
|
||||
:param admin_state_up: The administrative state of the resource, which
|
||||
is up (true) or down (false).
|
||||
:param position: The position of this policy on the listener.
|
||||
@ -157,7 +158,7 @@ class L7PolicyClient(base_client.BaseLBaaSClient):
|
||||
return_object_only=return_object_only)
|
||||
|
||||
def update_l7policy(self, l7policy_id, action=Unset, name=Unset,
|
||||
description=Unset, admin_state_up=Unset,
|
||||
description=Unset, tags=Unset, admin_state_up=Unset,
|
||||
position=Unset, redirect_pool_id=Unset,
|
||||
redirect_url=Unset, return_object_only=True):
|
||||
"""Update a l7policy.
|
||||
@ -166,6 +167,7 @@ class L7PolicyClient(base_client.BaseLBaaSClient):
|
||||
:param action: The l7policy action.
|
||||
:param name: Human-readable name of the resource.
|
||||
:param description: A human-readable description for the resource.
|
||||
:param tags: A human-readable tags of the resource.
|
||||
:param admin_state_up: The administrative state of the resource, which
|
||||
is up (true) or down (false).
|
||||
:param position: The position of this policy on the listener.
|
||||
|
@ -38,7 +38,7 @@ class L7RuleClient(base_client.BaseLBaaSClient):
|
||||
object=self.list_root_tag
|
||||
)
|
||||
|
||||
def create_l7rule(self, l7policy_id, type, value, compare_type,
|
||||
def create_l7rule(self, l7policy_id, type, value, compare_type, tags=Unset,
|
||||
admin_state_up=Unset, key=Unset, invert=Unset,
|
||||
return_object_only=True):
|
||||
"""Create a l7rule.
|
||||
@ -47,6 +47,7 @@ class L7RuleClient(base_client.BaseLBaaSClient):
|
||||
:param type: The L7 rule type.
|
||||
:param value: The value to use for the comparison.
|
||||
:param compare_type: The comparison type for the L7 rule.
|
||||
:param tags: The tags of the L7 rule.
|
||||
:param admin_state_up: The administrative state of the resource, which
|
||||
is up (true) or down (false).
|
||||
:param key: The key to use for the comparison.
|
||||
@ -171,8 +172,8 @@ class L7RuleClient(base_client.BaseLBaaSClient):
|
||||
return_object_only=return_object_only)
|
||||
|
||||
def update_l7rule(self, l7rule_id, l7policy_id, type=Unset, value=Unset,
|
||||
compare_type=Unset, admin_state_up=Unset, key=Unset,
|
||||
invert=Unset, return_object_only=True):
|
||||
compare_type=Unset, tags=Unset, admin_state_up=Unset,
|
||||
key=Unset, invert=Unset, return_object_only=True):
|
||||
"""Update a l7rule.
|
||||
|
||||
:param l7rule_id: The l7rule ID to update.
|
||||
@ -180,6 +181,7 @@ class L7RuleClient(base_client.BaseLBaaSClient):
|
||||
:param type: The L7 rule type.
|
||||
:param value: The value to use for the comparison.
|
||||
:param compare_type: The comparison type for the L7 rule.
|
||||
:param tags: The tags of the L7 rule.
|
||||
:param admin_state_up: The administrative state of the resource, which
|
||||
is up (true) or down (false).
|
||||
:param key: The key to use for the comparison.
|
||||
|
@ -29,8 +29,9 @@ class ListenerClient(base_client.BaseLBaaSClient):
|
||||
list_root_tag = 'listeners'
|
||||
|
||||
def create_listener(self, protocol, protocol_port, loadbalancer_id,
|
||||
name=Unset, description=Unset, admin_state_up=Unset,
|
||||
connection_limit=Unset, timeout_client_data=Unset,
|
||||
name=Unset, description=Unset, tags=Unset,
|
||||
admin_state_up=Unset, connection_limit=Unset,
|
||||
timeout_client_data=Unset,
|
||||
timeout_member_connect=Unset,
|
||||
timeout_member_data=Unset, timeout_tcp_inspect=Unset,
|
||||
insert_headers=Unset, default_pool_id=Unset,
|
||||
@ -46,6 +47,7 @@ class ListenerClient(base_client.BaseLBaaSClient):
|
||||
:param loadbalancer_id: The ID of the load balancer.
|
||||
:param name: Human-readable name of the resource.
|
||||
:param description: A human-readable description for the resource.
|
||||
:param tags: A human-readable tags of the resource.
|
||||
:param admin_state_up: The administrative state of the resource, which
|
||||
is up (true) or down (false).
|
||||
:param connection_limit: The maximum number of connections permitted
|
||||
@ -198,8 +200,8 @@ class ListenerClient(base_client.BaseLBaaSClient):
|
||||
return_object_only=return_object_only)
|
||||
|
||||
def update_listener(self, listener_id, name=Unset, description=Unset,
|
||||
admin_state_up=Unset, connection_limit=Unset,
|
||||
timeout_client_data=Unset,
|
||||
tags=Unset, admin_state_up=Unset,
|
||||
connection_limit=Unset, timeout_client_data=Unset,
|
||||
timeout_member_connect=Unset,
|
||||
timeout_member_data=Unset, timeout_tcp_inspect=Unset,
|
||||
insert_headers=Unset, default_pool_id=Unset,
|
||||
@ -213,6 +215,7 @@ class ListenerClient(base_client.BaseLBaaSClient):
|
||||
:param listener_id: The listener ID to update.
|
||||
:param name: Human-readable name of the resource.
|
||||
:param description: A human-readable description for the resource.
|
||||
:param tags: A human-readable tags of the resource.
|
||||
:param admin_state_up: The administrative state of the resource, which
|
||||
is up (true) or down (false).
|
||||
:param connection_limit: The maximum number of connections permitted
|
||||
|
@ -39,7 +39,8 @@ class LoadbalancerClient(base_client.BaseLBaaSClient):
|
||||
listeners=Unset, project_id=Unset, provider=Unset,
|
||||
vip_address=Unset, vip_network_id=Unset,
|
||||
vip_port_id=Unset, vip_qos_policy_id=Unset,
|
||||
vip_subnet_id=Unset, return_object_only=True):
|
||||
vip_subnet_id=Unset, return_object_only=True,
|
||||
tags=Unset):
|
||||
"""Create a loadbalancer.
|
||||
|
||||
:param name: Human-readable name of the resource.
|
||||
@ -56,6 +57,7 @@ class LoadbalancerClient(base_client.BaseLBaaSClient):
|
||||
:param vip_qos_policy_id: The ID of the QoS Policy which will apply to
|
||||
the Virtual IP (VIP).
|
||||
:param vip_subnet_id: The ID of the subnet for the Virtual IP (VIP).
|
||||
:param tags: A human-readable tags of the resource.
|
||||
:param return_object_only: If True, the response returns the object
|
||||
inside the root tag. False returns the full
|
||||
response from the API.
|
||||
@ -170,13 +172,15 @@ class LoadbalancerClient(base_client.BaseLBaaSClient):
|
||||
return_object_only=return_object_only)
|
||||
|
||||
def update_loadbalancer(self, lb_id, name=Unset, description=Unset,
|
||||
admin_state_up=Unset, vip_qos_policy_id=Unset,
|
||||
tags=Unset, admin_state_up=Unset,
|
||||
vip_qos_policy_id=Unset,
|
||||
return_object_only=True):
|
||||
"""Update a loadbalancer.
|
||||
|
||||
:param lb_id: The loadbalancer ID to update.
|
||||
:param name: Human-readable name of the resource.
|
||||
:param description: A human-readable description for the resource.
|
||||
:param tags: A human-readable tags of the resource.
|
||||
:param admin_state_up: The administrative state of the resource, which
|
||||
is up (true) or down (false).
|
||||
:param vip_qos_policy_id: The ID of the QoS Policy which will apply to
|
||||
|
@ -40,7 +40,8 @@ class MemberClient(base_client.BaseLBaaSClient):
|
||||
)
|
||||
|
||||
def create_member(self, pool_id, address, protocol_port,
|
||||
name=Unset, admin_state_up=Unset, weight=Unset,
|
||||
name=Unset, tags=Unset, admin_state_up=Unset,
|
||||
weight=Unset,
|
||||
backup=Unset, subnet_id=Unset, monitor_address=Unset,
|
||||
monitor_port=Unset, return_object_only=True):
|
||||
"""Create a member.
|
||||
@ -49,12 +50,15 @@ class MemberClient(base_client.BaseLBaaSClient):
|
||||
:param address: The IP address of the resource.
|
||||
:param protocol_port: The protocol port number for the resource.
|
||||
:param name: Human-readable name of the resource.
|
||||
:param tags: Human-readable tags of the resource.
|
||||
:param admin_state_up: The administrative state of the resource, which
|
||||
is up (true) or down (false).
|
||||
:param weight: The weight of a member determines the portion of
|
||||
requests or connections it services compared to the
|
||||
other members of the pool.
|
||||
:param backup: Is the member a backup?
|
||||
:param subnet_id: The subnet ID which the member service
|
||||
is accessible from
|
||||
:param monitor_address: An alternate IP address used for health
|
||||
monitoring a backend member.
|
||||
:param monitor_port: An alternate protocol port used for health
|
||||
@ -178,7 +182,7 @@ class MemberClient(base_client.BaseLBaaSClient):
|
||||
query_params=query_params,
|
||||
return_object_only=return_object_only)
|
||||
|
||||
def update_member(self, member_id, pool_id, name=Unset,
|
||||
def update_member(self, member_id, pool_id, name=Unset, tags=Unset,
|
||||
admin_state_up=Unset, weight=Unset, backup=Unset,
|
||||
monitor_address=Unset, monitor_port=Unset,
|
||||
return_object_only=True):
|
||||
@ -187,6 +191,7 @@ class MemberClient(base_client.BaseLBaaSClient):
|
||||
:param member_id: The member ID to update.
|
||||
:param pool_id: The ID of the pool where the member lives.
|
||||
:param name: Human-readable name of the resource.
|
||||
:param tags: Human-readable tags of the resource.
|
||||
:param admin_state_up: The administrative state of the resource, which
|
||||
is up (true) or down (false).
|
||||
:param weight: The weight of a member determines the portion of
|
||||
|
@ -28,6 +28,7 @@ class PoolClient(base_client.BaseLBaaSClient):
|
||||
|
||||
def create_pool(self, protocol, lb_algorithm, loadbalancer_id=Unset,
|
||||
listener_id=Unset, name=Unset, description=Unset,
|
||||
tags=Unset,
|
||||
admin_state_up=Unset, session_persistence=Unset,
|
||||
return_object_only=True):
|
||||
"""Create a pool.
|
||||
@ -38,6 +39,7 @@ class PoolClient(base_client.BaseLBaaSClient):
|
||||
:param listener_id: The ID of the listener for the pool.
|
||||
:param name: Human-readable name of the resource.
|
||||
:param description: A human-readable description for the resource.
|
||||
:param tags: A human-readable tags of the resource.
|
||||
:param admin_state_up: The administrative state of the resource, which
|
||||
is up (true) or down (false).
|
||||
:param session_persistence: A JSON object specifying the session
|
||||
@ -156,7 +158,7 @@ class PoolClient(base_client.BaseLBaaSClient):
|
||||
return_object_only=return_object_only)
|
||||
|
||||
def update_pool(self, pool_id, lb_algorithm=Unset, name=Unset,
|
||||
description=Unset, admin_state_up=Unset,
|
||||
description=Unset, tags=Unset, admin_state_up=Unset,
|
||||
session_persistence=Unset, return_object_only=True):
|
||||
"""Update a pool.
|
||||
|
||||
@ -164,6 +166,7 @@ class PoolClient(base_client.BaseLBaaSClient):
|
||||
:param lb_algorithm: The load balancing algorithm for the pool.
|
||||
:param name: Human-readable name of the resource.
|
||||
:param description: A human-readable description for the resource.
|
||||
:param tags: A human-readable tags of the resource.
|
||||
:param admin_state_up: The administrative state of the resource, which
|
||||
is up (true) or down (false).
|
||||
:param session_persistence: A JSON object specifying the session
|
||||
|
@ -118,6 +118,15 @@ class AvailabilityZoneAPITest(test_base.LoadBalancerBaseTest):
|
||||
self.assertEqual(self.availability_zone_profile_id,
|
||||
availability_zone[const.AVAILABILITY_ZONE_PROFILE_ID])
|
||||
|
||||
# Test that availability_zones do not support tags
|
||||
availability_zone_tags = ["Hello", "World"]
|
||||
tags_availability_zone_kwargs = availability_zone_kwargs.copy()
|
||||
tags_availability_zone_kwargs[const.TAGS] = availability_zone_tags
|
||||
self.assertRaises(
|
||||
TypeError,
|
||||
self.lb_admin_availability_zone_client.create_availability_zone,
|
||||
**tags_availability_zone_kwargs)
|
||||
|
||||
@decorators.idempotent_id('bba84c0c-2832-4c4c-90ff-d28acfe4ae36')
|
||||
def test_availability_zone_list(self):
|
||||
"""Tests availability zone list API and field filtering.
|
||||
|
@ -94,6 +94,17 @@ class AvailabilityZoneProfileAPITest(test_base.LoadBalancerBaseTest):
|
||||
availability_zone_data_json,
|
||||
availability_zone_profile[const.AVAILABILITY_ZONE_DATA])
|
||||
|
||||
# Testing that availability_zone_profiles do not support tags
|
||||
availability_zone_profile_tags = ["Hello", "World"]
|
||||
tags_availability_zone_profile_kwargs = (
|
||||
availability_zone_profile_kwargs.copy())
|
||||
tags_availability_zone_profile_kwargs[const.TAGS] = (
|
||||
availability_zone_profile_tags)
|
||||
az_profile_client = self.lb_admin_availability_zone_profile_client
|
||||
self.assertRaises(TypeError,
|
||||
az_profile_client.create_availability_zone_profile,
|
||||
**tags_availability_zone_profile_kwargs)
|
||||
|
||||
@decorators.idempotent_id('ef7d1c45-e312-46ce-8dcb-f2fe26295658')
|
||||
def test_availability_zone_profile_list(self):
|
||||
"""Tests availability zone profile list API and field filtering.
|
||||
|
@ -105,6 +105,14 @@ class FlavorAPITest(test_base.LoadBalancerBaseTest):
|
||||
self.assertEqual(self.flavor_profile_id,
|
||||
flavor[const.FLAVOR_PROFILE_ID])
|
||||
|
||||
# Test that flavors do not support tags
|
||||
flavor_tags = ["Hello", "World"]
|
||||
tags_flavor_kwargs = flavor_kwargs.copy()
|
||||
tags_flavor_kwargs[const.TAGS] = flavor_tags
|
||||
self.assertRaises(TypeError,
|
||||
self.lb_admin_flavor_client.create_flavor,
|
||||
**tags_flavor_kwargs)
|
||||
|
||||
@decorators.idempotent_id('3ef040ee-fe7e-457b-a56f-8b152f7afa3b')
|
||||
def test_flavor_list(self):
|
||||
"""Tests flavor list API and field filtering.
|
||||
|
@ -80,6 +80,15 @@ class FlavorProfileAPITest(test_base.LoadBalancerBaseTest):
|
||||
flavor_profile[const.PROVIDER_NAME])
|
||||
self.assertEqual(flavor_data_json, flavor_profile[const.FLAVOR_DATA])
|
||||
|
||||
# Testing that flavor_profiles do not support tags
|
||||
flavor_profile_tags = ["Hello", "World"]
|
||||
tags_flavor_profile_kwargs = flavor_profile_kwargs.copy()
|
||||
tags_flavor_profile_kwargs[const.TAGS] = flavor_profile_tags
|
||||
self.assertRaises(
|
||||
TypeError,
|
||||
self.lb_admin_flavor_profile_client.create_flavor_profile,
|
||||
**tags_flavor_profile_kwargs)
|
||||
|
||||
@decorators.idempotent_id('c4e17fdf-849a-4132-93ae-dfca21ce4444')
|
||||
def test_flavor_profile_list(self):
|
||||
"""Tests flavor profile list API and field filtering.
|
||||
|
@ -107,6 +107,13 @@ class HealthMonitorAPITest(test_base.LoadBalancerBaseTest):
|
||||
const.ADMIN_STATE_UP: True,
|
||||
}
|
||||
|
||||
if self.mem_listener_client.is_version_supported(
|
||||
self.api_version, '2.5'):
|
||||
hw_tags = ["Hello", "World"]
|
||||
hm_kwargs.update({
|
||||
const.TAGS: hw_tags
|
||||
})
|
||||
|
||||
# Test that a user without the loadbalancer role cannot
|
||||
# create a healthmonitor
|
||||
if CONF.load_balancer.RBAC_test_type == const.ADVANCED:
|
||||
@ -148,6 +155,10 @@ class HealthMonitorAPITest(test_base.LoadBalancerBaseTest):
|
||||
for item in equal_items:
|
||||
self.assertEqual(hm_kwargs[item], hm[item])
|
||||
|
||||
if self.mem_listener_client.is_version_supported(
|
||||
self.api_version, '2.5'):
|
||||
self.assertEqual(hw_tags, hm[const.TAGS])
|
||||
|
||||
# Helper functions for test healthmonitor list
|
||||
def _filter_hms_by_pool_id(self, hms, pool_ids):
|
||||
return [hm for hm in hms
|
||||
@ -250,6 +261,13 @@ class HealthMonitorAPITest(test_base.LoadBalancerBaseTest):
|
||||
const.EXPECTED_CODES: '200-204',
|
||||
const.ADMIN_STATE_UP: True,
|
||||
}
|
||||
|
||||
if self.mem_healthmonitor_client.is_version_supported(
|
||||
self.api_version, '2.5'):
|
||||
hm1_tags = ["English", "Mathematics",
|
||||
"Marketing", "Creativity"]
|
||||
hm1_kwargs.update({const.TAGS: hm1_tags})
|
||||
|
||||
hm1 = self.mem_healthmonitor_client.create_healthmonitor(
|
||||
**hm1_kwargs)
|
||||
self.addCleanup(
|
||||
@ -286,6 +304,13 @@ class HealthMonitorAPITest(test_base.LoadBalancerBaseTest):
|
||||
const.EXPECTED_CODES: '200-204',
|
||||
const.ADMIN_STATE_UP: True,
|
||||
}
|
||||
|
||||
if self.mem_listener_client.is_version_supported(
|
||||
self.api_version, '2.5'):
|
||||
hm2_tags = ["English", "Spanish",
|
||||
"Soft_skills", "Creativity"]
|
||||
hm2_kwargs.update({const.TAGS: hm2_tags})
|
||||
|
||||
hm2 = self.mem_healthmonitor_client.create_healthmonitor(
|
||||
**hm2_kwargs)
|
||||
self.addCleanup(
|
||||
@ -322,6 +347,13 @@ class HealthMonitorAPITest(test_base.LoadBalancerBaseTest):
|
||||
const.EXPECTED_CODES: '200-204',
|
||||
const.ADMIN_STATE_UP: False,
|
||||
}
|
||||
|
||||
if self.mem_listener_client.is_version_supported(
|
||||
self.api_version, '2.5'):
|
||||
hm3_tags = ["English", "Project_management",
|
||||
"Communication", "Creativity"]
|
||||
hm3_kwargs.update({const.TAGS: hm3_tags})
|
||||
|
||||
hm3 = self.mem_healthmonitor_client.create_healthmonitor(
|
||||
**hm3_kwargs)
|
||||
self.addCleanup(
|
||||
@ -455,6 +487,28 @@ class HealthMonitorAPITest(test_base.LoadBalancerBaseTest):
|
||||
self.assertEqual(hm1[const.NAME],
|
||||
hms[0][const.NAME])
|
||||
|
||||
# Creating a list of 3 healthmonitors, each one contains different tags
|
||||
if self.mem_healthmonitor_client.is_version_supported(
|
||||
self.api_version, '2.5'):
|
||||
list_of_hms = [hm1, hm2, hm3]
|
||||
test_list = []
|
||||
for hm in list_of_hms:
|
||||
|
||||
# If tags "English" and "Creativity" are in the HM's tags
|
||||
# and "Spanish" is not, add the HM to the list
|
||||
if "English" in hm[const.TAGS] and "Creativity" in (
|
||||
hm[const.TAGS]) and "Spanish" not in (
|
||||
hm[const.TAGS]):
|
||||
test_list.append(hm[const.NAME])
|
||||
|
||||
# Tests if only the first and the third ones have those tags
|
||||
self.assertEqual(
|
||||
test_list, [hm1[const.NAME], hm3[const.NAME]])
|
||||
|
||||
# Tests that filtering by an empty tag will return an empty list
|
||||
self.assertTrue(not any(["" in hm[const.TAGS]
|
||||
for hm in list_of_hms]))
|
||||
|
||||
@decorators.idempotent_id('284e8d3b-7b2d-4697-9e41-580b3423c0b4')
|
||||
def test_healthmonitor_show(self):
|
||||
"""Tests healthmonitor show API.
|
||||
@ -607,6 +661,13 @@ class HealthMonitorAPITest(test_base.LoadBalancerBaseTest):
|
||||
const.ADMIN_STATE_UP: False,
|
||||
}
|
||||
|
||||
if self.mem_listener_client.is_version_supported(
|
||||
self.api_version, '2.5'):
|
||||
hw_tags = ["Hello", "World"]
|
||||
hm_kwargs.update({
|
||||
const.TAGS: hw_tags
|
||||
})
|
||||
|
||||
hm = self.mem_healthmonitor_client.create_healthmonitor(**hm_kwargs)
|
||||
self.addCleanup(
|
||||
self.mem_healthmonitor_client.cleanup_healthmonitor,
|
||||
@ -643,6 +704,10 @@ class HealthMonitorAPITest(test_base.LoadBalancerBaseTest):
|
||||
for item in equal_items:
|
||||
self.assertEqual(hm_kwargs[item], hm[item])
|
||||
|
||||
if self.mem_listener_client.is_version_supported(
|
||||
self.api_version, '2.5'):
|
||||
self.assertEqual(hw_tags, hm[const.TAGS])
|
||||
|
||||
# Test that a user, without the loadbalancer member role, cannot
|
||||
# use this command
|
||||
if CONF.load_balancer.RBAC_test_type == const.ADVANCED:
|
||||
@ -685,6 +750,14 @@ class HealthMonitorAPITest(test_base.LoadBalancerBaseTest):
|
||||
const.EXPECTED_CODES: '201,202',
|
||||
const.ADMIN_STATE_UP: not hm_kwargs[const.ADMIN_STATE_UP],
|
||||
}
|
||||
|
||||
if self.mem_listener_client.is_version_supported(
|
||||
self.api_version, '2.5'):
|
||||
hw_new_tags = ["Hola", "Mundo"]
|
||||
hm_update_kwargs.update({
|
||||
const.TAGS: hw_new_tags
|
||||
})
|
||||
|
||||
hm = self.mem_healthmonitor_client.update_healthmonitor(
|
||||
hm[const.ID], **hm_update_kwargs)
|
||||
|
||||
@ -712,6 +785,10 @@ class HealthMonitorAPITest(test_base.LoadBalancerBaseTest):
|
||||
const.HTTP_METHOD, const.URL_PATH, const.EXPECTED_CODES,
|
||||
const.ADMIN_STATE_UP]
|
||||
|
||||
if self.mem_listener_client.is_version_supported(
|
||||
self.api_version, '2.5'):
|
||||
equal_items.append(const.TAGS)
|
||||
|
||||
for item in equal_items:
|
||||
self.assertEqual(hm_update_kwargs[item], hm[item])
|
||||
|
||||
|
@ -134,6 +134,14 @@ class L7PolicyAPITest(test_base.LoadBalancerBaseTest):
|
||||
const.ADMIN_STATE_UP: True,
|
||||
const.POSITION: 1,
|
||||
}
|
||||
|
||||
if self.mem_listener_client.is_version_supported(
|
||||
self.api_version, '2.5'):
|
||||
l7_policy_tags = ["Hello", "World"]
|
||||
l7policy_kwargs.update({
|
||||
const.TAGS: l7_policy_tags
|
||||
})
|
||||
|
||||
if url:
|
||||
l7policy_kwargs[const.ACTION] = const.REDIRECT_TO_URL
|
||||
l7policy_kwargs[const.REDIRECT_URL] = url
|
||||
@ -202,6 +210,10 @@ class L7PolicyAPITest(test_base.LoadBalancerBaseTest):
|
||||
self.assertIsNone(l7policy.pop(const.REDIRECT_URL, None))
|
||||
self.assertIsNone(l7policy.pop(const.REDIRECT_POOL_ID, None))
|
||||
|
||||
if self.mem_listener_client.is_version_supported(
|
||||
self.api_version, '2.5'):
|
||||
self.assertEqual(l7_policy_tags, l7policy[const.TAGS])
|
||||
|
||||
@decorators.idempotent_id('42fa14ba-caf1-465e-ab36-27e7501f95ef')
|
||||
def test_l7policy_list(self):
|
||||
"""Tests l7policy list API and field filtering.
|
||||
@ -248,6 +260,13 @@ class L7PolicyAPITest(test_base.LoadBalancerBaseTest):
|
||||
const.POSITION: 1,
|
||||
const.ACTION: const.REJECT
|
||||
}
|
||||
|
||||
if self.mem_l7policy_client.is_version_supported(
|
||||
self.api_version, '2.5'):
|
||||
l7policy1_tags = ["English", "Mathematics",
|
||||
"Marketing", "Creativity"]
|
||||
l7policy1_kwargs.update({const.TAGS: l7policy1_tags})
|
||||
|
||||
l7policy1 = self.mem_l7policy_client.create_l7policy(
|
||||
**l7policy1_kwargs)
|
||||
self.addCleanup(
|
||||
@ -281,6 +300,13 @@ class L7PolicyAPITest(test_base.LoadBalancerBaseTest):
|
||||
const.ACTION: const.REDIRECT_TO_POOL,
|
||||
const.REDIRECT_POOL_ID: self.pool_id
|
||||
}
|
||||
|
||||
if self.mem_l7policy_client.is_version_supported(
|
||||
self.api_version, '2.5'):
|
||||
l7policy2_tags = ["English", "Spanish",
|
||||
"Soft_skills", "Creativity"]
|
||||
l7policy2_kwargs.update({const.TAGS: l7policy2_tags})
|
||||
|
||||
l7policy2 = self.mem_l7policy_client.create_l7policy(
|
||||
**l7policy2_kwargs)
|
||||
self.addCleanup(
|
||||
@ -315,6 +341,13 @@ class L7PolicyAPITest(test_base.LoadBalancerBaseTest):
|
||||
const.ACTION: const.REDIRECT_TO_URL,
|
||||
const.REDIRECT_URL: l7_redirect_url
|
||||
}
|
||||
|
||||
if self.mem_l7policy_client.is_version_supported(
|
||||
self.api_version, '2.5'):
|
||||
l7policy3_tags = ["English", "Project_management",
|
||||
"Communication", "Creativity"]
|
||||
l7policy3_kwargs.update({const.TAGS: l7policy3_tags})
|
||||
|
||||
l7policy3 = self.mem_l7policy_client.create_l7policy(
|
||||
**l7policy3_kwargs)
|
||||
self.addCleanup(
|
||||
@ -473,6 +506,28 @@ class L7PolicyAPITest(test_base.LoadBalancerBaseTest):
|
||||
self.assertEqual(l7policy1[const.DESCRIPTION],
|
||||
l7policies[0][const.DESCRIPTION])
|
||||
|
||||
# Creating a list of 3 l7policies, each one contains different tags
|
||||
if self.mem_l7policy_client.is_version_supported(
|
||||
self.api_version, '2.5'):
|
||||
list_of_l7policies = [l7policy1, l7policy2, l7policy3]
|
||||
test_list = []
|
||||
for l7policy in list_of_l7policies:
|
||||
|
||||
# If tags "English" and "Creativity" are in the l7policy's tags
|
||||
# and "Spanish" is not, add the l7policy to the list
|
||||
if "English" in l7policy[const.TAGS] and "Creativity" in (
|
||||
l7policy[const.TAGS]) and "Spanish" not in (
|
||||
l7policy[const.TAGS]):
|
||||
test_list.append(l7policy[const.NAME])
|
||||
|
||||
# Tests if only the first and the third ones have those tags
|
||||
self.assertEqual(
|
||||
test_list, [l7policy1[const.NAME], l7policy3[const.NAME]])
|
||||
|
||||
# Tests that filtering by an empty tag will return an empty list
|
||||
self.assertTrue(not any(["" in l7policy[const.TAGS]
|
||||
for l7policy in list_of_l7policies]))
|
||||
|
||||
@decorators.idempotent_id('baaa8104-a037-4976-b908-82a0b3e08129')
|
||||
def test_l7policy_show(self):
|
||||
"""Tests l7policy show API.
|
||||
@ -630,6 +685,13 @@ class L7PolicyAPITest(test_base.LoadBalancerBaseTest):
|
||||
const.REDIRECT_URL: l7_redirect_url,
|
||||
}
|
||||
|
||||
if self.mem_listener_client.is_version_supported(
|
||||
self.api_version, '2.5'):
|
||||
l7_policy_tags = ["Hello", "World"]
|
||||
l7policy_kwargs.update({
|
||||
const.TAGS: l7_policy_tags
|
||||
})
|
||||
|
||||
l7policy = self.mem_l7policy_client.create_l7policy(**l7policy_kwargs)
|
||||
self.addClassResourceCleanup(
|
||||
self.mem_l7policy_client.cleanup_l7policy,
|
||||
@ -665,6 +727,10 @@ class L7PolicyAPITest(test_base.LoadBalancerBaseTest):
|
||||
self.assertEqual(l7_redirect_url, l7policy[const.REDIRECT_URL])
|
||||
self.assertIsNone(l7policy.pop(const.REDIRECT_POOL_ID, None))
|
||||
|
||||
if self.mem_listener_client.is_version_supported(
|
||||
self.api_version, '2.5'):
|
||||
self.assertEqual(l7_policy_tags, l7policy[const.TAGS])
|
||||
|
||||
# Test that a user, without the load balancer member role, cannot
|
||||
# use this command
|
||||
if CONF.load_balancer.RBAC_test_type == const.ADVANCED:
|
||||
@ -706,6 +772,14 @@ class L7PolicyAPITest(test_base.LoadBalancerBaseTest):
|
||||
const.ACTION: const.REDIRECT_TO_POOL,
|
||||
const.REDIRECT_POOL_ID: self.pool_id,
|
||||
}
|
||||
|
||||
if self.mem_listener_client.is_version_supported(
|
||||
self.api_version, '2.5'):
|
||||
l7_policy_new_tags = ["Hola", "Mundo"]
|
||||
l7policy_update_kwargs.update({
|
||||
const.TAGS: l7_policy_new_tags
|
||||
})
|
||||
|
||||
l7policy = self.mem_l7policy_client.update_l7policy(
|
||||
l7policy[const.ID], **l7policy_update_kwargs)
|
||||
|
||||
@ -745,6 +819,11 @@ class L7PolicyAPITest(test_base.LoadBalancerBaseTest):
|
||||
self.assertEqual(self.pool_id, l7policy[const.REDIRECT_POOL_ID])
|
||||
self.assertIsNone(l7policy.pop(const.REDIRECT_URL, None))
|
||||
|
||||
if self.mem_listener_client.is_version_supported(
|
||||
self.api_version, '2.5'):
|
||||
self.assertEqual(l7_policy_new_tags,
|
||||
l7policy[const.TAGS])
|
||||
|
||||
@decorators.idempotent_id('7925eb4b-94b6-4c28-98c2-fd0b4f0976cc')
|
||||
def test_l7policy_delete(self):
|
||||
"""Tests l7policy create and delete APIs.
|
||||
|
@ -143,6 +143,13 @@ class L7RuleAPITest(test_base.LoadBalancerBaseTest):
|
||||
const.INVERT: False,
|
||||
}
|
||||
|
||||
if self.mem_l7policy_client.is_version_supported(
|
||||
self.api_version, '2.5'):
|
||||
l7_rule_tags = ["Hello", "World"]
|
||||
l7rule_kwargs.update({
|
||||
const.TAGS: l7_rule_tags
|
||||
})
|
||||
|
||||
# Test that a user without the load balancer role cannot
|
||||
# create a l7rule
|
||||
if CONF.load_balancer.RBAC_test_type == const.ADVANCED:
|
||||
@ -193,6 +200,10 @@ class L7RuleAPITest(test_base.LoadBalancerBaseTest):
|
||||
for item in equal_items:
|
||||
self.assertEqual(l7rule_kwargs[item], l7rule[item])
|
||||
|
||||
if self.mem_listener_client.is_version_supported(
|
||||
self.api_version, '2.5'):
|
||||
self.assertEqual(l7_rule_tags, l7rule[const.TAGS])
|
||||
|
||||
@decorators.idempotent_id('69095254-f106-4fb6-9f54-7a78cc14fb51')
|
||||
def test_l7rule_list(self):
|
||||
"""Tests l7rule list API and field filtering.
|
||||
@ -232,6 +243,13 @@ class L7RuleAPITest(test_base.LoadBalancerBaseTest):
|
||||
const.COMPARE_TYPE: const.EQUAL_TO,
|
||||
const.KEY: 'mykey2-list',
|
||||
}
|
||||
|
||||
if self.mem_lb_client.is_version_supported(
|
||||
self.api_version, '2.5'):
|
||||
l7rule1_tags = ["English", "Mathematics",
|
||||
"Marketing", "Creativity"]
|
||||
l7rule1_kwargs.update({const.TAGS: l7rule1_tags})
|
||||
|
||||
l7rule1 = self.mem_l7rule_client.create_l7rule(
|
||||
**l7rule1_kwargs)
|
||||
self.addCleanup(
|
||||
@ -263,6 +281,13 @@ class L7RuleAPITest(test_base.LoadBalancerBaseTest):
|
||||
const.COMPARE_TYPE: const.EQUAL_TO,
|
||||
const.KEY: 'mykey1-list',
|
||||
}
|
||||
|
||||
if self.mem_lb_client.is_version_supported(
|
||||
self.api_version, '2.5'):
|
||||
l7rule2_tags = ["English", "Spanish",
|
||||
"Soft_skills", "Creativity"]
|
||||
l7rule2_kwargs.update({const.TAGS: l7rule2_tags})
|
||||
|
||||
l7rule2 = self.mem_l7rule_client.create_l7rule(
|
||||
**l7rule2_kwargs)
|
||||
self.addCleanup(
|
||||
@ -294,6 +319,13 @@ class L7RuleAPITest(test_base.LoadBalancerBaseTest):
|
||||
const.COMPARE_TYPE: const.EQUAL_TO,
|
||||
const.KEY: 'mykey3-list',
|
||||
}
|
||||
|
||||
if self.mem_lb_client.is_version_supported(
|
||||
self.api_version, '2.5'):
|
||||
l7rule3_tags = ["English", "Project_management",
|
||||
"Communication", "Creativity"]
|
||||
l7rule3_kwargs.update({const.TAGS: l7rule3_tags})
|
||||
|
||||
l7rule3 = self.mem_l7rule_client.create_l7rule(
|
||||
**l7rule3_kwargs)
|
||||
self.addCleanup(
|
||||
@ -414,6 +446,28 @@ class L7RuleAPITest(test_base.LoadBalancerBaseTest):
|
||||
self.assertEqual(l7rule1[const.VALUE],
|
||||
l7rules[0][const.VALUE])
|
||||
|
||||
# Creating a list of 3 l7rules, each one contains different tags
|
||||
if self.mem_l7rule_client.is_version_supported(
|
||||
self.api_version, '2.5'):
|
||||
list_of_l7rules = [l7rule1, l7rule2, l7rule3]
|
||||
test_list = []
|
||||
for l7rule in list_of_l7rules:
|
||||
|
||||
# If tags "English" and "Creativity" are in the l7rule's tags
|
||||
# and "Spanish" is not, add the l7rule to the list
|
||||
if "English" in l7rule[const.TAGS] and "Creativity" in (
|
||||
l7rule[const.TAGS]) and "Spanish" not in (
|
||||
l7rule[const.TAGS]):
|
||||
test_list.append(l7rule[const.VALUE])
|
||||
|
||||
# Tests if only the first and the third ones have those tags
|
||||
self.assertEqual(
|
||||
[l7rule1[const.VALUE], l7rule3[const.VALUE]], test_list)
|
||||
|
||||
# Tests that filtering by an empty tag will return an empty list
|
||||
self.assertTrue(not any(["" in l7rule[const.TAGS]
|
||||
for l7rule in list_of_l7rules]))
|
||||
|
||||
@decorators.idempotent_id('b80b34c3-09fc-467b-8027-7350adb17070')
|
||||
def test_l7rule_show(self):
|
||||
"""Tests l7rule show API.
|
||||
@ -526,6 +580,13 @@ class L7RuleAPITest(test_base.LoadBalancerBaseTest):
|
||||
const.INVERT: False,
|
||||
}
|
||||
|
||||
if self.mem_listener_client.is_version_supported(
|
||||
self.api_version, '2.5'):
|
||||
l7_rule_tags = ["Hello", "World"]
|
||||
l7rule_kwargs.update({
|
||||
const.TAGS: l7_rule_tags
|
||||
})
|
||||
|
||||
l7rule = self.mem_l7rule_client.create_l7rule(**l7rule_kwargs)
|
||||
self.addClassResourceCleanup(
|
||||
self.mem_l7rule_client.cleanup_l7rule,
|
||||
@ -557,6 +618,10 @@ class L7RuleAPITest(test_base.LoadBalancerBaseTest):
|
||||
equal_items = [const.ADMIN_STATE_UP, const.TYPE, const.VALUE,
|
||||
const.COMPARE_TYPE, const.KEY, const.INVERT]
|
||||
|
||||
if self.mem_listener_client.is_version_supported(
|
||||
self.api_version, '2.5'):
|
||||
equal_items.append(const.TAGS)
|
||||
|
||||
for item in equal_items:
|
||||
self.assertEqual(l7rule_kwargs[item], l7rule[item])
|
||||
|
||||
@ -599,6 +664,13 @@ class L7RuleAPITest(test_base.LoadBalancerBaseTest):
|
||||
const.KEY: 'mykey-UPDATED',
|
||||
const.INVERT: True,
|
||||
}
|
||||
|
||||
if self.mem_listener_client.is_version_supported(
|
||||
self.api_version, '2.5'):
|
||||
l7rule_update_kwargs.update({
|
||||
const.TAGS: ["Hola", "Mundo"]
|
||||
})
|
||||
|
||||
l7rule = self.mem_l7rule_client.update_l7rule(
|
||||
l7rule[const.ID], **l7rule_update_kwargs)
|
||||
|
||||
@ -624,6 +696,11 @@ class L7RuleAPITest(test_base.LoadBalancerBaseTest):
|
||||
# Test changed items (which is all of them, for l7rules)
|
||||
equal_items = [const.ADMIN_STATE_UP, const.TYPE, const.VALUE,
|
||||
const.COMPARE_TYPE, const.KEY, const.INVERT]
|
||||
|
||||
if self.mem_listener_client.is_version_supported(
|
||||
self.api_version, '2.5'):
|
||||
equal_items.append(const.TAGS)
|
||||
|
||||
for item in equal_items:
|
||||
self.assertEqual(l7rule_update_kwargs[item], l7rule[item])
|
||||
|
||||
|
@ -102,6 +102,13 @@ class ListenerAPITest(test_base.LoadBalancerBaseTest):
|
||||
const.TIMEOUT_TCP_INSPECT: 50,
|
||||
})
|
||||
|
||||
if self.mem_listener_client.is_version_supported(
|
||||
self.api_version, '2.5'):
|
||||
listener_tags = [str(x) for x in range(100)]
|
||||
listener_kwargs.update({
|
||||
const.TAGS: listener_tags
|
||||
})
|
||||
|
||||
# Test that a user without the load balancer role cannot
|
||||
# create a listener
|
||||
if CONF.load_balancer.RBAC_test_type == const.ADVANCED:
|
||||
@ -135,9 +142,21 @@ class ListenerAPITest(test_base.LoadBalancerBaseTest):
|
||||
CONF.load_balancer.build_interval,
|
||||
CONF.load_balancer.build_timeout)
|
||||
|
||||
self.assertEqual(listener_name, listener[const.NAME])
|
||||
self.assertEqual(listener_description, listener[const.DESCRIPTION])
|
||||
self.assertTrue(listener[const.ADMIN_STATE_UP])
|
||||
equal_items = [const.NAME, const.DESCRIPTION,
|
||||
const.ADMIN_STATE_UP,
|
||||
const.PROTOCOL, const.PROTOCOL_PORT,
|
||||
const.CONNECTION_LIMIT]
|
||||
|
||||
if self.mem_listener_client.is_version_supported(
|
||||
self.api_version, '2.1'):
|
||||
equal_items.append(const.TIMEOUT_CLIENT_DATA)
|
||||
equal_items.append(const.TIMEOUT_MEMBER_CONNECT)
|
||||
equal_items.append(const.TIMEOUT_MEMBER_DATA)
|
||||
equal_items.append(const.TIMEOUT_TCP_INSPECT)
|
||||
|
||||
for item in equal_items:
|
||||
self.assertEqual(listener_kwargs[item], listener[item])
|
||||
|
||||
parser.parse(listener[const.CREATED_AT])
|
||||
parser.parse(listener[const.UPDATED_AT])
|
||||
UUID(listener[const.ID])
|
||||
@ -146,20 +165,17 @@ class ListenerAPITest(test_base.LoadBalancerBaseTest):
|
||||
self.assertEqual(const.OFFLINE, listener[const.OPERATING_STATUS])
|
||||
else:
|
||||
self.assertEqual(const.ONLINE, listener[const.OPERATING_STATUS])
|
||||
self.assertEqual(self.protocol, listener[const.PROTOCOL])
|
||||
self.assertEqual(80, listener[const.PROTOCOL_PORT])
|
||||
self.assertEqual(200, listener[const.CONNECTION_LIMIT])
|
||||
|
||||
insert_headers = listener[const.INSERT_HEADERS]
|
||||
self.assertTrue(
|
||||
strutils.bool_from_string(insert_headers[const.X_FORWARDED_FOR]))
|
||||
self.assertTrue(
|
||||
strutils.bool_from_string(insert_headers[const.X_FORWARDED_PORT]))
|
||||
|
||||
if self.mem_listener_client.is_version_supported(
|
||||
self.api_version, '2.1'):
|
||||
self.assertEqual(1000, listener[const.TIMEOUT_CLIENT_DATA])
|
||||
self.assertEqual(1000, listener[const.TIMEOUT_MEMBER_CONNECT])
|
||||
self.assertEqual(1000, listener[const.TIMEOUT_MEMBER_DATA])
|
||||
self.assertEqual(50, listener[const.TIMEOUT_TCP_INSPECT])
|
||||
self.api_version, '2.5'):
|
||||
self.assertEqual(sorted(listener_tags),
|
||||
sorted(listener[const.TAGS]))
|
||||
|
||||
@decorators.idempotent_id('cceac303-4db5-4d5a-9f6e-ff33780a5f29')
|
||||
def test_listener_create_on_same_port(self):
|
||||
@ -336,6 +352,12 @@ class ListenerAPITest(test_base.LoadBalancerBaseTest):
|
||||
const.PROTOCOL_PORT: 80,
|
||||
const.LOADBALANCER_ID: lb_id,
|
||||
}
|
||||
if self.mem_listener_client.is_version_supported(
|
||||
self.api_version, '2.5'):
|
||||
listener1_tags = ["English", "Mathematics",
|
||||
"Marketing", "Creativity"]
|
||||
listener1_kwargs.update({const.TAGS: listener1_tags})
|
||||
|
||||
listener1 = self.mem_listener_client.create_listener(
|
||||
**listener1_kwargs)
|
||||
self.addCleanup(
|
||||
@ -368,6 +390,12 @@ class ListenerAPITest(test_base.LoadBalancerBaseTest):
|
||||
const.PROTOCOL_PORT: 81,
|
||||
const.LOADBALANCER_ID: lb_id,
|
||||
}
|
||||
if self.mem_listener_client.is_version_supported(
|
||||
self.api_version, '2.5'):
|
||||
listener2_tags = ["English", "Spanish",
|
||||
"Soft_skills", "Creativity"]
|
||||
listener2_kwargs.update({const.TAGS: listener2_tags})
|
||||
|
||||
listener2 = self.mem_listener_client.create_listener(
|
||||
**listener2_kwargs)
|
||||
self.addCleanup(
|
||||
@ -400,6 +428,12 @@ class ListenerAPITest(test_base.LoadBalancerBaseTest):
|
||||
const.PROTOCOL_PORT: 82,
|
||||
const.LOADBALANCER_ID: lb_id,
|
||||
}
|
||||
if self.mem_listener_client.is_version_supported(
|
||||
self.api_version, '2.5'):
|
||||
listener3_tags = ["English", "Project_management",
|
||||
"Communication", "Creativity"]
|
||||
listener3_kwargs.update({const.TAGS: listener3_tags})
|
||||
|
||||
listener3 = self.mem_listener_client.create_listener(
|
||||
**listener3_kwargs)
|
||||
self.addCleanup(
|
||||
@ -542,6 +576,28 @@ class ListenerAPITest(test_base.LoadBalancerBaseTest):
|
||||
self.assertEqual(listener1[const.DESCRIPTION],
|
||||
listeners[0][const.DESCRIPTION])
|
||||
|
||||
# Creating a list of 3 listeners, each one contains different tags
|
||||
if self.mem_listener_client.is_version_supported(
|
||||
self.api_version, '2.5'):
|
||||
list_of_listeners = [listener1, listener2, listener3]
|
||||
test_list = []
|
||||
for listener in list_of_listeners:
|
||||
|
||||
# If tags "English" and "Creativity" are in the listener's tags
|
||||
# and "Spanish" is not, add the listener to the list
|
||||
if "English" in listener[const.TAGS] and "Creativity" in (
|
||||
listener[const.TAGS]) and "Spanish" not in (
|
||||
listener[const.TAGS]):
|
||||
test_list.append(listener[const.NAME])
|
||||
|
||||
# Tests if only the first and the third ones have those tags
|
||||
self.assertEqual(
|
||||
test_list, [listener1[const.NAME], listener3[const.NAME]])
|
||||
|
||||
# Tests that filtering by an empty tag will return an empty list
|
||||
self.assertTrue(not any(["" in listener[const.TAGS]
|
||||
for listener in list_of_listeners]))
|
||||
|
||||
@decorators.idempotent_id('6e299eae-6907-4dfc-89c2-e57709d25d3d')
|
||||
def test_listener_show(self):
|
||||
"""Tests listener show API.
|
||||
@ -581,6 +637,13 @@ class ListenerAPITest(test_base.LoadBalancerBaseTest):
|
||||
const.TIMEOUT_TCP_INSPECT: 50,
|
||||
})
|
||||
|
||||
if self.mem_listener_client.is_version_supported(
|
||||
self.api_version, '2.5'):
|
||||
listener_tags = ["hello", "world"]
|
||||
listener_kwargs.update({
|
||||
const.TAGS: listener_tags
|
||||
})
|
||||
|
||||
listener = self.mem_listener_client.create_listener(**listener_kwargs)
|
||||
self.addClassResourceCleanup(
|
||||
self.mem_listener_client.cleanup_listener,
|
||||
@ -605,10 +668,31 @@ class ListenerAPITest(test_base.LoadBalancerBaseTest):
|
||||
const.ONLINE,
|
||||
CONF.load_balancer.build_interval,
|
||||
CONF.load_balancer.build_timeout)
|
||||
equal_items = [const.NAME, const.DESCRIPTION,
|
||||
const.ADMIN_STATE_UP,
|
||||
const.PROTOCOL, const.PROTOCOL_PORT,
|
||||
const.CONNECTION_LIMIT]
|
||||
|
||||
if self.mem_listener_client.is_version_supported(
|
||||
self.api_version, '2.1'):
|
||||
equal_items.append(const.TIMEOUT_CLIENT_DATA)
|
||||
equal_items.append(const.TIMEOUT_MEMBER_CONNECT)
|
||||
equal_items.append(const.TIMEOUT_MEMBER_DATA)
|
||||
equal_items.append(const.TIMEOUT_TCP_INSPECT)
|
||||
|
||||
if self.mem_listener_client.is_version_supported(
|
||||
self.api_version, '2.5'):
|
||||
equal_items.append(const.TAGS)
|
||||
|
||||
for item in equal_items:
|
||||
self.assertEqual(listener_kwargs[item], listener[item])
|
||||
|
||||
insert_headers = listener[const.INSERT_HEADERS]
|
||||
self.assertTrue(
|
||||
strutils.bool_from_string(insert_headers[const.X_FORWARDED_FOR]))
|
||||
self.assertTrue(
|
||||
strutils.bool_from_string(insert_headers[const.X_FORWARDED_PORT]))
|
||||
|
||||
self.assertEqual(listener_name, listener[const.NAME])
|
||||
self.assertEqual(listener_description, listener[const.DESCRIPTION])
|
||||
self.assertTrue(listener[const.ADMIN_STATE_UP])
|
||||
parser.parse(listener[const.CREATED_AT])
|
||||
parser.parse(listener[const.UPDATED_AT])
|
||||
UUID(listener[const.ID])
|
||||
@ -617,21 +701,6 @@ class ListenerAPITest(test_base.LoadBalancerBaseTest):
|
||||
self.assertEqual(const.OFFLINE, listener[const.OPERATING_STATUS])
|
||||
else:
|
||||
self.assertEqual(const.ONLINE, listener[const.OPERATING_STATUS])
|
||||
self.assertEqual(self.protocol, listener[const.PROTOCOL])
|
||||
self.assertEqual(81, listener[const.PROTOCOL_PORT])
|
||||
self.assertEqual(200, listener[const.CONNECTION_LIMIT])
|
||||
insert_headers = listener[const.INSERT_HEADERS]
|
||||
self.assertTrue(
|
||||
strutils.bool_from_string(insert_headers[const.X_FORWARDED_FOR]))
|
||||
self.assertTrue(
|
||||
strutils.bool_from_string(insert_headers[const.X_FORWARDED_PORT]))
|
||||
|
||||
if self.mem_listener_client.is_version_supported(
|
||||
self.api_version, '2.1'):
|
||||
self.assertEqual(1000, listener[const.TIMEOUT_CLIENT_DATA])
|
||||
self.assertEqual(1000, listener[const.TIMEOUT_MEMBER_CONNECT])
|
||||
self.assertEqual(1000, listener[const.TIMEOUT_MEMBER_DATA])
|
||||
self.assertEqual(50, listener[const.TIMEOUT_TCP_INSPECT])
|
||||
|
||||
# Test that a user with lb_admin role can see the listener
|
||||
if CONF.load_balancer.RBAC_test_type == const.ADVANCED:
|
||||
@ -702,6 +771,13 @@ class ListenerAPITest(test_base.LoadBalancerBaseTest):
|
||||
const.TIMEOUT_TCP_INSPECT: 50,
|
||||
})
|
||||
|
||||
if self.mem_listener_client.is_version_supported(
|
||||
self.api_version, '2.5'):
|
||||
listener_tags = ["Hello", "World"]
|
||||
listener_kwargs.update({
|
||||
const.TAGS: listener_tags
|
||||
})
|
||||
|
||||
listener = self.mem_listener_client.create_listener(**listener_kwargs)
|
||||
self.addClassResourceCleanup(
|
||||
self.mem_listener_client.cleanup_listener,
|
||||
@ -743,6 +819,10 @@ class ListenerAPITest(test_base.LoadBalancerBaseTest):
|
||||
self.assertEqual(1000, listener[const.TIMEOUT_MEMBER_DATA])
|
||||
self.assertEqual(50, listener[const.TIMEOUT_TCP_INSPECT])
|
||||
|
||||
if self.mem_listener_client.is_version_supported(
|
||||
self.api_version, '2.5'):
|
||||
self.assertEqual(listener_tags, listener[const.TAGS])
|
||||
|
||||
# Test that a user, without the load balancer member role, cannot
|
||||
# use this command
|
||||
if CONF.load_balancer.RBAC_test_type == const.ADVANCED:
|
||||
@ -799,6 +879,13 @@ class ListenerAPITest(test_base.LoadBalancerBaseTest):
|
||||
const.TIMEOUT_TCP_INSPECT: 100,
|
||||
})
|
||||
|
||||
if self.mem_listener_client.is_version_supported(
|
||||
self.api_version, '2.5'):
|
||||
listener_updated_tags = ["Hola", "Mundo"]
|
||||
listener_update_kwargs.update({
|
||||
const.TAGS: listener_updated_tags
|
||||
})
|
||||
|
||||
listener = self.mem_listener_client.update_listener(
|
||||
listener[const.ID], **listener_update_kwargs)
|
||||
|
||||
@ -842,6 +929,10 @@ class ListenerAPITest(test_base.LoadBalancerBaseTest):
|
||||
self.assertEqual(2000, listener[const.TIMEOUT_MEMBER_DATA])
|
||||
self.assertEqual(100, listener[const.TIMEOUT_TCP_INSPECT])
|
||||
|
||||
if self.mem_listener_client.is_version_supported(
|
||||
self.api_version, '2.5'):
|
||||
self.assertEqual(listener_updated_tags, listener[const.TAGS])
|
||||
|
||||
@decorators.idempotent_id('16f11c82-f069-4592-8954-81b35a98e3b7')
|
||||
def test_listener_delete(self):
|
||||
"""Tests listener create and delete APIs.
|
||||
|
@ -69,6 +69,13 @@ class LoadBalancerAPITest(test_base.LoadBalancerBaseTest):
|
||||
# vip_qos_policy_id=lb_qos_policy_id)
|
||||
const.NAME: lb_name}
|
||||
|
||||
if self.mem_listener_client.is_version_supported(
|
||||
self.api_version, '2.5'):
|
||||
lb_tags = ["Hello", "World"]
|
||||
lb_kwargs.update({
|
||||
const.TAGS: lb_tags
|
||||
})
|
||||
|
||||
self._setup_lb_network_kwargs(lb_kwargs, ip_version, use_fixed_ip=True)
|
||||
|
||||
# Test that a user without the load balancer role cannot
|
||||
@ -139,6 +146,10 @@ class LoadBalancerAPITest(test_base.LoadBalancerBaseTest):
|
||||
except Exception:
|
||||
pass
|
||||
|
||||
if self.mem_listener_client.is_version_supported(
|
||||
self.api_version, '2.5'):
|
||||
self.assertEqual(lb_tags, lb[const.TAGS])
|
||||
|
||||
@decorators.idempotent_id('643ef031-c800-45f2-b229-3c8f8b37c829')
|
||||
def test_load_balancer_delete(self):
|
||||
"""Tests load balancer create and delete APIs.
|
||||
@ -263,17 +274,29 @@ class LoadBalancerAPITest(test_base.LoadBalancerBaseTest):
|
||||
|
||||
lb_name = data_utils.rand_name("lb_member_lb2-list")
|
||||
lb_description = data_utils.rand_name('B')
|
||||
lb_admin_state_up = True
|
||||
lb_provider = CONF.load_balancer.provider
|
||||
lb_vip_network_id = self.lb_member_vip_net[const.ID]
|
||||
|
||||
lb = self.mem_lb_client.create_loadbalancer(
|
||||
admin_state_up=True,
|
||||
description=lb_description,
|
||||
lb_kwargs = {
|
||||
const.ADMIN_STATE_UP: lb_admin_state_up,
|
||||
const.DESCRIPTION: lb_description,
|
||||
# TODO(johnsom) Fix test to use a real flavor
|
||||
# flavor=lb_flavor,
|
||||
provider=CONF.load_balancer.provider,
|
||||
name=lb_name,
|
||||
const.PROVIDER: lb_provider,
|
||||
const.NAME: lb_name,
|
||||
# TODO(johnsom) Add QoS
|
||||
# vip_qos_policy_id=lb_qos_policy_id)
|
||||
vip_network_id=self.lb_member_vip_net[const.ID])
|
||||
const.VIP_NETWORK_ID: lb_vip_network_id
|
||||
}
|
||||
|
||||
if self.mem_lb_client.is_version_supported(self.api_version, '2.5'):
|
||||
lb_tags = ["English", "Mathematics", "Marketing", "Creativity"]
|
||||
lb_kwargs.update({const.TAGS: lb_tags})
|
||||
|
||||
lb = self.mem_lb_client.create_loadbalancer(
|
||||
**lb_kwargs)
|
||||
|
||||
self.addCleanup(
|
||||
self.mem_lb_client.cleanup_loadbalancer,
|
||||
lb[const.ID])
|
||||
@ -298,13 +321,25 @@ class LoadBalancerAPITest(test_base.LoadBalancerBaseTest):
|
||||
|
||||
lb_name = data_utils.rand_name("lb_member_lb1-list")
|
||||
lb_description = data_utils.rand_name('A')
|
||||
lb_admin_state_up = True
|
||||
lb_provider = CONF.load_balancer.provider
|
||||
lb_vip_network_id = self.lb_member_vip_net[const.ID]
|
||||
|
||||
lb_kwargs = {
|
||||
const.ADMIN_STATE_UP: lb_admin_state_up,
|
||||
const.DESCRIPTION: lb_description,
|
||||
const.PROVIDER: lb_provider,
|
||||
const.NAME: lb_name,
|
||||
const.VIP_NETWORK_ID: lb_vip_network_id,
|
||||
}
|
||||
|
||||
if self.mem_lb_client.is_version_supported(self.api_version, '2.5'):
|
||||
lb_tags = ["English", "Spanish", "Soft_skills", "Creativity"]
|
||||
lb_kwargs.update({const.TAGS: lb_tags})
|
||||
|
||||
lb = self.mem_lb_client.create_loadbalancer(
|
||||
admin_state_up=True,
|
||||
description=lb_description,
|
||||
provider=CONF.load_balancer.provider,
|
||||
name=lb_name,
|
||||
vip_network_id=self.lb_member_vip_net[const.ID])
|
||||
**lb_kwargs)
|
||||
|
||||
self.addCleanup(
|
||||
self.mem_lb_client.cleanup_loadbalancer,
|
||||
lb[const.ID])
|
||||
@ -329,13 +364,26 @@ class LoadBalancerAPITest(test_base.LoadBalancerBaseTest):
|
||||
|
||||
lb_name = data_utils.rand_name("lb_member_lb3-list")
|
||||
lb_description = data_utils.rand_name('C')
|
||||
lb_admin_state_up = False
|
||||
lb_provider = CONF.load_balancer.provider
|
||||
lb_vip_network_id = self.lb_member_vip_net[const.ID]
|
||||
|
||||
lb_kwargs = {
|
||||
const.ADMIN_STATE_UP: lb_admin_state_up,
|
||||
const.DESCRIPTION: lb_description,
|
||||
const.PROVIDER: lb_provider,
|
||||
const.NAME: lb_name,
|
||||
const.VIP_NETWORK_ID: lb_vip_network_id,
|
||||
}
|
||||
|
||||
if self.mem_lb_client.is_version_supported(self.api_version, '2.5'):
|
||||
lb_tags = ["English", "Project_management",
|
||||
"Communication", "Creativity"]
|
||||
lb_kwargs.update({const.TAGS: lb_tags})
|
||||
|
||||
lb = self.mem_lb_client.create_loadbalancer(
|
||||
admin_state_up=False,
|
||||
description=lb_description,
|
||||
provider=CONF.load_balancer.provider,
|
||||
name=lb_name,
|
||||
vip_network_id=self.lb_member_vip_net[const.ID])
|
||||
**lb_kwargs)
|
||||
|
||||
self.addCleanup(
|
||||
self.mem_lb_client.cleanup_loadbalancer,
|
||||
lb[const.ID])
|
||||
@ -442,6 +490,28 @@ class LoadBalancerAPITest(test_base.LoadBalancerBaseTest):
|
||||
self.assertEqual(lb2[const.DESCRIPTION], lbs[1][const.DESCRIPTION])
|
||||
self.assertEqual(lb1[const.DESCRIPTION], lbs[0][const.DESCRIPTION])
|
||||
|
||||
# Creating a list of 3 LBs, each one contains different tags
|
||||
if self.mem_lb_client.is_version_supported(
|
||||
self.api_version, '2.5'):
|
||||
list_of_lbs = [lb1, lb2, lb3]
|
||||
test_list = []
|
||||
for lb in list_of_lbs:
|
||||
|
||||
# If tags "English" and "Creativity" are in the LB's tags
|
||||
# and "Spanish" is not, add the LB to the list
|
||||
if "English" in lb[const.TAGS] and "Creativity" in (
|
||||
lb[const.TAGS]) and "Spanish" not in (
|
||||
lb[const.TAGS]):
|
||||
test_list.append(lb[const.NAME])
|
||||
|
||||
# Tests if only the first and the third ones have those tags
|
||||
self.assertEqual(
|
||||
test_list, [lb1[const.NAME], lb3[const.NAME]])
|
||||
|
||||
# Tests that filtering by an empty tag will return an empty list
|
||||
self.assertTrue(not any(["" in lb[const.TAGS]
|
||||
for lb in list_of_lbs]))
|
||||
|
||||
@decorators.idempotent_id('826ae612-8717-4c64-a8a7-cb9570a85870')
|
||||
def test_load_balancer_show(self):
|
||||
"""Tests load balancer show API.
|
||||
@ -561,6 +631,13 @@ class LoadBalancerAPITest(test_base.LoadBalancerBaseTest):
|
||||
# vip_qos_policy_id=lb_qos_policy_id)
|
||||
const.NAME: lb_name}
|
||||
|
||||
if self.mem_listener_client.is_version_supported(
|
||||
self.api_version, '2.5'):
|
||||
lb_tags = ["Hello", "World"]
|
||||
lb_kwargs.update({
|
||||
const.TAGS: lb_tags
|
||||
})
|
||||
|
||||
self._setup_lb_network_kwargs(lb_kwargs, 4, use_fixed_ip=True)
|
||||
|
||||
lb = self.mem_lb_client.create_loadbalancer(**lb_kwargs)
|
||||
@ -594,6 +671,10 @@ class LoadBalancerAPITest(test_base.LoadBalancerBaseTest):
|
||||
self.assertEqual(lb_kwargs[const.VIP_SUBNET_ID],
|
||||
lb[const.VIP_SUBNET_ID])
|
||||
|
||||
if self.mem_listener_client.is_version_supported(
|
||||
self.api_version, '2.5'):
|
||||
self.assertEqual(lb_tags, lb[const.TAGS])
|
||||
|
||||
new_name = data_utils.rand_name("lb_member_lb1-update")
|
||||
new_description = data_utils.arbitrary_string(size=255,
|
||||
base_text='new')
|
||||
@ -624,13 +705,26 @@ class LoadBalancerAPITest(test_base.LoadBalancerBaseTest):
|
||||
self.assertEqual(const.ACTIVE, lb_check[const.PROVISIONING_STATUS])
|
||||
self.assertFalse(lb_check[const.ADMIN_STATE_UP])
|
||||
|
||||
lb = self.mem_lb_client.update_loadbalancer(
|
||||
lb[const.ID],
|
||||
admin_state_up=True,
|
||||
description=new_description,
|
||||
admin_state_up = True
|
||||
|
||||
lb_update_kwargs = {
|
||||
# const.ID: lb[const.ID],
|
||||
const.ADMIN_STATE_UP: admin_state_up,
|
||||
const.DESCRIPTION: new_description,
|
||||
# TODO(johnsom) Add QoS
|
||||
# vip_qos_policy_id=lb_qos_policy_id)
|
||||
name=new_name)
|
||||
const.NAME: new_name
|
||||
}
|
||||
|
||||
if self.mem_listener_client.is_version_supported(
|
||||
self.api_version, '2.5'):
|
||||
new_tags = ["Hola", "Mundo"]
|
||||
lb_update_kwargs.update({
|
||||
const.TAGS: new_tags
|
||||
})
|
||||
|
||||
lb = self.mem_lb_client.update_loadbalancer(
|
||||
lb[const.ID], **lb_update_kwargs)
|
||||
|
||||
lb = waiters.wait_for_status(self.mem_lb_client.show_loadbalancer,
|
||||
lb[const.ID], const.PROVISIONING_STATUS,
|
||||
@ -641,6 +735,7 @@ class LoadBalancerAPITest(test_base.LoadBalancerBaseTest):
|
||||
self.assertTrue(lb[const.ADMIN_STATE_UP])
|
||||
self.assertEqual(new_description, lb[const.DESCRIPTION])
|
||||
self.assertEqual(new_name, lb[const.NAME])
|
||||
self.assertEqual(new_tags, lb[const.TAGS])
|
||||
# TODO(johnsom) Add QoS
|
||||
|
||||
# Attempt to clean up so that one full test run doesn't start 10+
|
||||
|
@ -153,6 +153,13 @@ class MemberAPITest(test_base.LoadBalancerBaseTest):
|
||||
const.BACKUP: False,
|
||||
})
|
||||
|
||||
if self.mem_member_client.is_version_supported(
|
||||
self.api_version, '2.5'):
|
||||
member_tags = ["hello", "world"]
|
||||
member_kwargs.update({
|
||||
const.TAGS: member_tags
|
||||
})
|
||||
|
||||
if self.lb_member_vip_subnet:
|
||||
member_kwargs[const.SUBNET_ID] = self.lb_member_vip_subnet[
|
||||
const.ID]
|
||||
@ -197,6 +204,10 @@ class MemberAPITest(test_base.LoadBalancerBaseTest):
|
||||
self.api_version, '2.1'):
|
||||
equal_items.append(const.BACKUP)
|
||||
|
||||
if self.mem_member_client.is_version_supported(
|
||||
self.api_version, '2.5'):
|
||||
equal_items.append(const.TAGS)
|
||||
|
||||
if monitor:
|
||||
equal_items += [const.MONITOR_ADDRESS, const.MONITOR_PORT]
|
||||
if const.SUBNET_ID in member_kwargs:
|
||||
@ -247,6 +258,13 @@ class MemberAPITest(test_base.LoadBalancerBaseTest):
|
||||
const.ADDRESS: '192.0.2.1',
|
||||
const.PROTOCOL_PORT: 101,
|
||||
}
|
||||
|
||||
if self.mem_member_client.is_version_supported(
|
||||
self.api_version, '2.5'):
|
||||
member1_tags = ["English", "Mathematics",
|
||||
"Marketing", "Creativity"]
|
||||
member1_kwargs.update({const.TAGS: member1_tags})
|
||||
|
||||
member1 = self.mem_member_client.create_member(
|
||||
**member1_kwargs)
|
||||
self.addCleanup(
|
||||
@ -278,6 +296,13 @@ class MemberAPITest(test_base.LoadBalancerBaseTest):
|
||||
const.ADDRESS: '192.0.2.1',
|
||||
const.PROTOCOL_PORT: 100,
|
||||
}
|
||||
|
||||
if self.mem_member_client.is_version_supported(
|
||||
self.api_version, '2.5'):
|
||||
member2_tags = ["English", "Spanish",
|
||||
"Soft_skills", "Creativity"]
|
||||
member2_kwargs.update({const.TAGS: member2_tags})
|
||||
|
||||
member2 = self.mem_member_client.create_member(
|
||||
**member2_kwargs)
|
||||
self.addCleanup(
|
||||
@ -309,6 +334,13 @@ class MemberAPITest(test_base.LoadBalancerBaseTest):
|
||||
const.ADDRESS: '192.0.2.1',
|
||||
const.PROTOCOL_PORT: 102,
|
||||
}
|
||||
|
||||
if self.mem_member_client.is_version_supported(
|
||||
self.api_version, '2.5'):
|
||||
member3_tags = ["English", "Project_management",
|
||||
"Communication", "Creativity"]
|
||||
member3_kwargs.update({const.TAGS: member3_tags})
|
||||
|
||||
member3 = self.mem_member_client.create_member(
|
||||
**member3_kwargs)
|
||||
self.addCleanup(
|
||||
@ -433,6 +465,28 @@ class MemberAPITest(test_base.LoadBalancerBaseTest):
|
||||
self.assertEqual(member1[const.PROTOCOL_PORT],
|
||||
members[0][const.PROTOCOL_PORT])
|
||||
|
||||
# Creating a list of 3 members, each one contains different tags
|
||||
if self.mem_member_client.is_version_supported(
|
||||
self.api_version, '2.5'):
|
||||
list_of_members = [member1, member2, member3]
|
||||
test_list = []
|
||||
for member in list_of_members:
|
||||
|
||||
# If tags "English" and "Creativity" are in the member's tags
|
||||
# and "Spanish" is not, add the member to the list
|
||||
if "English" in member[const.TAGS] and "Creativity" in (
|
||||
member[const.TAGS]) and "Spanish" not in (
|
||||
member[const.TAGS]):
|
||||
test_list.append(member[const.NAME])
|
||||
|
||||
# Tests if only the first and the third ones have those tags
|
||||
self.assertEqual(
|
||||
test_list, [member1[const.NAME], member3[const.NAME]])
|
||||
|
||||
# Tests that filtering by an empty tag will return an empty list
|
||||
self.assertTrue(not any(["" in member[const.TAGS]
|
||||
for member in list_of_members]))
|
||||
|
||||
@decorators.idempotent_id('7674ae04-7e92-44ef-9adf-40718d7ec705')
|
||||
def test_member_show(self):
|
||||
"""Tests member show API.
|
||||
@ -563,6 +617,13 @@ class MemberAPITest(test_base.LoadBalancerBaseTest):
|
||||
const.BACKUP: False,
|
||||
})
|
||||
|
||||
if self.mem_member_client.is_version_supported(
|
||||
self.api_version, '2.5'):
|
||||
member_tags = ["Hello", "World"]
|
||||
member_kwargs.update({
|
||||
const.TAGS: member_tags
|
||||
})
|
||||
|
||||
if self.lb_member_vip_subnet:
|
||||
member_kwargs[const.SUBNET_ID] = self.lb_member_vip_subnet[
|
||||
const.ID]
|
||||
@ -609,6 +670,10 @@ class MemberAPITest(test_base.LoadBalancerBaseTest):
|
||||
self.api_version, '2.1'):
|
||||
equal_items.append(const.BACKUP)
|
||||
|
||||
if self.mem_member_client.is_version_supported(
|
||||
self.api_version, '2.5'):
|
||||
equal_items.append(const.TAGS)
|
||||
|
||||
if monitor:
|
||||
equal_items += [const.MONITOR_ADDRESS, const.MONITOR_PORT]
|
||||
if const.SUBNET_ID in member_kwargs:
|
||||
@ -672,6 +737,14 @@ class MemberAPITest(test_base.LoadBalancerBaseTest):
|
||||
member_update_kwargs.update({
|
||||
const.BACKUP: not member[const.BACKUP]
|
||||
})
|
||||
|
||||
if self.mem_member_client.is_version_supported(
|
||||
self.api_version, '2.5'):
|
||||
new_tags = ["Hola", "Mundo"]
|
||||
member_update_kwargs.update({
|
||||
const.TAGS: new_tags
|
||||
})
|
||||
|
||||
if monitor:
|
||||
member_update_kwargs[const.MONITOR_ADDRESS] = '192.0.2.3'
|
||||
member_update_kwargs[const.MONITOR_PORT] = member[
|
||||
@ -709,6 +782,10 @@ class MemberAPITest(test_base.LoadBalancerBaseTest):
|
||||
self.api_version, '2.1'):
|
||||
equal_items.append(const.BACKUP)
|
||||
|
||||
if self.mem_member_client.is_version_supported(
|
||||
self.api_version, '2.5'):
|
||||
equal_items.append(const.TAGS)
|
||||
|
||||
if monitor:
|
||||
equal_items += [const.MONITOR_ADDRESS, const.MONITOR_PORT]
|
||||
for item in equal_items:
|
||||
|
@ -104,6 +104,13 @@ class PoolAPITest(test_base.LoadBalancerBaseTest):
|
||||
const.PROTOCOL: self.protocol,
|
||||
const.LB_ALGORITHM: self.lb_algorithm,
|
||||
}
|
||||
|
||||
if self.mem_lb_client.is_version_supported(self.api_version, '2.5'):
|
||||
pool_tags = ["Hello", "World"]
|
||||
pool_kwargs.update({
|
||||
const.TAGS: pool_tags
|
||||
})
|
||||
|
||||
if self.lb_feature_enabled.session_persistence_enabled:
|
||||
pool_kwargs[const.SESSION_PERSISTENCE] = {
|
||||
const.TYPE: const.SESSION_PERSISTENCE_APP_COOKIE,
|
||||
@ -179,6 +186,8 @@ class PoolAPITest(test_base.LoadBalancerBaseTest):
|
||||
self.assertEqual(pool_sp_cookie_name,
|
||||
pool[const.SESSION_PERSISTENCE][
|
||||
const.COOKIE_NAME])
|
||||
if self.mem_lb_client.is_version_supported(self.api_version, '2.5'):
|
||||
self.assertEqual(pool_tags, pool[const.TAGS])
|
||||
|
||||
@decorators.idempotent_id('6959a32e-fb34-4f3e-be68-8880c6450016')
|
||||
def test_pool_list(self):
|
||||
@ -222,6 +231,13 @@ class PoolAPITest(test_base.LoadBalancerBaseTest):
|
||||
const.LB_ALGORITHM: self.lb_algorithm,
|
||||
const.LOADBALANCER_ID: lb_id,
|
||||
}
|
||||
|
||||
if self.mem_pool_client.is_version_supported(
|
||||
self.api_version, '2.5'):
|
||||
pool1_tags = ["English", "Mathematics",
|
||||
"Marketing", "Creativity"]
|
||||
pool1_kwargs.update({const.TAGS: pool1_tags})
|
||||
|
||||
if self.lb_feature_enabled.session_persistence_enabled:
|
||||
pool1_kwargs[const.SESSION_PERSISTENCE] = {
|
||||
const.TYPE: const.SESSION_PERSISTENCE_APP_COOKIE,
|
||||
@ -260,6 +276,13 @@ class PoolAPITest(test_base.LoadBalancerBaseTest):
|
||||
const.LB_ALGORITHM: self.lb_algorithm,
|
||||
const.LOADBALANCER_ID: lb_id,
|
||||
}
|
||||
|
||||
if self.mem_pool_client.is_version_supported(
|
||||
self.api_version, '2.5'):
|
||||
pool2_tags = ["English", "Spanish",
|
||||
"Soft_skills", "Creativity"]
|
||||
pool2_kwargs.update({const.TAGS: pool2_tags})
|
||||
|
||||
if self.lb_feature_enabled.session_persistence_enabled:
|
||||
pool2_kwargs[const.SESSION_PERSISTENCE] = {
|
||||
const.TYPE: const.SESSION_PERSISTENCE_APP_COOKIE,
|
||||
@ -298,6 +321,13 @@ class PoolAPITest(test_base.LoadBalancerBaseTest):
|
||||
# No session persistence, just so there's one test for that
|
||||
const.LOADBALANCER_ID: lb_id,
|
||||
}
|
||||
|
||||
if self.mem_pool_client.is_version_supported(
|
||||
self.api_version, '2.5'):
|
||||
pool3_tags = ["English", "Project_management",
|
||||
"Communication", "Creativity"]
|
||||
pool3_kwargs.update({const.TAGS: pool3_tags})
|
||||
|
||||
pool3 = self.mem_pool_client.create_pool(
|
||||
**pool3_kwargs)
|
||||
self.addCleanup(
|
||||
@ -418,6 +448,28 @@ class PoolAPITest(test_base.LoadBalancerBaseTest):
|
||||
self.assertEqual(pool1[const.DESCRIPTION],
|
||||
pools[0][const.DESCRIPTION])
|
||||
|
||||
# Creating a list of 3 pools, each one contains different tags
|
||||
if self.mem_pool_client.is_version_supported(
|
||||
self.api_version, '2.5'):
|
||||
list_of_pools = [pool1, pool2, pool3]
|
||||
test_list = []
|
||||
for pool in list_of_pools:
|
||||
|
||||
# If tags "English" and "Creativity" are in the pool's tags
|
||||
# and "Spanish" is not, add the pool to the list
|
||||
if "English" in pool[const.TAGS] and "Creativity" in (
|
||||
pool[const.TAGS]) and "Spanish" not in (
|
||||
pool[const.TAGS]):
|
||||
test_list.append(pool[const.NAME])
|
||||
|
||||
# Tests if only the first and the third ones have those tags
|
||||
self.assertEqual(
|
||||
test_list, [pool1[const.NAME], pool3[const.NAME]])
|
||||
|
||||
# Tests that filtering by an empty tag will return an empty list
|
||||
self.assertTrue(not any(["" in pool[const.TAGS]
|
||||
for pool in list_of_pools]))
|
||||
|
||||
@decorators.idempotent_id('b7932438-1aea-4175-a50c-984fee1c0cad')
|
||||
def test_pool_show(self):
|
||||
"""Tests pool show API.
|
||||
@ -535,6 +587,13 @@ class PoolAPITest(test_base.LoadBalancerBaseTest):
|
||||
const.LB_ALGORITHM: self.lb_algorithm,
|
||||
const.LOADBALANCER_ID: self.lb_id,
|
||||
}
|
||||
|
||||
if self.mem_lb_client.is_version_supported(self.api_version, '2.5'):
|
||||
pool_tags = ["Hello", "World"]
|
||||
pool_kwargs.update({
|
||||
const.TAGS: pool_tags
|
||||
})
|
||||
|
||||
if self.lb_feature_enabled.session_persistence_enabled:
|
||||
pool_kwargs[const.SESSION_PERSISTENCE] = {
|
||||
const.TYPE: const.SESSION_PERSISTENCE_APP_COOKIE,
|
||||
@ -610,6 +669,9 @@ class PoolAPITest(test_base.LoadBalancerBaseTest):
|
||||
pool_check[const.PROVISIONING_STATUS])
|
||||
self.assertFalse(pool_check[const.ADMIN_STATE_UP])
|
||||
|
||||
if self.mem_lb_client.is_version_supported(self.api_version, '2.5'):
|
||||
self.assertEqual(pool_tags, pool[const.TAGS])
|
||||
|
||||
new_name = data_utils.rand_name("lb_member_pool1-UPDATED")
|
||||
new_description = data_utils.arbitrary_string(size=255,
|
||||
base_text='new')
|
||||
@ -619,6 +681,13 @@ class PoolAPITest(test_base.LoadBalancerBaseTest):
|
||||
const.ADMIN_STATE_UP: True,
|
||||
const.LB_ALGORITHM: self.lb_algorithm,
|
||||
}
|
||||
|
||||
if self.mem_lb_client.is_version_supported(self.api_version, '2.5'):
|
||||
new_tags = ["Hola", "Mundo"]
|
||||
pool_update_kwargs.update({
|
||||
const.TAGS: new_tags
|
||||
})
|
||||
|
||||
if self.lb_feature_enabled.session_persistence_enabled:
|
||||
pool_update_kwargs[const.SESSION_PERSISTENCE] = {
|
||||
const.TYPE: const.SESSION_PERSISTENCE_HTTP_COOKIE,
|
||||
@ -672,6 +741,9 @@ class PoolAPITest(test_base.LoadBalancerBaseTest):
|
||||
if self.lb_feature_enabled.session_persistence_enabled:
|
||||
self.assertIsNone(pool.get(const.SESSION_PERSISTENCE))
|
||||
|
||||
if self.mem_lb_client.is_version_supported(self.api_version, '2.5'):
|
||||
self.assertEqual(new_tags, pool[const.TAGS])
|
||||
|
||||
@decorators.idempotent_id('35ed3800-7a4a-47a6-9b94-c1033fff1112')
|
||||
def test_pool_delete(self):
|
||||
"""Tests pool create and delete APIs.
|
||||
|
@ -0,0 +1,4 @@
|
||||
---
|
||||
features:
|
||||
- |
|
||||
API tests for tags were added.
|
Loading…
x
Reference in New Issue
Block a user