@@ -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,56 @@ 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
+ token := r .Header .Get (credentials .TokenRequestHeader )
262
+ assert .Equal (t , token , "mock-token" )
263
+ _ , err := w .Write ([]byte ("mock-role" ))
264
+ assert .NilError (t , err )
265
+ })
266
+ roleCredsRetrieved := false
267
+ stsHandler .HandleFunc ("GET " + credentials .DefaultIAMSecurityCredsPath + "mock-role" , func (w http.ResponseWriter , r * http.Request ) {
268
+ token := r .Header .Get (credentials .TokenRequestHeader )
269
+ assert .Equal (t , token , "mock-token" )
270
+ err := json .NewEncoder (w ).Encode (map [string ]any {
271
+ "Code" : "Success" ,
272
+ "AccessKeyID" : testMinioRootUser ,
273
+ "SecretAccessKey" : testMinioRootPassword ,
274
+ })
275
+ assert .NilError (t , err )
276
+ roleCredsRetrieved = true
277
+ })
278
+ stsServer := & http.Server {
279
+ Addr : stsAddr ,
280
+ Handler : stsHandler ,
281
+ }
282
+ go stsServer .Serve (stsListener )
283
+ defer stsServer .Shutdown (context .Background ())
284
+
285
+ // test FGetObject with STS endpoint
286
+ bucket := bucketStub (bucket , testMinioAddress )
287
+ bucket .Spec .STSEndpoint = fmt .Sprintf ("http://%s" , stsAddr )
288
+ minioClient , err := NewClient (bucket , WithTLSConfig (testTLSConfig ))
289
+ assert .NilError (t , err )
290
+ assert .Assert (t , minioClient != nil )
291
+ ctx := context .Background ()
292
+ tempDir := t .TempDir ()
293
+ path := filepath .Join (tempDir , sourceignore .IgnoreFile )
294
+ _ , err = minioClient .FGetObject (ctx , bucketName , objectName , path )
295
+ assert .NilError (t , err )
296
+ assert .Assert (t , roleCredsRetrieved )
297
+ }
298
+
247
299
func TestNewClientAndFGetObjectWithProxy (t * testing.T ) {
248
300
// start proxy
249
301
proxyListener , err := net .Listen ("tcp" , ":0" )
0 commit comments