@@ -10,9 +10,15 @@ import (
10
10
"net/http"
11
11
"net/http/httptest"
12
12
"net/url"
13
+ "slices"
14
+ "sort"
13
15
"strings"
14
16
"testing"
15
17
"time"
18
+
19
+ "github.com/DefangLabs/defang/src/pkg/cli/compose"
20
+ defangv1 "github.com/DefangLabs/defang/src/protos/io/defang/v1"
21
+ composetypes "github.com/compose-spec/compose-go/v2/types"
16
22
)
17
23
18
24
type tryResult struct {
@@ -236,3 +242,72 @@ func TestHttpClient(t *testing.T) {
236
242
t .Fatalf ("expected 2nd dns lookup after cache expiry, but got %v" , mr .calls )
237
243
}
238
244
}
245
+
246
+ func TestGetDomainTargets (t * testing.T ) {
247
+ tests := []struct {
248
+ name string
249
+ serviceInfo * defangv1.ServiceInfo
250
+ service compose.ServiceConfig
251
+ expected []string
252
+ }{
253
+ {
254
+ name : "use only lb dns name when present" ,
255
+ serviceInfo : & defangv1.ServiceInfo {
256
+ LbDnsName : "aws.alb.com" ,
257
+ PublicFqdn : "app.defang.app" ,
258
+ Endpoints : []string {"8080--app.defang.app" , "8081--app.defang.app" },
259
+ },
260
+ service : compose.ServiceConfig {
261
+ Ports : []composetypes.ServicePortConfig {
262
+ {Mode : compose .Mode_INGRESS },
263
+ {Mode : compose .Mode_INGRESS },
264
+ },
265
+ },
266
+ expected : []string {"aws.alb.com" },
267
+ },
268
+ {
269
+ name : "use only public fqdn and end points when lb dns name is empty" ,
270
+ serviceInfo : & defangv1.ServiceInfo {
271
+ LbDnsName : "" ,
272
+ PublicFqdn : "app.defang.app" ,
273
+ Endpoints : []string {"8080--app.defang.app" , "8081--app.defang.app" },
274
+ },
275
+ service : compose.ServiceConfig {
276
+ Ports : []composetypes.ServicePortConfig {
277
+ {Mode : compose .Mode_INGRESS },
278
+ {Mode : compose .Mode_INGRESS },
279
+ },
280
+ },
281
+ expected : []string {"app.defang.app" , "8080--app.defang.app" , "8081--app.defang.app" },
282
+ },
283
+ {
284
+ name : "only use endpoint of ingress ports" ,
285
+ serviceInfo : & defangv1.ServiceInfo {
286
+ LbDnsName : "" ,
287
+ PublicFqdn : "app.defang.app" ,
288
+ Endpoints : []string {"8080--app.defang.app" , "8081--app.defang.app" },
289
+ },
290
+ service : compose.ServiceConfig {
291
+ Ports : []composetypes.ServicePortConfig {
292
+ {Mode : compose .Mode_INGRESS },
293
+ {Mode : compose .Mode_HOST },
294
+ },
295
+ },
296
+ expected : []string {"app.defang.app" , "8080--app.defang.app" },
297
+ },
298
+ }
299
+
300
+ for _ , tt := range tests {
301
+ t .Run (tt .name , func (t * testing.T ) {
302
+ targets := getDomainTargets (tt .serviceInfo , tt .service )
303
+ if len (targets ) != len (tt .expected ) {
304
+ t .Errorf ("expected %v targets, got %v" , len (tt .expected ), len (targets ))
305
+ }
306
+ sort .Strings (targets )
307
+ sort .Strings (tt .expected )
308
+ if ! slices .Equal (targets , tt .expected ) {
309
+ t .Errorf ("expected %v, got %v" , tt .expected , targets )
310
+ }
311
+ })
312
+ }
313
+ }
0 commit comments