1515import collections
1616import mock
1717import requests
18+ import sys
1819import unittest
1920
2021from opencensus .ext .azure .metrics_exporter import standard_metrics
2122from opencensus .trace import execution_context
23+ if sys .version_info < (3 ,):
24+ from BaseHTTPServer import HTTPServer
25+ else :
26+ from http .server import HTTPServer
2227
2328ORIGINAL_FUNCTION = requests .Session .request
29+ ORIGINAL_CONS = HTTPServer .__init__
2430
2531
2632class TestStandardMetrics (unittest .TestCase ):
2733 def setUp (self ):
28- standard_metrics .dependency .dependency_map .clear ()
34+ standard_metrics .http_dependency .dependency_map .clear ()
35+ standard_metrics .http_requests .requests_map .clear ()
2936 requests .Session .request = ORIGINAL_FUNCTION
30- standard_metrics .dependency .ORIGINAL_REQUEST = ORIGINAL_FUNCTION
37+ standard_metrics .http_dependency .ORIGINAL_REQUEST = ORIGINAL_FUNCTION
38+ standard_metrics .http_requests .ORIGINAL_CONSTRUCTOR = ORIGINAL_CONS
3139
3240 @mock .patch ('opencensus.ext.azure.metrics_exporter'
3341 '.standard_metrics.register_metrics' )
@@ -40,12 +48,12 @@ def test_producer_get_metrics(self):
4048 producer = standard_metrics .AzureStandardMetricsProducer ()
4149 metrics = producer .get_metrics ()
4250
43- self .assertEqual (len (metrics ), 5 )
51+ self .assertEqual (len (metrics ), 6 )
4452
4553 def test_register_metrics (self ):
4654 registry = standard_metrics .register_metrics ()
4755
48- self .assertEqual (len (registry .get_metrics ()), 5 )
56+ self .assertEqual (len (registry .get_metrics ()), 6 )
4957
5058 def test_get_available_memory_metric (self ):
5159 metric = standard_metrics .AvailableMemoryMetric ()
@@ -135,21 +143,21 @@ def test_get_process_cpu_usage_exception(self, logger_mock):
135143 logger_mock .exception .assert_called ()
136144
137145 def test_dependency_patch (self ):
138- map = standard_metrics .dependency .dependency_map
139- standard_metrics .dependency .ORIGINAL_REQUEST = lambda x : None
146+ map = standard_metrics .http_dependency .dependency_map
147+ standard_metrics .http_dependency .ORIGINAL_REQUEST = lambda x : None
140148 session = requests .Session ()
141149 execution_context .set_is_exporter (False )
142- result = standard_metrics .dependency .dependency_patch (session )
150+ result = standard_metrics .http_dependency .dependency_patch (session )
143151
144152 self .assertEqual (map ['count' ], 1 )
145153 self .assertIsNone (result )
146154
147155 def test_dependency_patch_exporter_thread (self ):
148- map = standard_metrics .dependency .dependency_map
149- standard_metrics .dependency .ORIGINAL_REQUEST = lambda x : None
156+ map = standard_metrics .http_dependency .dependency_map
157+ standard_metrics .http_dependency .ORIGINAL_REQUEST = lambda x : None
150158 session = mock .Mock ()
151159 execution_context .set_is_exporter (True )
152- result = standard_metrics .dependency .dependency_patch (session )
160+ result = standard_metrics .http_dependency .dependency_patch (session )
153161
154162 self .assertIsNone (map .get ('count' ))
155163 self .assertIsNone (result )
@@ -167,21 +175,126 @@ def test_get_dependency_rate_first_time(self):
167175 self .assertEqual (rate , 0 )
168176
169177 @mock .patch ('opencensus.ext.azure.metrics_exporter'
170- '.standard_metrics.dependency .time' )
178+ '.standard_metrics.http_dependency .time' )
171179 def test_get_dependency_rate (self , time_mock ):
172180 time_mock .time .return_value = 100
173- standard_metrics .dependency .dependency_map ['last_time' ] = 98
174- standard_metrics .dependency .dependency_map ['count' ] = 4
181+ standard_metrics .http_dependency .dependency_map ['last_time' ] = 98
182+ standard_metrics .http_dependency .dependency_map ['count' ] = 4
175183 rate = standard_metrics .DependencyRateMetric .get_value ()
176184
177185 self .assertEqual (rate , 2 )
178186
179187 @mock .patch ('opencensus.ext.azure.metrics_exporter'
180- '.standard_metrics.dependency .time' )
188+ '.standard_metrics.http_dependency .time' )
181189 def test_get_dependency_rate_error (self , time_mock ):
182190 time_mock .time .return_value = 100
183- standard_metrics .dependency .dependency_map ['last_result' ] = 5
184- standard_metrics .dependency .dependency_map ['last_time' ] = 100
191+ standard_metrics .http_dependency .dependency_map ['last_result' ] = 5
192+ standard_metrics .http_dependency .dependency_map ['last_time' ] = 100
185193 result = standard_metrics .DependencyRateMetric .get_value ()
186194
187195 self .assertEqual (result , 5 )
196+
197+ def test_request_patch (self ):
198+ map = standard_metrics .http_requests .requests_map
199+ func = mock .Mock ()
200+ new_func = standard_metrics .http_requests .request_patch (func )
201+ new_func ()
202+
203+ self .assertEqual (map ['count' ], 1 )
204+ self .assertEqual (len (func .call_args_list ), 1 )
205+
206+ def test_server_patch (self ):
207+ standard_metrics . \
208+ http_requests . \
209+ ORIGINAL_CONSTRUCTOR = lambda x , y , z : None
210+ with mock .patch ('opencensus.ext.azure.metrics_exporter'
211+ '.standard_metrics.http_requests'
212+ '.request_patch' ) as request_mock :
213+ handler = mock .Mock ()
214+ handler .do_DELETE .return_value = None
215+ handler .do_GET .return_value = None
216+ handler .do_HEAD .return_value = None
217+ handler .do_OPTIONS .return_value = None
218+ handler .do_POST .return_value = None
219+ handler .do_PUT .return_value = None
220+ result = standard_metrics . \
221+ http_requests . \
222+ server_patch (None , None , handler )
223+ handler .do_DELETE ()
224+ handler .do_GET ()
225+ handler .do_HEAD ()
226+ handler .do_OPTIONS ()
227+ handler .do_POST ()
228+ handler .do_PUT ()
229+
230+ self .assertEqual (result , None )
231+ self .assertEqual (len (request_mock .call_args_list ), 6 )
232+
233+ def test_server_patch_no_methods (self ):
234+ standard_metrics . \
235+ http_requests . \
236+ ORIGINAL_CONSTRUCTOR = lambda x , y , z : None
237+ with mock .patch ('opencensus.ext.azure.metrics_exporter'
238+ '.standard_metrics.http_requests'
239+ '.request_patch' ) as request_mock :
240+ handler = mock .Mock ()
241+ result = standard_metrics . \
242+ http_requests . \
243+ server_patch (None , None , handler )
244+ handler .do_DELETE ()
245+ handler .do_GET ()
246+ handler .do_HEAD ()
247+ handler .do_OPTIONS ()
248+ handler .do_POST ()
249+ handler .do_PUT ()
250+
251+ self .assertEqual (result , None )
252+ self .assertEqual (len (request_mock .call_args_list ), 0 )
253+
254+ def test_server_patch_no_args (self ):
255+ standard_metrics \
256+ .http_requests \
257+ .ORIGINAL_CONSTRUCTOR = lambda x , y : None
258+ r = standard_metrics .http_requests .server_patch (None , None )
259+
260+ self .assertEqual (r , None )
261+
262+ def test_server_patch_no_handler (self ):
263+ standard_metrics \
264+ .http_requests \
265+ .ORIGINAL_CONSTRUCTOR = lambda x , y , z : None
266+ r = standard_metrics .http_requests .server_patch (None , None , None )
267+
268+ self .assertEqual (r , None )
269+
270+ def test_get_request_rate_metric (self ):
271+ metric = standard_metrics .RequestsRateMetric ()
272+ gauge = metric ()
273+
274+ name = '\\ ASP.NET Applications(??APP_W3SVC_PROC??)\\ Requests/Sec'
275+ self .assertEqual (gauge .descriptor .name , name )
276+
277+ def test_get_request_rate_first_time (self ):
278+ rate = standard_metrics .RequestsRateMetric .get_value ()
279+
280+ self .assertEqual (rate , 0 )
281+
282+ @mock .patch ('opencensus.ext.azure.metrics_exporter'
283+ '.standard_metrics.http_requests.time' )
284+ def test_get_request_rate (self , time_mock ):
285+ time_mock .time .return_value = 100
286+ standard_metrics .http_requests .requests_map ['last_time' ] = 98
287+ standard_metrics .http_requests .requests_map ['count' ] = 4
288+ rate = standard_metrics .RequestsRateMetric .get_value ()
289+
290+ self .assertEqual (rate , 2 )
291+
292+ @mock .patch ('opencensus.ext.azure.metrics_exporter'
293+ '.standard_metrics.http_requests.time' )
294+ def test_get_request_rate_error (self , time_mock ):
295+ time_mock .time .return_value = 100
296+ standard_metrics .http_requests .requests_map ['last_result' ] = 5
297+ standard_metrics .http_requests .requests_map ['last_time' ] = 100
298+ result = standard_metrics .RequestsRateMetric .get_value ()
299+
300+ self .assertEqual (result , 5 )
0 commit comments