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 junit.framework.Assert;
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_511_Util;
import org.ourgrid.discoveryservice.DiscoveryServiceComponent;
import org.ourgrid.discoveryservice.DiscoveryServiceConstants;
import org.ourgrid.discoveryservice.business.dao.DiscoveryServiceDAO;
import org.ourgrid.discoveryservice.business.dao.DiscoveryServiceDAOFactory;
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.ContainerID;
import br.edu.ufcg.lsd.commune.identification.ServiceID;
import br.edu.ufcg.lsd.commune.testinfra.util.TestStub;
public class Req_508_Test extends DiscoveryServiceAcceptanceTestCase {
Req_502_Util req_502_Util = new Req_502_Util(getComponentContext());
Req_504_Util req_504_Util = new Req_504_Util(getComponentContext());
Req_505_Util req_505_Util = new Req_505_Util(getComponentContext());
Req_506_Util req_506_Util = new Req_506_Util(getComponentContext());
Req_508_Util req_508_Util = new Req_508_Util(getComponentContext());
Req_511_Util req_511_Util = new Req_511_Util(getComponentContext());
/**
* Create a DS;
* Start a DS with the correct public key;
* Call the joinCommunity message with the following parameters:
o WorkerProvider: username = test, servername = servertest,service = REMOTE_WORKERPROVIDER and publickey = dsClientPK;
o PeerStatusProvider: username = test, servername = servertest,service = PEER and publickey = dsClientPK;
* Call the getCompleteStatus message;
* Verify if the conectedPeers list contains the peer added.
* Call the doNotifyFailure message with the deploymentID:
o username = test, servername = servertest and service = DS_CLIENT and publickey = dsClientPK;
* Call the getCompleteStatus message;
* Verify if the conectedPeers list is empty.
* @throws Exception
*/
@ReqTest(test = "AT-508.1", reqs = "")
@Test public void test_AT_508_1_FailureNotificationLeavingDSEmpty() throws Exception{
// Start the Discovery Service
DiscoveryServiceComponent component = req_502_Util.startDiscoveryService();
//Get Local DS ServiceID
ObjectDeployment dsOD = component.getObject(DiscoveryServiceConstants.DS_OBJECT_NAME);
String localDSServiceID = dsOD.getDeploymentID().getServiceID().toString();
// Create a WorkerProvider
TestStub dscTestStub = req_505_Util.createDiscoveryServiceClient(new ServiceID(new ContainerID("test", "servertest", "PEER", "dsClientPK"), "REMOTE_WORKERPROVIDER"));
// Call joinCommunity
List<String> dscServiceIDList = new LinkedList<String>();
dscServiceIDList.add(dscTestStub.getDeploymentID().getContainerID().getUserAtServer());
req_505_Util.getRemoteWorkerProviders(component, dscServiceIDList, dscTestStub);
Set<String> peers = new HashSet<String>();
peers.add(dscTestStub.getDeploymentID().getContainerID().getUserAtServer());
Map<DiscoveryServiceInfo, Set<String>> expectedLocalDSNetwork = new TreeMap<DiscoveryServiceInfo, Set<String>>();
expectedLocalDSNetwork.put(new DiscoveryServiceInfo(localDSServiceID.toString(), true), peers);
// Call getCompletStatusMessage
req_504_Util.getCompleteStatus(component, expectedLocalDSNetwork);
// Call doNotifyFailure message
req_508_Util.doNotifyFailure(component, dscTestStub);
peers.clear();
// Call getCompleteStatus message
req_504_Util.getEmptyCompleteStatusWithStartedDS(component, expectedLocalDSNetwork);
}
/**
* Create a DS;
* Start a DS with the correct public key;
* Call the joinCommunity message with the following parameters:
o WorkerProvider: username = test, servername = servertest,service = REMOTE_WORKERPROVIDER and publickey = dsClientPK;
o PeerStatusProvider: username = test, servername = servertest,service = PEER and publickey = dsClientPK;
* Call the getCompleteStatus message;
* Verify if the conectedPeers list contains the peer added.
* Call the doNotifyFailure message with the deploymentID:
o username = test, servername = servertest and service = DS_CLIENT and publickey = dsClientPK;
* Call the leaveCommunity message with the id of the peer added;
* Verify if the following warn message was logged:
1. The client with ID [deploymentID] is not joined to the community.
* Call the getCompleteStatus message;
* Verify if the conectedPeers list is empty.
* @throws Exception
*/
@ReqTest(test = "AT-508.2", reqs = "")
@Test public void test_AT_508_2_FailureNotificationForARemovedClient() throws Exception{
// Start the Discovery Service
DiscoveryServiceComponent component = req_502_Util.startDiscoveryService();
//Get Local DS ServiceID
ObjectDeployment dsOD = component.getObject(DiscoveryServiceConstants.DS_OBJECT_NAME);
String localDSServiceID = dsOD.getDeploymentID().getServiceID().toString();
// Create a WorkerProvider
TestStub dscTestStub = req_505_Util.createDiscoveryServiceClient(new ServiceID(new ContainerID("test", "servertest", "PEER", "dsClientPK"), "REMOTE_WORKERPROVIDER"));
// Call joinCommunity
List<String> dscServiceIDList = new LinkedList<String>();
dscServiceIDList.add(dscTestStub.getDeploymentID().getContainerID().getUserAtServer());
req_505_Util.getRemoteWorkerProviders(component, dscServiceIDList, dscTestStub);
Set<String> peers = new HashSet<String>();
peers.add(dscTestStub.getDeploymentID().getContainerID().getUserAtServer());
Map<DiscoveryServiceInfo, Set<String>> expectedLocalDSNetwork = new TreeMap<DiscoveryServiceInfo, Set<String>>();
expectedLocalDSNetwork.put(new DiscoveryServiceInfo(localDSServiceID.toString(), true), peers);
// Call getCompletStatusMessage
req_504_Util.getCompleteStatus(component, expectedLocalDSNetwork);
// Call leaveCommunity message
req_506_Util.leaveCommunity(component, dscTestStub, true, new ArrayList<TestStub>(), new ArrayList<String>());
peers.clear();
// Call the getCompleteStatus message
req_504_Util.getEmptyCompleteStatusWithStartedDS(component, expectedLocalDSNetwork);
// Call doNotifyFailure message
req_508_Util.doNotifyFailureWithNonLoggedClient(component, dscTestStub);
// Call getCompleteStatus message
req_504_Util.getEmptyCompleteStatusWithStartedDS(component, expectedLocalDSNetwork);
}
/**
* Create a DS;
* Start a DS with the correct public key;
* Call the joinCommunity message with the following parameters:
o WorkerProvider: username = test, servername = servertest,service = REMOTE_WORKERPROVIDER and publickey = dsClientPK;
o PeerStatusProvider: username = test, servername = servertest,service = PEER and publickey = dsClientPK;
* Call the getCompleteStatus message;
* Verify if the conectedPeers list contains the peer added.
* Call the doNotifyFailure message with the deploymentID set to null.
* Verify if the following warn message was logged:
1. Client ID invalid: null.
* Call the getCompleteStatus message;
* Verify if the conectedPeers list contains the Peer added.
* @throws Exception
*/
@ReqTest(test = "AT-508.3", reqs = "")
@Test public void test_AT_508_3_FailureNotificationWithNullMonitorableID() throws Exception{
// Start the Discovery Service
DiscoveryServiceComponent component = req_502_Util.startDiscoveryService();
//Get Local DS ServiceID
ObjectDeployment dsOD = component.getObject(DiscoveryServiceConstants.DS_OBJECT_NAME);
String localDSServiceID = dsOD.getDeploymentID().getServiceID().toString();
// Create a WorkerProvider
TestStub dscTestStub = req_505_Util.createDiscoveryServiceClient(new ServiceID(new ContainerID("test", "servertest", "PEER", "dsClientPK"), "REMOTE_WORKERPROVIDER"));
// Call joinCommunity
List<String> dscServiceIDList = new LinkedList<String>();
dscServiceIDList.add(dscTestStub.getDeploymentID().getContainerID().getUserAtServer());
req_505_Util.getRemoteWorkerProviders(component, dscServiceIDList, dscTestStub);
Set<String> peers = new HashSet<String>();
peers.add(dscTestStub.getDeploymentID().getContainerID().getUserAtServer());
Map<DiscoveryServiceInfo, Set<String>> expectedLocalDSNetwork = new TreeMap<DiscoveryServiceInfo, Set<String>>();
expectedLocalDSNetwork.put(new DiscoveryServiceInfo(localDSServiceID.toString(), true), peers);
// Call getCompleteStatus message
req_504_Util.getCompleteStatus(component, expectedLocalDSNetwork);
// Call doNotifyFailure message with null deploymentID
req_508_Util.doNotifyFailureWithNullID(component, dscTestStub);
// Call getCompleteStatus message
req_504_Util.getCompleteStatus(component, expectedLocalDSNetwork);
}
@ReqTest(test = "AT-508.4", reqs = "")
@Test public void test_AT_508_4_FailureNotificationLeavingDSWithPeers() throws Exception{
// Start the Discovery Service
DiscoveryServiceComponent component = req_502_Util.startDiscoveryService();
//Get Local DS ServiceID
ObjectDeployment dsOD = component.getObject(DiscoveryServiceConstants.DS_OBJECT_NAME);
String localDSServiceID = dsOD.getDeploymentID().getServiceID().toString();
// Create WorkerProvider 1
TestStub dscTestStub = req_505_Util.createDiscoveryServiceClient(new ServiceID(new ContainerID("test", "servertest", "PEER", "dsClientPK"), "REMOTE_WORKERPROVIDER"));
// Create WorkerProvider 2
TestStub dscTestStub2 = req_505_Util.createDiscoveryServiceClient(new ServiceID(new ContainerID("test2", "servertest", "PEER", "dsClientPK"), "REMOTE_WORKERPROVIDER"));
// Call getRemoteWorkerProviders, and expects a serviceIDList containing the first peer added
List<String> dscServiceIDList = new LinkedList<String>();
dscServiceIDList.add(dscTestStub2.getDeploymentID().getContainerID().getUserAtServer());
req_505_Util.getRemoteWorkerProviders(component, dscServiceIDList, dscTestStub2);
// Call getRemoteWorkerProviders, and expects a serviceIDList containing both peers added
dscServiceIDList.add(dscTestStub.getDeploymentID().getContainerID().getUserAtServer());
req_505_Util.getRemoteWorkerProviders(component, dscServiceIDList, dscTestStub);
Set<String> peers = new HashSet<String>();
peers.add(dscTestStub.getDeploymentID().getContainerID().getUserAtServer());
peers.add(dscTestStub2.getDeploymentID().getContainerID().getUserAtServer());
Map<DiscoveryServiceInfo, Set<String>> expectedLocalDSNetwork = new TreeMap<DiscoveryServiceInfo, Set<String>>();
expectedLocalDSNetwork.put(new DiscoveryServiceInfo(localDSServiceID.toString(), true), peers);
// Call getCompleteStatus message
req_504_Util.getCompleteStatus(component, expectedLocalDSNetwork);
// Call doNotifyFailure message
req_508_Util.doNotifyFailure(component, dscTestStub);
peers.remove(dscTestStub.getDeploymentID().getContainerID().getUserAtServer());
// Call getCompleteStatus message
//Expected: the DS shall contain only the peers in the ServiceIDList
req_504_Util.getCompleteStatus(component, expectedLocalDSNetwork);
}
@ReqTest(test = "AT-508.5", reqs = "")
@Test public void test_AT_508_5_FailureNotificationInADSWithPeerAddresses() throws Exception{
// Start the Discovery Service
DiscoveryServiceComponent component = req_502_Util.startDiscoveryService();
//Get Local DS ServiceID
ObjectDeployment dsOD = component.getObject(DiscoveryServiceConstants.DS_OBJECT_NAME);
String localDSServiceID = dsOD.getDeploymentID().getServiceID().toString();
//Get the instance of DAO and add the remote DS in it
DiscoveryServiceDAO dsDao = DiscoveryServiceDAOFactory.getInstance().getDiscoveryServiceDAO();
// Create a WorkerProvider
TestStub dscTestStub = req_505_Util.createDiscoveryServiceClient(new ServiceID(new ContainerID("test", "servertest", "PEER", "dsClientPK"), "REMOTE_WORKERPROVIDER"));
// Create a remote DS
TestStub dsTestStub = req_511_Util.createDiscoveryService(new ServiceID("test1", "servertest", "DS", DiscoveryServiceConstants.DS_OBJECT_NAME));
// Get address of the remote DS
String remoteDSAddress = dsTestStub.getDeploymentID().getServiceID().toString();
// Create and set the peers of the remote DS in DAO
Set<String> peers = new HashSet<String>();
peers.add(dscTestStub.getDeploymentID().getContainerID().getUserAtServer());
dsDao.addDiscoveryService(new DiscoveryServiceInfo(remoteDSAddress, false), peers);
// Call doNotifyFailure message
req_508_Util.doNotifyFailure(component, dscTestStub);
Set<String> remotePeers = new HashSet<String>();
remotePeers.add(dscTestStub.getDeploymentID().getContainerID().getUserAtServer());
Map<DiscoveryServiceInfo, Set<String>> expectedLocalDSNetwork = new TreeMap<DiscoveryServiceInfo, Set<String>>();
expectedLocalDSNetwork.put(new DiscoveryServiceInfo(localDSServiceID.toString(), true), new HashSet<String>());
expectedLocalDSNetwork.put(new DiscoveryServiceInfo(dsTestStub.getDeploymentID().getServiceID().toString(), true), remotePeers);
req_504_Util.getCompleteStatus(component, expectedLocalDSNetwork);
}
/**
*
*/
@ReqTest(test = "AT-508.6", reqs = "")
@Test public void test_AT_508_6_RemoveALocalPeerLeavingDSWithPeerAddresses() 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();
//Get the instance of DAO and add the remote DS in it
DiscoveryServiceDAO dsDao = DiscoveryServiceDAOFactory.getInstance().getDiscoveryServiceDAO();
//Create a remote DS
List<TestStub> dsList = new ArrayList<TestStub>();
TestStub dsTestStub = req_511_Util.createDiscoveryService(new ServiceID("test1", "servertest", "DS", DiscoveryServiceConstants.DS_OBJECT_NAME));
dsList.add(dsTestStub);
//Create a WorkerProvider
TestStub dscTestStub = req_505_Util.createDiscoveryServiceClient(new ServiceID("localpeer", "servertest",
PeerConstants.MODULE_NAME, PeerConstants.REMOTE_WORKER_PROVIDER));
//Create a remote WorkerProvider
TestStub dscRemoteTestStub = req_505_Util.createDiscoveryServiceClient(new ServiceID("remotepeer", "servertest",
PeerConstants.MODULE_NAME, PeerConstants.REMOTE_WORKER_PROVIDER));
//The remote DS join the network
List<ServiceID> dsServiceIDList = new ArrayList<ServiceID>();
dsServiceIDList.add(dsTestStub.getDeploymentID().getServiceID());
req_511_Util.getDiscoveryServices(component, dsServiceIDList, dsTestStub);
Assert.assertTrue(dsDao.getDSInfo(dsTestStub.getDeploymentID().getServiceID().toString()).isUp());
//Set the remote DS and its peers in DAO
String remoteDSAddress = dsTestStub.getDeploymentID().getServiceID().toString();
Set<String> peers = new HashSet<String>();
peers.add(dscRemoteTestStub.getDeploymentID().getContainerID().getUserAtServer());
dsDao.addDiscoveryService(new DiscoveryServiceInfo(remoteDSAddress, true), peers);
// Call joinCommunity message
List<String> dscServiceIDList = new ArrayList<String>();
dscServiceIDList.add(dscTestStub.getDeploymentID().getContainerID().getUserAtServer());
List<String> dscServiceIDList2 = new ArrayList<String>(dscServiceIDList);
dscServiceIDList2.add(dscRemoteTestStub.getDeploymentID().getContainerID().getUserAtServer());
req_505_Util.getRemoteWorkerProviders(component, dscServiceIDList2, dscTestStub, dsList, false, dscServiceIDList);
Set<String> remotePeers = new HashSet<String>();
remotePeers.add(dscRemoteTestStub.getDeploymentID().getContainerID().getUserAtServer());
Set<String> localPeers = new HashSet<String>();
localPeers.add(dscTestStub.getDeploymentID().getContainerID().getUserAtServer());
Map<DiscoveryServiceInfo, Set<String>> expectedLocalDSNetwork = new TreeMap<DiscoveryServiceInfo, Set<String>>();
expectedLocalDSNetwork.put(new DiscoveryServiceInfo(localDSServiceID.toString(), true), localPeers);
expectedLocalDSNetwork.put(new DiscoveryServiceInfo(dsTestStub.getDeploymentID().getServiceID().toString(), true), remotePeers);
// Call getCompleteStatus message
req_504_Util.getCompleteStatus(component, expectedLocalDSNetwork);
// Call doNotifyFailure message
req_508_Util.doNotifyFailure(component, dscTestStub);
localPeers.remove(dscTestStub.getDeploymentID().getContainerID().getUserAtServer());
// Call getCompleteStatus message
req_504_Util.getCompleteStatus(component, expectedLocalDSNetwork);
}
}