/// <summary> /// Runs liquibase against a database using the update parameter. /// </summary> /// <returns></returns> public int Start(BaseCommand command, LiquibaseSettings settings) { if (command == null) { throw new ArgumentNullException("command"); } if (settings == null) { throw new ArgumentNullException("settings"); } var liquibaseJar = ResolveLiquibaseJarFile(settings.LiquibaseJar); if (liquibaseJar == null) { throw new ArgumentException($"Liquibase jar file not found under '{settings.LiquibaseJar}'"); } var javaExecutable = GetJavaExecutable(settings); var arguments = new Helpers.ArgumentBuilder(command, settings, liquibaseJar, Globber).Build(); var processSettings = GetProcessSettings(arguments, settings); var process = this.ProcessRunner.Start(javaExecutable, processSettings); process.WaitForExit(); var messages = process.GetStandardError(); var exitCode = process.GetExitCode(); RedirectErrorOutput(messages, exitCode); return(exitCode); }
public ArgumentBuilder(BaseCommand command, LiquibaseSettings settings, FilePath liquibaseJar, IGlobber globber) { Globber = globber ?? throw new ArgumentNullException(nameof(globber)); Command = command ?? throw new ArgumentNullException(nameof(command)); Settings = settings ?? throw new ArgumentNullException(nameof(settings)); LiquibaseJar = liquibaseJar ?? throw new ArgumentNullException(nameof(liquibaseJar)); }
public LiquibaseRunnerTests() { _processRunner = Substitute.For <IProcessRunner>(); _cakeLog = Substitute.For <ICakeLog>(); _cakeTools = Substitute.For <IToolLocator>(); _globber = new PassThroughGlobber(); _platform = Substitute.For <ICakePlatform>(); _settings = new LiquibaseSettings(); _runner = new LiquibaseRunner(_processRunner, _cakeLog, _cakeTools, _globber, _platform); }
private ProcessSettings GetProcessSettings(string arguments, LiquibaseSettings settings) { var processSettings = new ProcessSettings { Arguments = arguments, RedirectStandardError = true }; if (settings.WorkingDirectory != null) { processSettings.UseWorkingDirectory(settings.WorkingDirectory); } return(processSettings); }
public void Includes_The_LiquibaseJar_File_In_The_Classpath() { var settings = new LiquibaseSettings(); settings.JavaSettings.Classpaths.Clear(); var arguments = new ArgumentBuilder( Commands.Update, settings, new FilePath("somefile.jar"), _globber ).Build(); arguments.Should().Contain("-cp \"somefile.jar\""); }
public void Contains_The_Quoted_Context() { var settings = new LiquibaseSettings(); settings.Contexts.Add("production"); var arguments = new ArgumentBuilder( Commands.Update, settings, new FilePath("somefile.jar"), _globber ).Build(); arguments.Should().Contain("--contexts=\"production\""); }
public void Includes_Additional_Java_Options_If_Present() { var settings = new LiquibaseSettings(); settings.JavaSettings.Classpaths.Clear(); settings.JavaSettings.Options = "-Dsome.java.option=1"; var arguments = new ArgumentBuilder( Commands.Update, settings, new FilePath("somefile.jar"), _globber ).Build(); arguments.Should().Contain("-Dsome.java.option=1"); }
public void Appends_The_Classpath_Parameter_If_An_Item_Exists_In_The_Java_Settings() { var settings = new LiquibaseSettings(); settings.JavaSettings.Classpaths.Clear(); settings.JavaSettings.Classpaths.Add("some/path/file.jar"); var arguments = new ArgumentBuilder( Commands.Update, settings, new FilePath("somefile.jar"), _globber ).Build(); arguments.Should().StartWith("-cp \"some/path/file.jar"); }
public void Contains_The_Quoted_DefaultsFile() { var settings = new LiquibaseSettings() { DefaultsFile = "./defaults.properties" }; var arguments = new ArgumentBuilder( Commands.Update, settings, new FilePath("somefile.jar"), _globber ).Build(); arguments.Should().Contain("--defaultsFile=\"./defaults.properties\""); }
public void Contains_The_Quoted_Url() { var settings = new LiquibaseSettings() { Url = "jdbc:sqlserver://server:1433;property=value" }; var arguments = new ArgumentBuilder( Commands.Update, settings, new FilePath("somefile.jar"), _globber ).Build(); arguments.Should().Contain("--url=\"jdbc:sqlserver://server:1433;property=value"); }
public void Contains_The_Quoted_ChangelogFile() { var settings = new LiquibaseSettings() { ChangeLogFile = "./ChangeLog.xml" }; var arguments = new ArgumentBuilder( Commands.Update, settings, new FilePath("somefile.jar"), _globber ).Build(); arguments.Should().Contain("--changeLogFile=\"./ChangeLog.xml\""); }
public void Contains_The_Quoted_Password() { var settings = new LiquibaseSettings() { Password = "******" }; var arguments = new ArgumentBuilder( Commands.Update, settings, new FilePath("somefile.jar"), _globber ).Build(); arguments.Should().Contain("--password=\"password\""); }
public void Contains_The_Quoted_Username() { var settings = new LiquibaseSettings() { Username = "******" }; var arguments = new ArgumentBuilder( Commands.Update, settings, new FilePath("somefile.jar"), _globber ).Build(); arguments.Should().Contain("--username=\"user\""); }
private FilePath GetJavaExecutable(LiquibaseSettings settings) { string executableToResolve = settings.JavaSettings.Executable; if (string.IsNullOrEmpty(executableToResolve)) { executableToResolve = Platform.IsUnix() ? "java" : "java.exe"; } var javaExecutable = Tools.Resolve(executableToResolve); if (javaExecutable == null) { throw new ArgumentException($"The java executable could not be found under '{executableToResolve}'."); } return(javaExecutable); }
public void Does_Not_Append_Empty_Classpath_Parameters() { var settings = new LiquibaseSettings(); settings.JavaSettings.Classpaths.Clear(); settings.JavaSettings.Classpaths.Add(""); settings.JavaSettings.Classpaths.Add(" "); settings.JavaSettings.Classpaths.Add("\r\n"); var arguments = new ArgumentBuilder( Commands.Update, settings, new FilePath("somefile.jar"), _globber ).Build(); arguments.Should().Contain("-cp \"somefile.jar\""); // only contain the jar file, but nothing else in the -cp parameter }
public void Does_Not_Contain_Parameters_If_The_Setting_Is_Empty() { var settings = new LiquibaseSettings(); var arguments = new ArgumentBuilder( Commands.Update, settings, new FilePath("somefile.jar"), _globber ).Build(); arguments.Should().NotContain("--changeLogFile"); arguments.Should().NotContain("--username"); arguments.Should().NotContain("--password"); arguments.Should().NotContain("--url"); arguments.Should().NotContain("--driver"); arguments.Should().NotContain("--contexts"); arguments.Should().NotContain("--defaultSchemaName"); arguments.Should().NotContain("--defaultsFile"); }
public void Concatinates_Classpath_And_Additional_Java_Options() { var settings = new LiquibaseSettings(); settings.JavaSettings.Classpaths.Clear(); settings.JavaSettings.Classpaths.Add("some/file.jar"); settings.JavaSettings.Options = "-Dsome.java.option=1"; var arguments = new ArgumentBuilder( Commands.Update, settings, new FilePath("somefile.jar"), _globber ).Build(); arguments.Should() .StartWith("-cp \"some/file.jar") .And.Contain("somefile.jar") .And.Contain("-Dsome.java.option=1"); }