def test_01_invalid_pkg_invoke_args(self): """Test invalid pkg_invoke args is handled correctly.""" pkgs = ["foo"] opts = {"list_installed_newest": True, "list_all": True} os.environ["PKG_IMAGE"] = self.img_path() retjson = self.__call_cmd(None, pkgs, opts) self.assert_("errors" in retjson) self.assert_("Sub-command" in retjson["errors"][0]["reason"]) invalidpargs = {"invalid": -1} retjson = self.__call_cmd("list", invalidpargs, opts) self.assert_("errors" in retjson) self.assert_("pargs_json is invalid" in retjson["errors"][0]["reason"]) invalidpargs = {"invalid": -1} retjson = self.__call_cmd("publisher", invalidpargs, opts) self.assert_("errors" in retjson) self.assert_("pargs_json is invalid" in retjson["errors"][0]["reason"]) invalidpargs = "+1+1random" retjson = cli_api._pkg_invoke(subcommand="list", pargs_json=invalidpargs, opts_json=json.dumps(opts)) self.assert_("errors" in retjson) self.assert_("pargs_json is invalid" in retjson["errors"][0]["reason"]) invalidopts = "+1+1random" retjson = cli_api._pkg_invoke(subcommand="list", pargs_json=json.dumps([]), opts_json=invalidopts) self.assert_("errors" in retjson) self.assert_("opts_json is invalid" in retjson["errors"][0]["reason"])
def rad_pkg(subcommand, pargs_json=None, opts_json=None, pkg_image=None, prog_event_handler=None, prog_delay=PROG_DELAY): """Perform pkg operation. subcommand: a string type pkg subcommand. pargs_json: a JSON blob containing a list of pargs. opts_json: a JSON blob containing a dictionary of pkg subcommand options. pkg_image: a string type alternate image path. """ ret_json = None rad_prog_tracker = __init_prog_tracker(prog_event_handler, prog_delay) try: ret_json = entry._pkg_invoke(subcommand=subcommand, pargs_json=pargs_json, opts_json=opts_json, pkg_image=pkg_image, prog_delay=prog_delay, opts_mapping=opts_mapping, prog_tracker=rad_prog_tracker) return ret_json except Exception as ex: if not ret_json: ret_json = {"status": UNANTICIPATED, "errors": [{"reason": str(ex)}]} return ret_json
def test_02_valid_pkg_invoke_args(self): """Test valid arguments for pkg json.""" self.image_create(self.rurl1, prefix="test1") os.environ["PKG_IMAGE"] = self.img_path() pkgs = ["foo"] opts = {"list_newest": True} self.pkg("install pkg://test1/foo") retjson = cli_api._pkg_invoke(subcommand="list", pargs_json=None, opts_json=json.dumps(opts)) self.assert_("errors" not in retjson) retjson = cli_api._pkg_invoke(subcommand="list", pargs_json=json.dumps(["foo"]), opts_json=None) self.assert_("errors" not in retjson) retjson = self.__call_cmd("list", pkgs, opts) self.assert_("errors" not in retjson)
def test_07_set_publisher_args_opts(self): """Test json args or opts for update command.""" global_settings.client_output_quiet = True self.rurl1 = self.dcs[1].get_repo_url() self.image_create(self.rurl1) os.environ["PKG_IMAGE"] = self.img_path() # Test invalid pkg name. pubs = ["test1"] opts = {"origin_uri": self.rurl1} retjson = self.__call_cmd("set-publisher", pubs, opts) self.assert_(retjson["status"] == 0) self.assert_("errors" not in retjson) retjson = self.__call_cmd("unset-publisher", pubs, {}) self.assert_(retjson["status"] == 0) self.assert_("errors" not in retjson) opts = {"add_origins": [self.rurl1]} retjson = self.__call_cmd("set-publisher", pubs, opts) self.assert_("errors" not in retjson) pkgs = ["[email protected]"] opts = {"verbose": 3, "parsable_version": 0} retjson = self.__call_cmd("install", pkgs, opts) self.assert_("errors" not in retjson) self.assert_(retjson["status"] == 0) pkgs = ["newpkg"] opts = {"verbose": 3, "parsable_version": 0} retjson = self.__call_cmd("uninstall", pkgs, opts) self.assert_("errors" not in retjson) self.assert_(retjson["status"] == 0) self.pkg("set-publisher -O " + self.rurl2 + " test2") retjson = cli_api._pkg_invoke(subcommand="unset-publisher", pargs_json=json.dumps(["test2"]), opts_json=None) self.assert_(retjson["status"] == 0) self.assert_("errors" not in retjson) retjson = self.__call_cmd("unset-publisher", pubs, {}) self.assert_(retjson["status"] == 0) self.assert_("errors" not in retjson) opts = {"repo_uri": self.rurl1} retjson = self.__call_cmd("set-publisher", [], opts) self.assert_(retjson["data"]["added"] == ["test1"]) self.assert_(retjson["status"] == 0) self.assert_("errors" not in retjson) retjson = self.__call_cmd("set-publisher", [], opts) self.assert_(retjson["data"]["updated"] == ["test1"]) self.assert_(retjson["status"] == 0) self.assert_("errors" not in retjson) pkgs = ["pkg://test1/foo@1"] opts = {"verbose": 3, "parsable_version": 0} retjson = self.__call_cmd("install", pkgs, opts) self.assert_("errors" not in retjson) self.assert_(retjson["status"] == 0) opts = { "repo_uri": self.rurl2, "set_props": ["prop1=here", "prop2=there"] } retjson = self.__call_cmd("set-publisher", [], opts) self.assert_(retjson["status"] == 0) self.assert_("errors" not in retjson) opts = {"repo_uri": self.rurl2, "unset_props": ["prop1", "prop2"]} retjson = self.__call_cmd("set-publisher", [], opts) self.assert_(retjson["status"] == 0) self.assert_("errors" not in retjson) opts = { "repo_uri": self.rurl2, "search_before": "a", "search_after": "b" } retjson = self.__call_cmd("set-publisher", [], opts) self.assert_(retjson["status"] == 2) self.assert_("errors" in retjson) opts = {"repo_uri": self.rurl2, "add_origins": ["a"]} retjson = self.__call_cmd("set-publisher", [], opts) self.assert_(retjson["status"] == 2) self.assert_("errors" in retjson) opts = {"repo_uri": self.rurl2, "refresh_allowed": False} retjson = self.__call_cmd("set-publisher", [], opts) self.assert_(retjson["status"] == 2) self.assert_("combined" in retjson["errors"][0]["reason"]) opts = {"proxy_uri": self.rurl2} retjson = self.__call_cmd("set-publisher", [], opts) self.assert_(retjson["status"] == 2) self.assert_("only be used" in retjson["errors"][0]["reason"]) global_settings.client_output_quiet = False # Test input directly against schema. pargs = "pargs_json" schema = cli_api._get_pkg_input_schema("set-publisher") test_input = {pargs: ["test1"], "opts_json": {"enable": True}} self.assert_(self.__schema_validation(test_input, schema)) test_input = {pargs: None, "opts_json": {"enable": True}} self.assert_(not self.__schema_validation(test_input, schema)) test_input = {pargs: [], "opts_json": {"repo_uri": "test"}} self.assert_(self.__schema_validation(test_input, schema)) schema = cli_api._get_pkg_input_schema("unset-publisher") test_input = {pargs: [], "opts_json": {}} self.assert_(self.__schema_validation(test_input, schema))
def __call_cmd(self, subcommand, args, opts): retjson = cli_api._pkg_invoke(subcommand=subcommand, pargs_json=json.dumps(args), opts_json=json.dumps(opts)) return retjson