public async Task BlobContainerSoftDelete()
        {
            //update storage account to v2
            PatchableStorageAccountData updateParameters = new PatchableStorageAccountData()
            {
                Kind = StorageKind.StorageV2
            };
            await _storageAccount.UpdateAsync(updateParameters);

            _blobService = await _blobService.GetAsync();

            BlobServiceData properties = _blobService.Data;

            //enable container softdelete
            properties.ContainerDeleteRetentionPolicy         = new DeleteRetentionPolicy();
            properties.ContainerDeleteRetentionPolicy.Enabled = true;
            properties.ContainerDeleteRetentionPolicy.Days    = 30;
            _blobService = (await _blobService.CreateOrUpdateAsync(WaitUntil.Completed, properties)).Value;

            //create two blob containers and delete 1
            string containerName1            = Recording.GenerateAssetName("testblob1");
            string containerName2            = Recording.GenerateAssetName("testblob2");
            BlobContainerResource container1 = (await _blobContainerCollection.CreateOrUpdateAsync(WaitUntil.Completed, containerName1, new BlobContainerData())).Value;
            BlobContainerResource container2 = (await _blobContainerCollection.CreateOrUpdateAsync(WaitUntil.Completed, containerName2, new BlobContainerData())).Value;
            await container2.DeleteAsync(WaitUntil.Completed);

            //list delete included
            List <BlobContainerResource> blobContainers = await _blobContainerCollection.GetAllAsync(include : ListContainersInclude.Deleted).ToEnumerableAsync();

            Assert.AreEqual(2, blobContainers.Count);
            foreach (BlobContainerResource con in blobContainers)
            {
                if (con.Data.Name == containerName1)
                {
                    Assert.IsFalse(con.Data.Deleted);
                }
                else
                {
                    Assert.IsTrue(con.Data.Deleted);
                    Assert.NotNull(con.Data.RemainingRetentionDays);
                }
            }
            //list without delete included
            blobContainers = await _blobContainerCollection.GetAllAsync().ToEnumerableAsync();

            Assert.AreEqual(1, blobContainers.Count);

            //disable container softdelete
            properties = _blobService.Data;
            properties.ContainerDeleteRetentionPolicy = new DeleteRetentionPolicy();
            properties.DeleteRetentionPolicy.Enabled  = false;
            _blobService = (await _blobService.CreateOrUpdateAsync(WaitUntil.Completed, properties)).Value;
            properties   = _blobService.Data;
            Assert.IsFalse(properties.ContainerDeleteRetentionPolicy.Enabled);
        }
        public async Task BlobContainersVLW()
        {
            //update storage account to v2
            PatchableStorageAccountData updateParameters = new PatchableStorageAccountData()
            {
                Kind = StorageKind.StorageV2
            };

            _storageAccount = await _storageAccount.UpdateAsync(updateParameters);

            _blobService = await _blobService.GetAsync();

            //enable blob versioning
            BlobServiceData properties = _blobService.Data;

            properties.IsVersioningEnabled = true;
            _blobService = (await _blobService.CreateOrUpdateAsync(WaitUntil.Completed, properties)).Value;
            Assert.IsTrue(properties.IsVersioningEnabled);

            //create container with VLW
            string            containerName1 = Recording.GenerateAssetName("testblob1");
            BlobContainerData parameters1    = new BlobContainerData()
            {
                ImmutableStorageWithVersioning = new ImmutableStorageWithVersioning()
                {
                    Enabled = true
                }
            };
            BlobContainerResource container1 = (await _blobContainerCollection.CreateOrUpdateAsync(WaitUntil.Completed, containerName1, parameters1)).Value;

            Assert.IsTrue(container1.Data.ImmutableStorageWithVersioning.Enabled);
            Assert.IsNull(container1.Data.ImmutableStorageWithVersioning.MigrationState);

            //update container to enabled  Immutability Policy
            string                containerName2 = Recording.GenerateAssetName("testblob2");
            BlobContainerData     parameters2    = new BlobContainerData();
            BlobContainerResource container2     = (await _blobContainerCollection.CreateOrUpdateAsync(WaitUntil.Completed, containerName2, parameters2)).Value;
            await container2.GetImmutabilityPolicy().CreateOrUpdateAsync(WaitUntil.Completed, data: new ImmutabilityPolicyData()
            {
                ImmutabilityPeriodSinceCreationInDays = 1
            });

            await container2.ObjectLevelWormAsync(WaitUntil.Completed);

            container2 = await container2.GetAsync();

            Assert.IsTrue(container2.Data.ImmutableStorageWithVersioning.Enabled);
            Assert.AreEqual("Completed", container2.Data.ImmutableStorageWithVersioning.MigrationState);
        }
