1919import hashlib
2020import logging
2121import re
22- import signal
2322import time
24- from types import FrameType
25- from typing import Any , Callable , Final , Optional , Tuple , Union
23+ from typing import Callable , Final , Optional , Tuple
2624
2725from absl import flags
2826from absl .testing import absltest
8078ClientConfig = grpc_csds .ClientConfig
8179RpcMetadata = grpc_testing .LoadBalancerStatsResponse .RpcMetadata
8280MetadataByPeer : list [str , RpcMetadata ]
83- # pylint complains about signal.Signals for some reason.
84- _SignalNum = Union [int , signal .Signals ] # pylint: disable=no-member
85- _SignalHandler = Callable [[_SignalNum , Optional [FrameType ]], Any ]
8681
8782TD_CONFIG_MAX_WAIT : Final [dt .timedelta ] = dt .timedelta (minutes = 10 )
8883# TODO(sergiitk): get rid of the seconds constant, use timedelta
@@ -144,8 +139,6 @@ class XdsKubernetesBaseTestCase(base_testcase.BaseTestCase):
144139 server_xds_port : Optional [int ]
145140 td : TrafficDirectorManager
146141 td_bootstrap_image : str
147- _prev_sigint_handler : Optional [_SignalHandler ] = None
148- _handling_sigint : bool = False
149142 yaml_highlighter : framework .helpers .highlighter .HighlighterYaml = None
150143 enable_dualstack : bool = False
151144
@@ -269,39 +262,6 @@ def tearDownClass(cls):
269262 cls .secondary_k8s_api_manager .close ()
270263 cls .gcp_api_manager .close ()
271264
272- def setUp (self ):
273- self ._prev_sigint_handler = signal .signal (
274- signal .SIGINT , self .handle_sigint
275- )
276-
277- def handle_sigint (
278- self , signalnum : _SignalNum , frame : Optional [FrameType ]
279- ) -> None :
280- # TODO(sergiitk): move to base_testcase.BaseTestCase
281- if self ._handling_sigint :
282- logger .info ("Ctrl+C pressed twice, aborting the cleanup." )
283- else :
284- cleanup_delay_sec = 2
285- logger .info (
286- "Caught Ctrl+C. Cleanup will start in %d seconds."
287- " Press Ctrl+C again to abort." ,
288- cleanup_delay_sec ,
289- )
290- self ._handling_sigint = True
291- # Sleep for a few seconds to allow second Ctrl-C before the cleanup.
292- time .sleep (cleanup_delay_sec )
293- # Force resource cleanup by their name. Addresses the case where
294- # ctrl-c is pressed while waiting for the resource creation.
295- self .force_cleanup = True
296- self .tearDown ()
297- self .tearDownClass ()
298-
299- # Remove the sigint handler.
300- self ._handling_sigint = False
301- if self ._prev_sigint_handler is not None :
302- signal .signal (signal .SIGINT , self ._prev_sigint_handler )
303- raise KeyboardInterrupt
304-
305265 @contextlib .contextmanager
306266 def subTest (self , msg , ** params ): # noqa pylint: disable=signature-differs
307267 # TODO(sergiitk): move to base_testcase.BaseTestCase
@@ -779,6 +739,10 @@ class IsolatedXdsKubernetesTestCase(
779739 each test, and destroyed after.
780740 """
781741
742+ client_runner : Optional [KubernetesClientRunner ] = None
743+ server_runner : Optional [KubernetesServerRunner ] = None
744+ td : Optional [TrafficDirectorManager ] = None
745+
782746 def setUp (self ):
783747 """Hook method for setting up the test fixture before exercising it."""
784748 super ().setUp ()
@@ -850,12 +814,14 @@ def tearDown(self):
850814 client_restarts : int = 0
851815 server_restarts : int = 0
852816 try :
853- client_restarts = self .client_runner .get_pod_restarts (
854- self .client_runner .deployment
855- )
856- server_restarts = self .server_runner .get_pod_restarts (
857- self .server_runner .deployment
858- )
817+ if self .client_runner :
818+ client_restarts = self .client_runner .get_pod_restarts (
819+ self .client_runner .deployment
820+ )
821+ if self .server_runner :
822+ server_restarts = self .server_runner .get_pod_restarts (
823+ self .server_runner .deployment
824+ )
859825 except (retryers .RetryError , k8s .NotFound ) as e :
860826 logger .exception (e )
861827
@@ -869,9 +835,10 @@ def tearDown(self):
869835 except retryers .RetryError :
870836 logger .exception ("Got error during teardown" )
871837 finally :
872- logger .info ("----- Test client/server logs -----" )
873- self .client_runner .logs_explorer_run_history_links ()
874- self .server_runner .logs_explorer_run_history_links ()
838+ if self .client_runner and self .server_runner :
839+ logger .info ("----- Test client/server logs -----" )
840+ self .client_runner .logs_explorer_run_history_links ()
841+ self .server_runner .logs_explorer_run_history_links ()
875842
876843 # Fail if any of the pods restarted.
877844 self .assertEqual (
@@ -894,13 +861,16 @@ def tearDown(self):
894861 )
895862
896863 def cleanup (self ):
897- self .td .cleanup (force = self .force_cleanup )
898- self .client_runner .cleanup (
899- force = self .force_cleanup , force_namespace = self .force_cleanup
900- )
901- self .server_runner .cleanup (
902- force = self .force_cleanup , force_namespace = self .force_cleanup
903- )
864+ if self .td :
865+ self .td .cleanup (force = self .force_cleanup )
866+ if self .client_runner :
867+ self .client_runner .cleanup (
868+ force = self .force_cleanup , force_namespace = self .force_cleanup
869+ )
870+ if self .server_runner :
871+ self .server_runner .cleanup (
872+ force = self .force_cleanup , force_namespace = self .force_cleanup
873+ )
904874
905875 def _start_test_client (
906876 self ,
0 commit comments