tikhomirov@653: /* tikhomirov@653: * Copyright (c) 2013 TMate Software Ltd tikhomirov@653: * tikhomirov@653: * This program is free software; you can redistribute it and/or modify tikhomirov@653: * it under the terms of the GNU General Public License as published by tikhomirov@653: * the Free Software Foundation; version 2 of the License. tikhomirov@653: * tikhomirov@653: * This program is distributed in the hope that it will be useful, tikhomirov@653: * but WITHOUT ANY WARRANTY; without even the implied warranty of tikhomirov@653: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the tikhomirov@653: * GNU General Public License for more details. tikhomirov@653: * tikhomirov@653: * For information on how to redistribute this software under tikhomirov@653: * the terms of a license other than GNU General Public License tikhomirov@653: * contact TMate Software at support@hg4j.com tikhomirov@653: */ tikhomirov@653: package org.tmatesoft.hg.test; tikhomirov@653: tikhomirov@653: import java.io.File; tikhomirov@653: import java.io.IOException; tikhomirov@653: import java.net.MalformedURLException; tikhomirov@653: import java.net.URL; tikhomirov@653: import java.util.ArrayList; tikhomirov@653: import java.util.List; tikhomirov@653: tikhomirov@653: /** tikhomirov@653: * Wraps hg server tikhomirov@653: * tikhomirov@653: * @author Artem Tikhomirov tikhomirov@653: * @author TMate Software Ltd. tikhomirov@653: */ tikhomirov@653: class HgServer { tikhomirov@653: private Process serverProcess; tikhomirov@653: private boolean publish = true; tikhomirov@653: tikhomirov@653: public HgServer publishing(boolean pub) { tikhomirov@653: publish = pub; tikhomirov@653: return this; tikhomirov@653: } tikhomirov@653: tikhomirov@653: public HgServer start(File dir) throws IOException, InterruptedException { tikhomirov@653: if (serverProcess != null) { tikhomirov@653: stop(); tikhomirov@653: } tikhomirov@653: List cmdline = new ArrayList(); tikhomirov@653: cmdline.add("hg"); tikhomirov@653: cmdline.add("--config"); tikhomirov@653: cmdline.add("web.allow_push=*"); tikhomirov@653: cmdline.add("--config"); tikhomirov@653: cmdline.add("web.push_ssl=False"); tikhomirov@653: cmdline.add("--config"); tikhomirov@653: cmdline.add("server.validate=True"); tikhomirov@653: cmdline.add("--config"); tikhomirov@653: cmdline.add(String.format("web.port=%d", port())); tikhomirov@653: if (!publish) { tikhomirov@653: cmdline.add("--config"); tikhomirov@653: cmdline.add("phases.publish=False"); tikhomirov@653: } tikhomirov@653: cmdline.add("serve"); tikhomirov@653: serverProcess = new ProcessBuilder(cmdline).directory(dir).start(); tikhomirov@653: Thread.sleep(500); tikhomirov@653: return this; tikhomirov@653: } tikhomirov@653: tikhomirov@653: public URL getURL() throws MalformedURLException { tikhomirov@653: return new URL(String.format("http://localhost:%d/", port())); tikhomirov@653: } tikhomirov@653: tikhomirov@653: public int port() { tikhomirov@653: return 9090; tikhomirov@653: } tikhomirov@653: tikhomirov@653: public void stop() { tikhomirov@653: if (serverProcess == null) { tikhomirov@653: return; tikhomirov@653: } tikhomirov@653: // if Process#destroy() doesn't perform well with scripts and child processes tikhomirov@653: // may need to write server pid to a file and send a kill here tikhomirov@653: serverProcess.destroy(); tikhomirov@653: serverProcess = null; tikhomirov@653: } tikhomirov@653: }