public async Task CommitBlocksAsync(string blobName, FileMetadata metadata) { var client = CreateBlockClient(blobName); var blockList = await client.GetBlockListAsync(); var blobBlockIds = blockList.Value.UncommittedBlocks.Select(item => item.Name); var commitOptions = new CommitBlockListOptions { Metadata = metadata.ToStorageMetadata() }; var result = client.CommitBlockListAsync(OrderBlobBlockIds(blobBlockIds), commitOptions); await result; }
public async Task CommitBlockList_ImmutableStorageWithVersioning() { // Arrange await using DisposingImmutableStorageWithVersioningContainer vlwContainer = await GetTestVersionLevelWormContainer(TestConfigOAuth); BlockBlobClient blockBlob = InstrumentClient(vlwContainer.Container.GetBlockBlobClient(GetNewBlobName())); byte[] data = GetRandomBuffer(Constants.KB); string blockName = GetNewBlockName(); using Stream stream = new MemoryStream(data); await blockBlob.StageBlockAsync(ToBase64(blockName), stream); string[] blockList = new string[] { ToBase64(blockName) }; BlobImmutabilityPolicy immutabilityPolicy = new BlobImmutabilityPolicy { ExpiresOn = Recording.UtcNow.AddMinutes(5), PolicyMode = BlobImmutabilityPolicyMode.Unlocked }; // The service rounds Immutability Policy Expiry to the nearest second. DateTimeOffset expectedImmutabilityPolicyExpiry = RoundToNearestSecond(immutabilityPolicy.ExpiresOn.Value); CommitBlockListOptions options = new CommitBlockListOptions { ImmutabilityPolicy = immutabilityPolicy, LegalHold = true }; // Act await blockBlob.CommitBlockListAsync(blockList, options); // Assert Response <BlobProperties> propertiesResponse = await blockBlob.GetPropertiesAsync(); Assert.AreEqual(expectedImmutabilityPolicyExpiry, propertiesResponse.Value.ImmutabilityPolicy.ExpiresOn); Assert.AreEqual(immutabilityPolicy.PolicyMode, propertiesResponse.Value.ImmutabilityPolicy.PolicyMode); Assert.IsTrue(propertiesResponse.Value.HasLegalHold); }