def test_docker_project_execution(
        use_start_run, tmpdir, tracking_uri_mock):  # pylint: disable=unused-argument
    build_docker_example_base_image()
    expected_params = {"use_start_run": use_start_run}
    submitted_run = mlflow.projects.run(
        TEST_DOCKER_PROJECT_DIR, experiment_id=0, parameters=expected_params,
        entry_point="test_tracking")
    # Validate run contents in the FileStore
    run_uuid = submitted_run.run_id
    mlflow_service = mlflow.tracking.MlflowClient()
    run_infos = mlflow_service.list_run_infos(experiment_id=0, run_view_type=ViewType.ACTIVE_ONLY)
    assert "file:" in run_infos[0].source_name
    assert len(run_infos) == 1
    store_run_uuid = run_infos[0].run_uuid
    assert run_uuid == store_run_uuid
    run = mlflow_service.get_run(run_uuid)
    assert run.data.params == expected_params
    assert run.data.metrics == {"some_key": 3}
    exact_expected_tags = {MLFLOW_PROJECT_ENV: "docker"}
    approx_expected_tags = {
        MLFLOW_DOCKER_IMAGE_NAME: "mlflow-docker-example",
        MLFLOW_DOCKER_IMAGE_ID: "sha256:",
    }
    run_tags = run.data.tags
    for k, v in exact_expected_tags.items():
        assert run_tags[k] == v
    for k, v in approx_expected_tags.items():
        assert run_tags[k].startswith(v)
def test_docker_project_tracking_uri_propagation(
        ProfileConfigProvider, tmpdir, tracking_uri,
        expected_command_segment):  # pylint: disable=unused-argument
    build_docker_example_base_image()
    mock_provider = mock.MagicMock()
    mock_provider.get_config.return_value = \
        DatabricksConfig("host", "user", "pass", None, insecure=True)
    ProfileConfigProvider.return_value = mock_provider
    # Create and mock local tracking directory
    local_tracking_dir = os.path.join(tmpdir.strpath, "mlruns")
    if tracking_uri is None:
        tracking_uri = local_tracking_dir
    old_uri = mlflow.get_tracking_uri()
    try:
        mlflow.set_tracking_uri(tracking_uri)
        with mock.patch("mlflow.tracking.utils._get_store") as _get_store_mock:
            _get_store_mock.return_value = file_store.FileStore(local_tracking_dir)
            mlflow.projects.run(TEST_DOCKER_PROJECT_DIR, experiment_id=0)
    finally:
        mlflow.set_tracking_uri(old_uri)
def test_docker_uri_mode_validation(tracking_uri_mock):  # pylint: disable=unused-argument
    with pytest.raises(ExecutionException):
        build_docker_example_base_image()
        mlflow.projects.run(TEST_DOCKER_PROJECT_DIR, mode="databricks")