@@ -103,20 +103,20 @@ defmodule CodexPooler.MailerTest do
103103 end
104104
105105 test "send_smtp_test_email/2 sanitizes SMTP delivery failures" do
106- port = free_port ( )
106+ port = start_closing_tcp_server! ( )
107107
108108 assert { :error , % { code: :smtp_test_email_connection_failed , message: message } = error } =
109109 Mailer . send_smtp_test_email ( "recipient@example.com" , % {
110110 from: "instance-sender@example.com" ,
111111 adapter_config: [
112112 adapter: Swoosh.Adapters.SMTP ,
113- relay: "localhost " ,
113+ relay: "127.0.0.1 " ,
114114 port: port ,
115115 username: "username" ,
116116 password: "wrong-password" ,
117117 ssl: false ,
118118 tls: :never ,
119- retries: 2
119+ retries: 0
120120 ]
121121 } )
122122
@@ -136,6 +136,32 @@ defmodule CodexPooler.MailerTest do
136136 end )
137137 end
138138
139+ defp start_closing_tcp_server! do
140+ { :ok , listener } = :gen_tcp . listen ( 0 , [ :binary , active: false , ip: { 127 , 0 , 0 , 1 } ] )
141+ { :ok , port } = :inet . port ( listener )
142+ test_pid = self ( )
143+
144+ pid =
145+ spawn_link ( fn ->
146+ send ( test_pid , { :closing_tcp_server_ready , self ( ) } )
147+
148+ with { :ok , socket } <- :gen_tcp . accept ( listener ) do
149+ :gen_tcp . close ( socket )
150+ end
151+
152+ :gen_tcp . close ( listener )
153+ end )
154+
155+ assert_receive { :closing_tcp_server_ready , ^ pid }
156+
157+ on_exit ( fn ->
158+ Process . exit ( pid , :shutdown )
159+ :gen_tcp . close ( listener )
160+ end )
161+
162+ port
163+ end
164+
139165 defp free_port do
140166 { :ok , socket } = :gen_tcp . listen ( 0 , [ :binary , active: false , reuseaddr: true ] )
141167 { :ok , port } = :inet . port ( socket )
0 commit comments