class_docstr: Test waiters from ``amazon/aws/waiters/emr.json``.
class_docstr_tok: ["Test","waiters","from","``","amazon\/aws\/waiters\/emr.json","``","."]
docstr: Test steps failed
code: def test_steps_failed(self, mock_list_steps):
      """Test steps failed"""
      mock_list_steps.side_effect = [
          self.list_steps(
              [(self.STEP_ID1, "PENDING"), (self.STEP_ID2, "RUNNING")]
          ),
          self.list_steps(
              [(self.STEP_ID1, "RUNNING"), (self.STEP_ID2, "COMPLETED")]
          ),
          self.list_steps(
              [(self.STEP_ID1, "FAILED"), (self.STEP_ID2, "COMPLETED")]
          ),
      ]
      waiter = EmrHook(aws_conn_id=None).get_waiter(
          "steps_wait_for_terminal"
      )
  
      with pytest.raises(
          WaiterError,
          match="Waiter encountered a terminal failure state",
      ):
          waiter.wait(
              ClusterId=self.JOBFLOW_ID,
              StepIds=[self.STEP_ID1, self.STEP_ID2],
              WaiterConfig={"Delay": 0.01, "MaxAttempts": 3},
          )
  
imports: from __future__ import annotations
  import json
  from typing import Sequence
  from unittest import mock
  import boto3
  import pytest
  from botocore.exceptions import WaiterError
  from botocore.waiter import WaiterModel
  from moto import mock_eks
  from airflow.providers.amazon.aws.hooks.base_aws import AwsBaseHook
  from airflow.providers.amazon.aws.hooks.batch_client import BatchClientHook
  from airflow.providers.amazon.aws.hooks.dynamodb import DynamoDBHook
  from airflow.providers.amazon.aws.hooks.ecs import EcsClusterStates, EcsHook, EcsTaskDefinitionStates
  from airflow.providers.amazon.aws.hooks.eks import EksHook
  from airflow.providers.amazon.aws.hooks.emr import EmrHook
  from airflow.providers.amazon.aws.waiters.base_waiter import BaseBotoWaiter
label_desc: Use image node_id 6 for calling the TestCustomEmrServiceWaiters obj's underlying member method code with example usage: obj.test_steps_failed(mock_list_steps) without return types