package org.ourgrid.acceptance.discoveryservice;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.TreeMap;
import org.junit.Test;
import org.ourgrid.acceptance.util.discoveryservice.Req_502_Util;
import org.ourgrid.acceptance.util.discoveryservice.Req_504_Util;
import org.ourgrid.acceptance.util.discoveryservice.Req_505_Util;
import org.ourgrid.acceptance.util.discoveryservice.Req_506_Util;
import org.ourgrid.acceptance.util.discoveryservice.Req_508_Util;
import org.ourgrid.acceptance.util.discoveryservice.Req_510_Util;
import org.ourgrid.common.statistics.beans.ds.DS_PeerStatusChange;
import org.ourgrid.common.statistics.beans.status.PeerStatus;
import org.ourgrid.discoveryservice.DiscoveryServiceComponent;
import org.ourgrid.discoveryservice.DiscoveryServiceConstants;
import org.ourgrid.discoveryservice.business.dao.DiscoveryServiceInfo;
import org.ourgrid.peer.PeerConstants;
import org.ourgrid.reqtrace.ReqTest;
import br.edu.ufcg.lsd.commune.container.ObjectDeployment;
import br.edu.ufcg.lsd.commune.identification.ServiceID;
import br.edu.ufcg.lsd.commune.testinfra.util.TestStub;
public class Req_510_Test extends DiscoveryServiceAcceptanceTestCase{
private Req_502_Util req_502_Util = new Req_502_Util(super.getComponentContext());
private Req_504_Util req_504_Util = new Req_504_Util(super.getComponentContext());
private Req_505_Util req_505_Util = new Req_505_Util(super.getComponentContext());
private Req_506_Util req_506_Util = new Req_506_Util(super.getComponentContext());
private Req_508_Util req_508_Util = new Req_508_Util(super.getComponentContext());
private Req_510_Util req_510_Util = new Req_510_Util(super.getComponentContext());
/**
* Create a DS;
* Start a DS with the correct public key;
* Call the joinCommunity message with the following parameters:
* o WorkerProvider: username = test2, servername = servertest2 and service = REMOTE_WORKERPROVIDER;
* o PeerStatusProvider: username = test2, servername = servertest2 and service = PEER;
* Call the joinCommunity message with the following parameters:
* o WorkerProvider: username = test, servername = servertest and service = REMOTE_WORKERPROVIDER;
* o PeerStatusProvider: username = test, servername = servertest and service = PEER;
* Call the joinCommunity message with the following parameters:
* o WorkerProvider: username = test3, servername = servertest3 and service = REMOTE_WORKERPROVIDER;
* o PeerStatusProvider: username = test3, servername = servertest3 and service = PEER;
* Call the leaveCommunity message with a client with the following attributes:
* o username = test, servername = servertest;
* Call the doNotifyFailure message with the deploymentID:
* o username = test2, servername = servertest2 and service = DS_CLIENT and publickey = dsClientPK;
* Call the joinCommunity message with the following parameters:
* o WorkerProvider: username = test, servername = servertest and service = REMOTE_WORKERPROVIDER;
* o PeerStatusProvider: username = test, servername = servertest and service = PEER;
* Call the getPeerStatusChangeHistory message;
* Verify if the list contains the following ordered data:
* o Address: test@servertest Status: UP
* o Address: test@servertest Status: DOWN
* o Address: test@servertest Status: UP
* o Address: test2@servertest2 Status: UP
* o Address: test2@servertest2 Status: DOWN
* o Address: test3@servertest3 Status: UP
*
*/
@ReqTest(test = "AT-510.1", reqs = "")
@Test public void test_AT_510_queryNormalPeerStatusHistoryChange() throws Exception{
//create and start a DS
DiscoveryServiceComponent component = req_502_Util.startDiscoveryService();
//Get Local DS ServiceID
ObjectDeployment dsOD = component.getObject(DiscoveryServiceConstants.DS_OBJECT_NAME);
ServiceID localDSServiceID = dsOD.getDeploymentID().getServiceID();
//create a WorkerProvider (first time)
TestStub dscTestStub1 = req_505_Util.createDiscoveryServiceClient(new ServiceID("test1", "servertest1", "PEER", PeerConstants.DS_CLIENT));
//Call joinCommunity (first time)
List<String> dscServiceIDList = new LinkedList<String>();
dscServiceIDList.add(dscTestStub1.getDeploymentID().getContainerID().getUserAtServer());
req_505_Util.getRemoteWorkerProviders(component, dscServiceIDList, dscTestStub1);
Set<String> localPeers = new HashSet<String>();
localPeers.add(dscTestStub1.getDeploymentID().getContainerID().getUserAtServer());
Map<DiscoveryServiceInfo, Set<String>> expectedLocalDSNetwork = new TreeMap<DiscoveryServiceInfo, Set<String>>();
expectedLocalDSNetwork.put(new DiscoveryServiceInfo(localDSServiceID.toString(), true), localPeers);
req_504_Util.getCompleteStatus(component, expectedLocalDSNetwork);
Thread.sleep(10);
//create a WorkerProvider (second time)
TestStub dscTestStub2 = req_505_Util.createDiscoveryServiceClient(new ServiceID("test2", "servertest2", "PEER", PeerConstants.DS_CLIENT));
//Call joinCommunity (second time)
dscServiceIDList.add(dscTestStub2.getDeploymentID().getContainerID().getUserAtServer());
req_505_Util.getRemoteWorkerProviders(component, dscServiceIDList, dscTestStub2);
localPeers.add(dscTestStub2.getDeploymentID().getContainerID().getUserAtServer());
req_504_Util.getCompleteStatus(component, expectedLocalDSNetwork);
Thread.sleep(10);
//create a WorkerProvider (third time)
TestStub dscTestStub3 = req_505_Util.createDiscoveryServiceClient(new ServiceID("test3", "servertest3", "PEER", PeerConstants.DS_CLIENT));
//Call joinCommunity (third time)
dscServiceIDList.add(dscTestStub3.getDeploymentID().getContainerID().getUserAtServer());
req_505_Util.getRemoteWorkerProviders(component, dscServiceIDList, dscTestStub3);
localPeers.add(dscTestStub3.getDeploymentID().getContainerID().getUserAtServer());
req_504_Util.getCompleteStatus(component, expectedLocalDSNetwork);
Thread.sleep(10);
//Call the leaveCommunity (username = test, servername = servertest)
req_506_Util.leaveCommunity(component, dscTestStub2);
localPeers.remove(dscTestStub2.getDeploymentID().getContainerID().getUserAtServer());
req_504_Util.getCompleteStatus(component, expectedLocalDSNetwork);
Thread.sleep(10);
//Call the doNotifyFailure (username = test2, servername = servertest2)
//service = DS_CLIENT and publickey = dsClientPK
req_508_Util.doNotifyFailure(component, dscTestStub1);
localPeers.remove(dscTestStub1.getDeploymentID().getContainerID().getUserAtServer());
req_504_Util.getCompleteStatus(component, expectedLocalDSNetwork);
Thread.sleep(10);
//Call the joinCommunity message
dscServiceIDList.clear();
dscServiceIDList.add(dscTestStub3.getDeploymentID().getContainerID().getUserAtServer());
dscServiceIDList.add(dscTestStub1.getDeploymentID().getContainerID().getUserAtServer());
req_505_Util.getRemoteWorkerProviders(component, dscServiceIDList, dscTestStub1, true);
localPeers.add(dscTestStub1.getDeploymentID().getContainerID().getUserAtServer());
req_504_Util.getCompleteStatus(component, expectedLocalDSNetwork);
Thread.sleep(10);
//creating history list
List<DS_PeerStatusChange> historyList = new ArrayList<DS_PeerStatusChange>();
DS_PeerStatusChange change = new DS_PeerStatusChange();
change.setPeerAddress("test1@servertest1");
change.setCurrentStatus(PeerStatus.UP);
historyList.add(change);
change = new DS_PeerStatusChange();
change.setPeerAddress("test2@servertest2");
change.setCurrentStatus(PeerStatus.UP);
historyList.add(change);
change = new DS_PeerStatusChange();
change.setPeerAddress("test3@servertest3");
change.setCurrentStatus(PeerStatus.UP);
historyList.add(change);
change = new DS_PeerStatusChange();
change.setPeerAddress("test2@servertest2");
change.setCurrentStatus(PeerStatus.DOWN);
historyList.add(change);
change = new DS_PeerStatusChange();
change.setPeerAddress("test1@servertest1");
change.setCurrentStatus(PeerStatus.DOWN);
historyList.add(change);
change = new DS_PeerStatusChange();
change.setPeerAddress("test1@servertest1");
change.setCurrentStatus(PeerStatus.UP);
historyList.add(change);
//Call the getPeerStatusChangeHistory message;
req_510_Util.getPeerStatusChangeHistory(component, historyList);
}
/**
* Create a DS;
* Start a DS with the correct public key;
* Call the joinCommunity message with the following parameters:
* o WorkerProvider: username = test2, servername = servertest2 and service = REMOTE_WORKERPROVIDER;
* o PeerStatusProvider: username = test2, servername = servertest2 and service = PEER;
* Call the joinCommunity message with the following parameters:
* o WorkerProvider: username = test, servername = servertest and service = REMOTE_WORKERPROVIDER;
* o PeerStatusProvider: username = test, servername = servertest and service = PEER;
* Call the joinCommunity message with the following parameters:
* o WorkerProvider: username = test3, servername = servertest3 and service = REMOTE_WORKERPROVIDER;
* o PeerStatusProvider: username = test3, servername = servertest3 and service = PEER;
* Call the joinCommunity message with the following parameters:
* o WorkerProvider: username = test4, servername = servertest4 and service = REMOTE_WORKERPROVIDER;
* o PeerStatusProvider: username = test4, servername = servertest4 and service = PEER;
* Call the leaveCommunity message with a client with the following attributes:
* o username = test, servername = servertest;
* Call the leaveCommunity message with a client with the following attributes:
* o username = test, servername = servertest;
* Call the doNotifyFailure message with the deploymentID:
* o username = test2, servername = servertest2 and service = DS_CLIENT and publickey = dsClientPK;
* Call the joinCommunity message with the following parameters:
* o WorkerProvider: username = test2, servername = servertest2 and service = REMOTE_WORKERPROVIDER;
* o PeerStatusProvider: username = test2, servername = servertest2 and service = PEER;
* Call the joinCommunity message with the following parameters:
* o WorkerProvider: username = test2, servername = servertest2 and service = REMOTE_WORKERPROVIDER;
* o PeerStatusProvider: username = test2, servername = servertest2 and service = PEER;
* Call the joinCommunity message with the following parameters:
* o WorkerProvider: username = test5, servername = servertest5 and service = REMOTE_WORKERPROVIDER;
* o PeerStatusProvider: username = test5, servername = servertest5 and service = PEER;
* Call the doNotifyFailure message with the deploymentID:
* o username = test5, servername = servertest5 and service = DS_CLIENT and publickey = dsClientPK;
* Verify if the list contains the following ordered data:
* o Address: test@servertest Status: UP
* o Address: test@servertest Status: DOWN
* o Address: test2@servertest2 Status: UP
* o Address: test2@servertest2 Status: DOWN
* o Address: test2@servertest2 Status: UP
* o Address: test3@servertest3 Status: UP
* o Address: test4@servertest4 Status: UP
* o Address: test5@servertest5 Status: UP
* o Address: test5@servertest5 Status: DOWN
*
*/
@ReqTest(test = "AT-510.2", reqs = "")
@Test public void test_AT_510_queryIlegalPeerStatusHistoryChange() throws Exception{
//create and start a DS
DiscoveryServiceComponent component = req_502_Util.startDiscoveryService();
//Get Local DS ServiceID
ObjectDeployment dsOD = component.getObject(DiscoveryServiceConstants.DS_OBJECT_NAME);
ServiceID localDSServiceID = dsOD.getDeploymentID().getServiceID();
//create a WorkerProvider
TestStub dscTestStub2 = req_505_Util.createDiscoveryServiceClient(new ServiceID("test2", "servertest2", "PEER", PeerConstants.DS_CLIENT));
//Call joinCommunity (first time)
List<String> dscServiceIDList = new LinkedList<String>();
dscServiceIDList.add(dscTestStub2.getDeploymentID().getContainerID().getUserAtServer());
req_505_Util.getRemoteWorkerProviders(component, dscServiceIDList, dscTestStub2);
Set<String> localPeers = new HashSet<String>();
localPeers.add(dscTestStub2.getDeploymentID().getContainerID().getUserAtServer());
Map<DiscoveryServiceInfo, Set<String>> expectedLocalDSNetwork = new TreeMap<DiscoveryServiceInfo, Set<String>>();
expectedLocalDSNetwork.put(new DiscoveryServiceInfo(localDSServiceID.toString(), true), localPeers);
req_504_Util.getCompleteStatus(component, expectedLocalDSNetwork);
Thread.sleep(10);
//create a WorkerProvider
TestStub dscTestStub1 = req_505_Util.createDiscoveryServiceClient(new ServiceID("test1", "servertest1", "PEER", PeerConstants.DS_CLIENT));
//Call joinCommunity (second time)
dscServiceIDList.add(dscTestStub1.getDeploymentID().getContainerID().getUserAtServer());
req_505_Util.getRemoteWorkerProviders(component, dscServiceIDList, dscTestStub1);
localPeers.add(dscTestStub1.getDeploymentID().getContainerID().getUserAtServer());
req_504_Util.getCompleteStatus(component, expectedLocalDSNetwork);
Thread.sleep(10);
//create a WorkerProvider
TestStub dscTestStub3 = req_505_Util.createDiscoveryServiceClient(new ServiceID("test3", "servertest3", "PEER", PeerConstants.DS_CLIENT));
//Call joinCommunity (fourth time)
dscServiceIDList.add(dscTestStub3.getDeploymentID().getContainerID().getUserAtServer());
req_505_Util.getRemoteWorkerProviders(component, dscServiceIDList, dscTestStub3);
localPeers.add(dscTestStub3.getDeploymentID().getContainerID().getUserAtServer());
req_504_Util.getCompleteStatus(component, expectedLocalDSNetwork);
Thread.sleep(10);
//create a WorkerProvider
TestStub dscTestStub4 = req_505_Util.createDiscoveryServiceClient(new ServiceID("test4", "servertest4", "PEER", PeerConstants.DS_CLIENT));
//Call joinCommunity (fourth time)
dscServiceIDList.add(dscTestStub4.getDeploymentID().getContainerID().getUserAtServer());
req_505_Util.getRemoteWorkerProviders(component, dscServiceIDList, dscTestStub4);
localPeers.add(dscTestStub4.getDeploymentID().getContainerID().getUserAtServer());
req_504_Util.getCompleteStatus(component, expectedLocalDSNetwork);
Thread.sleep(10);
//Call the leaveCommunity (username = test, servername = servertest)
req_506_Util.leaveCommunity(component, dscTestStub1);
localPeers.remove(dscTestStub1.getDeploymentID().getContainerID().getUserAtServer());
req_504_Util.getCompleteStatus(component, expectedLocalDSNetwork);
Thread.sleep(10);
//Call the leaveCommunity (username = test, servername = servertest) (again)
req_506_Util.leaveCommunity(component, dscTestStub1, false, null, null);
req_504_Util.getCompleteStatus(component, expectedLocalDSNetwork);
Thread.sleep(10);
//Call the doNotifyFailure (username = test2, servername = servertest2)
//(service = DS_CLIENT and publickey = dsClientPK)
req_508_Util.doNotifyFailure(component, dscTestStub2);
localPeers.remove(dscTestStub2.getDeploymentID().getContainerID().getUserAtServer());
req_504_Util.getCompleteStatus(component, expectedLocalDSNetwork);
Thread.sleep(10);
//Call the joinCommunity message (username = test2, servername = servertest2)
dscServiceIDList.clear();
dscServiceIDList.add(dscTestStub4.getDeploymentID().getContainerID().getUserAtServer());
dscServiceIDList.add(dscTestStub3.getDeploymentID().getContainerID().getUserAtServer());
dscServiceIDList.add(dscTestStub2.getDeploymentID().getContainerID().getUserAtServer());
req_505_Util.getRemoteWorkerProviders(component, dscServiceIDList, dscTestStub2);
localPeers.add(dscTestStub2.getDeploymentID().getContainerID().getUserAtServer());
req_504_Util.getCompleteStatus(component, expectedLocalDSNetwork);
Thread.sleep(10);
//Call the joinCommunity message (username = test2, servername = servertest2) (again)
req_505_Util.getRemoteWorkerProviders(component, dscServiceIDList, dscTestStub2, true);
req_504_Util.getCompleteStatus(component, expectedLocalDSNetwork);
Thread.sleep(10);
//create a WorkerProvider
TestStub dscTestStub5 = req_505_Util.createDiscoveryServiceClient(new ServiceID("test5", "servertest5", "PEER", PeerConstants.DS_CLIENT));
//Call joinCommunity (username = test5, servername = servertest5)
dscServiceIDList.add(dscTestStub5.getDeploymentID().getContainerID().getUserAtServer());
req_505_Util.getRemoteWorkerProviders(component, dscServiceIDList, dscTestStub5);
localPeers.add(dscTestStub5.getDeploymentID().getContainerID().getUserAtServer());
req_504_Util.getCompleteStatus(component, expectedLocalDSNetwork);
Thread.sleep(10);
//Call the doNotifyFailure (username = test5, servername = servertest5)
//(service = DS_CLIENT and publickey = dsClientPK)
req_508_Util.doNotifyFailure(component, dscTestStub5);
localPeers.remove(dscTestStub5.getDeploymentID().getContainerID().getUserAtServer());
req_504_Util.getCompleteStatus(component, expectedLocalDSNetwork);
Thread.sleep(10);
//creating history list
List<DS_PeerStatusChange> historyList = new ArrayList<DS_PeerStatusChange>();
DS_PeerStatusChange change = new DS_PeerStatusChange();
change.setPeerAddress("test2@servertest2");
change.setCurrentStatus(PeerStatus.UP);
historyList.add(change);
change = new DS_PeerStatusChange();
change.setPeerAddress("test1@servertest1");
change.setCurrentStatus(PeerStatus.UP);
historyList.add(change);
change = new DS_PeerStatusChange();
change.setPeerAddress("test3@servertest3");
change.setCurrentStatus(PeerStatus.UP);
historyList.add(change);
change = new DS_PeerStatusChange();
change.setPeerAddress("test4@servertest4");
change.setCurrentStatus(PeerStatus.UP);
historyList.add(change);
change = new DS_PeerStatusChange();
change.setPeerAddress("test1@servertest1");
change.setCurrentStatus(PeerStatus.DOWN);
historyList.add(change);
change = new DS_PeerStatusChange();
change.setPeerAddress("test2@servertest2");
change.setCurrentStatus(PeerStatus.DOWN);
historyList.add(change);
change = new DS_PeerStatusChange();
change.setPeerAddress("test2@servertest2");
change.setCurrentStatus(PeerStatus.UP);
historyList.add(change);
change = new DS_PeerStatusChange();
change.setPeerAddress("test5@servertest5");
change.setCurrentStatus(PeerStatus.UP);
historyList.add(change);
change = new DS_PeerStatusChange();
change.setPeerAddress("test5@servertest5");
change.setCurrentStatus(PeerStatus.DOWN);
historyList.add(change);
req_510_Util.getPeerStatusChangeHistory(component, historyList);
}
}