Skip to content

Commit 2e6cae4

Browse files
committed
Updated options.go
1. Added one more check for deprecated clientOption FallbackHostsUseDefault 2. Moved fallbackHostUseDefault endpoint integration test to unit test 3. Fixed rest_client_integration tests RSC15 fallbacks
1 parent 44bf03c commit 2e6cae4

5 files changed

+24
-41
lines changed

ably/export_test.go

+4
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,10 @@ func (opts *clientOptions) GetRealtimeHost() string {
2424
return opts.getRealtimeHost()
2525
}
2626

27+
func (opts *clientOptions) Validate() error {
28+
return opts.validate()
29+
}
30+
2731
func (opts *clientOptions) GetHostnameFromEndpoint() string {
2832
return opts.getHostnameFromEndpoint()
2933
}

ably/options.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -428,8 +428,8 @@ type clientOptions struct {
428428
}
429429

430430
func (opts *clientOptions) validate() error {
431-
if !empty(opts.Endpoint) && (!empty(opts.Environment) || !empty(opts.RealtimeHost) || !empty(opts.RESTHost)) {
432-
err := errors.New("invalid client option: cannot use endpoint with any of environment, realtimeHost or restHost")
431+
if !empty(opts.Endpoint) && (!empty(opts.Environment) || !empty(opts.RealtimeHost) || !empty(opts.RESTHost) || opts.FallbackHostsUseDefault) {
432+
err := errors.New("invalid client option: cannot use endpoint with any of deprecated options environment, realtimeHost, restHost or FallbackHostsUseDefault")
433433
logger := opts.LogHandler
434434
logger.Printf(LogError, "Invalid client options : %v", err.Error())
435435
return err

ably/options_test.go

+9-16
Original file line numberDiff line numberDiff line change
@@ -160,22 +160,6 @@ func TestHosts_REC1(t *testing.T) {
160160
assert.Equal(t, ably.DefaultFallbackHosts(), fallbackHosts)
161161
})
162162

163-
// Fallbacks will be null since ports are not default
164-
// t.Run("REC1c with legacy custom environment and non default ports", func(t *testing.T) {
165-
// clientOptions := ably.NewClientOptions(
166-
// ably.WithEnvironment("local"),
167-
// ably.WithPort(8080),
168-
// ably.WithTLSPort(8081),
169-
// )
170-
// assert.Equal(t, "local.realtime.ably.net", clientOptions.GetRestHost())
171-
// assert.False(t, clientOptions.NoTLS)
172-
// port, isDefaultPort := clientOptions.ActivePort()
173-
// assert.Equal(t, 8081, port)
174-
// assert.False(t, isDefaultPort)
175-
// fallbackHosts, _ := clientOptions.GetFallbackHosts()
176-
// assert.Equal(t, ably.GetEndpointFallbackHosts("local"), fallbackHosts)
177-
// })
178-
179163
t.Run("REC1d1 with custom restHost", func(t *testing.T) {
180164
clientOptions := ably.NewClientOptions(ably.WithRESTHost("test.org"))
181165
assert.Equal(t, "test.org", clientOptions.GetRestHost())
@@ -224,6 +208,15 @@ func TestHosts_REC1(t *testing.T) {
224208
})
225209
})
226210

211+
t.Run("If endpoint option is used with deprecated fallbackHostUseDefault, throw error", func(t *testing.T) {
212+
clientOptions := ably.NewClientOptions(
213+
ably.WithFallbackHostsUseDefault(true),
214+
ably.WithEndpoint("custom"))
215+
err := clientOptions.Validate()
216+
assert.Equal(t, err.Error(),
217+
"invalid client option: cannot use endpoint with any of deprecated options environment, realtimeHost, restHost or FallbackHostsUseDefault")
218+
})
219+
227220
t.Run("REC2a with fallbackHosts", func(t *testing.T) {
228221
clientOptions := ably.NewClientOptions(ably.WithFallbackHosts([]string{"a.example.com", "b.example.com"}))
229222
assert.Equal(t, "main.realtime.ably.net", clientOptions.GetRestHost())

ably/realtime_client_integration_test.go

+1-15
Original file line numberDiff line numberDiff line change
@@ -309,20 +309,6 @@ func TestRealtime_RTN17_HostFallback(t *testing.T) {
309309
assert.ElementsMatch(t, fallbacks, visitedHosts[1:])
310310
})
311311

312-
t.Run("apply when fallbackHostUseDefault is true, even if endpoint option is used", func(t *testing.T) {
313-
visitedHosts := initClientWithConnError(
314-
getTimeoutErr(),
315-
ably.WithFallbackHostsUseDefault(true),
316-
ably.WithEndpoint("custom"))
317-
318-
expectedPrimaryHost := "custom.realtime.ably.net"
319-
expectedFallbackHosts := ably.DefaultFallbackHosts()
320-
321-
assert.Equal(t, 6, len(visitedHosts))
322-
assert.Equal(t, expectedPrimaryHost, visitedHosts[0])
323-
assert.ElementsMatch(t, expectedFallbackHosts, visitedHosts[1:])
324-
})
325-
326312
t.Run("apply when fallbackHostUseDefault is true, even if legacy realtimeHost is set", func(t *testing.T) {
327313
visitedHosts := initClientWithConnError(
328314
getTimeoutErr(),
@@ -380,7 +366,7 @@ func TestRealtime_RTN17_HostFallback(t *testing.T) {
380366
t.Fatalf("Error connecting host with error %v", err)
381367
}
382368
realtimeSuccessHost := realtimeMsgRecorder.URLs()[0].Hostname()
383-
fallbackHosts := ably.GetEndpointFallbackHosts("sandbox")
369+
fallbackHosts := ably.GetEndpointFallbackHosts("nonprod:sandbox")
384370
if !ablyutil.SliceContains(fallbackHosts, realtimeSuccessHost) {
385371
t.Fatalf("realtime host must be one of fallback hosts, received %v", realtimeSuccessHost)
386372
}

ably/rest_client_integration_test.go

+8-8
Original file line numberDiff line numberDiff line change
@@ -347,10 +347,10 @@ func TestRest_RSC15_HostFallback(t *testing.T) {
347347
ably.WithUseTokenAuth(true),
348348
}
349349
retryCount, hosts := runTestServer(t, options)
350-
assert.Equal(t, 6, retryCount) // 1 primary and 5 default fallback hosts
351-
assert.Equal(t, "main.realtime.ably.net", hosts[0]) // primary host
352-
assertSubset(t, ably.DefaultFallbackHosts(), hosts[1:]) // remaining fallback hosts
353-
assertUnique(t, hosts) // ensure all picked fallbacks are unique
350+
assert.Equal(t, 6, retryCount) // 1 primary and 5 default fallback hosts
351+
assert.Equal(t, "sandbox.realtime.ably-nonprod.net", hosts[0]) // primary host
352+
assertSubset(t, ably.DefaultFallbackHosts(), hosts[1:]) // remaining fallback hosts
353+
assertUnique(t, hosts) // ensure all picked fallbacks are unique
354354
})
355355

356356
runTestServerWithRequestTimeout := func(t *testing.T, options []ably.ClientOption) (int, []string) {
@@ -393,10 +393,10 @@ func TestRest_RSC15_HostFallback(t *testing.T) {
393393
ably.WithUseTokenAuth(true),
394394
}
395395
retryCount, hosts := runTestServerWithRequestTimeout(t, options)
396-
assert.Equal(t, 6, retryCount) // 1 primary and 5 default fallback hosts
397-
assert.Equal(t, "main.realtime.ably.net", hosts[0]) // primary host
398-
assertSubset(t, ably.DefaultFallbackHosts(), hosts[1:]) // remaining fallback hosts
399-
assertUnique(t, hosts) // ensure all picked fallbacks are unique
396+
assert.Equal(t, 6, retryCount) // 1 primary and 5 default fallback hosts
397+
assert.Equal(t, "sandbox.realtime.ably-nonprod.net", hosts[0]) // primary host
398+
assertSubset(t, ably.DefaultFallbackHosts(), hosts[1:]) // remaining fallback hosts
399+
assertUnique(t, hosts) // ensure all picked fallbacks are unique
400400
})
401401

402402
t.Run("RSC15l1 must use alternative host on host unresolvable or unreachable", func(t *testing.T) {

0 commit comments

Comments
 (0)