/*
* 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 junit.framework.Assert.assertFalse;
import static junit.framework.Assert.assertTrue;
import java.io.File;
import java.util.List;
import org.easymock.classextension.EasyMock;
import org.junit.Before;
import org.junit.Test;
import org.junit.experimental.categories.Category;
import org.ourgrid.acceptance.util.JDLCompliantTest;
import org.ourgrid.acceptance.util.PeerAcceptanceUtil;
import org.ourgrid.acceptance.util.WorkerAcceptanceUtil;
import org.ourgrid.acceptance.util.WorkerAllocation;
import org.ourgrid.acceptance.util.peer.Req_010_Util;
import org.ourgrid.acceptance.util.peer.Req_011_Util;
import org.ourgrid.acceptance.util.peer.Req_015_Util;
import org.ourgrid.acceptance.util.peer.Req_018_Util;
import org.ourgrid.acceptance.util.peer.Req_019_Util;
import org.ourgrid.acceptance.util.peer.Req_020_Util;
import org.ourgrid.acceptance.util.peer.Req_025_Util;
import org.ourgrid.acceptance.util.peer.Req_036_Util;
import org.ourgrid.acceptance.util.peer.Req_101_Util;
import org.ourgrid.acceptance.util.peer.Req_106_Util;
import org.ourgrid.acceptance.util.peer.Req_108_Util;
import org.ourgrid.common.interfaces.LocalWorkerProvider;
import org.ourgrid.common.interfaces.LocalWorkerProviderClient;
import org.ourgrid.common.interfaces.RemoteWorkerProvider;
import org.ourgrid.common.interfaces.RemoteWorkerProviderClient;
import org.ourgrid.common.interfaces.Worker;
import org.ourgrid.common.interfaces.control.PeerControl;
import org.ourgrid.common.interfaces.control.PeerControlClient;
import org.ourgrid.common.interfaces.management.RemoteWorkerManagement;
import org.ourgrid.common.interfaces.to.LocalWorkerState;
import org.ourgrid.common.interfaces.to.RequestSpecification;
import org.ourgrid.common.interfaces.to.UserInfo;
import org.ourgrid.common.interfaces.to.UserState;
import org.ourgrid.common.interfaces.to.WorkerInfo;
import org.ourgrid.common.specification.OurGridSpecificationConstants;
import org.ourgrid.common.specification.job.JobSpecification;
import org.ourgrid.common.specification.worker.WorkerSpecification;
import org.ourgrid.deployer.xmpp.XMPPAccount;
import org.ourgrid.discoveryservice.DiscoveryServiceConstants;
import org.ourgrid.peer.PeerComponent;
import org.ourgrid.peer.PeerConstants;
import org.ourgrid.reqtrace.ReqTest;
import br.edu.ufcg.lsd.commune.CommuneRuntimeException;
import br.edu.ufcg.lsd.commune.container.ObjectDeployment;
import br.edu.ufcg.lsd.commune.container.logging.CommuneLogger;
import br.edu.ufcg.lsd.commune.identification.ContainerID;
import br.edu.ufcg.lsd.commune.identification.DeploymentID;
import br.edu.ufcg.lsd.commune.testinfra.AcceptanceTestUtil;
import br.edu.ufcg.lsd.commune.testinfra.util.TestStub;
@ReqTest(reqs="REQ015")
public class Req_015_Test extends PeerAcceptanceTestCase {
private WorkerAcceptanceUtil workerAcceptanceUtil = new WorkerAcceptanceUtil(getComponentContext());
private PeerAcceptanceUtil peerAcceptanceUtil = new PeerAcceptanceUtil(getComponentContext());
private Req_010_Util req_010_Util = new Req_010_Util(getComponentContext());
private Req_011_Util req_011_Util = new Req_011_Util(getComponentContext());
private Req_018_Util req_018_Util = new Req_018_Util(getComponentContext());
private Req_019_Util req_019_Util = new Req_019_Util(getComponentContext());
private Req_020_Util req_020_Util = new Req_020_Util(getComponentContext());
private Req_025_Util req_025_Util = new Req_025_Util(getComponentContext());
private Req_101_Util req_101_Util = new Req_101_Util(getComponentContext());
private Req_108_Util req_108_Util = new Req_108_Util(getComponentContext());
private Req_036_Util req_036_Util = new Req_036_Util(getComponentContext());
private Req_106_Util req_106_Util = new Req_106_Util(getComponentContext());
private Req_015_Util req_015_Util = new Req_015_Util(getComponentContext());
public static final String COMM_FILE_PATH = "req_015"+File.separator;
private PeerComponent peerComponent;
@Before
public void setUp() throws Exception{
super.setUp();
PeerAcceptanceUtil.setUp();
}
/**
* Verifies if the peer give the worker back to Broker, because the
* request is not paused.
*/
@ReqTest(test="AT-015.1", reqs="REQ015")
@Test public void test_AT_015_1_BrokerDisposesLocalWorker() throws Exception{
//Create an user account
XMPPAccount user = req_101_Util.createLocalUser("user011", "server011", "011011");
//Start peer and set a mock log
peerComponent = req_010_Util.startPeer();
PeerControl peerControl = peerAcceptanceUtil.getPeerControl();
ObjectDeployment pcOD = peerAcceptanceUtil.getPeerControlDeployment();
PeerControlClient peerControlClient1 = EasyMock.createMock(PeerControlClient.class);
DeploymentID pccID1 = new DeploymentID(new ContainerID("pcc1", "broker", "broker"), "user1");
AcceptanceTestUtil.publishTestObject(peerComponent, pccID1, peerControlClient1, PeerControlClient.class);
AcceptanceTestUtil.setExecutionContext(peerComponent, pcOD, pccID1);
try {
peerControl.addUser(peerControlClient1, user.getUsername() + "@" + user.getServerAddress());
} catch (CommuneRuntimeException e) {
//do nothing - the user is already added.
}
//Worker login
String workerPublicKey = "workerPublicKey";
WorkerSpecification workerSpecA = workerAcceptanceUtil.createWorkerSpec("U1", "S1");
//Worker login
DeploymentID wmOID = req_019_Util.createWorkerManagementDeploymentID(workerPublicKey, workerSpecA);
req_010_Util.workerLogin(peerComponent, workerSpecA, wmOID);
//Change worker status to IDLE
req_025_Util.changeWorkerStatusToIdle(peerComponent, wmOID);
//Login with a valid user
String brokerPubKey = "brokerPubkey";
DeploymentID lwpcOID = req_108_Util.login(peerComponent, user, brokerPubKey);
LocalWorkerProviderClient lwpc = (LocalWorkerProviderClient) AcceptanceTestUtil.getBoundObject(lwpcOID);
//Request a worker for the logged user
RequestSpecification requestSpec1 = new RequestSpecification(0, new JobSpecification("label"), 1, "", 1, 0, 0);
WorkerAllocation allocationA = new WorkerAllocation(wmOID);
req_011_Util.requestForLocalConsumer(peerComponent, new TestStub(lwpcOID, lwpc), requestSpec1, allocationA);
//Change worker status to ALLOCATED FOR BROKER
Worker worker =
(Worker) req_025_Util.changeWorkerStatusToAllocatedForBroker(peerComponent, lwpcOID, wmOID, workerSpecA, requestSpec1).getObject();
//The user disposes the worker without pausing the request - expect to allocate the worker for him again
allocationA.addLoserRequestSpec(requestSpec1).addLoserConsumer(lwpcOID).addWinnerConsumer(lwpcOID);
req_015_Util.localConsumerDisposesLocalWorker(peerComponent, worker, allocationA);
assertTrue(peerAcceptanceUtil.isPeerInterestedOnBroker(lwpcOID.getServiceID()));
assertTrue(peerAcceptanceUtil.isPeerInterestedOnLocalWorker(wmOID.getServiceID()));
//Verify if the client was marked as CONSUMING
UserInfo userInfo1 = new UserInfo(user.getUsername(), user.getServerAddress(), brokerPubKey, UserState.CONSUMING);
List<UserInfo> usersInfo = AcceptanceTestUtil.createList(userInfo1);
req_106_Util.getUsersStatus(usersInfo);
//Verify if the worker A was marked as IN_USE
WorkerInfo workerInfo = new WorkerInfo(workerSpecA, LocalWorkerState.IN_USE, lwpcOID.getServiceID().toString());
List<WorkerInfo> workersInfo = AcceptanceTestUtil.createList(workerInfo);
req_036_Util.getLocalWorkersStatus(workersInfo);
}
/**
* Verifies if the peer give the remote worker back to Broker, because the
* request is not paused.
*/
@ReqTest(test="AT-015.2", reqs="REQ015")
@Test public void test_AT_015_2_BrokerDisposesRemoteWorker() throws Exception {
//Create an user account
XMPPAccount user = req_101_Util.createLocalUser("user011", "server011", "011011");
//Start peer and set mocks for logger and timer
peerComponent = req_010_Util.startPeer();
CommuneLogger loggerMock = getMock(NOT_NICE, CommuneLogger.class);
peerComponent.setLogger(loggerMock);
//DiscoveryService recovery
DeploymentID dsID = new DeploymentID(new ContainerID("magodosnos", "sweetleaf.lab", DiscoveryServiceConstants.MODULE_NAME),
DiscoveryServiceConstants.DS_OBJECT_NAME);
req_020_Util.notifyDiscoveryServiceRecovery(peerComponent, dsID);
PeerControl peerControl = peerAcceptanceUtil.getPeerControl();
ObjectDeployment pcOD = peerAcceptanceUtil.getPeerControlDeployment();
PeerControlClient peerControlClient1 = EasyMock.createMock(PeerControlClient.class);
DeploymentID pccID1 = new DeploymentID(new ContainerID("pcc1", "broker", "broker"), "user1");
AcceptanceTestUtil.publishTestObject(peerComponent, pccID1, peerControlClient1, PeerControlClient.class);
AcceptanceTestUtil.setExecutionContext(peerComponent, pcOD, pccID1);
try {
peerControl.addUser(peerControlClient1, user.getUsername() + "@" + user.getServerAddress());
} catch (CommuneRuntimeException e) {
//do nothing - the user is already added.
}
//Client login and request workers after ds recovery - expect OG peer to query ds
String brokerPubKey = "brokerPublicKey";
DeploymentID lwpcOID = req_108_Util.login(peerComponent, user, brokerPubKey);
LocalWorkerProviderClient lwpc = (LocalWorkerProviderClient) AcceptanceTestUtil.getBoundObject(lwpcOID);
RequestSpecification requestSpec1 = new RequestSpecification(0, new JobSpecification("label"), 1, "os = windows AND mem > 256", 1, 0, 0);
req_011_Util.requestForLocalConsumer(peerComponent, new TestStub(lwpcOID, lwpc), requestSpec1);
//GIS client receive a remote worker provider
WorkerSpecification workerSpec = workerAcceptanceUtil.createWorkerSpec("U1", "S1");
workerSpec.putAttribute(OurGridSpecificationConstants.ATT_OS, "windows");
workerSpec.putAttribute(OurGridSpecificationConstants.ATT_MEM, "512");
TestStub rwpStub = req_020_Util.receiveRemoteWorkerProvider(peerComponent, requestSpec1, "rwpUser",
"rwpServer", "rwpPublicKey", workerSpec);
RemoteWorkerProvider rwp = (RemoteWorkerProvider) rwpStub.getObject();
DeploymentID rwpID = rwpStub.getDeploymentID();
//Remote worker provider client receive a remote worker
TestStub rmwStub =
req_018_Util.receiveRemoteWorker(peerComponent, rwp, rwpID, workerSpec, "workerPK", brokerPubKey);
DeploymentID rmwOID = rmwStub.getDeploymentID();
ObjectDeployment rmwMonitorOD = peerAcceptanceUtil.getRemoteWorkerMonitorDeployment();
assertTrue(AcceptanceTestUtil.isInterested(peerComponent, rmwOID.getServiceID(), rmwMonitorOD.getDeploymentID()));
//Change worker status to ALLOCATED FOR BROKER
ObjectDeployment lwpcOD = new ObjectDeployment(peerComponent, lwpcOID, AcceptanceTestUtil.getBoundObject(lwpcOID));
TestStub workerStub = req_025_Util.changeWorkerStatusToAllocatedForBroker(peerComponent, lwpcOD,
peerAcceptanceUtil.getRemoteWorkerManagementClientDeployment(), rmwStub.getDeploymentID(), workerSpec, requestSpec1);
//The user disposes the worker without pausing the request - expect to allocate the worker for him again
WorkerAllocation allocation = new WorkerAllocation(rmwOID);
allocation.addLoserConsumer(lwpcOID).addWinnerConsumer(lwpcOID).addLoserRequestSpec(requestSpec1);
req_015_Util.localDisposeRemoteWorker(peerComponent, workerStub, allocation, false);
assertTrue(AcceptanceTestUtil.isInterested(peerComponent, rmwOID.getServiceID(), rmwMonitorOD.getDeploymentID()));
}
/**
* Verifies if the peer command the worker to stop working, after be
* diposed by a remote peer.
*/
@ReqTest(test="AT-015.3", reqs="REQ015")
@Test public void test_AT_015_3_RemotePeerDisposesLocalWorker() throws Exception {
//PeerAcceptanceUtil.recreateSchema();
PeerAcceptanceUtil.copyTrustFile(COMM_FILE_PATH+"015_blank.xml");
//Start peer and set a mock log
peerComponent = req_010_Util.startPeer();
CommuneLogger loggerMock = getMock(NOT_NICE, CommuneLogger.class);
peerComponent.setLogger(loggerMock);
//Worker login
String workerPublicKey = "workerPublicKey";
WorkerSpecification workerSpecA = workerAcceptanceUtil.createWorkerSpec("U1", "S1");
//Worker login
DeploymentID wmOID = req_019_Util.createAndPublishWorkerManagement(peerComponent, workerSpecA, workerPublicKey);
req_010_Util.workerLogin(peerComponent, workerSpecA, wmOID);
//Change worker status to IDLE
req_025_Util.changeWorkerStatusToIdle(peerComponent, wmOID);
//Request a worker for the remote client
WorkerAllocation allocationA = new WorkerAllocation(wmOID);
DeploymentID remoteClientOID = new DeploymentID(new ContainerID("remoteUser", "server", PeerConstants.MODULE_NAME, "peerPublicKey"),
PeerConstants.REMOTE_WORKER_PROVIDER_CLIENT);
RequestSpecification requestSpec = new RequestSpecification(0, new JobSpecification("label"), 1, "", 1, 0, 0);
RemoteWorkerProviderClient rwpc =
req_011_Util.requestForRemoteClient(peerComponent, remoteClientOID, requestSpec, 0, allocationA);
assertTrue(peerAcceptanceUtil.isPeerInterestedOnRemoteClient(remoteClientOID.getServiceID()));
//Change worker status to ALLOCATED FOR PEER
RemoteWorkerManagement rwm =
req_025_Util.changeWorkerStatusToAllocatedForPeer(peerComponent, rwpc, wmOID, workerSpecA, remoteClientOID);
//The remote peer disposes the worker - expect to command the worker to stop working
req_015_Util.remoteDisposeLocalWorker(peerComponent, remoteClientOID, rwm, wmOID);
assertFalse(AcceptanceTestUtil.isInterested(peerComponent, wmOID.getServiceID(), remoteClientOID));
//Verify if the worker A was marked as IDLE
WorkerInfo workerInfo = new WorkerInfo(workerSpecA, LocalWorkerState.IDLE, null);
List<WorkerInfo> workersInfo = AcceptanceTestUtil.createList(workerInfo);
req_036_Util.getLocalWorkersStatus(workersInfo);
}
/**
* Verifies if the peer ignores a worker dispose, on these scenarios:
*
* The message sender is an unknown Broker;
* The message sender is a not logged Broker;
* For a logged Broker:
* o The worker is null;
* o The local worker is unknown;
* o The local worker is not recovered;
* o The local worker is owner;
* o The local worker is idle;
* o The local worker is allocated for other Broker;
* o The local worker is allocated for a remote Peer;
* o The remote worker is allocated for other Broker;
* The message sender is an unknown remote Peer;
* For a valid remote Peer:
* o The local worker is null;
* o The local worker is unknown;
* o The local worker is not recovered;
* o The local worker is idle;
* o The local worker is owner;
* o The local worker is allocated for a Broker;
* o The local worker is allocated for other remote Peer;
* o The worker is remote.
* @throws Exception
*/
@ReqTest(test="AT-015.4", reqs="REQ015")
@Test public void test_AT_015_4_InputValidation() throws Exception {
//PeerAcceptanceUtil.recreateSchema();
PeerAcceptanceUtil.copyTrustFile(COMM_FILE_PATH+"015_blank.xml");
//Create users accounts
XMPPAccount user1 = req_101_Util.createLocalUser("user011_1", "server011", "011011");
XMPPAccount user2 = req_101_Util.createLocalUser("user011_2", "server011", "011011");
XMPPAccount user3 = req_101_Util.createLocalUser("user011_3", "server011", "011011");
XMPPAccount user4 = req_101_Util.createLocalUser("user011_4", "server011", "011011");
//Start peer and set a mock log
peerComponent = req_010_Util.startPeer();
PeerControl peerControl = peerAcceptanceUtil.getPeerControl();
PeerControlClient peerControlClient1 = EasyMock.createMock(PeerControlClient.class);
DeploymentID pccID1 = new DeploymentID(new ContainerID("peerClient1", "peerClientServer1", "broker"), "broker");
AcceptanceTestUtil.publishTestObject(peerComponent, pccID1, peerControlClient1, PeerControlClient.class);
try {
peerControl.addUser(peerControlClient1, user1.getUsername() + "@" + user1.getServerAddress());
} catch (CommuneRuntimeException e) {
//do nothing - the user is already added.
}
PeerControlClient peerControlClient2 = EasyMock.createMock(PeerControlClient.class);
DeploymentID pccID2 = new DeploymentID(new ContainerID("peerClient2", "peerClientServer2", "broker"), "broker");
AcceptanceTestUtil.publishTestObject(peerComponent, pccID2, peerControlClient2, PeerControlClient.class);
try {
peerControl.addUser(peerControlClient2, user2.getUsername() + "@" + user2.getServerAddress());
} catch (CommuneRuntimeException e) {
//do nothing - the user is already added.
}
PeerControlClient peerControlClient3 = EasyMock.createMock(PeerControlClient.class);
DeploymentID pccID3 = new DeploymentID(new ContainerID("peerClient3", "peerClientServer3", "broker"), "broker");
AcceptanceTestUtil.publishTestObject(peerComponent, pccID3, peerControlClient3, PeerControlClient.class);
try {
peerControl.addUser(peerControlClient3, user3.getUsername() + "@" + user3.getServerAddress());
} catch (CommuneRuntimeException e) {
//do nothing - the user is already added.
}
PeerControlClient peerControlClient4 = EasyMock.createMock(PeerControlClient.class);
DeploymentID pccID4 = new DeploymentID(new ContainerID("peerClient4", "peerClientServer4", "broker"), "broker");
AcceptanceTestUtil.publishTestObject(peerComponent, pccID4, peerControlClient4, PeerControlClient.class);
try {
peerControl.addUser(peerControlClient4, user4.getUsername() + "@" + user4.getServerAddress());
} catch (CommuneRuntimeException e) {
//do nothing - the user is already added.
}
CommuneLogger loggerMock = getMock(NOT_NICE, CommuneLogger.class);
peerComponent.setLogger(loggerMock);
//A unknown consumer disposes a worker - expect to log the warn
DeploymentID workerID =
createWorkerDeploymentID(workerAcceptanceUtil.createWorkerSpec("unknown", "unknown"), "workerPubKey");
Worker worker = getMock(NOT_NICE, Worker.class);
peerAcceptanceUtil.createStub(worker, Worker.class, workerID);
LocalWorkerProvider lwp = peerAcceptanceUtil.getLocalWorkerProviderProxy();
ObjectDeployment lwpOD = peerAcceptanceUtil.getLocalWorkerProviderDeployment();
String unknownPublicKey = "unknownPublicKey";
loggerMock.warn(
"Ignoring an unknown consumer which disposed a worker. Consumer public key: " + unknownPublicKey);
replayActiveMocks();
DeploymentID brokerID = new DeploymentID(new ContainerID("brokerUser", "brokerServer", "broker", unknownPublicKey), "broker");
AcceptanceTestUtil.setExecutionContext(peerComponent, lwpOD, brokerID);
lwp.disposeWorker(workerID.getServiceID());
verifyActiveMocks();
resetActiveMocks();
//Login with a valid user and fail him
String broker1PubKey = "broker1Pubkey";
DeploymentID lwpc1OID = req_108_Util.login(peerComponent, user1, broker1PubKey);
loggerMock.info("The local consumer [" + lwpc1OID.getContainerID() + "] with publicKey [" + broker1PubKey + "] has failed. Canceling his requests.");
replayActiveMocks();
peerAcceptanceUtil.getClientMonitor().doNotifyFailure((LocalWorkerProviderClient) AcceptanceTestUtil.getBoundObject(lwpc1OID),
lwpc1OID);
verifyActiveMocks();
resetActiveMocks();
//A not logged consumer disposes a worker - expect to log the warn
loggerMock.warn("Ignoring a not logged consumer which disposed a worker. Consumer public key: " +
broker1PubKey);
replayActiveMocks();
AcceptanceTestUtil.setExecutionContext(peerComponent, lwpOD, lwpc1OID);
lwp.disposeWorker(workerID.getServiceID());
verifyActiveMocks();
resetActiveMocks();
//Login again with the valid user
lwpc1OID = req_108_Util.login(peerComponent, user1, broker1PubKey);
//A consumer disposes a null worker - expect to log the warn
loggerMock.warn("The consumer [" + lwpc1OID.getServiceID() + "] disposed a null worker. This disposal was ignored.");
replayActiveMocks();
lwp.disposeWorker(null);
verifyActiveMocks();
resetActiveMocks();
//A consumer disposes a unknown worker - expect to log the warn
workerID =
createWorkerDeploymentID(workerAcceptanceUtil.createWorkerSpec("unknown", "unknown"), "workerPubKey");
peerAcceptanceUtil.createStub(worker, Worker.class, workerID);
loggerMock.warn("The consumer [" + lwpc1OID.getServiceID() + "] disposed an unknown worker. This disposal was ignored.");
replayActiveMocks();
AcceptanceTestUtil.setExecutionContext(peerComponent, lwpOD, lwpc1OID);
lwp.disposeWorker(workerID.getServiceID());
verifyActiveMocks();
resetActiveMocks();
// Workers login
WorkerSpecification workerSpecA = workerAcceptanceUtil.createWorkerSpec("U1", "S1");
workerSpecA.putAttribute(OurGridSpecificationConstants.ATT_MEM, "512");
WorkerSpecification workerSpecB = workerAcceptanceUtil.createWorkerSpec("U2", "S1");
workerSpecB.putAttribute(OurGridSpecificationConstants.ATT_MEM, "32");
WorkerSpecification workerSpecC = workerAcceptanceUtil.createWorkerSpec("U3", "S1");
WorkerSpecification workerSpecD = workerAcceptanceUtil.createWorkerSpec("U4", "S1");
WorkerSpecification workerSpecF = workerAcceptanceUtil.createWorkerSpec("U6", "S1");
//A consumer disposes a not l worker - expect to log the warn
Worker workerA = getMock(NOT_NICE, Worker.class);
String workerAPublicKey = "workerAPublicKey";
workerID = createWorkerDeploymentID(workerSpecA, workerAPublicKey);
AcceptanceTestUtil.publishTestObject(peerComponent, workerID, workerA, Worker.class);
loggerMock.warn("The consumer [" + lwpc1OID.getServiceID() + "] disposed an unknown worker. This disposal was ignored.");
replayActiveMocks();
AcceptanceTestUtil.setExecutionContext(peerComponent, lwpOD, lwpc1OID);
lwp.disposeWorker(workerID.getServiceID());
resetActiveMocks();
//Worker login
DeploymentID wmAOID = req_019_Util.createWorkerManagementDeploymentID(workerAPublicKey, workerSpecA);
req_010_Util.workerLogin(peerComponent, workerSpecA, wmAOID);
loggerMock.warn("The consumer [" + lwpc1OID.getServiceID() + "] disposed the worker [" + wmAOID.getServiceID() +
"], that is not allocated for him. This disposal was ignored.");
replayActiveMocks();
AcceptanceTestUtil.setExecutionContext(peerComponent, lwpOD, lwpc1OID);
lwp.disposeWorker(wmAOID.getServiceID());
verifyActiveMocks();
resetActiveMocks();
//Change worker status to IDLE
req_025_Util.changeWorkerStatusToIdle(peerComponent, wmAOID);
//A consumer disposes an idle worker - expect to log the warn
workerID = createWorkerDeploymentID(workerSpecA, "workerAPublicKey");
AcceptanceTestUtil.publishTestObject(peerComponent, workerID, workerA, Worker.class);
loggerMock.warn("The consumer [" + lwpc1OID.getServiceID() + "] disposed the worker [" + wmAOID.getServiceID() +
"], that is not allocated for him. This disposal was ignored.");
replayActiveMocks();
AcceptanceTestUtil.setExecutionContext(peerComponent, lwpOD, lwpc1OID);
lwp.disposeWorker(wmAOID.getServiceID());
verifyActiveMocks();
resetActiveMocks();
//Allocate the worker for other user
DeploymentID lwpc2OID = req_108_Util.login(peerComponent, user2, "broker2Pubkey");
LocalWorkerProviderClient lwpc2 = (LocalWorkerProviderClient) AcceptanceTestUtil.getBoundObject(lwpc2OID);
RequestSpecification requestSpec1 = new RequestSpecification(0, new JobSpecification("label"), 1, "", 1, 0, 0);
WorkerAllocation allocationA = new WorkerAllocation(wmAOID);
req_011_Util.requestForLocalConsumer(peerComponent, new TestStub(lwpc2OID, lwpc2), requestSpec1, allocationA);
req_025_Util.changeWorkerStatusToAllocatedForBroker(peerComponent, lwpc2OID, wmAOID, workerSpecA,
requestSpec1);
//A consumer disposes a worker allocated for other consumer - expect to log the warn
workerID = createWorkerDeploymentID(workerSpecA, "workerAPublicKey");
AcceptanceTestUtil.publishTestObject(peerComponent, workerID, workerA, Worker.class);
EasyMock.reset(loggerMock);
loggerMock.warn("The consumer [" + lwpc1OID.getServiceID() + "] disposed the worker [" + wmAOID.getServiceID() +
"], that is not allocated for him. This disposal was ignored.");
replayActiveMocks();
AcceptanceTestUtil.setExecutionContext(peerComponent, lwpOD, lwpc1OID);
lwp.disposeWorker(wmAOID.getServiceID());
verifyActiveMocks();
resetActiveMocks();
//Allocate a worker for a remote peer
String workerBPublicKey = "workerBPublicKey";
DeploymentID wmBOID = req_019_Util.createWorkerManagementDeploymentID(workerBPublicKey, workerSpecB);
req_010_Util.workerLogin(peerComponent, workerSpecB, wmBOID);
RequestSpecification requestSpec2 = new RequestSpecification(0, new JobSpecification("label"), 2, "", 1, 0, 0);
req_025_Util.changeWorkerStatusToIdle(peerComponent, wmBOID);
WorkerAllocation allocationB = new WorkerAllocation(wmBOID);
String remoteClientPublicKey = "remoteClientPublicKey";
DeploymentID remoteClientID = new DeploymentID(new ContainerID("remoteClient", "peerServer",
PeerConstants.MODULE_NAME, remoteClientPublicKey),"rwp");
remoteClientID.setPublicKey(remoteClientPublicKey);
RemoteWorkerProviderClient rwpc =
req_011_Util.requestForRemoteClient(peerComponent, remoteClientID, requestSpec2, 0, allocationB);
req_025_Util.changeWorkerStatusToAllocatedForPeer(peerComponent, rwpc, wmBOID, workerSpecB, remoteClientID);
//A consumer disposes a worker allocated for a remote peer - expect to log the warn
Worker workerB = EasyMock.createMock(Worker.class);
workerID = createWorkerDeploymentID(workerSpecB, workerBPublicKey);
AcceptanceTestUtil.publishTestObject(peerComponent, workerID, workerB, Worker.class);
EasyMock.reset(loggerMock);
peerComponent.setLogger(loggerMock);
loggerMock.warn("The consumer [" + lwpc1OID.getServiceID() + "] disposed the worker [" + wmBOID.getServiceID() +
"], that is not allocated for him. This disposal was ignored.");
replayActiveMocks();
AcceptanceTestUtil.setExecutionContext(peerComponent, lwpOD, lwpc1OID);
lwp.disposeWorker(wmBOID.getServiceID());
verifyActiveMocks();
resetActiveMocks();
//DiscoveryService recovery
DeploymentID dsID = new DeploymentID(new ContainerID("magoDosNos", "sweetleaf.lab", DiscoveryServiceConstants.MODULE_NAME),
DiscoveryServiceConstants.DS_OBJECT_NAME);
req_020_Util.notifyDiscoveryServiceRecovery(peerComponent, dsID);
//Client login and request workers after ds recovery - expect OG peer to query ds
String broker3PublicKey = "broker3PublicKey";
DeploymentID lwpc3OID = req_108_Util.login(peerComponent, user3, broker3PublicKey);
LocalWorkerProviderClient lwpc3 = (LocalWorkerProviderClient) AcceptanceTestUtil.getBoundObject(lwpc3OID);
RequestSpecification remoteRequestSpec = new RequestSpecification(0, new JobSpecification("label"), 3, "mem > 256", 1, 0, 0);
req_011_Util.requestForLocalConsumer(peerComponent, new TestStub(lwpc3OID, lwpc3), remoteRequestSpec);
WorkerSpecification remoteWorkerSpec = workerAcceptanceUtil.createWorkerSpec("U1", "S2");
remoteWorkerSpec.putAttribute(OurGridSpecificationConstants.ATT_MEM, "512");
RemoteWorkerProvider rwp = EasyMock.createMock(RemoteWorkerProvider.class);
String rwpPublicKey = "rwpPublicKey";
DeploymentID rwpOID = new DeploymentID(new ContainerID("rwpUser", "rwpServer", PeerConstants.MODULE_NAME, rwpPublicKey),
PeerConstants.REMOTE_WORKER_PROVIDER);
replayActiveMocks();
//Remote worker provider client receive a remote worker
AcceptanceTestUtil.publishTestObject(peerComponent, rwpOID, rwp, RemoteWorkerProvider.class);
DeploymentID rwmOID = req_018_Util.receiveRemoteWorker(peerComponent, rwp, rwpOID,
remoteWorkerSpec, "remoteWorkerPublicKey", broker3PublicKey).getDeploymentID();
verifyActiveMocks();
resetActiveMocks();
//Change worker status to ALLOCATED FOR BROKER
ObjectDeployment lwpc3OD = new ObjectDeployment(peerComponent, lwpc3OID, AcceptanceTestUtil.getBoundObject(lwpc3OID));
TestStub workerStub = req_025_Util.changeWorkerStatusToAllocatedForBroker(peerComponent, lwpc3OD,
peerAcceptanceUtil.getRemoteWorkerManagementClientDeployment(), rwmOID, remoteWorkerSpec,
remoteRequestSpec);
//A consumer disposes a remote worker allocated for other consumer - expect to log the warn
AcceptanceTestUtil.publishTestObject(peerComponent, workerStub.getDeploymentID(), workerStub.getObject(), Worker.class, false);
loggerMock.warn("The consumer [" + lwpc1OID.getServiceID() + "] disposed the worker [" + workerStub.getDeploymentID().getServiceID() +
"], that is not allocated for him. This disposal was ignored.");
replayActiveMocks();
AcceptanceTestUtil.setExecutionContext(peerComponent, lwpOD, broker1PubKey);
lwp.disposeWorker(workerStub.getDeploymentID().getServiceID());
verifyActiveMocks();
resetActiveMocks();
//A unknown remote consumer disposes a worker - expect to log the warn
RemoteWorkerManagement remoteWorkerC = getMock(NOT_NICE, RemoteWorkerManagement.class);
String workerCPublicKey = "workerCPublicKey";
workerID = createWorkerDeploymentID(workerSpecC, workerCPublicKey);
AcceptanceTestUtil.publishTestObject(peerComponent, workerID, remoteWorkerC, RemoteWorkerManagement.class);
loggerMock.warn("Ignoring an unknown remote consumer which disposed a worker. Remote consumer public key: " +
unknownPublicKey);
replayActiveMocks();
rwp = peerAcceptanceUtil.getRemoteWorkerProviderProxy();
ObjectDeployment rwpOD = peerAcceptanceUtil.getRemoteWorkerProviderDeployment();
AcceptanceTestUtil.setExecutionContext(peerComponent, lwpOD, unknownPublicKey);
rwp.disposeWorker(workerID.getServiceID());
verifyActiveMocks();
resetActiveMocks();
//Worker login
DeploymentID wmCOID = req_019_Util.createWorkerManagementDeploymentID(workerCPublicKey, workerSpecC);
req_010_Util.workerLogin(peerComponent, workerSpecC, wmCOID);
//Change worker status to IDLE
req_025_Util.changeWorkerStatusToIdleWithAdvert(peerComponent, workerSpecC, wmCOID, dsID);
//Request a worker for the remote client
RequestSpecification requestSpec4 = new RequestSpecification(0, new JobSpecification("label"), 4, "", 1, 0, 0);
String rwpcPubKey = "rwpcPubKey";
DeploymentID rwpcOID = new DeploymentID(new ContainerID("rwpcUser", "rwpcServer", PeerConstants.MODULE_NAME, rwpcPubKey),
"RWPC");
WorkerAllocation allocationC = new WorkerAllocation(wmCOID);
rwpc = req_011_Util.requestForRemoteClient(peerComponent, rwpcOID,
requestSpec4, Req_011_Util.DO_NOT_LOAD_SUBCOMMUNITIES, allocationC);
//Change worker status to ALLOCATED FOR PEER
req_025_Util.changeWorkerStatusToAllocatedForPeer(peerComponent, rwpc, wmCOID, workerSpecC, rwpcOID);
//A remote consumer disposes a null worker - expect to log the warn
resetActiveMocks();
peerComponent.setLogger(loggerMock);
loggerMock.warn("The remote consumer [" + rwpcOID.getServiceID() + "] disposed a null worker. This dispose was ignored.");
replayActiveMocks();
AcceptanceTestUtil.setExecutionContext(peerComponent, rwpOD, rwpcPubKey);
rwp.disposeWorker(null);
verifyActiveMocks();
resetActiveMocks();
//A remote consumer disposes a unknown worker - expect to log the warn
RemoteWorkerManagement remoteWorkerE = getMock(NOT_NICE, RemoteWorkerManagement.class);
String workerEPublicKey = "workerEPublicKey";
workerID = createWorkerDeploymentID(
workerAcceptanceUtil.createWorkerSpec("unknown", "unknown"), workerEPublicKey);
AcceptanceTestUtil.publishTestObject(peerComponent, workerID, remoteWorkerE, RemoteWorkerManagement.class);
loggerMock.warn("The remote consumer [" + rwpcOID.getServiceID() +
"] disposed a unknown worker. This disposal was ignored.");
replayActiveMocks();
rwp.disposeWorker(workerID.getServiceID());
verifyActiveMocks();
resetActiveMocks();
//A remote consumer disposes a not recovered worker - expect to log the warn
RemoteWorkerManagement remoteWorkerD = getMock(NOT_NICE, RemoteWorkerManagement.class);
String workerDPublicKey = "workerDPublicKey";
workerID = createWorkerDeploymentID(workerSpecD, workerDPublicKey);
AcceptanceTestUtil.publishTestObject(peerComponent, workerID, remoteWorkerD, RemoteWorkerManagement.class);
loggerMock.warn("The remote consumer [" + rwpcOID.getServiceID() + "] disposed a unknown worker. This disposal was ignored.");
replayActiveMocks();
rwp.disposeWorker(workerID.getServiceID());
verifyActiveMocks();
resetActiveMocks();
//Worker login
DeploymentID wmDOID = req_019_Util.createWorkerManagementDeploymentID(workerDPublicKey, workerSpecD);;
req_010_Util.workerLogin(peerComponent, workerSpecD, wmDOID);
loggerMock.warn("The remote consumer [" + rwpcOID.getServiceID()
+ "] disposed the worker [" + workerID.getServiceID() + "], " +
"that is not allocated for him. This disposal was ignored.");
replayActiveMocks();
AcceptanceTestUtil.setExecutionContext(peerComponent, rwpOD, rwpcPubKey);
rwp.disposeWorker(workerID.getServiceID());
verifyActiveMocks();
resetActiveMocks();
//Change worker status to IDLE
req_025_Util.changeWorkerStatusToIdleWithAdvert(peerComponent, workerSpecD, wmDOID, dsID);
//A remote consumer disposes an ownered worker - expect to log the warn
AcceptanceTestUtil.publishTestObject(peerComponent, workerID,
remoteWorkerD, RemoteWorkerManagement.class);
loggerMock.warn("The remote consumer [" + rwpcOID.getServiceID()
+ "] disposed the worker [" + workerID.getServiceID() + "], " +
"that is not allocated for him. This disposal was ignored.");
replayActiveMocks();
AcceptanceTestUtil.setExecutionContext(peerComponent, rwpOD, rwpcPubKey);
rwp.disposeWorker(workerID.getServiceID());
verifyActiveMocks();
resetActiveMocks();
//Worker login
String workerFPublicKey = "workerFPublicKey";
DeploymentID wmFOID = req_019_Util.createWorkerManagementDeploymentID(workerFPublicKey, workerSpecF);
req_010_Util.workerLogin(peerComponent, workerSpecF, wmFOID);
//Change worker status to IDLE
req_025_Util.changeWorkerStatusToIdleWithAdvert(peerComponent, workerSpecF, wmFOID, dsID);
//Allocate the worker for a local user
String broker4PubKey = "broker4PubKey";
DeploymentID lwpc4OID = req_108_Util.login(peerComponent, user4, broker4PubKey);
LocalWorkerProviderClient lwpc4 = (LocalWorkerProviderClient) AcceptanceTestUtil.getBoundObject(lwpc4OID);
WorkerAllocation allocationF = new WorkerAllocation(wmFOID);
RequestSpecification requestSpec5 = new RequestSpecification(0, new JobSpecification("label"), 5, "", 1, 0, 0);
req_011_Util.requestForLocalConsumer(peerComponent, new TestStub(lwpc4OID, lwpc4), requestSpec5, allocationF);
req_025_Util.changeWorkerStatusToAllocatedForBroker(peerComponent, lwpc4OID, wmFOID, workerSpecF,
requestSpec5);
//A remote consumer disposes a worker allocated for a local consumer - expect to log the warn
RemoteWorkerManagement remoteWorkerF = getMock(NOT_NICE, RemoteWorkerManagement.class);
workerID = createWorkerDeploymentID(workerSpecF, workerFPublicKey);
AcceptanceTestUtil.publishTestObject(peerComponent, workerID,
remoteWorkerF, RemoteWorkerManagement.class);
loggerMock.warn("The remote consumer [" + rwpcOID.getServiceID() + "] disposed the worker [" + workerID.getServiceID() + "], " +
"that is not allocated for him. This disposal was ignored.");
replayActiveMocks();
AcceptanceTestUtil.setExecutionContext(peerComponent, rwpOD, rwpcPubKey);
rwp.disposeWorker(workerID.getServiceID());
verifyActiveMocks();
resetActiveMocks();
//A remote consumer disposes a worker allocated for other remote consumer - expect to log the warn
RemoteWorkerManagement remoteWorkerB = getMock(NOT_NICE, RemoteWorkerManagement.class);
workerID = createWorkerDeploymentID(workerSpecB, workerBPublicKey);
AcceptanceTestUtil.publishTestObject(peerComponent, workerID,
remoteWorkerB, RemoteWorkerManagement.class);
loggerMock.warn("The remote consumer [" + rwpcOID.getServiceID() + "] disposed the worker [" + workerID.getServiceID() + "], " +
"that is not allocated for him. This disposal was ignored.");
replayActiveMocks();
rwp.disposeWorker(workerID.getServiceID());
verifyActiveMocks();
resetActiveMocks();
//A remote consumer disposes a remote worker - expect to log the warn
RemoteWorkerManagement remoteWorkerR = getMock(NOT_NICE, RemoteWorkerManagement.class);
workerID = createWorkerDeploymentID(workerAcceptanceUtil.createWorkerSpec("unknown", "unknown"), "remoteWorkerPublicKey");
AcceptanceTestUtil.publishTestObject(peerComponent, workerID, remoteWorkerR,
RemoteWorkerManagement.class);
loggerMock.warn("The remote consumer [" + rwpcOID.getServiceID() + "] disposed the worker [" + workerID.getServiceID() + "], " +
"that is not allocated for him. This disposal was ignored.");
replayActiveMocks();
rwp.disposeWorker(workerID.getServiceID());
verifyActiveMocks();
resetActiveMocks();
}
/**
* Verifies if the peer give the worker back to Broker, because the
* request is not paused.
*/
@ReqTest(test="AT-015.1", reqs="REQ015")
@Category(JDLCompliantTest.class) @Test public void test_AT_015_1_BrokerDisposesLocalWorkerWithJDL() throws Exception{
//Create an user account
XMPPAccount user = req_101_Util.createLocalUser("user011", "server011", "011011");
//Start peer and set a mock log
peerComponent = req_010_Util.startPeer();
PeerControl peerControl = peerAcceptanceUtil.getPeerControl();
ObjectDeployment pcOD = peerAcceptanceUtil.getPeerControlDeployment();
PeerControlClient peerControlClient1 = EasyMock.createMock(PeerControlClient.class);
DeploymentID pccID1 = new DeploymentID(new ContainerID("pcc1", "broker", "broker"), "user1");
AcceptanceTestUtil.publishTestObject(peerComponent, pccID1, peerControlClient1, PeerControlClient.class);
AcceptanceTestUtil.setExecutionContext(peerComponent, pcOD, pccID1);
try {
peerControl.addUser(peerControlClient1, user.getUsername() + "@" + user.getServerAddress());
} catch (CommuneRuntimeException e) {
//do nothing - the user is already added.
}
//Worker login
String workerPublicKey = "workerPublicKey";
WorkerSpecification workerSpecA = workerAcceptanceUtil.createClassAdWorkerSpec("U1", "S1", null, null);
DeploymentID wmDID = req_019_Util.createWorkerManagementDeploymentID(workerPublicKey, workerSpecA);
req_010_Util.workerLogin(peerComponent, workerSpecA, wmDID);
//Change worker status to IDLE
req_025_Util.changeWorkerStatusToIdle(peerComponent, wmDID);
//Login with a valid user
String brokerPubKey = "brokerPubkey";
DeploymentID lwpcOID = req_108_Util.login(peerComponent, user, brokerPubKey);
LocalWorkerProviderClient lwpc = (LocalWorkerProviderClient) AcceptanceTestUtil.getBoundObject(lwpcOID);
//Request a worker for the logged user
RequestSpecification requestSpec1 = new RequestSpecification(0, new JobSpecification("label"), 1, PeerAcceptanceTestCase.buildRequirements(null, null, null, null), 1, 0, 0);
WorkerAllocation allocationA = new WorkerAllocation(wmDID);
req_011_Util.requestForLocalConsumer(peerComponent, new TestStub(lwpcOID, lwpc), requestSpec1, allocationA);
//Change worker status to ALLOCATED FOR BROKER
Worker worker =
(Worker) req_025_Util.changeWorkerStatusToAllocatedForBroker(peerComponent, lwpcOID, wmDID, workerSpecA, requestSpec1).getObject();
//The user disposes the worker without pausing the request - expect to allocate the worker for him again
allocationA.addLoserRequestSpec(requestSpec1).addLoserConsumer(lwpcOID).addWinnerConsumer(lwpcOID);
req_015_Util.localConsumerDisposesLocalWorker(peerComponent, worker, allocationA);
assertTrue(peerAcceptanceUtil.isPeerInterestedOnBroker(lwpcOID.getServiceID()));
assertTrue(peerAcceptanceUtil.isPeerInterestedOnLocalWorker(wmDID.getServiceID()));
//Verify if the client was marked as CONSUMING
UserInfo userInfo1 = new UserInfo(user.getUsername(), user.getServerAddress(), brokerPubKey, UserState.CONSUMING);
List<UserInfo> usersInfo = AcceptanceTestUtil.createList(userInfo1);
req_106_Util.getUsersStatus(usersInfo);
//Verify if the worker A was marked as IN_USE
WorkerInfo workerInfo = new WorkerInfo(workerSpecA, LocalWorkerState.IN_USE, lwpcOID.getServiceID().toString());
List<WorkerInfo> workersInfo = AcceptanceTestUtil.createList(workerInfo);
req_036_Util.getLocalWorkersStatus(workersInfo);
}
/**
* Verifies if the peer give the remote worker back to Broker, because the
* request is not paused.
*/
@ReqTest(test="AT-015.2", reqs="REQ015")
@Category(JDLCompliantTest.class) @Test public void test_AT_015_2_BrokerDisposesRemoteWorkerWithJDL() throws Exception {
//Create an user account
XMPPAccount user = req_101_Util.createLocalUser("user011", "server011", "011011");
//Start peer and set mocks for logger and timer
peerComponent = req_010_Util.startPeer();
CommuneLogger loggerMock = getMock(NOT_NICE, CommuneLogger.class);
peerComponent.setLogger(loggerMock);
//DiscoveryService recovery
DeploymentID dsID = new DeploymentID(new ContainerID("magodosnos", "sweetleaf.lab", DiscoveryServiceConstants.MODULE_NAME),
DiscoveryServiceConstants.DS_OBJECT_NAME);
req_020_Util.notifyDiscoveryServiceRecovery(peerComponent, dsID);
PeerControl peerControl = peerAcceptanceUtil.getPeerControl();
ObjectDeployment pcOD = peerAcceptanceUtil.getPeerControlDeployment();
PeerControlClient peerControlClient1 = EasyMock.createMock(PeerControlClient.class);
DeploymentID pccID1 = new DeploymentID(new ContainerID("pcc1", "broker", "broker"), "user1");
AcceptanceTestUtil.publishTestObject(peerComponent, pccID1, peerControlClient1, PeerControlClient.class);
AcceptanceTestUtil.setExecutionContext(peerComponent, pcOD, pccID1);
try {
peerControl.addUser(peerControlClient1, user.getUsername() + "@" + user.getServerAddress());
} catch (CommuneRuntimeException e) {
//do nothing - the user is already added.
}
//Client login and request workers after ds recovery - expect OG peer to query ds
String brokerPubKey = "brokerPublicKey";
DeploymentID lwpcOID = req_108_Util.login(peerComponent, user, brokerPubKey);
LocalWorkerProviderClient lwpc = (LocalWorkerProviderClient) AcceptanceTestUtil.getBoundObject(lwpcOID);
RequestSpecification requestSpec1 = new RequestSpecification(0, new JobSpecification("label"), 1, "[Requirements=(other.MainMemory > 256 && other.OS == \"windows\");Rank=0]", 1, 0, 0);
req_011_Util.requestForLocalConsumer(peerComponent, new TestStub(lwpcOID, lwpc), requestSpec1);
//GIS client receive a remote worker provider
WorkerSpecification workerSpec = workerAcceptanceUtil.createClassAdWorkerSpec("U1", "S1", 512, "windows");
TestStub rwpStub = req_020_Util.receiveRemoteWorkerProvider(peerComponent, requestSpec1, "rwpUser",
"rwpServer", "rwpPublicKey", workerSpec);
RemoteWorkerProvider rwp = (RemoteWorkerProvider) rwpStub.getObject();
DeploymentID rwpID = rwpStub.getDeploymentID();
//Remote worker provider client receive a remote worker
TestStub rmwStub =
req_018_Util.receiveRemoteWorker(peerComponent, rwp, rwpID, workerSpec, "workerPK", brokerPubKey);
DeploymentID rmwOID = rmwStub.getDeploymentID();
ObjectDeployment rmwMonitorOD = peerAcceptanceUtil.getRemoteWorkerMonitorDeployment();
assertTrue(AcceptanceTestUtil.isInterested(peerComponent, rmwOID.getServiceID(), rmwMonitorOD.getDeploymentID()));
//Change worker status to ALLOCATED FOR BROKER
ObjectDeployment lwpcOD = new ObjectDeployment(peerComponent, lwpcOID, AcceptanceTestUtil.getBoundObject(lwpcOID));
TestStub workerStub = req_025_Util.changeWorkerStatusToAllocatedForBroker(peerComponent, lwpcOD,
peerAcceptanceUtil.getRemoteWorkerManagementClientDeployment(), rmwStub.getDeploymentID(), workerSpec, requestSpec1);
//The user disposes the worker without pausing the request - expect to allocate the worker for him again
WorkerAllocation allocation = new WorkerAllocation(rmwOID);
allocation.addLoserConsumer(lwpcOID).addWinnerConsumer(lwpcOID).addLoserRequestSpec(requestSpec1);
req_015_Util.localDisposeRemoteWorker(peerComponent, workerStub, allocation, false);
assertTrue(AcceptanceTestUtil.isInterested(peerComponent, rmwOID.getServiceID(), rmwMonitorOD.getDeploymentID()));
}
/**
* Verifies if the peer command the worker to stop working, after be
* diposed by a remote peer.
*/
@ReqTest(test="AT-015.3", reqs="REQ015")
@Category(JDLCompliantTest.class) @Test public void test_AT_015_3_RemotePeerDisposesLocalWorkerWithJDL() throws Exception {
//PeerAcceptanceUtil.recreateSchema();
PeerAcceptanceUtil.copyTrustFile(COMM_FILE_PATH+"015_blank.xml");
//Start peer and set a mock log
peerComponent = req_010_Util.startPeer();
CommuneLogger loggerMock = getMock(NOT_NICE, CommuneLogger.class);
peerComponent.setLogger(loggerMock);
//Worker login
String workerPublicKey = "workerPublicKey";
WorkerSpecification workerSpecA = workerAcceptanceUtil.createClassAdWorkerSpec("U1", "S1", null, null);
DeploymentID wmOID = req_019_Util.createWorkerManagementDeploymentID(workerPublicKey, workerSpecA);
req_010_Util.workerLogin(peerComponent, workerSpecA, wmOID);
//Change worker status to IDLE
req_025_Util.changeWorkerStatusToIdle(peerComponent, wmOID);
//Request a worker for the remote client
WorkerAllocation allocationA = new WorkerAllocation(wmOID);
DeploymentID remoteClientOID = new DeploymentID(new ContainerID("remoteUser", "server", PeerConstants.MODULE_NAME, "peerPublicKey"),
PeerConstants.REMOTE_WORKER_PROVIDER_CLIENT);
RequestSpecification requestSpec = new RequestSpecification(0, new JobSpecification("label"), 1, PeerAcceptanceTestCase.buildRequirements(null, null, null, null), 1, 0, 0);
RemoteWorkerProviderClient rwpc =
req_011_Util.requestForRemoteClient(peerComponent, remoteClientOID, requestSpec, 0, allocationA);
assertTrue(peerAcceptanceUtil.isPeerInterestedOnRemoteClient(remoteClientOID.getServiceID()));
//Change worker status to ALLOCATED FOR PEER
RemoteWorkerManagement rwm =
req_025_Util.changeWorkerStatusToAllocatedForPeer(peerComponent, rwpc, wmOID, workerSpecA, remoteClientOID);
//The remote peer disposes the worker - expect to command the worker to stop working
req_015_Util.remoteDisposeLocalWorker(peerComponent, remoteClientOID, rwm, wmOID);
assertFalse(AcceptanceTestUtil.isInterested(peerComponent, wmOID.getServiceID(), remoteClientOID));
//Verify if the worker A was marked as IDLE
WorkerInfo workerInfo = new WorkerInfo(workerSpecA, LocalWorkerState.IDLE, null);
List<WorkerInfo> workersInfo = AcceptanceTestUtil.createList(workerInfo);
req_036_Util.getLocalWorkersStatus(workersInfo);
}
/**
* Verifies if the peer ignores a worker dispose, on these scenarios:
*
* The message sender is an unknown Broker;
* The message sender is a not logged Broker;
* For a logged Broker:
* o The worker is null;
* o The local worker is unknown;
* o The local worker is not recovered;
* o The local worker is owner;
* o The local worker is idle;
* o The local worker is allocated for other Broker;
* o The local worker is allocated for a remote Peer;
* o The remote worker is allocated for other Broker;
* The message sender is an unknown remote Peer;
* For a valid remote Peer:
* o The local worker is null;
* o The local worker is unknown;
* o The local worker is not recovered;
* o The local worker is idle;
* o The local worker is owner;
* o The local worker is allocated for a Broker;
* o The local worker is allocated for other remote Peer;
* o The worker is remote.
* @throws Exception
*/
@ReqTest(test="AT-015.4", reqs="REQ015")
@Category(JDLCompliantTest.class) @Test public void test_AT_015_4_InputValidationWithJDL() throws Exception {
//PeerAcceptanceUtil.recreateSchema();
PeerAcceptanceUtil.copyTrustFile(COMM_FILE_PATH+"015_blank.xml");
//Create users accounts
XMPPAccount user1 = req_101_Util.createLocalUser("user011_1", "server011", "011011");
XMPPAccount user2 = req_101_Util.createLocalUser("user011_2", "server011", "011011");
XMPPAccount user3 = req_101_Util.createLocalUser("user011_3", "server011", "011011");
XMPPAccount user4 = req_101_Util.createLocalUser("user011_4", "server011", "011011");
//Start peer and set a mock log
peerComponent = req_010_Util.startPeer();
PeerControl peerControl = peerAcceptanceUtil.getPeerControl();
PeerControlClient peerControlClient1 = EasyMock.createMock(PeerControlClient.class);
DeploymentID pccID1 = new DeploymentID(new ContainerID("peerClient1", "peerClientServer1", "broker"), "broker");
AcceptanceTestUtil.publishTestObject(peerComponent, pccID1, peerControlClient1, PeerControlClient.class);
try {
peerControl.addUser(peerControlClient1, user1.getUsername() + "@" + user1.getServerAddress());
} catch (CommuneRuntimeException e) {
//do nothing - the user is already added.
}
PeerControlClient peerControlClient2 = EasyMock.createMock(PeerControlClient.class);
DeploymentID pccID2 = new DeploymentID(new ContainerID("peerClient2", "peerClientServer2", "broker"), "broker");
AcceptanceTestUtil.publishTestObject(peerComponent, pccID2, peerControlClient2, PeerControlClient.class);
try {
peerControl.addUser(peerControlClient2, user2.getUsername() + "@" + user2.getServerAddress());
} catch (CommuneRuntimeException e) {
//do nothing - the user is already added.
}
PeerControlClient peerControlClient3 = EasyMock.createMock(PeerControlClient.class);
DeploymentID pccID3 = new DeploymentID(new ContainerID("peerClient3", "peerClientServer3", "broker"), "broker");
AcceptanceTestUtil.publishTestObject(peerComponent, pccID3, peerControlClient3, PeerControlClient.class);
try {
peerControl.addUser(peerControlClient3, user3.getUsername() + "@" + user3.getServerAddress());
} catch (CommuneRuntimeException e) {
//do nothing - the user is already added.
}
PeerControlClient peerControlClient4 = EasyMock.createMock(PeerControlClient.class);
DeploymentID pccID4 = new DeploymentID(new ContainerID("peerClient4", "peerClientServer4", "broker"), "broker");
AcceptanceTestUtil.publishTestObject(peerComponent, pccID4, peerControlClient4, PeerControlClient.class);
try {
peerControl.addUser(peerControlClient4, user4.getUsername() + "@" + user4.getServerAddress());
} catch (CommuneRuntimeException e) {
//do nothing - the user is already added.
}
CommuneLogger loggerMock = getMock(NOT_NICE, CommuneLogger.class);
peerComponent.setLogger(loggerMock);
//A unknown consumer disposes a worker - expect to log the warn
DeploymentID workerID =
createWorkerDeploymentID(workerAcceptanceUtil.createClassAdWorkerSpec("unknown", "unknown", null, null), "workerPubKey");
Worker worker = getMock(NOT_NICE, Worker.class);
peerAcceptanceUtil.createStub(worker, Worker.class, workerID);
LocalWorkerProvider lwp = peerAcceptanceUtil.getLocalWorkerProviderProxy();
ObjectDeployment lwpOD = peerAcceptanceUtil.getLocalWorkerProviderDeployment();
String unknownPublicKey = "unknownPublicKey";
loggerMock.warn(
"Ignoring an unknown consumer which disposed a worker. Consumer public key: " + unknownPublicKey);
replayActiveMocks();
DeploymentID brokerID = new DeploymentID(new ContainerID("brokerUser", "brokerServer", "broker", unknownPublicKey), "broker");
AcceptanceTestUtil.setExecutionContext(peerComponent, lwpOD, brokerID);
lwp.disposeWorker(workerID.getServiceID());
verifyActiveMocks();
resetActiveMocks();
//Login with a valid user and fail him
String broker1PubKey = "broker1Pubkey";
DeploymentID lwpc1OID = req_108_Util.login(peerComponent, user1, broker1PubKey);
loggerMock.info("The local consumer [" + lwpc1OID.getContainerID() + "] with publicKey [" + broker1PubKey + "] has failed. Canceling his requests.");
replayActiveMocks();
peerAcceptanceUtil.getClientMonitor().doNotifyFailure((LocalWorkerProviderClient) AcceptanceTestUtil.getBoundObject(lwpc1OID),
lwpc1OID);
verifyActiveMocks();
resetActiveMocks();
//A not logged consumer disposes a worker - expect to log the warn
loggerMock.warn("Ignoring a not logged consumer which disposed a worker. Consumer public key: " +
broker1PubKey);
replayActiveMocks();
AcceptanceTestUtil.setExecutionContext(peerComponent, lwpOD, lwpc1OID);
lwp.disposeWorker(workerID.getServiceID());
verifyActiveMocks();
resetActiveMocks();
//Login again with the valid user
lwpc1OID = req_108_Util.login(peerComponent, user1, broker1PubKey);
//A consumer disposes a null worker - expect to log the warn
loggerMock.warn("The consumer [" + lwpc1OID.getServiceID() + "] disposed a null worker. This disposal was ignored.");
replayActiveMocks();
lwp.disposeWorker(null);
verifyActiveMocks();
resetActiveMocks();
//A consumer disposes a unknown worker - expect to log the warn
workerID =
createWorkerDeploymentID(workerAcceptanceUtil.createClassAdWorkerSpec("unknown", "unknown", null, null), "workerPubKey");
peerAcceptanceUtil.createStub(worker, Worker.class, workerID);
loggerMock.warn("The consumer [" + lwpc1OID.getServiceID() + "] disposed an unknown worker. This disposal was ignored.");
replayActiveMocks();
AcceptanceTestUtil.setExecutionContext(peerComponent, lwpOD, lwpc1OID);
lwp.disposeWorker(workerID.getServiceID());
verifyActiveMocks();
resetActiveMocks();
// Workers login
WorkerSpecification workerSpecA = workerAcceptanceUtil.createClassAdWorkerSpec("U1", "S1", 512, null);
WorkerSpecification workerSpecB = workerAcceptanceUtil.createClassAdWorkerSpec("U2", "S1", 32, null);
WorkerSpecification workerSpecC = workerAcceptanceUtil.createClassAdWorkerSpec("U3", "S1", null, null);
WorkerSpecification workerSpecD = workerAcceptanceUtil.createClassAdWorkerSpec("U4", "S1", null, null);
WorkerSpecification workerSpecF = workerAcceptanceUtil.createClassAdWorkerSpec("U6", "S1", null, null);
//A consumer disposes a not recovered worker - expect to log the warn
Worker workerA = getMock(NOT_NICE, Worker.class);
String workerAPublicKey = "workerAPublicKey";
workerID = createWorkerDeploymentID(workerSpecA, workerAPublicKey);
AcceptanceTestUtil.publishTestObject(peerComponent, workerID, workerA, Worker.class);
loggerMock.warn("The consumer [" + lwpc1OID.getServiceID() + "] disposed an unknown worker. This disposal was ignored.");
replayActiveMocks();
AcceptanceTestUtil.setExecutionContext(peerComponent, lwpOD, lwpc1OID);
lwp.disposeWorker(workerID.getServiceID());
resetActiveMocks();
//Worker login
DeploymentID wmADID = req_019_Util.createWorkerManagementDeploymentID(workerAPublicKey, workerSpecA);
req_010_Util.workerLogin(peerComponent, workerSpecA, wmADID);
//A consumer disposes an ownered worker - expect to log the warn
//workerID = createWorkerDeploymentID(workerSpecA, "workerAPublicKey");
//AcceptanceTestUtil.publishTestObject(peerComponent, workerID, workerA);
loggerMock.warn("The consumer [" + lwpc1OID.getServiceID() + "] disposed the worker [" + wmADID.getServiceID() +
"], that is not allocated for him. This disposal was ignored.");
replayActiveMocks();
AcceptanceTestUtil.setExecutionContext(peerComponent, lwpOD, lwpc1OID);
lwp.disposeWorker(wmADID.getServiceID());
verifyActiveMocks();
resetActiveMocks();
//Change worker status to IDLE
req_025_Util.changeWorkerStatusToIdle(peerComponent, wmADID);
//A consumer disposes an idle worker - expect to log the warn
workerID = createWorkerDeploymentID(workerSpecA, "workerAPublicKey");
AcceptanceTestUtil.publishTestObject(peerComponent, workerID, workerA, Worker.class);
loggerMock.warn("The consumer [" + lwpc1OID.getServiceID() + "] disposed the worker [" + wmADID.getServiceID() +
"], that is not allocated for him. This disposal was ignored.");
replayActiveMocks();
AcceptanceTestUtil.setExecutionContext(peerComponent, lwpOD, lwpc1OID);
lwp.disposeWorker(wmADID.getServiceID());
verifyActiveMocks();
resetActiveMocks();
//Allocate the worker for other user
DeploymentID lwpc2OID = req_108_Util.login(peerComponent, user2, "broker2Pubkey");
LocalWorkerProviderClient lwpc2 = (LocalWorkerProviderClient) AcceptanceTestUtil.getBoundObject(lwpc2OID);
RequestSpecification requestSpec1 = new RequestSpecification(0, new JobSpecification("label"), 1, PeerAcceptanceTestCase.buildRequirements(null, null, null, null), 1, 0, 0);
WorkerAllocation allocationA = new WorkerAllocation(wmADID);
req_011_Util.requestForLocalConsumer(peerComponent, new TestStub(lwpc2OID, lwpc2), requestSpec1, allocationA);
req_025_Util.changeWorkerStatusToAllocatedForBroker(peerComponent, lwpc2OID, wmADID, workerSpecA,
requestSpec1);
//A consumer disposes a worker allocated for other consumer - expect to log the warn
workerID = createWorkerDeploymentID(workerSpecA, "workerAPublicKey");
AcceptanceTestUtil.publishTestObject(peerComponent, workerID, workerA, Worker.class);
EasyMock.reset(loggerMock);
loggerMock.warn("The consumer [" + lwpc1OID.getServiceID() + "] disposed the worker [" + wmADID.getServiceID() +
"], that is not allocated for him. This disposal was ignored.");
replayActiveMocks();
AcceptanceTestUtil.setExecutionContext(peerComponent, lwpOD, lwpc1OID);
lwp.disposeWorker(wmADID.getServiceID());
verifyActiveMocks();
resetActiveMocks();
//Allocate a worker for a remote peer
String workerBPublicKey = "workerBPublicKey";
DeploymentID wmBDID = req_019_Util.createWorkerManagementDeploymentID(workerBPublicKey, workerSpecB);
req_010_Util.workerLogin(peerComponent, workerSpecB, wmBDID);
RequestSpecification requestSpec2 = new RequestSpecification(0, new JobSpecification("label"), 2, PeerAcceptanceTestCase.buildRequirements(null, null, null, null), 1, 0, 0);
req_025_Util.changeWorkerStatusToIdle(peerComponent, wmBDID);
WorkerAllocation allocationB = new WorkerAllocation(wmBDID);
String remoteClientPublicKey = "remoteClientPublicKey";
DeploymentID remoteClientID = new DeploymentID(new ContainerID("remoteClient", "peerServer",
PeerConstants.MODULE_NAME, remoteClientPublicKey),"rwp");
remoteClientID.setPublicKey(remoteClientPublicKey);
RemoteWorkerProviderClient rwpc =
req_011_Util.requestForRemoteClient(peerComponent, remoteClientID, requestSpec2, 0, allocationB);
req_025_Util.changeWorkerStatusToAllocatedForPeer(peerComponent, rwpc, wmBDID, workerSpecB, remoteClientID);
//A consumer disposes a worker allocated for a remote peer - expect to log the warn
Worker workerB = EasyMock.createMock(Worker.class);
workerID = createWorkerDeploymentID(workerSpecB, workerBPublicKey);
AcceptanceTestUtil.publishTestObject(peerComponent, workerID, workerB, Worker.class);
EasyMock.reset(loggerMock);
peerComponent.setLogger(loggerMock);
loggerMock.warn("The consumer [" + lwpc1OID.getServiceID() + "] disposed the worker [" + wmBDID.getServiceID() +
"], that is not allocated for him. This disposal was ignored.");
replayActiveMocks();
AcceptanceTestUtil.setExecutionContext(peerComponent, lwpOD, lwpc1OID);
lwp.disposeWorker(wmBDID.getServiceID());
verifyActiveMocks();
resetActiveMocks();
//DiscoveryService recovery
DeploymentID dsID = new DeploymentID(new ContainerID("magoDosNos", "sweetleaf.lab", DiscoveryServiceConstants.MODULE_NAME),
DiscoveryServiceConstants.DS_OBJECT_NAME);
req_020_Util.notifyDiscoveryServiceRecovery(peerComponent, dsID);
//Client login and request workers after ds recovery - expect OG peer to query ds
String broker3PublicKey = "broker3PublicKey";
DeploymentID lwpc3OID = req_108_Util.login(peerComponent, user3, broker3PublicKey);
LocalWorkerProviderClient lwpc3 = (LocalWorkerProviderClient) AcceptanceTestUtil.getBoundObject(lwpc3OID);
RequestSpecification remoteRequestSpec = new RequestSpecification(0, new JobSpecification("label"), 3, PeerAcceptanceTestCase.buildRequirements(">", 256, null, null), 1, 0, 0);
req_011_Util.requestForLocalConsumer(peerComponent, new TestStub(lwpc3OID, lwpc3), remoteRequestSpec);
WorkerSpecification remoteWorkerSpec = workerAcceptanceUtil.createClassAdWorkerSpec("U1", "S2", 512, null);
RemoteWorkerProvider rwp = EasyMock.createMock(RemoteWorkerProvider.class);
String rwpPublicKey = "rwpPublicKey";
DeploymentID rwpDID = new DeploymentID(new ContainerID("rwpUser", "rwpServer", PeerConstants.MODULE_NAME, rwpPublicKey),
PeerConstants.REMOTE_WORKER_PROVIDER);
replayActiveMocks();
//Remote worker provider client receive a remote worker
AcceptanceTestUtil.publishTestObject(peerComponent, rwpDID, rwp, RemoteWorkerProvider.class);
DeploymentID rwmDID = req_018_Util.receiveRemoteWorker(peerComponent, rwp, rwpDID,
remoteWorkerSpec, "remoteWorkerPublicKey", broker3PublicKey).getDeploymentID();
verifyActiveMocks();
resetActiveMocks();
//Change worker status to ALLOCATED FOR BROKER
ObjectDeployment lwpc3OD = new ObjectDeployment(peerComponent, lwpc3OID, AcceptanceTestUtil.getBoundObject(lwpc3OID));
TestStub workerStub = req_025_Util.changeWorkerStatusToAllocatedForBroker(peerComponent, lwpc3OD,
peerAcceptanceUtil.getRemoteWorkerManagementClientDeployment(), rwmDID, remoteWorkerSpec,
remoteRequestSpec);
//A consumer disposes a remote worker allocated for other consumer - expect to log the warn
AcceptanceTestUtil.publishTestObject(peerComponent, workerStub.getDeploymentID(), workerStub.getObject(), Worker.class, false);
loggerMock.warn("The consumer [" + lwpc1OID.getServiceID() + "] disposed the worker [" + workerStub.getDeploymentID().getServiceID() +
"], that is not allocated for him. This disposal was ignored.");
replayActiveMocks();
AcceptanceTestUtil.setExecutionContext(peerComponent, lwpOD, broker1PubKey);
lwp.disposeWorker(workerStub.getDeploymentID().getServiceID());
verifyActiveMocks();
resetActiveMocks();
//A unknown remote consumer disposes a worker - expect to log the warn
RemoteWorkerManagement remoteWorkerC = getMock(NOT_NICE, RemoteWorkerManagement.class);
String workerCPublicKey = "workerCPublicKey";
workerID = createWorkerDeploymentID(workerSpecC, workerCPublicKey);
AcceptanceTestUtil.publishTestObject(peerComponent, workerID, remoteWorkerC, RemoteWorkerManagement.class);
loggerMock.warn("Ignoring an unknown remote consumer which disposed a worker. Remote consumer public key: " +
unknownPublicKey);
replayActiveMocks();
rwp = peerAcceptanceUtil.getRemoteWorkerProviderProxy();
ObjectDeployment rwpOD = peerAcceptanceUtil.getRemoteWorkerProviderDeployment();
AcceptanceTestUtil.setExecutionContext(peerComponent, lwpOD, unknownPublicKey);
rwp.disposeWorker(workerID.getServiceID());
verifyActiveMocks();
resetActiveMocks();
//Worker login
DeploymentID wmCDID = req_019_Util.createWorkerManagementDeploymentID(workerCPublicKey, workerSpecC);
req_010_Util.workerLogin(peerComponent, workerSpecC, wmCDID);
//Change worker status to IDLE
req_025_Util.changeWorkerStatusToIdleWithAdvert(peerComponent, workerSpecC, wmCDID, dsID);
//Request a worker for the remote client
RequestSpecification requestSpec4 = new RequestSpecification(0, new JobSpecification("label"), 4, PeerAcceptanceTestCase.buildRequirements(null, null, null, null), 1, 0, 0);
String rwpcPubKey = "rwpcPubKey";
DeploymentID rwpcOID = new DeploymentID(new ContainerID("rwpcUser", "rwpcServer", PeerConstants.MODULE_NAME, rwpcPubKey),
"RWPC");
WorkerAllocation allocationC = new WorkerAllocation(wmCDID);
rwpc = req_011_Util.requestForRemoteClient(peerComponent, rwpcOID,
requestSpec4, Req_011_Util.DO_NOT_LOAD_SUBCOMMUNITIES, allocationC);
//Change worker status to ALLOCATED FOR PEER
req_025_Util.changeWorkerStatusToAllocatedForPeer(peerComponent, rwpc, wmCDID, workerSpecC, rwpcOID);
//A remote consumer disposes a null worker - expect to log the warn
resetActiveMocks();
peerComponent.setLogger(loggerMock);
loggerMock.warn("The remote consumer [" + rwpcOID.getServiceID() + "] disposed a null worker. This dispose was ignored.");
replayActiveMocks();
AcceptanceTestUtil.setExecutionContext(peerComponent, rwpOD, rwpcPubKey);
rwp.disposeWorker(null);
verifyActiveMocks();
resetActiveMocks();
//A remote consumer disposes a unknown worker - expect to log the warn
RemoteWorkerManagement remoteWorkerE = getMock(NOT_NICE, RemoteWorkerManagement.class);
String workerEPublicKey = "workerEPublicKey";
workerID = createWorkerDeploymentID(
workerAcceptanceUtil.createClassAdWorkerSpec("unknown", "unknown", null, null), workerEPublicKey);
AcceptanceTestUtil.publishTestObject(peerComponent, workerID, remoteWorkerE, RemoteWorkerManagement.class);
loggerMock.warn("The remote consumer [" + rwpcOID.getServiceID() +
"] disposed a unknown worker. This disposal was ignored.");
replayActiveMocks();
rwp.disposeWorker(workerID.getServiceID());
verifyActiveMocks();
resetActiveMocks();
//A remote consumer disposes a not recovered worker - expect to log the warn
RemoteWorkerManagement remoteWorkerD = getMock(NOT_NICE, RemoteWorkerManagement.class);
String workerDPublicKey = "workerDPublicKey";
workerID = createWorkerDeploymentID(workerSpecD, workerDPublicKey);
AcceptanceTestUtil.publishTestObject(peerComponent, workerID, remoteWorkerD, RemoteWorkerManagement.class);
loggerMock.warn("The remote consumer [" + rwpcOID.getServiceID() + "] disposed a unknown worker. This disposal was ignored.");
replayActiveMocks();
rwp.disposeWorker(workerID.getServiceID());
verifyActiveMocks();
resetActiveMocks();
//Worker login
DeploymentID wmDDID = req_019_Util.createWorkerManagementDeploymentID(workerDPublicKey, workerSpecD);
req_010_Util.workerLogin(peerComponent, workerSpecD, wmDDID);
loggerMock.warn("The remote consumer [" + rwpcOID.getServiceID()
+ "] disposed the worker [" + workerID.getServiceID() + "], " +
"that is not allocated for him. This disposal was ignored.");
replayActiveMocks();
AcceptanceTestUtil.setExecutionContext(peerComponent, rwpOD, rwpcPubKey);
rwp.disposeWorker(workerID.getServiceID());
verifyActiveMocks();
resetActiveMocks();
//Change worker status to IDLE
req_025_Util.changeWorkerStatusToIdleWithAdvert(peerComponent, workerSpecD, wmDDID, dsID);
//A remote consumer disposes an ownered worker - expect to log the warn
AcceptanceTestUtil.publishTestObject(peerComponent, workerID,
remoteWorkerD, RemoteWorkerManagement.class);
loggerMock.warn("The remote consumer [" + rwpcOID.getServiceID()
+ "] disposed the worker [" + workerID.getServiceID() + "], " +
"that is not allocated for him. This disposal was ignored.");
replayActiveMocks();
AcceptanceTestUtil.setExecutionContext(peerComponent, rwpOD, rwpcPubKey);
rwp.disposeWorker(workerID.getServiceID());
verifyActiveMocks();
resetActiveMocks();
//Worker login
String workerFPublicKey = "workerFPublicKey";
DeploymentID wmFDID = req_019_Util.createWorkerManagementDeploymentID(workerFPublicKey, workerSpecF);
req_010_Util.workerLogin(peerComponent, workerSpecF, wmFDID);
//Change worker status to IDLE
req_025_Util.changeWorkerStatusToIdleWithAdvert(peerComponent, workerSpecF, wmFDID, dsID);
//Allocate the worker for a local user
String broker4PubKey = "broker4PubKey";
DeploymentID lwpc4OID = req_108_Util.login(peerComponent, user4, broker4PubKey);
LocalWorkerProviderClient lwpc4 = (LocalWorkerProviderClient) AcceptanceTestUtil.getBoundObject(lwpc4OID);
WorkerAllocation allocationF = new WorkerAllocation(wmFDID);
RequestSpecification requestSpec5 = new RequestSpecification(0, new JobSpecification("label"), 5, PeerAcceptanceTestCase.buildRequirements(null, null, null, null), 1, 0, 0);
req_011_Util.requestForLocalConsumer(peerComponent, new TestStub(lwpc4OID, lwpc4), requestSpec5, allocationF);
req_025_Util.changeWorkerStatusToAllocatedForBroker(peerComponent, lwpc4OID, wmFDID, workerSpecF,
requestSpec5);
//A remote consumer disposes a worker allocated for a local consumer - expect to log the warn
RemoteWorkerManagement remoteWorkerF = getMock(NOT_NICE, RemoteWorkerManagement.class);
workerID = createWorkerDeploymentID(workerSpecF, workerFPublicKey);
AcceptanceTestUtil.publishTestObject(peerComponent, workerID,
remoteWorkerF, RemoteWorkerManagement.class);
loggerMock.warn("The remote consumer [" + rwpcOID.getServiceID() + "] disposed the worker [" + workerID.getServiceID() + "], " +
"that is not allocated for him. This disposal was ignored.");
replayActiveMocks();
AcceptanceTestUtil.setExecutionContext(peerComponent, rwpOD, rwpcPubKey);
rwp.disposeWorker(workerID.getServiceID());
verifyActiveMocks();
resetActiveMocks();
//A remote consumer disposes a worker allocated for other remote consumer - expect to log the warn
RemoteWorkerManagement remoteWorkerB = getMock(NOT_NICE, RemoteWorkerManagement.class);
workerID = createWorkerDeploymentID(workerSpecB, workerBPublicKey);
AcceptanceTestUtil.publishTestObject(peerComponent, workerID,
remoteWorkerB, RemoteWorkerManagement.class);
loggerMock.warn("The remote consumer [" + rwpcOID.getServiceID() + "] disposed the worker [" + workerID.getServiceID() + "], " +
"that is not allocated for him. This disposal was ignored.");
replayActiveMocks();
rwp.disposeWorker(workerID.getServiceID());
verifyActiveMocks();
resetActiveMocks();
//A remote consumer disposes a remote worker - expect to log the warn
RemoteWorkerManagement remoteWorkerR = getMock(NOT_NICE, RemoteWorkerManagement.class);
workerID = createWorkerDeploymentID(workerAcceptanceUtil.createClassAdWorkerSpec("unknown", "unknown", null, null), "remoteWorkerPublicKey");
AcceptanceTestUtil.publishTestObject(peerComponent, workerID, remoteWorkerR,
RemoteWorkerManagement.class);
loggerMock.warn("The remote consumer [" + rwpcOID.getServiceID() + "] disposed the worker [" + workerID.getServiceID() + "], " +
"that is not allocated for him. This disposal was ignored.");
replayActiveMocks();
rwp.disposeWorker(workerID.getServiceID());
verifyActiveMocks();
resetActiveMocks();
}
}