package org.ourgrid.acceptance.discoveryservice;
import static org.junit.Assert.assertTrue;
import java.util.ArrayList;
import java.util.List;
import org.junit.Test;
import org.ourgrid.acceptance.util.discoveryservice.Req_502_Util;
import org.ourgrid.acceptance.util.discoveryservice.Req_503_Util;
import org.ourgrid.acceptance.util.discoveryservice.Req_511_Util;
import org.ourgrid.common.interfaces.CommunityStatusProvider;
import org.ourgrid.discoveryservice.DiscoveryServiceComponent;
import org.ourgrid.discoveryservice.DiscoveryServiceConstants;
import br.edu.ufcg.lsd.commune.container.ObjectDeployment;
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_502_Test extends DiscoveryServiceAcceptanceTestCase {
private Req_502_Util req_502_Util = new Req_502_Util(getComponentContext());
private Req_503_Util req_503_Util = new Req_503_Util(getComponentContext());
private Req_511_Util req_511_Util = new Req_511_Util(getComponentContext());
/**
* Create a Discovery Service;
* Start the DS with the public key "wrongPublicKey" - Verify if the following warn message was logged:
o An unknown entity tried to start the Discovery Service. Only the local modules can perform this operation. Unknown entity public key: [senderPublicKey].
* @throws Exception
*/
@Test public void test_AT_502_1_UnknownEntitySendAStartCommand() throws Exception{
// Start the Discovery Service with the public key "wrongPublicKey"
req_502_Util.startDiscoveryServiceWithWrongPublicKey("wrongPublicKey");
}
/**
* Create a DS;
* Start a DS with the correct public key;
* Verify if the following message was logged:
o "Discovery Service has been successfully started."
* Get(lookup) the remote object "COMMUNITY_STATUS_PROVIDER" and verify if its type is:
o org.ourgrid.common.interfaces.CommunityStatusProvider
* Verify if the ControlClient received the operation succeed message.
* @throws Exception
*/
@Test public void test_AT_502_2_StartCommand() throws Exception{
// Start the Discovery Service
DiscoveryServiceComponent component = req_502_Util.startDiscoveryService();
// Get(lookup) the remote object "COMMUNITY_STATUS_PROVIDER"
assertTrue(isBound(component, DiscoveryServiceConstants.COMMUNITY_STATUS_PROVIDER,
CommunityStatusProvider.class));
}
/**
* Create a DS;
* Start a DS with the correct public key;
* Start the same DS again with the correct public key.
* Verify if the Control Result Operation contains an exception whose type is:
o br.edu.ufcg.lsd.commune.container.control.ComponentAlreadyStartedException
* @throws Exception
*/
@Test public void test_AT_502_3_TryToStartAAlreadyStartedDS() throws Exception{
// Start the Discovery Service
DiscoveryServiceComponent component = req_502_Util.startDiscoveryService();
// Start the Discovery Service again
req_502_Util.startDiscoveryServiceAgain(component);
}
@Test public void test_AT_502_4_RestartDSWithNetwork() throws Exception{
// Start the Discovery Service
DiscoveryServiceComponent component = req_502_Util.startDiscoveryService();
//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);
assertTrue(AcceptanceTestUtil.isInterested(component, dsTestStub.getDeploymentID().getServiceID(),
dsAcceptanceUtil.getDiscoveryServiceMonitorDeployment().getDeploymentID()));
//stop local DS
req_503_Util.stopDiscoveryService(component);
//restart DS
component = req_502_Util.startDiscoveryService();
assertTrue(AcceptanceTestUtil.isInterested(component, dsTestStub.getDeploymentID().getServiceID(),
dsAcceptanceUtil.getDiscoveryServiceMonitorDeployment().getDeploymentID()));
}
@Test public void test_AT_502_5_VerifyLocalDSRegisterInterest() throws Exception{
// Start the Discovery Service
DiscoveryServiceComponent component = req_502_Util.startDiscoveryService();
//create remote DS 1
TestStub dsTestStub = req_511_Util.createDiscoveryService(new ServiceID("test1", "servertest1", "DS", DiscoveryServiceConstants.DS_OBJECT_NAME));
//create remote DS 2
TestStub dsTestStub2 = req_511_Util.createDiscoveryService(new ServiceID("test2", "servertest2", "DS", DiscoveryServiceConstants.DS_OBJECT_NAME));
//Remote DS 2 joins network and receive list
List<ServiceID> dsList = new ArrayList<ServiceID>();
dsList.add(dsTestStub.getDeploymentID().getServiceID());
req_511_Util.getDiscoveryServices(component, dsList, dsTestStub);
assertTrue(AcceptanceTestUtil.isInterested(component, dsTestStub.getDeploymentID().getServiceID(),
dsAcceptanceUtil.getDiscoveryServiceMonitorDeployment().getDeploymentID()));
//Remote DS 1 joins network and receive list
dsList.add(dsTestStub2.getDeploymentID().getServiceID());
req_511_Util.getDiscoveryServices(component, dsList, dsTestStub2);
assertTrue(AcceptanceTestUtil.isInterested(component, dsTestStub.getDeploymentID().getServiceID(),
dsAcceptanceUtil.getDiscoveryServiceMonitorDeployment().getDeploymentID()));
assertTrue(AcceptanceTestUtil.isInterested(component, dsTestStub2.getDeploymentID().getServiceID(),
dsAcceptanceUtil.getDiscoveryServiceMonitorDeployment().getDeploymentID()));
//Stop local DS
req_503_Util.stopDiscoveryService(component);
//Restart local DS
req_502_Util.startDiscoveryService();
//Get DS Monitor Object
ObjectDeployment dsMonitorDeployment = dsAcceptanceUtil.getDiscoveryServiceMonitorDeployment();
AcceptanceTestUtil.isInterested(component, dsTestStub.getDeploymentID().getServiceID(), dsMonitorDeployment.getDeploymentID());
AcceptanceTestUtil.isInterested(component, dsTestStub2.getDeploymentID().getServiceID(), dsMonitorDeployment.getDeploymentID());
}
}