@@ -251,6 +251,140 @@ def test_compose_network_resolution(self, mock_docker_client, mock_config, mock_
251251
252252 network .connect .assert_called_once_with (traefik )
253253
254+ def test_no_alias_set (self , mock_docker_client , mock_config , mock_logger ):
255+ """
256+ When traefik.aliases is not set, the container should not get an alias
257+ """
258+ container = MagicMock ()
259+ container .name = "web-app"
260+ container .attrs = {
261+ "NetworkSettings" : {"Networks" : {"app_net" : {}}}
262+ }
263+ container .labels = {}
264+
265+ traefik = MagicMock ()
266+ traefik .attrs = {"NetworkSettings" : {"Networks" : {"bridge" : {}}}}
267+ mock_docker_client .containers .get .return_value = traefik
268+
269+ network = MagicMock ()
270+ network .attrs = {"Name" : "app_net" , "Labels" : {}}
271+ mock_docker_client .networks .get .return_value = network
272+
273+ main .connect_traefik_to_network (container )
274+
275+ network .connect .assert_called_once ()
276+ assert ("aliases" not in network .connect .call_args .kwargs .keys ())
277+
278+ def test_single_alias_set (self , mock_docker_client , mock_config , mock_logger ):
279+ """
280+ When traefik.aliases is set to a single value, the network connect call
281+ should have that value as alias
282+ """
283+ container = MagicMock ()
284+ container .name = "web-app"
285+ container .attrs = {
286+ "NetworkSettings" : {"Networks" : {"app_net" : {}}}
287+ }
288+ container .labels = {
289+ "traefik.aliases" : "app" ,
290+ "traefik.docker.network" : "app_net" ,
291+ }
292+
293+ traefik = MagicMock ()
294+ traefik .attrs = {"NetworkSettings" : {"Networks" : {"bridge" : {}}}}
295+ mock_docker_client .containers .get .return_value = traefik
296+
297+ network = MagicMock ()
298+ network .attrs = {"Name" : "app_net" , "Labels" : {}}
299+ mock_docker_client .networks .get .return_value = network
300+
301+ main .connect_traefik_to_network (container )
302+
303+ network .connect .assert_called_once_with (traefik , aliases = ["app" ])
304+
305+ def test_multiple_aliases_set (self , mock_docker_client , mock_config , mock_logger ):
306+ """
307+ When traefik.aliases is set to a comma separated string, the network
308+ connect call should have a list of strings value as aliases value
309+ """
310+ container = MagicMock ()
311+ container .name = "web-app"
312+ container .attrs = {
313+ "NetworkSettings" : {"Networks" : {"app_net" : {}}}
314+ }
315+ container .labels = {
316+ "traefik.aliases" : "app, app2, app3" ,
317+ "traefik.docker.network" : "app_net" ,
318+ }
319+
320+ traefik = MagicMock ()
321+ traefik .attrs = {"NetworkSettings" : {"Networks" : {"bridge" : {}}}}
322+ mock_docker_client .containers .get .return_value = traefik
323+
324+ network = MagicMock ()
325+ network .attrs = {"Name" : "app_net" , "Labels" : {}}
326+ mock_docker_client .networks .get .return_value = network
327+
328+ main .connect_traefik_to_network (container )
329+
330+ network .connect .assert_called_once_with (
331+ traefik , aliases = ["app" , "app2" , "app3" ])
332+
333+ def test_aliases_with_additional_whitespace (self , mock_docker_client , mock_config , mock_logger ):
334+ """
335+ When traefik.aliases is set to a comma separated string, the network
336+ connect call should have a list of strings value as aliases value
337+ """
338+ container = MagicMock ()
339+ container .name = "web-app"
340+ container .attrs = {
341+ "NetworkSettings" : {"Networks" : {"app_net" : {}}}
342+ }
343+ container .labels = {
344+ "traefik.aliases" : " app one, app2, app3 " ,
345+ "traefik.docker.network" : "app_net" ,
346+ }
347+
348+ traefik = MagicMock ()
349+ traefik .attrs = {"NetworkSettings" : {"Networks" : {"bridge" : {}}}}
350+ mock_docker_client .containers .get .return_value = traefik
351+
352+ network = MagicMock ()
353+ network .attrs = {"Name" : "app_net" , "Labels" : {}}
354+ mock_docker_client .networks .get .return_value = network
355+
356+ main .connect_traefik_to_network (container )
357+
358+ network .connect .assert_called_once_with (
359+ traefik , aliases = ["app one" , "app2" , "app3" ])
360+
361+ def test_alias_set_without_network_label (self , mock_docker_client , mock_config , mock_logger ):
362+ """
363+ Regression: when traefik.aliases is set but no allowed-networks label is
364+ provided (all networks allowed by default), the aliases must still be
365+ applied to the network connect call.
366+ """
367+ container = MagicMock ()
368+ container .name = "web-app"
369+ container .attrs = {
370+ "NetworkSettings" : {"Networks" : {"app_net" : {}}}
371+ }
372+ container .labels = {
373+ "traefik.aliases" : "app" ,
374+ }
375+
376+ traefik = MagicMock ()
377+ traefik .attrs = {"NetworkSettings" : {"Networks" : {"bridge" : {}}}}
378+ mock_docker_client .containers .get .return_value = traefik
379+
380+ network = MagicMock ()
381+ network .attrs = {"Name" : "app_net" , "Labels" : {}}
382+ mock_docker_client .networks .get .return_value = network
383+
384+ main .connect_traefik_to_network (container )
385+
386+ network .connect .assert_called_once_with (traefik , aliases = ["app" ])
387+
254388
255389# ---------------------------------------------------------------------------
256390# disconnect_traefik_from_network
@@ -462,3 +596,4 @@ def get_container(name):
462596
463597 # connect should have been called for both containers' networks
464598 assert network .connect .call_count == 2
599+
0 commit comments