private SimpleRetentionPolicy GetRandomSimpleRetentionPolicy()
        {
            SimpleRetentionPolicy simPolicy = new SimpleRetentionPolicy()
            {
                RetentionDuration = new RetentionDuration()
                {
                    DurationType = ConfigurationManager.AppSettings["AzureSqlPolicyRetentionType"],
                    Count        = int.Parse(ConfigurationManager.AppSettings["AzureSqlPolicyRetentionDuration"])
                }
            };

            return(simPolicy);
        }
        GetServiceClientSimpleRetentionPolicy(SimpleRetentionPolicy psRetPolicy)
        {
            if (psRetPolicy == null)
            {
                return(null);
            }
            else
            {
                ServiceClientModel.SimpleRetentionPolicy simpleRetPolicy =
                    new ServiceClientModel.SimpleRetentionPolicy();

                simpleRetPolicy.RetentionDuration = new ServiceClientModel.RetentionDuration();
                simpleRetPolicy.RetentionDuration.DurationType =
                    ServiceClientHelpers.GetServiceClientRetentionDurationType(psRetPolicy.RetentionDurationType);
                simpleRetPolicy.RetentionDuration.Count = psRetPolicy.RetentionCount;

                return(simpleRetPolicy);
            }
        }
        GetServiceClientSimpleRetentionPolicy(SimpleRetentionPolicy psRetPolicy)
        {
            if (psRetPolicy == null)
            {
                return(null);
            }
            else
            {
                ServiceClientModel.SimpleRetentionPolicy simpleRetPolicy =
                    new ServiceClientModel.SimpleRetentionPolicy();

                string durationType = psRetPolicy.RetentionDurationType.ToString();
                simpleRetPolicy.RetentionDuration = new ServiceClientModel.RetentionDuration();
                simpleRetPolicy.RetentionDuration.DurationType = durationType;
                simpleRetPolicy.RetentionDuration.Count        = psRetPolicy.RetentionCount;

                return(simpleRetPolicy);
            }
        }
        public static SimpleRetentionPolicy GetPSSimpleRetentionPolicy(
           ServiceClientModel.SimpleRetentionPolicy hydraRetPolicy)
        {
            if (hydraRetPolicy == null)
            {
                return null;
            }

            SimpleRetentionPolicy simplePolicy = new SimpleRetentionPolicy();

            if (hydraRetPolicy.RetentionDuration != null)
            {
                simplePolicy.RetentionDurationType = EnumUtils.GetEnum<RetentionDurationType>(
                    hydraRetPolicy.RetentionDuration.DurationType);
                simplePolicy.RetentionCount = hydraRetPolicy.RetentionDuration.Count;
            }

            simplePolicy.Validate();
            return simplePolicy;
        }
        public static SimpleRetentionPolicy GetPSSimpleRetentionPolicy(
            ServiceClientModel.SimpleRetentionPolicy hydraRetPolicy)
        {
            if (hydraRetPolicy == null)
            {
                return(null);
            }

            SimpleRetentionPolicy simplePolicy = new SimpleRetentionPolicy();

            if (hydraRetPolicy.RetentionDuration != null)
            {
                simplePolicy.RetentionDurationType = EnumUtils.GetEnum <RetentionDurationType>(
                    hydraRetPolicy.RetentionDuration.DurationType);
                simplePolicy.RetentionCount = hydraRetPolicy.RetentionDuration.Count;
            }

            simplePolicy.Validate();
            return(simplePolicy);
        }
        public static SimpleRetentionPolicy GetPSSimpleRetentionPolicy(
            ServiceClientModel.SimpleRetentionPolicy hydraRetPolicy, string timeZone)
        {
            if (hydraRetPolicy == null)
            {
                return(null);
            }

            SimpleRetentionPolicy simplePolicy = new SimpleRetentionPolicy();

            if (hydraRetPolicy.RetentionDuration != null)
            {
                simplePolicy.RetentionDurationType = EnumUtils.GetEnum <RetentionDurationType>(
                    hydraRetPolicy.RetentionDuration.DurationType.ToString());
                simplePolicy.RetentionCount = hydraRetPolicy.RetentionDuration.Count.HasValue ?
                                              (int)hydraRetPolicy.RetentionDuration.Count : default(int);
            }

            simplePolicy.Validate();
            return(simplePolicy);
        }
        public static SimpleRetentionPolicy GetPSSimpleRetentionPolicy(
            ServiceClientModel.SimpleRetentionPolicy hydraRetPolicy, string timeZone, string provider)
        {
            if (hydraRetPolicy == null)
            {
                return(null);
            }

            SimpleRetentionPolicy simplePolicy = new SimpleRetentionPolicy();

            if (hydraRetPolicy.RetentionDuration != null)
            {
                simplePolicy.RetentionDurationType = EnumUtils.GetEnum <RetentionDurationType>(
                    hydraRetPolicy.RetentionDuration.DurationType.ToString());
                simplePolicy.RetentionCount = hydraRetPolicy.RetentionDuration.Count.HasValue ?
                                              (int)hydraRetPolicy.RetentionDuration.Count : default(int);
            }

            if (string.Compare(provider, "AzureSql") == 0)
            {
                int weeklyLimit  = PolicyConstants.MaxAllowedRetentionDurationCountWeeklySql;
                int monthlyLimit = PolicyConstants.MaxAllowedRetentionDurationCountMonthlySql;
                int yearlyLimit  = PolicyConstants.MaxAllowedRetentionDurationCountYearlySql;

                if ((simplePolicy.RetentionDurationType == RetentionDurationType.Days) ||
                    (simplePolicy.RetentionDurationType == RetentionDurationType.Weeks &&
                     (simplePolicy.RetentionCount <= 0 || simplePolicy.RetentionCount > weeklyLimit)) ||
                    (simplePolicy.RetentionDurationType == RetentionDurationType.Months &&
                     (simplePolicy.RetentionCount <= 0 || simplePolicy.RetentionCount > monthlyLimit)) ||
                    (simplePolicy.RetentionDurationType == RetentionDurationType.Years &&
                     (simplePolicy.RetentionCount <= 0 || simplePolicy.RetentionCount > yearlyLimit)))
                {
                    throw new ArgumentException(Resources.AllowedSqlRetentionRange);
                }
            }

            return(simplePolicy);
        }
            GetServiceClientSimpleRetentionPolicy(SimpleRetentionPolicy psRetPolicy)
        {
            if (psRetPolicy == null)
            {
                return null;
            }
            else
            {
                ServiceClientModel.SimpleRetentionPolicy simpleRetPolicy = 
                    new ServiceClientModel.SimpleRetentionPolicy();

                string durationType = psRetPolicy.RetentionDurationType.ToString();
                simpleRetPolicy.RetentionDuration = new ServiceClientModel.RetentionDuration();
                simpleRetPolicy.RetentionDuration.DurationType = durationType;
                simpleRetPolicy.RetentionDuration.Count = psRetPolicy.RetentionCount;

                return simpleRetPolicy;
            }
        }
        public void PolicyCrudTest()
        {
            using (UndoContext context = UndoContext.Current)
            {
                context.Start();

                string resourceNamespace = ConfigurationManager.AppSettings["ResourceNamespace"];
                string rsVaultRgName     = CommonTestHelper.GetSetting(TestConstants.RsVaultRgName);
                string rsVaultName       = CommonTestHelper.GetSetting(TestConstants.RsVaultName);

                var client = GetServiceClient <RecoveryServicesBackupManagementClient>(resourceNamespace);
                PolicyTestHelpers policyTestHelper = new PolicyTestHelpers(client);
                string            policyName       = ConfigurationManager.AppSettings["AzureSqlPolicyName"];

                //create policy request
                SimpleRetentionPolicy retPolicy = new SimpleRetentionPolicy();
                retPolicy.RetentionDuration = new RetentionDuration()
                {
                    DurationType = "Weeks",
                    Count        = 6
                };

                AzureSqlProtectionPolicy sqlPolicy = new AzureSqlProtectionPolicy()
                {
                    RetentionPolicy = retPolicy
                };

                ProtectionPolicyRequest policyRequest = new ProtectionPolicyRequest()
                {
                    Item = new ProtectionPolicyResource()
                    {
                        Properties = sqlPolicy
                    }
                };

                //create policy
                ProtectionPolicyResponse response = policyTestHelper.AddOrUpdateProtectionPolicy(rsVaultRgName, rsVaultName, policyName, policyRequest);

                // get policy
                response = policyTestHelper.GetProtectionPolicy(rsVaultRgName, rsVaultName, policyName);
                Assert.NotNull(response.Item.Name);
                Assert.Equal(response.Item.Name, policyName);
                Assert.NotNull(response.Item.Id);
                Assert.NotNull(response.Item.Type);
                Assert.NotNull(response.Item.Properties);
                Assert.NotNull(response.Item.Properties as AzureSqlProtectionPolicy);
                AzureSqlProtectionPolicy resultPolicy   = response.Item.Properties as AzureSqlProtectionPolicy;
                SimpleRetentionPolicy    resultRetetion = resultPolicy.RetentionPolicy as SimpleRetentionPolicy;
                Assert.Equal(resultRetetion.RetentionDuration.DurationType, "Weeks");
                Assert.Equal(resultRetetion.RetentionDuration.Count, 6);

                //update policy request
                retPolicy.RetentionDuration = new RetentionDuration()
                {
                    DurationType = "Months",
                    Count        = 2
                };

                sqlPolicy = new AzureSqlProtectionPolicy()
                {
                    RetentionPolicy = retPolicy
                };

                policyRequest = new ProtectionPolicyRequest()
                {
                    Item = new ProtectionPolicyResource()
                    {
                        Properties = sqlPolicy
                    }
                };


                // update policy
                response = policyTestHelper.AddOrUpdateProtectionPolicy(rsVaultRgName, rsVaultName, policyName, policyRequest);
                // validations
                Assert.NotNull(response.Item.Name);
                Assert.Equal(response.Item.Name, policyName);
                Assert.NotNull(response.Item.Id);
                Assert.NotNull(response.Item.Type);
                Assert.NotNull(response.Item.Properties);
                Assert.NotNull(response.Item.Properties as AzureSqlProtectionPolicy);
                resultPolicy   = response.Item.Properties as AzureSqlProtectionPolicy;
                resultRetetion = resultPolicy.RetentionPolicy as SimpleRetentionPolicy;
                Assert.Equal(resultRetetion.RetentionDuration.DurationType, "Months");
                Assert.Equal(resultRetetion.RetentionDuration.Count, 2);


                // delete the policy
                AzureOperationResponse deleteResponse = policyTestHelper.DeleteProtectionPolicy(rsVaultRgName, rsVaultName, policyName);
                Assert.Equal(deleteResponse.StatusCode, HttpStatusCode.OK);
            }
        }