Fixing casual failing of nc service in LBaaS
Netcat quits after first web connection to it, causing test
to fail with HTTP 503 error. In Cirros 0.3.3 nc doesn't support
"-ll" option for persistence listening.
Added catching HTTP exceptions, and infinite cycle for netcat.
Fixed network finding. Fixed command string to be more pythonic.
Closes-Bug: #1384708
Change-Id: Ib9c9cd3d0040003d0296426d8a7ce800c193f22b
diff --git a/tempest/scenario/test_load_balancer_basic.py b/tempest/scenario/test_load_balancer_basic.py
index d061406..7240208 100644
--- a/tempest/scenario/test_load_balancer_basic.py
+++ b/tempest/scenario/test_load_balancer_basic.py
@@ -125,8 +125,8 @@
keypair = self.create_keypair()
security_groups = [self.security_group]
create_kwargs = {
- 'nics': [
- {'net-id': self.network['id']},
+ 'networks': [
+ {'uuid': self.network['id']},
],
'key_name': keypair['name'],
'security_groups': security_groups,
@@ -170,9 +170,9 @@
private_key=private_key)
# Write a backend's response into a file
- resp = """echo -ne "HTTP/1.1 200 OK\r\nContent-Length: 7\r\n""" \
- """Connection: close\r\nContent-Type: text/html; """ \
- """charset=UTF-8\r\n\r\n%s"; cat >/dev/null"""
+ resp = ('echo -ne "HTTP/1.1 200 OK\r\nContent-Length: 7\r\n'
+ 'Connection: close\r\nContent-Type: text/html; '
+ 'charset=UTF-8\r\n\r\n%s"; cat >/dev/null')
with tempfile.NamedTemporaryFile() as script:
script.write(resp % server_name)
@@ -186,8 +186,9 @@
username, key.name)
# Start netcat
- start_server = """sudo nc -ll -p %(port)s -e sh """ \
- """/tmp/%(script)s &"""
+ start_server = ('while true; do '
+ 'sudo nc -l -p %(port)s -e sh /tmp/%(script)s; '
+ 'done &')
cmd = start_server % {'port': self.port1,
'script': 'script1'}
ssh_client.exec_command(cmd)
@@ -215,6 +216,8 @@
return False
except IOError:
return False
+ except urllib2.HTTPError:
+ return False
timeout = config.compute.ping_timeout
start = time.time()
while not try_connect(check_ip, port):
@@ -297,8 +300,13 @@
def _send_requests(self, vip_ip, servers):
counters = dict.fromkeys(servers, 0)
for i in range(self.num):
- server = urllib2.urlopen("http://{0}/".format(vip_ip)).read()
- counters[server] += 1
+ try:
+ server = urllib2.urlopen("http://{0}/".format(vip_ip)).read()
+ counters[server] += 1
+ # HTTP exception means fail of server, so don't increase counter
+ # of success and continue connection tries
+ except urllib2.HTTPError:
+ continue
# Assert that each member of the pool gets balanced at least once
for member, counter in counters.iteritems():
self.assertGreater(counter, 0, 'Member %s never balanced' % member)