@@ -20,6 +20,7 @@ import (
20
20
"context"
21
21
"crypto/tls"
22
22
"crypto/x509"
23
+ "encoding/json"
23
24
"errors"
24
25
"fmt"
25
26
"log"
@@ -35,6 +36,7 @@ import (
35
36
"github.com/elazarl/goproxy"
36
37
"github.com/google/uuid"
37
38
miniov7 "github.com/minio/minio-go/v7"
39
+ "github.com/minio/minio-go/v7/pkg/credentials"
38
40
"github.com/ory/dockertest/v3"
39
41
"github.com/ory/dockertest/v3/docker"
40
42
"gotest.tools/assert"
@@ -244,6 +246,54 @@ func TestFGetObject(t *testing.T) {
244
246
assert .NilError (t , err )
245
247
}
246
248
249
+ func TestFGetObjectWithSTSEndpoint (t * testing.T ) {
250
+ // start a mock STS server
251
+ stsListener , err := net .Listen ("tcp" , ":0" )
252
+ assert .NilError (t , err , "could not start STS listener" )
253
+ defer stsListener .Close ()
254
+ stsAddr := stsListener .Addr ().String ()
255
+ stsHandler := http .NewServeMux ()
256
+ stsHandler .HandleFunc ("PUT " + credentials .TokenPath , func (w http.ResponseWriter , r * http.Request ) {
257
+ _ , err := w .Write ([]byte ("mock-token" ))
258
+ assert .NilError (t , err )
259
+ })
260
+ stsHandler .HandleFunc ("GET " + credentials .DefaultIAMSecurityCredsPath , func (w http.ResponseWriter , r * http.Request ) {
261
+ _ , err := w .Write ([]byte ("mock-role" ))
262
+ assert .NilError (t , err )
263
+ })
264
+ roleCredsRetrieved := false
265
+ stsHandler .HandleFunc ("GET " + credentials .DefaultIAMSecurityCredsPath + "mock-role" , func (w http.ResponseWriter , r * http.Request ) {
266
+ token := r .Header .Get (credentials .TokenRequestHeader )
267
+ assert .Equal (t , token , "mock-token" )
268
+ err := json .NewEncoder (w ).Encode (map [string ]any {
269
+ "Code" : "Success" ,
270
+ "AccessKeyID" : testMinioRootUser ,
271
+ "SecretAccessKey" : testMinioRootPassword ,
272
+ })
273
+ assert .NilError (t , err )
274
+ roleCredsRetrieved = true
275
+ })
276
+ stsServer := & http.Server {
277
+ Addr : stsAddr ,
278
+ Handler : stsHandler ,
279
+ }
280
+ go stsServer .Serve (stsListener )
281
+ defer stsServer .Shutdown (context .Background ())
282
+
283
+ // test FGetObject with STS endpoint
284
+ bucket := bucketStub (bucket , testMinioAddress )
285
+ bucket .Spec .STSEndpoint = fmt .Sprintf ("http://%s" , stsAddr )
286
+ minioClient , err := NewClient (bucket , WithTLSConfig (testTLSConfig ))
287
+ assert .NilError (t , err )
288
+ assert .Assert (t , minioClient != nil )
289
+ ctx := context .Background ()
290
+ tempDir := t .TempDir ()
291
+ path := filepath .Join (tempDir , sourceignore .IgnoreFile )
292
+ _ , err = minioClient .FGetObject (ctx , bucketName , objectName , path )
293
+ assert .NilError (t , err )
294
+ assert .Assert (t , roleCredsRetrieved )
295
+ }
296
+
247
297
func TestNewClientAndFGetObjectWithProxy (t * testing.T ) {
248
298
// start proxy
249
299
proxyListener , err := net .Listen ("tcp" , ":0" )
0 commit comments