/*
* Copyright (C) 2008 Universidade Federal de Campina Grande
*
* This file is part of OurGrid.
*
* OurGrid is free software: you can redistribute it and/or modify it under the
* terms of the GNU Lesser General Public License as published by the Free
* Software Foundation, either version 3 of the License, or (at your option)
* any later version.
*
* This program is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License
* for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/
package org.ourgrid.acceptance.util;
import java.util.Collection;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import org.junit.After;
import org.junit.Before;
import org.ourgrid.acceptance.util.broker.TestJob;
import org.ourgrid.broker.BrokerConfiguration;
import org.ourgrid.broker.BrokerConstants;
import org.ourgrid.broker.BrokerServerModule;
import org.ourgrid.broker.communication.operations.GetOperation;
import org.ourgrid.broker.communication.operations.InitOperation;
import org.ourgrid.broker.communication.operations.Operation;
import org.ourgrid.broker.communication.receiver.LocalWorkerProviderClientReceiver;
import org.ourgrid.broker.util.RandomRequestIDGenerator;
import org.ourgrid.broker.util.RequestIDGenerator;
import org.ourgrid.common.config.Configuration;
import org.ourgrid.common.interfaces.LocalWorkerProviderClient;
import org.ourgrid.common.interfaces.WorkerClient;
import org.ourgrid.common.interfaces.control.BrokerControl;
import org.ourgrid.common.interfaces.to.IncomingHandle;
import org.ourgrid.common.interfaces.to.OutgoingHandle;
import org.ourgrid.common.interfaces.to.RequestSpecification;
import org.ourgrid.common.job.GridProcess;
import org.ourgrid.common.job.Task;
import org.ourgrid.common.specification.job.JobSpecification;
import br.edu.ufcg.lsd.commune.Module;
import br.edu.ufcg.lsd.commune.container.ObjectDeployment;
import br.edu.ufcg.lsd.commune.context.ModuleContext;
import br.edu.ufcg.lsd.commune.identification.ContainerID;
import br.edu.ufcg.lsd.commune.identification.DeploymentID;
import br.edu.ufcg.lsd.commune.processor.filetransfer.IncomingTransferHandle;
import br.edu.ufcg.lsd.commune.processor.filetransfer.OutgoingTransferHandle;
public class BrokerAcceptanceUtil extends AcceptanceUtil{
private RequestIDGenerator requestIDGenerator;
public BrokerAcceptanceUtil(ModuleContext context) {
super(context);
this.requestIDGenerator = new RandomRequestIDGenerator();
}
@Before
public static void setUp() throws Exception {
System.setProperty("OGROOT", ".");
Configuration.getInstance(BrokerConfiguration.BROKER);
}
@After
public static void tearDown() throws Exception {
if (application != null && !application.getContainerDAO().isStopped()) {
application.stop();
}
}
public BrokerControl getBrokerControl(BrokerServerModule component) {
ObjectDeployment deployment = getBrokerControlDeployment(component);
return (BrokerControl) deployment.getObject();
}
public ObjectDeployment getBrokerControlDeployment(BrokerServerModule component) {
return component.getObject(Module.CONTROL_OBJECT_NAME);
}
public LocalWorkerProviderClient getLocalWorkerProviderClient(BrokerServerModule component) {
ObjectDeployment deployment = getLocalWorkerProviderClientDeployment(component);
if (deployment == null) {
return null;
}
return (LocalWorkerProviderClient) deployment.getObject();
}
public ObjectDeployment getLocalWorkerProviderClientDeployment(BrokerServerModule component) {
return component.getObject(BrokerConstants.LOCAL_WORKER_PROVIDER_CLIENT);
}
public LocalWorkerProviderClientReceiver getPeerMonitor(BrokerServerModule component) {
ObjectDeployment deployment = getPeerMonitorDeployment(component);
return (LocalWorkerProviderClientReceiver) deployment.getObject();
}
public ObjectDeployment getPeerMonitorDeployment(BrokerServerModule component) {
return component.getObject(BrokerConstants.LOCAL_WORKER_PROVIDER_CLIENT);
}
public LocalWorkerProviderClientReceiver getWorkerMonitor(BrokerServerModule component) {
ObjectDeployment deployment = getWorkerMonitorDeployment(component);
return (LocalWorkerProviderClientReceiver) deployment.getObject();
}
public ObjectDeployment getWorkerMonitorDeployment(BrokerServerModule component) {
return component.getObject(BrokerConstants.LOCAL_WORKER_PROVIDER_CLIENT);
}
public WorkerClient getWorkerClient(BrokerServerModule component) {
ObjectDeployment deployment = getWorkerClientDeployment(component);
return (WorkerClient) deployment.getObject();
}
public ObjectDeployment getWorkerClientDeployment(BrokerServerModule component) {
return component.getObject(BrokerConstants.WORKER_CLIENT);
}
public Map<String, Object> createBrokerProperties() {
Map<String, Object> properties = new LinkedHashMap<String, Object>();
//properties.put(ContainerContext.PROP_PUBLIC_KEY, context.getProperty(JICContext.PROP_PUBLIC_KEY));
return properties;
}
public OutgoingTransferHandle getOutgoingTransferHandle(TestJob testJob, String fileName) {
Collection<Task> tasks = testJob.getJob().getTasks();
for (Task task : tasks) {
Collection<GridProcess> gridProcesses = task.getGridProcesses();
for (GridProcess gridProcess : gridProcesses) {
List<Operation> operations = gridProcess.getOperations().getInitPhaseOperationsList();
for (Operation o : operations) {
InitOperation initOperation = (InitOperation) o;
if (fileName.equals(initOperation.getRemoteFilePath())) {
OutgoingHandle handle = (OutgoingHandle) initOperation.getHandle();
OutgoingTransferHandle outgoing = new OutgoingTransferHandle(handle.getId(),
handle.getLogicalFileName(), handle.getLocalFile(), handle.getDescription(),
new DeploymentID(handle.getDestinationID()));
return outgoing;
}
}
}
}
return null;
}
public IncomingTransferHandle getIncomingTransferHandle(TestJob testJob, String fileName) {
Collection<Task> tasks = testJob.getJob().getTasks();
for (Task task : tasks) {
Collection<GridProcess> gridProcesses = task.getGridProcesses();
for (GridProcess gridProcess : gridProcesses) {
List<GetOperation> operations = gridProcess.getOperations().getFinalPhaseOperationsList();
for (GetOperation o : operations) {
if (fileName.equals(o.getRemoteFilePath())) {
IncomingHandle handleIn = (IncomingHandle) o.getHandle();
ContainerID idIn = ContainerID.parse(handleIn.getSenderContainerID());
IncomingTransferHandle incoming = new IncomingTransferHandle(handleIn.getId(),
handleIn.getLogicalFileName(), handleIn.getDescription(),
handleIn.getFileSize(), idIn.getContainerID());
return incoming;
}
}
}
}
return null;
}
protected RequestSpecification createRequestSpec(int jobId, JobSpecification jobSpec, int maxReplicas, int maxFails) {
String requirements = jobSpec.getRequirements();
int numberOfTasks = jobSpec.getTaskSpecs().size();
int numberOfWorkers = numberOfTasks * maxReplicas;
long requestID = this.requestIDGenerator.nextRequestID();
return new RequestSpecification(jobId, jobSpec, requestID, requirements, numberOfWorkers, maxFails, maxReplicas);
}
}