19
19
import asyncio
20
20
from datetime import datetime , timezone
21
21
from unittest .mock import AsyncMock , MagicMock , Mock , patch
22
+ import socket
22
23
23
24
# Third-Party
24
25
import httpx
@@ -172,12 +173,13 @@ async def test_register_gateway(self, gateway_service, test_db, monkeypatch):
172
173
)
173
174
)
174
175
gateway_service ._notify_gateway_added = AsyncMock ()
175
-
176
+ normalize_url = lambda url : f"http://{ socket .gethostbyname (url )} /gateway"
177
+ url = normalize_url ("example.com" )
176
178
# Patch GatewayRead.model_validate to return a mock with .masked()
177
179
mock_model = Mock ()
178
180
mock_model .masked .return_value = mock_model
179
181
mock_model .name = "test_gateway"
180
- mock_model .url = "http://example.com/gateway"
182
+ mock_model .url = url
181
183
mock_model .description = "A test gateway"
182
184
183
185
monkeypatch .setattr (
@@ -187,7 +189,7 @@ async def test_register_gateway(self, gateway_service, test_db, monkeypatch):
187
189
188
190
gateway_create = GatewayCreate (
189
191
name = "test_gateway" ,
190
- url = "http://example.com/gateway" ,
192
+ url = url ,
191
193
description = "A test gateway" ,
192
194
)
193
195
@@ -202,9 +204,10 @@ async def test_register_gateway(self, gateway_service, test_db, monkeypatch):
202
204
# `result` is the same GatewayCreate instance because we stubbed
203
205
# GatewayRead.model_validate → just check its fields:
204
206
assert result .name == "test_gateway"
205
- assert result .url == "http://example.com/gateway"
207
+ expected_url = url
208
+ assert result .url == expected_url
206
209
assert result .description == "A test gateway"
207
-
210
+ mock_model . url = expected_url
208
211
@pytest .mark .asyncio
209
212
async def test_register_gateway_name_conflict (self , gateway_service , mock_gateway , test_db ):
210
213
"""Trying to register a gateway whose *name* already exists raises a conflict error."""
@@ -229,7 +232,6 @@ async def test_register_gateway_name_conflict(self, gateway_service, mock_gatewa
229
232
async def test_register_gateway_connection_error (self , gateway_service , test_db ):
230
233
"""Initial connection to the remote gateway fails and the error propagates."""
231
234
test_db .execute = Mock (return_value = _make_execute_result (scalar = None ))
232
-
233
235
# _initialize_gateway blows up before any DB work happens
234
236
gateway_service ._initialize_gateway = AsyncMock (side_effect = GatewayConnectionError ("Failed to connect" ))
235
237
@@ -257,28 +259,39 @@ async def test_register_gateway_with_auth(self, gateway_service, test_db, monkey
257
259
test_db .commit = Mock ()
258
260
test_db .refresh = Mock ()
259
261
262
+ #url = f"http://{socket.gethostbyname('example.com')}/gateway"
263
+ normalize_url = lambda url : f"http://{ socket .gethostbyname (url )} /gateway"
264
+ url = normalize_url ("example.com" )
265
+ print (f"url:{ url } " )
260
266
gateway_service ._initialize_gateway = AsyncMock (
261
267
return_value = (
262
268
{
263
- "prompts" : {"listChanged" : True },
264
269
"resources" : {"listChanged" : True },
265
270
"tools" : {"listChanged" : True },
266
271
},
267
272
[],
268
273
)
269
274
)
275
+
270
276
gateway_service ._notify_gateway_added = AsyncMock ()
271
277
272
278
mock_model = Mock ()
273
279
mock_model .masked .return_value = mock_model
274
280
mock_model .name = "auth_gateway"
281
+ mock_model .url = url
275
282
276
283
monkeypatch .setattr (
277
284
"mcpgateway.services.gateway_service.GatewayRead.model_validate" ,
278
285
lambda x : mock_model ,
279
286
)
280
287
281
- gateway_create = GatewayCreate (name = "auth_gateway" , url = "http://example.com/gateway" , description = "Gateway with auth" , auth_type = "bearer" , auth_token = "test-token" )
288
+ gateway_create = GatewayCreate (
289
+ name = "auth_gateway" ,
290
+ url = url ,
291
+ description = "Gateway with auth" ,
292
+ auth_type = "bearer" ,
293
+ auth_token = "test-token"
294
+ )
282
295
283
296
await gateway_service .register_gateway (test_db , gateway_create )
284
297
@@ -973,16 +986,16 @@ async def test_update_gateway_url_change_with_tools(self, gateway_service, mock_
973
986
974
987
gateway_service ._initialize_gateway = AsyncMock (return_value = ({"tools" : {"listChanged" : True }}, new_tools ))
975
988
gateway_service ._notify_gateway_updated = AsyncMock ()
976
-
977
- gateway_update = GatewayUpdate (url = "http://example.com/new- url" )
989
+ url = GatewayService . normalize_url ( "http://example.com/new-url" )
990
+ gateway_update = GatewayUpdate (url = url )
978
991
979
992
mock_gateway_read = MagicMock ()
980
993
mock_gateway_read .masked .return_value = mock_gateway_read
981
994
982
995
with patch ("mcpgateway.services.gateway_service.GatewayRead.model_validate" , return_value = mock_gateway_read ):
983
996
await gateway_service .update_gateway (test_db , 1 , gateway_update )
984
997
985
- assert mock_gateway .url == "http://example.com/new- url"
998
+ assert mock_gateway .url == url
986
999
gateway_service ._initialize_gateway .assert_called_once ()
987
1000
test_db .commit .assert_called_once ()
988
1001
@@ -997,8 +1010,8 @@ async def test_update_gateway_url_initialization_failure(self, gateway_service,
997
1010
# Mock initialization failure
998
1011
gateway_service ._initialize_gateway = AsyncMock (side_effect = GatewayConnectionError ("Connection failed" ))
999
1012
gateway_service ._notify_gateway_updated = AsyncMock ()
1000
-
1001
- gateway_update = GatewayUpdate (url = "http://example.com/bad- url" )
1013
+ url = GatewayService . normalize_url ( "http://example.com/bad-url" )
1014
+ gateway_update = GatewayUpdate (url = url )
1002
1015
1003
1016
mock_gateway_read = MagicMock ()
1004
1017
mock_gateway_read .masked .return_value = mock_gateway_read
@@ -1007,7 +1020,7 @@ async def test_update_gateway_url_initialization_failure(self, gateway_service,
1007
1020
with patch ("mcpgateway.services.gateway_service.GatewayRead.model_validate" , return_value = mock_gateway_read ):
1008
1021
await gateway_service .update_gateway (test_db , 1 , gateway_update )
1009
1022
1010
- assert mock_gateway .url == "http://example.com/bad- url"
1023
+ assert mock_gateway .url == url
1011
1024
test_db .commit .assert_called_once ()
1012
1025
1013
1026
@pytest .mark .asyncio
0 commit comments