code: def test_submit_timeout(self, requests_mock):
      self.db_hook.timeout = 1
      self.db_hook.max_ingestion_time = 5
      task_post = requests_mock.post(
          "http://druid-overlord:8081/druid/indexer/v1/task",
          text='{"task":"9f8a7359-77d4-4612-b0cd-cc2f6a3c28de"}',
      )
      status_check = requests_mock.get(
          "http://druid-overlord:8081/druid/indexer/v1/task/9f8a7359-77d4-4612-b0cd-cc2f6a3c28de/status",
          text='{"status":{"status": "RUNNING"}}',
      )
      shutdown_post = requests_mock.post(
          "http://druid-overlord:8081/druid/indexer/v1/task/"
          "9f8a7359-77d4-4612-b0cd-cc2f6a3c28de/shutdown",
          text='{"task":"9f8a7359-77d4-4612-b0cd-cc2f6a3c28de"}',
      )
  
      # Because the jobs keeps running
      with pytest.raises(AirflowException):
          self.db_hook.submit_indexing_job("Long json file")
  
      assert task_post.called_once
      assert status_check.called
      assert shutdown_post.called_once
  
imports: from __future__ import annotations
  from unittest.mock import MagicMock, patch
  import pytest
  import requests
  from airflow.exceptions import AirflowException
  from airflow.providers.apache.druid.hooks.druid import DruidDbApiHook, DruidHook, IngestionType
label_desc: Use image node_id 7 for calling the TestDruidSubmitHook obj's underlying member method code with example usage: obj.test_submit_timeout(requests_mock) without return types