Skip to content

Commit 95f5f04

Browse files
committed
tests: Convert stretchr/testify to matryer/is
Convert all the tests from using `strechr/testify` to `matryer/is`. `is` is a much smaller package with fewer dependencies. Most of the additional functionality of testify can be replaced with direct Go code or the `google/go-cmp` package (which we do not need here yet).
1 parent 44d3185 commit 95f5f04

File tree

5 files changed

+93
-72
lines changed

5 files changed

+93
-72
lines changed

db_test.go

Lines changed: 65 additions & 54 deletions
Original file line numberDiff line numberDiff line change
@@ -5,66 +5,72 @@ import (
55
"crypto/sha256"
66
"crypto/sha512"
77
"encoding/base64"
8+
"errors"
89
"hash"
910
"io"
1011
"testing"
1112

12-
"github.com/stretchr/testify/require"
13+
"github.com/matryer/is"
1314
)
1415

1516
func MustDN(t *testing.T, dnstr string) DN {
16-
t.Helper()
17+
is := is.New(t)
18+
is.Helper()
1719
dn, err := NewDN(dnstr)
18-
require.NoError(t, err)
20+
is.NoErr(err)
1921
return dn
2022
}
2123

2224
func Test_RDN(t *testing.T) {
25+
is := is.New(t)
26+
2327
rdn1 := RDN{Name: "dc", Value: "example"}
2428
rdn2 := RDN{Name: "DC", Value: "example"}
2529
rdn3 := RDN{Name: "Dc", Value: "example2"}
2630
rdn4 := RDN{Name: "ou", Value: "core"}
2731

28-
require.True(t, rdn1.Equal(rdn1))
29-
require.True(t, rdn2.Equal(rdn2))
30-
require.False(t, rdn1.Equal(rdn3))
31-
require.False(t, rdn1.Equal(rdn4))
32-
33-
require.Equal(t, -1, rdn1.Compare(rdn3))
34-
require.Equal(t, 1, rdn3.Compare(rdn2))
35-
require.Equal(t, 0, rdn1.Compare(rdn1))
36-
require.Equal(t, 0, rdn1.Compare(rdn2))
37-
require.Equal(t, -1, rdn1.Compare(rdn4))
38-
require.Equal(t, 1, rdn4.Compare(rdn1))
32+
is.True(rdn1.Equal(rdn1))
33+
is.True(rdn2.Equal(rdn2))
34+
is.True(!rdn1.Equal(rdn3))
35+
is.True(!rdn1.Equal(rdn4))
36+
37+
is.Equal(-1, rdn1.Compare(rdn3))
38+
is.Equal(1, rdn3.Compare(rdn2))
39+
is.Equal(0, rdn1.Compare(rdn1))
40+
is.Equal(0, rdn1.Compare(rdn2))
41+
is.Equal(-1, rdn1.Compare(rdn4))
42+
is.Equal(1, rdn4.Compare(rdn1))
3943
}
4044

4145
func Test_DN(t *testing.T) {
46+
is := is.New(t)
4247
dn1, err := NewDN("dc=example, dc = com")
43-
require.NoError(t, err)
44-
require.Equal(t, DN{RDN{"dc", "com"}, RDN{"dc", "example"}}, dn1)
45-
require.True(t, dn1.IsAncestor(dn1))
46-
require.Equal(t, "dc=example,dc=com", dn1.String())
48+
is.NoErr(err)
49+
is.Equal(DN{RDN{"dc", "com"}, RDN{"dc", "example"}}, dn1)
50+
is.True(dn1.IsAncestor(dn1))
51+
is.Equal("dc=example,dc=com", dn1.String())
4752

4853
dn2, err := NewDN("o=example,dc=example,dc=com")
49-
require.NoError(t, err)
50-
require.Equal(t, DN{RDN{"dc", "com"}, RDN{"dc", "example"}, RDN{"o", "example"}}, dn2)
51-
require.True(t, dn1.IsAncestor(dn2), "%s should be an ancestor of %s", dn2, dn1)
54+
is.NoErr(err)
55+
is.Equal(DN{RDN{"dc", "com"}, RDN{"dc", "example"}, RDN{"o", "example"}}, dn2)
56+
is.True(dn1.IsAncestor(dn2)) // dn2 should be an ancestor of dn1
5257

5358
dn3, err := NewDN("")
54-
require.NoError(t, err)
55-
require.Equal(t, DN{}, dn3)
56-
require.True(t, dn3.IsAncestor(dn1), "root should be an ancestor of %s", dn1)
59+
is.NoErr(err)
60+
is.Equal(DN{}, dn3)
61+
is.True(dn3.IsAncestor(dn1)) // root should be an ancestor of dn1
5762

5863
dn4, err := NewDN("DC=example,Dc=com")
59-
require.NoError(t, err)
60-
require.True(t, dn1.Equal(dn4))
64+
is.NoErr(err)
65+
is.True(dn1.Equal(dn4))
6166

6267
dn5, err := NewDN(" \t\n")
63-
require.NoError(t, err)
64-
require.True(t, dn5.IsEmpty())
68+
is.NoErr(err)
69+
is.True(dn5.IsEmpty())
6570
}
6671

