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.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_511_Util;
import org.ourgrid.acceptance.util.discoveryservice.Req_513_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.ServiceID;
import br.edu.ufcg.lsd.commune.testinfra.util.TestStub;
public class Req_513_Test extends DiscoveryServiceAcceptanceTestCase{
private Req_502_Util req_502_Util = new Req_502_Util(super.getComponentContext());
private Req_505_Util req_505_util = new Req_505_Util(super.getComponentContext());
private Req_504_Util req_504_util = new Req_504_Util(super.getComponentContext());
private Req_511_Util req_511_util = new Req_511_Util(super.getComponentContext());
private Req_513_Util req_513_util = new Req_513_Util(super.getComponentContext());
@ReqTest(test = "AT-513.1", reqs = "")
@Test public void test_AT_513_1_AnEmptyDSIsNotifiedThatAPeerIsUp() 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 DSClient
TestStub dscTestStub = req_505_util.createDiscoveryServiceClient(new ServiceID("test", "servertest",
PeerConstants.MODULE_NAME, PeerConstants.REMOTE_WORKER_PROVIDER));
req_513_util.dsClientIsUp(component, dscTestStub, false);
Set<String> localPeers = new HashSet<String>();
Map<DiscoveryServiceInfo, Set<String>> expectedLocalDSNetwork = new TreeMap<DiscoveryServiceInfo, Set<String>>();
expectedLocalDSNetwork.put(new DiscoveryServiceInfo(localDSServiceID.toString(), true), localPeers);
req_504_util.getCompleteStatus(component, expectedLocalDSNetwork);
}
@ReqTest(test = "AT-513.2", reqs = "")
@Test public void test_AT_513_2_DSWithPeersIsNotifiedThatAnotherPeerIsUp() 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
DiscoveryServiceDAO dsDao = DiscoveryServiceDAOFactory.getInstance().getDiscoveryServiceDAO();
//create a DSClient
TestStub dscTestStub = req_505_util.createDiscoveryServiceClient(new ServiceID("localpeer1", "servertest",
PeerConstants.MODULE_NAME, PeerConstants.REMOTE_WORKER_PROVIDER));
//create a remote DS
TestStub dsTestStub = req_511_util.createDiscoveryService(new ServiceID("remoteds", "servertest", "DS", DiscoveryServiceConstants.DS_OBJECT_NAME));
List<TestStub> dsTestStubs = new ArrayList<TestStub>();
dsTestStubs.add(dsTestStub);
//join network and receive list
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<String> localPeers = new HashSet<String>();
Set<String> remotePeers = new HashSet<String>();
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);
//Get Complete Status
req_504_util.getCompleteStatus(component, expectedLocalDSNetwork);
//Call joinCommunity
List<String> dscServiceIDList = new LinkedList<String>();
dscServiceIDList.add(dscTestStub.getDeploymentID().getContainerID().getUserAtServer());
req_505_util.getRemoteWorkerProviders(component, dscServiceIDList, dscTestStub, dsTestStubs, true, dscServiceIDList);
localPeers.add(dscTestStub.getDeploymentID().getContainerID().getUserAtServer());
//Get Complete Status
req_504_util.getCompleteStatus(component, expectedLocalDSNetwork);
//the DS verifies if DSClient is up
req_513_util.dsClientIsUp(component, dscTestStub, dsTestStubs, dscServiceIDList, true);
//Get Complete Status
req_504_util.getCompleteStatus(component, expectedLocalDSNetwork);
}
@ReqTest(test = "AT-513.3", reqs = "")
@Test public void test_AT_513_3_DSWithJustPeerAddressesIsNotifiedThatAPeerIsUp() throws Exception{
//Create and start a DS
DiscoveryServiceComponent component = req_502_Util.startDiscoveryService();
//Get the instance of DAO
DiscoveryServiceDAO dsDao = DiscoveryServiceDAOFactory.getInstance().getDiscoveryServiceDAO();
//Create a remote DS
TestStub dsTestStub = req_511_util.createDiscoveryService(new ServiceID("remoteds", "servertest", "DS", DiscoveryServiceConstants.DS_OBJECT_NAME));
String remoteDSAddress = dsTestStub.getDeploymentID().getServiceID().toString();
Set<String> remotePeers = new HashSet<String>();
remotePeers.add("remotepeer@servertest/PEER/REMOTE_WORKERPROVIDER");
dsDao.addDiscoveryService(new DiscoveryServiceInfo(remoteDSAddress, true), remotePeers);
Assert.assertTrue(dsDao.getDSInfo(remoteDSAddress).isUp());
//Get Local DS ServiceID
ObjectDeployment dsOD = component.getObject(DiscoveryServiceConstants.DS_OBJECT_NAME);
ServiceID localDSServiceID = dsOD.getDeploymentID().getServiceID();
//Create a WorkerProvider
TestStub dscTestStub = req_505_util.createDiscoveryServiceClient(new ServiceID("unknownpeer", "servertest",
PeerConstants.MODULE_NAME, PeerConstants.REMOTE_WORKER_PROVIDER));
List<ServiceID> dsList = new ArrayList<ServiceID>();
dsList.add(localDSServiceID);
dsList.add(dsTestStub.getDeploymentID().getServiceID());
Set<String> localPeers = new HashSet<String>();
Map<DiscoveryServiceInfo, Set<String>> expectedLocalDSNetwork = new TreeMap<DiscoveryServiceInfo, Set<String>>();
expectedLocalDSNetwork.put(new DiscoveryServiceInfo(localDSServiceID.toString(), true), localPeers);
expectedLocalDSNetwork.put(new DiscoveryServiceInfo(remoteDSAddress, true), remotePeers);
//the DS verifies if DSClient is up
req_513_util.dsClientIsUp(component, dscTestStub, false);
req_504_util.getCompleteStatus(component, expectedLocalDSNetwork);
}
@ReqTest(test = "AT-513.4", reqs = "")
@Test public void test_AT_513_4_DSWithJustPeerAddressesIsNotifiedThatOneOfTheseIsUp() throws Exception{
//Create and start a DS
DiscoveryServiceComponent component = req_502_Util.startDiscoveryService();
//Get the instance of DAO
DiscoveryServiceDAO dsDao = DiscoveryServiceDAOFactory.getInstance().getDiscoveryServiceDAO();
//Create a remote DS
TestStub dsTestStub = req_511_util.createDiscoveryService(new ServiceID("remoteds", "servertest", "DS", DiscoveryServiceConstants.DS_OBJECT_NAME));
String remoteDSAddress = dsTestStub.getDeploymentID().getServiceID().toString();
Set<String> remotePeers = new HashSet<String>();
//Create a WorkerProvider
TestStub dscTestStub = req_505_util.createDiscoveryServiceClient(new ServiceID("knownpeer", "servertest",
PeerConstants.MODULE_NAME, PeerConstants.REMOTE_WORKER_PROVIDER));
remotePeers.add(dscTestStub.getDeploymentID().getServiceID().toString());
dsDao.addDiscoveryService(new DiscoveryServiceInfo(remoteDSAddress, true), remotePeers);
Assert.assertTrue(dsDao.getDSInfo(remoteDSAddress).isUp());
//Get Local DS ServiceID
ObjectDeployment dsOD = component.getObject(DiscoveryServiceConstants.DS_OBJECT_NAME);
ServiceID localDSServiceID = dsOD.getDeploymentID().getServiceID();
List<ServiceID> dsList = new ArrayList<ServiceID>();
dsList.add(localDSServiceID);
dsList.add(dsTestStub.getDeploymentID().getServiceID());
Set<String> localPeers = new HashSet<String>();
Map<DiscoveryServiceInfo, Set<String>> expectedLocalDSNetwork = new TreeMap<DiscoveryServiceInfo, Set<String>>();
expectedLocalDSNetwork.put(new DiscoveryServiceInfo(localDSServiceID.toString(), true), localPeers);
expectedLocalDSNetwork.put(new DiscoveryServiceInfo(remoteDSAddress, true), remotePeers);
//the DS verifies if DSClient is up
req_513_util.dsClientIsUp(component, dscTestStub, false);
req_504_util.getCompleteStatus(component, expectedLocalDSNetwork);
}
}