示例#1
0
        public void ImportMultiDbTextConfigTest_ReadFile()
        {
            string fileName = Path.GetTempFileName();

            try
            {
                string[] fileContents = new string[] { "SERVER:default,target;default2,target2", "SERVER2:default,target;default2,target2" };
                File.WriteAllLines(fileName, fileContents);
                MultiDbData actual;
                actual = MultiDbHelper.ImportMultiDbTextConfig(fileName);

                Assert.AreEqual(actual[0].ServerName, "SERVER");
                Assert.AreEqual(actual[1].ServerName, "SERVER2");

                DbOverrideSequence seq = actual[0].OverrideSequence;
                Assert.AreEqual(seq["0"][0].DefaultDbTarget, "default");
                Assert.AreEqual(seq["0"][1].OverrideDbTarget, "target2");
                seq = actual[1].OverrideSequence;
                Assert.AreEqual(seq["1"][1].DefaultDbTarget, "default2");
                Assert.AreEqual(seq["1"][0].OverrideDbTarget, "target");
            }
            finally
            {
                if (File.Exists(fileName))
                {
                    File.Delete(fileName);
                }
            }
        }
示例#2
0
        public void ImportMultiDbTextConfigTest_BadConfuguration_MissingColon()
        {
            string[]    fileContents = new string[] { "SERVER:default,target;default2,target2", "SERVER2 default,target;default2,target2" };
            MultiDbData actual;

            actual = MultiDbHelper.ImportMultiDbTextConfig(fileContents);
        }
示例#3
0
        public void ValidateMultiDatabaseData_BadConfuguration()
        {
            string[]    fileContents = new string[] { "SERVER:default,target;default2,target2", "SERVER2:,;default2,target2" };
            MultiDbData dbData       = MultiDbHelper.ImportMultiDbTextConfig(fileContents);
            bool        expected     = false;
            bool        actual       = MultiDbHelper.ValidateMultiDatabaseData(dbData);

            Assert.AreEqual(expected, actual);
        }
示例#4
0
        public void ImportMultiDbTextConfigTest_EmptyFileName()
        {
            string      fileName = string.Empty;
            MultiDbData expected = null;
            MultiDbData actual;

            actual = MultiDbHelper.ImportMultiDbTextConfig(fileName);
            Assert.AreEqual(expected, actual);
        }
示例#5
0
        public void ImportMultiDbTextConfigTest_MultipleOfSameServer()
        {
            string[]    fileContents = new string[] { "SERVER:default,target;default2,target2", "SERVER:default,target;default2,target2", "SERVER1:default,target;default3,target3" };
            MultiDbData actual;

            actual = MultiDbHelper.ImportMultiDbTextConfig(fileContents);
            Assert.AreEqual("SERVER", actual[0].ServerName); //Make sure the items with the same server only get on server entry.
            Assert.AreEqual("SERVER1", actual[1].ServerName);
            Assert.AreEqual(2, actual[0].OverrideSequence.Count);
            Assert.AreEqual(1, actual[1].OverrideSequence.Count);
        }
示例#6
0
        public void ImportMultiDbTextConfigTest_GoodConfuguration_HandleEmptyLine()
        {
            string[]    fileContents = new string[] { "SERVER:default,target;default2,target2", "", "SERVER2:default,target;default2,target2" };
            MultiDbData actual;

            actual = MultiDbHelper.ImportMultiDbTextConfig(fileContents);
            Assert.AreEqual(actual[0].ServerName, "SERVER");
            Assert.AreEqual(actual[1].ServerName, "SERVER2");

            DbOverrideSequence seq = actual[0].OverrideSequence;

            Assert.AreEqual(seq["0"][0].DefaultDbTarget, "default");
            Assert.AreEqual(seq["0"][1].OverrideDbTarget, "target2");
            seq = actual[1].OverrideSequence;
            Assert.AreEqual(seq["1"][1].DefaultDbTarget, "default2");
            Assert.AreEqual(seq["1"][0].OverrideDbTarget, "target");
        }
