@@ -125,7 +125,7 @@ def test_not_blank_project(self):
125125 '.monitoring_v3.MetricServiceClient' ), _Client )
126126
127127 with patch_client :
128- exporter_created , transport = stackdriver .new_stats_exporter (
128+ exporter_created = stackdriver .new_stats_exporter (
129129 stackdriver .Options (project_id = 1 ))
130130
131131 self .assertIsInstance (exporter_created ,
@@ -146,7 +146,7 @@ def test_client_info_user_agent(self):
146146 '.MetricServiceClient' , _Client )
147147
148148 with patch_client :
149- exporter , transport = stackdriver .new_stats_exporter (
149+ exporter = stackdriver .new_stats_exporter (
150150 stackdriver .Options (project_id = 1 ))
151151
152152 self .assertIn (stackdriver .get_user_agent_slug (),
@@ -372,8 +372,38 @@ def step(self):
372372 self .logger .exception ("Error handling metric export" )
373373
374374
375+ class MockGetExporterThread (object ):
376+ """Intercept calls to get_exporter_thread.
377+
378+ To get a reference to the running PeriodicTask created by
379+ get_exporter_thread.
380+ """
381+ def __init__ (self ):
382+ self .transport = None
383+
384+ def __enter__ (self ):
385+ original_func = transport_module .get_exporter_thread
386+
387+ def get_exporter_thread (* aa , ** kw ):
388+ self .transport = original_func (* aa , ** kw )
389+
390+ mock_get = mock .Mock ()
391+ mock_get .side_effect = get_exporter_thread
392+ self .patcher = mock .patch (
393+ ('opencensus.ext.stackdriver.stats_exporter'
394+ '.transport.get_exporter_thread' ),
395+ mock_get )
396+ self .patcher .start ()
397+ return self
398+
399+ def __exit__ (self , type , value , traceback ):
400+ self .patcher .stop ()
401+
402+
375403@mock .patch ('opencensus.ext.stackdriver.stats_exporter'
376404 '.monitoring_v3.MetricServiceClient' )
405+ @mock .patch ('opencensus.ext.stackdriver.stats_exporter'
406+ '.stats.stats' )
377407class TestAsyncStatsExport (unittest .TestCase ):
378408 """Check that metrics are exported using the exporter thread."""
379409
@@ -384,22 +414,19 @@ def setUp(self):
384414 patcher .start ()
385415 self .addCleanup (patcher .stop )
386416
387- @mock .patch ('opencensus.ext.stackdriver.stats_exporter'
388- '.stats.stats' )
389417 def test_export_empty (self , mock_stats , mock_client ):
390418 """Check that we don't attempt to export empty metric sets."""
391419
392420 mock_stats .get_metrics .return_value = []
393421
394- exporter , transport = stackdriver .new_stats_exporter (
395- stackdriver .Options (project_id = 1 ))
422+ with MockGetExporterThread () as mget :
423+ exporter = stackdriver .new_stats_exporter (
424+ stackdriver .Options (project_id = 1 ))
425+ mget .transport .step ()
396426
397- transport .step ()
398427 exporter .client .create_metric_descriptor .assert_not_called ()
399428 exporter .client .create_time_series .assert_not_called ()
400429
401- @mock .patch ('opencensus.ext.stackdriver.stats_exporter'
402- '.stats.stats' )
403430 def test_export_single_metric (self , mock_stats , mock_client ):
404431 """Check that we can export a set of a single metric."""
405432
@@ -424,10 +451,10 @@ def test_export_single_metric(self, mock_stats, mock_client):
424451 mm = metric .Metric (descriptor = desc , time_series = ts )
425452 mock_stats .get_metrics .return_value = [mm ]
426453
427- exporter , transport = stackdriver . new_stats_exporter (
428- stackdriver .Options ( project_id = 1 ))
429-
430- transport .step ()
454+ with MockGetExporterThread () as mget :
455+ exporter = stackdriver .new_stats_exporter (
456+ stackdriver . Options ( project_id = 1 ))
457+ mget . transport .step ()
431458
432459 exporter .client .create_metric_descriptor .assert_called ()
433460 self .assertEqual (
0 commit comments