public void DeserializeMultiDbConfigurationTest_WithQueryRowDataItems() { string fileName = Path.GetTempFileName(); try { string fileContents = Properties.Resources.MultiDb_WithQueryRowData; File.WriteAllText(fileName, fileContents); MultiDbData actual; actual = MultiDbHelper.DeserializeMultiDbConfiguration(fileName); actual.IsTransactional = false; Assert.AreEqual(@"Server1\Instance_1", actual[0].ServerName); Assert.AreEqual(@"Server2\Instance_1", actual[1].ServerName); DbOverrideSequence seq = actual[1].OverrideSequence; Assert.AreEqual("Default", seq["1"][0].DefaultDbTarget); Assert.AreEqual("Db_0002", seq["1"][0].OverrideDbTarget); List <QueryRowItem> queryItems = seq["1"][0].QueryRowData; Assert.AreEqual("MyCompany2", queryItems[0].Value); Assert.AreEqual("CompanyName", queryItems[0].ColumnName); Assert.AreEqual("CompanyID", queryItems[1].ColumnName); Assert.AreEqual("000002", queryItems[1].Value); Assert.IsFalse(actual.IsTransactional); } finally { if (File.Exists(fileName)) { File.Delete(fileName); } } }
public void DeserializeMultiDbConfigurationTest_EmptyFileName() { string fileName = string.Empty; MultiDbData expected = null; MultiDbData actual; actual = MultiDbHelper.DeserializeMultiDbConfiguration(fileName); Assert.AreEqual(expected, actual); }
public void DeserializeMultiDbConfigurationTest_ReadFile() { string fileName = Path.GetTempFileName(); try { string fileContents = "<?xml version=\"1.0\" encoding=\"utf-8\"?>"; fileContents += "<ArrayOfServerData xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\">"; fileContents += @" <ServerData> <ServerName>(local)</ServerName> <OverrideSequence> <item> <key> <string>1</string> </key> <value> <ArrayOfDatabaseOverride> <DatabaseOverride> <DefaultDbTarget>SqlBuildTest</DefaultDbTarget> <OverrideDbTarget>master</OverrideDbTarget> </DatabaseOverride> </ArrayOfDatabaseOverride> </value> </item> </OverrideSequence> </ServerData> </ArrayOfServerData>"; File.WriteAllText(fileName, fileContents); MultiDbData actual; actual = MultiDbHelper.DeserializeMultiDbConfiguration(fileName); actual.IsTransactional = false; Assert.AreEqual(actual[0].ServerName, "(local)"); DbOverrideSequence seq = actual[0].OverrideSequence; Assert.AreEqual(seq["1"][0].DefaultDbTarget, "SqlBuildTest"); Assert.AreEqual(seq["1"][0].OverrideDbTarget, "master"); Assert.IsFalse(actual.IsTransactional); } finally { if (File.Exists(fileName)) { File.Delete(fileName); } } }
/// <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); }