package org.ourgrid.acceptance.util.discoveryservice;
import org.easymock.classextension.EasyMock;
import org.ourgrid.acceptance.util.DiscoveryServiceAcceptanceUtil;
import org.ourgrid.common.interfaces.control.DiscoveryServiceControl;
import org.ourgrid.common.interfaces.control.DiscoveryServiceControlClient;
import org.ourgrid.discoveryservice.DiscoveryServiceComponent;
import org.ourgrid.matchers.ControlOperationResultMatcher;
import br.edu.ufcg.lsd.commune.container.ObjectDeployment;
import br.edu.ufcg.lsd.commune.container.control.ModuleAlreadyStartedException;
import br.edu.ufcg.lsd.commune.container.logging.CommuneLogger;
import br.edu.ufcg.lsd.commune.context.ModuleContext;
import br.edu.ufcg.lsd.commune.testinfra.AcceptanceTestUtil;
public class Req_502_Util extends DiscoveryServiceAcceptanceUtil {
public Req_502_Util(ModuleContext context) {
super(context);
}
public DiscoveryServiceComponent startDiscoveryService() throws Exception {
DiscoveryServiceComponent component = createDiscoveryServiceComponent();
return startDiscoveryService(component, null, false);
}
public DiscoveryServiceComponent startDiscoveryServiceWithWrongPublicKey(String senderPublicKey) throws Exception {
DiscoveryServiceComponent component = createDiscoveryServiceComponent();
return startDiscoveryService(component, senderPublicKey, false);
}
public DiscoveryServiceComponent startDiscoveryServiceAgain(DiscoveryServiceComponent component) throws Exception {
return startDiscoveryService(component, null, true);
}
private DiscoveryServiceComponent startDiscoveryService(DiscoveryServiceComponent component, String senderPublicKey, boolean isDSAlreadyStarted) {
CommuneLogger newLogger = EasyMock.createMock(CommuneLogger.class);
component.setLogger(newLogger);
DiscoveryServiceControl dsControl = getDiscoveryServiceControl(component);
ObjectDeployment dsOD = getDiscoveryServiceControlDeployment(component);
DiscoveryServiceControlClient dsClientMock = EasyMock.createMock(DiscoveryServiceControlClient.class);
if (senderPublicKey == null) {
senderPublicKey = dsOD.getDeploymentID().getPublicKey();
}
if (isDSAlreadyStarted) {
dsClientMock.operationSucceed(ControlOperationResultMatcher.eqType(ModuleAlreadyStartedException.class));
} else {
if (dsOD.getDeploymentID().getPublicKey().equals(senderPublicKey)) {
dsClientMock.operationSucceed(ControlOperationResultMatcher.noError());
newLogger.info("Discovery Service has been successfully started.");
} else {
newLogger.warn("An unknown entity tried to start the Discovery Service. " +
"Only the local modules can perform this operation. Unknown entity public key: [" + senderPublicKey + "].");
}
}
EasyMock.replay(newLogger);
EasyMock.replay(dsClientMock);
AcceptanceTestUtil.setExecutionContext(component, dsOD, senderPublicKey);
dsControl.start(dsClientMock);
EasyMock.verify(dsClientMock);
EasyMock.verify(newLogger);
EasyMock.reset(newLogger);
return component;
}
}