@@ -17,15 +17,17 @@ limitations under the License.
17
17
package main
18
18
19
19
import (
20
+ "flag"
21
+ "fmt"
22
+ "io/ioutil"
20
23
"net/http"
21
24
"net/http/httptest"
25
+ "os"
22
26
"testing"
23
27
24
28
csi "github.com/container-storage-interface/spec/lib/go/csi"
25
29
"github.com/golang/mock/gomock"
26
- connlib "github.com/kubernetes-csi/csi-lib-utils/connection"
27
30
"github.com/kubernetes-csi/csi-test/driver"
28
- "google.golang.org/grpc"
29
31
)
30
32
31
33
const (
@@ -38,8 +40,7 @@ func createMockServer(t *testing.T) (
38
40
* driver.MockIdentityServer ,
39
41
* driver.MockControllerServer ,
40
42
* driver.MockNodeServer ,
41
- * grpc.ClientConn ,
42
- error ) {
43
+ func ()) {
43
44
// Start the mock server
44
45
mockController := gomock .NewController (t )
45
46
identityServer := driver .NewMockIdentityServer (mockController )
@@ -50,37 +51,77 @@ func createMockServer(t *testing.T) (
50
51
Controller : controllerServer ,
51
52
Node : nodeServer ,
52
53
})
53
- drv .Start ()
54
54
55
- // Create a client connection to it
56
- addr := drv .Address ()
57
- csiConn , err := connlib .Connect (addr )
55
+ tmpDir , err := ioutil .TempDir ("" , "livenessprobe_test.*" )
58
56
if err != nil {
59
- return nil , nil , nil , nil , nil , nil , err
57
+ t . Errorf ( "failed to create a temporary socket file name: %v" , err )
60
58
}
61
59
62
- return mockController , drv , identityServer , controllerServer , nodeServer , csiConn , nil
60
+ csiEndpoint := fmt .Sprintf ("%s/csi.sock" , tmpDir )
61
+ err = drv .StartOnAddress ("unix" , csiEndpoint )
62
+ if err != nil {
63
+ t .Errorf ("failed to start the csi driver at %s: %v" , csiEndpoint , err )
64
+ }
65
+
66
+ return mockController , drv , identityServer , controllerServer , nodeServer , func () {
67
+ mockController .Finish ()
68
+ drv .Stop ()
69
+ os .RemoveAll (csiEndpoint )
70
+ }
63
71
}
64
72
65
73
func TestProbe (t * testing.T ) {
66
- mockController , driver , idServer , _ , _ , csiConn , err := createMockServer (t )
74
+ _ , driver , idServer , _ , _ , cleanUpFunc := createMockServer (t )
75
+ defer cleanUpFunc ()
76
+
77
+ flag .Set ("csi-address" , driver .Address ())
78
+ flag .Parse ()
79
+
80
+ var injectedErr error
81
+
82
+ inProbe := & csi.ProbeRequest {}
83
+ outProbe := & csi.ProbeResponse {}
84
+ idServer .EXPECT ().Probe (gomock .Any (), inProbe ).Return (outProbe , injectedErr ).Times (1 )
85
+
86
+ hp := & healthProbe {driverName : driverName }
87
+
88
+ server := httptest .NewServer (http .HandlerFunc (func (rw http.ResponseWriter , req * http.Request ) {
89
+ if req .URL .String () == "/healthz" {
90
+ hp .checkProbe (rw , req )
91
+ }
92
+ }))
93
+ defer server .Close ()
94
+
95
+ httpreq , err := http .NewRequest ("GET" , fmt .Sprintf ("%s/healthz" , server .URL ), nil )
67
96
if err != nil {
68
- t .Fatal ( err )
97
+ t .Fatalf ( "failed to build test request for health check: %v" , err )
69
98
}
70
- defer mockController .Finish ()
71
- defer driver .Stop ()
72
- defer csiConn .Close ()
99
+
100
+ httpresp , err := http .DefaultClient .Do (httpreq )
101
+ if err != nil {
102
+ t .Errorf ("failed to check probe: %v" , err )
103
+ }
104
+
105
+ expectedStatusCode := http .StatusOK
106
+ if httpresp .StatusCode != expectedStatusCode {
107
+ t .Errorf ("expected status code %d but got %d" , expectedStatusCode , httpresp .StatusCode )
108
+ }
109
+ }
110
+
111
+ func TestProbe_issue68 (t * testing.T ) {
112
+ _ , driver , idServer , _ , _ , cleanUpFunc := createMockServer (t )
113
+ defer cleanUpFunc ()
114
+
115
+ flag .Set ("csi-address" , driver .Address ())
116
+ flag .Parse ()
73
117
74
118
var injectedErr error
75
119
76
120
inProbe := & csi.ProbeRequest {}
77
121
outProbe := & csi.ProbeResponse {}
78
122
idServer .EXPECT ().Probe (gomock .Any (), inProbe ).Return (outProbe , injectedErr ).Times (1 )
79
123
80
- hp := & healthProbe {
81
- conn : csiConn ,
82
- driverName : driverName ,
83
- }
124
+ hp := & healthProbe {driverName : driverName }
84
125
85
126
server := httptest .NewServer (http .HandlerFunc (func (rw http.ResponseWriter , req * http.Request ) {
86
127
if req .URL .String () == "/healthz" {
@@ -89,12 +130,38 @@ func TestProbe(t *testing.T) {
89
130
}))
90
131
defer server .Close ()
91
132
92
- httpreq , err := http .NewRequest ("GET" , server . URL + " /healthz" , nil )
133
+ httpreq , err := http .NewRequest ("GET" , fmt . Sprintf ( "%s /healthz", server . URL ) , nil )
93
134
if err != nil {
94
135
t .Fatalf ("failed to build test request for health check: %v" , err )
95
136
}
96
- _ , err = http .DefaultClient .Do (httpreq )
137
+
138
+ httpresp , err := http .DefaultClient .Do (httpreq )
97
139
if err != nil {
98
140
t .Errorf ("failed to check probe: %v" , err )
99
141
}
142
+
143
+ expectedStatusCode := http .StatusOK
144
+ if httpresp .StatusCode != expectedStatusCode {
145
+ t .Errorf ("expected status code %d but got %d" , expectedStatusCode , httpresp .StatusCode )
146
+ }
147
+
148
+ err = os .Remove (driver .Address ())
149
+ if err != nil {
150
+ t .Errorf ("failed to remove the csi driver socket file: %v" , err )
151
+ }
152
+
153
+ httpreq , err = http .NewRequest ("GET" , fmt .Sprintf ("%s/healthz" , server .URL ), nil )
154
+ if err != nil {
155
+ t .Fatalf ("failed to build test request for health check: %v" , err )
156
+ }
157
+
158
+ httpresp , err = http .DefaultClient .Do (httpreq )
159
+ if err != nil {
160
+ t .Errorf ("failed to check probe: %v" , err )
161
+ }
162
+
163
+ expectedStatusCode = http .StatusInternalServerError
164
+ if httpresp .StatusCode != expectedStatusCode {
165
+ t .Errorf ("expected status code %d but got %d" , expectedStatusCode , httpresp .StatusCode )
166
+ }
100
167
}
0 commit comments