コード例 #1
0
        public void KeepReplicationShouldSetToDefaultValueGivenRecoveryStateWithNoRecovery()
        {
            RestoreParams restoreParams = CreateOptionsTestData();

            restoreParams.Options[RestoreOptionsHelper.RecoveryState] = DatabaseRecoveryState.WithNoRecovery;

            IRestoreDatabaseTaskDataObject             restoreDatabaseTaskDataObject = CreateRestoreDatabaseTaskDataObject(restoreParams);
            Dictionary <string, RestorePlanDetailInfo> options = RestoreOptionsHelper.CreateRestorePlanOptions(restoreDatabaseTaskDataObject);

            restoreParams.Options[RestoreOptionsHelper.KeepReplication] = true;

            RestoreOptionsHelper.UpdateOptionsInPlan(restoreDatabaseTaskDataObject);
            bool actual   = restoreDatabaseTaskDataObject.RestoreOptions.KeepReplication;
            bool expected = (bool)options[RestoreOptionsHelper.KeepReplication].DefaultValue;

            Assert.Equal(actual, expected);
        }
コード例 #2
0
        public void DataFileFolderShouldBeReadOnlyGivenRelocateAllFilesSetToFalse()
        {
            GeneralRequestDetails optionValues = CreateOptionsTestData();

            optionValues.Options["DbFiles"] = new List <DbFile>()
            {
                new DbFile("", '1', "")
            };
            optionValues.Options[RestoreOptionsHelper.RelocateDbFiles] = false;
            IRestoreDatabaseTaskDataObject restoreDatabaseTaskDataObject = CreateRestoreDatabaseTaskDataObject(optionValues);

            Dictionary <string, RestorePlanDetailInfo> result = RestoreOptionsHelper.CreateRestorePlanOptions(restoreDatabaseTaskDataObject);

            Assert.NotNull(result);
            Assert.True(result[RestoreOptionsHelper.DataFileFolder].IsReadOnly);
            Assert.True(result[RestoreOptionsHelper.LogFileFolder].IsReadOnly);
        }
コード例 #3
0
        private RestorePlanDetailInfo Create(
            string optionKey,
            IRestoreDatabaseTaskDataObject restoreDataObject,
            OptionBuilder optionBuilder)
        {
            object currnetValue = optionBuilder.CurrentValueFunction(restoreDataObject);
            object defaultValue = optionBuilder.DefaultValueFunction(restoreDataObject);
            OptionValidationResult validationResult = optionBuilder.ValidateFunction(restoreDataObject, currnetValue, defaultValue);

            return(new RestorePlanDetailInfo
            {
                Name = optionKey,
                CurrentValue = currnetValue,
                DefaultValue = defaultValue,
                IsReadOnly = validationResult.IsReadOnly,
                IsVisiable = validationResult.IsVisible,
                ErrorMessage = validationResult.ErrorMessage
            });
        }
コード例 #4
0
        public void TargetDatabaseNameShouldBeWhatIsRequested2()
        {
            RestoreParams restoreParams = CreateOptionsTestData();
            string        defaultDbName = "default";
            string        currentDbName = "db3";

            restoreParams.Options["DefaultTargetDbName"] = defaultDbName;
            restoreParams.Options[RestoreOptionsHelper.TargetDatabaseName] = currentDbName;
            restoreParams.Options["CanChangeTargetDatabase"] = true;

            IRestoreDatabaseTaskDataObject restoreDatabaseTaskDataObject = CreateRestoreDatabaseTaskDataObject(restoreParams);

            RestoreOptionFactory.Instance.SetAndValidate(RestoreOptionsHelper.TargetDatabaseName, restoreDatabaseTaskDataObject);

            string actual   = restoreDatabaseTaskDataObject.TargetDatabaseName;
            string expected = currentDbName;

            Assert.Equal(actual, expected);
        }
コード例 #5
0
        /// <summary>
        /// Load options in restore plan
        /// </summary>
        internal static void UpdateOptionsInPlan(IRestoreDatabaseTaskDataObject restoreDataObject)
        {
            RestoreOptionFactory restoreOptionFactory = RestoreOptionFactory.Instance;


            foreach (var optionKey in optionNames)
            {
                restoreOptionFactory.SetValue(optionKey, restoreDataObject);
            }

            //After all options are set do a vaidation so any invalid option set to default
            foreach (var optionKey in optionNames)
            {
                string error = restoreOptionFactory.ValidateOption(optionKey, restoreDataObject);
                if (!string.IsNullOrEmpty(error))
                {
                    //TODO: we could send back the error message so client knows the option is set incorrectly
                }
            }
        }
