11"""Tests for Jupyter Server metrics functionality."""
22
3- import pytest
4- import requests
53import time
64from unittest .mock import patch
75
6+ import pytest
7+ import requests
8+
89from jupyter_server .prometheus .server import PrometheusMetricsServer , start_metrics_server
910from jupyter_server .serverapp import ServerApp
1011
1314def metrics_server_app ():
1415 """Create a server app with metrics enabled on a specific port."""
1516 # Override the environment variable for this test
16- with patch .dict (' os.environ' , {' JUPYTER_SERVER_METRICS_PORT' : ' 9090' }):
17+ with patch .dict (" os.environ" , {" JUPYTER_SERVER_METRICS_PORT" : " 9090" }):
1718 app = ServerApp ()
1819 # Set the metrics_port directly as a trait
1920 app .metrics_port = 9090
@@ -29,38 +30,38 @@ def metrics_server(metrics_server_app):
2930 time .sleep (0.1 )
3031 yield server
3132 # Cleanup
32- if hasattr (server , ' stop' ):
33+ if hasattr (server , " stop" ):
3334 server .stop ()
3435
3536
3637def test_metrics_server_starts (metrics_server ):
3738 """Test that the metrics server starts successfully."""
3839 assert metrics_server is not None
39- assert hasattr (metrics_server , ' port' )
40+ assert hasattr (metrics_server , " port" )
4041 assert metrics_server .port == 9090
4142
4243
4344def test_metrics_endpoint_accessible (metrics_server ):
4445 """Test that the metrics endpoint is accessible."""
45- response = requests .get (f' http://localhost:{ metrics_server .port } /metrics' )
46+ response = requests .get (f" http://localhost:{ metrics_server .port } /metrics" )
4647 assert response .status_code == 200
47- assert ' jupyter_server' in response .text
48+ assert " jupyter_server" in response .text
4849
4950
5051def test_metrics_contains_kernel_metrics (metrics_server ):
5152 """Test that kernel metrics are present."""
52- response = requests .get (f' http://localhost:{ metrics_server .port } /metrics' )
53+ response = requests .get (f" http://localhost:{ metrics_server .port } /metrics" )
5354 assert response .status_code == 200
5455 content = response .text
55- assert ' jupyter_kernel_currently_running_total' in content
56+ assert " jupyter_kernel_currently_running_total" in content
5657
5758
5859def test_metrics_contains_server_info (metrics_server ):
5960 """Test that server info metrics are present."""
60- response = requests .get (f' http://localhost:{ metrics_server .port } /metrics' )
61+ response = requests .get (f" http://localhost:{ metrics_server .port } /metrics" )
6162 assert response .status_code == 200
6263 content = response .text
63- assert ' jupyter_server_info' in content
64+ assert " jupyter_server_info" in content
6465
6566
6667def test_metrics_server_with_authentication ():
@@ -70,20 +71,20 @@ def test_metrics_server_with_authentication():
7071 app .authenticate_prometheus = True
7172 app .initialize ([])
7273 app .identity_provider .token = "test_token"
73-
74+
7475 server = start_metrics_server (app , 9091 )
7576 time .sleep (0.1 )
76-
77+
7778 try :
7879 # Without token should fail
79- response = requests .get (f' http://localhost:{ server .port } /metrics' )
80+ response = requests .get (f" http://localhost:{ server .port } /metrics" )
8081 assert response .status_code == 401
81-
82+
8283 # With token should succeed
83- response = requests .get (f' http://localhost:{ server .port } /metrics?token=test_token' )
84+ response = requests .get (f" http://localhost:{ server .port } /metrics?token=test_token" )
8485 assert response .status_code == 200
8586 finally :
86- if hasattr (server , ' stop' ):
87+ if hasattr (server , " stop" ):
8788 server .stop ()
8889
8990
@@ -96,31 +97,31 @@ def test_metrics_server_port_conflict_handling():
9697 # Start first server
9798 server1 = start_metrics_server (app , 9092 )
9899 time .sleep (0.1 )
99-
100+
100101 try :
101102 # Try to start second server on same port
102103 server2 = start_metrics_server (app , 9092 )
103104 time .sleep (0.1 )
104-
105+
105106 # One of them should have failed to start or used a different port
106- if server2 is not None and hasattr (server2 , ' port' ):
107+ if server2 is not None and hasattr (server2 , " port" ):
107108 assert server2 .port != 9092 or server1 .port != 9092
108109 finally :
109- if hasattr (server1 , ' stop' ):
110+ if hasattr (server1 , " stop" ):
110111 server1 .stop ()
111- if server2 is not None and hasattr (server2 , ' stop' ):
112+ if server2 is not None and hasattr (server2 , " stop" ):
112113 server2 .stop ()
113114
114115
115116def test_metrics_server_disabled_when_port_zero ():
116117 """Test that metrics server is not started when port is 0."""
117- with patch .dict (' os.environ' , {' JUPYTER_SERVER_METRICS_PORT' : '0' }):
118+ with patch .dict (" os.environ" , {" JUPYTER_SERVER_METRICS_PORT" : "0" }):
118119 app = ServerApp ()
119120 app .metrics_port = 0
120121 app .initialize ([])
121-
122+
122123 # Should not start metrics server
123- assert not hasattr (app , ' metrics_server' ) or app .metrics_server is None
124+ assert not hasattr (app , " metrics_server" ) or app .metrics_server is None
124125
125126
126127def test_metrics_url_logging_with_separate_server ():
@@ -130,18 +131,18 @@ def test_metrics_url_logging_with_separate_server():
130131 app .authenticate_prometheus = True
131132 app .initialize ([])
132133 app .identity_provider .token = "test_token"
133-
134+
134135 # Start metrics server
135136 server = start_metrics_server (app , 9093 )
136137 time .sleep (0.1 )
137-
138+
138139 try :
139140 # The URL should include the separate port
140141 expected_url = "http://localhost:9093/metrics?token=test_token"
141142 # This is a basic test - in practice you'd capture the log output
142143 assert server .port == 9093
143144 finally :
144- if hasattr (server , ' stop' ):
145+ if hasattr (server , " stop" ):
145146 server .stop ()
146147
147148
@@ -152,7 +153,7 @@ def test_metrics_url_logging_with_main_server():
152153 app .authenticate_prometheus = True
153154 app .initialize ([])
154155 app .identity_provider .token = "test_token"
155-
156+
156157 # Should use main server's /metrics endpoint
157158 # This would be tested by checking the log output in practice
158- assert app .metrics_port == 0
159+ assert app .metrics_port == 0
0 commit comments