| /* |
| * Copyright 2013 akquinet tech@spree GmbH |
| * |
| * Licensed under the Apache License, Version 2.0 (the "License"); |
| * you may not use this file except in compliance with the License. |
| * You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| package de.akquinet.devops; |
| |
| import java.net.InetAddress; |
| import java.net.ServerSocket; |
| |
| import com.gitblit.tests.GitBlitSuite; |
| |
| /** |
| * This is a runnable implementation, that is used to run a gitblit server in a |
| * separate thread (e.g. alongside test cases) |
| * |
| * @author saheba |
| * |
| */ |
| public class GitblitRunnable implements Runnable { |
| |
| private int httpPort, httpsPort, shutdownPort; |
| private String userPropertiesPath, gitblitPropertiesPath; |
| private boolean startFailed = false; |
| |
| /** |
| * constructor with reduced set of start params |
| * |
| * @param httpPort |
| * @param httpsPort |
| * @param shutdownPort |
| * @param gitblitPropertiesPath |
| * @param userPropertiesPath |
| */ |
| public GitblitRunnable(int httpPort, int httpsPort, int shutdownPort, |
| String gitblitPropertiesPath, String userPropertiesPath) { |
| this.httpPort = httpPort; |
| this.httpsPort = httpsPort; |
| this.shutdownPort = shutdownPort; |
| this.userPropertiesPath = userPropertiesPath; |
| this.gitblitPropertiesPath = gitblitPropertiesPath; |
| } |
| |
| /* |
| * (non-Javadoc) |
| * |
| * @see java.lang.Runnable#run() |
| */ |
| public void run() { |
| boolean portsFree = false; |
| long lastRun = -1; |
| while (!portsFree) { |
| long current = System.currentTimeMillis(); |
| if (lastRun == -1 || lastRun + 100 < current) { |
| portsFree = areAllPortsFree(new int[] { httpPort, httpsPort, |
| shutdownPort }, "127.0.0.1"); |
| } |
| lastRun = current; |
| |
| } |
| try { |
| GitBlitServer4UITests.main("--httpPort", "" + httpPort, "--httpsPort", "" |
| + httpsPort, "--shutdownPort", "" + shutdownPort, |
| "--repositoriesFolder", |
| "\"" + GitBlitSuite.REPOSITORIES.getAbsolutePath() + "\"", |
| "--userService", userPropertiesPath, "--settings", |
| gitblitPropertiesPath); |
| setStartFailed(false); |
| } catch (Exception iex) { |
| System.out.println("Gitblit server start failed"); |
| setStartFailed(true); |
| } |
| } |
| |
| /** |
| * Method used to ensure that all ports are free, if the runnable is used |
| * JUnit test classes. Be aware that JUnit's setUpClass and tearDownClass |
| * methods, which are executed before and after a test class (consisting of |
| * several test cases), may be executed parallely if they are part of a test |
| * suite consisting of several test classes. Therefore the run method of |
| * this class calls areAllPortsFree to check port availability before |
| * starting another gitblit instance. |
| * |
| * @param ports |
| * @param inetAddress |
| * @return |
| */ |
| public static boolean areAllPortsFree(int[] ports, String inetAddress) { |
| System.out |
| .println("\n" |
| + System.currentTimeMillis() |
| + " ----------------------------------- testing if all ports are free ..."); |
| String blockedPorts = ""; |
| for (int i = 0; i < ports.length; i++) { |
| ServerSocket s; |
| try { |
| s = new ServerSocket(ports[i], 1, |
| InetAddress.getByName(inetAddress)); |
| s.close(); |
| } catch (Exception e) { |
| if (!blockedPorts.equals("")) { |
| blockedPorts += ", "; |
| } |
| } |
| } |
| if (blockedPorts.equals("")) { |
| System.out |
| .println(" ----------------------------------- ... verified"); |
| return true; |
| } |
| System.out.println(" ----------------------------------- ... " |
| + blockedPorts + " are still blocked"); |
| return false; |
| } |
| |
| private void setStartFailed(boolean startFailed) { |
| this.startFailed = startFailed; |
| } |
| |
| public boolean isStartFailed() { |
| return startFailed; |
| } |
| } |