summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRémi Duraffort <remi.duraffort@linaro.org>2018-04-27 11:59:46 +0200
committerRémi Duraffort <remi.duraffort@linaro.org>2018-04-27 12:00:12 +0200
commit97d5f36ef7fb55bf698acae07f70dabd188248c9 (patch)
treec1892892e9e01810da8918d085ae33094ae3d56b
parentae275cb11866cd7df34a1374a5a7b92c2413b48e (diff)
Improve test coverage for "devices" sub command
Change-Id: I388a2f7969317fdfec8157ce85a851b436f284b7
-rw-r--r--lavacli/commands/devices.py3
-rw-r--r--tests/test_devices.py91
2 files changed, 93 insertions, 1 deletions
diff --git a/lavacli/commands/devices.py b/lavacli/commands/devices.py
index 6a0e8d0..cc16125 100644
--- a/lavacli/commands/devices.py
+++ b/lavacli/commands/devices.py
@@ -202,6 +202,9 @@ def _lookups(value, fields):
except KeyError:
print("Unknow key '%s' for '%s'" % (key, value))
return 1
+ except TypeError:
+ print("Unable to lookup inside '%s' for '%s'" % (value, key))
+ return 1
print(value)
return 0
diff --git a/tests/test_devices.py b/tests/test_devices.py
index b591595..e251d35 100644
--- a/tests/test_devices.py
+++ b/tests/test_devices.py
@@ -18,6 +18,7 @@
# along with lavacli. If not, see <http://www.gnu.org/licenses/>
import sys
+import time
import xmlrpc.client
import yaml
@@ -112,6 +113,50 @@ def test_devices_dict_get_render_field(setup, monkeypatch, capsys):
assert capsys.readouterr().out == "as usual\n"
+def test_devices_dict_get_render_field_out_of_range(setup, monkeypatch, capsys):
+ version = "2018.4"
+ monkeypatch.setattr(sys, "argv", ["lavacli", "devices", "dict", "get", "--render", "qemu01", "hello.2.world"])
+ monkeypatch.setattr(xmlrpc.client.ServerProxy, "data", [{"request": "system.version", "args": (), "ret": version},
+ {"request": "scheduler.devices.get_dictionary",
+ "args": ("qemu01", True, None),
+ "ret": yaml.dump({"hello": [{"world": "as usual"}, "my"]})}])
+ assert main() == 1
+ assert capsys.readouterr().out == "list index out of range (2 vs 2)\n"
+
+
+def test_devices_dict_get_render_field_missing(setup, monkeypatch, capsys):
+ version = "2018.4"
+ monkeypatch.setattr(sys, "argv", ["lavacli", "devices", "dict", "get", "--render", "qemu01", "hello.0.worl"])
+ monkeypatch.setattr(xmlrpc.client.ServerProxy, "data", [{"request": "system.version", "args": (), "ret": version},
+ {"request": "scheduler.devices.get_dictionary",
+ "args": ("qemu01", True, None),
+ "ret": yaml.dump({"hello": [{"world": "as usual"}, "my"]})}])
+ assert main() == 1
+ assert capsys.readouterr().out == "Unknow key 'worl' for '{'world': 'as usual'}'\n"
+
+
+def test_devices_dict_get_render_field_missing_1(setup, monkeypatch, capsys):
+ version = "2018.4"
+ monkeypatch.setattr(sys, "argv", ["lavacli", "devices", "dict", "get", "--render", "qemu01", "hello.0.world.0"])
+ monkeypatch.setattr(xmlrpc.client.ServerProxy, "data", [{"request": "system.version", "args": (), "ret": version},
+ {"request": "scheduler.devices.get_dictionary",
+ "args": ("qemu01", True, None),
+ "ret": yaml.dump({"hello": [{"world": "as usual"}, "my"]})}])
+ assert main() == 1
+ assert capsys.readouterr().out == "Unable to lookup inside 'as usual' for '0'\n"
+
+
+def test_devices_dict_get_render_field_missing_2(setup, monkeypatch, capsys):
+ version = "2018.4"
+ monkeypatch.setattr(sys, "argv", ["lavacli", "devices", "dict", "get", "--render", "qemu01", "hello.0.world.missing"])
+ monkeypatch.setattr(xmlrpc.client.ServerProxy, "data", [{"request": "system.version", "args": (), "ret": version},
+ {"request": "scheduler.devices.get_dictionary",
+ "args": ("qemu01", True, None),
+ "ret": yaml.dump({"hello": [{"world": "as usual"}, "my"]})}])
+ assert main() == 1
+ assert capsys.readouterr().out == "Unable to lookup inside 'as usual' for 'missing'\n"
+
+
def test_devices_dict_get_jinja2_field(setup, monkeypatch, capsys):
version = "2018.4"
monkeypatch.setattr(sys, "argv", ["lavacli", "devices", "dict", "get", "qemu01", "hello"])
@@ -134,6 +179,17 @@ def test_devices_dict_get_jinja2_field_2(setup, monkeypatch, capsys):
assert capsys.readouterr().out == "something\n"
+def test_devices_dict_get_jinja2_field_missing(setup, monkeypatch, capsys):
+ version = "2018.4"
+ monkeypatch.setattr(sys, "argv", ["lavacli", "devices", "dict", "get", "qemu01", "world"])
+ monkeypatch.setattr(xmlrpc.client.ServerProxy, "data", [{"request": "system.version", "args": (), "ret": version},
+ {"request": "scheduler.devices.get_dictionary",
+ "args": ("qemu01", False, None),
+ "ret": "{% set hello = 'bla' %}"}])
+ assert main() == 1
+ assert capsys.readouterr().out == "Unknow field 'world'\n"
+
+
def test_devices_dict_set(setup, monkeypatch, capsys, tmpdir):
version = "2018.4"
with open(tmpdir / "dict.jinja2", "w") as f_conf:
@@ -147,6 +203,19 @@ def test_devices_dict_set(setup, monkeypatch, capsys, tmpdir):
assert capsys.readouterr().out == ""
+def test_devices_dict_set_error(setup, monkeypatch, capsys, tmpdir):
+ version = "2018.4"
+ with open(tmpdir / "dict.jinja2", "w") as f_conf:
+ f_conf.write("{% set exclusive = True %}")
+ monkeypatch.setattr(sys, "argv", ["lavacli", "devices", "dict", "set", "qemu01", str(tmpdir / "dict.jinja2")])
+ monkeypatch.setattr(xmlrpc.client.ServerProxy, "data", [{"request": "system.version", "args": (), "ret": version},
+ {"request": "scheduler.devices.set_dictionary",
+ "args": ("qemu01", "{% set exclusive = True %}"),
+ "ret": False}])
+ assert main() == 1
+ assert capsys.readouterr().out == "Unable to set the configuration\n"
+
+
def test_devices_list(setup, monkeypatch, capsys):
version = "2018.4"
monkeypatch.setattr(sys, "argv", ["lavacli", "devices", "list"])
@@ -216,6 +285,9 @@ def test_devices_list_before_2018_1(setup, monkeypatch, capsys, tmpdir):
def test_devices_maintenance(setup, monkeypatch, capsys):
version = "2018.4"
last_ping = xmlrpc.client.DateTime("20180128T01:01:01")
+ def sleep(duration):
+ assert duration == 5
+ monkeypatch.setattr(time, "sleep", sleep)
monkeypatch.setattr(sys, "argv", ["lavacli", "devices", "maintenance", "qemu01"])
monkeypatch.setattr(xmlrpc.client.ServerProxy, "data", [{"request": "system.version", "args": (), "ret": version},
{"request": "scheduler.devices.update",
@@ -245,6 +317,23 @@ def test_devices_maintenance(setup, monkeypatch, capsys):
"device_type": "qemu",
"health_check": False,
"pipeline": True,
+ "health": "Unknown",
+ "state": "Running",
+ "submitter": "lava-bot",
+ "submit_time": last_ping,
+ "start_time": last_ping,
+ "end_time": None,
+ "tags": [],
+ "visibility": "Publicly visible",
+ "failure_comment": ""}},
+ {"request": "scheduler.jobs.show",
+ "args": (1234, ),
+ "ret": {"id": "1234",
+ "description": "basic testing",
+ "device": "qemu01",
+ "device_type": "qemu",
+ "health_check": False,
+ "pipeline": True,
"health": "Complete",
"state": "Finished",
"submitter": "lava-bot",
@@ -255,7 +344,7 @@ def test_devices_maintenance(setup, monkeypatch, capsys):
"visibility": "Publicly visible",
"failure_comment": ""}}])
assert main() == 0
- assert capsys.readouterr().out == "-> waiting for job 1234\n"
+ assert capsys.readouterr().out == "-> waiting for job 1234\n--> waiting\n"
def test_devices_maintenance_force(setup, monkeypatch, capsys):