@@ -95,7 +95,7 @@ func TestProcedureJobSpecBuildsDeterministicMountsAndLabels(t *testing.T) {
9595 Mounts : []domain.Mount {{Path : "/work" , SubPath : "cache" }},
9696 }
9797
98- job , err := procedureJobSpec ("druid" , ref ("druid" , "druid-static-web-data" ), "start" , "start" , "static-web-start-0" , 1 , procedure , procedure .Env , "registry-secret" )
98+ job , err := procedureJobSpec ("druid" , ref ("druid" , "druid-static-web-data" ), "start" , "start" , "static-web-start-0" , 1 , procedure , nil , procedure .Env , "registry-secret" )
9999 if err != nil {
100100 t .Fatal (err )
101101 }
@@ -129,7 +129,7 @@ func TestProcedureJobSpecUsesProvidedRuntimeEnv(t *testing.T) {
129129 "PROCEDURE_ONLY" : "ignored" ,
130130 },
131131 }
132- job , err := procedureJobSpec ("druid" , ref ("druid" , "druid-static-web-data" ), "start" , "start" , "static-web-start-0" , 1 , procedure , map [string ]string {
132+ job , err := procedureJobSpec ("druid" , ref ("druid" , "druid-static-web-data" ), "start" , "start" , "static-web-start-0" , 1 , procedure , nil , map [string ]string {
133133 "DRUID_PORT_HTTP" : "8080" ,
134134 }, "registry-secret" )
135135 if err != nil {
@@ -141,14 +141,59 @@ func TestProcedureJobSpecUsesProvidedRuntimeEnv(t *testing.T) {
141141 }
142142}
143143
144+ func TestProcedureJobSpecAddsTCPReadinessProbe (t * testing.T ) {
145+ procedure := & domain.Procedure {
146+ Image : "itzg/minecraft-server" ,
147+ ExpectedPorts : []domain.ExpectedPort {{Name : "main" }},
148+ }
149+ job , err := procedureJobSpec ("druid" , ref ("druid" , "druid-minecraft-data" ), "start" , "start" , "minecraft-start-0" , 1 , procedure , []domain.Port {{Name : "main" , Protocol : "tcp" , Port : 25565 }}, nil , "registry-secret" )
150+ if err != nil {
151+ t .Fatal (err )
152+ }
153+ if probe := job .Spec .Template .Spec .Containers [0 ].ReadinessProbe ; probe == nil || probe .TCPSocket == nil || probe .TCPSocket .Port .IntVal != 25565 {
154+ t .Fatalf ("readiness probe = %#v, want tcp 25565" , probe )
155+ }
156+ }
157+
158+ func TestProcedureReadinessProbeSkipsUDPOnlyPorts (t * testing.T ) {
159+ procedure := & domain.Procedure {
160+ Image : "steam" ,
161+ ExpectedPorts : []domain.ExpectedPort {{Name : "query" }},
162+ }
163+ statefulSet , err := procedureStatefulSetSpec ("druid" , ref ("druid" , "druid-game-data" ), "start" , "start" , "game-start-0" , procedure , []domain.Port {{Name : "query" , Protocol : "udp" , Port : 27015 }}, nil , "registry-secret" )
164+ if err != nil {
165+ t .Fatal (err )
166+ }
167+ if probe := statefulSet .Spec .Template .Spec .Containers [0 ].ReadinessProbe ; probe != nil {
168+ t .Fatalf ("readiness probe = %#v, want nil for udp-only ports" , probe )
169+ }
170+ }
171+
172+ func TestProcedureReadinessProbeUsesFirstTCPExpectedPort (t * testing.T ) {
173+ procedure := & domain.Procedure {
174+ Image : "steam" ,
175+ ExpectedPorts : []domain.ExpectedPort {{Name : "query" }, {Name : "rcon" }},
176+ }
177+ statefulSet , err := procedureStatefulSetSpec ("druid" , ref ("druid" , "druid-game-data" ), "start" , "start" , "game-start-0" , procedure , []domain.Port {
178+ {Name : "query" , Protocol : "udp" , Port : 27015 },
179+ {Name : "rcon" , Protocol : "tcp" , Port : 27020 },
180+ }, nil , "registry-secret" )
181+ if err != nil {
182+ t .Fatal (err )
183+ }
184+ if probe := statefulSet .Spec .Template .Spec .Containers [0 ].ReadinessProbe ; probe == nil || probe .TCPSocket == nil || probe .TCPSocket .Port .IntVal != 27020 {
185+ t .Fatalf ("readiness probe = %#v, want tcp 27020" , probe )
186+ }
187+ }
188+
144189func TestProcedureStatefulSetSpecUsesProvidedRuntimeEnv (t * testing.T ) {
145190 procedure := & domain.Procedure {
146191 Image : "nginx:1.27" ,
147192 Env : map [string ]string {
148193 "PROCEDURE_ONLY" : "ignored" ,
149194 },
150195 }
151- statefulSet , err := procedureStatefulSetSpec ("druid" , ref ("druid" , "druid-static-web-data" ), "start" , "start" , "static-web-start-0" , procedure , map [string ]string {
196+ statefulSet , err := procedureStatefulSetSpec ("druid" , ref ("druid" , "druid-static-web-data" ), "start" , "start" , "static-web-start-0" , procedure , nil , map [string ]string {
152197 "DRUID_PORT_HTTP" : "8080" ,
153198 }, "registry-secret" )
154199 if err != nil {
@@ -168,7 +213,7 @@ func TestProcedureStatefulSetSpecBuildsPersistentWorkload(t *testing.T) {
168213 Mounts : []domain.Mount {{Path : "/usr/share/nginx/html" , SubPath : "site" , ReadOnly : true }},
169214 }
170215
171- statefulSet , err := procedureStatefulSetSpec ("druid" , ref ("druid" , "druid-static-web-data" ), "start" , "start" , "static-web-start-0" , procedure , procedure .Env , "registry-secret" )
216+ statefulSet , err := procedureStatefulSetSpec ("druid" , ref ("druid" , "druid-static-web-data" ), "start" , "start" , "static-web-start-0" , procedure , []domain. Port {{ Name : "http" , Protocol : "tcp" , Port : 8080 }}, procedure .Env , "registry-secret" )
172217 if err != nil {
173218 t .Fatal (err )
174219 }
@@ -189,6 +234,9 @@ func TestProcedureStatefulSetSpecBuildsPersistentWorkload(t *testing.T) {
189234 if len (pod .ImagePullSecrets ) != 1 || pod .ImagePullSecrets [0 ].Name != "registry-secret" {
190235 t .Fatalf ("image pull secrets = %#v" , pod .ImagePullSecrets )
191236 }
237+ if probe := pod .Containers [0 ].ReadinessProbe ; probe == nil || probe .TCPSocket == nil || probe .TCPSocket .Port .IntVal != 8080 {
238+ t .Fatalf ("readiness probe = %#v, want tcp 8080" , probe )
239+ }
192240 container := pod .Containers [0 ]
193241 if container .Image != "nginx:1.27" {
194242 t .Fatalf ("image = %s" , container .Image )
@@ -338,7 +386,7 @@ func TestCreateOrReuseProcedureJobRetainsFailedBaseAndCreatesRetry(t *testing.T)
338386 })
339387 backend := NewWithClient (Config {Namespace : "druid" }, coreservices .NewConsoleManager (coreservices .NewLogManager ()), client )
340388
341- created , err := backend .createOrReuseProcedureJob (context .Background (), "druid" , root , "start" , "start.1" , base , & domain.Procedure {Image : "alpine" }, nil )
389+ created , err := backend .createOrReuseProcedureJob (context .Background (), "druid" , root , "start" , "start.1" , base , & domain.Procedure {Image : "alpine" }, nil , nil )
342390 if err != nil {
343391 t .Fatal (err )
344392 }
@@ -359,7 +407,7 @@ func TestCreateOrReuseProcedureJobUsesNextRetryAttempt(t *testing.T) {
359407 )
360408 backend := NewWithClient (Config {Namespace : "druid" }, coreservices .NewConsoleManager (coreservices .NewLogManager ()), client )
361409
362- created , err := backend .createOrReuseProcedureJob (context .Background (), "druid" , root , "start" , "start.1" , base , & domain.Procedure {Image : "alpine" }, nil )
410+ created , err := backend .createOrReuseProcedureJob (context .Background (), "druid" , root , "start" , "start.1" , base , & domain.Procedure {Image : "alpine" }, nil , nil )
363411 if err != nil {
364412 t .Fatal (err )
365413 }
@@ -382,7 +430,7 @@ func TestCreateOrReuseProcedureJobReusesActiveAttempt(t *testing.T) {
382430 client := fake .NewSimpleClientset (active )
383431 backend := NewWithClient (Config {Namespace : "druid" }, coreservices .NewConsoleManager (coreservices .NewLogManager ()), client )
384432
385- created , err := backend .createOrReuseProcedureJob (context .Background (), "druid" , root , "start" , "coldstart" , base , & domain.Procedure {Image : "alpine" }, nil )
433+ created , err := backend .createOrReuseProcedureJob (context .Background (), "druid" , root , "start" , "coldstart" , base , & domain.Procedure {Image : "alpine" }, nil , nil )
386434 if err != nil {
387435 t .Fatal (err )
388436 }
@@ -478,7 +526,7 @@ func TestCreateOrReuseProcedureJobDeletesSucceededAttempt(t *testing.T) {
478526 })
479527 backend := NewWithClient (Config {Namespace : "druid" }, coreservices .NewConsoleManager (coreservices .NewLogManager ()), client )
480528
481- created , err := backend .createOrReuseProcedureJob (context .Background (), "druid" , root , "install" , "install" , base , & domain.Procedure {Image : "alpine" }, nil )
529+ created , err := backend .createOrReuseProcedureJob (context .Background (), "druid" , root , "install" , "install" , base , & domain.Procedure {Image : "alpine" }, nil , nil )
482530 if err != nil {
483531 t .Fatal (err )
484532 }
0 commit comments