def test_launch_docker_grace_period(marathon_service_name): """Tests 'taskKillGracePeriodSeconds' option using a Docker container in a Marathon environment. Read more details about this test in `test_root_marathon.py::test_launch_mesos_root_marathon_grace_period` """ app_id = '/launch-docker-grace-period-app' app_def = apps.docker_http_server(app_id) app_def['container']['docker']['image'] = 'kensipe/python-test' default_grace_period = 3 grace_period = 20 app_def['taskKillGracePeriodSeconds'] = grace_period app_def['cmd'] = 'python test.py' task_name = app_id.lstrip('/') client = marathon.create_client() client.add_app(app_def) deployment_wait(service_id=app_id) tasks = get_service_task(marathon_service_name, task_name) assert tasks is not None client.scale_app(app_id, 0) tasks = get_service_task(marathon_service_name, task_name) assert tasks is not None # tasks should still be here after the default_graceperiod time.sleep(default_grace_period + 1) tasks = get_service_task(marathon_service_name, task_name) assert tasks is not None # but not after the set grace_period time.sleep(grace_period) assert_that(lambda: get_service_task(marathon_service_name, task_name), eventually(equal_to(None), max_attempts=30))
def uninstall(service, package=PACKAGE_NAME): try: task = get_service_task(package, service) if task is not None: cosmos_pm = packagemanager.PackageManager(cosmos.get_cosmos_url()) cosmos_pm.uninstall_app(package, True, service) common.deployment_wait() assert common.wait_for_service_endpoint_removal('test-marathon') delete_zk_node('/universe/{}'.format(service)) except Exception: pass
def uninstall(service, package=PACKAGE_NAME): try: task = get_service_task(package, service) if task is not None: cosmos_pm = packagemanager.PackageManager(cosmos.get_cosmos_url()) cosmos_pm.uninstall_app(package, True, service) deployment_wait() assert common.wait_for_service_endpoint_removal('test-marathon') delete_zk_node('/universe/{}'.format(service)) except Exception: pass
def simple_sleep_app(mom_endpoint): # Deploy a simple sleep app in the MoM-EE with marathon_on_marathon(name=mom_endpoint) as client: app_def = apps.sleep_app() app_id = app_def["id"] client.add_app(app_def) common.deployment_wait(service_id=app_id, client=client) tasks = get_service_task(mom_endpoint, app_id.lstrip("/")) logger.info('MoM-EE tasks: {}'.format(tasks)) return tasks is not None
def simple_sleep_app(mom_endpoint): # Deploy a simple sleep app in the MoM-EE with marathon_on_marathon(name=mom_endpoint) as client: app_def = apps.sleep_app() app_id = app_def["id"] client.add_app(app_def) deployment_wait(service_id=app_id, client=client) tasks = get_service_task(mom_endpoint, app_id.lstrip("/")) logger.info('MoM-EE tasks: {}'.format(tasks)) return tasks is not None
def test_launch_mesos_grace_period(marathon_service_name): """Tests 'taskKillGracePeriodSeconds' option using a Mesos container in a Marathon environment. Read more details about this test in `test_root_marathon.py::test_launch_mesos_root_marathon_grace_period` """ app_id = '/mesos-grace-period-app' app_def = apps.mesos_app(app_id) default_grace_period = 3 grace_period = 20 app_def['fetch'] = [{ "uri": "https://downloads.mesosphere.com/testing/test.py" }] app_def['cmd'] = '/opt/mesosphere/bin/python test.py' app_def['taskKillGracePeriodSeconds'] = grace_period task_name = app_id.lstrip('/') client = marathon.create_client() client.add_app(app_def) deployment_wait(service_id=app_id) tasks = get_service_task(marathon_service_name, task_name) assert tasks is not None client.scale_app(app_id, 0) tasks = get_service_task(marathon_service_name, task_name) assert tasks is not None # tasks should still be here after the default_grace_period time.sleep(default_grace_period + 1) tasks = get_service_task(marathon_service_name, task_name) assert tasks is not None # but not after the set grace_period time.sleep(grace_period) tasks = get_service_task(marathon_service_name, task_name) assert tasks is None
def test_launch_mesos_grace_period(marathon_service_name): """Tests 'taskKillGracePeriodSeconds' option using a Mesos container in a Marathon environment. Read more details about this test in `test_root_marathon.py::test_launch_mesos_root_marathon_grace_period` """ app_id = '/mesos-grace-period-app' app_def = apps.mesos_app(app_id) default_grace_period = 3 grace_period = 20 app_def['fetch'] = [{"uri": "https://downloads.mesosphere.com/testing/test.py"}] app_def['cmd'] = '/opt/mesosphere/bin/python test.py' app_def['taskKillGracePeriodSeconds'] = grace_period task_name = app_id.lstrip('/') client = marathon.create_client() client.add_app(app_def) deployment_wait(service_id=app_id) tasks = get_service_task(marathon_service_name, task_name) assert tasks is not None client.scale_app(app_id, 0) tasks = get_service_task(marathon_service_name, task_name) assert tasks is not None # tasks should still be here after the default_grace_period time.sleep(default_grace_period + 1) tasks = get_service_task(marathon_service_name, task_name) assert tasks is not None # but not after the set grace_period time.sleep(grace_period) tasks = get_service_task(marathon_service_name, task_name) assert tasks is None
def wait_for_task(service, task, timeout_sec=120): """Waits for a task which was launched to be launched""" now = time.time() future = now + timeout_sec while now < future: response = None try: response = get_service_task(service, task) except Exception: pass if response is not None and response['state'] == 'TASK_RUNNING': return response else: time.sleep(5) now = time.time() return None