@@ -47,54 +47,61 @@ const (
4747)
4848
4949var (
50- Client * gcpStorage.Client
50+ hc * http.Client
51+ client * gcpStorage.Client
52+ close func ()
5153 err error
5254)
5355
5456func TestMain (m * testing.M ) {
55- hc , close : = newTestServer (func (w http.ResponseWriter , r * http.Request ) {
57+ hc , close = newTestServer (func (w http.ResponseWriter , r * http.Request ) {
5658 io .Copy (ioutil .Discard , r .Body )
57- w .WriteHeader (200 )
5859 if r .RequestURI == fmt .Sprintf ("/storage/v1/b/%s?alt=json&prettyPrint=false&projection=full" , bucketName ) {
60+ w .WriteHeader (200 )
5961 response := getBucket ()
60- jsonedResp , err := json .Marshal (response )
62+ jsonResponse , err := json .Marshal (response )
6163 if err != nil {
62- log .Fatalf ("error marshalling resp %v\n " , err )
64+ log .Fatalf ("error marshalling response %v\n " , err )
6365 }
64- _ , err = w .Write (jsonedResp )
66+ _ , err = w .Write (jsonResponse )
6567 if err != nil {
66- log .Fatalf ("error writing jsonedResp %v\n " , err )
68+ log .Fatalf ("error writing jsonResponse %v\n " , err )
6769 }
6870 } else if r .RequestURI == fmt .Sprintf ("/storage/v1/b/%s/o/%s?alt=json&prettyPrint=false&projection=full" , bucketName , objectName ) {
71+ w .WriteHeader (200 )
6972 response := getObject ()
70- jsonedResp , err := json .Marshal (response )
73+ jsonResponse , err := json .Marshal (response )
7174 if err != nil {
72- log .Fatalf ("error marshalling resp %v\n " , err )
75+ log .Fatalf ("error marshalling response %v\n " , err )
7376 }
74- _ , err = w .Write (jsonedResp )
77+ _ , err = w .Write (jsonResponse )
7578 if err != nil {
76- log .Fatalf ("error writing jsonedResp %v\n " , err )
79+ log .Fatalf ("error writing jsonResponse %v\n " , err )
7780 }
7881 } else if r .RequestURI == fmt .Sprintf ("/storage/v1/b/%s/o?alt=json&delimiter=&endOffset=&pageToken=&prefix=&prettyPrint=false&projection=full&startOffset=&versions=false" , bucketName ) {
82+ w .WriteHeader (200 )
7983 response := getObject ()
80- jsonedResp , err := json .Marshal (response )
84+ jsonResponse , err := json .Marshal (response )
8185 if err != nil {
82- log .Fatalf ("error marshalling resp %v\n " , err )
86+ log .Fatalf ("error marshalling response %v\n " , err )
8387 }
84- _ , err = w .Write (jsonedResp )
88+ _ , err = w .Write (jsonResponse )
8589 if err != nil {
86- log .Fatalf ("error writing jsonedResp %v\n " , err )
90+ log .Fatalf ("error writing jsonResponse %v\n " , err )
8791 }
8892 } else if r .RequestURI == fmt .Sprintf ("/%s/test.yaml" , bucketName ) || r .RequestURI == fmt .Sprintf ("/storage/v1/b/%s/o/%s?alt=json&prettyPrint=false&projection=full" , bucketName , objectName ) {
93+ w .WriteHeader (200 )
8994 response := getObjectFile ()
9095 _ , err = w .Write ([]byte (response ))
9196 if err != nil {
92- log .Fatalf ("error writing jsonedResp %v\n " , err )
97+ log .Fatalf ("error writing response %v\n " , err )
9398 }
99+ } else {
100+ w .WriteHeader (404 )
94101 }
95102 })
96103 ctx := context .Background ()
97- Client , err = gcpStorage .NewClient (ctx , option .WithHTTPClient (hc ))
104+ client , err = gcpStorage .NewClient (ctx , option .WithHTTPClient (hc ))
98105 if err != nil {
99106 log .Fatal (err )
100107 }
@@ -103,9 +110,15 @@ func TestMain(m *testing.M) {
103110 os .Exit (run )
104111}
105112
113+ func TestNewClient (t * testing.T ) {
114+ gcpClient , err := gcp .NewClient (context .Background (), option .WithHTTPClient (hc ))
115+ assert .NilError (t , err )
116+ assert .Assert (t , gcpClient != nil )
117+ }
118+
106119func TestBucketExists (t * testing.T ) {
107120 gcpClient := & gcp.GCPClient {
108- Client : Client ,
121+ Client : client ,
109122 StartRange : 0 ,
110123 EndRange : - 1 ,
111124 }
@@ -114,9 +127,21 @@ func TestBucketExists(t *testing.T) {
114127 assert .Assert (t , exists )
115128}
116129
130+ func TestBucketNotExists (t * testing.T ) {
131+ bucket := "notexistsbucket"
132+ gcpClient := & gcp.GCPClient {
133+ Client : client ,
134+ StartRange : 0 ,
135+ EndRange : - 1 ,
136+ }
137+ exists , err := gcpClient .BucketExists (context .Background (), bucket )
138+ assert .NilError (t , err )
139+ assert .Assert (t , ! exists )
140+ }
141+
117142func TestObjectAttributes (t * testing.T ) {
118143 gcpClient := & gcp.GCPClient {
119- Client : Client ,
144+ Client : client ,
120145 StartRange : 0 ,
121146 EndRange : - 1 ,
122147 }
@@ -131,7 +156,7 @@ func TestObjectAttributes(t *testing.T) {
131156
132157func TestListObjects (t * testing.T ) {
133158 gcpClient := & gcp.GCPClient {
134- Client : Client ,
159+ Client : client ,
135160 StartRange : 0 ,
136161 EndRange : - 1 ,
137162 }
@@ -151,7 +176,7 @@ func TestFGetObject(t *testing.T) {
151176 assert .NilError (t , err )
152177 defer os .RemoveAll (tempDir )
153178 gcpClient := & gcp.GCPClient {
154- Client : Client ,
179+ Client : client ,
155180 StartRange : 0 ,
156181 EndRange : - 1 ,
157182 }
@@ -162,9 +187,41 @@ func TestFGetObject(t *testing.T) {
162187 }
163188}
164189
190+ func TestFGetObjectNotExists (t * testing.T ) {
191+ object := "notexists.txt"
192+ tempDir , err := os .MkdirTemp ("" , bucketName )
193+ assert .NilError (t , err )
194+ defer os .RemoveAll (tempDir )
195+ gcpClient := & gcp.GCPClient {
196+ Client : client ,
197+ StartRange : 0 ,
198+ EndRange : - 1 ,
199+ }
200+ localPath := filepath .Join (tempDir , object )
201+ err = gcpClient .FGetObject (context .Background (), bucketName , object , localPath )
202+ if err != io .EOF {
203+ assert .Error (t , err , "storage: object doesn't exist" )
204+ }
205+ }
206+
207+ func TestFGetObjectDirectoryIsFileName (t * testing.T ) {
208+ tempDir , err := os .MkdirTemp ("" , bucketName )
209+ defer os .RemoveAll (tempDir )
210+ assert .NilError (t , err )
211+ gcpClient := & gcp.GCPClient {
212+ Client : client ,
213+ StartRange : 0 ,
214+ EndRange : - 1 ,
215+ }
216+ err = gcpClient .FGetObject (context .Background (), bucketName , objectName , tempDir )
217+ if err != io .EOF {
218+ assert .Error (t , err , "filename is a directory" )
219+ }
220+ }
221+
165222func TestSetRange (t * testing.T ) {
166223 gcpClient := & gcp.GCPClient {
167- Client : Client ,
224+ Client : client ,
168225 StartRange : 0 ,
169226 EndRange : - 1 ,
170227 }
@@ -173,6 +230,45 @@ func TestSetRange(t *testing.T) {
173230 assert .Equal (t , gcpClient .EndRange , int64 (5 ))
174231}
175232
233+ func TestValidateSecret (t * testing.T ) {
234+ t .Parallel ()
235+ testCases := []struct {
236+ title string
237+ secret map [string ][]byte
238+ name string
239+ error bool
240+ }{
241+ {
242+ "Test Case 1" ,
243+ map [string ][]byte {
244+ "serviceaccount" : []byte ("serviceaccount" ),
245+ },
246+ "Service Account" ,
247+ false ,
248+ },
249+ {
250+ "Test Case 2" ,
251+ map [string ][]byte {
252+ "data" : []byte ("data" ),
253+ },
254+ "Service Account" ,
255+ true ,
256+ },
257+ }
258+ for _ , testCase := range testCases {
259+ testCase := testCase
260+ t .Run (testCase .title , func (t * testing.T ) {
261+ t .Parallel ()
262+ err := gcp .ValidateSecret (testCase .secret , testCase .name )
263+ if testCase .error {
264+ assert .Error (t , err , fmt .Sprintf ("invalid '%v' secret data: required fields 'serviceaccount'" , testCase .name ))
265+ } else {
266+ assert .NilError (t , err )
267+ }
268+ })
269+ }
270+ }
271+
176272func newTestServer (handler func (w http.ResponseWriter , r * http.Request )) (* http.Client , func ()) {
177273 ts := httptest .NewTLSServer (http .HandlerFunc (handler ))
178274 tlsConf := & tls.Config {InsecureSkipVerify : true }
0 commit comments