コード例 #6
0
        public void SourceDatabaseNameShouldStayTheSameIfValid()
        {
            RestoreParams restoreParams = CreateOptionsTestData();
            string        defaultDbName = "default";
            string        currentDbName = "db3";

            restoreParams.Options["SourceDbNames"] = new List <string> {
                "db1", "db2", "db3"
            };
            restoreParams.Options["DefaultSourceDbName"] = defaultDbName;
            restoreParams.Options[RestoreOptionsHelper.SourceDatabaseName] = currentDbName;

            IRestoreDatabaseTaskDataObject restoreDatabaseTaskDataObject = CreateRestoreDatabaseTaskDataObject(restoreParams);

            RestoreOptionFactory.Instance.SetAndValidate(RestoreOptionsHelper.SourceDatabaseName, restoreDatabaseTaskDataObject);

            string actual   = restoreDatabaseTaskDataObject.SourceDatabaseName;
            string expected = currentDbName;

            Assert.Equal(actual, expected);
        }
コード例 #7
0
 /// <summary>
 /// Set the option value in restore task object using the values in the restore request
 /// </summary>
 /// <param name="optionKey"></param>
 /// <param name="restoreDataObject"></param>
 public void SetValue(string optionKey, IRestoreDatabaseTaskDataObject restoreDataObject)
 {
     if (restoreDataObject != null)
     {
         if (optionBuilders.ContainsKey(optionKey))
         {
             var builder = optionBuilders[optionKey];
             if (restoreDataObject.RestoreParams != null && restoreDataObject.RestoreParams.Options.ContainsKey(optionKey))
             {
                 try
                 {
                     var value = restoreDataObject.RestoreParams.GetOptionValue <object>(optionKey);
                     builder.SetValueFunction(restoreDataObject, value);
                 }
                 catch (Exception ex)
                 {
                     var defaultValue = builder.DefaultValueFunction(restoreDataObject);
                     builder.SetValueFunction(restoreDataObject, defaultValue);
                     Logger.Write(LogLevel.Warning, $"Failed tp set restore option {optionKey} error:{ex.Message}");
                 }
             }
             else
             {
                 try
                 {
                     var defaultValue = builder.DefaultValueFunction(restoreDataObject);
                     builder.SetValueFunction(restoreDataObject, defaultValue);
                 }
                 catch (Exception)
                 {
                     Logger.Write(LogLevel.Warning, $"Failed to set restore option  {optionKey} to default value");
                 }
             }
         }
         else
         {
             Logger.Write(LogLevel.Warning, $"cannot find restore option builder for {optionKey}");
         }
     }
 }
コード例 #8
0
        public void DataFileFolderShouldBeCurrentValueGivenRelocateAllFilesSetToTrue()
        {
            string dataFile = "data files";
            string logFile  = "log files";
            GeneralRequestDetails optionValues = CreateOptionsTestData();

            optionValues.Options["DbFiles"] = new List <DbFile>()
            {
                new DbFile("", '1', "")
            };
            optionValues.Options[RestoreOptionsHelper.RelocateDbFiles] = true;
            optionValues.Options[RestoreOptionsHelper.DataFileFolder]  = dataFile;
            optionValues.Options[RestoreOptionsHelper.LogFileFolder]   = logFile;
            IRestoreDatabaseTaskDataObject restoreDatabaseTaskDataObject = CreateRestoreDatabaseTaskDataObject(optionValues);

            Dictionary <string, RestorePlanDetailInfo> result = RestoreOptionsHelper.CreateRestorePlanOptions(restoreDatabaseTaskDataObject);

            Assert.NotNull(result);
            Assert.False(result[RestoreOptionsHelper.DataFileFolder].IsReadOnly);
            Assert.False(result[RestoreOptionsHelper.LogFileFolder].IsReadOnly);
            Assert.Equal(result[RestoreOptionsHelper.DataFileFolder].CurrentValue, dataFile);
            Assert.Equal(result[RestoreOptionsHelper.LogFileFolder].CurrentValue, logFile);
        }
コード例 #9
0
 /// <summary>
 /// Set the option value in restore task object using the values in the restore request
 /// </summary>
 /// <param name="optionKey"></param>
 /// <param name="restoreDataObject"></param>
 public void SetAndValidate(string optionKey, IRestoreDatabaseTaskDataObject restoreDataObject)
 {
     this.SetValue(optionKey, restoreDataObject);
     this.ValidateOption(optionKey, restoreDataObject);
 }
コード例 #10
0
        internal static Dictionary <string, RestorePlanDetailInfo> CreateRestorePlanOptions(IRestoreDatabaseTaskDataObject restoreDataObject)
        {
            Validate.IsNotNull(nameof(restoreDataObject), restoreDataObject);

            Dictionary <string, RestorePlanDetailInfo> options = new Dictionary <string, RestorePlanDetailInfo>();
            RestoreOptionFactory restoreOptionFactory          = RestoreOptionFactory.Instance;

            //Create the options using the current values
            foreach (var optionKey in optionNames)
            {
                var optionInfo = restoreOptionFactory.CreateOptionInfo(optionKey, restoreDataObject);
                options.Add(optionKey, optionInfo);
            }

            // After all options are set verify them all again to set the read only
            // Because some options can change the readonly mode of other options.( e.g Recovery state can affect StandBy to be readyonly)
            foreach (var optionKey in optionNames)
            {
                restoreOptionFactory.UpdateOption(optionKey, restoreDataObject, options[optionKey]);
            }
            return(options);
        }