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); } } }
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); }
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); }
public void ImportMultiDbTextConfigTest_EmptyFileName() { string fileName = string.Empty; MultiDbData expected = null; MultiDbData actual; actual = MultiDbHelper.ImportMultiDbTextConfig(fileName); Assert.AreEqual(expected, actual); }
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); }
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"); }
/// <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); }