1818import textwrap
1919import unittest
2020
21+ import freezegun
2122import mock
2223import pytest
2324import requests
@@ -956,6 +957,24 @@ def test_result_explicit_w_state(self, result):
956957 begin .assert_not_called ()
957958 result .assert_called_once_with (timeout = timeout )
958959
960+ @mock .patch ("google.api_core.future.polling.PollingFuture.result" )
961+ def test_result_splitting_timout_between_requests (self , result ):
962+ client = _make_client (project = self .PROJECT )
963+ job = self ._make_one (self .JOB_ID , client )
964+ begin = job ._begin = mock .Mock ()
965+ retry = mock .Mock ()
966+
967+ with freezegun .freeze_time ("1970-01-01 00:00:00" , tick = False ) as frozen_time :
968+
969+ def delayed_begin (* args , ** kwargs ):
970+ frozen_time .tick (delta = 0.3 )
971+
972+ begin .side_effect = delayed_begin
973+ job .result (retry = retry , timeout = 1.0 )
974+
975+ begin .assert_called_once_with (retry = retry , timeout = 1.0 )
976+ result .assert_called_once_with (timeout = 0.7 )
977+
959978 def test_cancelled_wo_error_result (self ):
960979 client = _make_client (project = self .PROJECT )
961980 job = self ._make_one (self .JOB_ID , client )
@@ -4551,7 +4570,8 @@ def test_result_w_timeout(self):
45514570 client = _make_client (project = self .PROJECT , connection = connection )
45524571 job = self ._make_one (self .JOB_ID , self .QUERY , client )
45534572
4554- job .result (timeout = 1.0 )
4573+ with freezegun .freeze_time ("1970-01-01 00:00:00" , tick = False ):
4574+ job .result (timeout = 1.0 )
45554575
45564576 self .assertEqual (len (connection .api_request .call_args_list ), 3 )
45574577 begin_request = connection .api_request .call_args_list [0 ]
@@ -4566,6 +4586,49 @@ def test_result_w_timeout(self):
45664586 self .assertEqual (query_request [1 ]["query_params" ]["timeoutMs" ], 900 )
45674587 self .assertEqual (reload_request [1 ]["method" ], "GET" )
45684588
4589+ @mock .patch ("google.api_core.future.polling.PollingFuture.result" )
4590+ def test_result_splitting_timout_between_requests (self , polling_result ):
4591+ begun_resource = self ._make_resource ()
4592+ query_resource = {
4593+ "jobComplete" : True ,
4594+ "jobReference" : {"projectId" : self .PROJECT , "jobId" : self .JOB_ID },
4595+ "schema" : {"fields" : [{"name" : "col1" , "type" : "STRING" }]},
4596+ "totalRows" : "5" ,
4597+ }
4598+ done_resource = copy .deepcopy (begun_resource )
4599+ done_resource ["status" ] = {"state" : "DONE" }
4600+
4601+ connection = _make_connection (begun_resource , query_resource , done_resource )
4602+ client = _make_client (project = self .PROJECT , connection = connection )
4603+ job = self ._make_one (self .JOB_ID , self .QUERY , client )
4604+
4605+ client .list_rows = mock .Mock ()
4606+
4607+ with freezegun .freeze_time ("1970-01-01 00:00:00" , tick = False ) as frozen_time :
4608+
4609+ def delayed_result (* args , ** kwargs ):
4610+ frozen_time .tick (delta = 0.8 )
4611+
4612+ polling_result .side_effect = delayed_result
4613+
4614+ def delayed_get_results (* args , ** kwargs ):
4615+ frozen_time .tick (delta = 0.5 )
4616+ return orig_get_results (* args , ** kwargs )
4617+
4618+ orig_get_results = client ._get_query_results
4619+ client ._get_query_results = mock .Mock (side_effect = delayed_get_results )
4620+ job .result (timeout = 2.0 )
4621+
4622+ polling_result .assert_called_once_with (timeout = 2.0 )
4623+
4624+ client ._get_query_results .assert_called_once ()
4625+ _ , kwargs = client ._get_query_results .call_args
4626+ self .assertAlmostEqual (kwargs .get ("timeout" ), 1.2 )
4627+
4628+ client .list_rows .assert_called_once ()
4629+ _ , kwargs = client .list_rows .call_args
4630+ self .assertAlmostEqual (kwargs .get ("timeout" ), 0.7 )
4631+
45694632 def test_result_w_page_size (self ):
45704633 # Arrange
45714634 query_results_resource = {
0 commit comments