This is an automated email from the ASF dual-hosted git repository.
klueska pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/mesos.git
The following commit(s) were added to refs/heads/master by this push:
new 18e51b8 Replaced CLI test helper function 'running_tasks' by
'wait_for_task'.
18e51b8 is described below
commit 18e51b86fac848330dea640d7b7b7bf2d6584fe5
Author: Armand Grillet <[email protected]>
AuthorDate: Mon Nov 26 08:47:25 2018 -0500
Replaced CLI test helper function 'running_tasks' by 'wait_for_task'.
Replaces 'running_tasks(master)', a function that was not generic nor
explicit, by 'wait_for_task(master, name, state, delay)'. This helper
function waits a 'delay' for a task with a given 'name' to be in a
certain 'state'.
All uses of 'running_tasks' have been replaced by the new function.
Review: https://reviews.apache.org/r/69426/
---
src/python/cli_new/lib/cli/tests/base.py | 19 ++++----
src/python/cli_new/lib/cli/tests/task.py | 84 +++++++++++++++++++++++++-------
2 files changed, 77 insertions(+), 26 deletions(-)
diff --git a/src/python/cli_new/lib/cli/tests/base.py
b/src/python/cli_new/lib/cli/tests/base.py
index 58c96d7..e3104fe 100644
--- a/src/python/cli_new/lib/cli/tests/base.py
+++ b/src/python/cli_new/lib/cli/tests/base.py
@@ -31,6 +31,7 @@ import parse
from tenacity import retry
from tenacity import stop_after_delay
+from tenacity import wait_fixed
from cli import http
@@ -503,19 +504,19 @@ def popen_tty(cmd, shell=True):
return (proc, master)
-def running_tasks(master):
+def wait_for_task(master, name, state, delay=1):
"""
- Open the master's `/tasks` endpoint and read the task information.
- Retry for up to 1 second before giving up.
+ Wait for a task with a certain name to be in a given state.
"""
- @retry(stop=stop_after_delay(1))
- def _running_tasks():
+ @retry(wait=wait_fixed(0.2), stop=stop_after_delay(delay))
+ def _wait_for_task():
tasks = http.get_json(master.addr, "tasks")["tasks"]
- if tasks[0]["state"] == "TASK_RUNNING":
- return tasks
+ for task in tasks:
+ if task["name"] == name and task["state"] == state:
+ return task
raise Exception()
try:
- return _running_tasks()
+ return _wait_for_task()
except Exception:
- return []
+ raise CLIException("Timeout waiting for task expired")
diff --git a/src/python/cli_new/lib/cli/tests/task.py
b/src/python/cli_new/lib/cli/tests/task.py
index eb01bf5..69ed823 100644
--- a/src/python/cli_new/lib/cli/tests/task.py
+++ b/src/python/cli_new/lib/cli/tests/task.py
@@ -21,6 +21,7 @@ Task plugin tests.
import os
from cli import config
+from cli import http
from cli.exceptions import CLIException
@@ -28,7 +29,7 @@ from cli.plugins.task.main import Task as TaskPlugin
from cli.tests import capture_output
from cli.tests import exec_command
-from cli.tests import running_tasks
+from cli.tests import wait_for_task
from cli.tests import CLITestCase
from cli.tests import Agent
from cli.tests import Master
@@ -62,10 +63,23 @@ class TestTaskPlugin(CLITestCase):
task = Task({"command": command})
task.launch()
- tasks = running_tasks(master)
- if not tasks:
- raise CLIException("Unable to find running tasks on master"
- " '{master}'".format(master=master.addr))
+ try:
+ wait_for_task(master, task.name, "TASK_RUNNING")
+ except Exception as exception:
+ raise CLIException(
+ "Error waiting for task '{name}' to"
+ " reach state '{state}': {error}"
+ .format(name=task.name, state="TASK_RUNNING", error=exception))
+
+ try:
+ tasks = http.get_json(master.addr, "tasks")["tasks"]
+ except Exception as exception:
+ raise CLIException(
+ "Could not get tasks from '/{endpoint}' on master: {error}"
+ .format(endpoint="tasks", error=exception))
+
+ self.assertEqual(type(tasks), list)
+ self.assertEqual(len(tasks), 1)
returncode, stdout, stderr = exec_command(
["mesos", "task", "exec", tasks[0]["id"], "cat", "a.txt"])
@@ -93,10 +107,23 @@ class TestTaskPlugin(CLITestCase):
task = Task({"command": "sleep 1000"})
task.launch()
- tasks = running_tasks(master)
- if not tasks:
- raise CLIException("Unable to find running tasks on master"
- " '{master}'".format(master=master.addr))
+ try:
+ wait_for_task(master, task.name, "TASK_RUNNING")
+ except Exception as exception:
+ raise CLIException(
+ "Error waiting for task '{name}' to"
+ " reach state '{state}': {error}"
+ .format(name=task.name, state="TASK_RUNNING", error=exception))
+
+ try:
+ tasks = http.get_json(master.addr, "tasks")["tasks"]
+ except Exception as exception:
+ raise CLIException(
+ "Could not get tasks from '/{endpoint}' on master: {error}"
+ .format(endpoint="tasks", error=exception))
+
+ self.assertEqual(type(tasks), list)
+ self.assertEqual(len(tasks), 1)
returncode, _, _ = exec_command(
["mesos", "task", "exec", tasks[0]["id"], "true"])
@@ -126,10 +153,23 @@ class TestTaskPlugin(CLITestCase):
task = Task({"command": "sleep 1000"})
task.launch()
- tasks = running_tasks(master)
- if not tasks:
- raise CLIException("Unable to find running tasks on master"
- " '{master}'".format(master=master.addr))
+ try:
+ wait_for_task(master, task.name, "TASK_RUNNING")
+ except Exception as exception:
+ raise CLIException(
+ "Error waiting for task '{name}' to"
+ " reach state '{state}': {error}"
+ .format(name=task.name, state="TASK_RUNNING", error=exception))
+
+ try:
+ tasks = http.get_json(master.addr, "tasks")["tasks"]
+ except Exception as exception:
+ raise CLIException(
+ "Could not get tasks from '/{endpoint}' on master: {error}"
+ .format(endpoint="tasks", error=exception))
+
+ self.assertEqual(type(tasks), list)
+ self.assertEqual(len(tasks), 1)
with open(LOREM_IPSUM) as text:
returncode, stdout, stderr = exec_command(
@@ -161,10 +201,20 @@ class TestTaskPlugin(CLITestCase):
task = Task({"command": "sleep 1000"})
task.launch()
- tasks = running_tasks(master)
- if not tasks:
- raise CLIException("Unable to find running tasks on master"
- " '{master}'".format(master=master.addr))
+ try:
+ wait_for_task(master, task.name, "TASK_RUNNING")
+ except Exception as exception:
+ raise CLIException(
+ "Error waiting for task '{name}' to"
+ " reach state '{state}': {error}"
+ .format(name=task.name, state="TASK_RUNNING", error=exception))
+
+ try:
+ tasks = http.get_json(master.addr, "tasks")["tasks"]
+ except Exception as exception:
+ raise CLIException(
+ "Could not get tasks from '/{endpoint}' on master: {error}"
+ .format(endpoint="tasks", error=exception))
self.assertEqual(type(tasks), list)
self.assertEqual(len(tasks), 1)