6772
func Test_DBAddEntries_Success(t *testing.T) {
73+
is := is.New(t)
6874
entries := []*Entry{
6975
{DN: MustDN(t, "cn=user1,ou=groups,dc=example,dc=com")},
7076
{DN: MustDN(t, "ou=groups,dc=example,dc=com")},
@@ -84,25 +90,27 @@ func Test_DBAddEntries_Success(t *testing.T) {
8490
db := NewDB()
8591

8692
err := db.AddEntries(entries)
87-
require.NoError(t, err)
93+
is.NoErr(err)
8894

8995
dit := db.DIT
90-
require.Len(t, dit.children, 1)
91-
require.Equal(t, DN{RDN{"dc", "com"}}, dit.children[0].Entry.DN)
92-
require.Len(t, dit.children[0].children, 6)
96+
is.Equal(1, len(dit.children))
97+
is.Equal(DN{RDN{"dc", "com"}}, dit.children[0].Entry.DN)
98+
is.Equal(6, len(dit.children[0].children))
9399
}
94100

95101
func Test_DBAddEntries_Duplicate(t *testing.T) {
102+
is := is.New(t)
96103
entries := []*Entry{
97104
{DN: MustDN(t, "dc=example,dc=com")},
98105
{DN: MustDN(t, "dc=example,dc=com")},
99106
}
100107
db := NewDB()
101108
err := db.AddEntries(entries)
102-
require.Error(t, err)
109+
is.True(err != nil)
103110
}
104111

105112
func Test_DIT_String(t *testing.T) {
113+
is := is.New(t)
106114
entries := []*Entry{
107115
{DN: MustDN(t, "dc=example,dc=com")},
108116
{DN: MustDN(t, "ou=people,dc=example,dc=com")},
@@ -118,40 +126,41 @@ func Test_DIT_String(t *testing.T) {
118126
db := NewDB()
119127
err := db.AddEntries(entries)
120128

121-
require.NoError(t, err)
129+
is.NoErr(err)
122130
str := db.DIT.String()
123-
require.Equal(t, expected, str)
131+
is.Equal(expected, str)
124132
}
125133

126134
func Test_Entry_CaseInsensitiveAttrs(t *testing.T) {
135+
is := is.New(t)
127136
emap := map[string]any{
128137
"DN": "dc=example,dc=com", // upper-case DN key
129138
"objectClass": "person",
130139
"sn": "Surname",
131140
"cn": "CN",
132141
}
133142
e, err := NewEntryFromMap(emap)
134-
require.NoError(t, err)
143+
is.NoErr(err)
135144

136-
require.Equal(t, emap["DN"], e.DN.String())
145+
is.Equal(emap["DN"], e.DN.String())
137146

138147
a, ok := e.GetAttr("sn")
139-
require.True(t, ok)
140-
require.Len(t, a.Vals, 1)
141-
require.Equal(t, "sn", a.Name)
142-
require.Equal(t, emap["sn"], a.Vals[0])
148+
is.True(ok)
149+
is.Equal(1, len(a.Vals))
150+
is.Equal("sn", a.Name)
151+
is.Equal(emap["sn"], a.Vals[0])
143152

144153
a, ok = e.GetAttr("SN")
145-
require.True(t, ok)
146-
require.Len(t, a.Vals, 1)
147-
require.Equal(t, "sn", a.Name)
148-
require.Equal(t, emap["sn"], a.Vals[0])
154+
is.True(ok)
155+
is.Equal(1, len(a.Vals))
156+
is.Equal("sn", a.Name)
157+
is.Equal(emap["sn"], a.Vals[0])
149158

150159
a, ok = e.GetAttr("objectclass")
151-
require.True(t, ok)
152-
require.Len(t, a.Vals, 1)
153-
require.Equal(t, "objectClass", a.Name)
154-
require.Equal(t, emap["objectClass"], a.Vals[0])
160+
is.True(ok)
161+
is.Equal(1, len(a.Vals))
162+
is.Equal("objectClass", a.Name)
163+
is.Equal(emap["objectClass"], a.Vals[0])
155164
}
156165

157166
func Test_Entry_Auth(t *testing.T) {
@@ -164,6 +173,7 @@ func Test_Entry_Auth(t *testing.T) {
164173
}
165174

166175
testfunc := func(t *testing.T, tt testcase) { //nolint:thelper // not a helper
176+
is := is.New(t)
167177
password := "password"
168178
entryMap := map[string]any{
169179
"dn": "uid=alice,dc=example,dc=com",
@@ -181,12 +191,12 @@ func Test_Entry_Auth(t *testing.T) {
181191
entryMap["userPassword"] = userPassword
182192
}
183193
e, err := NewEntryFromMap(entryMap)
184-
require.NoError(t, err)
194+
is.NoErr(err)
185195
err = e.Authenticate(password)
186196
if tt.expectErr != nil {
187-
require.ErrorIs(t, err, tt.expectErr)
197+
is.True(errors.Is(err, tt.expectErr))
188198
} else {
189-
require.NoError(t, err)
199+
is.NoErr(err)
190200
}
191201
}
192202

@@ -273,15 +283,16 @@ func Test_Entry_Auth(t *testing.T) {
273283
}
274284

275285
func hashPassword(t *testing.T, password string, scheme string) string {
276-
t.Helper()
286+
is := is.New(t)
287+
is.Helper()
277288

278289
newHash := map[string]func() hash.Hash{
279290
"SSHA": sha1.New,
280291
"SSHA256": sha256.New,
281292
"SSHA512": sha512.New,
282293
}
283294

284-
require.Contains(t, newHash, scheme)
295+
is.True(newHash[scheme] != nil)
285296

286297
// Use a fixed salt in tests
287298
salt := "0123456789ABCDEF"

filter_test.go

Lines changed: 13 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,10 @@
11
package main
22

33
import (
4+
"errors"
45
"testing"
56

6-
"github.com/stretchr/testify/require"
7+
"github.com/matryer/is"
78
)
89

910
func Test_FilterParse(t *testing.T) {
@@ -14,9 +15,10 @@ func Test_FilterParse(t *testing.T) {
1415
}
1516

1617
testfunc := func(t *testing.T, tt testcase) { //nolint:thelper // not a helper
18+
is := is.New(t)
1719
n, err := Parse(tt.filter)
18-
require.NoError(t, err)
19-
require.Equal(t, tt.expectedNode, n)
20+
is.NoErr(err)
21+
is.Equal(tt.expectedNode, n)
2022
}
2123

2224
// fixtures
@@ -84,8 +86,9 @@ func Test_FilterParse_Fail(t *testing.T) {
8486
}
8587

8688
testfunc := func(t *testing.T, tt testcase) { //nolint:thelper // not a helper
89+
is := is.New(t)
8790
_, err := Parse(tt.filter)
88-
require.ErrorIs(t, err, tt.err)
91+
is.True(errors.Is(err, tt.err))
8992
}
9093

9194
tests := []testcase{
@@ -154,8 +157,9 @@ func Test_FilterParse_Unimplemented(t *testing.T) {
154157
}
155158

156159
testfunc := func(t *testing.T, tt testcase) { //nolint:thelper // not a helper
160+
is := is.New(t)
157161
_, err := Parse(tt.filter)
158-
require.ErrorIs(t, err, tt.err)
162+
is.True(errors.Is(err, tt.err))
159163
}
160164

161165
tests := []testcase{
@@ -189,18 +193,19 @@ func Test_FilterMatch(t *testing.T) {
189193
}
190194

191195
testfunc := func(t *testing.T, tt testcase) { //nolint:thelper // not a helper
196+
is := is.New(t)
192197
attrs := map[string]any{
193198
"dn": "dc=example,dc=com",
194199
"objectClass": "top",
195200
"uid": "1234",
196201
}
197202
e, err := NewEntryFromMap(attrs)
198-
require.NoError(t, err)
203+
is.NoErr(err)
199204

200205
n, err := Parse(tt.filter)
201-
require.NoError(t, err)
206+
is.NoErr(err)
202207
got := n.Match(e)
203-
require.Equal(t, tt.want, got)
208+
is.Equal(tt.want, got)
204209
}
205210

206211
tests := []testcase{

go.mod

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ require (
66
foxygo.at/jsonnext v0.1.16
77
github.com/alecthomas/kong v1.9.0
88
github.com/jimlambrt/gldap v0.1.14
9-
github.com/stretchr/testify v1.9.0
9+
github.com/matryer/is v1.4.1
1010
)
1111

1212
require (
@@ -23,6 +23,7 @@ require (
2323
github.com/mattn/go-colorable v0.1.13 // indirect
2424
github.com/mattn/go-isatty v0.0.20 // indirect
2525
github.com/pmezard/go-difflib v1.0.0 // indirect
26+
github.com/stretchr/testify v1.9.0 // indirect
2627
golang.org/x/crypto v0.26.0 // indirect
2728
golang.org/x/sys v0.24.0 // indirect
2829
gopkg.in/yaml.v3 v3.0.1 // indirect

go.sum

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,8 @@ github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
6464
github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
6565
github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
6666
github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
67+
github.com/matryer/is v1.4.1 h1:55ehd8zaGABKLXQUe2awZ99BD/PTc2ls+KV/dXphgEQ=
68+
github.com/matryer/is v1.4.1/go.mod h1:8I/i5uYgLzgsgEloJE1U6xx5HkBQpAZvepWuujKwMRU=
6769
github.com/mattn/go-colorable v0.1.4/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE=
6870
github.com/mattn/go-colorable v0.1.9/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc=
6971
github.com/mattn/go-colorable v0.1.12/go.mod h1:u5H1YNBxpqRaxsYJYSkiCWKzEfiAb1Gb520KVy5xxl4=

json_test.go

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ import (
55
"slices"
66
"testing"
77

8-
"github.com/stretchr/testify/require"
8+
"github.com/matryer/is"
99
)
1010

1111
func Test_ReadJSON_Success(t *testing.T) {
@@ -15,17 +15,18 @@ func Test_ReadJSON_Success(t *testing.T) {
1515
}
1616

1717
testfn := func(t *testing.T, filename string) {
18-
t.Helper()
18+
is := is.New(t)
19+
is.Helper()
1920
f, err := os.Open(filename)
20-
require.NoError(t, err)
21+
is.NoErr(err)
2122

2223
entries, err := ReadJSON(f)
23-
require.NoError(t, err)
24-
require.Len(t, entries, 2)
24+
is.NoErr(err)
25+
is.Equal(2, len(entries))
2526
// The object-based input produces entries in random order (due to
2627
// map iteration), so sort by DN first.
2728
slices.SortFunc(entries, func(a, b *Entry) int { return slices.CompareFunc(a.DN, b.DN, RDN.Compare) })
28-
require.Equal(t, MustDN(t, "o=example,dc=example,dc=com"), entries[0].DN)
29+
is.Equal(MustDN(t, "o=example,dc=example,dc=com"), entries[0].DN)
2930
}
3031

3132
for _, filename := range tests {
@@ -45,12 +46,13 @@ func Test_ReadJSON_Failure(t *testing.T) {
4546
}
4647

4748
testfn := func(t *testing.T, filename string) {
48-
t.Helper()
49+
is := is.New(t)
50+
is.Helper()
4951
f, err := os.Open(filename)
50-
require.NoError(t, err)
52+
is.NoErr(err)
5153

5254
_, err = ReadJSON(f)
53-
require.Error(t, err)
55+
is.True(err != nil)
5456
}
5557

5658
for _, filename := range tests {

0 commit comments

Comments
 (0)