77 NoopTelemetryClient ,
88 TelemetryClientFactory ,
99 TelemetryHelper ,
10- BaseTelemetryClient ,
1110)
1211from databricks .sql .telemetry .models .enums import AuthMech , AuthFlow
1312from databricks .sql .auth .authenticators import (
1413 AccessTokenAuthProvider ,
1514 DatabricksOAuthProvider ,
1615 ExternalAuthProvider ,
1716)
17+ from databricks import sql
1818
1919
2020@pytest .fixture
@@ -311,8 +311,6 @@ def test_connection_failure_sends_correct_telemetry_payload(
311311 mock_session .side_effect = Exception (error_message )
312312
313313 try :
314- from databricks import sql
315-
316314 sql .connect (server_hostname = "test-host" , http_path = "/test-path" )
317315 except Exception as e :
318316 assert str (e ) == error_message
@@ -321,3 +319,90 @@ def test_connection_failure_sends_correct_telemetry_payload(
321319 call_arguments = mock_export_failure_log .call_args
322320 assert call_arguments [0 ][0 ] == "Exception"
323321 assert call_arguments [0 ][1 ] == error_message
322+
323+
324+ @patch ("databricks.sql.client.Session" )
325+ class TestTelemetryFeatureFlag :
326+ """Tests the interaction between the telemetry feature flag and connection parameters."""
327+
328+ def _mock_ff_response (self , mock_requests_get , enabled : bool ):
329+ """Helper to configure the mock response for the feature flag endpoint."""
330+ mock_response = MagicMock ()
331+ mock_response .status_code = 200
332+ payload = {
333+ "flags" : [
334+ {
335+ "name" : "databricks.partnerplatform.clientConfigsFeatureFlags.enableTelemetryForPythonDriver" ,
336+ "value" : str (enabled ).lower (),
337+ }
338+ ],
339+ "ttl_seconds" : 3600 ,
340+ }
341+ mock_response .json .return_value = payload
342+ mock_requests_get .return_value = mock_response
343+
344+ @patch ("databricks.sql.common.feature_flag.requests.get" )
345+ def test_telemetry_enabled_when_flag_is_true (
346+ self , mock_requests_get , MockSession
347+ ):
348+ """Telemetry should be ON when enable_telemetry=True and server flag is 'true'."""
349+ self ._mock_ff_response (mock_requests_get , enabled = True )
350+ mock_session_instance = MockSession .return_value
351+ mock_session_instance .guid_hex = "test-session-ff-true"
352+ mock_session_instance .auth_provider = AccessTokenAuthProvider ("token" )
353+
354+ conn = sql .client .Connection (
355+ server_hostname = "test" ,
356+ http_path = "test" ,
357+ access_token = "test" ,
358+ enable_telemetry = True ,
359+ )
360+
361+ assert conn .telemetry_enabled is True
362+ mock_requests_get .assert_called_once ()
363+ client = TelemetryClientFactory .get_telemetry_client ("test-session-ff-true" )
364+ assert isinstance (client , TelemetryClient )
365+
366+ @patch ("databricks.sql.common.feature_flag.requests.get" )
367+ def test_telemetry_disabled_when_flag_is_false (
368+ self , mock_requests_get , MockSession
369+ ):
370+ """Telemetry should be OFF when enable_telemetry=True but server flag is 'false'."""
371+ self ._mock_ff_response (mock_requests_get , enabled = False )
372+ mock_session_instance = MockSession .return_value
373+ mock_session_instance .guid_hex = "test-session-ff-false"
374+ mock_session_instance .auth_provider = AccessTokenAuthProvider ("token" )
375+
376+ conn = sql .client .Connection (
377+ server_hostname = "test" ,
378+ http_path = "test" ,
379+ access_token = "test" ,
380+ enable_telemetry = True ,
381+ )
382+
383+ assert conn .telemetry_enabled is False
384+ mock_requests_get .assert_called_once ()
385+ client = TelemetryClientFactory .get_telemetry_client ("test-session-ff-false" )
386+ assert isinstance (client , NoopTelemetryClient )
387+
388+ @patch ("databricks.sql.common.feature_flag.requests.get" )
389+ def test_telemetry_disabled_when_flag_request_fails (
390+ self , mock_requests_get , MockSession
391+ ):
392+ """Telemetry should default to OFF if the feature flag network request fails."""
393+ mock_requests_get .side_effect = Exception ("Network is down" )
394+ mock_session_instance = MockSession .return_value
395+ mock_session_instance .guid_hex = "test-session-ff-fail"
396+ mock_session_instance .auth_provider = AccessTokenAuthProvider ("token" )
397+
398+ conn = sql .client .Connection (
399+ server_hostname = "test" ,
400+ http_path = "test" ,
401+ access_token = "test" ,
402+ enable_telemetry = True ,
403+ )
404+
405+ assert conn .telemetry_enabled is False
406+ mock_requests_get .assert_called_once ()
407+ client = TelemetryClientFactory .get_telemetry_client ("test-session-ff-fail" )
408+ assert isinstance (client , NoopTelemetryClient )
0 commit comments