@@ -33,12 +33,14 @@ import (
33
33
34
34
gcpstorage "cloud.google.com/go/storage"
35
35
"google.golang.org/api/googleapi"
36
+ "google.golang.org/api/option"
36
37
raw "google.golang.org/api/storage/v1"
37
38
"gotest.tools/assert"
38
39
corev1 "k8s.io/api/core/v1"
39
40
v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
40
41
41
- "google.golang.org/api/option"
42
+ sourcev1 "github.com/fluxcd/source-controller/api/v1beta2"
43
+ pkgtesting "github.com/fluxcd/source-controller/pkg/testing"
42
44
)
43
45
44
46
const (
@@ -49,11 +51,12 @@ const (
49
51
)
50
52
51
53
var (
52
- hc * http.Client
53
- client * gcpstorage.Client
54
- close func ()
55
- err error
56
- secret = corev1.Secret {
54
+ hc * http.Client
55
+ serverAddr string
56
+ client * gcpstorage.Client
57
+ close func ()
58
+ err error
59
+ secret = corev1.Secret {
57
60
ObjectMeta : v1.ObjectMeta {
58
61
Name : "gcp-secret" ,
59
62
Namespace : "default" ,
76
79
)
77
80
78
81
func TestMain (m * testing.M ) {
79
- hc , close = newTestServer (func (w http.ResponseWriter , r * http.Request ) {
82
+ hc , serverAddr , close = newTestServer (func (w http.ResponseWriter , r * http.Request ) {
80
83
io .Copy (io .Discard , r .Body )
81
84
switch r .RequestURI {
82
85
case fmt .Sprintf ("/storage/v1/b/%s?alt=json&prettyPrint=false&projection=full" , bucketName ):
@@ -140,7 +143,7 @@ func TestMain(m *testing.M) {
140
143
}
141
144
142
145
func TestNewClientWithSecretErr (t * testing.T ) {
143
- gcpClient , err := NewClient (context .Background (), secret .DeepCopy ())
146
+ gcpClient , err := NewClient (context .Background (), nil , secret .DeepCopy (), nil )
144
147
t .Log (err )
145
148
assert .Error (t , err , "dialing: invalid character 'e' looking for beginning of value" )
146
149
assert .Assert (t , gcpClient == nil )
@@ -216,6 +219,21 @@ func TestFGetObject(t *testing.T) {
216
219
assert .Equal (t , etag , objectEtag )
217
220
}
218
221
222
+ func TestNewClientAndFGetObjectWithProxy (t * testing.T ) {
223
+ proxyURL , closeProxy := pkgtesting .NewHTTPProxy (t , serverAddr )
224
+ defer closeProxy ()
225
+ bucket := & sourcev1.Bucket {Spec : sourcev1.BucketSpec {Insecure : true }} // needed because the server is a mock
226
+ client , err := NewClient (context .Background (), bucket , secret .DeepCopy (), proxyURL )
227
+ assert .NilError (t , err )
228
+ tempDir := t .TempDir ()
229
+ localPath := filepath .Join (tempDir , objectName )
230
+ etag , err := client .FGetObject (context .Background (), bucketName , objectName , localPath )
231
+ if err != io .EOF {
232
+ assert .NilError (t , err )
233
+ }
234
+ assert .Equal (t , etag , objectEtag )
235
+ }
236
+
219
237
func TestFGetObjectNotExists (t * testing.T ) {
220
238
object := "notexists.txt"
221
239
tempDir := t .TempDir ()
@@ -272,16 +290,17 @@ func TestValidateSecret(t *testing.T) {
272
290
}
273
291
}
274
292
275
- func newTestServer (handler func (w http.ResponseWriter , r * http.Request )) (* http.Client , func ()) {
276
- ts := httptest .NewTLSServer (http .HandlerFunc (handler ))
293
+ func newTestServer (handler http.HandlerFunc ) (* http.Client , string , func ()) {
294
+ ts := httptest .NewTLSServer (handler )
295
+ serverAddr := ts .Listener .Addr ().String ()
277
296
tlsConf := & tls.Config {InsecureSkipVerify : true }
278
297
tr := & http.Transport {
279
298
TLSClientConfig : tlsConf ,
280
299
DialTLS : func (netw , addr string ) (net.Conn , error ) {
281
- return tls .Dial ("tcp" , ts . Listener . Addr (). String () , tlsConf )
300
+ return tls .Dial ("tcp" , serverAddr , tlsConf )
282
301
},
283
302
}
284
- return & http.Client {Transport : tr }, func () {
303
+ return & http.Client {Transport : tr }, serverAddr , func () {
285
304
tr .CloseIdleConnections ()
286
305
ts .Close ()
287
306
}
0 commit comments