diff options
author | Rémi Duraffort <remi.duraffort@linaro.org> | 2018-04-27 11:59:46 +0200 |
---|---|---|
committer | Rémi Duraffort <remi.duraffort@linaro.org> | 2018-04-27 12:00:12 +0200 |
commit | 97d5f36ef7fb55bf698acae07f70dabd188248c9 (patch) | |
tree | c1892892e9e01810da8918d085ae33094ae3d56b | |
parent | ae275cb11866cd7df34a1374a5a7b92c2413b48e (diff) |
Improve test coverage for "devices" sub command
Change-Id: I388a2f7969317fdfec8157ce85a851b436f284b7
-rw-r--r-- | lavacli/commands/devices.py | 3 | ||||
-rw-r--r-- | tests/test_devices.py | 91 |
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): |