diff --git a/ipatests/test_xmlrpc/test_plugins_plugin.py b/ipatests/test_xmlrpc/test_plugins_plugin.py new file mode 100644 index 000000000..e35d9f044 --- /dev/null +++ b/ipatests/test_xmlrpc/test_plugins_plugin.py @@ -0,0 +1,60 @@ +# +# Copyright (C) 2021 FreeIPA Contributors see COPYING for license +# +"""Test `plugins` plugin +""" + +import pytest + +from ipalib import api, errors +from ipatests.test_xmlrpc.xmlrpc_test import XMLRPC_test + + +@pytest.mark.tier1 +class TestPlugins(XMLRPC_test): + """Test `plugins` plugin + """ + EXPECTED_KEYS = ("result", "count", "summary") + + def run_plugins(self, *args, **options): + cmd = api.Command.plugins + cmd_result = cmd(*args, **options) + return cmd_result + + def assert_result(self, cmd_result): + assert tuple(cmd_result.keys()) == self.EXPECTED_KEYS + result = cmd_result["result"] + assert isinstance(result, dict) + + actual_count = cmd_result["count"] + assert isinstance(actual_count, int) + assert len(result) == actual_count + + expected_summaries = ( + f"{actual_count} plugin loaded", f"{actual_count} plugins loaded" + ) + assert cmd_result["summary"] in expected_summaries + + @pytest.mark.parametrize( + "server", [True, False, None], ids=["server", "local", "local_default"] + ) + def test_plugins(self, server): + options = {} + if server is not None: + options = {"server": server} + cmd_result = self.run_plugins(**options) + self.assert_result(cmd_result) + assert cmd_result["count"] >= 1 + + @pytest.mark.parametrize("server", [True, False], ids=["server", "local"]) + def test_plugins_with_nonexistent_argument(self, server): + with pytest.raises(errors.ZeroArgumentError): + self.run_plugins("nonexistentarg", server=server) + + @pytest.mark.parametrize("server", [True, False], ids=["server", "local"]) + def test_plugins_with_nonexistent_option(self, server): + with pytest.raises(errors.OptionError) as e: + self.run_plugins( + nonexistentoption="nonexistentoption", server=server + ) + assert "Unknown option: nonexistentoption" in str(e.value)