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.ModuleNotStartedException;
import br.edu.ufcg.lsd.commune.container.control.ModuleStoppedException;
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_503_Util extends DiscoveryServiceAcceptanceUtil {
public Req_503_Util(ModuleContext context) {
super(context);
}
public void stopUnstartedDiscoveryService(DiscoveryServiceComponent component) {
stopDiscoveryService(component, null, false);
}
public void stopDiscoveryService(DiscoveryServiceComponent component) {
stopDiscoveryService(component, null, true);
}
public void stopDiscoveryService(DiscoveryServiceComponent component, String senderPublicKey) {
stopDiscoveryService(component, senderPublicKey, true);
}
public void stopDiscoveryService(DiscoveryServiceComponent component, boolean isDSStarted) {
stopDiscoveryService(component, null, isDSStarted);
}
public void stopDiscoveryService(DiscoveryServiceComponent component, String senderPublicKey,
boolean isDSStarted) {
CommuneLogger newLogger = EasyMock.createMock(CommuneLogger.class);
component.setLogger(newLogger);
DiscoveryServiceControl dsControl = getDiscoveryServiceControl(component);
ObjectDeployment dsOD = getDiscoveryServiceControlDeployment(component);
DiscoveryServiceControlClient dscMock = EasyMock.createMock(DiscoveryServiceControlClient.class);
if (!isDSStarted) {
if(dsControl == null) {
dscMock.operationSucceed(
ControlOperationResultMatcher.eqType(ModuleStoppedException.class));
} else {
if (senderPublicKey == null) {
senderPublicKey = dsOD.getDeploymentID().getPublicKey();
}
dscMock.operationSucceed(
ControlOperationResultMatcher.eqCauseType("DiscoveryService control was not started", ModuleNotStartedException.class));
}
} else {
if (senderPublicKey == null) {
senderPublicKey = dsOD.getDeploymentID().getPublicKey();
dscMock.operationSucceed(ControlOperationResultMatcher.noError());
} else if(!dsOD.getDeploymentID().getPublicKey().equals(senderPublicKey)) {
newLogger.warn("An unknown entity tried to stop the Discovery Service. Only the local modules can perform this operation." +
" Unknown entity public key: [" + senderPublicKey + "].");
}
}
EasyMock.replay(newLogger);
EasyMock.replay(dscMock);
AcceptanceTestUtil.setExecutionContext(component, dsOD, senderPublicKey);
dsControl.stop(false, false, dscMock);
EasyMock.verify(dscMock);
EasyMock.verify(newLogger);
EasyMock.reset(newLogger);
}
}