예제 #3
0
        public async Task PITR()
        {
            //update storage account to v2
            StorageAccountPatch updateParameters = new StorageAccountPatch()
            {
                Kind = StorageKind.StorageV2
            };

            _storageAccount = await _storageAccount.UpdateAsync(updateParameters);

            _blobService = await _blobService.GetAsync();

            BlobServiceData properties = _blobService.Data;

            properties.DeleteRetentionPolicy         = new DeleteRetentionPolicy();
            properties.DeleteRetentionPolicy.Enabled = true;
            properties.DeleteRetentionPolicy.Days    = 30;
            properties.ChangeFeed          = new ChangeFeed();
            properties.ChangeFeed.Enabled  = true;
            properties.IsVersioningEnabled = true;
            properties.RestorePolicy       = new RestorePolicyProperties(true)
            {
                Days = 5
            };

            _blobService = (await _blobService.CreateOrUpdateAsync(WaitUntil.Completed, properties)).Value;

            if (Mode != RecordedTestMode.Playback)
            {
                await Task.Delay(10000);
            }

            //create restore ranges
            //start restore
            BlobRestoreContent restoreContent = new BlobRestoreContent(
                Recording.Now.AddSeconds(-1).ToUniversalTime(),
                new List <BlobRestoreRange>()
            {
                new BlobRestoreRange("", "container1/blob1"),
                new BlobRestoreRange("container1/blob2", "container2/blob3"),
                new BlobRestoreRange("container3/blob3", "")
            });
            ArmOperation <BlobRestoreStatus> restoreOperation = await _storageAccount.RestoreBlobRangesAsync(WaitUntil.Started, restoreContent);

            //wait for restore completion
            BlobRestoreStatus restoreStatus = await restoreOperation.WaitForCompletionAsync();

            Assert.IsTrue(restoreStatus.Status == BlobRestoreProgressStatus.Complete || restoreStatus.Status == BlobRestoreProgressStatus.InProgress);
        }
        public async Task UpdateBlobService()
        {
            //validate current file service properties
            Assert.False(_blobService.Data.DeleteRetentionPolicy.Enabled);
            Assert.Null(_blobService.Data.DeleteRetentionPolicy.Days);

            //update delete retention policy
            BlobServiceData serviceData = _blobService.Data;

            serviceData.DeleteRetentionPolicy = new DeleteRetentionPolicy
            {
                Enabled = true,
                Days    = 100
            };
            BlobServiceResource service = (await _blobService.CreateOrUpdateAsync(WaitUntil.Completed, serviceData)).Value;

            //validate update
            Assert.True(service.Data.DeleteRetentionPolicy.Enabled);
            Assert.AreEqual(service.Data.DeleteRetentionPolicy.Days, 100);
        }
        public async Task UpdateBlobService()
        {
            //validate current file service properties
            Assert.False(_blobService.Data.DeleteRetentionPolicy.Enabled);
            Assert.Null(_blobService.Data.DeleteRetentionPolicy.Days);

            //update delete retention policy
            BlobServiceData serviceData = _blobService.Data;

            serviceData.DeleteRetentionPolicy = new DeleteRetentionPolicy
            {
                Enabled = true,
                Days    = 100
            };
            BlobService service = await _blobService.SetServicePropertiesAsync(serviceData);

            //validate update
            Assert.True(service.Data.DeleteRetentionPolicy.Enabled);
            Assert.AreEqual(service.Data.DeleteRetentionPolicy.Days, 100);
        }
        internal static BlobServiceItems DeserializeBlobServiceItems(JsonElement element)
        {
            Optional <IReadOnlyList <BlobServiceData> > value = default;

            foreach (var property in element.EnumerateObject())
            {
                if (property.NameEquals("value"))
                {
                    if (property.Value.ValueKind == JsonValueKind.Null)
                    {
                        property.ThrowNonNullablePropertyIsNull();
                        continue;
                    }
                    List <BlobServiceData> array = new List <BlobServiceData>();
                    foreach (var item in property.Value.EnumerateArray())
                    {
                        array.Add(BlobServiceData.DeserializeBlobServiceData(item));
                    }
                    value = array;
                    continue;
                }
            }
            return(new BlobServiceItems(Optional.ToList(value)));
        }
        public async Task BlobServiceCors()
        {
            BlobServiceData properties2 = new BlobServiceData();

            properties2.DeleteRetentionPolicy         = new DeleteRetentionPolicy();
            properties2.DeleteRetentionPolicy.Enabled = true;
            properties2.DeleteRetentionPolicy.Days    = 300;
            properties2.DefaultServiceVersion         = "2017-04-17";
            properties2.Cors = new CorsRules();
            properties2.Cors.CorsRulesValue.Add(new CorsRule(new string[] { "http://www.contoso.com", "http://www.fabrikam.com" },
                                                             new CorsRuleAllowedMethodsItem[] { CorsRuleAllowedMethodsItem.GET, CorsRuleAllowedMethodsItem.PUT },
                                                             100, new string[] { "x-ms-meta-*" },
                                                             new string[] { "x-ms-meta-abc", "x-ms-meta-data*", "x-ms-meta-target*" }
                                                             ));
            properties2.Cors.CorsRulesValue.Add(new CorsRule(new string[] { "*" },
                                                             new CorsRuleAllowedMethodsItem[] { CorsRuleAllowedMethodsItem.GET },
                                                             2, new string[] { "*" },
                                                             new string[] { "*" }
                                                             ));
            properties2.Cors.CorsRulesValue.Add(new CorsRule(new string[] { "http://www.abc23.com", "https://www.fabrikam.com/*" },
                                                             new CorsRuleAllowedMethodsItem[] { CorsRuleAllowedMethodsItem.GET, CorsRuleAllowedMethodsItem.PUT, CorsRuleAllowedMethodsItem.Post },
                                                             2000, new string[] { "x-ms-meta-12345675754564*" },
                                                             new string[] { "x-ms-meta-abc", "x-ms-meta-data*", "x-ms-meta-target*" }
                                                             ));

            _blobService = (await _blobService.CreateOrUpdateAsync(WaitUntil.Completed, properties2)).Value;
            BlobServiceData properties3 = _blobService.Data;

            Assert.IsTrue(properties3.DeleteRetentionPolicy.Enabled);
            Assert.AreEqual(300, properties3.DeleteRetentionPolicy.Days);
            Assert.AreEqual("2017-04-17", properties3.DefaultServiceVersion);

            //validate CORS rules
            Assert.AreEqual(properties2.Cors.CorsRulesValue.Count, properties3.Cors.CorsRulesValue.Count);
            for (int i = 0; i < properties2.Cors.CorsRulesValue.Count; i++)
            {
                CorsRule putRule = properties2.Cors.CorsRulesValue[i];
                CorsRule getRule = properties3.Cors.CorsRulesValue[i];

                Assert.AreEqual(putRule.AllowedHeaders, getRule.AllowedHeaders);
                Assert.AreEqual(putRule.AllowedMethods, getRule.AllowedMethods);
                Assert.AreEqual(putRule.AllowedOrigins, getRule.AllowedOrigins);
                Assert.AreEqual(putRule.ExposedHeaders, getRule.ExposedHeaders);
                Assert.AreEqual(putRule.MaxAgeInSeconds, getRule.MaxAgeInSeconds);
            }

            _blobService = await _blobService.GetAsync();

            BlobServiceData properties4 = _blobService.Data;

            Assert.IsTrue(properties4.DeleteRetentionPolicy.Enabled);
            Assert.AreEqual(300, properties4.DeleteRetentionPolicy.Days);
            Assert.AreEqual("2017-04-17", properties4.DefaultServiceVersion);

            //validate CORS rules
            Assert.AreEqual(properties2.Cors.CorsRulesValue.Count, properties4.Cors.CorsRulesValue.Count);
            for (int i = 0; i < properties2.Cors.CorsRulesValue.Count; i++)
            {
                CorsRule putRule = properties2.Cors.CorsRulesValue[i];
                CorsRule getRule = properties4.Cors.CorsRulesValue[i];

                Assert.AreEqual(putRule.AllowedHeaders, getRule.AllowedHeaders);
                Assert.AreEqual(putRule.AllowedMethods, getRule.AllowedMethods);
                Assert.AreEqual(putRule.AllowedOrigins, getRule.AllowedOrigins);
                Assert.AreEqual(putRule.ExposedHeaders, getRule.ExposedHeaders);
                Assert.AreEqual(putRule.MaxAgeInSeconds, getRule.MaxAgeInSeconds);
            }
        }
