Skip to content

Commit 0431c9e

Browse files
committed
Add Lock tests
1 parent d9dff35 commit 0431c9e

File tree

4 files changed

+82
-3
lines changed

4 files changed

+82
-3
lines changed

go.mod

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ go 1.19
44

55
require (
66
github.com/atomix/atomix/api v0.9.2
7-
github.com/atomix/atomix/protocols/rsm v0.5.6
7+
github.com/atomix/atomix/protocols/rsm v0.5.7
88
github.com/atomix/atomix/runtime v0.9.0
99
github.com/atomix/atomix/sidecar v0.4.4
1010
github.com/gogo/protobuf v1.3.2

go.sum

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,8 @@ github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03
44
github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY=
55
github.com/atomix/atomix/api v0.9.2 h1:BpT4zsXiKQWoIHQzGeCDQuC4BxcWvfrsMrPuUoSNLTI=
66
github.com/atomix/atomix/api v0.9.2/go.mod h1:Fz8zXQH6n28U0NTu5xctKhkNrN5RsWgX56lrMhqXlPg=
7-
github.com/atomix/atomix/protocols/rsm v0.5.6 h1:55u/qIIUuLakypf1d1CQ5xxj/E720f6FRGDtv1VUOSs=
8-
github.com/atomix/atomix/protocols/rsm v0.5.6/go.mod h1:SgkK3PVLqx1KmNjxw8OY7AY7T6t6TuPLmnP6Rr/oFAQ=
7+
github.com/atomix/atomix/protocols/rsm v0.5.7 h1:hAaMCXT+F2DIN+e9B2r3nDPElJvEjCJE+llITVdy6jU=
8+
github.com/atomix/atomix/protocols/rsm v0.5.7/go.mod h1:SgkK3PVLqx1KmNjxw8OY7AY7T6t6TuPLmnP6Rr/oFAQ=
99
github.com/atomix/atomix/runtime v0.9.0 h1:yDViPymoOkR5gMJkk25CZP2Tjf2j1JMAWNd/I38ws8I=
1010
github.com/atomix/atomix/runtime v0.9.0/go.mod h1:abB/WaP50Fm6MVi8CHRsfIOt8urDzcpQvMDFmhhlVgY=
1111
github.com/atomix/atomix/sidecar v0.4.4 h1:CjLPA3p1V83Tx2yxUGz4JLyQkeyXC8/1xXaiZVknJsY=

pkg/primitive/lock/client.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import (
1010
lockv1 "github.com/atomix/atomix/api/runtime/lock/v1"
1111
runtimev1 "github.com/atomix/atomix/api/runtime/v1"
1212
"github.com/atomix/go-sdk/pkg/primitive"
13+
"time"
1314
)
1415

1516
func newLocksClient(name string, client lockv1.LocksClient) primitive.Primitive {
@@ -59,6 +60,10 @@ func (l *lockClient) Lock(ctx context.Context, opts ...LockOption) (Version, err
5960
Name: l.Name(),
6061
},
6162
}
63+
if deadline, ok := ctx.Deadline(); ok {
64+
timeout := time.Until(deadline)
65+
request.Timeout = &timeout
66+
}
6267
for i := range opts {
6368
opts[i].beforeLock(request)
6469
}

pkg/primitive/lock/lock_test.go

Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,74 @@
1+
// SPDX-FileCopyrightText: 2023-present Intel Corporation
2+
//
3+
// SPDX-License-Identifier: Apache-2.0
4+
5+
package lock
6+
7+
import (
8+
"context"
9+
"github.com/atomix/atomix/runtime/pkg/logging"
10+
"github.com/atomix/go-sdk/pkg/test"
11+
"github.com/stretchr/testify/assert"
12+
"testing"
13+
"time"
14+
)
15+
16+
func TestLock(t *testing.T) {
17+
logging.SetLevel(logging.DebugLevel)
18+
19+
cluster := test.NewClient()
20+
defer cluster.Close()
21+
22+
ctx, cancel := context.WithTimeout(context.Background(), time.Minute)
23+
defer cancel()
24+
25+
l1, err := NewBuilder(cluster, "test").Get(ctx)
26+
assert.NoError(t, err)
27+
l2, err := NewBuilder(cluster, "test").Get(ctx)
28+
assert.NoError(t, err)
29+
30+
version, err := l1.Get(context.Background())
31+
assert.Error(t, err)
32+
assert.Equal(t, Version(0), version)
33+
34+
v1, err := l1.Lock(context.Background())
35+
assert.NoError(t, err)
36+
assert.NotEqual(t, Version(0), v1)
37+
38+
version, err = l1.Get(context.Background())
39+
assert.NoError(t, err)
40+
assert.Equal(t, v1, version)
41+
42+
version, err = l2.Get(context.Background())
43+
assert.NoError(t, err)
44+
assert.Equal(t, v1, version)
45+
46+
c := make(chan Version)
47+
go func() {
48+
version, err := l2.Lock(context.Background())
49+
assert.NoError(t, err)
50+
c <- version
51+
}()
52+
53+
err = l1.Unlock(context.Background())
54+
assert.NoError(t, err)
55+
56+
v2 := <-c
57+
58+
assert.NotEqual(t, v1, v2)
59+
60+
version, err = l1.Get(context.Background())
61+
assert.NoError(t, err)
62+
assert.Equal(t, v2, version)
63+
64+
version, err = l1.Get(context.Background())
65+
assert.NoError(t, err)
66+
assert.Equal(t, v2, version)
67+
68+
v2, err = l2.Lock(context.Background(), WithTimeout(1*time.Second))
69+
assert.Error(t, err)
70+
assert.Equal(t, Version(0), v2)
71+
72+
err = l1.Close(context.Background())
73+
assert.NoError(t, err)
74+
}

0 commit comments

Comments
 (0)