/*
* Copyright (C) 2008 Universidade Federal de Campina Grande
*
* This file is part of OurGrid.
*
* OurGrid is free software: you can redistribute it and/or modify it under the
* terms of the GNU Lesser General Public License as published by the Free
* Software Foundation, either version 3 of the License, or (at your option)
* any later version.
*
* This program is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License
* for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/
package org.ourgrid.acceptance.peer;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
import java.util.HashMap;
import org.easymock.EasyMock;
import org.easymock.IArgumentMatcher;
import org.junit.After;
import org.junit.Test;
import org.ourgrid.acceptance.util.peer.Req_010_Util;
import org.ourgrid.common.interfaces.status.NetworkOfFavorsStatus;
import org.ourgrid.common.interfaces.status.PeerStatusProvider;
import org.ourgrid.common.interfaces.status.PeerStatusProviderClient;
import org.ourgrid.peer.PeerComponent;
import org.ourgrid.peer.status.PeerCompleteStatus;
import org.ourgrid.peer.to.PeerBalance;
import org.ourgrid.reqtrace.ReqTest;
import br.edu.ufcg.lsd.commune.ModuleProperties;
import br.edu.ufcg.lsd.commune.container.ObjectDeployment;
import br.edu.ufcg.lsd.commune.identification.ContainerID;
import br.edu.ufcg.lsd.commune.identification.DeploymentID;
import br.edu.ufcg.lsd.commune.identification.ServiceID;
import br.edu.ufcg.lsd.commune.network.xmpp.XMPPProperties;
import br.edu.ufcg.lsd.commune.testinfra.AcceptanceTestUtil;
@ReqTest(reqs="REQ038")
public class Req_038a_Test extends PeerAcceptanceTestCase {
private long tickA;
private long tickB;
private PeerComponent component;
private Req_010_Util req_010_Util = new Req_010_Util(getComponentContext());
@After
public void tearDown() throws Exception{
req_010_Util.niceStopPeer(component);
super.tearDown();
}
/**
* Verifies peer's EntityID, up time and configuration.
*/
@ReqTest(test="AT-038A.1", reqs="REQ038A")
@Test public void test_AT_038a_1_peerCompleteStatus() throws Exception{
tickA = System.currentTimeMillis();
component = req_010_Util.startPeer();
//Get remote reference
PeerStatusProvider statusProvider = peerAcceptanceUtil.getStatusProviderProxy();
ObjectDeployment stOD = peerAcceptanceUtil.getStatusProviderObjectDeployment();
ServiceID peerEntityID = stOD.getDeploymentID().getServiceID();
//Create callback mock
PeerStatusProviderClient statusProviderClient = getMock(NOT_NICE, PeerStatusProviderClient.class);
DeploymentID pspcID = new DeploymentID(new ContainerID("pspc", "pspcServe", "ds", "dsPK"), "ds");
AcceptanceTestUtil.publishTestObject(component, pspcID, statusProviderClient, PeerStatusProviderClient.class);
//Record Mock behavior
resetActiveMocks();
statusProviderClient.hereIsCompleteStatus(EasyMock.eq(peerEntityID), createPeerCompleteStatusMatcher());
replayActiveMocks();
//Looking up the peer complete status
statusProvider.getCompleteStatus(statusProviderClient);
verifyActiveMocks();
}
private PeerCompleteStatus createPeerCompleteStatusMatcher(){
EasyMock.reportMatcher(new SimplePeerCompleteStatusMatcher());
return null;
}
private class SimplePeerCompleteStatusMatcher implements IArgumentMatcher{
/**
* Matches PeerCompleteStatus's configurations and if up time <= (tickB - tickA).
* Tick b is marked in this method.
* Object arg0
*/
public boolean matches(Object arg0) {
tickB = System.currentTimeMillis();
PeerCompleteStatus completeStatus = ((PeerCompleteStatus)arg0);
//TODO
String configuration = completeStatus.getConfiguration();
assertTrue(configuration.contains(getComponentContext().getProperty(XMPPProperties.PROP_USERNAME)));
assertTrue(configuration.contains(getComponentContext().getProperty(XMPPProperties.PROP_XMPP_SERVERNAME)));
assertTrue(configuration.contains(getComponentContext().getProperty(ModuleProperties.PROP_CONFDIR)));
assertTrue(completeStatus.getLocalConsumersInfo().isEmpty());
assertTrue(completeStatus.getLocalWorkersInfo().isEmpty());
assertEquals(completeStatus.getNetworkOfFavorsStatus(),new NetworkOfFavorsStatus(new HashMap<String, PeerBalance>()));
assertTrue(completeStatus.getRemoteConsumersInfo().isEmpty());
assertTrue(completeStatus.getRemoteWorkersInfo().isEmpty());
assertTrue(completeStatus.getUsersInfo().isEmpty());
assertTrue(completeStatus.getUpTime() <= (tickB - tickA));
return true;
}
public void appendTo(StringBuffer arg0) {}
}
}