code: def test_validate_pipeline_lineage_resources_happy_case():
      session = Mock(
          Session, sagemaker_client=Mock(), boto_session=Mock()
      )
      session.sagemaker_client.return_value = Mock()
      pipeline_name = "some_pipeline"
      with patch.object(
          session.sagemaker_client,
          "describe_pipeline",
          return_value=PIPELINE,
      ) as pipeline_describe_method:
          with patch.object(
              Context,
              "load",
              side_effect=[CONTEXT_MOCK_01, CONTEXT_MOCK_02],
          ) as context_load:
              type(CONTEXT_MOCK_01).context_arn = "context-arn"
              type(CONTEXT_MOCK_01).properties = {
                  "LastUpdateTime": NOW.strftime("%s")
              }
              type(CONTEXT_MOCK_02).context_arn = "context-arn-fep"
              _validate_pipeline_lineage_resources(
                  pipeline_name=pipeline_name,
                  sagemaker_session=session,
              )
      pipeline_describe_method.assert_called_once_with(
          PipelineName=pipeline_name
      )
      pipeline_creation_time = PIPELINE["CreationTime"].strftime("%s")
      last_updated_time = NOW.strftime("%s")
      context_load.assert_has_calls(
          [
              call(
                  context_name=f"sm-fs-fe-{pipeline_name}-{pipeline_creation_time}-fep",
                  sagemaker_session=session,
              ),
              call(
                  context_name=f"sm-fs-fe-{pipeline_name}-{last_updated_time}-fep-ver",
                  sagemaker_session=session,
              ),
          ]
      )
      assert 2 == context_load.call_count
  
imports: from __future__ import absolute_import
  from datetime import datetime
  from typing import Callable
  import pytest
  import json
  from botocore.exceptions import ClientError
  from mock import Mock, patch, call
  from sagemaker.feature_store.feature_processor.feature_scheduler import FeatureProcessorLineageHandler
  from sagemaker.feature_store.feature_processor import FeatureProcessorPipelineEvents, FeatureProcessorPipelineExecutionStatus
  from sagemaker.lineage.context import Context
  from sagemaker.remote_function.spark_config import SparkConfig
  from sagemaker import Session
  from sagemaker.feature_store.feature_processor._enums import FeatureProcessorMode
  from sagemaker.feature_store.feature_processor._constants import FEATURE_PROCESSOR_TAG_KEY, FEATURE_PROCESSOR_TAG_VALUE, EXECUTION_TIME_PIPELINE_PARAMETER_FORMAT, PIPELINE_NAME_MAXIMUM_LENGTH
  from sagemaker.feature_store.feature_processor.feature_scheduler import schedule, to_pipeline, execute, delete_schedule, describe, list_pipelines, put_trigger, enable_trigger, disable_trigger, delete_trigger, _validate_fg_lineage_resources, _validate_pipeline_lineage_resources
  from sagemaker.remote_function.job import _JobSettings, SPARK_APP_SCRIPT_PATH, RUNTIME_SCRIPTS_CHANNEL_NAME, REMOTE_FUNCTION_WORKSPACE, ENTRYPOINT_SCRIPT_NAME, SPARK_CONF_CHANNEL_NAME
  from sagemaker.workflow.parameters import Parameter, ParameterTypeEnum
  from sagemaker.workflow.retry import StepRetryPolicy, StepExceptionTypeEnum, SageMakerJobStepRetryPolicy, SageMakerJobExceptionTypeEnum
  import test_data_helpers
label_desc: Use image node_id 23 for calling a global function with example usage: test_validate_pipeline_lineage_resources_happy_case() without return types