Skip to content

Commit

Permalink
Port fix to folders, add testing for folder and symlink
Browse files Browse the repository at this point in the history
  • Loading branch information
adreed-msft committed Oct 21, 2024
1 parent 64a3d00 commit ce138ac
Show file tree
Hide file tree
Showing 2 changed files with 46 additions and 12 deletions.
38 changes: 28 additions & 10 deletions e2etest/zt_newe2e_basic_functionality_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -413,20 +413,35 @@ func (s *BasicFunctionalitySuite) Scenario_Copy_EmptySASErrorCodes(svm *Scenario
}

func (s *BasicFunctionalitySuite) Scenario_TagsPermission(svm *ScenarioVariationManager) {
objectType := ResolveVariation(svm, []common.EntityType{common.EEntityType.File(), common.EEntityType.Folder(), common.EEntityType.Symlink()})
srcLoc := ResolveVariation(svm, []common.Location{common.ELocation.Local(), common.ELocation.Blob()})

srcObj := CreateResource[ObjectResourceManager](svm, GetRootResource(svm, ResolveVariation(svm, []common.Location{common.ELocation.Local(), common.ELocation.Blob()})), ResourceDefinitionObject{
Body: NewZeroObjectContentContainer(1024 * 1024 * 5),
// Local resource manager doesn't have symlink abilities yet, and the same codepath is hit.
if objectType == common.EEntityType.Symlink() && srcLoc == common.ELocation.Local() {
svm.InvalidateScenario()
return
}

srcObj := CreateResource[ObjectResourceManager](svm, GetRootResource(svm, srcLoc), ResourceDefinitionObject{
Body: common.Iff(objectType == common.EEntityType.File(), NewZeroObjectContentContainer(1024*1024*5), nil),
ObjectProperties: ObjectProperties{
EntityType: objectType,
},
})
dstCt := CreateResource[ContainerResourceManager](svm, GetRootResource(svm, common.ELocation.Blob()), ResourceDefinitionContainer{})

svm.InsertVariationSeparator("Blob-")

blobType := ResolveVariation(svm, []common.BlobType{common.EBlobType.BlockBlob(), common.EBlobType.PageBlob(), common.EBlobType.AppendBlob()})
svm.InsertVariationSeparator("Blob")

multiBlock := "single"
if blobType == common.EBlobType.BlockBlob() {
multiBlock := "single-block"
var blobType common.BlobType
if objectType == common.EEntityType.File() {
svm.InsertVariationSeparator("-")
multiBlock = ResolveVariation(svm, []string{"single-block", "multi-block"})
blobType = ResolveVariation(svm, []common.BlobType{common.EBlobType.BlockBlob(), common.EBlobType.PageBlob(), common.EBlobType.AppendBlob()})

if blobType == common.EBlobType.BlockBlob() {
svm.InsertVariationSeparator("-")
multiBlock = ResolveVariation(svm, []string{"single-block", "multi-block"})
}
}

stdOut, _ := RunAzCopy(
Expand Down Expand Up @@ -454,11 +469,14 @@ func (s *BasicFunctionalitySuite) Scenario_TagsPermission(svm *ScenarioVariation
"alpha": PtrOf("beta"),
},
CopySyncCommonFlags: CopySyncCommonFlags{
BlockSizeMB: common.Iff(multiBlock != "single-block",
BlockSizeMB: common.Iff(objectType == common.EEntityType.File() && multiBlock != "single-block",
PtrOf(0.5),
nil),
Recursive: pointerTo(true),
IncludeDirectoryStubs: pointerTo(true),
},
BlobType: &blobType,
BlobType: &blobType,
PreserveSymlinks: pointerTo(true),
},
ShouldFail: true,
},
Expand Down
20 changes: 18 additions & 2 deletions ste/sender-blobFolders.go
Original file line number Diff line number Diff line change
Expand Up @@ -199,17 +199,33 @@ func (b *blobFolderSender) EnsureFolderExists() error {
}

err = t.CreateFolder(b.DirUrlToString(), func() error {
blobTags := b.blobTagsToApply
setTags := separateSetTagsRequired(blobTags)
if setTags || len(blobTags) == 0 {
blobTags = nil
}

// It doesn't make sense to use a special access tier for a blob folder, the blob will be 0 bytes.
_, err := b.destinationClient.Upload(b.jptm.Context(), streaming.NopCloser(bytes.NewReader(nil)),
&blockblob.UploadOptions{
HTTPHeaders: &b.headersToApply,
Metadata: b.metadataToApply,
Tags: b.blobTagsToApply,
Tags: blobTags,
CPKInfo: b.jptm.CpkInfo(),
CPKScopeInfo: b.jptm.CpkScopeInfo(),
})
if err != nil {
b.jptm.FailActiveSend(common.Iff(len(blobTags) > 0, "Upload symlink (with tags)", "Upload symlink"), err)
}

return err
if setTags {
if _, err := b.destinationClient.SetTags(b.jptm.Context(), b.blobTagsToApply, nil); err != nil {
b.jptm.FailActiveSend("Set tags", err)
return nil
}
}

return nil
})

if err != nil {
Expand Down

0 comments on commit ce138ac

Please sign in to comment.