code: def test_prepare_step_input_channel(
      mock_upload_callable,
      mock_script_upload,
      mock_dependency_upload,
      mock_spark_dependency_upload,
      mock_training_input,
      config_uploader,
      wrapped_func,
  ):
      (
          input_data_config,
          spark_dependency_paths,
      ) = config_uploader.prepare_step_input_channel_for_spark_mode(
          wrapped_func,
          config_uploader.remote_decorator_config.s3_root_uri,
          sagemaker_session,
      )
      remote_decorator_config = config_uploader.remote_decorator_config
  
      assert mock_upload_callable.called_once_with(wrapped_func)
  
      mock_script_upload.assert_called_once_with(
          spark_config=config_uploader.remote_decorator_config.spark_config,
          s3_base_uri=config_uploader.remote_decorator_config.s3_root_uri,
          s3_kms_key="some_kms",
          sagemaker_session=sagemaker_session,
      )
  
      mock_dependency_upload.assert_called_once_with(
          local_dependencies_path="some_dependency_path",
          include_local_workdir=True,
          pre_execution_commands=remote_decorator_config.pre_execution_commands,
          pre_execution_script_local_path=remote_decorator_config.pre_execution_script,
          s3_base_uri=remote_decorator_config.s3_root_uri,
          s3_kms_key="some_kms",
          sagemaker_session=sagemaker_session,
          custom_file_filter=None,
      )
  
      mock_spark_dependency_upload.assert_called_once_with(
          spark_config=config_uploader.remote_decorator_config.spark_config,
          s3_base_uri=config_uploader.remote_decorator_config.s3_root_uri,
          s3_kms_key="some_kms",
          sagemaker_session=sagemaker_session,
      )
  
      assert input_data_config == {
          RUNTIME_SCRIPTS_CHANNEL_NAME: mock_training_input(
              s3_data="some_s3_uri", s3_data_type="S3Prefix"
          ),
          REMOTE_FUNCTION_WORKSPACE: mock_training_input(
              s3_data=f"{config_uploader.remote_decorator_config.s3_root_uri}/pipeline_name/sm_rf_user_ws",
              s3_data_type="S3Prefix",
          ),
          SPARK_CONF_CHANNEL_NAME: mock_training_input(
              s3_data="path_d", s3_data_type="S3Prefix"
          ),
      }
  
      assert spark_dependency_paths == {
          SPARK_JAR_FILES_PATH: "path_a",
          SPARK_PY_FILES_PATH: "path_b",
          SPARK_FILES_PATH: "path_c",
      }
  
imports: from __future__ import absolute_import
  import pytest
  from mock import Mock, patch
  from sagemaker.feature_store.feature_processor._config_uploader import ConfigUploader
  from sagemaker.feature_store.feature_processor._constants import SPARK_JAR_FILES_PATH, SPARK_FILES_PATH, SPARK_PY_FILES_PATH, SAGEMAKER_WHL_FILE_S3_PATH
  from sagemaker.remote_function.job import _JobSettings, RUNTIME_SCRIPTS_CHANNEL_NAME, REMOTE_FUNCTION_WORKSPACE, SPARK_CONF_CHANNEL_NAME
  from sagemaker.remote_function.spark_config import SparkConfig
  from sagemaker.session import Session
label_desc: Use image node_id 13 for calling a global function with example usage: test_prepare_step_input_channel(mock_upload_callable, mock_script_upload, mock_dependency_upload, mock_spark_dependency_upload, mock_training_input, config_uploader, wrapped_func) without return types