Esempio n. 1
0
        /// <summary>
        /// Starts a server node with a given version.
        /// </summary>
        /// <param name="groupId">Maven artifact group id.</param>
        /// <param name="version">Product version.</param>
        /// <returns>Disposable object to stop the server.</returns>
        public static IDisposable Start(string groupId, string version)
        {
            IgniteArgumentCheck.NotNullOrEmpty(version, "version");

            var pomWrapper =
                ReplaceIgniteVersionInPomFile(groupId, version, Path.Combine(JavaServerSourcePath, "pom.xml"));

            EnsureJvmCreated();

            var time = DateTime.Now;

            TestUtilsJni.StartProcess(
                file: Os.IsWindows ? "cmd.exe" : "/bin/bash",
                arg1: Os.IsWindows ? "/c" : "-c",
                arg2: string.Format("{0} {1}", MavenPath, MavenCommandExec),
                envVars: Jvm.IsJava9()
                    ? "MAVEN_OPTS#" + string.Join(" ", Jvm.Java9Options)
                    : string.Empty,
                workDir: JavaServerSourcePath,
                waitForOutput: "Ignite node started OK");

            // Java can not end process tree on Windows - detect the process manually and use taskkill.
            var serverProc = Os.IsWindows
                ? System.Diagnostics.Process
                             .GetProcesses()
                             .Single(p => p.ProcessName == "java" && p.StartTime > time)
                : null;

            return(new DisposeAction(() =>
            {
                if (serverProc != null)
                {
                    serverProc.KillProcessTree();
                }

                TestUtilsJni.DestroyProcess();
                pomWrapper.Dispose();
            }));
        }