package org.ourgrid.acceptance.util.discoveryservice;
import java.util.List;
import org.easymock.classextension.EasyMock;
import org.ourgrid.acceptance.util.DiscoveryServiceAcceptanceUtil;
import org.ourgrid.common.interfaces.DiscoveryService;
import org.ourgrid.common.interfaces.DiscoveryServiceClient;
import org.ourgrid.common.interfaces.RemoteWorkerProvider;
import org.ourgrid.common.interfaces.status.PeerStatusProvider;
import org.ourgrid.discoveryservice.DiscoveryServiceComponent;
import org.ourgrid.discoveryservice.communication.receiver.DiscoveryServiceReceiver;
import org.ourgrid.matchers.WorkerProvidersMatcher;
import br.edu.ufcg.lsd.commune.container.ObjectDeployment;
import br.edu.ufcg.lsd.commune.container.logging.CommuneLogger;
import br.edu.ufcg.lsd.commune.context.ModuleContext;
import br.edu.ufcg.lsd.commune.identification.DeploymentID;
import br.edu.ufcg.lsd.commune.identification.ServiceID;
import br.edu.ufcg.lsd.commune.testinfra.AcceptanceTestUtil;
import br.edu.ufcg.lsd.commune.testinfra.util.TestStub;
public class Req_505_Util extends DiscoveryServiceAcceptanceUtil {
public Req_505_Util(ModuleContext context) {
super(context);
}
public void getRemoteWorkerProviders(DiscoveryServiceComponent component, List<String> allPeersServiceIds,
TestStub dscTestStub, List<TestStub> dsTestStubs, boolean isLogged, List<String> localPeersServiceIds) {
DiscoveryService discoveryService = (DiscoveryService) getDiscoveryServiceProxy();
ObjectDeployment dsOD = getDiscoveryServiceControlDeployment(component);
DiscoveryServiceClient dsc = (DiscoveryServiceClient) dscTestStub.getObject();
dsc.hereIsRemoteWorkerProviderList(WorkerProvidersMatcher.eqMatcher(allPeersServiceIds));
EasyMock.replay(dsc);
if (dsTestStubs != null) {
for (TestStub testStub : dsTestStubs) {
DiscoveryService ds = (DiscoveryService) testStub.getObject();
ds.hereIsRemoteWorkerProviderList(WorkerProvidersMatcher.eqMatcher(localPeersServiceIds));
EasyMock.replay(ds);
}
}
AcceptanceTestUtil.publishTestObject(component, dscTestStub.getDeploymentID(), dsc, DiscoveryServiceClient.class);
AcceptanceTestUtil.setExecutionContext(component, dsOD, dscTestStub.getDeploymentID());
CommuneLogger logger = component.getLogger();
if (!isLogged) {
logger.debug("The client [" + dscTestStub.getDeploymentID().getContainerID().getUserAtServer() + "] is not logged.");
EasyMock.replay(logger);
}
discoveryService.getRemoteWorkerProviders(dsc, 1);
if (!isLogged) {
EasyMock.verify(logger);
EasyMock.reset(logger);
}
EasyMock.verify(dsc);
EasyMock.reset(dsc);
if (dsTestStubs != null) {
for (TestStub testStub : dsTestStubs) {
DiscoveryService ds = (DiscoveryService) testStub.getObject();
EasyMock.verify(ds);
EasyMock.reset(ds);
}
}
}
public void getRemoteWorkerProviders(DiscoveryServiceComponent component, List<String> serviceIds, TestStub dscTestStub) {
getRemoteWorkerProviders(component, serviceIds, dscTestStub, null, false, serviceIds);
}
public void getRemoteWorkerProviders(DiscoveryServiceComponent component, List<String> serviceIds, TestStub dscTestStub, boolean isLogged) {
getRemoteWorkerProviders(component, serviceIds, dscTestStub, null, isLogged, serviceIds);
}
public void getRemoteWorkerProviders(DiscoveryServiceComponent component, List<String> serviceIds, TestStub dscTestStub,
List<TestStub> dsTestStubs) {
getRemoteWorkerProviders(component, serviceIds, dscTestStub, dsTestStubs, false, serviceIds);
}
public void notifyDiscoveryServiceClientFailure(DiscoveryServiceComponent component, TestStub dscTestStub) {
component.setStubDown(dscTestStub.getObject());
DiscoveryServiceReceiver controller = (DiscoveryServiceReceiver) getDiscoveryServiceDeployment(component).getObject();
controller.dsClientIsDown((DiscoveryServiceClient) dscTestStub.getObject(), dscTestStub.getDeploymentID());
}
public TestStub createRemoteWorkerProvider(ServiceID serviceID){
DeploymentID rwpID = new DeploymentID(serviceID);
RemoteWorkerProvider rwp = EasyMock.createMock(RemoteWorkerProvider.class);
return new TestStub(rwpID, rwp);
}
public TestStub createDiscoveryServiceClient(ServiceID serviceID){
DeploymentID dscID = new DeploymentID(serviceID);
DiscoveryServiceClient rwp = EasyMock.createMock(DiscoveryServiceClient.class);
return new TestStub(dscID, rwp);
}
public TestStub createPeerStatusProvider(ServiceID serviceID){
DeploymentID peerStatusProviderID = new DeploymentID(serviceID);
PeerStatusProvider peerStatusProvider = EasyMock.createMock(PeerStatusProvider.class);
return new TestStub(peerStatusProviderID, peerStatusProvider);
}
public void hereIsRemoteWorkerProvidersList(DiscoveryServiceComponent component, List<String> dscServiceIDList,
TestStub dsTestStub, boolean rwpListIsDifferent, List<ServiceID> dsServiceIDList) {
CommuneLogger logger = component.getLogger();
if (! dsServiceIDList.contains(dsTestStub.getDeploymentID().getServiceID())) {
logger.debug("The DS [" + dsTestStub.getDeploymentID().getServiceID() + "] tried to send a Remote Worker Providers List but it does not belong to my network.");
EasyMock.replay(logger);
}
DiscoveryService discoveryService = (DiscoveryService) getDiscoveryServiceProxy();
DiscoveryService ds = (DiscoveryService) dsTestStub.getObject();
if (rwpListIsDifferent) {
EasyMock.reset(ds);
ds.hereIsRemoteWorkerProviderList(WorkerProvidersMatcher.eqMatcher(dscServiceIDList));
EasyMock.replay(ds);
}
ObjectDeployment dsOD = getDiscoveryServiceControlDeployment(component);
AcceptanceTestUtil.setExecutionContext(component, dsOD, dsTestStub.getDeploymentID());
discoveryService.hereIsRemoteWorkerProviderList(dscServiceIDList);
if (! dsServiceIDList.contains(dsTestStub.getDeploymentID().getServiceID())) {
EasyMock.verify(logger);
EasyMock.reset(logger);
}
if (rwpListIsDifferent) {
EasyMock.verify(ds);
}
}
}