def test_pod_health_failed_check(): """Deploys a pod with correct health checks, then partitions the network and verifies that the tasks get restarted with new task IDs. """ pod_def = pods.ports_pod() pod_id = pod_def['id'] host = common.ip_other_than_mom() common.pin_pod_to_host(pod_def, host) client = marathon.create_client() client.add_pod(pod_def) common.deployment_wait(service_id=pod_id) tasks = common.get_pod_tasks(pod_id) initial_id1 = tasks[0]['id'] initial_id2 = tasks[1]['id'] pod = client.list_pod()[0] container1 = pod['instances'][0]['containers'][0] port = container1['endpoints'][0]['allocatedHostPort'] common.save_iptables(host) common.block_port(host, port) time.sleep(7) common.restore_iptables(host) common.deployment_wait(service_id=pod_id) tasks = common.get_pod_tasks(pod_id) for task in tasks: assert task[ 'id'] != initial_id1, "One of the tasks has not been restarted" assert task[ 'id'] != initial_id2, "One of the tasks has not been restarted"
def test_pod_health_failed_check(): """Deploys a pod with correct health checks, then partitions the network and verifies that the tasks get restarted with new task IDs. """ pod_def = pods.ports_pod() pod_id = pod_def['id'] host = common.ip_other_than_mom() common.pin_pod_to_host(pod_def, host) client = marathon.create_client() client.add_pod(pod_def) common.deployment_wait(service_id=pod_id) tasks = common.get_pod_tasks(pod_id) initial_id1 = tasks[0]['id'] initial_id2 = tasks[1]['id'] pod = client.list_pod()[0] container1 = pod['instances'][0]['containers'][0] port = container1['endpoints'][0]['allocatedHostPort'] common.block_iptable_rules_for_seconds(host, port, 7, block_input=True, block_output=False) common.deployment_wait(service_id=pod_id) tasks = common.get_pod_tasks(pod_id) for new_task in tasks: new_task_id = new_task['id'] assert new_task_id != initial_id1, f"Task {new_task_id} has not been restarted" # NOQA E999 assert new_task_id != initial_id2, f"Task {new_task_id} has not been restarted"
def test_pod_health_check(): """Tests that health checks work for pods.""" pod_def = pods.ports_pod() pod_id = pod_def['id'] client = marathon.create_client() client.add_pod(pod_def) common.deployment_wait(service_id=pod_id) tasks = common.get_pod_tasks(pod_id) for task in tasks: health = common.running_task_status(task['statuses'])['healthy'] assert health, "One of the pod's tasks (%s) is unhealthy" % (task['name'])
def test_pod_health_check(): """Tests that health checks work for pods.""" pod_def = pods.ports_pod() client = marathon.create_client() client.add_pod(pod_def) shakedown.deployment_wait() tasks = common.get_pod_tasks(pod_def["id"]) c1_health = tasks[0]['statuses'][0]['healthy'] c2_health = tasks[1]['statuses'][0]['healthy'] assert c1_health, "One of the pod's tasks is unhealthy" assert c2_health, "One of the pod's tasks is unhealthy"
def test_pod_multi_port(): """A pod with two containers is properly provisioned so that each container has a unique port.""" pod_def = pods.ports_pod() client = marathon.create_client() client.add_pod(pod_def) shakedown.deployment_wait() pod = client.show_pod(pod_def["id"]) container1 = pod['instances'][0]['containers'][0] port1 = container1['endpoints'][0]['allocatedHostPort'] container2 = pod['instances'][0]['containers'][1] port2 = container2['endpoints'][0]['allocatedHostPort'] assert port1 != port2, "Containers' ports are equal, but they should be different"
def test_pod_health_check(): """Tests that health checks work for pods.""" pod_def = pods.ports_pod() pod_id = pod_def['id'] client = marathon.create_client() client.add_pod(pod_def) common.deployment_wait(service_id=pod_id) @retrying.retry(wait_fixed=1000, wait_exponential_max=30000, retry_on_exception=common.ignore_exception) def assert_all_pods_healthy(pod_id): tasks = common.get_pod_tasks(pod_id) for task in tasks: health = common.running_task_status(task['statuses'])['healthy'] assert health, "One of the pod's tasks (%s) is unhealthy" % (task['name']) assert_all_pods_healthy(pod_id)
def test_pin_pod(): """Tests that a pod can be pinned to a specific host.""" pod_def = pods.ports_pod() pod_id = pod_def['id'] host = common.ip_other_than_mom() common.pin_pod_to_host(pod_def, host) client = marathon.create_client() client.add_pod(pod_def) common.deployment_wait(service_id=pod_id) tasks = common.get_pod_tasks(pod_id) assert len(tasks) == 2, "The number of tasks is {} after deployment, but 2 was expected".format(len(tasks)) pod = client.list_pod()[0] assert pod['instances'][0]['agentHostname'] == host, "The pod didn't get pinned to {}".format(host)
def test_pod_multi_port(): """A pod with two containers is properly provisioned so that each container has a unique port.""" pod_def = pods.ports_pod() pod_id = pod_def['id'] client = marathon.create_client() client.add_pod(pod_def) common.deployment_wait(service_id=pod_id) pod = client.show_pod(pod_id) container1 = pod['instances'][0]['containers'][0] port1 = container1['endpoints'][0]['allocatedHostPort'] container2 = pod['instances'][0]['containers'][1] port2 = container2['endpoints'][0]['allocatedHostPort'] assert port1 != port2, "Containers' ports are equal, but they should be different"
def test_pod_health_check(): """Tests that health checks work for pods.""" pod_def = pods.ports_pod() pod_id = pod_def['id'] client = marathon.create_client() client.add_pod(pod_def) deployment_wait(service_id=pod_id) @retrying.retry(wait_fixed=1000, wait_exponential_max=30000, retry_on_exception=common.ignore_exception) def assert_all_pods_healthy(pod_id): tasks = common.get_pod_tasks(pod_id) for task in tasks: health = common.running_task_status(task['statuses'])['healthy'] assert health, "One of the pod's tasks (%s) is unhealthy" % (task['name']) assert_all_pods_healthy(pod_id)
def test_pod_port_communication(): """ Test that 1 container can establish a socket connection to the other container in the same pod. """ pod_def = pods.ports_pod() pod_id = pod_def['id'] cmd = 'sleep 2; ' \ 'curl -m 2 localhost:$ENDPOINT_HTTPENDPOINT; ' \ 'if [ $? -eq 7 ]; then exit; fi; ' \ '/opt/mesosphere/bin/python -m http.server $ENDPOINT_HTTPENDPOINT2' pod_def['containers'][1]['exec']['command']['shell'] = cmd client = marathon.create_client() client.add_pod(pod_def) common.deployment_wait(service_id=pod_id) tasks = common.get_pod_tasks(pod_id) assert len(tasks) == 2, "The number of tasks is {} after deployment, but 2 was expected".format(len(tasks))