Skip to content

Commit 1be21d2

Browse files
committed
Refactor tests to use testcontainers
1 parent bede566 commit 1be21d2

File tree

1 file changed

+58
-39
lines changed

1 file changed

+58
-39
lines changed

storage_test.go

Lines changed: 58 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -1,39 +1,59 @@
1-
// +build consul
2-
31
package storageconsul
42

53
import (
6-
"github.com/caddyserver/certmagic"
7-
consul "github.com/hashicorp/consul/api"
8-
"github.com/stretchr/testify/assert"
4+
"context"
5+
"io/fs"
96
"os"
107
"path"
118
"testing"
129
"time"
10+
11+
"github.com/caddyserver/caddy/v2"
12+
consul "github.com/hashicorp/consul/api"
13+
"github.com/stretchr/testify/assert"
14+
15+
consulContainer "github.com/testcontainers/testcontainers-go/modules/consul"
1316
)
1417

15-
var consulClient *consul.Client
18+
var consulCont *consulContainer.ConsulContainer
1619

1720
const TestPrefix = "consultlstest"
1821

19-
// these tests needs a running Consul server
20-
func setupConsulEnv(t *testing.T) *ConsulStorage {
22+
func TestMain(m *testing.M) {
23+
cc, err := consulContainer.Run(context.Background(), "hashicorp/consul:1.15")
24+
if err != nil {
25+
panic(err)
26+
}
2127

22-
os.Setenv(EnvNamePrefix, TestPrefix)
23-
os.Setenv(consul.HTTPTokenEnvName, "2f9e03f8-714b-5e4d-65ea-c983d6b172c4")
28+
consulCont = cc
29+
defer consulCont.Terminate(context.Background())
2430

25-
cs, err := New()
31+
m.Run()
32+
}
33+
34+
// these tests need a running Consul server
35+
func setupConsulEnv(t *testing.T) *ConsulStorage {
36+
os.Setenv(EnvNamePrefix, TestPrefix)
37+
consulEndpoint, err := consulCont.ApiEndpoint(context.Background())
2638
assert.NoError(t, err)
2739

40+
//os.Setenv(consul.HTTPTokenEnvName, "2f9e03f8-714b-5e4d-65ea-c983d6b172c4")
41+
os.Setenv(consul.HTTPAddrEnvName, consulEndpoint)
42+
43+
cs := New()
44+
ctx, _ := caddy.NewContext(caddy.Context{Context: context.Background()})
45+
cs.Provision(ctx)
46+
2847
_, err = cs.ConsulClient.KV().DeleteTree(TestPrefix, nil)
2948
assert.NoError(t, err)
49+
3050
return cs
3151
}
3252

3353
func TestConsulStorage_Store(t *testing.T) {
3454
cs := setupConsulEnv(t)
3555

36-
err := cs.Store(path.Join("acme", "example.com", "sites", "example.com", "example.com.crt"), []byte("crt data"))
56+
err := cs.Store(context.Background(), path.Join("acme", "example.com", "sites", "example.com", "example.com.crt"), []byte("crt data"))
3757
assert.NoError(t, err)
3858
}
3959

@@ -42,10 +62,10 @@ func TestConsulStorage_Exists(t *testing.T) {
4262

4363
key := path.Join("acme", "example.com", "sites", "example.com", "example.com.crt")
4464

45-
err := cs.Store(key, []byte("crt data"))
65+
err := cs.Store(context.Background(), key, []byte("crt data"))
4666
assert.NoError(t, err)
4767

48-
exists := cs.Exists(key)
68+
exists := cs.Exists(context.Background(), key)
4969
assert.True(t, exists)
5070
}
5171

@@ -55,10 +75,10 @@ func TestConsulStorage_Load(t *testing.T) {
5575
key := path.Join("acme", "example.com", "sites", "example.com", "example.com.crt")
5676
content := []byte("crt data")
5777

58-
err := cs.Store(key, content)
78+
err := cs.Store(context.Background(), key, content)
5979
assert.NoError(t, err)
6080

61-
contentLoded, err := cs.Load(key)
81+
contentLoded, err := cs.Load(context.Background(), key)
6282
assert.NoError(t, err)
6383

6484
assert.Equal(t, content, contentLoded)
@@ -70,20 +90,19 @@ func TestConsulStorage_Delete(t *testing.T) {
7090
key := path.Join("acme", "example.com", "sites", "example.com", "example.com.crt")
7191
content := []byte("crt data")
7292

73-
err := cs.Store(key, content)
93+
err := cs.Store(context.Background(), key, content)
7494
assert.NoError(t, err)
7595

76-
err = cs.Delete(key)
96+
err = cs.Delete(context.Background(), key)
7797
assert.NoError(t, err)
7898

79-
exists := cs.Exists(key)
99+
exists := cs.Exists(context.Background(), key)
80100
assert.False(t, exists)
81101

82-
contentLoaded, err := cs.Load(key)
102+
contentLoaded, err := cs.Load(context.Background(), key)
83103
assert.Nil(t, contentLoaded)
84-
85-
_, ok := err.(certmagic.ErrNotExist)
86-
assert.True(t, ok)
104+
assert.Error(t, err)
105+
assert.ErrorIs(t, err, fs.ErrNotExist)
87106
}
88107

89108
func TestConsulStorage_Stat(t *testing.T) {
@@ -92,10 +111,10 @@ func TestConsulStorage_Stat(t *testing.T) {
92111
key := path.Join("acme", "example.com", "sites", "example.com", "example.com.crt")
93112
content := []byte("crt data")
94113

95-
err := cs.Store(key, content)
114+
err := cs.Store(context.Background(), key, content)
96115
assert.NoError(t, err)
97116

98-
info, err := cs.Stat(key)
117+
info, err := cs.Stat(context.Background(), key)
99118
assert.NoError(t, err)
100119

101120
assert.Equal(t, key, info.Key)
@@ -104,14 +123,14 @@ func TestConsulStorage_Stat(t *testing.T) {
104123
func TestConsulStorage_List(t *testing.T) {
105124
cs := setupConsulEnv(t)
106125

107-
err := cs.Store(path.Join("acme", "example.com", "sites", "example.com", "example.com.crt"), []byte("crt"))
126+
err := cs.Store(context.Background(), path.Join("acme", "example.com", "sites", "example.com", "example.com.crt"), []byte("crt"))
108127
assert.NoError(t, err)
109-
err = cs.Store(path.Join("acme", "example.com", "sites", "example.com", "example.com.key"), []byte("key"))
128+
err = cs.Store(context.Background(), path.Join("acme", "example.com", "sites", "example.com", "example.com.key"), []byte("key"))
110129
assert.NoError(t, err)
111-
err = cs.Store(path.Join("acme", "example.com", "sites", "example.com", "example.com.json"), []byte("meta"))
130+
err = cs.Store(context.Background(), path.Join("acme", "example.com", "sites", "example.com", "example.com.json"), []byte("meta"))
112131
assert.NoError(t, err)
113132

114-
keys, err := cs.List(path.Join("acme", "example.com", "sites", "example.com"), true)
133+
keys, err := cs.List(context.Background(), path.Join("acme", "example.com", "sites", "example.com"), true)
115134
assert.NoError(t, err)
116135
assert.Len(t, keys, 3)
117136
assert.Contains(t, keys, path.Join("acme", "example.com", "sites", "example.com", "example.com.crt"))
@@ -120,14 +139,14 @@ func TestConsulStorage_List(t *testing.T) {
120139
func TestConsulStorage_ListNonRecursive(t *testing.T) {
121140
cs := setupConsulEnv(t)
122141

123-
err := cs.Store(path.Join("acme", "example.com", "sites", "example.com", "example.com.crt"), []byte("crt"))
142+
err := cs.Store(context.Background(), path.Join("acme", "example.com", "sites", "example.com", "example.com.crt"), []byte("crt"))
124143
assert.NoError(t, err)
125-
err = cs.Store(path.Join("acme", "example.com", "sites", "example.com", "example.com.key"), []byte("key"))
144+
err = cs.Store(context.Background(), path.Join("acme", "example.com", "sites", "example.com", "example.com.key"), []byte("key"))
126145
assert.NoError(t, err)
127-
err = cs.Store(path.Join("acme", "example.com", "sites", "example.com", "example.com.json"), []byte("meta"))
146+
err = cs.Store(context.Background(), path.Join("acme", "example.com", "sites", "example.com", "example.com.json"), []byte("meta"))
128147
assert.NoError(t, err)
129148

130-
keys, err := cs.List(path.Join("acme", "example.com", "sites"), false)
149+
keys, err := cs.List(context.Background(), path.Join("acme", "example.com", "sites"), false)
131150
assert.NoError(t, err)
132151

133152
assert.Len(t, keys, 1)
@@ -138,10 +157,10 @@ func TestConsulStorage_LockUnlock(t *testing.T) {
138157
cs := setupConsulEnv(t)
139158
lockKey := path.Join("acme", "example.com", "sites", "example.com", "lock")
140159

141-
err := cs.Lock(lockKey)
160+
err := cs.Lock(context.Background(), lockKey)
142161
assert.NoError(t, err)
143162

144-
err = cs.Unlock(lockKey)
163+
err = cs.Unlock(context.Background(), lockKey)
145164
assert.NoError(t, err)
146165
}
147166

@@ -150,17 +169,17 @@ func TestConsulStorage_TwoLocks(t *testing.T) {
150169
cs2 := setupConsulEnv(t)
151170
lockKey := path.Join("acme", "example.com", "sites", "example.com", "lock")
152171

153-
err := cs.Lock(lockKey)
172+
err := cs.Lock(context.Background(), lockKey)
154173
assert.NoError(t, err)
155174

156175
go time.AfterFunc(5*time.Second, func() {
157-
err = cs.Unlock(lockKey)
176+
err = cs.Unlock(context.Background(), lockKey)
158177
assert.NoError(t, err)
159178
})
160179

161-
err = cs2.Lock(lockKey)
180+
err = cs2.Lock(context.Background(), lockKey)
162181
assert.NoError(t, err)
163182

164-
err = cs2.Unlock(lockKey)
183+
err = cs2.Unlock(context.Background(), lockKey)
165184
assert.NoError(t, err)
166185
}

0 commit comments

Comments
 (0)