示例#7
0
        /// <summary>
        /// Accepts a Multi-Database configuration file, processes it and outputs a populated MultiDbData object
        /// </summary>
        /// <param name="multiDbOverrideSettingFileName">Valid Multi-database file (.multiDb, .multiDbQ, .cfg)</param>
        /// <param name="multiData">Out parameter of populated MultiDbData object</param>
        /// <param name="errorMessages">Out parameter or error messages (if any)</param>
        /// <returns>Zero (0) if no errors, otherwise an error code</returns>
        public static int ValidateAndLoadMultiDbData(string multiDbOverrideSettingFileName, CommandLineArgs cmdLine, out MultiDbData multiData, out string[] errorMessages)
        {
            log.LogInformation("Validating target database settings");
            string message = string.Empty;
            string error;

            errorMessages = new string[0];
            multiData     = null;
            string extension = Path.GetExtension(multiDbOverrideSettingFileName).ToLowerInvariant();

            switch (extension)
            {
            case ".multidb":
                multiData = MultiDbHelper.DeserializeMultiDbConfiguration(multiDbOverrideSettingFileName);
                break;

            case ".multidbq":
                multiData = MultiDbHelper.CreateMultiDbConfigFromQueryFile(multiDbOverrideSettingFileName, out message);
                break;

            case ".sql":
                if (cmdLine != null)
                {
                    ConnectionData connData = new ConnectionData()
                    {
                        DatabaseName       = cmdLine.Database,
                        SQLServerName      = cmdLine.Server,
                        UserId             = cmdLine.AuthenticationArgs.UserName,
                        Password           = cmdLine.AuthenticationArgs.Password,
                        AuthenticationType = cmdLine.AuthenticationArgs.AuthenticationType
                    };
                    multiData = MultiDbHelper.CreateMultiDbConfigFromQuery(connData, File.ReadAllText(cmdLine.MultiDbRunConfigFileName), out message);
                }
                break;

            case ".cfg":
            default:
                multiData = MultiDbHelper.ImportMultiDbTextConfig(multiDbOverrideSettingFileName);
                break;
            }
            //if (multiDbOverrideSettingFileName.EndsWith(".multidb", StringComparison.InvariantCultureIgnoreCase))
            //    multiData = MultiDbHelper.DeserializeMultiDbConfiguration(multiDbOverrideSettingFileName);
            //else if (multiDbOverrideSettingFileName.EndsWith(".multidbq", StringComparison.InvariantCultureIgnoreCase))
            //    multiData = MultiDbHelper.CreateMultiDbConfigFromQueryFile(multiDbOverrideSettingFileName, out message);
            //else if (multiDbOverrideSettingFileName.EndsWith(".cfg", StringComparison.InvariantCultureIgnoreCase))
            //    multiData = MultiDbHelper.ImportMultiDbTextConfig(multiDbOverrideSettingFileName);


            if (multiData == null || multiData.Count() == 0)
            {
                error         = "Unable to read in configuration file " + multiDbOverrideSettingFileName + ((message.Length > 0) ? " :: " + message : "");
                errorMessages = new string[] { error, "Returning error code: " + (int)ExecutionReturn.NullMultiDbConfig };
                log.LogError(error);
                return((int)ExecutionReturn.NullMultiDbConfig);
            }

            if (!MultiDbHelper.ValidateMultiDatabaseData(multiData))
            {
                error         = "One or more scripts is missing a default or target override database setting. Run has been halted. Please correct the error and try again";
                errorMessages = new string[] { error, "Returning error code: " + (int)ExecutionReturn.MissingTargetDbOverrideSetting };
                log.LogError(error);
                return((int)ExecutionReturn.MissingTargetDbOverrideSetting);
            }
            return(0);
        }