code: def test_callproc(self):
      # Until DBAPI 2.0 compliance, callproc should return None or it's just
      # misleading. Therefore, we will skip the return value test for
      # callproc and only perform the fetch test.
      #
      # For what it's worth, the DBAPI2.0 test_callproc doesn't actually
      # test for DBAPI2.0 compliance! It doesn't check for modified OUT and
      # IN/OUT parameters in the return values!
      con = self._connect()
      try:
          cur = con.cursor()
          if self.lower_func and hasattr(cur, "callproc"):
              cur.callproc(self.lower_func, ("FOO",))
              r = cur.fetchall()
              self.assertEqual(
                  len(r), 1, "callproc produced no result set"
              )
              self.assertEqual(
                  len(r[0]), 1, "callproc produced invalid result set"
              )
              self.assertEqual(
                  r[0][0], "foo", "callproc produced invalid results"
              )
      finally:
          con.close()
  
file_path: psycopg2/tests/test_psycopg2_dbapi20.py
imports: from .None import dbapi20
  from .None import dbapi20_tpc
  from .testutils import skip_if_tpc_disabled
  import unittest
  import psycopg2
  from .testconfig import dsn
label_desc: Use image node_id 1 for calling the Psycopg2Tests obj's underlying member method code with example usage: obj.test_callproc() without return types