diff --git a/tools/run_tests/xds_k8s_test_driver/framework/test_app/client_app.py b/tools/run_tests/xds_k8s_test_driver/framework/test_app/client_app.py index bd810354e08..fce48ef7b4e 100644 --- a/tools/run_tests/xds_k8s_test_driver/framework/test_app/client_app.py +++ b/tools/run_tests/xds_k8s_test_driver/framework/test_app/client_app.py @@ -129,7 +129,12 @@ class XdsTestClient(framework.rpc.grpc.GrpcApp): timeout_sec=timeout_sec ) - def wait_for_active_server_channel(self) -> _ChannelzChannel: + def wait_for_active_server_channel( + self, + *, + timeout: Optional[_timedelta] = None, + rpc_deadline: Optional[_timedelta] = None, + ) -> _ChannelzChannel: """Wait for the channel to the server to transition to READY. Raises: @@ -137,7 +142,9 @@ class XdsTestClient(framework.rpc.grpc.GrpcApp): """ try: return self.wait_for_server_channel_state( - _ChannelzChannelState.READY + _ChannelzChannelState.READY, + timeout=timeout, + rpc_deadline=rpc_deadline, ) except retryers.RetryError as retry_err: if isinstance(retry_err.exception(), self.ChannelNotFound): diff --git a/tools/run_tests/xds_k8s_test_driver/framework/xds_gamma_testcase.py b/tools/run_tests/xds_k8s_test_driver/framework/xds_gamma_testcase.py index 3334b6dc165..8734a41be3b 100644 --- a/tools/run_tests/xds_k8s_test_driver/framework/xds_gamma_testcase.py +++ b/tools/run_tests/xds_k8s_test_driver/framework/xds_gamma_testcase.py @@ -11,6 +11,7 @@ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. +import datetime import logging from typing import Optional @@ -125,4 +126,13 @@ class GammaXdsKubernetesTestCase(xds_k8s_testcase.RegularXdsKubernetesTestCase): f":{test_server.rpc_port}" ) kwargs.setdefault("generate_mesh_id", True) - return self._start_test_client(server_target=server_target, **kwargs) + # Waiting for an active channel takes less time in non-gamma + # test suites because they only start waiting after already waited for + # the TD backends to be created and report healthy. + # In GAMMA, these resources are created asynchronously by Kubernetes. + # To compensate for this, we double the timeout for GAMMA tests. + return self._start_test_client( + server_target, + wait_for_active_channel_timeout=datetime.timedelta(minutes=10), + **kwargs, + ) diff --git a/tools/run_tests/xds_k8s_test_driver/framework/xds_k8s_testcase.py b/tools/run_tests/xds_k8s_test_driver/framework/xds_k8s_testcase.py index 5d8b404c1b1..bd045701c77 100644 --- a/tools/run_tests/xds_k8s_test_driver/framework/xds_k8s_testcase.py +++ b/tools/run_tests/xds_k8s_test_driver/framework/xds_k8s_testcase.py @@ -816,11 +816,19 @@ class RegularXdsKubernetesTestCase(IsolatedXdsKubernetesTestCase): ) -> XdsTestClient: return self._start_test_client(test_server.xds_uri, **kwargs) - def _start_test_client(self, server_target: str, **kwargs) -> XdsTestClient: + def _start_test_client( + self, + server_target: str, + *, + wait_for_active_channel_timeout: Optional[_timedelta] = None, + **kwargs, + ) -> XdsTestClient: test_client = self.client_runner.run( server_target=server_target, **kwargs ) - test_client.wait_for_active_server_channel() + test_client.wait_for_active_server_channel( + timeout=wait_for_active_channel_timeout, + ) return test_client