Skip to content

Commit 850dd66

Browse files
committed
Fixes tests with correct assumptions
1 parent 570ed7a commit 850dd66

File tree

2 files changed

+25
-8
lines changed

2 files changed

+25
-8
lines changed

pkg/api/version/version.go

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ var (
3333
instanceTimeout = 1 * time.Minute
3434
_ memberlist.Mergeable = (*Versions)(nil)
3535
_ services.Service = (*Service)(nil)
36+
now = time.Now
3637
)
3738

3839
func GetCodec() codec.Codec {
@@ -63,7 +64,7 @@ func (v *Versions) Marshal() ([]byte, error) {
6364

6465
// Merge merges two versions. This is used when CASing or merging versions from other nodes.
6566
// v is the local version and should be mutated to include the changes from incoming.
66-
// The returned value is the change to broadcast.
67+
// The function should only returned changed instances.
6768
func (v *Versions) Merge(incoming memberlist.Mergeable, localCAS bool) (memberlist.Mergeable, error) {
6869
if incoming == nil {
6970
return nil, nil
@@ -107,7 +108,7 @@ func (v *Versions) Merge(incoming memberlist.Mergeable, localCAS bool) (memberli
107108
for k, current := range v.Instances {
108109
if _, ok := other.Instances[k]; !ok && !current.Left {
109110
current.Left = true
110-
current.Timestamp = time.Now().UnixNano()
111+
current.Timestamp = now().UnixNano()
111112
updated = append(updated, k)
112113
}
113114
}
@@ -138,7 +139,7 @@ func (d *Versions) MergeContent() []string {
138139
func (v *Versions) RemoveTombstones(limit time.Time) (total, removed int) {
139140
for n, inst := range v.Instances {
140141
if inst.Left {
141-
if limit.IsZero() || time.Unix(inst.Timestamp, 0).Before(limit) {
142+
if limit.IsZero() || time.Unix(0, inst.Timestamp).Before(limit) {
142143
// remove it
143144
delete(v.Instances, n)
144145
removed++
@@ -246,7 +247,7 @@ func (svc *Service) heartbeat(ctx context.Context) error {
246247
}
247248
current.Addr = svc.addr
248249
current.ID = svc.id
249-
current.Timestamp = time.Now().UnixNano()
250+
current.Timestamp = now().UnixNano()
250251
current.QuerierAPI = svc.version
251252
// Now prune old instances.
252253
for id, instance := range versions.Instances {

pkg/api/version/version_test.go

Lines changed: 20 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -157,7 +157,16 @@ func TestVersionsMultiple(t *testing.T) {
157157
expectVersion(t, 2)
158158
}
159159

160+
var nowTs = time.Now().UnixNano()
161+
160162
func TestMerge(t *testing.T) {
163+
now = func() time.Time {
164+
return time.Unix(0, nowTs)
165+
}
166+
t.Cleanup(func() {
167+
now = time.Now
168+
})
169+
161170
for name, tc := range map[string]struct {
162171
base *Versions
163172
incoming memberlist.Mergeable
@@ -200,7 +209,6 @@ func TestMerge(t *testing.T) {
200209
createVersion(t, "2", 3),
201210
),
202211
expected: createVersions(t,
203-
createVersion(t, "1", 1),
204212
createVersion(t, "2", 3),
205213
),
206214
},
@@ -213,7 +221,6 @@ func TestMerge(t *testing.T) {
213221
createVersion(t, "2", 2),
214222
),
215223
expected: createVersions(t,
216-
createVersion(t, "1", 1),
217224
createVersion(t, "2", 2),
218225
),
219226
},
@@ -226,7 +233,7 @@ func TestMerge(t *testing.T) {
226233
createVersion(t, "1", 1),
227234
),
228235
expected: createVersions(t,
229-
createVersion(t, "1", 1),
236+
createLeftVersion(t, "2", nowTs),
230237
),
231238
},
232239
"instance removed and added": {
@@ -240,7 +247,7 @@ func TestMerge(t *testing.T) {
240247
),
241248
expected: createVersions(t,
242249
createVersion(t, "3", 3),
243-
createVersion(t, "2", 2),
250+
createLeftVersion(t, "1", nowTs),
244251
),
245252
},
246253
} {
@@ -254,6 +261,15 @@ func TestMerge(t *testing.T) {
254261
}
255262
}
256263

264+
func createLeftVersion(t *testing.T, id string, ts int64) *versionv1.InstanceVersion {
265+
t.Helper()
266+
return &versionv1.InstanceVersion{
267+
ID: id,
268+
Timestamp: ts,
269+
Left: true,
270+
}
271+
}
272+
257273
func createVersion(t *testing.T, id string, ts int64) *versionv1.InstanceVersion {
258274
t.Helper()
259275
return &versionv1.InstanceVersion{

0 commit comments

Comments
 (0)