prepare scm-maven-plugin for integration tests

This commit is contained in:
Sebastian Sdorra
2011-10-17 14:17:09 +02:00
parent 84f63e94c0
commit e37e260168
3 changed files with 389 additions and 1 deletions

View File

@@ -0,0 +1,140 @@
/**
* Copyright (c) 2010, Sebastian Sdorra
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
* 3. Neither the name of SCM-Manager; nor the names of its
* contributors may be used to endorse or promote products derived from this
* software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY
* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
* http://bitbucket.org/sdorra/scm-manager
*
*/
package sonia.scm.maven;
//~--- non-JDK imports --------------------------------------------------------
import org.apache.commons.io.IOUtils;
import org.eclipse.jetty.server.Server;
//~--- JDK imports ------------------------------------------------------------
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.InetAddress;
import java.net.ServerSocket;
import java.net.Socket;
/**
*
* @author Sebastian Sdorra
*/
public class JettyStopMonitorThread extends Thread
{
/** Field description */
public static final String ADDRESS_LOCALHOST = "127.0.0.1";
/** Field description */
public static final String NAME = "JettyStopMonitor";
//~--- constructors ---------------------------------------------------------
/**
* Constructs ...
*
*
* @param server
* @param stopPort
* @param stopKey
*/
public JettyStopMonitorThread(Server server, int stopPort, String stopKey)
{
this.server = server;
this.stopKey = stopKey;
setDaemon(true);
setName(NAME);
try
{
socket = new ServerSocket(stopPort, 1,
InetAddress.getByName(ADDRESS_LOCALHOST));
}
catch (Exception e)
{
throw new RuntimeException(e);
}
}
//~--- methods --------------------------------------------------------------
/**
* Method description
*
*/
@Override
public void run()
{
BufferedReader reader = null;
Socket accept = null;
try
{
accept = socket.accept();
reader =
new BufferedReader(new InputStreamReader(accept.getInputStream()));
String line = reader.readLine();
if (stopKey.equals(line))
{
server.stop();
socket.close();
}
accept.close();
}
catch (Exception e)
{
throw new RuntimeException(e);
}
finally
{
IOUtils.closeQuietly(reader);
}
}
//~--- fields ---------------------------------------------------------------
/** Field description */
private Server server;
/** Field description */
private ServerSocket socket;
/** Field description */
private String stopKey;
}

View File

@@ -117,6 +117,39 @@ public class RunMojo extends AbstractBaseScmMojo
return port;
}
/**
* Method description
*
*
* @return
*/
public String getStopKey()
{
return stopKey;
}
/**
* Method description
*
*
* @return
*/
public int getStopPort()
{
return stopPort;
}
/**
* Method description
*
*
* @return
*/
public boolean isBackgroud()
{
return backgroud;
}
/**
* Method description
*
@@ -130,6 +163,17 @@ public class RunMojo extends AbstractBaseScmMojo
//~--- set methods ----------------------------------------------------------
/**
* Method description
*
*
* @param backgroud
*/
public void setBackgroud(boolean backgroud)
{
this.backgroud = backgroud;
}
/**
* Method description
*
@@ -175,6 +219,28 @@ public class RunMojo extends AbstractBaseScmMojo
this.port = port;
}
/**
* Method description
*
*
* @param stopKey
*/
public void setStopKey(String stopKey)
{
this.stopKey = stopKey;
}
/**
* Method description
*
*
* @param stopPort
*/
public void setStopPort(int stopPort)
{
this.stopPort = stopPort;
}
//~--- methods --------------------------------------------------------------
/**
@@ -216,8 +282,10 @@ public class RunMojo extends AbstractBaseScmMojo
warContext.setExtractWAR(true);
warContext.setWar(warFile.getAbsolutePath());
server.setHandler(warContext);
new JettyStopMonitorThread(server, stopPort, stopKey).start();
server.start();
server.join();
// server.join();
}
catch (Exception ex)
{
@@ -227,6 +295,11 @@ public class RunMojo extends AbstractBaseScmMojo
//~--- fields ---------------------------------------------------------------
/**
* @parameter
*/
private boolean backgroud = false;
/**
* @parameter
*/
@@ -242,6 +315,16 @@ public class RunMojo extends AbstractBaseScmMojo
*/
private int port = 8081;
/**
* @parameter
*/
private String stopKey = "stop";
/**
* @parameter
*/
private int stopPort = 8085;
/**
* @parameter expression="${openBrowser}" default-value="true"
*/

View File

@@ -0,0 +1,165 @@
/**
* Copyright (c) 2010, Sebastian Sdorra
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
* 3. Neither the name of SCM-Manager; nor the names of its
* contributors may be used to endorse or promote products derived from this
* software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY
* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
* http://bitbucket.org/sdorra/scm-manager
*
*/
package sonia.scm.maven;
//~--- non-JDK imports --------------------------------------------------------
import org.apache.commons.io.IOUtils;
import org.apache.maven.plugin.AbstractMojo;
import org.apache.maven.plugin.MojoExecutionException;
import org.apache.maven.plugin.MojoFailureException;
//~--- JDK imports ------------------------------------------------------------
import java.io.IOException;
import java.io.PrintWriter;
import java.net.InetAddress;
import java.net.Socket;
/**
* @goal stop
* @author Sebastian Sdorra
*/
public class StopMojo extends AbstractMojo
{
/** Field description */
public static final String ADDRESS_LOCALHOST = "127.0.0.1";
//~--- methods --------------------------------------------------------------
/**
* Method description
*
*
* @throws MojoExecutionException
* @throws MojoFailureException
*/
@Override
public void execute() throws MojoExecutionException, MojoFailureException
{
Socket socket = null;
PrintWriter writer = null;
try
{
socket = new Socket(InetAddress.getByName(ADDRESS_LOCALHOST), stopPort);
writer = new PrintWriter(socket.getOutputStream());
writer.println(stopKey);
writer.flush();
}
catch (Exception ex)
{
getLog().warn("could not stop jetty", ex);
}
finally
{
IOUtils.closeQuietly(writer);
if (socket != null)
{
try
{
socket.close();
}
catch (IOException ex)
{
// ignore ex
}
}
}
}
//~--- get methods ----------------------------------------------------------
/**
* Method description
*
*
* @return
*/
public String getStopKey()
{
return stopKey;
}
/**
* Method description
*
*
* @return
*/
public int getStopPort()
{
return stopPort;
}
//~--- set methods ----------------------------------------------------------
/**
* Method description
*
*
* @param stopKey
*/
public void setStopKey(String stopKey)
{
this.stopKey = stopKey;
}
/**
* Method description
*
*
* @param stopPort
*/
public void setStopPort(int stopPort)
{
this.stopPort = stopPort;
}
//~--- fields ---------------------------------------------------------------
/**
* @parameter
*/
private String stopKey = "stop";
/**
* @parameter
*/
private int stopPort = 8085;
}