New file |
| | |
| | | /* |
| | | * 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; |
| | | } |
| | | } |