@@ -470,6 +470,87 @@ func Test_sasTokenFromSecret(t *testing.T) {
470470 }
471471}
472472
473+ func TestBlobClient_VisitObjects_Prefix (t * testing.T ) {
474+ bucketName := "test-bucket"
475+
476+ tests := []struct {
477+ name string
478+ prefix string
479+ }{
480+ {
481+ name : "with prefix" ,
482+ prefix : "subfolder/" ,
483+ },
484+ {
485+ name : "without prefix" ,
486+ prefix : "" ,
487+ },
488+ }
489+
490+ for _ , tt := range tests {
491+ t .Run (tt .name , func (t * testing.T ) {
492+ g := NewWithT (t )
493+
494+ // start mock bucket server
495+ bucketListener , bucketAddr , _ := testlistener .New (t )
496+ bucketEndpoint := fmt .Sprintf ("http://%s" , bucketAddr )
497+ bucketHandler := http .NewServeMux ()
498+ bucketHandler .HandleFunc (fmt .Sprintf ("GET /%s" , bucketName ), func (w http.ResponseWriter , r * http.Request ) {
499+ q := r .URL .Query ()
500+ g .Expect (q .Get ("comp" )).To (Equal ("list" ))
501+ g .Expect (q .Get ("restype" )).To (Equal ("container" ))
502+
503+ // Assert the prefix query parameter.
504+ if tt .prefix != "" {
505+ g .Expect (q .Get ("prefix" )).To (Equal (tt .prefix ))
506+ } else {
507+ g .Expect (q .Has ("prefix" )).To (BeFalse (), "prefix query parameter should not be set when prefix is empty" )
508+ }
509+
510+ resp := fmt .Sprintf (`<?xml version="1.0" encoding="utf-8"?>
511+ <EnumerationResults ContainerName="%s/%s">
512+ <Blobs>
513+ <Blob>
514+ <Name>%sfile.txt</Name>
515+ <Properties>
516+ <Etag>0x8D9B2A2A2A2A2A2</Etag>
517+ </Properties>
518+ </Blob>
519+ </Blobs>
520+ <NextMarker />
521+ </EnumerationResults>` , bucketEndpoint , bucketName , tt .prefix )
522+ _ , err := w .Write ([]byte (resp ))
523+ g .Expect (err ).ToNot (HaveOccurred ())
524+ })
525+ bucketServer := & http.Server {
526+ Addr : bucketAddr ,
527+ Handler : bucketHandler ,
528+ }
529+ go bucketServer .Serve (bucketListener )
530+ defer bucketServer .Shutdown (context .Background ())
531+
532+ bucket := & sourcev1.Bucket {
533+ Spec : sourcev1.BucketSpec {
534+ Endpoint : bucketEndpoint ,
535+ },
536+ }
537+ client , err := NewClient (t .Context (),
538+ bucket ,
539+ withoutCredentials (),
540+ withoutRetries ())
541+ g .Expect (err ).ToNot (HaveOccurred ())
542+
543+ var visited []string
544+ err = client .VisitObjects (t .Context (), bucketName , tt .prefix , func (path , etag string ) error {
545+ visited = append (visited , path )
546+ return nil
547+ })
548+ g .Expect (err ).ToNot (HaveOccurred ())
549+ g .Expect (visited ).To (Equal ([]string {tt .prefix + "file.txt" }))
550+ })
551+ }
552+ }
553+
473554func Test_chainCredentialWithSecret (t * testing.T ) {
474555 g := NewWithT (t )
475556
0 commit comments