示例#1
0
        /// <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);
        }
示例#2
0
 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));
 }
示例#3
0
        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);
        }
示例#4
0
        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\"");
            }
示例#14
0
        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");
            }