package org.ourgrid.acceptance.discoveryservice;
import java.util.ArrayList;
import java.util.HashSet;
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_511_Util;
import org.ourgrid.discoveryservice.DiscoveryServiceComponent;
import org.ourgrid.discoveryservice.DiscoveryServiceComponentContextFactory;
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.discoveryservice.config.DiscoveryServiceConfiguration;
import org.ourgrid.reqtrace.ReqTest;
import br.edu.ufcg.lsd.commune.container.ObjectDeployment;
import br.edu.ufcg.lsd.commune.context.PropertiesFileParser;
import br.edu.ufcg.lsd.commune.identification.ServiceID;
import br.edu.ufcg.lsd.commune.testinfra.util.TestContext;
import br.edu.ufcg.lsd.commune.testinfra.util.TestStub;
public class Req_511_Test extends DiscoveryServiceAcceptanceTestCase{
private static final String REMOTE_DS_ADDRESS = "server@test/DS/DS_OBJECT";
Req_502_Util req_502_Util = new Req_502_Util(super.getComponentContext());
Req_504_Util req_504_Util = new Req_504_Util(super.getComponentContext());
Req_511_Util req_511_Util = new Req_511_Util(super.getComponentContext());
@Override
protected TestContext getComponentContext() {
TestContext testContext = new TestContext(
new DiscoveryServiceComponentContextFactory(
new PropertiesFileParser(DS_PROP_FILEPATH
)).createContext());
testContext.set(DiscoveryServiceConfiguration.PROP_DS_NETWORK, REMOTE_DS_ADDRESS);
return testContext;
}
/**
*
*/
@ReqTest(test = "AT-511.1", reqs = "")
@Test public void test_AT_511_1_addsOneDS() 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
TestStub dsTestStub = req_511_Util.createDiscoveryService(new ServiceID("test1", "servertest1", "DS", DiscoveryServiceConstants.DS_OBJECT_NAME));
//join network and receive list
List<ServiceID> dsList = new ArrayList<ServiceID>();
dsList.add(dsTestStub.getDeploymentID().getServiceID());
req_511_Util.getDiscoveryServices(component, dsList, dsTestStub);
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);
req_504_Util.getCompleteStatus(component, expectedLocalDSNetwork);
Assert.assertTrue(dsDao.getDSInfo(dsTestStub.getDeploymentID().getServiceID().toString()).isUp());
}
/**
*
*/
@ReqTest(test = "AT-511.2", reqs = "")
@Test public void test_AT_511_2_addManyDSs() 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 five remote DSs
TestStub dsTestStub1 = req_511_Util.createDiscoveryService(new ServiceID("test1", "servertest1", "DS", DiscoveryServiceConstants.DS_OBJECT_NAME));
TestStub dsTestStub2 = req_511_Util.createDiscoveryService(new ServiceID("test2", "servertest2", "DS", DiscoveryServiceConstants.DS_OBJECT_NAME));
TestStub dsTestStub3 = req_511_Util.createDiscoveryService(new ServiceID("test3", "servertest3", "DS", DiscoveryServiceConstants.DS_OBJECT_NAME));
TestStub dsTestStub4 = req_511_Util.createDiscoveryService(new ServiceID("test4", "servertest4", "DS", DiscoveryServiceConstants.DS_OBJECT_NAME));
TestStub dsTestStub5 = req_511_Util.createDiscoveryService(new ServiceID("test5", "servertest5", "DS", DiscoveryServiceConstants.DS_OBJECT_NAME));
//each one will join network and receive the actual list
List<ServiceID> dsList = new ArrayList<ServiceID>();
dsList.add(dsTestStub1.getDeploymentID().getServiceID());
req_511_Util.getDiscoveryServices(component, dsList, dsTestStub1);
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(dsTestStub1.getDeploymentID().getServiceID().toString(), true), remotePeers);
req_504_Util.getCompleteStatus(component, expectedLocalDSNetwork);
dsList.add(dsTestStub2.getDeploymentID().getServiceID());
req_511_Util.getDiscoveryServices(component, dsList, dsTestStub2);
expectedLocalDSNetwork.put(new DiscoveryServiceInfo(dsTestStub2.getDeploymentID().getServiceID().toString(), true), remotePeers);
req_504_Util.getCompleteStatus(component, expectedLocalDSNetwork);
dsList.add(dsTestStub3.getDeploymentID().getServiceID());
req_511_Util.getDiscoveryServices(component, dsList, dsTestStub3);
expectedLocalDSNetwork.put(new DiscoveryServiceInfo(dsTestStub3.getDeploymentID().getServiceID().toString(), true), remotePeers);
req_504_Util.getCompleteStatus(component, expectedLocalDSNetwork);
dsList.add(dsTestStub4.getDeploymentID().getServiceID());
req_511_Util.getDiscoveryServices(component, dsList, dsTestStub4);
expectedLocalDSNetwork.put(new DiscoveryServiceInfo(dsTestStub4.getDeploymentID().getServiceID().toString(), true), remotePeers);
req_504_Util.getCompleteStatus(component, expectedLocalDSNetwork);
dsList.add(dsTestStub5.getDeploymentID().getServiceID());
req_511_Util.getDiscoveryServices(component, dsList, dsTestStub5);
expectedLocalDSNetwork.put(new DiscoveryServiceInfo(dsTestStub5.getDeploymentID().getServiceID().toString(), true), remotePeers);
req_504_Util.getCompleteStatus(component, expectedLocalDSNetwork);
Assert.assertTrue(dsDao.getDSInfo(dsTestStub1.getDeploymentID().getServiceID().toString()).isUp());
Assert.assertTrue(dsDao.getDSInfo(dsTestStub2.getDeploymentID().getServiceID().toString()).isUp());
Assert.assertTrue(dsDao.getDSInfo(dsTestStub3.getDeploymentID().getServiceID().toString()).isUp());
Assert.assertTrue(dsDao.getDSInfo(dsTestStub4.getDeploymentID().getServiceID().toString()).isUp());
Assert.assertTrue(dsDao.getDSInfo(dsTestStub5.getDeploymentID().getServiceID().toString()).isUp());
}
/**
*
*/
@ReqTest(test = "AT-511.3", reqs = "")
@Test public void test_AT_511_3_startedWithDSAdresses() 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();
String remoteDSAddress = "test1@servertest/DS/DS_OBJECT";
dsDao.addDiscoveryService(new DiscoveryServiceInfo(remoteDSAddress, false), new HashSet<String>());
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(remoteDSAddress, true), remotePeers);
req_504_Util.getCompleteStatus(component, expectedLocalDSNetwork);
//create a remote DS
TestStub dsTestStub1 = req_511_Util.createDiscoveryService(new ServiceID("server", "test", "DS", DiscoveryServiceConstants.DS_OBJECT_NAME));
//join network and receive list
List<ServiceID> dsList = new ArrayList<ServiceID>();
dsList.add(ServiceID.parse(remoteDSAddress));
dsList.add(dsTestStub1.getDeploymentID().getServiceID());
req_511_Util.getDiscoveryServices(component, dsList, dsTestStub1);
expectedLocalDSNetwork.put(new DiscoveryServiceInfo(dsTestStub1.getDeploymentID().getServiceID().toString(), true), remotePeers);
req_504_Util.getCompleteStatus(component, expectedLocalDSNetwork);
Assert.assertFalse(dsDao.getDSInfo(remoteDSAddress).isUp());
Assert.assertTrue(dsDao.getDSInfo(dsTestStub1.getDeploymentID().getServiceID().toString()).isUp());
}
}