Skip to content

Commit 74ef7fa

Browse files
committed
Test for empty set of provided uris
1 parent a7a5f5f commit 74ef7fa

File tree

2 files changed

+31
-18
lines changed

2 files changed

+31
-18
lines changed

conjure-go-client/httpclient/internal/rr_selector.go

+5
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,8 @@ import (
1818
"math/rand"
1919
"net/http"
2020
"sync"
21+
22+
werror "github.com/palantir/witchcraft-go-error"
2123
)
2224

2325
type roundRobinSelector struct {
@@ -42,6 +44,9 @@ func NewRoundRobinURISelector(nanoClock func() int64) URISelector {
4244
func (s *roundRobinSelector) Select(uris []string, _ http.Header) ([]string, error) {
4345
s.Lock()
4446
defer s.Unlock()
47+
if len(uris) == 0 {
48+
return nil, werror.Error("no valid uris provided to round robin uri-selector")
49+
}
4550

4651
s.updateURIs(uris)
4752
s.offset = (s.offset + 1) % len(uris)

conjure-go-client/httpclient/internal/rr_selector_test.go

+26-18
Original file line numberDiff line numberDiff line change
@@ -19,27 +19,35 @@ import (
1919
"time"
2020

2121
"github.com/stretchr/testify/assert"
22+
"github.com/stretchr/testify/require"
2223
)
2324

2425
func TestRoundRobinSelector_Select(t *testing.T) {
25-
uris := []string{"uri1", "uri2", "uri3", "uri4", "uri5"}
2626
scorer := NewRoundRobinURISelector(func() int64 { return time.Now().UnixNano() })
2727

28-
const iterations = 100
29-
observed := make(map[string]int, iterations)
30-
for i := 0; i < iterations; i++ {
31-
uri, err := scorer.Select(uris, nil)
32-
assert.NoError(t, err)
33-
assert.Len(t, uri, 1)
34-
observed[uri[0]] = observed[uri[0]] + 1
35-
}
36-
37-
occurences := make([]int, 0, len(observed))
38-
for _, count := range observed {
39-
occurences = append(occurences, count)
40-
}
41-
42-
for _, v := range occurences {
43-
assert.Equal(t, occurences[0], v)
44-
}
28+
t.Run("round robins across valid connections", func(t *testing.T) {
29+
uris := []string{"uri1", "uri2", "uri3", "uri4", "uri5"}
30+
const iterations = 100
31+
observed := make(map[string]int, iterations)
32+
for i := 0; i < iterations; i++ {
33+
uri, err := scorer.Select(uris, nil)
34+
assert.NoError(t, err)
35+
assert.Len(t, uri, 1)
36+
observed[uri[0]] = observed[uri[0]] + 1
37+
}
38+
39+
occurences := make([]int, 0, len(observed))
40+
for _, count := range observed {
41+
occurences = append(occurences, count)
42+
}
43+
44+
for _, v := range occurences {
45+
assert.Equal(t, occurences[0], v)
46+
}
47+
})
48+
49+
t.Run("erorrs with invalid", func(t *testing.T) {
50+
_, err := scorer.Select([]string{}, nil)
51+
require.Error(t, err)
52+
})
4553
}

0 commit comments

Comments
 (0)