public async Task BlobIdentitySas_AllPermissions() { // Arrange BlobServiceClient oauthService = BlobsClientBuilder.GetServiceClient_OAuth(); string containerName = GetNewContainerName(); string blobName = GetNewBlobName(); await using DisposingContainer test = await GetTestContainerAsync(containerName : containerName, service : oauthService); Response <UserDelegationKey> userDelegationKey = await oauthService.GetUserDelegationKeyAsync( startsOn : null, expiresOn : Recording.UtcNow.AddHours(1)); BlobSasBuilder blobSasBuilder = new BlobSasBuilder( permissions: BlobSasPermissions.All, expiresOn: Recording.UtcNow.AddDays(1)) { BlobContainerName = test.Container.Name, BlobName = blobName }; BlobUriBuilder blobUriBuilder = new BlobUriBuilder(test.Container.Uri) { BlobName = blobName, Sas = blobSasBuilder.ToSasQueryParameters(userDelegationKey.Value, oauthService.AccountName) }; // Act AppendBlobClient appendBlobClient = InstrumentClient(new AppendBlobClient(blobUriBuilder.ToUri(), GetOptions())); await appendBlobClient.CreateAsync(); }
public async Task SetImmutibilityPolicyAsync_SetLegalHold_BlobSas(BlobSasPermissions sasPermissions) { // Arrange BlobBaseClient blob = await GetNewBlobClient(_containerClient, GetNewBlobName()); BlobBaseClient sharedKeyBlob = InstrumentClient( BlobsClientBuilder.GetServiceClient_OAuthAccount_SharedKey() .GetBlobContainerClient(_containerClient.Name) .GetBlobBaseClient(blob.Name)); Uri blobSasUri = sharedKeyBlob.GenerateSasUri(sasPermissions, Recording.UtcNow.AddDays(1)); BlobBaseClient sasBlobClient = InstrumentClient(new BlobBaseClient(blobSasUri, GetOptions())); 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); // Act Response <BlobImmutabilityPolicy> response = await sasBlobClient.SetImmutabilityPolicyAsync( immutabilityPolicy : immutabilityPolicy); // Assert Assert.AreEqual(expectedImmutabilityPolicyExpiry, response.Value.ExpiresOn); Assert.AreEqual(immutabilityPolicy.PolicyMode, response.Value.PolicyMode); // Act Response <BlobLegalHoldResult> legalHoldResponse = await sasBlobClient.SetLegalHoldAsync(hasLegalHold : false); // Assert Assert.IsFalse(legalHoldResponse.Value.HasLegalHold); }
[TestCase(256 * Constants.KB)] // multi-report case public async Task DownloadStreaming(int size) { await using DisposingContainer test = await BlobsClientBuilder.GetTestContainerAsync(); // Arrange var data = GetRandomBuffer(size); TestProgress progress = new TestProgress(); var client = test.Container.GetBlobClient(BlobsClientBuilder.GetNewBlobName()); await client.UploadAsync(BinaryData.FromBytes(data)); // Act var result = await client.DownloadStreamingAsync( progressHandler : progress); var downloadedData = new byte[result.Value.Details.ContentLength]; using (Stream ms = new MemoryStream(downloadedData)) { await result.Value.Content.CopyToAsync(ms); } // Assert Assert.AreNotEqual(0, progress.List.Count); Assert.AreEqual(size, progress.List.Max()); }
[TestCase(Constants.MB, 100 * Constants.KB, 10)] // multi-report per-partition case public async Task DownloadTo(int dataLength, int?partitionSize, int?parallelism) { await using DisposingContainer test = await BlobsClientBuilder.GetTestContainerAsync(); // Arrange var data = GetRandomBuffer(dataLength); TestProgress progress = new TestProgress(); var client = test.Container.GetBlobClient(BlobsClientBuilder.GetNewBlobName()); await client.UploadAsync(BinaryData.FromBytes(data)); // Act var downloadedData = new MemoryStream(); await client.DownloadToAsync(downloadedData, new BlobDownloadToOptions { ProgressHandler = progress, TransferOptions = new StorageTransferOptions { InitialTransferSize = partitionSize, MaximumTransferSize = partitionSize, MaximumConcurrency = parallelism } }); // Assert Assert.AreNotEqual(0, progress.List.Count); Assert.AreEqual(downloadedData.Length, progress.List.Max()); Assert.AreEqual(data.Length, downloadedData.Length); Assert.IsTrue(Enumerable.SequenceEqual(data, downloadedData.ToArray())); }
public async Task DownloadStreamingRange(int offset, int length) { await using DisposingContainer test = await BlobsClientBuilder.GetTestContainerAsync(); // Arrange const int size = 8 * Constants.KB; var data = GetRandomBuffer(size); TestProgress progress = new TestProgress(); var client = test.Container.GetBlobClient(BlobsClientBuilder.GetNewBlobName()); await client.UploadAsync(BinaryData.FromBytes(data)); // Act var result = await client.DownloadStreamingAsync( progressHandler : progress, range : new HttpRange(offset, length)); var downloadedData = new byte[result.Value.Details.ContentLength]; using (Stream ms = new MemoryStream(downloadedData)) { await result.Value.Content.CopyToAsync(ms); } // Assert Assert.AreNotEqual(0, progress.List.Count); Assert.AreEqual(length, progress.List.Max()); Assert.IsTrue(new ReadOnlySpan <byte>(data, offset, length).SequenceEqual(downloadedData)); }
[TestCase(256 * Constants.KB)] // multi-report case public async Task DownloadContent(int size) { await using DisposingContainer test = await BlobsClientBuilder.GetTestContainerAsync(); // Arrange var data = GetRandomBuffer(size); TestProgress progress = new TestProgress(); var client = test.Container.GetBlobClient(BlobsClientBuilder.GetNewBlobName()); await client.UploadAsync(BinaryData.FromBytes(data)); // Act var result = await client.DownloadContentAsync(progressHandler : progress); // Assert Assert.AreNotEqual(0, progress.List.Count); Assert.AreEqual(size, progress.List.Max()); Assert.IsTrue(Enumerable.SequenceEqual(data, result.Value.Content.ToArray())); }
public async Task BlobVersionIdentitySas_AllPermissions() { // Arrange BlobServiceClient oauthService = BlobsClientBuilder.GetServiceClient_OAuth(); string containerName = GetNewContainerName(); string blobName = GetNewBlobName(); await using DisposingContainer test = await GetTestContainerAsync(containerName : containerName, service : oauthService); Response <UserDelegationKey> userDelegationKey = await oauthService.GetUserDelegationKeyAsync( startsOn : null, expiresOn : Recording.UtcNow.AddHours(1)); AppendBlobClient blob = InstrumentClient(test.Container.GetAppendBlobClient(blobName)); Response <BlobContentInfo> createResponse = await blob.CreateAsync(); IDictionary <string, string> metadata = BuildMetadata(); Response <BlobInfo> metadataResponse = await blob.SetMetadataAsync(metadata); BlobSasBuilder blobSasBuilder = new BlobSasBuilder() { ExpiresOn = Recording.UtcNow.AddDays(1), BlobContainerName = test.Container.Name, BlobName = blobName, BlobVersionId = createResponse.Value.VersionId }; blobSasBuilder.SetPermissions(BlobVersionSasPermissions.All); BlobUriBuilder blobUriBuilder = new BlobUriBuilder(blob.Uri) { VersionId = createResponse.Value.VersionId, Sas = blobSasBuilder.ToSasQueryParameters(userDelegationKey.Value, oauthService.AccountName) }; // Act AppendBlobClient sasBlobClient = InstrumentClient(new AppendBlobClient(blobUriBuilder.ToUri(), GetOptions())); await sasBlobClient.DeleteAsync(); }
public async Task BlobSnapshotIdentitySas_AllPermissions() { // Arrange BlobServiceClient oauthService = BlobsClientBuilder.GetServiceClient_OAuth(); string containerName = GetNewContainerName(); string blobName = GetNewBlobName(); await using DisposingContainer test = await GetTestContainerAsync(containerName : containerName, service : oauthService); Response <UserDelegationKey> userDelegationKey = await oauthService.GetUserDelegationKeyAsync( startsOn : null, expiresOn : Recording.UtcNow.AddHours(1)); AppendBlobClient blob = InstrumentClient(test.Container.GetAppendBlobClient(blobName)); await blob.CreateAsync(); Response <BlobSnapshotInfo> snapshotResponse = await blob.CreateSnapshotAsync(); BlobSasBuilder blobSasBuilder = new BlobSasBuilder() { ExpiresOn = Recording.UtcNow.AddDays(1), BlobContainerName = test.Container.Name, BlobName = blobName, Snapshot = snapshotResponse.Value.Snapshot }; blobSasBuilder.SetPermissions(SnapshotSasPermissions.All); BlobUriBuilder blobUriBuilder = new BlobUriBuilder(blob.Uri) { Snapshot = snapshotResponse.Value.Snapshot, Sas = blobSasBuilder.ToSasQueryParameters(userDelegationKey.Value, oauthService.AccountName) }; // Act AppendBlobClient sasBlobClient = InstrumentClient(new AppendBlobClient(blobUriBuilder.ToUri(), GetOptions())); await sasBlobClient.GetPropertiesAsync(); }
public async Task DownloadContentRange(int offset, int length) { await using DisposingContainer test = await BlobsClientBuilder.GetTestContainerAsync(); // Arrange const int size = 8 * Constants.KB; var data = GetRandomBuffer(size); TestProgress progress = new TestProgress(); var client = test.Container.GetBlobClient(BlobsClientBuilder.GetNewBlobName()); await client.UploadAsync(BinaryData.FromBytes(data)); // Act var result = await client.DownloadContentAsync(new BlobDownloadOptions { ProgressHandler = progress, Range = new HttpRange(offset, length) }); // Assert Assert.AreNotEqual(0, progress.List.Count); Assert.AreEqual(length, progress.List.Max()); Assert.IsTrue(new ReadOnlySpan <byte>(data, offset, length).SequenceEqual(result.Value.Content.ToArray())); }
public async Task BlobSasBuilder_PreauthorizedAgentObjectId() { // Arrange BlobServiceClient oauthService = BlobsClientBuilder.GetServiceClient_OAuth(); string containerName = GetNewContainerName(); string preauthorizedAgentGuid = Recording.Random.NewGuid().ToString(); await using DisposingContainer test = await GetTestContainerAsync(service : oauthService, containerName : containerName); // Arrange Response <UserDelegationKey> userDelegationKey = await oauthService.GetUserDelegationKeyAsync( startsOn : null, expiresOn : Recording.UtcNow.AddHours(1)); BlobSasBuilder BlobSasBuilder = new BlobSasBuilder { StartsOn = Recording.UtcNow.AddHours(-1), ExpiresOn = Recording.UtcNow.AddHours(1), BlobContainerName = containerName, PreauthorizedAgentObjectId = preauthorizedAgentGuid }; BlobSasBuilder.SetPermissions(BlobSasPermissions.All); BlobUriBuilder BlobUriBuilder = new BlobUriBuilder(test.Container.Uri) { Sas = BlobSasBuilder.ToSasQueryParameters(userDelegationKey, test.Container.AccountName) }; BlobContainerClient containerClient = InstrumentClient(new BlobContainerClient(BlobUriBuilder.ToUri(), GetOptions())); // Act BlobClient blobClient = containerClient.GetBlobClient(GetNewBlobName()); await blobClient.UploadAsync(new MemoryStream()); await blobClient.ExistsAsync(); }
public async Task BlobSasBuilder_CorrelationId() { // Arrange BlobServiceClient oauthService = BlobsClientBuilder.GetServiceClient_OAuth(); string containerName = GetNewContainerName(); await using DisposingContainer test = await GetTestContainerAsync(service : oauthService, containerName : containerName); // Arrange Response <UserDelegationKey> userDelegationKey = await oauthService.GetUserDelegationKeyAsync( startsOn : null, expiresOn : Recording.UtcNow.AddHours(1)); BlobSasBuilder blobSasBuilder = new BlobSasBuilder { StartsOn = Recording.UtcNow.AddHours(-1), ExpiresOn = Recording.UtcNow.AddHours(1), BlobContainerName = containerName, CorrelationId = Recording.Random.NewGuid().ToString() }; blobSasBuilder.SetPermissions(BlobSasPermissions.All); BlobUriBuilder blobUriBuilder = new BlobUriBuilder(test.Container.Uri) { Sas = blobSasBuilder.ToSasQueryParameters(userDelegationKey, test.Container.AccountName) }; BlobContainerClient containerClient = InstrumentClient(new BlobContainerClient(blobUriBuilder.ToUri(), GetOptions())); // Act await foreach (BlobItem pathItem in containerClient.GetBlobsAsync()) { // Just make sure the call succeeds. } }
public void SetUp() { _containerName = Recording.GetVariable(nameof(_containerName), _containerName); _containerClient = BlobsClientBuilder.GetServiceClient_OAuthAccount_SharedKey().GetBlobContainerClient(_containerName); }