Modify Member tests for Provider Drivers

There is a possibility that the provider drivers may not support some
functionality. Member API tests are very closely coupled with Monitors,
so in case if a provider driver doesnt support monitors, the Octavia
API tests may not give the correct response. The following patch
attempts to split the same.

Change-Id: Idc0965550a57d4424a7d4f27525bf345324bd68a
This commit is contained in:
Reedip 2018-08-31 07:36:25 +00:00
parent a128c99bb3
commit 9169029d1a
1 changed files with 55 additions and 31 deletions

View File

@ -99,6 +99,14 @@ class MemberAPITest(test_base.LoadBalancerBaseTest):
CONF.load_balancer.build_interval, CONF.load_balancer.build_interval,
CONF.load_balancer.build_timeout) CONF.load_balancer.build_timeout)
def _create_member_and_get_monitor_status(self, **member_kwargs):
monitor = CONF.loadbalancer_feature_enabled.health_monitor_enabled
if not monitor:
del member_kwargs[const.MONITOR_ADDRESS]
del member_kwargs[const.MONITOR_PORT]
member = self.mem_member_client.create_member(**member_kwargs)
return member, monitor
# Note: This test also covers basic member show API # Note: This test also covers basic member show API
@decorators.idempotent_id('0623aa1f-753d-44e7-afa1-017d274eace7') @decorators.idempotent_id('0623aa1f-753d-44e7-afa1-017d274eace7')
def test_member_ipv4_create(self): def test_member_ipv4_create(self):
@ -117,6 +125,7 @@ class MemberAPITest(test_base.LoadBalancerBaseTest):
* Tests that users without the loadbalancer member role cannot * Tests that users without the loadbalancer member role cannot
create members. create members.
* Create a fully populated member. * Create a fully populated member.
* If driver doesnt support Monitors, allow to create without monitor
* Show member details. * Show member details.
* Validate the show reflects the requested values. * Validate the show reflects the requested values.
""" """
@ -156,7 +165,9 @@ class MemberAPITest(test_base.LoadBalancerBaseTest):
self.os_primary.member_client.create_member, self.os_primary.member_client.create_member,
**member_kwargs) **member_kwargs)
member = self.mem_member_client.create_member(**member_kwargs) member, monitor = self._create_member_and_get_monitor_status(
**member_kwargs)
self.addClassResourceCleanup( self.addClassResourceCleanup(
self.mem_member_client.cleanup_member, self.mem_member_client.cleanup_member,
member[const.ID], pool_id=self.pool_id, member[const.ID], pool_id=self.pool_id,
@ -181,13 +192,13 @@ class MemberAPITest(test_base.LoadBalancerBaseTest):
self.assertEqual(const.NO_MONITOR, member[const.OPERATING_STATUS]) self.assertEqual(const.NO_MONITOR, member[const.OPERATING_STATUS])
equal_items = [const.NAME, const.ADMIN_STATE_UP, const.ADDRESS, equal_items = [const.NAME, const.ADMIN_STATE_UP, const.ADDRESS,
const.PROTOCOL_PORT, const.WEIGHT, const.PROTOCOL_PORT, const.WEIGHT]
const.MONITOR_ADDRESS, const.MONITOR_PORT]
if self.mem_member_client.is_version_supported( if self.mem_member_client.is_version_supported(
self.api_version, '2.1'): self.api_version, '2.1'):
equal_items.append(const.BACKUP) equal_items.append(const.BACKUP)
if monitor:
equal_items += [const.MONITOR_ADDRESS, const.MONITOR_PORT]
if const.SUBNET_ID in member_kwargs: if const.SUBNET_ID in member_kwargs:
equal_items.append(const.SUBNET_ID) equal_items.append(const.SUBNET_ID)
else: else:
@ -451,7 +462,9 @@ class MemberAPITest(test_base.LoadBalancerBaseTest):
member_kwargs[const.SUBNET_ID] = self.lb_member_vip_subnet[ member_kwargs[const.SUBNET_ID] = self.lb_member_vip_subnet[
const.ID] const.ID]
member = self.mem_member_client.create_member(**member_kwargs) member, monitor = self._create_member_and_get_monitor_status(
**member_kwargs)
self.addClassResourceCleanup( self.addClassResourceCleanup(
self.mem_member_client.cleanup_member, self.mem_member_client.cleanup_member,
member[const.ID], pool_id=self.pool_id, member[const.ID], pool_id=self.pool_id,
@ -476,13 +489,14 @@ class MemberAPITest(test_base.LoadBalancerBaseTest):
self.assertEqual(const.NO_MONITOR, member[const.OPERATING_STATUS]) self.assertEqual(const.NO_MONITOR, member[const.OPERATING_STATUS])
equal_items = [const.NAME, const.ADMIN_STATE_UP, const.ADDRESS, equal_items = [const.NAME, const.ADMIN_STATE_UP, const.ADDRESS,
const.PROTOCOL_PORT, const.WEIGHT, const.PROTOCOL_PORT, const.WEIGHT]
const.MONITOR_ADDRESS, const.MONITOR_PORT]
if self.mem_member_client.is_version_supported( if self.mem_member_client.is_version_supported(
self.api_version, '2.1'): self.api_version, '2.1'):
equal_items.append(const.BACKUP) equal_items.append(const.BACKUP)
if monitor:
equal_items += [const.MONITOR_ADDRESS, const.MONITOR_PORT]
if const.SUBNET_ID in member_kwargs: if const.SUBNET_ID in member_kwargs:
equal_items.append(const.SUBNET_ID) equal_items.append(const.SUBNET_ID)
else: else:
@ -553,7 +567,9 @@ class MemberAPITest(test_base.LoadBalancerBaseTest):
member_kwargs[const.SUBNET_ID] = self.lb_member_vip_subnet[ member_kwargs[const.SUBNET_ID] = self.lb_member_vip_subnet[
const.ID] const.ID]
member = self.mem_member_client.create_member(**member_kwargs) member, monitor = self._create_member_and_get_monitor_status(
**member_kwargs)
self.addClassResourceCleanup( self.addClassResourceCleanup(
self.mem_member_client.cleanup_member, self.mem_member_client.cleanup_member,
member[const.ID], pool_id=self.pool_id, member[const.ID], pool_id=self.pool_id,
@ -571,27 +587,30 @@ class MemberAPITest(test_base.LoadBalancerBaseTest):
CONF.load_balancer.build_interval, CONF.load_balancer.build_interval,
CONF.load_balancer.build_timeout, CONF.load_balancer.build_timeout,
pool_id=self.pool_id) pool_id=self.pool_id)
if not CONF.load_balancer.test_with_noop: status = const.OFFLINE
member = waiters.wait_for_status( if not monitor or CONF.load_balancer.test_with_noop:
self.mem_member_client.show_member, status = const.NO_MONITOR
member[const.ID], const.OPERATING_STATUS, member = waiters.wait_for_status(
const.OFFLINE, self.mem_member_client.show_member,
CONF.load_balancer.build_interval, member[const.ID], const.OPERATING_STATUS,
CONF.load_balancer.build_timeout, status,
pool_id=self.pool_id) CONF.load_balancer.build_interval,
CONF.load_balancer.build_timeout,
pool_id=self.pool_id)
parser.parse(member[const.CREATED_AT]) parser.parse(member[const.CREATED_AT])
parser.parse(member[const.UPDATED_AT]) parser.parse(member[const.UPDATED_AT])
UUID(member[const.ID]) UUID(member[const.ID])
equal_items = [const.NAME, const.ADMIN_STATE_UP, const.ADDRESS, equal_items = [const.NAME, const.ADMIN_STATE_UP, const.ADDRESS,
const.PROTOCOL_PORT, const.WEIGHT, const.PROTOCOL_PORT, const.WEIGHT]
const.MONITOR_ADDRESS, const.MONITOR_PORT]
if self.mem_member_client.is_version_supported( if self.mem_member_client.is_version_supported(
self.api_version, '2.1'): self.api_version, '2.1'):
equal_items.append(const.BACKUP) equal_items.append(const.BACKUP)
if monitor:
equal_items += [const.MONITOR_ADDRESS, const.MONITOR_PORT]
if const.SUBNET_ID in member_kwargs: if const.SUBNET_ID in member_kwargs:
equal_items.append(const.SUBNET_ID) equal_items.append(const.SUBNET_ID)
else: else:
@ -600,8 +619,9 @@ class MemberAPITest(test_base.LoadBalancerBaseTest):
for item in equal_items: for item in equal_items:
self.assertEqual(member_kwargs[item], member[item]) self.assertEqual(member_kwargs[item], member[item])
if CONF.load_balancer.test_with_noop: if CONF.load_balancer.test_with_noop or not monitor:
# Operating status with noop will stay in NO_MONITOR # Operating status with noop or Driver not supporting Monitors
# will stay in NO_MONITOR
self.assertEqual(const.NO_MONITOR, member[const.OPERATING_STATUS]) self.assertEqual(const.NO_MONITOR, member[const.OPERATING_STATUS])
else: else:
# Operating status will be OFFLINE while admin_state_up = False # Operating status will be OFFLINE while admin_state_up = False
@ -646,18 +666,18 @@ class MemberAPITest(test_base.LoadBalancerBaseTest):
const.NAME: new_name, const.NAME: new_name,
const.ADMIN_STATE_UP: not member[const.ADMIN_STATE_UP], const.ADMIN_STATE_UP: not member[const.ADMIN_STATE_UP],
const.WEIGHT: member[const.WEIGHT] + 1, const.WEIGHT: member[const.WEIGHT] + 1,
const.MONITOR_ADDRESS: '192.0.2.3',
const.MONITOR_PORT: member[const.MONITOR_PORT] + 1,
} }
if self.mem_member_client.is_version_supported( if self.mem_member_client.is_version_supported(
self.api_version, '2.1'): self.api_version, '2.1'):
member_update_kwargs.update({ member_update_kwargs.update({
const.BACKUP: not member[const.BACKUP] const.BACKUP: not member[const.BACKUP]
}) })
if monitor:
member_update_kwargs[const.MONITOR_ADDRESS] = '192.0.2.3'
member_update_kwargs[const.MONITOR_PORT] = member[
const.MONITOR_PORT] + 1
member = self.mem_member_client.update_member( member = self.mem_member_client.update_member(
member[const.ID], **member_update_kwargs) member[const.ID], **member_update_kwargs)
waiters.wait_for_status( waiters.wait_for_status(
self.mem_lb_client.show_loadbalancer, self.lb_id, self.mem_lb_client.show_loadbalancer, self.lb_id,
const.PROVISIONING_STATUS, const.ACTIVE, const.PROVISIONING_STATUS, const.ACTIVE,
@ -683,13 +703,14 @@ class MemberAPITest(test_base.LoadBalancerBaseTest):
self.assertEqual(const.NO_MONITOR, member[const.OPERATING_STATUS]) self.assertEqual(const.NO_MONITOR, member[const.OPERATING_STATUS])
# Test changed items # Test changed items
equal_items = [const.NAME, const.ADMIN_STATE_UP, const.WEIGHT, equal_items = [const.NAME, const.ADMIN_STATE_UP, const.WEIGHT]
const.MONITOR_ADDRESS, const.MONITOR_PORT]
if self.mem_member_client.is_version_supported( if self.mem_member_client.is_version_supported(
self.api_version, '2.1'): self.api_version, '2.1'):
equal_items.append(const.BACKUP) equal_items.append(const.BACKUP)
if monitor:
equal_items += [const.MONITOR_ADDRESS, const.MONITOR_PORT]
for item in equal_items: for item in equal_items:
self.assertEqual(member_update_kwargs[item], member[item]) self.assertEqual(member_update_kwargs[item], member[item])
@ -748,8 +769,9 @@ class MemberAPITest(test_base.LoadBalancerBaseTest):
if self.lb_member_vip_subnet: if self.lb_member_vip_subnet:
member1_kwargs[const.SUBNET_ID] = self.lb_member_vip_subnet[ member1_kwargs[const.SUBNET_ID] = self.lb_member_vip_subnet[
const.ID] const.ID]
member1, monitor = self._create_member_and_get_monitor_status(
**member1_kwargs)
member1 = self.mem_member_client.create_member(**member1_kwargs)
self.addClassResourceCleanup( self.addClassResourceCleanup(
self.mem_member_client.cleanup_member, self.mem_member_client.cleanup_member,
member1[const.ID], pool_id=pool_id, member1[const.ID], pool_id=pool_id,
@ -770,8 +792,6 @@ class MemberAPITest(test_base.LoadBalancerBaseTest):
const.ADDRESS: '192.0.2.3', const.ADDRESS: '192.0.2.3',
const.PROTOCOL_PORT: 81, const.PROTOCOL_PORT: 81,
const.WEIGHT: 51, const.WEIGHT: 51,
const.MONITOR_ADDRESS: '192.0.2.4',
const.MONITOR_PORT: 8081,
} }
if self.mem_member_client.is_version_supported( if self.mem_member_client.is_version_supported(
self.api_version, '2.1'): self.api_version, '2.1'):
@ -779,6 +799,9 @@ class MemberAPITest(test_base.LoadBalancerBaseTest):
const.BACKUP: True, const.BACKUP: True,
}) })
if monitor:
member2_kwargs[const.MONITOR_ADDRESS] = '192.0.2.4'
member2_kwargs[const.MONITOR_PORT] = 8081
if self.lb_member_vip_subnet: if self.lb_member_vip_subnet:
member2_kwargs[const.SUBNET_ID] = self.lb_member_vip_subnet[ member2_kwargs[const.SUBNET_ID] = self.lb_member_vip_subnet[
const.ID] const.ID]
@ -803,8 +826,6 @@ class MemberAPITest(test_base.LoadBalancerBaseTest):
const.ADDRESS: '192.0.2.5', const.ADDRESS: '192.0.2.5',
const.PROTOCOL_PORT: 82, const.PROTOCOL_PORT: 82,
const.WEIGHT: 52, const.WEIGHT: 52,
const.MONITOR_ADDRESS: '192.0.2.6',
const.MONITOR_PORT: 8082,
} }
if self.mem_member_client.is_version_supported( if self.mem_member_client.is_version_supported(
self.api_version, '2.1'): self.api_version, '2.1'):
@ -812,6 +833,9 @@ class MemberAPITest(test_base.LoadBalancerBaseTest):
const.BACKUP: True, const.BACKUP: True,
}) })
if monitor:
member2_kwargs[const.MONITOR_ADDRESS] = '192.0.2.6'
member2_kwargs[const.MONITOR_PORT] = 8082
if self.lb_member_vip_subnet: if self.lb_member_vip_subnet:
member3_kwargs[const.SUBNET_ID] = self.lb_member_vip_subnet[ member3_kwargs[const.SUBNET_ID] = self.lb_member_vip_subnet[
const.ID] const.ID]