def test_deploy_with_requirements(self, *_): with self.project_dir: ws_dir = "/Shared/dbx/projects/%s" % self.project_name configure_result = invoke_cli_runner( configure, [ "--environment", "test", "--profile", self.profile_name, "--workspace-dir", ws_dir, ], ) self.assertEqual(configure_result.exit_code, 0) deployment_content = {"test": {"jobs": []}} write_json(deployment_content, DEFAULT_DEPLOYMENT_FILE_PATH) sample_requirements = "\n".join(["pyspark=3.0.0", "xgboost=0.6.0"]) pathlib.Path("runtime_requirements.txt").write_text(sample_requirements) deploy_result = invoke_cli_runner( deploy, [ "--environment", "test", "--requirements-file", "runtime_requirements.txt", ], ) self.assertEqual(deploy_result.exit_code, 0)
def test_deploy_non_existent_env(self, *args): with self.project_dir: ws_dir = "/Shared/dbx/projects/%s" % self.project_name configure_result = invoke_cli_runner( configure, [ "--environment", "test", "--profile", self.profile_name, "--workspace-dir", ws_dir, ], ) self.assertEqual(configure_result.exit_code, 0) deployment_content = { "misconfigured-environment": { "dbfs": {}, "jobs": [] } } write_json(deployment_content, DEFAULT_DEPLOYMENT_FILE_PATH) deploy_result = invoke_cli_runner(deploy, ["--environment", "test"], expected_error=True) self.assertIsInstance(deploy_result.exception, NameError) self.assertIn("non-existent in the deployment file", str(deploy_result.exception))
def test_deploy_basic(self, *_): with self.project_dir: ws_dir = "/Shared/dbx/projects/%s" % self.project_name configure_result = invoke_cli_runner( configure, [ "--environment", "test", "--profile", self.profile_name, "--workspace-dir", ws_dir, ], ) self.assertEqual(configure_result.exit_code, 0) deployment_content = {"test": {"jobs": []}} write_json(deployment_content, DEFAULT_DEPLOYMENT_FILE_PATH) with patch( "mlflow.get_experiment_by_name", return_value=Experiment("id", None, f"dbfs:/dbx/{self.project_name}", None, None), ): deploy_result = invoke_cli_runner(deploy, ["--environment", "test"]) self.assertEqual(deploy_result.exit_code, 0)
def test_deploy_listed_jobs(self, *args): with self.project_dir: ws_dir = "/Shared/dbx/projects/%s" % self.project_name configure_result = invoke_cli_runner( configure, [ "--environment", "test", "--profile", self.profile_name, "--workspace-dir", ws_dir, ], ) self.assertEqual(configure_result.exit_code, 0) deployment_content = { "test": { "jobs": [{ "name": "job-1" }, { "name": "job-2" }] } } write_json(deployment_content, DEFAULT_DEPLOYMENT_FILE_PATH) deploy_result = invoke_cli_runner( deploy, ["--environment", "test", "--jobs", "job-1,job-2"]) self.assertEqual(deploy_result.exit_code, 0)
def test_trace_runs(self, *_): with self.project_dir: ws_dir = "/Shared/dbx/projects/%s" % self.project_name configure_result = invoke_cli_runner( configure, [ "--environment", "test", "--profile", self.profile_name, "--workspace-dir", ws_dir, ], ) self.assertEqual(configure_result.exit_code, 0) deployment_content = {"test": {"dbfs": {}, "jobs": []}} write_json(deployment_content, DEFAULT_DEPLOYMENT_FILE_PATH) deploy_result = invoke_cli_runner( deploy, ["--environment", "test", "--tags", "cake=cheesecake"]) self.assertEqual(deploy_result.exit_code, 0) launch_result = invoke_cli_runner(launch, [ "--environment", "test", "--job", "sample", "--tags", "cake=cheesecake", "--trace" ]) self.assertEqual(launch_result.exit_code, 0)
def test_deploy_with_requirements_and_branch(self, *_): with self.project_dir: ws_dir = "/Shared/dbx/projects/%s" % self.project_name configure_result = invoke_cli_runner( configure, [ "--environment", "test", "--profile", self.profile_name, "--workspace-dir", ws_dir, ], ) self.assertEqual(configure_result.exit_code, 0) deployment_content = {"test": {"jobs": []}} write_json(deployment_content, DEFAULT_DEPLOYMENT_FILE_PATH) sample_requirements = "\n".join( ["pyspark=3.0.0", "xgboost=0.6.0", "pyspark3d"]) pathlib.Path("runtime_requirements.txt").write_text( sample_requirements) with patch( "mlflow.get_experiment_by_name", return_value=Experiment("id", None, f"dbfs:/dbx/{self.project_name}", None, None), ): deploy_result = invoke_cli_runner( deploy, [ "--environment", "test", "--requirements-file", "runtime_requirements.txt", "--branch-name", "test-branch", ], ) deleted_dependency_lines = [ line for line in deploy_result.stdout.splitlines() if "pyspark dependency deleted" in line ] self.assertEqual(len(deleted_dependency_lines), 1) self.assertEqual(deploy_result.exit_code, 0)
def test_no_runs(self, *_): with self.project_dir: ws_dir = "/Shared/dbx/projects/%s" % self.project_name configure_result = invoke_cli_runner( configure, [ "--environment", "test", "--profile", self.profile_name, "--workspace-dir", ws_dir, ], ) self.assertEqual(configure_result.exit_code, 0) deployment_content = {"test": {"dbfs": {}, "jobs": []}} write_json(deployment_content, DEFAULT_DEPLOYMENT_FILE_PATH) with patch( "mlflow.get_experiment_by_name", return_value=Experiment("id", None, f"dbfs:/dbx/{self.project_name}", None, None), ): deploy_result = invoke_cli_runner( deploy, ["--environment", "test", "--tags", "cake=cheesecake"]) self.assertEqual(deploy_result.exit_code, 0) launch_result = invoke_cli_runner( launch, [ "--environment", "test", "--job", "sample", "--tags", "cake=cheesecake", ], expected_error=True, ) self.assertIsNotNone(launch_result.exception) self.assertTrue("not found in underlying MLflow experiment" in str(launch_result.exception))
def test_no_runs(self, *args): with self.project_dir: ws_dir = "/Shared/dbx/projects/%s" % self.project_name configure_result = invoke_cli_runner( configure, [ "--environment", "test", "--profile", self.profile_name, "--workspace-dir", ws_dir, ], ) self.assertEqual(configure_result.exit_code, 0) deployment_content = {"test": {"dbfs": {}, "jobs": []}} write_json(deployment_content, DEFAULT_DEPLOYMENT_FILE_PATH) deploy_result = invoke_cli_runner( deploy, ["--environment", "test", "--tags", "cake=cheesecake"] ) self.assertEqual(deploy_result.exit_code, 0) launch_result = invoke_cli_runner( launch, [ "--environment", "test", "--job", "sample", "--tags", "cake=cheesecake", ], expected_error=True ) self.assertIsNotNone(launch_result.exception) self.assertTrue("No runs provided per given set of filters" in str(launch_result.exception))
def test_deploy_incorrect_artifact_location(self, *_): with self.project_dir: ws_dir = "/Shared/dbx/projects/%s" % self.project_name configure_result = invoke_cli_runner( configure, [ "--environment", "test", "--profile", self.profile_name, "--workspace-dir", ws_dir, ], ) self.assertEqual(configure_result.exit_code, 0) with patch( "mlflow.get_experiment_by_name", return_value=Experiment("id", None, "dbfs:/some/correct-location", None, None), ): deployment_content = {"test": {"jobs": []}} write_json(deployment_content, DEFAULT_DEPLOYMENT_FILE_PATH) sample_config = read_json(INFO_FILE_PATH) sample_config["environments"]["test"][ "artifact_location"] = "dbfs:/some/another-location" write_json(sample_config, INFO_FILE_PATH) deploy_result = invoke_cli_runner(deploy, ["--environment", "test"], expected_error=True) self.assertIsInstance(deploy_result.exception, Exception) self.assertIn( "Please change the experiment name to create a new experiment", str(deploy_result.exception))
def test_launch_with_parameters(self, *_): with self.project_dir: ws_dir = "/Shared/dbx/projects/%s" % self.project_name configure_result = invoke_cli_runner( configure, [ "--environment", "test", "--profile", self.profile_name, "--workspace-dir", ws_dir, ], ) self.assertEqual(configure_result.exit_code, 0) deployment_content = {"test": {"dbfs": {}, "jobs": []}} write_json(deployment_content, DEFAULT_DEPLOYMENT_FILE_PATH) with patch( "mlflow.get_experiment_by_name", return_value=Experiment("id", None, f"dbfs:/dbx/{self.project_name}", None, None), ): deploy_result = invoke_cli_runner( deploy, ["--environment", "test", "--tags", "cake=cheesecake"]) self.assertEqual(deploy_result.exit_code, 0) launch_raw = invoke_cli_runner( launch, [ "--environment", "test", "--job", "sample", "--tags", "cake=cheesecake", """--parameters-raw='{"key1": "value1", "key2": 2}'""", ], ) self.assertEqual(launch_raw.exit_code, 0) launch_with_params = invoke_cli_runner( launch, [ "--environment", "test", "--job", "sample", "--tags", "cake=cheesecake", "--parameters='cake=cheesecake'", ], ) self.assertEqual(launch_with_params.exit_code, 0)