Skip to content

Commit 6f34c3d

Browse files
authored
Bump dependencies versions. Closes #15 (#18)
* update dependencies * update versions for manual testing
1 parent 3fae69f commit 6f34c3d

9 files changed

+297
-740
lines changed

charlatan_for_test.go

-618
This file was deleted.

consul.go

+3-1
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,8 @@ func (r *resolvr) Close() {
3131
r.cancelFunc()
3232
}
3333

34+
//go:generate mockgen -package mocks -destination internal/mocks/resolverClientConn.go google.golang.org/grpc/resolver ClientConn
35+
//go:generate mockgen -package mocks -destination internal/mocks/servicer.go -source consul.go servicer
3436
type servicer interface {
3537
Service(string, string, bool, *api.QueryOptions) ([]*api.ServiceEntry, *api.QueryMeta, error)
3638
}
@@ -106,7 +108,7 @@ func populateEndpoints(ctx context.Context, clientConn resolver.ClientConn, inpu
106108
conns = append(conns, resolver.Address{Addr: c})
107109
}
108110
sort.Sort(byAddressString(conns)) // Don't replace the same address list in the balancer
109-
clientConn.NewAddress(conns)
111+
clientConn.UpdateState(resolver.State{Addresses: conns})
110112
case <-ctx.Done():
111113
grpclog.Info("[Consul resolver] Watch has been finished")
112114
return

consul_test.go

+68-54
Original file line numberDiff line numberDiff line change
@@ -5,48 +5,50 @@ import (
55
"testing"
66
"time"
77

8+
"github.com/golang/mock/gomock"
89
"github.com/hashicorp/consul/api"
9-
"github.com/pkg/errors"
10+
"github.com/mbobakov/grpc-consul-resolver/internal/mocks"
1011
"github.com/stretchr/testify/require"
1112
"google.golang.org/grpc/resolver"
1213
)
1314

