You are viewing a plain text version of this content. The canonical link for it is here.
Posted to scm@geronimo.apache.org by db...@apache.org on 2005/11/14 03:20:51 UTC
svn commit: r344019 - in /geronimo/gbuild/trunk: ./
src/main/java/org/apache/geronimo/gbuild/agent/
src/test/java/org/apache/geronimo/gbuild/agent/
Author: dblevins
Date: Sun Nov 13 18:20:45 2005
New Revision: 344019
URL: http://svn.apache.org/viewcvs?rev=344019&view=rev
Log:
Working prototype
Added:
geronimo/gbuild/trunk/src/main/java/org/apache/geronimo/gbuild/agent/ThreadContextContinuumStore.java
- copied, changed from r332501, geronimo/gbuild/trunk/src/main/java/org/apache/geronimo/gbuild/agent/ContinuumStoreContext.java
geronimo/gbuild/trunk/src/test/java/org/apache/geronimo/gbuild/agent/
geronimo/gbuild/trunk/src/test/java/org/apache/geronimo/gbuild/agent/CVS.java
geronimo/gbuild/trunk/src/test/java/org/apache/geronimo/gbuild/agent/Chmod.java
geronimo/gbuild/trunk/src/test/java/org/apache/geronimo/gbuild/agent/ContinuumBuildAgentTest.java
geronimo/gbuild/trunk/src/test/java/org/apache/geronimo/gbuild/agent/MainTest.java
geronimo/gbuild/trunk/src/test/java/org/apache/geronimo/gbuild/agent/SystemExecutable.java
Removed:
geronimo/gbuild/trunk/src/main/java/org/apache/geronimo/gbuild/agent/AbstractDistributedContinuumAction.java
geronimo/gbuild/trunk/src/main/java/org/apache/geronimo/gbuild/agent/ContinuumStoreContext.java
geronimo/gbuild/trunk/src/main/java/org/apache/geronimo/gbuild/agent/DistributedContinuumStore.java
geronimo/gbuild/trunk/src/main/java/org/apache/geronimo/gbuild/agent/DistrubutedBuildController.java
Modified:
geronimo/gbuild/trunk/pom.xml
geronimo/gbuild/trunk/project.xml
geronimo/gbuild/trunk/src/main/java/org/apache/geronimo/gbuild/agent/ContinuumBuildAgent.java
geronimo/gbuild/trunk/src/main/java/org/apache/geronimo/gbuild/agent/ExecuteDistributedBuilderContinuumAction.java
geronimo/gbuild/trunk/src/main/java/org/apache/geronimo/gbuild/agent/Main.java
geronimo/gbuild/trunk/src/main/java/org/apache/geronimo/gbuild/agent/MapContinuumStore.java
Modified: geronimo/gbuild/trunk/pom.xml
URL: http://svn.apache.org/viewcvs/geronimo/gbuild/trunk/pom.xml?rev=344019&r1=344018&r2=344019&view=diff
==============================================================================
--- geronimo/gbuild/trunk/pom.xml (original)
+++ geronimo/gbuild/trunk/pom.xml Sun Nov 13 18:20:45 2005
@@ -65,6 +65,11 @@
<version>1.0-alpha-2</version>
</dependency>
<dependency>
+ <groupId>org.apache.maven.scm</groupId>
+ <artifactId>maven-scm-provider-cvs</artifactId>
+ <version>1.0-beta-1-SNAPSHOT</version>
+ </dependency>
+ <dependency>
<groupId>geronimo-spec</groupId>
<artifactId>geronimo-spec-j2ee</artifactId>
<version>1.4-rc4</version>
Modified: geronimo/gbuild/trunk/project.xml
URL: http://svn.apache.org/viewcvs/geronimo/gbuild/trunk/project.xml?rev=344019&r1=344018&r2=344019&view=diff
==============================================================================
--- geronimo/gbuild/trunk/project.xml (original)
+++ geronimo/gbuild/trunk/project.xml Sun Nov 13 18:20:45 2005
@@ -46,6 +46,11 @@
<version>1.0-alpha-6</version>
</dependency>
<dependency>
+ <groupId>org.apache.maven.scm</groupId>
+ <artifactId>maven-scm-provider-cvs</artifactId>
+ <version>1.0-beta-1-SNAPSHOT</version>
+ </dependency>
+ <dependency>
<groupId>geronimo-spec</groupId>
<artifactId>geronimo-spec-j2ee</artifactId>
<version>1.4-rc4</version>
Modified: geronimo/gbuild/trunk/src/main/java/org/apache/geronimo/gbuild/agent/ContinuumBuildAgent.java
URL: http://svn.apache.org/viewcvs/geronimo/gbuild/trunk/src/main/java/org/apache/geronimo/gbuild/agent/ContinuumBuildAgent.java?rev=344019&r1=344018&r2=344019&view=diff
==============================================================================
--- geronimo/gbuild/trunk/src/main/java/org/apache/geronimo/gbuild/agent/ContinuumBuildAgent.java (original)
+++ geronimo/gbuild/trunk/src/main/java/org/apache/geronimo/gbuild/agent/ContinuumBuildAgent.java Sun Nov 13 18:20:45 2005
@@ -17,23 +17,27 @@
package org.apache.geronimo.gbuild.agent;
import org.activemq.ActiveMQConnectionFactory;
-import org.apache.maven.continuum.store.ContinuumStore;
import org.apache.maven.continuum.buildcontroller.BuildController;
+import org.apache.maven.continuum.store.ContinuumStore;
+import org.apache.maven.continuum.configuration.ConfigurationService;
+import org.apache.maven.continuum.configuration.ConfigurationLoadingException;
import javax.jms.Connection;
+import javax.jms.DeliveryMode;
import javax.jms.ExceptionListener;
import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.MessageConsumer;
-import javax.jms.Session;
-import javax.jms.MapMessage;
-import javax.jms.Queue;
import javax.jms.MessageProducer;
-import javax.jms.DeliveryMode;
-import javax.jms.TextMessage;
+import javax.jms.Queue;
+import javax.jms.Session;
import javax.jms.Topic;
+import javax.jms.ObjectMessage;
import java.net.InetAddress;
import java.net.UnknownHostException;
+import java.io.File;
+import java.util.Map;
+import java.util.HashMap;
/**
* @version $Rev$ $Date$
@@ -66,6 +70,11 @@
private BuildController controller;
/**
+ * @plexus.requirement
+ */
+ private ConfigurationService configurationService;
+
+ /**
* @plexus.configuration
*/
private String contributor;
@@ -78,52 +87,64 @@
/**
* @plexus.configuration
*/
- private String url;
+ private String coordinatorUrl;
/**
* @plexus.configuration
*/
- private String buildQueueSubject;
+ private String buildTaskQueue;
/**
* @plexus.configuration
*/
- private String buildResultsSubject;
+ private String buildResultsTopic;
+
+ /**
+ * @plexus.configuration
+ */
+ private String workingDirectory;
+
+ /**
+ * @plexus.configuration
+ */
+ private String buildOutputDirectory;
private boolean run;
public void run() {
try {
+ init();
run = true;
- // Create a ConnectionFactory
- ActiveMQConnectionFactory connectionFactory = new ActiveMQConnectionFactory(url);
-
- // Create a Connection
- Connection connection = connectionFactory.createConnection();
-
- connection.start();
-
- connection.setExceptionListener(this);
+ Connection connection = null;
+ try {
+ connection = createConnection(coordinatorUrl);
+ } catch (Throwable e) {
+ System.out.println("Could not create connection to: "+coordinatorUrl);
+ e.printStackTrace();
+ return;
+ }
// Create a Session
Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
- MessageConsumer buildConsumer = createQueueConsumer(session, buildQueueSubject);
+ MessageConsumer buildConsumer = createQueueConsumer(session, buildTaskQueue);
- MessageProducer resultsProducer = createTopicProducer(session, buildResultsSubject);
+ MessageProducer resultsProducer = createTopicProducer(session, buildResultsTopic);
while (run) {
// Wait for a message
Message message = buildConsumer.receive();
- if (message instanceof MapMessage) {
+ if (message instanceof ObjectMessage) {
- MapMessage mapMessage = (MapMessage) message;
+ ObjectMessage objectMessage = (ObjectMessage) message;
+
+ Map mapMessage = (Map) objectMessage.getObject();
ContinuumStore store = getContinuumStore(mapMessage);
- ContinuumStoreContext.setStore(store);
+ ThreadContextContinuumStore.setStore(store);
int projectId = getProjectId(mapMessage);
@@ -131,9 +152,9 @@
int trigger = getTrigger(mapMessage);
- controller.build(projectId, buildDefinitionId, trigger);
+ build(projectId, buildDefinitionId, trigger);
- MapMessage results = session.createMapMessage();
+ HashMap results = new HashMap();
setStore(results, store);
@@ -157,7 +178,9 @@
setAdminAddress(results);
- resultsProducer.send(results);
+ ObjectMessage resultMessage = session.createObjectMessage(results);
+
+ resultsProducer.send(resultMessage);
} else {
System.out.println("Incorect message type: " + message.getClass().getName());
@@ -170,65 +193,88 @@
} catch (Exception e) {
System.out.println("Caught: " + e);
e.printStackTrace();
+ System.out.println("ContinuumBuildAgent.run");
}
}
- private void setAdminAddress(MapMessage results) throws JMSException {
- results.setString(KEY_ADMIN_ADDRESS, adminAddress);
+ public void init() throws ConfigurationLoadingException {
+ configurationService.load();
+ configurationService.setWorkingDirectory(new File(workingDirectory));
+ configurationService.setBuildOutputDirectory(new File(buildOutputDirectory));
+ }
+
+ public void build(int projectId, int buildDefinitionId, int trigger) {
+ controller.build(projectId, buildDefinitionId, trigger);
}
- private void setContributor(MapMessage results) throws JMSException {
- results.setString(KEY_CONTRIBUTOR, contributor);
+ private Connection createConnection(String coordinatorUrl) throws JMSException {
+ // Create a ConnectionFactory
+ ActiveMQConnectionFactory connectionFactory = new ActiveMQConnectionFactory(coordinatorUrl);
+
+ // Create a Connection
+ Connection connection = connectionFactory.createConnection();
+
+ connection.start();
+
+ connection.setExceptionListener(this);
+
+ return connection;
}
- private void setHostInformation(MapMessage results) throws UnknownHostException, JMSException {
+ private void setAdminAddress(Map results) throws JMSException {
+ results.put(KEY_ADMIN_ADDRESS, adminAddress);
+ }
+
+ private void setContributor(Map results) throws JMSException {
+ results.put(KEY_CONTRIBUTOR, contributor);
+ }
+
+ private void setHostInformation(Map results) throws UnknownHostException, JMSException {
InetAddress localHost = InetAddress.getLocalHost();
- results.setString(KEY_HOST_NAME, localHost.getHostName());
- results.setString(KEY_HOST_ADDRESS, localHost.getHostAddress());
+ results.put(KEY_HOST_NAME, localHost.getHostName());
+ results.put(KEY_HOST_ADDRESS, localHost.getHostAddress());
}
- private void setSystemProperty(MapMessage results, String name) throws JMSException {
- results.setString(name, System.getProperty(name));
+ private void setSystemProperty(Map results, String name) throws JMSException {
+ results.put(name, System.getProperty(name));
}
- private void setStore(MapMessage results, ContinuumStore store) throws JMSException {
- results.setObject(KEY_STORE, store);
+ private void setStore(Map results, ContinuumStore store) throws JMSException {
+ results.put(KEY_STORE, store);
}
- private void setBuildDefinitionId(MapMessage results, int buildDefinitionId) throws JMSException {
- results.setInt(KEY_BUILD_DEFINITION_ID, buildDefinitionId);
+ private void setBuildDefinitionId(Map results, int buildDefinitionId) throws JMSException {
+ results.put(KEY_BUILD_DEFINITION_ID, new Integer(buildDefinitionId));
}
- private void setTrigger(MapMessage results, int trigger) throws JMSException {
- results.setInt(KEY_TRIGGER, trigger);
+ private void setTrigger(Map results, int trigger) throws JMSException {
+ results.put(KEY_TRIGGER, new Integer(trigger));
}
- private void setProjectId(MapMessage results, int projectId) throws JMSException {
- results.setInt(KEY_PROJECT_ID, projectId);
+ private void setProjectId(Map results, int projectId) throws JMSException {
+ results.put(KEY_PROJECT_ID, new Integer(projectId));
}
- private int getTrigger(MapMessage mapMessage) throws JMSException {
- return mapMessage.getIntProperty(KEY_TRIGGER);
+ private int getTrigger(Map mapMessage) throws JMSException {
+ return ((Integer)mapMessage.get(KEY_TRIGGER)).intValue();
}
- private int getBuildDefinitionId(MapMessage mapMessage) throws JMSException {
- return mapMessage.getIntProperty(KEY_BUILD_DEFINITION_ID);
+ private int getBuildDefinitionId(Map mapMessage) throws JMSException {
+ return ((Integer)mapMessage.get(KEY_BUILD_DEFINITION_ID)).intValue();
}
- private int getProjectId(MapMessage mapMessage) throws JMSException {
- return mapMessage.getIntProperty(KEY_PROJECT_ID);
+ private int getProjectId(Map mapMessage) throws JMSException {
+ return ((Integer)mapMessage.get(KEY_PROJECT_ID)).intValue();
}
- private ContinuumStore getContinuumStore(MapMessage mapMessage) throws JMSException {
- return (ContinuumStore) mapMessage.getObject(KEY_STORE);
+ private ContinuumStore getContinuumStore(Map mapMessage) throws JMSException {
+ return (ContinuumStore) mapMessage.get(KEY_STORE);
}
private MessageConsumer createQueueConsumer(Session session, String subject) throws JMSException {
Queue queue = session.createQueue(subject);
- MessageConsumer consumer = session.createConsumer(queue);
-
- return consumer;
+ return session.createConsumer(queue);
}
private MessageProducer createTopicProducer(Session session, String subject) throws JMSException {
Modified: geronimo/gbuild/trunk/src/main/java/org/apache/geronimo/gbuild/agent/ExecuteDistributedBuilderContinuumAction.java
URL: http://svn.apache.org/viewcvs/geronimo/gbuild/trunk/src/main/java/org/apache/geronimo/gbuild/agent/ExecuteDistributedBuilderContinuumAction.java?rev=344019&r1=344018&r2=344019&view=diff
==============================================================================
--- geronimo/gbuild/trunk/src/main/java/org/apache/geronimo/gbuild/agent/ExecuteDistributedBuilderContinuumAction.java (original)
+++ geronimo/gbuild/trunk/src/main/java/org/apache/geronimo/gbuild/agent/ExecuteDistributedBuilderContinuumAction.java Sun Nov 13 18:20:45 2005
@@ -27,6 +27,8 @@
import org.apache.maven.continuum.project.ContinuumProjectState;
import org.apache.maven.continuum.store.ContinuumStore;
import org.apache.maven.continuum.utils.ContinuumUtils;
+import org.apache.maven.continuum.configuration.ConfigurationService;
+import org.apache.maven.continuum.core.action.AbstractContinuumAction;
import java.io.File;
import java.util.Date;
@@ -35,13 +37,12 @@
/**
* @version $Rev$ $Date$
*/
-public class ExecuteDistributedBuilderContinuumAction extends AbstractDistributedContinuumAction {
+public class ExecuteDistributedBuilderContinuumAction extends AbstractContinuumAction {
- // ----------------------------------------------------------------------
- // Keys for the values that can be in the context
- // ----------------------------------------------------------------------
-
- public static final String KEY_BUILD_OUTPUT_FILE = "build-output-file";
+ /**
+ * @plexus.requirement
+ */
+ private ConfigurationService configurationService;
/**
* @plexus.requirement
@@ -65,13 +66,13 @@
// Get parameters from the context
// ----------------------------------------------------------------------
- Project project = getProject(context);
+ Project project = store.getProjectWithBuildDetails( getProjectId( context ) );
- int trigger = getTrigger(context);
+ int trigger = getTrigger( context );
- ScmResult scmResult = getUpdateScmResult(context);
+ ScmResult scmResult = getUpdateScmResult( context );
- ContinuumBuildExecutor buildExecutor = buildExecutorManager.getBuildExecutor(project.getExecutorId());
+ ContinuumBuildExecutor buildExecutor = buildExecutorManager.getBuildExecutor( project.getExecutorId() );
// ----------------------------------------------------------------------
// Make the build
@@ -85,7 +86,7 @@
build.setTrigger(trigger);
- BuildDefinition buildDefinition = getBuildDefinition(context);
+ BuildDefinition buildDefinition = store.getBuildDefinition( getBuildDefinitionId( context ) );
build.setScmResult(scmResult);
@@ -98,7 +99,7 @@
try {
notifier.runningGoals(project, build);
- File buildOutputFile = getBuildOutputFile( context );
+ File buildOutputFile = configurationService.getBuildOutputFile( build.getId(), project.getId() );
ContinuumBuildExecutionResult result = buildExecutor.build(project, buildDefinition, buildOutputFile);
@@ -118,6 +119,8 @@
if (build.getState() == ContinuumProjectState.OK) {
project.setBuildNumber(project.getBuildNumber() + 1);
+
+ project.setState(ContinuumProjectState.OK);
}
project.setLatestBuildId(build.getId());
@@ -140,13 +143,6 @@
notifier.goalsCompleted(project, build);
}
- }
-
- private File getBuildOutputFile(Map context) {
-
- String fileName = getString( context, KEY_BUILD_OUTPUT_FILE );
-
- return new File( fileName );
}
}
Modified: geronimo/gbuild/trunk/src/main/java/org/apache/geronimo/gbuild/agent/Main.java
URL: http://svn.apache.org/viewcvs/geronimo/gbuild/trunk/src/main/java/org/apache/geronimo/gbuild/agent/Main.java?rev=344019&r1=344018&r2=344019&view=diff
==============================================================================
--- geronimo/gbuild/trunk/src/main/java/org/apache/geronimo/gbuild/agent/Main.java (original)
+++ geronimo/gbuild/trunk/src/main/java/org/apache/geronimo/gbuild/agent/Main.java Sun Nov 13 18:20:45 2005
@@ -29,6 +29,7 @@
BuildAgent buildAgent = (BuildAgent) embedder.lookup(BuildAgent.ROLE);
Thread agentThread = new Thread(buildAgent);
+ agentThread.setDaemon(false);
agentThread.start();
}
Modified: geronimo/gbuild/trunk/src/main/java/org/apache/geronimo/gbuild/agent/MapContinuumStore.java
URL: http://svn.apache.org/viewcvs/geronimo/gbuild/trunk/src/main/java/org/apache/geronimo/gbuild/agent/MapContinuumStore.java?rev=344019&r1=344018&r2=344019&view=diff
==============================================================================
--- geronimo/gbuild/trunk/src/main/java/org/apache/geronimo/gbuild/agent/MapContinuumStore.java (original)
+++ geronimo/gbuild/trunk/src/main/java/org/apache/geronimo/gbuild/agent/MapContinuumStore.java Sun Nov 13 18:20:45 2005
@@ -16,14 +16,16 @@
*/
package org.apache.geronimo.gbuild.agent;
+import org.apache.maven.continuum.model.project.BuildDefinition;
import org.apache.maven.continuum.model.project.BuildResult;
import org.apache.maven.continuum.model.project.Project;
+import org.apache.maven.continuum.model.system.SystemConfiguration;
import org.apache.maven.continuum.store.ContinuumObjectNotFoundException;
import org.apache.maven.continuum.store.ContinuumStoreException;
+import java.io.Serializable;
import java.util.HashMap;
import java.util.Map;
-import java.io.Serializable;
/**
* @version $Rev$ $Date$
@@ -53,11 +55,34 @@
}
public void addBuildResult(Project project, BuildResult build) throws ContinuumStoreException, ContinuumObjectNotFoundException {
+ updateObject(build, build.getId());
+
project.setLatestBuildId(build.getId());
project.setState(build.getState());
project.addBuildResult(build);
+ }
+
+ public BuildDefinition getBuildDefinition(int buildDefinitionId)
+ throws ContinuumStoreException, ContinuumObjectNotFoundException {
+ return (BuildDefinition) getObjectById(BuildDefinition.class, buildDefinitionId);
+ }
+
+ public BuildDefinition storeBuildDefinition(BuildDefinition buildDefinition)
+ throws ContinuumStoreException {
+ updateObject(buildDefinition, buildDefinition.getId());
+
+ return buildDefinition;
+ }
+
+ public SystemConfiguration getSystemConfiguration() throws ContinuumStoreException {
+ return (SystemConfiguration) getMap(SystemConfiguration.class).get(new Integer(0));
+ }
+
+ public SystemConfiguration addSystemConfiguration(SystemConfiguration systemConf) {
+ updateObject(systemConf, 0);
+ return systemConf;
}
private void updateObject(Object object, int id) {
Copied: geronimo/gbuild/trunk/src/main/java/org/apache/geronimo/gbuild/agent/ThreadContextContinuumStore.java (from r332501, geronimo/gbuild/trunk/src/main/java/org/apache/geronimo/gbuild/agent/ContinuumStoreContext.java)
URL: http://svn.apache.org/viewcvs/geronimo/gbuild/trunk/src/main/java/org/apache/geronimo/gbuild/agent/ThreadContextContinuumStore.java?p2=geronimo/gbuild/trunk/src/main/java/org/apache/geronimo/gbuild/agent/ThreadContextContinuumStore.java&p1=geronimo/gbuild/trunk/src/main/java/org/apache/geronimo/gbuild/agent/ContinuumStoreContext.java&r1=332501&r2=344019&rev=344019&view=diff
==============================================================================
--- geronimo/gbuild/trunk/src/main/java/org/apache/geronimo/gbuild/agent/ContinuumStoreContext.java (original)
+++ geronimo/gbuild/trunk/src/main/java/org/apache/geronimo/gbuild/agent/ThreadContextContinuumStore.java Sun Nov 13 18:20:45 2005
@@ -38,7 +38,7 @@
/**
* @version $Rev$ $Date$
*/
-public class ContinuumStoreContext implements ContinuumStore {
+public class ThreadContextContinuumStore implements ContinuumStore {
private static ThreadLocal stores = new ThreadLocal();
Added: geronimo/gbuild/trunk/src/test/java/org/apache/geronimo/gbuild/agent/CVS.java
URL: http://svn.apache.org/viewcvs/geronimo/gbuild/trunk/src/test/java/org/apache/geronimo/gbuild/agent/CVS.java?rev=344019&view=auto
==============================================================================
--- geronimo/gbuild/trunk/src/test/java/org/apache/geronimo/gbuild/agent/CVS.java (added)
+++ geronimo/gbuild/trunk/src/test/java/org/apache/geronimo/gbuild/agent/CVS.java Sun Nov 13 18:20:45 2005
@@ -0,0 +1,52 @@
+/**
+ *
+ * Copyright 2004 The Apache Software Foundation
+ *
+ * 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 org.apache.geronimo.gbuild.agent;
+
+import org.codehaus.plexus.util.cli.CommandLineException;
+
+import java.io.File;
+import java.io.IOException;
+
+/**
+ * @version $Rev$ $Date$
+ */
+public class CVS extends SystemExecutable {
+ private final String cmd = "cvs";
+ private final File cvsroot;
+
+ public CVS(String cvsroot) {
+ this(new File(cvsroot));
+ }
+
+ public CVS(File cvsroot) {
+ this.cvsroot = cvsroot.getAbsoluteFile();
+ }
+
+ public File getCvsroot() {
+ return cvsroot;
+ }
+
+ public void _import(File root, String artifactId) throws CommandLineException {
+ system(root, cmd, "-d " + cvsroot.getAbsolutePath() + " import -m yo_yo " + artifactId + " continuum_test start");
+ }
+
+ public void init() throws IOException, CommandLineException {
+ MainTest.deleteAndCreateDirectory(cvsroot);
+
+ system(cvsroot, cmd, " -d " + cvsroot.getAbsolutePath() + " init");
+ }
+}
Added: geronimo/gbuild/trunk/src/test/java/org/apache/geronimo/gbuild/agent/Chmod.java
URL: http://svn.apache.org/viewcvs/geronimo/gbuild/trunk/src/test/java/org/apache/geronimo/gbuild/agent/Chmod.java?rev=344019&view=auto
==============================================================================
--- geronimo/gbuild/trunk/src/test/java/org/apache/geronimo/gbuild/agent/Chmod.java (added)
+++ geronimo/gbuild/trunk/src/test/java/org/apache/geronimo/gbuild/agent/Chmod.java Sun Nov 13 18:20:45 2005
@@ -0,0 +1,31 @@
+/**
+ *
+ * Copyright 2004 The Apache Software Foundation
+ *
+ * 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 org.apache.geronimo.gbuild.agent;
+
+import org.codehaus.plexus.util.cli.CommandLineException;
+
+import java.io.File;
+
+/**
+ * @version $Rev$ $Date$
+ */
+public class Chmod extends SystemExecutable {
+ public static void exec(File root, String opts, File script) throws CommandLineException {
+ system( root, "chmod", opts +" " + script.getAbsolutePath() );
+
+ }
+}
Added: geronimo/gbuild/trunk/src/test/java/org/apache/geronimo/gbuild/agent/ContinuumBuildAgentTest.java
URL: http://svn.apache.org/viewcvs/geronimo/gbuild/trunk/src/test/java/org/apache/geronimo/gbuild/agent/ContinuumBuildAgentTest.java?rev=344019&view=auto
==============================================================================
--- geronimo/gbuild/trunk/src/test/java/org/apache/geronimo/gbuild/agent/ContinuumBuildAgentTest.java (added)
+++ geronimo/gbuild/trunk/src/test/java/org/apache/geronimo/gbuild/agent/ContinuumBuildAgentTest.java Sun Nov 13 18:20:45 2005
@@ -0,0 +1,124 @@
+package org.apache.geronimo.gbuild.agent;
+/**
+ * @version $Rev$ $Date$
+ */
+
+import junit.framework.*;
+import org.apache.geronimo.gbuild.agent.ContinuumBuildAgent;
+import org.apache.maven.continuum.model.project.Project;
+import org.apache.maven.continuum.model.project.BuildDefinition;
+import org.apache.maven.continuum.model.project.BuildResult;
+import org.apache.maven.continuum.execution.shell.ShellBuildExecutor;
+import org.apache.maven.continuum.project.ContinuumProjectState;
+import org.codehaus.plexus.util.cli.CommandLineException;
+import org.codehaus.plexus.util.FileUtils;
+import org.codehaus.plexus.embed.Embedder;
+
+import java.io.File;
+import java.io.IOException;
+
+public class ContinuumBuildAgentTest extends TestCase {
+ ContinuumBuildAgent continuumBuildAgent;
+
+ private CVS cvs;
+ private File shellScript;
+
+ protected void setUp() throws Exception {
+
+ File root = new File("/Users/dblevins/work/gbuild/trunk/target/it").getCanonicalFile();
+ File cvsroot = new File(root, "cvs-root");
+ File module = new File(root, "shell");
+
+ deleteAndCreateDirectory( module );
+
+ shellScript = createScript(module);
+
+ cvs = new CVS(cvsroot);
+ cvs.init();
+ cvs._import(module, "shell");
+
+ }
+
+ public void testBuild() throws Exception {
+
+ Project project = new Project();
+ project.setId(10);
+ project.setScmUrl("scm|cvs|local|" + cvs.getCvsroot().getAbsolutePath() + "|shell");
+ project.setName("Shell Project");
+ project.setVersion("3.0");
+ project.setExecutorId(ShellBuildExecutor.ID);
+ project.setState(ContinuumProjectState.OK);
+
+ BuildDefinition bd = new BuildDefinition();
+ bd.setId(20);
+ bd.setBuildFile(shellScript.getAbsolutePath());
+ bd.setArguments("");
+
+ project.addBuildDefinition(bd);
+
+ MapContinuumStore store = new MapContinuumStore();
+
+ store.updateProject(project);
+ store.storeBuildDefinition(bd);
+
+ ThreadContextContinuumStore.setStore(store);
+
+ Embedder embedder = new Embedder();
+ embedder.start();
+ ContinuumBuildAgent buildAgent = (ContinuumBuildAgent) embedder.lookup(BuildAgent.ROLE);
+
+ buildAgent.init();
+ buildAgent.build(project.getId(), bd.getId(), 1);
+
+ int latestBuildId = project.getLatestBuildId();
+ BuildResult buildResult = store.getBuildResult(latestBuildId);
+
+ assertNotNull("buildResult",buildResult);
+ assertEquals("buildResult.getState",ContinuumProjectState.OK, buildResult.getState());
+ assertEquals("project.getState",ContinuumProjectState.OK, project.getState());
+ }
+
+ public static void deleteAndCreateDirectory(File directory)
+ throws IOException {
+ if (directory.isDirectory()) {
+ FileUtils.deleteDirectory(directory);
+ }
+
+ assertTrue("Could not make directory " + directory, directory.mkdirs());
+ }
+
+ private File createScript(File module) throws IOException, CommandLineException {
+ File script;
+
+ String EOL = System.getProperty( "line.separator" );
+
+ boolean isWindows = System.getProperty("os.name").startsWith("Windows");
+
+ boolean isCygwin = "true".equals(System.getProperty("cygwin"));
+
+ if ( isWindows && !isCygwin ) {
+
+ script = new File( module, "script.bat" );
+
+ String content = "@ECHO OFF" + EOL
+ + "IF \"%*\" == \"\" GOTO end" + EOL
+ + "FOR %%a IN (%*) DO ECHO %%a" + EOL
+ + ":end" + EOL;
+
+ FileUtils.fileWrite( script.getAbsolutePath(), content );
+
+ } else {
+
+ script = new File( module, "script.sh" );
+
+ String content = "#!/bin/bash" + EOL + "for arg in \"$@\"; do echo $arg ; done"+EOL;
+
+ FileUtils.fileWrite( script.getAbsolutePath(), content );
+
+ Chmod.exec(module, "+x", script);
+ }
+
+ return script;
+ }
+
+}
\ No newline at end of file
Added: geronimo/gbuild/trunk/src/test/java/org/apache/geronimo/gbuild/agent/MainTest.java
URL: http://svn.apache.org/viewcvs/geronimo/gbuild/trunk/src/test/java/org/apache/geronimo/gbuild/agent/MainTest.java?rev=344019&view=auto
==============================================================================
--- geronimo/gbuild/trunk/src/test/java/org/apache/geronimo/gbuild/agent/MainTest.java (added)
+++ geronimo/gbuild/trunk/src/test/java/org/apache/geronimo/gbuild/agent/MainTest.java Sun Nov 13 18:20:45 2005
@@ -0,0 +1,204 @@
+package org.apache.geronimo.gbuild.agent;
+/**
+ * @version $Rev$ $Date$
+ */
+
+import junit.framework.TestCase;
+import org.activemq.ActiveMQConnectionFactory;
+import org.apache.maven.continuum.model.project.BuildDefinition;
+import org.apache.maven.continuum.model.project.Project;
+import org.apache.maven.continuum.execution.shell.ShellBuildExecutor;
+import org.codehaus.plexus.util.FileUtils;
+import org.codehaus.plexus.util.cli.CommandLineException;
+
+import javax.jms.Connection;
+import javax.jms.DeliveryMode;
+import javax.jms.Destination;
+import javax.jms.MessageProducer;
+import javax.jms.Session;
+import javax.jms.Message;
+import java.io.File;
+import java.io.IOException;
+import java.util.HashMap;
+
+public class MainTest extends TestCase {
+
+ static {
+ org.apache.log4j.BasicConfigurator.configure();
+ }
+
+ private CVS cvs;
+ private File shellScript;
+
+ public void testMain() throws Exception {
+ String[] args = new String[]{};
+
+// thread(new ContinuumBroker(args), false);
+//
+// Thread.sleep(5000);
+
+// thread(new ContinuumBuildProducers(), false);
+// Thread.sleep(5000);
+
+// Main.main(args);
+
+ //Thread.sleep(60000);
+
+ }
+
+ protected void setUp() throws Exception {
+
+ File root = new File("/Users/dblevins/work/gbuild/trunk/target/it").getCanonicalFile();
+ File cvsroot = new File(root, "cvs-root");
+ File module = new File(root, "shell");
+
+ deleteAndCreateDirectory( module );
+
+ shellScript = createScript(module);
+
+ cvs = new CVS(cvsroot);
+ cvs.init();
+ cvs._import(module,"shell");
+
+ }
+
+ private File createScript(File module) throws IOException, CommandLineException {
+ File script;
+
+ String EOL = System.getProperty( "line.separator" );
+
+ boolean isWindows = System.getProperty("os.name").startsWith("Windows");
+
+ boolean isCygwin = "true".equals(System.getProperty("cygwin"));
+
+ if ( isWindows && !isCygwin ) {
+
+ script = new File( module, "script.bat" );
+
+ String content = "@ECHO OFF" + EOL
+ + "IF \"%*\" == \"\" GOTO end" + EOL
+ + "FOR %%a IN (%*) DO ECHO %%a" + EOL
+ + ":end" + EOL;
+
+ FileUtils.fileWrite( script.getAbsolutePath(), content );
+
+ } else {
+
+ script = new File( module, "script.sh" );
+
+ String content = "#!/bin/bash" + EOL + "for arg in \"$@\"; do echo $arg ; done"+EOL;
+
+ FileUtils.fileWrite( script.getAbsolutePath(), content );
+
+ Chmod.exec(module, "+x", script);
+ }
+
+ return script;
+ }
+
+ public static void thread(Runnable runnable, boolean daemon) {
+ Thread brokerThread = new Thread(runnable);
+ brokerThread.setDaemon(daemon);
+ brokerThread.start();
+ }
+
+ public static class ContinuumBroker implements Runnable {
+ private final String[] args;
+
+ public ContinuumBroker(String[] args) {
+ this.args = args;
+ }
+
+ public void run() {
+ org.activemq.broker.impl.Main.main(args);
+ }
+
+ public static void main(String[] args) {
+ org.apache.log4j.BasicConfigurator.configure();
+ new ContinuumBroker(args).run();
+ }
+ }
+
+ public static class Producer {
+ public static void main(String[] args) throws Exception {
+ MainTest test = new MainTest();
+ test.setUp();
+ test.new ContinuumBuildProducers().run();
+ }
+ }
+
+ public class ContinuumBuildProducers implements Runnable {
+
+ public void run() {
+ try {
+ // Create a ConnectionFactory
+ ActiveMQConnectionFactory connectionFactory = new ActiveMQConnectionFactory("tcp://localhost:61616");
+
+ // Create a Connection
+ Connection connection = connectionFactory.createConnection();
+ connection.start();
+
+ // Create a Session
+ Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
+
+ // Create the destination (Topic or Queue)
+ Destination destination = session.createQueue("BUILD.QUEUE");
+
+ // Create a MessageProducer from the Session to the Topic or Queue
+ MessageProducer producer = session.createProducer(destination);
+ producer.setDeliveryMode(DeliveryMode.NON_PERSISTENT);
+
+
+
+ Project project = new Project();
+ project.setId(10);
+ project.setScmUrl("scm|cvs|local|" + cvs.getCvsroot().getAbsolutePath() + "|shell");
+ project.setName("Shell Project");
+ project.setVersion("3.0");
+ project.setExecutorId(ShellBuildExecutor.ID);
+
+ BuildDefinition bd = new BuildDefinition();
+ bd.setId(20);
+ bd.setBuildFile(shellScript.getAbsolutePath());
+ bd.setArguments("");
+
+ project.addBuildDefinition(bd);
+
+ MapContinuumStore store = new MapContinuumStore();
+
+ store.updateProject(project);
+
+ HashMap map = new HashMap();
+ map.put(ContinuumBuildAgent.KEY_STORE, store);
+ map.put(ContinuumBuildAgent.KEY_PROJECT_ID, new Integer(project.getId()));
+ map.put(ContinuumBuildAgent.KEY_BUILD_DEFINITION_ID, new Integer(bd.getId()));
+ map.put(ContinuumBuildAgent.KEY_TRIGGER, new Integer(0));
+
+ // Create a messages
+ Message message = session.createObjectMessage(map);
+
+ producer.send(message);
+
+ // Clean up
+ session.close();
+ connection.close();
+ }
+ catch (Exception e) {
+ System.out.println("Caught: " + e);
+ e.printStackTrace();
+ }
+ }
+
+ }
+
+
+
+ public static void deleteAndCreateDirectory(File directory)
+ throws IOException {
+ if (directory.isDirectory()) {
+ FileUtils.deleteDirectory(directory);
+ }
+
+ assertTrue("Could not make directory " + directory, directory.mkdirs());
+ }
+}
\ No newline at end of file
Added: geronimo/gbuild/trunk/src/test/java/org/apache/geronimo/gbuild/agent/SystemExecutable.java
URL: http://svn.apache.org/viewcvs/geronimo/gbuild/trunk/src/test/java/org/apache/geronimo/gbuild/agent/SystemExecutable.java?rev=344019&view=auto
==============================================================================
--- geronimo/gbuild/trunk/src/test/java/org/apache/geronimo/gbuild/agent/SystemExecutable.java (added)
+++ geronimo/gbuild/trunk/src/test/java/org/apache/geronimo/gbuild/agent/SystemExecutable.java Sun Nov 13 18:20:45 2005
@@ -0,0 +1,78 @@
+/**
+ *
+ * Copyright 2004 The Apache Software Foundation
+ *
+ * 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 org.apache.geronimo.gbuild.agent;
+
+import org.codehaus.plexus.util.cli.CommandLineException;
+import org.codehaus.plexus.util.cli.Commandline;
+import org.codehaus.plexus.util.cli.CommandLineUtils;
+
+import java.io.File;
+
+import junit.framework.Assert;
+
+/**
+ * @version $Rev$ $Date$
+ */
+public class SystemExecutable {
+
+ public static void system(File workingDirectory, String cmd, String arguments)
+ throws CommandLineException {
+ system(workingDirectory, cmd, new String[]{arguments});
+ }
+
+ public static void system(File workingDirectory, String cmd, String[] arguments)
+ throws CommandLineException {
+ Commandline commandline = new Commandline();
+
+ commandline.setExecutable(cmd);
+
+ commandline.setWorkingDirectory(workingDirectory.getAbsolutePath());
+
+ for (int i = 0; i < arguments.length; i++) {
+ String argument = arguments[i];
+
+ commandline.createArgument().setLine(argument);
+ }
+
+ CommandLineUtils.StringStreamConsumer stderr = new CommandLineUtils.StringStreamConsumer();
+
+ CommandLineUtils.StringStreamConsumer stdout = new CommandLineUtils.StringStreamConsumer();
+
+ int exitCode = CommandLineUtils.executeCommandLine(commandline, stdout, stderr);
+
+ if (exitCode != 0) {
+ System.err.println("Error while executing command: " + commandline.toString());
+ System.err.println("workingDirectory: " + workingDirectory.getAbsolutePath());
+ System.err.println("Exit code: " + exitCode);
+
+ System.err.println("Standard output:");
+ line();
+ System.err.println(stdout.getOutput());
+ line();
+ System.err.println("Standard Error:");
+ line();
+ System.err.println(stderr.getOutput());
+ line();
+
+ Assert.fail("The command failed.");
+ }
+ }
+
+ private static void line() {
+ System.err.println("-------------------------------------------------------------------------------");
+ }
+}