def test_launch_docker_mom_graceperiod(): """ Test the 'taskKillGracePeriodSeconds' in a MoM environment. This is the same test as above however tests against docker. """ app_id = uuid.uuid4().hex app_def = app_docker(app_id) app_def['container']['docker']['image'] = 'kensipe/python-test' default_graceperiod = 3 graceperiod = 20 app_def['taskKillGracePeriodSeconds'] = graceperiod app_def['cmd'] = 'python test.py' with marathon_on_marathon(): client = marathon.create_client() client.add_app(app_def) shakedown.deployment_wait() tasks = shakedown.get_service_task('marathon-user', app_id) assert tasks is not None client.scale_app(app_id, 0) tasks = shakedown.get_service_task('marathon-user', app_id) assert tasks is not None # task should still be here after the default_graceperiod time.sleep(default_graceperiod + 1) tasks = shakedown.get_service_task('marathon-user', app_id) assert tasks is not None # but not after the set graceperiod time.sleep(graceperiod) tasks = shakedown.get_service_task('marathon-user', app_id) assert tasks is None
def ignore_launch_mesos_mom_default_graceperiod(): """ Test the 'taskKillGracePeriodSeconds' in a MoM environment. Read more details on this test in `test_root_marathon.py::test_launch_mesos_root_marathon_default_graceperiod` """ app_id = uuid.uuid4().hex app_def = app_mesos(app_id) fetch = [{ "uri": "https://downloads.mesosphere.com/testing/test.py" }] app_def['fetch'] = fetch app_def['cmd'] = '/opt/mesosphere/bin/python test.py' with marathon_on_marathon(): client = marathon.create_client() client.add_app(app_def) shakedown.deployment_wait() task = shakedown.get_service_task('marathon-user', app_id) assert task is not None task_id = task.get('id') client.scale_app(app_id, 0) task = shakedown.get_service_task('marathon-user', app_id) assert task is not None # 3 sec is the default # task should be gone after 3 secs default_graceperiod = 3 time.sleep(default_graceperiod + 1) task = shakedown.get_service_task('marathon-user', app_id) assert task is None
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_def = apps.docker_http_server(app_id='launch-docker-grace-period-app') 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' app_id = app_def['id'].lstrip('/') client = marathon.create_client() client.add_app(app_def) shakedown.deployment_wait(app_id=app_id) tasks = shakedown.get_service_task(marathon_service_name, app_id) assert tasks is not None client.scale_app(app_id, 0) tasks = shakedown.get_service_task(marathon_service_name, app_id) assert tasks is not None # tasks should still be here after the default_graceperiod time.sleep(default_grace_period + 1) tasks = shakedown.get_service_task(marathon_service_name, app_id) assert tasks is not None # but not after the set grace_period time.sleep(grace_period) assert_that( lambda: shakedown.get_service_task(marathon_service_name, app_id), eventually(equal_to(None), max_attempts=30))
def test_launch_docker_graceperiod(marathon_service_name): """ Test the 'taskKillGracePeriodSeconds' in a Marathon environment. This is the same test as above however tests against docker. """ app_id = uuid.uuid4().hex app_def = app_docker(app_id) app_def['container']['docker']['image'] = 'kensipe/python-test' default_graceperiod = 3 graceperiod = 20 app_def['taskKillGracePeriodSeconds'] = graceperiod app_def['cmd'] = 'python test.py' client = marathon.create_client() client.add_app(app_def) shakedown.deployment_wait() tasks = shakedown.get_service_task(marathon_service_name, app_id) assert tasks is not None client.scale_app(app_id, 0) tasks = shakedown.get_service_task(marathon_service_name, app_id) assert tasks is not None # task should still be here after the default_graceperiod time.sleep(default_graceperiod + 1) tasks = shakedown.get_service_task(marathon_service_name, app_id) assert tasks is not None # but not after the set graceperiod time.sleep(graceperiod) tasks = shakedown.get_service_task(marathon_service_name, app_id) 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_def = apps.mesos_app(app_id='mesos-grace-period-app') 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 app_id = app_def['id'].lstrip('/') client = marathon.create_client() client.add_app(app_def) shakedown.deployment_wait(app_id=app_id) tasks = shakedown.get_service_task(marathon_service_name, app_id) assert tasks is not None client.scale_app(app_id, 0) tasks = shakedown.get_service_task(marathon_service_name, app_id) assert tasks is not None # tasks should still be here after the default_grace_period time.sleep(default_grace_period + 1) tasks = shakedown.get_service_task(marathon_service_name, app_id) assert tasks is not None # but not after the set grace_period time.sleep(grace_period) tasks = shakedown.get_service_task(marathon_service_name, app_id) assert tasks is None
def test_launch_mesos_graceperiod(marathon_service_name): """ Test the 'taskKillGracePeriodSeconds' in a Marathon environment. Read more details on this test in `test_root_marathon.py::test_launch_mesos_root_marathon_graceperiod` """ app_id = uuid.uuid4().hex app_def = app_mesos(app_id) default_graceperiod = 3 graceperiod = 20 app_def['taskKillGracePeriodSeconds'] = graceperiod fetch = [{"uri": "https://downloads.mesosphere.com/testing/test.py"}] app_def['fetch'] = fetch app_def['cmd'] = '/opt/mesosphere/bin/python test.py' client = marathon.create_client() client.add_app(app_def) shakedown.deployment_wait() tasks = shakedown.get_service_task(marathon_service_name, app_id) assert tasks is not None client.scale_app(app_id, 0) tasks = shakedown.get_service_task(marathon_service_name, app_id) assert tasks is not None # task should still be here after the default_graceperiod time.sleep(default_graceperiod + 1) tasks = shakedown.get_service_task(marathon_service_name, app_id) assert tasks is not None # but not after the set graceperiod time.sleep(graceperiod) tasks = shakedown.get_service_task(marathon_service_name, app_id) 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_def = apps.mesos_app() 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 app_id = app_def['id'].lstrip('/') client = marathon.create_client() client.add_app(app_def) shakedown.deployment_wait(app_id=app_id) tasks = shakedown.get_service_task(marathon_service_name, app_id) assert tasks is not None client.scale_app(app_id, 0) tasks = shakedown.get_service_task(marathon_service_name, app_id) assert tasks is not None # tasks should still be here after the default_grace_period time.sleep(default_grace_period + 1) tasks = shakedown.get_service_task(marathon_service_name, app_id) assert tasks is not None # but not after the set grace_period time.sleep(grace_period) tasks = shakedown.get_service_task(marathon_service_name, app_id) assert tasks is None
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_def = apps.docker_http_server() 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' app_id = app_def['id'].lstrip('/') client = marathon.create_client() client.add_app(app_def) shakedown.deployment_wait(app_id=app_id) tasks = shakedown.get_service_task(marathon_service_name, app_id) assert tasks is not None client.scale_app(app_id, 0) tasks = shakedown.get_service_task(marathon_service_name, app_id) assert tasks is not None # tasks should still be here after the default_graceperiod time.sleep(default_grace_period + 1) tasks = shakedown.get_service_task(marathon_service_name, app_id) assert tasks is not None # but not after the set grace_period time.sleep(grace_period) tasks = shakedown.get_service_task(marathon_service_name, app_id) assert tasks is None
def test_launch_mesos_root_marathon_graceperiod(): """ Test the 'taskKillGracePeriodSeconds' of a launched task from the root marathon. The default is 3 seconds. This tests setting that period to other than the default value. """ app_def = common.app_mesos() app_def['id'] = 'grace' default_graceperiod = 3 graceperiod = 20 app_def['taskKillGracePeriodSeconds'] = graceperiod fetch = [{"uri": "https://downloads.mesosphere.com/testing/test.py"}] app_def['fetch'] = fetch app_def['cmd'] = '/opt/mesosphere/bin/python test.py' client = marathon.create_client() client.add_app(app_def) shakedown.deployment_wait() tasks = shakedown.get_service_task('marathon', 'grace') assert tasks is not None client.scale_app('/grace', 0) tasks = shakedown.get_service_task('marathon', 'grace') assert tasks is not None # task should still be here after the default_graceperiod time.sleep(default_graceperiod + 1) tasks = shakedown.get_service_task('marathon', 'grace') assert tasks is not None # but not after the set graceperiod time.sleep(graceperiod) tasks = shakedown.get_service_task('marathon', 'grace') assert tasks is None
def test_launch_mesos_root_marathon_default_graceperiod(): """ Test the 'taskKillGracePeriodSeconds' of a launched task from the root marathon. The graceperiod is the time after a kill sig to allow for a graceful shutdown. The default is 3 seconds. The fetched test.py contains `signal.signal(signal.SIGTERM, signal.SIG_IGN)`. """ app_def = common.app_mesos() app_def['id'] = 'grace' fetch = [{"uri": "https://downloads.mesosphere.com/testing/test.py"}] app_def['fetch'] = fetch app_def['cmd'] = '/opt/mesosphere/bin/python test.py' # with marathon_on_marathon(): client = marathon.create_client() client.add_app(app_def) shakedown.deployment_wait() # after waiting for deployment it exists tasks = shakedown.get_service_task('marathon', 'grace') assert tasks is not None # still present after a scale down. client.scale_app('/grace', 0) tasks = shakedown.get_service_task('marathon', 'grace') assert tasks is not None # 3 sec is the default # task should be gone after 3 secs default_graceperiod = 3 time.sleep(default_graceperiod + 1) tasks = shakedown.get_service_task('marathon', 'grace') assert tasks is None
def uninstall(service, package=PACKAGE_NAME): try: task = shakedown.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) shakedown.deployment_wait() assert shakedown.wait_for_service_endpoint_removal('test-marathon') shakedown.delete_zk_node('/universe/{}'.format(service)) except Exception as e: pass
def simple_sleep_app(name): # Deploy a simple sleep app in the MoM-EE with shakedown.marathon_on_marathon(name=name): client = marathon.create_client() app_def = apps.sleep_app() client.add_app(app_def) shakedown.deployment_wait() tasks = shakedown.get_service_task(name, app_def["id"].lstrip("/")) print('MoM-EE tasks: {}'.format(tasks)) return tasks is not None
def uninstall(service, package=PACKAGE_NAME): try: task = shakedown.get_service_task(package, service) if task is not None: cosmos = packagemanager.PackageManager(get_cosmos_url()) cosmos.uninstall_app(package, True, service) shakedown.deployment_wait() assert wait_for_service_endpoint_removal('test-marathon') shakedown.delete_zk_node('/universe/{}'.format(service)) except Exception as e: pass
def test_launch_mesos_graceperiod(marathon_service_name): """ Test the 'taskKillGracePeriodSeconds' in a Marathon environment. Read more details on this test in `test_root_marathon.py::test_launch_mesos_root_marathon_graceperiod` """ app_id = uuid.uuid4().hex app_def = app_mesos(app_id) default_graceperiod = 3 graceperiod = 20 app_def['taskKillGracePeriodSeconds'] = graceperiod fetch = [{ "uri": "https://downloads.mesosphere.com/testing/test.py" }] app_def['fetch'] = fetch app_def['cmd'] = '/opt/mesosphere/bin/python test.py' client = marathon.create_client() client.add_app(app_def) shakedown.deployment_wait() tasks = shakedown.get_service_task(marathon_service_name, app_id) assert tasks is not None client.scale_app(app_id, 0) tasks = shakedown.get_service_task(marathon_service_name, app_id) assert tasks is not None # task should still be here after the default_graceperiod time.sleep(default_graceperiod + 1) tasks = shakedown.get_service_task(marathon_service_name, app_id) assert tasks is not None # but not after the set graceperiod time.sleep(graceperiod) tasks = shakedown.get_service_task(marathon_service_name, app_id) 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 = shakedown.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
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 = shakedown.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