@@ -2,16 +2,27 @@ package gldap
2
2
3
3
import (
4
4
"context"
5
+ "errors"
5
6
"fmt"
6
7
"net"
8
+ "os"
9
+ "strconv"
7
10
"testing"
8
11
12
+ "github.com/hashicorp/go-hclog"
9
13
"github.com/stretchr/testify/assert"
10
14
"github.com/stretchr/testify/require"
11
15
)
12
16
13
17
func TestServer_Stop (t * testing.T ) {
14
18
t .Parallel ()
19
+ var testLogger hclog.Logger
20
+ if ok , _ := strconv .ParseBool (os .Getenv ("DEBUG" )); ok {
21
+ testLogger = hclog .New (& hclog.LoggerOptions {
22
+ Name : "TestServer_Run-logger" ,
23
+ Level : hclog .Debug ,
24
+ })
25
+ }
15
26
tests := []struct {
16
27
name string
17
28
server * Server
@@ -21,32 +32,40 @@ func TestServer_Stop(t *testing.T) {
21
32
{
22
33
name : "missing-listener" ,
23
34
server : func () * Server {
24
- s , err := NewServer ()
35
+ s , err := NewServer (WithLogger ( testLogger ) )
25
36
require .NoError (t , err )
26
37
s .mu .Lock ()
27
38
defer s .mu .Unlock ()
28
39
s .listener = nil
29
40
return s
30
41
}(),
31
- wantErr : true ,
32
- wantErrContains : "no listener" ,
33
42
},
34
43
{
35
44
name : "missing-cancel" ,
36
45
server : func () * Server {
37
46
p := freePort (t )
38
47
l , err := net .Listen ("tcp" , fmt .Sprintf (":%d" , p ))
39
48
require .NoError (t , err )
40
- s , err := NewServer ()
49
+ s , err := NewServer (WithLogger ( testLogger ) )
41
50
require .NoError (t , err )
42
51
s .mu .Lock ()
43
52
defer s .mu .Unlock ()
44
53
s .listener = l
45
54
s .shutdownCancel = nil
46
55
return s
47
56
}(),
48
- wantErr : true ,
49
- wantErrContains : "no shutdown context cancel func" ,
57
+ },
58
+ {
59
+ name : "nothing-to-do" ,
60
+ server : func () * Server {
61
+ s , err := NewServer (WithLogger (testLogger ))
62
+ require .NoError (t , err )
63
+ s .mu .Lock ()
64
+ defer s .mu .Unlock ()
65
+ s .listener = nil
66
+ s .shutdownCancel = nil
67
+ return s
68
+ }(),
50
69
},
51
70
{
52
71
name : "listener-closed" ,
@@ -55,7 +74,7 @@ func TestServer_Stop(t *testing.T) {
55
74
p := freePort (t )
56
75
l , err := net .Listen ("tcp" , fmt .Sprintf (":%d" , p ))
57
76
require .NoError (t , err )
58
- s , err := NewServer ()
77
+ s , err := NewServer (WithLogger ( testLogger ) )
59
78
require .NoError (t , err )
60
79
s .mu .Lock ()
61
80
defer s .mu .Unlock ()
@@ -64,8 +83,21 @@ func TestServer_Stop(t *testing.T) {
64
83
l .Close ()
65
84
return s
66
85
}(),
86
+ },
87
+ {
88
+ name : "listener-close-err" ,
89
+ server : func () * Server {
90
+ _ , cancel := context .WithCancel (context .Background ())
91
+ s , err := NewServer (WithLogger (testLogger ))
92
+ require .NoError (t , err )
93
+ s .mu .Lock ()
94
+ defer s .mu .Unlock ()
95
+ s .listener = & mockListener {}
96
+ s .shutdownCancel = cancel
97
+ return s
98
+ }(),
67
99
wantErr : true ,
68
- wantErrContains : "use of closed network connection " ,
100
+ wantErrContains : "mockListener.Close error " ,
69
101
},
70
102
}
71
103
for _ , tc := range tests {
@@ -83,3 +115,11 @@ func TestServer_Stop(t *testing.T) {
83
115
})
84
116
}
85
117
}
118
+
119
+ type mockListener struct {
120
+ net.Listener
121
+ }
122
+
123
+ func (* mockListener ) Close () error {
124
+ return errors .New ("mockListener.Close error" )
125
+ }
0 commit comments