public ImmutableList<Process> runServerProcesses() {
    logger.atInfo().log("Starting language server processes (if any)...");
    return commands.stream()
        // Filter out commands that don't need server start up
        .filter(command -> !Strings.isNullOrEmpty(command.serverCommand()))
        .map(
            command ->
                runProcess(
                    CommandExecutorFactory.create(
                        command.serverCommand(),
                        getCommand("--port=", command.port()),
                        getCommand("--log_id=", command.logId()),
                        getCommand("--log_output=", command.outputDir()),
                        "--trust_all_ssl_cert=" + command.trustAllSslCert(),
                        getCommand("--timeout_seconds=", command.timeoutSeconds().getSeconds()),
                        getCommand("--callback_address=", command.callbackAddress()),
                        getCommand("--callback_port=", command.callbackPort()),
                        getCommand("--polling_uri=", command.pollingUri()))))
        .filter(Optional::isPresent)
        .map(Optional::get)
        .collect(toImmutableList());
  }
@Test
  public void runServerProcess_whenPathExistsAndNormalPort_returnsValidProcessList() {
    ImmutableList<LanguageServerCommand> commands =
        ImmutableList.of(
            LanguageServerCommand.create(
                "/bin/sh",
                "",
                "34567",
                "34",
                "/output-here",
                false,
                Duration.ofSeconds(10),
                "157.34.0.2",
                8080,
                "157.34.0.2:8881",
                0));

    RemoteServerLoader loader =
        Guice.createInjector(new RemoteServerLoaderModule(commands))
            .getInstance(RemoteServerLoader.class);
    var processList = loader.runServerProcesses();
    assertThat(processList).hasSize(1);
    assertThat(processList.get(0)).isNotNull();
  }