Пример #1
0
        public async Task CloudBlobClientListContainersWithPublicAccessAsync()
        {
            string             name       = GetRandomContainerName();
            CloudBlobClient    blobClient = GenerateCloudBlobClient();
            CloudBlobContainer container  = blobClient.GetContainerReference(name);

            try
            {
                await container.CreateAsync();

                BlobContainerPublicAccessType[] accessValues = { BlobContainerPublicAccessType.Container, BlobContainerPublicAccessType.Off, BlobContainerPublicAccessType.Blob };
                BlobContainerPermissions        permissions  = new BlobContainerPermissions();
                foreach (BlobContainerPublicAccessType access in accessValues)
                {
                    permissions.PublicAccess = access;
                    await container.SetPermissionsAsync(permissions);

                    Assert.AreEqual(access, container.Properties.PublicAccess);

                    CloudBlobContainer container2 = blobClient.GetContainerReference(name);
                    Assert.IsFalse(container2.Properties.PublicAccess.HasValue);
                    await container2.FetchAttributesAsync();

                    Assert.AreEqual(access, container2.Properties.PublicAccess);

                    CloudBlobContainer       container3      = blobClient.GetContainerReference(name);
                    BlobContainerPermissions containerAccess = await container3.GetPermissionsAsync();

                    Assert.AreEqual(access, containerAccess.PublicAccess);
                    Assert.AreEqual(access, container3.Properties.PublicAccess);

                    List <CloudBlobContainer> listedContainers = new List <CloudBlobContainer>();
                    BlobContinuationToken     token            = null;
                    do
                    {
                        ContainerResultSegment resultSegment = await blobClient.ListContainersSegmentedAsync(name, token);

                        foreach (CloudBlobContainer returnedContainer in resultSegment.Results)
                        {
                            listedContainers.Add(returnedContainer);
                        }
                        token = resultSegment.ContinuationToken;
                    }while (token != null);

                    Assert.AreEqual(1, listedContainers.Count());
                    Assert.AreEqual(access, listedContainers.First().Properties.PublicAccess);
                }
            }
            finally
            {
                container.DeleteAsync().GetAwaiter().GetResult();
            }
        }
Пример #2
0
        public async Task CloudBlobContainerSetPermissionsAsync()
        {
            CloudBlobContainer container = GetRandomContainerReference();

            try
            {
                await container.CreateAsync();

                BlobContainerPermissions permissions = await container.GetPermissionsAsync();

                Assert.AreEqual(BlobContainerPublicAccessType.Off, permissions.PublicAccess);
                Assert.AreEqual(0, permissions.SharedAccessPolicies.Count);

                // We do not have precision at milliseconds level. Hence, we need
                // to recreate the start DateTime to be able to compare it later.
                DateTime start = DateTime.UtcNow;
                start = new DateTime(start.Year, start.Month, start.Day, start.Hour, start.Minute, start.Second, DateTimeKind.Utc);
                DateTime expiry = start.AddMinutes(30);

                permissions.PublicAccess = BlobContainerPublicAccessType.Container;
                permissions.SharedAccessPolicies.Add("key1", new SharedAccessBlobPolicy()
                {
                    SharedAccessStartTime  = start,
                    SharedAccessExpiryTime = expiry,
                    Permissions            = SharedAccessBlobPermissions.List,
                });
                await container.SetPermissionsAsync(permissions);

                await Task.Delay(30 * 1000);

                CloudBlobContainer container2 = container.ServiceClient.GetContainerReference(container.Name);
                permissions = await container2.GetPermissionsAsync();

                Assert.AreEqual(BlobContainerPublicAccessType.Container, permissions.PublicAccess);
                Assert.AreEqual(1, permissions.SharedAccessPolicies.Count);
                Assert.IsTrue(permissions.SharedAccessPolicies["key1"].SharedAccessStartTime.HasValue);
                Assert.AreEqual(start, permissions.SharedAccessPolicies["key1"].SharedAccessStartTime.Value.UtcDateTime);
                Assert.IsTrue(permissions.SharedAccessPolicies["key1"].SharedAccessExpiryTime.HasValue);
                Assert.AreEqual(expiry, permissions.SharedAccessPolicies["key1"].SharedAccessExpiryTime.Value.UtcDateTime);
                Assert.AreEqual(SharedAccessBlobPermissions.List, permissions.SharedAccessPolicies["key1"].Permissions);
            }
            finally
            {
                container.DeleteIfExistsAsync().Wait();
            }
        }
Пример #3
0
        public async Task CloudBlockBlobPutBlockFromUrlCPKTask()
        {
            // Arrange
            CloudBlobContainer container = GetRandomContainerReference();
            await container.CreateAsync();

            var containerPermissions = await container.GetPermissionsAsync();

            containerPermissions.PublicAccess = BlobContainerPublicAccessType.Container;
            await container.SetPermissionsAsync(containerPermissions);

            var customerProvidedKey = BuildCustomerProvidedKey();
            var options             = new BlobRequestOptions
            {
                CustomerProvidedKey = customerProvidedKey
            };

            var sourceBlockBlob = container.GetBlockBlobReference(GetRandomBlobName());
            var destBlockBlob   = container.GetBlockBlobReference(GetRandomBlobName());

            try
            {
                byte[] buffer = GetRandomBuffer(1024);
                using (MemoryStream sourceStream = new MemoryStream(buffer))
                {
                    await sourceBlockBlob.UploadFromStreamAsync(sourceStream, null, null, null);
                }

                using (MemoryStream sourceStream = new MemoryStream(buffer))
                {
                    var context = new OperationContext();

                    // Act
                    await destBlockBlob.PutBlockAsync(GetBlockId(), sourceBlockBlob.Uri, 0, 1024, null, null, options, context);

                    // Assert
                    Assert.IsTrue(context.RequestResults.First().IsRequestServerEncrypted);
                    Assert.AreEqual(options.CustomerProvidedKey.KeySHA256, context.RequestResults.First().EncryptionKeySHA256);
                }
            }
            finally
            {
                await container.DeleteAsync();
            }
        }
        public async Task CloudBlockBlobPutBlockFromUrlEncryptionScopeTask()
        {
            // Arrange
            CloudBlobContainer container = GetRandomContainerReference();
            await container.CreateAsync();

            var containerPermissions = await container.GetPermissionsAsync();

            containerPermissions.PublicAccess = BlobContainerPublicAccessType.Container;
            await container.SetPermissionsAsync(containerPermissions);

            var encryptionScope = TestBase.TargetTenantConfig.EncryptionScope;
            var options         = new BlobRequestOptions
            {
                EncryptionScope = encryptionScope
            };

            var sourceBlockBlob = container.GetBlockBlobReference(GetRandomBlobName());
            var destBlockBlob   = container.GetBlockBlobReference(GetRandomBlobName());

            try
            {
                byte[] buffer = GetRandomBuffer(1024);
                using (MemoryStream sourceStream = new MemoryStream(buffer))
                {
                    await sourceBlockBlob.UploadFromStreamAsync(sourceStream, null, null, null);
                }

                using (MemoryStream sourceStream = new MemoryStream(buffer))
                {
                    var context = new OperationContext();

                    // Act
                    await destBlockBlob.PutBlockAsync(GetBlockId(), sourceBlockBlob.Uri, 0, 1024, null, null, options, context);

                    // Assert
                    Assert.AreEqual(options.EncryptionScope, context.RequestResults.First().EncryptionScope);
                }
            }
            finally
            {
                await container.DeleteAsync();
            }
        }