code: def test_stage_configuration(
      mock_s3_upload, mock_bytesIO, config, expected, sagemaker_session
  ):
      spark_processor_type = {
          "py_spark_processor": PySparkProcessor,
          "spark_jar_processor": SparkJarProcessor,
      }[config["spark_processor_type"]]
      spark_processor = spark_processor_type(
          base_job_name="sm-spark",
          role="AmazonSageMaker-ExecutionRole",
          framework_version="2.4",
          instance_count=1,
          instance_type="ml.c5.xlarge",
          image_uri="790336243319.dkr.ecr.us-west-2.amazonaws.com/sagemaker-spark:0.1",
          configuration_location=config["configuration_location"],
          sagemaker_session=sagemaker_session,
      )
  
      desired_s3_uri = expected
      mock_bytesIO.return_value = serialized_configuration
  
      result = spark_processor._stage_configuration({})
  
      mock_s3_upload.assert_called_with(
          body=serialized_configuration,
          desired_s3_uri=desired_s3_uri,
          sagemaker_session=sagemaker_session,
      )
      assert result.source == desired_s3_uri
  
imports: from __future__ import absolute_import
  import pathlib
  import subprocess
  import tempfile
  from io import BytesIO
  from typing import Generator
  from unittest.case import TestCase
  from unittest.mock import MagicMock, Mock, call, mock_open, patch
  import pytest
  from sagemaker.processing import ProcessingInput, ProcessingOutput
  from sagemaker.session_settings import SessionSettings
  from sagemaker.spark.processing import PySparkProcessor, SparkJarProcessor, _SparkProcessorBase, _HistoryServer, FileType, SparkConfigUtils
label_desc: Use image node_id 14 for calling a global function with example usage: test_stage_configuration(mock_s3_upload, mock_bytesIO, config, expected, sagemaker_session) without return types