class_docstr: Interact with FTP.
  
  Errors that may occur throughout but should be handled downstream.
  You can specify mode for data transfers in the extra field of your
  connection as ``{"passive": "true"}``.
  
  :param ftp_conn_id: The :ref:`ftp connection id <howto/connection:ftp>`
      reference.
class_docstr_tok: ["Interact","with","FTP",".","Errors","that","may","occur","throughout","but","should","be","handled","downstream",".","You","can","specify","mode","for","data","transfers","in","the","extra","field","of","your","connection","as","``","{","``","passive","''",":","``","true","''","}","``",".",":","param","ftp_conn_id",":","The",":","ref",":","`","ftp","connection","id","<","howto\/connection",":","ftp",">","`","reference","."]
docstr: Test the FTP connection by calling path with directory.
docstr_tok: ["Test","the","FTP","connection","by","calling","path","with","directory","."]
code: def test_connection(self) -> tuple[bool, str]:
      """Test the FTP connection by calling path with directory."""
      try:
          conn = self.get_conn()
          conn.pwd
          return True, "Connection successfully tested"
      except Exception as e:
          return False, str(e)
  
imports: from __future__ import annotations
  import datetime
  import ftplib
  from typing import Any, Callable
  from airflow.hooks.base import BaseHook
label_desc: Use image node_id 16 for calling the FTPHook obj's underlying member method code with example usage: obj.test_connection() and returns: True,  str, False,  str