@@ -108,7 +108,11 @@ def _run_client(binary, port, extra_args=None):
108108
109109
110110class _OCSPInteropBase (unittest .TestCase ):
111- """Base class for a single client/responder combination."""
111+ """Base class for a single client/responder combination.
112+
113+ Not intended to be run directly -- only concrete subclasses that
114+ set CLIENT_BIN and RESPONDER_BIN are meaningful test classes.
115+ """
112116
113117 CLIENT_BIN = None
114118 RESPONDER_BIN = None
@@ -118,8 +122,6 @@ class _OCSPInteropBase(unittest.TestCase):
118122 def setUpClass (cls ):
119123 if not os .path .isdir (CERTS_DIR ):
120124 raise unittest .SkipTest ("certs directory not found" )
121- if cls .CLIENT_BIN is None or cls .RESPONDER_BIN is None :
122- raise unittest .SkipTest ("binary not configured" )
123125 if not _ocsp_supported (cls .CLIENT_BIN ):
124126 raise unittest .SkipTest (f"OCSP not supported by { cls .CLIENT_BIN } " )
125127 if not _ocsp_supported (cls .RESPONDER_BIN ):
@@ -334,5 +336,15 @@ class TestOpensslClientOpensslResponder(_OCSPInteropBase):
334336 PORT = OCSP_PORT_BASE + 3
335337
336338
339+ def load_tests (loader , tests , pattern ):
340+ """Exclude the abstract _OCSPInteropBase from test discovery."""
341+ suite = unittest .TestSuite ()
342+ for test_group in tests :
343+ for test in test_group :
344+ if type (test ).mro ()[0 ] is not _OCSPInteropBase :
345+ suite .addTest (test )
346+ return suite
347+
348+
337349if __name__ == "__main__" :
338350 test_main ()
0 commit comments