Merge "Get rid of cmp() usage and randomize pod labels"
This commit is contained in:
commit
f02385f453
|
@ -238,6 +238,7 @@ class BaseKuryrScenarioTest(manager.NetworkScenarioTest):
|
|||
try:
|
||||
time.sleep(5)
|
||||
session.get("http://{0}".format(service_ip), timeout=2)
|
||||
|
||||
return
|
||||
except Exception:
|
||||
LOG.warning('No initial traffic is passing through.')
|
||||
|
@ -247,14 +248,17 @@ class BaseKuryrScenarioTest(manager.NetworkScenarioTest):
|
|||
raise lib_exc.ServerFault()
|
||||
|
||||
@classmethod
|
||||
def create_setup_for_service_test(cls, pod_num=2, spec_type="ClusterIP"):
|
||||
def create_setup_for_service_test(cls, pod_num=2, spec_type="ClusterIP",
|
||||
label=None):
|
||||
label = label or data_utils.rand_name('kuryr-app')
|
||||
for i in range(pod_num):
|
||||
pod_name, pod = cls.create_pod(
|
||||
labels={"app": 'pod-label'}, image='kuryr/demo')
|
||||
labels={"app": label}, image='kuryr/demo')
|
||||
cls.addClassResourceCleanup(cls.delete_pod, pod_name)
|
||||
service_name, service_obj = cls.create_service(
|
||||
pod_label=pod.metadata.labels, spec_type=spec_type)
|
||||
cls.service_ip = cls.get_service_ip(service_name, spec_type=spec_type)
|
||||
cls.verify_lbaas_endpoints_configured(service_name)
|
||||
cls.wait_service_status(
|
||||
cls.service_ip, CONF.kuryr_kubernetes.lb_build_timeout)
|
||||
|
||||
|
@ -297,3 +301,34 @@ class BaseKuryrScenarioTest(manager.NetworkScenarioTest):
|
|||
return [pod.metadata.name for pod in
|
||||
self.k8s_client.CoreV1Api().list_namespaced_pod(
|
||||
namespace=namespace).items]
|
||||
|
||||
def _run_and_assert_fn(self, fn, repeats=10, responses_num=2):
|
||||
cmd_outputs = set()
|
||||
for i in range(repeats):
|
||||
cmd_outputs.add(fn())
|
||||
self.assertEqual(responses_num, len(cmd_outputs),
|
||||
'Number of exclusive responses is incorrect. '
|
||||
'Got %s.' % cmd_outputs)
|
||||
|
||||
@classmethod
|
||||
def verify_lbaas_endpoints_configured(cls, ep_name, namespace='default'):
|
||||
cls._verify_endpoints_annotation(
|
||||
ep_name=ep_name, ann_string=K8S_ANNOTATION_LBAAS_STATE,
|
||||
poll_interval=10)
|
||||
|
||||
@classmethod
|
||||
def _verify_endpoints_annotation(cls, ep_name, ann_string,
|
||||
poll_interval=1, namespace='default'):
|
||||
# wait until endpoint annotation created
|
||||
while True:
|
||||
time.sleep(poll_interval)
|
||||
ep = cls.k8s_client.CoreV1Api().read_namespaced_endpoints(
|
||||
ep_name, namespace)
|
||||
annotations = ep.metadata.annotations
|
||||
try:
|
||||
json.loads(annotations[ann_string])
|
||||
return
|
||||
except KeyError:
|
||||
LOG.info("Waiting till %s will appears "
|
||||
"in ep=%s annotation ", ann_string, ep_name)
|
||||
continue
|
||||
|
|
|
@ -43,33 +43,35 @@ class TestServiceScenario(base.BaseKuryrScenarioTest):
|
|||
|
||||
@decorators.idempotent_id('bddf5441-1244-449d-a125-b5fdcfc1a1a9')
|
||||
def test_service_curl(self):
|
||||
cmd_output_list = list()
|
||||
LOG.info("Trying to curl the service IP %s" % self.service_ip)
|
||||
cmd = "curl {dst_ip}".format(dst_ip=self.service_ip)
|
||||
for i in range(2):
|
||||
|
||||
def curl():
|
||||
try:
|
||||
cmd_output_list.append(
|
||||
subprocess.check_output(shlex.split(cmd)))
|
||||
return subprocess.check_output(shlex.split(cmd))
|
||||
except subprocess.CalledProcessError:
|
||||
LOG.error("Checking output of curl to the service IP %s "
|
||||
"failed" % self.service_ip)
|
||||
raise lib_exc.UnexpectedResponseCode()
|
||||
self.assertNotEqual(cmp(cmd_output_list[0], cmd_output_list[1]), '0')
|
||||
|
||||
self._run_and_assert_fn(curl)
|
||||
|
||||
@decorators.idempotent_id('bddf5441-1244-449d-a125-b5fdcfa1a7a9')
|
||||
def test_pod_service_curl(self):
|
||||
cmd_output_list = list()
|
||||
pod_name, pod = self.create_pod()
|
||||
self.addCleanup(self.delete_pod, pod_name)
|
||||
cmd = [
|
||||
"/bin/sh", "-c", "curl {dst_ip}".format(dst_ip=self.service_ip)]
|
||||
for i in range(2):
|
||||
cmd_output_list.append(self.exec_command_in_pod(pod_name, cmd))
|
||||
|
||||
def curl():
|
||||
output = self.exec_command_in_pod(pod_name, cmd)
|
||||
# check if the curl command succeeded
|
||||
if not cmd_output_list[i]:
|
||||
if not output:
|
||||
LOG.error("Curl the service IP %s failed" % self.service_ip)
|
||||
raise lib_exc.UnexpectedResponseCode()
|
||||
self.assertNotEqual(cmp(cmd_output_list[0], cmd_output_list[1]), '0')
|
||||
return output
|
||||
|
||||
self._run_and_assert_fn(curl)
|
||||
|
||||
|
||||
class TestLoadBalancerServiceScenario(base.BaseKuryrScenarioTest):
|
||||
|
@ -89,15 +91,15 @@ class TestLoadBalancerServiceScenario(base.BaseKuryrScenarioTest):
|
|||
|
||||
@decorators.idempotent_id('bddf5441-1244-449d-a175-b5fdcfc2a1a9')
|
||||
def test_lb_service_curl(self):
|
||||
cmd_output_list = list()
|
||||
LOG.info("Trying to curl the service IP %s" % self.service_ip)
|
||||
cmd = "curl {dst_ip}".format(dst_ip=self.service_ip)
|
||||
for i in range(2):
|
||||
|
||||
def curl():
|
||||
try:
|
||||
cmd_output_list.append(
|
||||
subprocess.check_output(shlex.split(cmd)))
|
||||
return subprocess.check_output(shlex.split(cmd))
|
||||
except subprocess.CalledProcessError:
|
||||
LOG.error("Checking output of curl to the service IP %s "
|
||||
"failed" % self.service_ip)
|
||||
raise lib_exc.UnexpectedResponseCode()
|
||||
self.assertNotEqual(cmp(cmd_output_list[0], cmd_output_list[1]), '0')
|
||||
|
||||
self._run_and_assert_fn(curl)
|
||||
|
|
Loading…
Reference in New Issue