/* * 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.util.peer; import org.easymock.classextension.EasyMock; import org.ourgrid.acceptance.util.PeerAcceptanceUtil; import org.ourgrid.common.interfaces.LocalWorkerProvider; import org.ourgrid.common.interfaces.management.WorkerManagementClient; import org.ourgrid.common.interfaces.to.GridProcessAccounting; import org.ourgrid.common.interfaces.to.GridProcessState; import org.ourgrid.common.interfaces.to.WorkAccounting; import org.ourgrid.peer.PeerComponent; import org.ourgrid.peer.to.PeerBalance; import br.edu.ufcg.lsd.commune.container.logging.CommuneLogger; import br.edu.ufcg.lsd.commune.context.ModuleContext; import br.edu.ufcg.lsd.commune.identification.DeploymentID; import br.edu.ufcg.lsd.commune.testinfra.AcceptanceTestUtil; public class Req_027_Util extends PeerAcceptanceUtil { public Req_027_Util(ModuleContext context) { super(context); } /** * Reports a replica accounting without verifying any behavior. * Mainly used for input validation tests. * @param brokerPublicKey The consumer public key. * @param replicaAccounting The replica accounting to be reported */ public void reportReplicaAccounting(PeerComponent component, GridProcessAccounting replicaAccounting, DeploymentID brokerID) { LocalWorkerProvider localWorkerProvider = getLocalWorkerProvider(); // AcceptanceTestUtil.publishTestObject(component, brokerID, EasyMock.createMock(LocalWorkerProviderClient.class), LocalWorkerProviderClient.class); AcceptanceTestUtil.setExecutionContext(component, getLocalWorkerProviderDeployment(), brokerID); localWorkerProvider.reportReplicaAccounting(replicaAccounting); } /** * Reports a local replica accounting. * @param component The peer component * @param brokerID The objectID for the <code>LocalWorkerProvider</code> interface of the consumer. * @param replicaAccounting The replica accounting to be reported */ public void reportReplicaAccounting(PeerComponent component, DeploymentID brokerID, GridProcessAccounting replicaAccounting) { reportReplicaAccounting(component, brokerID, replicaAccounting, false); } /** * Reports a replica accounting. * @param component The peer component * @param brokerID The objectID for the <code>LocalWorkerProvider</code> interface of the consumer. * @param replicaAccounting The replica accounting to be reported * @param localWorker True if the worker is a local worker, false otherwise. */ public void reportReplicaAccounting(PeerComponent component, DeploymentID brokerID, GridProcessAccounting replicaAccounting, boolean localWorker) { // RequestSpec requestSpec = replicaAccounting.getRequestSpec(); Double cpu = replicaAccounting.getAccountings().getCPUTime(); Double data = replicaAccounting.getAccountings().getData(); boolean aborted = replicaAccounting.getState().equals(GridProcessState.ABORTED); //Changes temporarily the logger mock CommuneLogger oldLogger = component.getLogger(); CommuneLogger newLogger = EasyMock.createMock(CommuneLogger.class); component.setLogger(newLogger); // Record mock String abortedStr = (aborted) ? "n aborted " : " "; String localWorkerStr = (localWorker) ? "local " : ""; newLogger.debug("Received a" + abortedStr + "replica accounting from the user [" + brokerID.getServiceID() + "] referring to the " + localWorkerStr + "worker [" + replicaAccounting.getWorkerID() + "], on request " + replicaAccounting.getRequestId() + ": cpu=" + cpu + ", data=" + data + "."); EasyMock.replay(newLogger); LocalWorkerProvider localWorkerProvider = getLocalWorkerProvider(); AcceptanceTestUtil.setExecutionContext(component, getLocalWorkerProviderDeployment(), brokerID); localWorkerProvider.reportReplicaAccounting(replicaAccounting); component.setLogger(oldLogger); } /** * Reports work accountings without verifying any behavior. * Mainly used for input validation tests. * @param workerPublicKey The worker public key * @param workAccountings The work accountings to be reported */ public void reportWorkAccounting(PeerComponent component, DeploymentID workerID, WorkAccounting... workAccountings) { WorkerManagementClient workerManagementClient = getWorkerManagementClient(); AcceptanceTestUtil.setExecutionContext(component, getWorkerManagementClientDeployment(), workerID); workerManagementClient.reportWorkAccounting(AcceptanceTestUtil.createList(workAccountings)); } /** * Report work accountings * @param peerComponent The peer component * @param workAccounting The work accounting to be reported * @param workerOID The DeploymentID for <code>WorkerManagement</code> * interface of the worker */ public void reportWorkAccounting(PeerComponent peerComponent, WorkAccounting workAccounting, DeploymentID workerOID) { //Changes temporarily the logger mock CommuneLogger logger = peerComponent.getLogger(); EasyMock.reset(logger); //record mock behavior double cpuTime = workAccounting.getAccountings().getAttribute(PeerBalance.CPU_TIME); double dataSize = workAccounting.getAccountings().getAttribute(PeerBalance.DATA); if(workAccounting.getConsumerPeerDN() != null && cpuTime > 0 && dataSize >= 0) { logger.debug("Received a work accounting from the worker [" + workerOID.getServiceID() + "] " + "referring to the consumer with certificate DN: " + workAccounting.getConsumerPeerDN() + ". " + "cpu=" + workAccounting.getAccountings().getAttribute(PeerBalance.CPU_TIME) + ", " + "data=" + workAccounting.getAccountings().getAttribute(PeerBalance.DATA) + "."); } EasyMock.replay(logger); //Report work accountings WorkerManagementClient workerManagementClient = getWorkerManagementClient(); AcceptanceTestUtil.setExecutionContext(peerComponent, getWorkerManagementClientDeployment(), workerOID); workerManagementClient.reportWorkAccounting(AcceptanceTestUtil.createList(workAccounting)); //Verify logger mock EasyMock.verify(logger); EasyMock.reset(logger); } public void reportWorkAccountingLocal(PeerComponent peerComponent, WorkAccounting workAccounting, DeploymentID workerManagOID) { CommuneLogger logger = peerComponent.getLogger(); EasyMock.reset(logger); logger.warn("Ignoring a work accounting from the worker ["+workerManagOID.getServiceID()+"] " + "referring to this local peer as the consumer"); EasyMock.replay(logger); //Report work accountings WorkerManagementClient workerManagementClient = getWorkerManagementClient(); AcceptanceTestUtil.setExecutionContext(peerComponent, getWorkerManagementClientDeployment(), workerManagOID); workerManagementClient.reportWorkAccounting(AcceptanceTestUtil.createList(workAccounting)); //Verify logger mock EasyMock.verify(logger); EasyMock.reset(logger); } public void reportWorkAccoutingWithoutReceivedRemoteWorkProvider(PeerComponent peerComponent, WorkAccounting workAccounting, DeploymentID workerOID) { //Changes temporarily the logger mock CommuneLogger logger = peerComponent.getLogger(); EasyMock.reset(logger); //record mock behavior double cpuTime = workAccounting.getAccountings().getAttribute(PeerBalance.CPU_TIME); double dataSize = workAccounting.getAccountings().getAttribute(PeerBalance.DATA); if(workAccounting.getConsumerPeerDN() != null && cpuTime > 0 && dataSize >= 0) { logger.debug("Received a work accounting from the worker [" + workerOID.getServiceID() + "] " + "referring to the consumer with certificate DN: " + workAccounting.getConsumerPeerDN() + ". " + "cpu=" + cpuTime + ", " + "data=" + dataSize + "."); } String remotePeerDN = workAccounting.getConsumerPeerDN(); logger.warn("The remote peer with certificate subject DN: " + remotePeerDN + " is not received."); EasyMock.replay(logger); //Report work accountings WorkerManagementClient workerManagementClient = getWorkerManagementClient(); AcceptanceTestUtil.setExecutionContext(peerComponent, getWorkerManagementClientDeployment(), workerOID); workerManagementClient.reportWorkAccounting(AcceptanceTestUtil.createList(workAccounting)); //Verify logger mock EasyMock.verify(logger); EasyMock.reset(logger); } public void reportWorkAccoutingWithIllegalCPUTime(PeerComponent peerComponent, WorkAccounting workAccounting, DeploymentID workerManagOID, String publicKey) { //Changes temporarily the logger mock CommuneLogger logger = peerComponent.getLogger(); EasyMock.reset(logger); //record mock behavior logger.warn("Ignoring a work accounting from the worker ["+workerManagOID.getServiceID()+"], " + "referring to the consumer with public key: " + publicKey + ", because the CPU accounting must be positive."); EasyMock.replay(logger); //Report work accountings WorkerManagementClient workerManagementClient = getWorkerManagementClient(); AcceptanceTestUtil.setExecutionContext(peerComponent, getWorkerManagementClientDeployment(), workerManagOID); workerManagementClient.reportWorkAccounting(AcceptanceTestUtil.createList(workAccounting)); //Verify logger mock EasyMock.verify(logger); EasyMock.reset(logger); } public void reportWorkAccoutingWithIllegalData(PeerComponent peerComponent, WorkAccounting workAccounting, DeploymentID workerManagOID, String publicKey) { //Changes temporarily the logger mock CommuneLogger logger = peerComponent.getLogger(); EasyMock.reset(logger); //record mock behavior logger.warn("Ignoring a work accounting from the worker ["+workerManagOID.getServiceID()+"], " + "referring to the consumer with public key: " + publicKey + ", because the DATA accounting must not be negative."); EasyMock.replay(logger); //Report work accountings WorkerManagementClient workerManagementClient = getWorkerManagementClient(); AcceptanceTestUtil.setExecutionContext(peerComponent, getWorkerManagementClientDeployment(), workerManagOID); workerManagementClient.reportWorkAccounting(AcceptanceTestUtil.createList(workAccounting)); //Verify logger mock EasyMock.verify(logger); EasyMock.reset(logger); } public void reportWorkAccoutingWithoutConsumer(PeerComponent peerComponent, WorkAccounting workAccounting, DeploymentID workerManagOID) { //Changes temporarily the logger mock CommuneLogger logger = peerComponent.getLogger(); EasyMock.reset(logger); //record mock behavior logger.warn("Ignoring a work accounting with no consumer from worker: ["+workerManagOID.getServiceID()+"]"); EasyMock.replay(logger); //Report work accountings WorkerManagementClient workerManagementClient = getWorkerManagementClient(); AcceptanceTestUtil.setExecutionContext(peerComponent, getWorkerManagementClientDeployment(), workerManagOID); workerManagementClient.reportWorkAccounting(AcceptanceTestUtil.createList(workAccounting)); //Verify logger mock EasyMock.verify(logger); EasyMock.reset(logger); } }