def testRunImplNotTriggerSameTaskTwice(self, mock_trigger, _):
    master_name = 'm'
    builder_name = 'b'
    build_number = 123
    step_name = 's'
    test_name = 't'
    commit_position = 1000
    isolate_sha = 'sha1'
    iterations = 50
    timeout_seconds = 1200

    run_flake_swarming_task_input = RunFlakeSwarmingTaskInput(
        builder_name=builder_name,
        commit_position=commit_position,
        isolate_sha=isolate_sha,
        iterations=iterations,
        master_name=master_name,
        reference_build_number=build_number,
        step_name=step_name,
        test_name=test_name,
        timeout_seconds=timeout_seconds)

    pipeline_job = RunFlakeSwarmingTaskPipeline(run_flake_swarming_task_input)
    pipeline_job.RunImpl(run_flake_swarming_task_input)
    self.assertFalse(mock_trigger.called)
  def testRunImplTriggerTaskFailed(self, mocked_pipeline_id, mock_trigger, _):
    master_name = 'm'
    builder_name = 'b'
    build_number = 123
    step_name = 's'
    test_name = 't'
    commit_position = 1000
    isolate_sha = 'sha1'
    iterations = 50
    timeout_seconds = 1200
    pipeline_id = 'pipeline-id'

    run_flake_swarming_task_input = RunFlakeSwarmingTaskInput(
        builder_name=builder_name,
        commit_position=commit_position,
        isolate_sha=isolate_sha,
        iterations=iterations,
        master_name=master_name,
        reference_build_number=build_number,
        step_name=step_name,
        test_name=test_name,
        timeout_seconds=timeout_seconds)

    mock_trigger.return_value = None

    mocked_pipeline_id.__get__ = mock.Mock(return_value=pipeline_id)
    pipeline_job = RunFlakeSwarmingTaskPipeline(run_flake_swarming_task_input)
    with self.assertRaises(pipeline.Retry):
      pipeline_job.RunImpl(run_flake_swarming_task_input)

    mock_trigger.assert_called_once_with(
        master_name=master_name,
        builder_name=builder_name,
        reference_build_number=build_number,
        step_name=step_name,
        test_name=test_name,
        isolate_sha=isolate_sha,
        iterations=iterations,
        timeout_seconds=timeout_seconds,
        runner_id=pipeline_id)