68 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			Python
		
	
	
	
			
		
		
	
	
			68 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			Python
		
	
	
	
| # Copyright The OpenTelemetry Authors
 | |
| #
 | |
| # Licensed under the Apache License, Version 2.0 (the "License");
 | |
| # you may not use this file except in compliance with the License.
 | |
| # You may obtain a copy of the License at
 | |
| #
 | |
| #     http://www.apache.org/licenses/LICENSE-2.0
 | |
| #
 | |
| # Unless required by applicable law or agreed to in writing, software
 | |
| # distributed under the License is distributed on an "AS IS" BASIS,
 | |
| # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | |
| # See the License for the specific language governing permissions and
 | |
| # limitations under the License.
 | |
| 
 | |
| import logging
 | |
| import socket
 | |
| import unittest
 | |
| from http.client import HTTPConnection
 | |
| from unittest.mock import MagicMock, patch
 | |
| 
 | |
| from opentelemetry.util.http.httplib import trysetip
 | |
| 
 | |
| 
 | |
| class TestTrySetIP(unittest.TestCase):
 | |
|     def setUp(self):
 | |
|         # Setup a mock HTTPConnection
 | |
|         self.conn = MagicMock(spec=HTTPConnection)
 | |
|         self.conn.sock = MagicMock(spec=socket.socket)
 | |
| 
 | |
|         # Mock state function and Span class
 | |
|         self.mock_state = {"need_ip": [MagicMock()]}
 | |
|         self.mock_getstate = patch(
 | |
|             "opentelemetry.util.http.httplib._getstate",
 | |
|             return_value=self.mock_state,
 | |
|         )
 | |
|         self.mock_getstate.start()
 | |
| 
 | |
|     def test_ip_set_successfully(self):
 | |
|         self.conn.sock.getpeername.return_value = ("192.168.1.1", 8080)
 | |
| 
 | |
|         success = trysetip(self.conn, loglevel=logging.DEBUG)
 | |
| 
 | |
|         # Verify that the IP was set correctly
 | |
|         for span in self.mock_state["need_ip"]:
 | |
|             span.set_attribute.assert_called_once_with(
 | |
|                 "net.peer.ip", "192.168.1.1"
 | |
|             )
 | |
|         self.assertTrue(success)
 | |
| 
 | |
|     def test_no_socket_connection(self):
 | |
|         # Setup the connection with no socket
 | |
|         self.conn.sock = None
 | |
| 
 | |
|         success = trysetip(self.conn, loglevel=logging.DEBUG)
 | |
| 
 | |
|         self.assertFalse(success)
 | |
| 
 | |
|     def test_exception_during_ip_retrieval(self):
 | |
|         self.conn.sock.getpeername.side_effect = Exception("Test Exception")
 | |
| 
 | |
|         with self.assertLogs(level=logging.WARNING) as warning:
 | |
|             success = trysetip(self.conn, loglevel=logging.WARNING)
 | |
|             self.assertEqual(len(warning.records), 1)
 | |
|             self.assertIn(
 | |
|                 "Failed to get peer address", warning.records[0].message
 | |
|             )
 | |
|             self.assertTrue(success)
 |