예제 #8
0
        public async Task BlobServiceCors()
        {
            BlobServiceData blobServiceData = new BlobServiceData()
            {
                DeleteRetentionPolicy = new DeleteRetentionPolicy()
                {
                    Enabled = true,
                    Days    = 300,
                },
                DefaultServiceVersion = "2017-04-17",
                Cors = new CorsRules()
                {
                    CorsRulesValue =
                    {
                        new CorsRule(new[] { "http://www.contoso.com",       "http://www.fabrikam.com"       },
                                     new[] { CorsRuleAllowedMethodsItem.GET, CorsRuleAllowedMethodsItem.PUT  },
                                     100,
                                     new[] { "x-ms-meta-*" },
                                     new[] { "x-ms-meta-abc",                "x-ms-meta-data*", "x-ms-meta-target*"}),
                        new CorsRule(new[] { "*" },
                                     new[] { CorsRuleAllowedMethodsItem.GET },
                                     2,
                                     new[] { "*" },
                                     new[] { "*" }),
                        new CorsRule(new[] { "http://www.abc23.com",         "https://www.fabrikam.com/*"    },
                                     new[] { CorsRuleAllowedMethodsItem.GET, CorsRuleAllowedMethodsItem.PUT, CorsRuleAllowedMethodsItem.Post},
                                     2000,
                                     new[] { "x-ms-meta-12345675754564*" },
                                     new[] { "x-ms-meta-abc",                "x-ms-meta-data*", "x-ms-meta-target*"})
                    }
                }
            };

            _blobService = (await _blobService.CreateOrUpdateAsync(WaitUntil.Completed, blobServiceData)).Value;

            Assert.AreEqual(blobServiceData.DeleteRetentionPolicy.Enabled, _blobService.Data.DeleteRetentionPolicy.Enabled);
            Assert.AreEqual(blobServiceData.DeleteRetentionPolicy.Days, _blobService.Data.DeleteRetentionPolicy.Days);
            Assert.AreEqual(blobServiceData.DefaultServiceVersion, _blobService.Data.DefaultServiceVersion);

            //validate CORS rules
            Assert.AreEqual(blobServiceData.Cors.CorsRulesValue.Count, _blobService.Data.Cors.CorsRulesValue.Count);
            for (int i = 0; i < blobServiceData.Cors.CorsRulesValue.Count; i++)
            {
                CorsRule putRule = blobServiceData.Cors.CorsRulesValue[i];
                CorsRule getRule = _blobService.Data.Cors.CorsRulesValue[i];

                Assert.AreEqual(putRule.AllowedHeaders, getRule.AllowedHeaders);
                Assert.AreEqual(putRule.AllowedMethods, getRule.AllowedMethods);
                Assert.AreEqual(putRule.AllowedOrigins, getRule.AllowedOrigins);
                Assert.AreEqual(putRule.ExposedHeaders, getRule.ExposedHeaders);
                Assert.AreEqual(putRule.MaxAgeInSeconds, getRule.MaxAgeInSeconds);
            }

            _blobService = await _blobService.GetAsync();

            Assert.AreEqual(blobServiceData.DeleteRetentionPolicy.Enabled, _blobService.Data.DeleteRetentionPolicy.Enabled);
            Assert.AreEqual(blobServiceData.DeleteRetentionPolicy.Days, _blobService.Data.DeleteRetentionPolicy.Days);
            Assert.AreEqual(blobServiceData.DefaultServiceVersion, _blobService.Data.DefaultServiceVersion);

            //validate CORS rules
            Assert.AreEqual(blobServiceData.Cors.CorsRulesValue.Count, _blobService.Data.Cors.CorsRulesValue.Count);
            for (int i = 0; i < blobServiceData.Cors.CorsRulesValue.Count; i++)
            {
                CorsRule putRule = blobServiceData.Cors.CorsRulesValue[i];
                CorsRule getRule = _blobService.Data.Cors.CorsRulesValue[i];

                Assert.AreEqual(putRule.AllowedHeaders, getRule.AllowedHeaders);
                Assert.AreEqual(putRule.AllowedMethods, getRule.AllowedMethods);
                Assert.AreEqual(putRule.AllowedOrigins, getRule.AllowedOrigins);
                Assert.AreEqual(putRule.ExposedHeaders, getRule.ExposedHeaders);
                Assert.AreEqual(putRule.MaxAgeInSeconds, getRule.MaxAgeInSeconds);
            }
        }