code: def test_update_missing_value_strategy(missing_value_strategy: str):
      old_valid_config = {
          "input_features": [
              {
                  "name": "input_feature_1",
                  "type": "category",
                  "preprocessing": {
                      "missing_value_strategy": missing_value_strategy
                  },
              }
          ],
          "output_features": [
              {"name": "output_feature_1", "type": "category"},
          ],
      }
  
      updated_config = upgrade_missing_value_strategy(old_valid_config)
  
      expected_config = copy.deepcopy(old_valid_config)
      if missing_value_strategy == "backfill":
          expected_config["input_features"][0]["preprocessing"][
              "missing_value_strategy"
          ] == "bfill"
      else:
          expected_config["input_features"][0]["preprocessing"][
              "missing_value_strategy"
          ] == "ffill"
  
      assert updated_config == expected_config
  
imports: import copy
  import math
  from typing import Any, Dict
  import pytest
  from ludwig.constants import BATCH_SIZE, BFILL, CLASS_WEIGHTS, DEFAULTS, EVAL_BATCH_SIZE, EXECUTOR, HYPEROPT, INPUT_FEATURES, LEARNING_RATE_SCHEDULER, LOSS, NUMBER, OUTPUT_FEATURES, PREPROCESSING, SCHEDULER, SPLIT, TRAINER, TYPE
  from ludwig.schema.model_config import ModelConfig
  from ludwig.schema.trainer import ECDTrainerConfig
  from ludwig.utils.backward_compatibility import _update_backend_cache_credentials, _upgrade_encoder_decoder_params, _upgrade_feature, _upgrade_preprocessing_split, upgrade_config_dict_to_latest_version, upgrade_missing_value_strategy, upgrade_model_progress
  from ludwig.utils.trainer_utils import TrainerMetric
label_desc: Use image node_id 8 for calling a global function with example usage: test_update_missing_value_strategy(missing_value_strategy) without return types