/*
* 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 static org.ourgrid.peer.PeerConstants.LOCAL_WORKER_PROVIDER;
import static org.ourgrid.peer.PeerConstants.REMOTE_WORKER_MANAGEMENT_CLIENT;
import static org.ourgrid.peer.PeerConstants.REMOTE_WORKER_PROVIDER;
import static org.ourgrid.peer.PeerConstants.REMOTE_WORKER_PROVIDER_CLIENT;
import static org.ourgrid.peer.PeerConstants.WORKER_MANAGEMENT_CLIENT_OBJECT_NAME;
import java.io.File;
import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.Statement;
import org.apache.commons.io.FileUtils;
import org.easymock.classextension.EasyMock;
import org.junit.After;
import org.junit.Before;
import org.ourgrid.acceptance.peer.PeerAcceptanceTestComponent;
import org.ourgrid.broker.BrokerConstants;
import org.ourgrid.common.config.Configuration;
import org.ourgrid.common.interfaces.DiscoveryServiceClient;
import org.ourgrid.common.interfaces.LocalWorkerProvider;
import org.ourgrid.common.interfaces.RemoteWorkerProvider;
import org.ourgrid.common.interfaces.RemoteWorkerProviderClient;
import org.ourgrid.common.interfaces.control.PeerControl;
import org.ourgrid.common.interfaces.management.RemoteWorkerManagementClient;
import org.ourgrid.common.interfaces.management.WorkerManagementClient;
import org.ourgrid.common.interfaces.status.PeerStatusProvider;
import org.ourgrid.peer.PeerComponent;
import org.ourgrid.peer.PeerConfiguration;
import org.ourgrid.peer.PeerConstants;
import org.ourgrid.peer.communication.receiver.DiscoveryServiceClientReceiver;
import org.ourgrid.peer.communication.receiver.LocalWorkerProviderReceiver;
import org.ourgrid.peer.communication.receiver.RemoteWorkerManagementClientReceiver;
import org.ourgrid.peer.communication.receiver.RemoteWorkerProviderClientReceiver;
import org.ourgrid.peer.communication.receiver.RemoteWorkerProviderReceiver;
import org.ourgrid.peer.communication.receiver.WorkerManagementClientReceiver;
import org.ourgrid.worker.WorkerConstants;
import br.edu.ufcg.lsd.commune.Module;
import br.edu.ufcg.lsd.commune.container.ObjectDeployment;
import br.edu.ufcg.lsd.commune.container.control.ModuleManager;
import br.edu.ufcg.lsd.commune.container.servicemanager.ServiceManager;
import br.edu.ufcg.lsd.commune.container.servicemanager.actions.RepetitionRunnable;
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.identification.ServiceID;
import br.edu.ufcg.lsd.commune.network.xmpp.CommuneNetworkException;
import br.edu.ufcg.lsd.commune.processor.ProcessorStartException;
import br.edu.ufcg.lsd.commune.testinfra.AcceptanceTestUtil;
import br.edu.ufcg.lsd.commune.testinfra.TestObjectsRegistry;
public class PeerAcceptanceUtil extends AcceptanceUtil {
public static final String BROKER_CERT = "test" + File.separator + "acceptance" +
File.separator + "broker" + File.separator + "broker_certificate.cer";
public PeerAcceptanceUtil(ModuleContext context) {
super(context);
}
public static final int DEFAULT_ADVERT_TTL = 10000;
public static final String TEST_FILES_PATH = "test"+File.separator+"acceptance"+File.separator;
/* Set up and tear down */
@Before
public static void setUp() throws Exception {
System.setProperty("OGROOT", ".");
Configuration.getInstance(PeerConfiguration.PEER);
}
/*public static void recreateSchema() {
HibernateUtil.setUp(CONF_XML_PATH);
HibernateUtil.recreateSchema();
}*/
@After
public static void tearDown() throws Exception {
if (application != null && !application.getContainerDAO().isStopped()) {
application.stop();
}
TestObjectsRegistry.reset();
cleanBD();
}
public static void cleanBD() {
try {
Class.forName("org.apache.derby.jdbc.EmbeddedDriver");
String database = "jdbc:derby:db/peer";
Connection con = DriverManager.getConnection( database ,"","");
Statement s = con.createStatement();
s.execute("DELETE FROM ATTRIBUTE");
s.execute("DELETE FROM BALANCE_VALUE");
s.execute("DELETE FROM BALANCE");
s.execute("DELETE FROM COMMAND");
s.execute("DELETE FROM EXECUTION");
s.execute("DELETE FROM WORKER_STATUS_CHANGE");
s.execute("DELETE FROM PEER_STATUS_CHANGE");
s.execute("DELETE FROM TASK");
s.execute("DELETE FROM JOB");
s.execute("DELETE FROM LOGIN");
s.execute("DELETE FROM T_USERS");
s.execute("DELETE FROM WORKER");
s.execute("DELETE FROM PEER");
s.close();
con.close();
}
catch (Exception e) {
System.out.println("Error: " + e);
}
}
public void deleteNOFRankingFile() {
deleteFile(context.getProperty(PeerConfiguration.PROP_RANKINGFILE));
}
public void deleteFile(String filepath) {
File localUsersFile = new File(filepath);
localUsersFile.delete();
}
/* Peer component creation */
public PeerComponent createPeerComponent(ModuleContext context) throws CommuneNetworkException, ProcessorStartException, InterruptedException {
application = new PeerAcceptanceTestComponent(context);
Thread.sleep(2000);
return (PeerComponent) application;
}
/* get peer bound objects */
public static ServiceManager getServiceManager() {
ObjectDeployment deployment = application.getObject(Module.CONTROL_OBJECT_NAME);
return deployment.getServiceManager();
}
public PeerControl getPeerControl() {
ObjectDeployment deployment = getPeerControlDeployment();
return (PeerControl) deployment.getObject();
}
public ObjectDeployment getPeerControlDeployment() {
return getContainerObject(application, Module.CONTROL_OBJECT_NAME);
}
public WorkerManagementClientReceiver getWorkerMonitor() {
ObjectDeployment deployment = getWorkerMonitorDeployment();
return (WorkerManagementClientReceiver) deployment.getObject();
}
public ObjectDeployment getWorkerMonitorDeployment() {
return getContainerObject(application, PeerConstants.WORKER_MANAGEMENT_CLIENT_OBJECT_NAME);
}
public DiscoveryServiceClientReceiver getDiscoveryServiceMonitor() {
ObjectDeployment deployment = getDiscoveryServiceMonitorDeployment();
return (DiscoveryServiceClientReceiver) deployment.getObject();
}
public ObjectDeployment getDiscoveryServiceMonitorDeployment() {
return getContainerObject(application, PeerConstants.DS_CLIENT);
}
public PeerStatusProvider getStatusProvider() {
ObjectDeployment deployment = getContainerObject(application, Module.CONTROL_OBJECT_NAME);
return (PeerStatusProvider) deployment.getObject();
}
public PeerStatusProvider getStatusProviderProxy() {
ObjectDeployment deployment = getStatusProviderObjectDeployment();
return (PeerStatusProvider) deployment.getObject();
}
public ObjectDeployment getStatusProviderObjectDeployment() {
return getTestProxy(application, Module.CONTROL_OBJECT_NAME);
}
public ObjectDeployment getLocalWorkerProviderClientDeployment() {
return getTestProxy(application, BrokerConstants.LOCAL_WORKER_PROVIDER_CLIENT);
}
public ObjectDeployment getRemoteWorkerMonitorDeployment() {
return getContainerObject(application, PeerConstants.REMOTE_WORKER_MANAGEMENT_CLIENT);
}
public RemoteWorkerManagementClientReceiver getRemoteWorkerMonitor() {
ObjectDeployment deployment = getRemoteWorkerMonitorDeployment();
return (RemoteWorkerManagementClientReceiver) deployment.getObject();
}
public ObjectDeployment getWorkerSpecListenerDeployment() {
return getContainerObject(application, WORKER_MANAGEMENT_CLIENT_OBJECT_NAME);
}
public WorkerManagementClient getWorkerManagementClient() {
ObjectDeployment deployment = getContainerObject(application, WORKER_MANAGEMENT_CLIENT_OBJECT_NAME);
return (WorkerManagementClient) deployment.getObject();
}
public WorkerManagementClient getWorkerManagementClientProxy() {
ObjectDeployment deployment = getWorkerManagementClientDeployment();
return (WorkerManagementClient) deployment.getObject();
}
public ObjectDeployment getWorkerManagementClientDeployment() {
return getTestProxy(application, WORKER_MANAGEMENT_CLIENT_OBJECT_NAME);
}
public ObjectDeployment getWorkerManagementDeployment() {
return getTestProxy(application, WorkerConstants.LOCAL_WORKER_MANAGEMENT);
}
public RemoteWorkerManagementClient getRemoteWorkerManagementClient() {
ObjectDeployment deployment = getContainerObject(application, REMOTE_WORKER_MANAGEMENT_CLIENT);
return (RemoteWorkerManagementClient) deployment.getObject();
}
public RemoteWorkerManagementClient getRemoteWorkerManagementClientProxy() {
return (RemoteWorkerManagementClient) getRemoteWorkerManagementClientDeployment().getObject();
}
public ObjectDeployment getRemoteWorkerManagementClientDeployment() {
return getTestProxy(application, REMOTE_WORKER_MANAGEMENT_CLIENT);
}
public LocalWorkerProvider getLocalWorkerProviderProxy() {
ObjectDeployment deployment = getLocalWorkerProviderDeployment();
return (LocalWorkerProvider) deployment.getObject();
}
public LocalWorkerProvider getLocalWorkerProvider() {
ObjectDeployment deployment = getContainerObject(application, LOCAL_WORKER_PROVIDER);
return (LocalWorkerProvider) deployment.getObject();
}
public ObjectDeployment getLocalWorkerProviderDeployment() {
return getTestProxy(application, LOCAL_WORKER_PROVIDER);
}
public RemoteWorkerProvider getRemoteWorkerProviderProxy(){
ObjectDeployment deployment = getRemoteWorkerProviderDeployment();
return (RemoteWorkerProvider) deployment.getObject();
}
public RemoteWorkerProvider getRemoteWorkerProvider(){
ObjectDeployment deployment = getContainerObject(application, REMOTE_WORKER_PROVIDER);
return (RemoteWorkerProvider) deployment.getObject();
}
public ObjectDeployment getRemoteWorkerProviderDeployment() {
return getTestProxy(application, REMOTE_WORKER_PROVIDER);
}
public RemoteWorkerProviderClientReceiver getRemoteWorkerProviderClient() {
ObjectDeployment deployment = getContainerObject(application, PeerConstants.REMOTE_WORKER_PROVIDER_CLIENT);
return (RemoteWorkerProviderClientReceiver) deployment.getObject();
}
public RemoteWorkerProviderClient getRemoteWorkerProviderClientProxy() {
ObjectDeployment deployment = getRemoteWorkerProviderClientDeployment();
return (RemoteWorkerProviderClient) deployment.getObject();
}
public ObjectDeployment getRemoteWorkerProviderClientDeployment() {
return getTestProxy(application, PeerConstants.REMOTE_WORKER_PROVIDER_CLIENT);
}
public DiscoveryServiceClient getDiscoveryServiceClientProxy() {
ObjectDeployment deployment = getTestProxy(application, PeerConstants.DS_CLIENT);
return (DiscoveryServiceClient) deployment.getObject();
}
public DiscoveryServiceClientReceiver getDiscoveryServiceClient() {
ObjectDeployment deployment = getContainerObject(application, PeerConstants.DS_CLIENT);
return (DiscoveryServiceClientReceiver) deployment.getObject();
}
public ObjectDeployment getDiscoveryServiceClientDeployment() {
return getContainerObject(application, PeerConstants.DS_CLIENT);
}
public LocalWorkerProviderReceiver getClientMonitor() {
ObjectDeployment deployment = getContainerObject(application, LOCAL_WORKER_PROVIDER);
return (LocalWorkerProviderReceiver) deployment.getObject();
}
public RemoteWorkerProviderReceiver getRemoteClientMonitor() {
ObjectDeployment deployment = getRemoteWorkerProviderClientMonitorDeployment();
return (RemoteWorkerProviderReceiver) deployment.getObject();
}
public ObjectDeployment getRemoteWorkerProviderClientMonitorDeployment() {
return getContainerObject(application, REMOTE_WORKER_PROVIDER);
}
public boolean isPeerInterestedOnBroker(ServiceID workerProviderClientID) {
ObjectDeployment deployment = getContainerObject(application, LOCAL_WORKER_PROVIDER);
return AcceptanceTestUtil.isInterested(application, workerProviderClientID, deployment.getDeploymentID());
}
public boolean isPeerInterestedOnLocalWorker(ServiceID workerManagementID) {
ObjectDeployment deployment = getWorkerMonitorDeployment();
return AcceptanceTestUtil.isInterested(application, workerManagementID, deployment.getDeploymentID());
}
public boolean isPeerInterestedOnRemoteClient(ServiceID remoteWorkerProviderClient) {
ObjectDeployment deployment = getTestProxy(application, REMOTE_WORKER_PROVIDER);
return AcceptanceTestUtil.isInterested(application, remoteWorkerProviderClient, deployment.getDeploymentID());
}
public boolean isPeerInterestedOnRemoteWorker(ServiceID rwmOID) {
ObjectDeployment deployment =
getContainerObject(application, REMOTE_WORKER_MANAGEMENT_CLIENT);
return AcceptanceTestUtil.isInterested(application, rwmOID, deployment.getDeploymentID());
}
public boolean isPeerInterestedOnRemoteWorkerProvider(ServiceID rwpOID) {
ObjectDeployment deployment =
getTestProxy(application, REMOTE_WORKER_PROVIDER_CLIENT);
return AcceptanceTestUtil.isInterested(application, rwpOID, deployment.getDeploymentID());
}
/* Other */
public static void copyTrustFile(String fileName) throws IOException {
File origFile = new File(TEST_FILES_PATH+File.separator+fileName);
FileUtils.copyFile(origFile,
new File(PeerConfiguration.TRUSTY_COMMUNITIES_FILENAME));
}
public RepetitionRunnable createRequestWorkersRunnable(PeerComponent peerComponent, Long requestID) {
ObjectDeployment objectDeployment = getPeerControlDeployment();
return new RepetitionRunnable(peerComponent, (ModuleManager) objectDeployment.getObject(),
PeerConstants.REQUEST_WORKERS_ACTION_NAME, requestID);
}
public static DeploymentID createRemoteConsumerID(String user, String server, String consumer1PublicKey) {
ContainerID consumer1APID = new ContainerID(user, server, PeerConstants.MODULE_NAME, consumer1PublicKey);
return new DeploymentID(consumer1APID, PeerConstants.REMOTE_WORKER_PROVIDER_CLIENT);
}
public static void reset(Object... mocks) {
for (Object mock : mocks) {
EasyMock.reset(mock);
}
}
public static void replay(Object... mocks) {
for (Object mock : mocks) {
EasyMock.replay(mock);
}
}
public static void verify(Object... mocks) {
for (Object mock : mocks) {
EasyMock.verify(mock);
}
}
}