/* * 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.assertFalse; import static org.junit.Assert.assertTrue; import java.util.List; import java.util.concurrent.ScheduledExecutorService; import org.easymock.classextension.EasyMock; import org.junit.Test; import org.junit.experimental.categories.Category; import org.ourgrid.acceptance.util.JDLCompliantTest; import org.ourgrid.acceptance.util.WorkerAcceptanceUtil; 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_018_Util; import org.ourgrid.acceptance.util.peer.Req_020_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.RemoteWorkerProvider; import org.ourgrid.common.interfaces.RemoteWorkerProviderClient; 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.management.RemoteWorkerManagementClient; 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.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.reqtrace.ReqTest; import org.ourgrid.worker.WorkerConstants; 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="REQ018") public class Req_018_Test extends PeerAcceptanceTestCase { private WorkerAcceptanceUtil workerAcceptanceUtil = new WorkerAcceptanceUtil(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_020_Util req_020_Util = new Req_020_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_106_Util req_106_Util = new Req_106_Util(getComponentContext()); private PeerComponent peerComponent; /** * When a consumer peer receives a remote worker, it must: * Register interest on provider peer failure; * Register interest on remote worker failure; * Deliver the worker to Broker. * @throws Exception */ @ReqTest(test="AT-018.1", reqs="REQ018") @Test public void test_AT_018_1_RemoteWorkerReceiving() 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(); 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. } //DS 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 brokerPubKey = "brokerPublicKey"; DeploymentID lwpcOID = req_108_Util.login(peerComponent, user, brokerPubKey); TestStub lwpcStub = new TestStub(lwpcOID, AcceptanceTestUtil.getBoundObject(lwpcOID)); int requestID = 1; RequestSpecification requestSpec = new RequestSpecification(0, new JobSpecification("label"), requestID, "os = windows AND mem > 256", 1, 0, 0); req_011_Util.requestForLocalConsumer(peerComponent, lwpcStub, requestSpec); //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, requestSpec, "rwpUser", "rwpServer", "rwpPublicKey", workerSpec); RemoteWorkerProvider rwp = (RemoteWorkerProvider) rwpStub.getObject(); DeploymentID rwpID = rwpStub.getDeploymentID(); //Remote worker provider client receive a remote worker DeploymentID remoteWorkerOID = req_018_Util.receiveRemoteWorker(peerComponent, rwp, rwpID, workerSpec, "workerPK", brokerPubKey).getDeploymentID(); ObjectDeployment remoteWorkerMonitorOD = peerAcceptanceUtil.getRemoteWorkerMonitorDeployment(); assertTrue(AcceptanceTestUtil.isInterested(peerComponent, remoteWorkerOID.getServiceID(), remoteWorkerMonitorOD.getDeploymentID())); //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); } /** * Validate remote worker receiving: * The provider must be requested for worker before delivering them; * The parameters worker and workerSpec are mandatory; * The worker must not be already allocated for this peer. * @throws Exception */ @ReqTest(test="AT-018.2", reqs="REQ018") @Test public void test_AT_018_2_InputValidation() 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(); 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. } ScheduledExecutorService timerMock = getMock(NOT_NICE, ScheduledExecutorService.class); peerComponent.setTimer(timerMock); //ds 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 brokerPubKey = "brokerPublicKey"; DeploymentID lwpcOID = req_108_Util.login(peerComponent, user, brokerPubKey); TestStub lwpcStub = new TestStub(lwpcOID, AcceptanceTestUtil.getBoundObject(lwpcOID)); /*LocalWorkerProviderClient lwpc = getMock(NOT_NICE, LocalWorkerProviderClient.class); peerAcceptanceUtil.createStub(lwpc, lwpcOID);*/ int requestID = 1; int requiredWorkers = 1; String requirements = "os = windows AND mem > 256"; RequestSpecification requestSpec = new RequestSpecification(0, new JobSpecification("label"), requestID, requirements, requiredWorkers, 0, 0); req_011_Util.requestForLocalConsumer(peerComponent, lwpcStub, requestSpec); //GIS client receive a remote worker provider String rwpPublicKey = "rwpPublicKey"; 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, requestSpec, "rwpUser", "rwpServer", rwpPublicKey, workerSpec); RemoteWorkerProvider rwp = (RemoteWorkerProvider) rwpStub.getObject(); DeploymentID rwpID = rwpStub.getDeploymentID(); AcceptanceTestUtil.publishTestObject(peerComponent, rwpID, rwp, RemoteWorkerProvider.class); //Remote worker provider client receive a null remote worker RemoteWorkerProviderClient rwpc = peerAcceptanceUtil.getRemoteWorkerProviderClientProxy(); ObjectDeployment rwpcOD = peerAcceptanceUtil.getRemoteWorkerProviderClientDeployment(); AcceptanceTestUtil.setExecutionContext(peerComponent, rwpcOD, rwpPublicKey); CommuneLogger loggerMock = getMock(NOT_NICE, CommuneLogger.class); peerComponent.setLogger(loggerMock); loggerMock.warn("Ignoring a null worker, which was received from the provider: " + rwpID.getContainerID()); replayActiveMocks(); rwpc.hereIsWorker(rwp, null, workerSpec); verifyActiveMocks(); resetActiveMocks(); //Remote worker provider client receive a remote worker without specification RemoteWorkerManagement remoteWorker = getMock(NOT_NICE, RemoteWorkerManagement.class); DeploymentID remoteWorkerOID = new DeploymentID(new ContainerID("us", "server", WorkerConstants.MODULE_NAME), "remoteWorkerObjName"); peerAcceptanceUtil.createStub(remoteWorker, RemoteWorkerManagement.class, remoteWorkerOID); rwpID = rwpStub.getDeploymentID(); rwp = (RemoteWorkerProvider) rwpStub.getObject(); AcceptanceTestUtil.publishTestObject(peerComponent, rwpID, rwp, RemoteWorkerProvider.class); AcceptanceTestUtil.setExecutionContext(peerComponent, rwpcOD, rwpID); loggerMock.warn("Ignoring a worker without specification, which was received from the provider: " + rwpID.getContainerID()); replayActiveMocks(); rwpc.hereIsWorker(rwp, remoteWorkerOID.getServiceID(), null); ObjectDeployment remoteWorkerMonitorOD = peerAcceptanceUtil.getRemoteWorkerMonitorDeployment(); assertFalse(AcceptanceTestUtil.isInterested(peerComponent, remoteWorkerOID.getServiceID(), remoteWorkerMonitorOD.getDeploymentID())); verifyActiveMocks(); resetActiveMocks(); // rwpID = rwpStub.getDeploymentID(); rwp = (RemoteWorkerProvider) rwpStub.getObject(); AcceptanceTestUtil.publishTestObject(peerComponent, rwpID, rwp, RemoteWorkerProvider.class); AcceptanceTestUtil.setExecutionContext(peerComponent, rwpcOD, rwpID); //Remote worker provider client receive a remote worker loggerMock.debug("Received a worker ["+ remoteWorkerOID.getServiceID() +"] from a remote worker provider [" + rwpID.getServiceID() + "]."); peerAcceptanceUtil.createStub(remoteWorker, RemoteWorkerManagement.class, remoteWorkerOID); RemoteWorkerManagementClient rwmc = peerAcceptanceUtil.getRemoteWorkerManagementClient(); remoteWorker.workForBroker(rwmc, brokerPubKey); replayActiveMocks(); rwpc.hereIsWorker(rwp, remoteWorkerOID.getServiceID(), workerSpec); assertTrue(AcceptanceTestUtil.isInterested(peerComponent, remoteWorkerOID.getServiceID(), remoteWorkerMonitorOD.getDeploymentID())); req_018_Util.notifyRemoteWorkerRecovery(remoteWorkerOID); verifyActiveMocks(); resetActiveMocks(); //Remote worker provider client receive an already allocated remote worker loggerMock.warn("Receiving a remote worker ["+ remoteWorkerOID.getServiceID() +"] " + "that is already allocated in this peer. This message was ignored."); peerAcceptanceUtil.createStub(remoteWorker, RemoteWorkerManagement.class, remoteWorkerOID); replayActiveMocks(); rwpc.hereIsWorker(rwp, remoteWorkerOID.getServiceID(), workerSpec); assertTrue(AcceptanceTestUtil.isInterested(peerComponent, remoteWorkerOID.getServiceID(), remoteWorkerMonitorOD.getDeploymentID())); req_018_Util.notifyRemoteWorkerRecovery(remoteWorkerOID); verifyActiveMocks(); resetActiveMocks(); } /** * Verify if the peer redistributes the remote workers equally. * @throws Exception */ @ReqTest(test="AT-018.3", reqs="REQ018") @Test public void test_AT_018_3_LocalRedistribution() throws Exception{ //Create user accounts XMPPAccount user1 = req_101_Util.createLocalUser("user18_1", "server011", "011011"); XMPPAccount user2 = req_101_Util.createLocalUser("user18_2", "server011", "011011"); //Start peer and set mocks for logger and timer 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. } //DiscoveryService recovery DeploymentID dsID = new DeploymentID(new ContainerID("magoDosNos", "sweetleaf.lab", DiscoveryServiceConstants.MODULE_NAME), DiscoveryServiceConstants.DS_OBJECT_NAME); req_020_Util.notifyDiscoveryServiceRecovery(peerComponent, dsID); //Clients login and request workers after ds recovery - expect OG peer to query ds //user1 String brokerPubKey1 = "brokerPublicKey1"; DeploymentID lwpcOID1 = req_108_Util.login(peerComponent, user1, brokerPubKey1); TestStub lwpcStub1 = new TestStub(lwpcOID1, AcceptanceTestUtil.getBoundObject(lwpcOID1)); RequestSpecification requestSpec = new RequestSpecification(0, new JobSpecification("label"), 1, "", 1, 0, 0); req_011_Util.requestForLocalConsumer(peerComponent, lwpcStub1, requestSpec); //user2 String brokerPubKey2 = "brokerPublicKey2"; DeploymentID lwpcOID2 = req_108_Util.login(peerComponent, user2, brokerPubKey2); TestStub lwpcStub2 = new TestStub(lwpcOID2, AcceptanceTestUtil.getBoundObject(lwpcOID2)); RequestSpecification requestSpec2 = new RequestSpecification(0, new JobSpecification("label"), 2, "", 1, 0, 0); req_011_Util.requestForLocalConsumer(peerComponent, lwpcStub2, requestSpec2); //GIS client1 receive a remote worker provider WorkerSpecification workerSpec1 = workerAcceptanceUtil.createWorkerSpec("U1", "S1"); WorkerSpecification workerSpec2 = workerAcceptanceUtil.createWorkerSpec("U2", "S1"); TestStub rwpStub = req_020_Util.receiveRemoteWorkerProvider(peerComponent, requestSpec, "rwpUser", "rwpServer", "rwpPublicKey", workerSpec1, workerSpec2); RemoteWorkerProvider rwp = (RemoteWorkerProvider) rwpStub.getObject(); DeploymentID rwpID = rwpStub.getDeploymentID(); //Remote worker provider client receive two remote workers - expect to give one for each Broker //user1 req_018_Util.receiveRemoteWorker(peerComponent, rwp, rwpID, workerSpec1, "worker1PK", brokerPubKey1); //user2 req_018_Util.receiveRemoteWorker(peerComponent, rwp, rwpID, workerSpec2, "worker2PK", brokerPubKey2); //Verify if both clients were marked as CONSUMING UserInfo userInfo1 = new UserInfo(user1.getUsername(), user1.getServerAddress(), brokerPubKey1, UserState.CONSUMING); UserInfo userInfo2 = new UserInfo(user2.getUsername(), user2.getServerAddress(), brokerPubKey2, UserState.CONSUMING); List<UserInfo> usersInfo = AcceptanceTestUtil.createList(userInfo1, userInfo2); req_106_Util.getUsersStatus(usersInfo); } /** * Verifies if the peer disposes a remote worker that does not match any request. * @throws Exception */ @ReqTest(test="AT-018.4", reqs="REQ018") @Test public void test_AT_018_4_WorkersDontMatchRequirements() 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(); PeerControl peerControl = peerAcceptanceUtil.getPeerControl(); 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, peerAcceptanceUtil.getPeerControlDeployment(), pccID1); try { peerControl.addUser(peerControlClient1, user.getUsername() + "@" + user.getServerAddress()); } catch (CommuneRuntimeException e) { //do nothing - the user is already added. } ScheduledExecutorService timerMock = getMock(NOT_NICE, ScheduledExecutorService.class); peerComponent.setTimer(timerMock); //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 brokerPubKey = "brokerGridPublicKey"; DeploymentID lwpcOID = req_108_Util.login(peerComponent, user, brokerPubKey); TestStub lwpcStub = new TestStub(lwpcOID, AcceptanceTestUtil.getBoundObject(lwpcOID)); RequestSpecification requestSpec = new RequestSpecification(0, new JobSpecification("label"), 1, "os = windows AND mem > 256", 1, 0, 0); req_011_Util.requestForLocalConsumer(peerComponent, lwpcStub, requestSpec); //GIS client receive a remote worker provider WorkerSpecification workerSpec = workerAcceptanceUtil.createWorkerSpec("U1", "S1"); workerSpec.putAttribute(OurGridSpecificationConstants.ATT_MEM, "128"); TestStub rwpStub = req_020_Util.receiveRemoteWorkerProvider( peerComponent, requestSpec, "rwpUser", "rwpServer", "rwpPublicKey", workerSpec); RemoteWorkerProvider rwp = (RemoteWorkerProvider) rwpStub.getObject(); DeploymentID rwpID = rwpStub.getDeploymentID(); //Remote worker provider client receive a remote worker which does not match the request req_018_Util.receiveAndDisposeRemoteWorker(peerComponent, rwp, rwpID, workerSpec, "workerPublicKey", brokerPubKey); } // ----------------------------------------------Qualification tests----------------------------------------------------- /** * * * Description: * @author * @Data */ @Test public void test_AT_018_3_Qualification_LocalRedistribution() throws Exception{ //Create user accounts XMPPAccount user1 = req_101_Util.createLocalUser("user18_1", "server011", "011011"); XMPPAccount user2 = req_101_Util.createLocalUser("user18_2", "server011", "011011"); //Start peer and set mocks for logger and timer 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. } //DiscoveryService recovery DeploymentID dsID = new DeploymentID(new ContainerID("magoDosNos", "sweetleaf.lab", DiscoveryServiceConstants.MODULE_NAME), DiscoveryServiceConstants.DS_OBJECT_NAME); req_020_Util.notifyDiscoveryServiceRecovery(peerComponent, dsID); //Clients login and request workers after ds recovery - expect OG peer to query ds //user1 String brokerPubKey1 = "brokerPublicKey1"; DeploymentID lwpcOID1 = req_108_Util.login(peerComponent, user1, brokerPubKey1); TestStub lwpcStub1 = new TestStub(lwpcOID1, AcceptanceTestUtil.getBoundObject(lwpcOID1)); RequestSpecification requestSpec = new RequestSpecification(0, new JobSpecification("label"), 1, "", 1, 0, 0); req_011_Util.requestForLocalConsumer(peerComponent, lwpcStub1, requestSpec); //user2 String brokerPubKey2 = "brokerPublicKey2"; DeploymentID lwpcOID2 = req_108_Util.login(peerComponent, user2, brokerPubKey2); TestStub lwpcStub2 = new TestStub(lwpcOID2, AcceptanceTestUtil.getBoundObject(lwpcOID2)); RequestSpecification requestSpec2 = new RequestSpecification(0, new JobSpecification("label"), 2, "", 1, 0, 0); req_011_Util.requestForLocalConsumer(peerComponent, lwpcStub2, requestSpec2); //GIS client1 receive a remote worker provider WorkerSpecification workerSpec1 = workerAcceptanceUtil.createWorkerSpec("U1", "S1"); TestStub rwpStub = req_020_Util.receiveRemoteWorkerProvider(peerComponent, requestSpec, "rwpUser", "rwpServer", "rwpPublicKey", workerSpec1); RemoteWorkerProvider rwp = (RemoteWorkerProvider) rwpStub.getObject(); DeploymentID rwpID = rwpStub.getDeploymentID(); //user1 req_018_Util.receiveRemoteWorker(peerComponent, rwp, rwpID, workerSpec1, "worker1PK", brokerPubKey1); //user2 WorkerSpecification workerSpec2 = workerAcceptanceUtil.createWorkerSpec("U2", "S1"); req_018_Util.receiveRemoteWorker(peerComponent, rwp, rwpID, workerSpec2, "worker2PK", brokerPubKey2); //Verify if one client is just logged and other client is consuming //Two worker were requested. Both users states must be CONSUMING, not LOGGED UserInfo userInfo1 = new UserInfo(user1.getUsername(), user1.getServerAddress(), brokerPubKey1, UserState.CONSUMING); UserInfo userInfo2 = new UserInfo(user2.getUsername(), user2.getServerAddress(), brokerPubKey2, UserState.CONSUMING); List<UserInfo> usersInfo = AcceptanceTestUtil.createList(userInfo1, userInfo2); req_106_Util.getUsersStatus(usersInfo); } /** * When a consumer peer receives a remote worker, it must: * Register interest on provider peer failure; * Register interest on remote worker failure; * Deliver the worker to Broker. * @throws Exception */ @ReqTest(test="AT-018.1", reqs="REQ018") @Category(JDLCompliantTest.class) @Test public void test_AT_018_1_RemoteWorkerReceivingWithJDL() 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(); 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. } //DS 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 brokerPubKey = "brokerPublicKey"; DeploymentID lwpcOID = req_108_Util.login(peerComponent, user, brokerPubKey); TestStub lwpcStub = new TestStub(lwpcOID, AcceptanceTestUtil.getBoundObject(lwpcOID)); int requestID = 1; RequestSpecification requestSpec = new RequestSpecification(0, new JobSpecification("label"), requestID, "[Requirements=(other.MainMemory > 256 && other.OS == \"windows\");Rank=0]", 1, 0, 0); req_011_Util.requestForLocalConsumer(peerComponent, lwpcStub, requestSpec); //GIS client receive a remote worker provider WorkerSpecification workerSpec = workerAcceptanceUtil.createClassAdWorkerSpec("U1", "S1", 512, "windows"); TestStub rwpStub = req_020_Util.receiveRemoteWorkerProvider(peerComponent, requestSpec, "rwpUser", "rwpServer", "rwpPublicKey", workerSpec); RemoteWorkerProvider rwp = (RemoteWorkerProvider) rwpStub.getObject(); DeploymentID rwpID = rwpStub.getDeploymentID(); //Remote worker provider client receive a remote worker DeploymentID remoteWorkerOID = req_018_Util.receiveRemoteWorker(peerComponent, rwp, rwpID, workerSpec, "workerPK", brokerPubKey).getDeploymentID(); ObjectDeployment remoteWorkerMonitorOD = peerAcceptanceUtil.getRemoteWorkerMonitorDeployment(); assertTrue(AcceptanceTestUtil.isInterested(peerComponent, remoteWorkerOID.getServiceID(), remoteWorkerMonitorOD.getDeploymentID())); //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); } /** * Validate remote worker receiving: * The provider must be requested for worker before delivering them; * The parameters worker and workerSpec are mandatory; * The worker must not be already allocated for this peer. * @throws Exception */ @ReqTest(test="AT-018.2", reqs="REQ018") @Category(JDLCompliantTest.class) @Test public void test_AT_018_2_InputValidationWithJDL() 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(); 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. } ScheduledExecutorService timerMock = getMock(NOT_NICE, ScheduledExecutorService.class); peerComponent.setTimer(timerMock); //ds 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 brokerPubKey = "brokerPublicKey"; DeploymentID lwpcOID = req_108_Util.login(peerComponent, user, brokerPubKey); TestStub lwpcStub = new TestStub(lwpcOID, AcceptanceTestUtil.getBoundObject(lwpcOID)); /*LocalWorkerProviderClient lwpc = getMock(NOT_NICE, LocalWorkerProviderClient.class); peerAcceptanceUtil.createStub(lwpc, lwpcOID);*/ int requestID = 1; int requiredWorkers = 1; String requirements = "[Requirements=(other.MainMemory > 256 && other.OS == \"windows\");Rank=0]"; RequestSpecification requestSpec = new RequestSpecification(0, new JobSpecification("label"), requestID, requirements, requiredWorkers, 0, 0); req_011_Util.requestForLocalConsumer(peerComponent, lwpcStub, requestSpec); //GIS client receive a remote worker provider String rwpPublicKey = "rwpPublicKey"; WorkerSpecification workerSpec = workerAcceptanceUtil.createClassAdWorkerSpec("U1", "S1", 512, "windows"); TestStub rwpStub = req_020_Util.receiveRemoteWorkerProvider(peerComponent, requestSpec, "rwpUser", "rwpServer", rwpPublicKey, workerSpec); RemoteWorkerProvider rwp = (RemoteWorkerProvider) rwpStub.getObject(); DeploymentID rwpID = rwpStub.getDeploymentID(); AcceptanceTestUtil.publishTestObject(peerComponent, rwpID, rwp, RemoteWorkerProvider.class); //Remote worker provider client receive a null remote worker RemoteWorkerProviderClient rwpc = peerAcceptanceUtil.getRemoteWorkerProviderClientProxy(); ObjectDeployment rwpcOD = peerAcceptanceUtil.getRemoteWorkerProviderClientDeployment(); AcceptanceTestUtil.setExecutionContext(peerComponent, rwpcOD, rwpPublicKey); CommuneLogger loggerMock = getMock(NOT_NICE, CommuneLogger.class); peerComponent.setLogger(loggerMock); loggerMock.warn("Ignoring a null worker, which was received from the provider: " + rwpID.getContainerID()); replayActiveMocks(); rwpc.hereIsWorker(rwp, null, workerSpec); verifyActiveMocks(); resetActiveMocks(); //Remote worker provider client receive a remote worker without specification RemoteWorkerManagement remoteWorker = getMock(NOT_NICE, RemoteWorkerManagement.class); DeploymentID remoteWorkerOID = new DeploymentID(new ContainerID("us", "server", WorkerConstants.MODULE_NAME), "remoteWorkerObjName"); peerAcceptanceUtil.createStub(remoteWorker, RemoteWorkerManagement.class, remoteWorkerOID); rwpID = rwpStub.getDeploymentID(); rwp = (RemoteWorkerProvider) rwpStub.getObject(); AcceptanceTestUtil.publishTestObject(peerComponent, rwpID, rwp, RemoteWorkerProvider.class); AcceptanceTestUtil.setExecutionContext(peerComponent, rwpcOD, rwpID); loggerMock.warn("Ignoring a worker without specification, which was received from the provider: " + rwpID.getContainerID()); replayActiveMocks(); rwpc.hereIsWorker(rwp, remoteWorkerOID.getServiceID(), null); ObjectDeployment remoteWorkerMonitorOD = peerAcceptanceUtil.getRemoteWorkerMonitorDeployment(); assertFalse(AcceptanceTestUtil.isInterested(peerComponent, remoteWorkerOID.getServiceID(), remoteWorkerMonitorOD.getDeploymentID())); verifyActiveMocks(); resetActiveMocks(); // rwpID = rwpStub.getDeploymentID(); rwp = (RemoteWorkerProvider) rwpStub.getObject(); AcceptanceTestUtil.publishTestObject(peerComponent, rwpID, rwp, RemoteWorkerProvider.class); AcceptanceTestUtil.setExecutionContext(peerComponent, rwpcOD, rwpID); //Remote worker provider client receive a remote worker loggerMock.debug("Received a worker ["+ remoteWorkerOID.getServiceID() +"] from a remote worker provider [" + rwpID.getServiceID() + "]."); peerAcceptanceUtil.createStub(remoteWorker, RemoteWorkerManagement.class, remoteWorkerOID); RemoteWorkerManagementClient rwmc = peerAcceptanceUtil.getRemoteWorkerManagementClient(); remoteWorker.workForBroker(rwmc, brokerPubKey); replayActiveMocks(); rwpc.hereIsWorker(rwp, remoteWorkerOID.getServiceID(), workerSpec); assertTrue(AcceptanceTestUtil.isInterested(peerComponent, remoteWorkerOID.getServiceID(), remoteWorkerMonitorOD.getDeploymentID())); req_018_Util.notifyRemoteWorkerRecovery(remoteWorkerOID); verifyActiveMocks(); resetActiveMocks(); //Remote worker provider client receive an already allocated remote worker loggerMock.warn("Receiving a remote worker ["+ remoteWorkerOID.getServiceID() +"] " + "that is already allocated in this peer. This message was ignored."); peerAcceptanceUtil.createStub(remoteWorker, RemoteWorkerManagement.class, remoteWorkerOID); replayActiveMocks(); rwpc.hereIsWorker(rwp, remoteWorkerOID.getServiceID(), workerSpec); assertTrue(AcceptanceTestUtil.isInterested(peerComponent, remoteWorkerOID.getServiceID(), remoteWorkerMonitorOD.getDeploymentID())); req_018_Util.notifyRemoteWorkerRecovery(remoteWorkerOID); verifyActiveMocks(); resetActiveMocks(); } /** * Verify if the peer redistributes the remote workers equally. * @throws Exception */ @ReqTest(test="AT-018.3", reqs="REQ018") @Category(JDLCompliantTest.class) @Test public void test_AT_018_3_LocalRedistributionWithJDL() throws Exception{ //Create user accounts XMPPAccount user1 = req_101_Util.createLocalUser("user18_1", "server011", "011011"); XMPPAccount user2 = req_101_Util.createLocalUser("user18_2", "server011", "011011"); //Start peer and set mocks for logger and timer 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. } //DiscoveryService recovery DeploymentID dsID = new DeploymentID(new ContainerID("magoDosNos", "sweetleaf.lab", DiscoveryServiceConstants.MODULE_NAME), DiscoveryServiceConstants.DS_OBJECT_NAME); req_020_Util.notifyDiscoveryServiceRecovery(peerComponent, dsID); //Clients login and request workers after ds recovery - expect OG peer to query ds //user1 String brokerPubKey1 = "brokerPublicKey1"; DeploymentID lwpcOID1 = req_108_Util.login(peerComponent, user1, brokerPubKey1); TestStub lwpcStub1 = new TestStub(lwpcOID1, AcceptanceTestUtil.getBoundObject(lwpcOID1)); RequestSpecification requestSpec = new RequestSpecification(0, new JobSpecification("label"), 1, PeerAcceptanceTestCase.buildRequirements(null, null, null, null), 1, 0, 0); req_011_Util.requestForLocalConsumer(peerComponent, lwpcStub1, requestSpec); //user2 String brokerPubKey2 = "brokerPublicKey2"; DeploymentID lwpcOID2 = req_108_Util.login(peerComponent, user2, brokerPubKey2); TestStub lwpcStub2 = new TestStub(lwpcOID2, AcceptanceTestUtil.getBoundObject(lwpcOID2)); RequestSpecification requestSpec2 = new RequestSpecification(0, new JobSpecification("label"), 2, PeerAcceptanceTestCase.buildRequirements(null, null, null, null), 1, 0, 0); req_011_Util.requestForLocalConsumer(peerComponent, lwpcStub2, requestSpec2); //GIS client1 receive a remote worker provider WorkerSpecification workerSpec1 = workerAcceptanceUtil.createClassAdWorkerSpec("U1", "S1", null, null); WorkerSpecification workerSpec2 = workerAcceptanceUtil.createClassAdWorkerSpec("U2", "S1", null, null); TestStub rwpStub = req_020_Util.receiveRemoteWorkerProvider(peerComponent, requestSpec, "rwpUser", "rwpServer", "rwpPublicKey", workerSpec1, workerSpec2); RemoteWorkerProvider rwp = (RemoteWorkerProvider) rwpStub.getObject(); DeploymentID rwpID = rwpStub.getDeploymentID(); //Remote worker provider client receive two remote workers - expect to give one for each Broker //user1 req_018_Util.receiveRemoteWorker(peerComponent, rwp, rwpID, workerSpec1, "worker1PK", brokerPubKey1); //user2 req_018_Util.receiveRemoteWorker(peerComponent, rwp, rwpID, workerSpec2, "worker2PK", brokerPubKey2); //Verify if both clients were marked as CONSUMING UserInfo userInfo1 = new UserInfo(user1.getUsername(), user1.getServerAddress(), brokerPubKey1, UserState.CONSUMING); UserInfo userInfo2 = new UserInfo(user2.getUsername(), user2.getServerAddress(), brokerPubKey2, UserState.CONSUMING); List<UserInfo> usersInfo = AcceptanceTestUtil.createList(userInfo1, userInfo2); req_106_Util.getUsersStatus(usersInfo); } /** * Verifies if the peer disposes a remote worker that does not match any request. * @throws Exception */ @ReqTest(test="AT-018.4", reqs="REQ018") @Category(JDLCompliantTest.class) @Test public void test_AT_018_4_WorkersDontMatchRequirementsWithJDL() 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(); PeerControl peerControl = peerAcceptanceUtil.getPeerControl(); 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, peerAcceptanceUtil.getPeerControlDeployment(), pccID1); try { peerControl.addUser(peerControlClient1, user.getUsername() + "@" + user.getServerAddress()); } catch (CommuneRuntimeException e) { //do nothing - the user is already added. } ScheduledExecutorService timerMock = getMock(NOT_NICE, ScheduledExecutorService.class); peerComponent.setTimer(timerMock); //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 brokerPubKey = "brokerGridPublicKey"; DeploymentID lwpcOID = req_108_Util.login(peerComponent, user, brokerPubKey); TestStub lwpcStub = new TestStub(lwpcOID, AcceptanceTestUtil.getBoundObject(lwpcOID)); RequestSpecification requestSpec = new RequestSpecification(0, new JobSpecification("label"), 1, "[Requirements=(other.MainMemory > 256 && other.OS == \"windows\");Rank=0]", 1, 0, 0); req_011_Util.requestForLocalConsumer(peerComponent, lwpcStub, requestSpec); //GIS client receive a remote worker provider WorkerSpecification workerSpec = workerAcceptanceUtil.createClassAdWorkerSpec("U1", "S1", 128, null); TestStub rwpStub = req_020_Util.receiveRemoteWorkerProvider(peerComponent, requestSpec, "rwpUser", "rwpServer", "rwpPublicKey", workerSpec); RemoteWorkerProvider rwp = (RemoteWorkerProvider) rwpStub.getObject(); DeploymentID rwpID = rwpStub.getDeploymentID(); //Remote worker provider client receive a remote worker which does not match the request req_018_Util.receiveAndDisposeRemoteWorker(peerComponent, rwp, rwpID, workerSpec, "workerPublicKey", brokerPubKey); } // ----------------------------------------------Qualification tests----------------------------------------------------- /** * * * Description: * @author * @Data */ @Category(JDLCompliantTest.class) @Test public void test_AT_018_3_Qualification_LocalRedistributionWithJDL() throws Exception{ //Create user accounts XMPPAccount user1 = req_101_Util.createLocalUser("user18_1", "server011", "011011"); XMPPAccount user2 = req_101_Util.createLocalUser("user18_2", "server011", "011011"); //Start peer and set mocks for logger and timer 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. } //DiscoveryService recovery DeploymentID dsID = new DeploymentID(new ContainerID("magoDosNos", "sweetleaf.lab", DiscoveryServiceConstants.MODULE_NAME), DiscoveryServiceConstants.DS_OBJECT_NAME); req_020_Util.notifyDiscoveryServiceRecovery(peerComponent, dsID); //Clients login and request workers after ds recovery - expect OG peer to query ds //user1 String brokerPubKey1 = "brokerPublicKey1"; DeploymentID lwpcOID1 = req_108_Util.login(peerComponent, user1, brokerPubKey1); TestStub lwpcStub1 = new TestStub(lwpcOID1, AcceptanceTestUtil.getBoundObject(lwpcOID1)); RequestSpecification requestSpec = new RequestSpecification(0, new JobSpecification("label"), 1, PeerAcceptanceTestCase.buildRequirements(null, null, null, null), 1, 0, 0); req_011_Util.requestForLocalConsumer(peerComponent, lwpcStub1, requestSpec); //user2 String brokerPubKey2 = "brokerPublicKey2"; DeploymentID lwpcOID2 = req_108_Util.login(peerComponent, user2, brokerPubKey2); TestStub lwpcStub2 = new TestStub(lwpcOID2, AcceptanceTestUtil.getBoundObject(lwpcOID2)); RequestSpecification requestSpec2 = new RequestSpecification(0, new JobSpecification("label"), 2, PeerAcceptanceTestCase.buildRequirements(null, null, null, null), 1, 0, 0); req_011_Util.requestForLocalConsumer(peerComponent, lwpcStub2, requestSpec2); //GIS client1 receive a remote worker provider WorkerSpecification workerSpec1 = workerAcceptanceUtil.createClassAdWorkerSpec("U1", "S1", null, null); TestStub rwpStub = req_020_Util.receiveRemoteWorkerProvider(peerComponent, requestSpec, "rwpUser", "rwpServer", "rwpPublicKey", workerSpec1); RemoteWorkerProvider rwp = (RemoteWorkerProvider) rwpStub.getObject(); DeploymentID rwpID = rwpStub.getDeploymentID(); //user1 req_018_Util.receiveRemoteWorker(peerComponent, rwp, rwpID, workerSpec1, "worker1PK", brokerPubKey1); //user2 WorkerSpecification workerSpec2 = workerAcceptanceUtil.createClassAdWorkerSpec("U2", "S1", null, null); req_018_Util.receiveRemoteWorker(peerComponent, rwp, rwpID, workerSpec2, "worker2PK", brokerPubKey2); //Verify if one client is just logged and other client is consuming //Two worker were requested. Both users states must be CONSUMING, not LOGGED UserInfo userInfo1 = new UserInfo(user1.getUsername(), user1.getServerAddress(), brokerPubKey1, UserState.CONSUMING); UserInfo userInfo2 = new UserInfo(user2.getUsername(), user2.getServerAddress(), brokerPubKey2, UserState.CONSUMING); List<UserInfo> usersInfo = AcceptanceTestUtil.createList(userInfo1, userInfo2); req_106_Util.getUsersStatus(usersInfo); } }