1415
func TestPopulateEndpoints(t *testing.T) {
1516
tests := []struct {
16-
name string
17-
input [][]string
18-
want []resolver.Address
17+
name string
18+
input [][]string
19+
wantCalls [][]resolver.Address
1920
}{
20-
{"one", [][]string{{"127.0.0.1:50051"}}, []resolver.Address{{Addr: "127.0.0.1:50051"}}},
21-
{"sorted",
22-
[][]string{
23-
{"227.0.0.1:50051", "127.0.0.1:50051"},
24-
},
25-
[]resolver.Address{
26-
{Addr: "127.0.0.1:50051"},
27-
{Addr: "227.0.0.1:50051"},
21+
{"one",
22+
[][]string{{"127.0.0.1:50051"}},
23+
[][]resolver.Address{
24+
[]resolver.Address{
25+
{Addr: "127.0.0.1:50051"},
26+
},
2827
},
2928
},
30-
{"multy",
29+
{"sorted",
3130
[][]string{
32-
{"127.0.0.1:50051"},
33-
{"127.0.0.1:50052"},
34-
{"127.0.0.1:50053"},
31+
{"227.0.0.1:50051", "127.0.0.1:50051"},
3532
},
36-
[]resolver.Address{
37-
{Addr: "127.0.0.1:50053"},
33+
[][]resolver.Address{
34+
[]resolver.Address{
35+
{Addr: "127.0.0.1:50051"},
36+
{Addr: "227.0.0.1:50051"},
37+
},
3838
},
3939
},
4040
}
4141
for _, tt := range tests {
4242
t.Run(tt.name, func(t *testing.T) {
43+
ctrl := gomock.NewController(t)
44+
defer ctrl.Finish()
4345
var (
44-
got []resolver.Address
45-
in = make(chan []string, len(tt.input))
46+
in = make(chan []string, len(tt.input))
4647
)
47-
fcc := NewFakeClientConnDefaultFatal(t)
48-
fcc.NewAddressHook = func(cc []resolver.Address) {
49-
got = cc
48+
49+
fcc := mocks.NewMockClientConn(ctrl)
50+
for _, aa := range tt.wantCalls {
51+
fcc.EXPECT().UpdateState(resolver.State{Addresses: aa}).Times(1)
5052
}
5153

5254
ctx, cancel := context.WithCancel(context.Background())
@@ -56,8 +58,6 @@ func TestPopulateEndpoints(t *testing.T) {
5658
in <- i
5759
}
5860
time.Sleep(time.Millisecond)
59-
require.True(t, fcc.NewAddressCalledN(len(tt.input)))
60-
require.Equal(t, tt.want, got)
6161
})
6262
}
6363
}
@@ -66,21 +66,27 @@ func TestWatchConsulService(t *testing.T) {
6666
tests := []struct {
6767
name string
6868
tgt target
69-
addr []string // port increased with 1 per invocation
70-
startPort int
71-
times uint64
72-
errorFromService bool
69+
services []*api.ServiceEntry
70+
errorFromService error
7371
want []string
7472
}{
75-
{"simple", target{Service: "svc", Wait: time.Second}, []string{"127.0.0.1"}, 100, 3, false, []string{"127.0.0.1:102"}},
76-
{"error", target{}, []string{"127.0.0.1"}, 100, 2, true, nil},
77-
{"limit", target{Limit: 1}, []string{"127.0.0.1", "127.0.0.2", "127.0.0.3"}, 100, 1, false, []string{"127.0.0.1:100"}},
78-
{"limitOver", target{Limit: 10}, []string{"127.0.0.1"}, 100, 1, false, []string{"127.0.0.1:100"}},
73+
{"simple", target{Service: "svc", Wait: time.Second},
74+
[]*api.ServiceEntry{
75+
&api.ServiceEntry{
76+
Service: &api.AgentService{Address: "127.0.0.1", Port: 1024},
77+
},
78+
},
79+
nil,
80+
[]string{"127.0.0.1:1024"},
81+
},
82+
// TODO: Add more tests-cases
7983
}
8084
for _, tt := range tests {
8185
t.Run(tt.name, func(t *testing.T) {
8286
ctx, cancel := context.WithCancel(context.Background())
8387
defer cancel()
88+
ctrl := gomock.NewController(t)
89+
defer ctrl.Finish()
8490

8591
var (
8692
got []string
@@ -95,30 +101,38 @@ func TestWatchConsulService(t *testing.T) {
95101
}
96102
}
97103
}()
98-
fconsul := NewFakeservicerDefaultFatal(t)
99-
100-
fconsul.ServiceHook = func(s, tag string, hlz bool, q *api.QueryOptions) ([]*api.ServiceEntry, *api.QueryMeta, error) {
101-
require.Equal(t, tt.tgt.Service, s)
102-
require.Equal(t, tt.tgt.Tag, tag)
103-
require.Equal(t, tt.tgt.Healthy, hlz)
104-
require.Equal(t, tt.tgt.Wait, q.WaitTime)
105-
if q.WaitIndex >= tt.times {
106-
select {}
107-
}
108-
if tt.errorFromService {
109-
return nil, &api.QueryMeta{LastIndex: q.WaitIndex + 1}, errors.New("Error")
110-
}
111-
var rr []*api.ServiceEntry
112-
for _, a := range tt.addr {
113-
rr = append(rr, &api.ServiceEntry{Service: &api.AgentService{Address: a, Port: tt.startPort + int(q.WaitIndex)}})
114-
}
115-
return rr, &api.QueryMeta{LastIndex: q.WaitIndex + 1}, nil
116-
}
104+
fconsul := mocks.NewMockservicer(ctrl)
105+
fconsul.EXPECT().Service(tt.tgt.Service, tt.tgt.Tag, tt.tgt.Healthy, &api.QueryOptions{
106+
WaitIndex: 0,
107+
Near: tt.tgt.Near,
108+
WaitTime: tt.tgt.Wait,
109+
Datacenter: tt.tgt.Dc,
110+
AllowStale: tt.tgt.AllowStale,
111+
RequireConsistent: tt.tgt.RequireConsistent,
112+
}).
113+
Times(1).
114+
Return(tt.services, &api.QueryMeta{LastIndex: 1}, tt.errorFromService)
115+
fconsul.EXPECT().Service(tt.tgt.Service, tt.tgt.Tag, tt.tgt.Healthy, &api.QueryOptions{
116+
WaitIndex: 1,
117+
Near: tt.tgt.Near,
118+
WaitTime: tt.tgt.Wait,
119+
Datacenter: tt.tgt.Dc,
120+
AllowStale: tt.tgt.AllowStale,
121+
RequireConsistent: tt.tgt.RequireConsistent,
122+
}).
123+
Do(
124+
func(svc string, tag string, h bool, opt *api.QueryOptions) ([]*api.ServiceEntry, *api.QueryMeta, error) {
125+
if opt.WaitIndex > 0 {
126+
select {}
127+
}
128+
return tt.services, &api.QueryMeta{LastIndex: 1}, tt.errorFromService
129+
},
130+
).Times(1).
131+
Return(tt.services, &api.QueryMeta{LastIndex: 1}, tt.errorFromService)
117132

118133
go watchConsulService(ctx, fconsul, tt.tgt, out)
119-
time.Sleep(15 * time.Millisecond)
134+
time.Sleep(5 * time.Millisecond)
120135

121-
require.True(t, fconsul.ServiceCalledN(int(tt.times)))
122136
require.Equal(t, tt.want, got)
123137
})
124138
}

go.mod

+15-13
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,21 @@
11
module github.com/mbobakov/grpc-consul-resolver
22

3+
go 1.13
4+
35
require (
4-
github.com/armon/go-metrics v0.3.0 // indirect
5-
github.com/go-playground/form v3.1.3+incompatible
6-
github.com/hashicorp/consul/api v1.1.0
7-
github.com/hashicorp/go-msgpack v0.5.5 // indirect
8-
github.com/hashicorp/memberlist v0.1.5 // indirect
9-
github.com/jpillora/backoff v0.0.0-20180909062703-3050d21c67d7
6+
github.com/go-playground/form v3.1.4+incompatible
7+
github.com/golang/mock v1.1.1
8+
github.com/google/btree v1.0.0 // indirect
9+
github.com/hashicorp/consul/api v1.3.0
10+
github.com/jpillora/backoff v1.0.0
11+
github.com/kr/pretty v0.1.0 // indirect
12+
github.com/mitchellh/go-homedir v1.1.0 // indirect
1013
github.com/pkg/errors v0.8.1
11-
github.com/sirupsen/logrus v1.1.1
12-
github.com/stretchr/testify v1.3.0
13-
golang.org/x/crypto v0.0.0-20190325154230-a5d413f7728c // indirect
14-
golang.org/x/net v0.0.0-20190403144856-b630fd6fe46b // indirect
15-
golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6 // indirect
16-
golang.org/x/sys v0.0.0-20190403152447-81d4e9dc473e // indirect
17-
google.golang.org/grpc v1.2.1-0.20181011201045-c05280cc73cd
14+
github.com/sirupsen/logrus v1.4.2
15+
github.com/stretchr/testify v1.4.0
16+
golang.org/x/net v0.0.0-20190522155817-f3200d17e092 // indirect
17+
google.golang.org/grpc v1.26.0
18+
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 // indirect
1819
gopkg.in/go-playground/assert.v1 v1.2.1 // indirect
20+
gopkg.in/yaml.v2 v2.2.4 // indirect
1921
)

0 commit comments

Comments
 (0)