/**
* CopyRight by Chinamobile
*/
package com.chinamobile.bcbsp.test.workermanager;
import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import junit.framework.TestCase;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import com.chinamobile.bcbsp.BSPConfiguration;
import com.chinamobile.bcbsp.Constants;
import com.chinamobile.bcbsp.sync.WorkerSSControllerInterface;
import com.chinamobile.bcbsp.test.TestUtil;
import com.chinamobile.bcbsp.util.BSPJobID;
import com.chinamobile.bcbsp.util.StaffAttemptID;
import com.chinamobile.bcbsp.workermanager.WorkerAgentForJob;
import com.chinamobile.bcbsp.workermanager.WorkerManager;
public class WorkerManagerTest extends TestCase {
WorkerManager workerManager = null;
BSPConfiguration conf = null;
@Before
protected void setUp() throws Exception {
super.setUp();
conf = new BSPConfiguration();
conf.set(Constants.BC_BSP_CONTROLLER_ADDRESS, "127.0.0.1:40000");
workerManager = new WorkerManager(conf);
}
@After
protected void tearDown() throws Exception {
super.tearDown();
}
@Test
public void testGetWorkerManagerNameBSPJobIDStaffAttemptID() {
WorkerAgentForJob wafj = new WorkerAgentForJob(
TestUtil.createDonothingObject(WorkerSSControllerInterface.class));
Map<BSPJobID, WorkerAgentForJob> runningJobs = new ConcurrentHashMap<BSPJobID, WorkerAgentForJob>();
try {
TestUtil.set(workerManager, "runningJobtoWorkerAgent", runningJobs);
TestUtil.set(wafj, "workerManagerName", "Test");
} catch (Exception e) {
e.printStackTrace();
}
BSPJobID jobID = new BSPJobID();
StaffAttemptID staffID = new StaffAttemptID(jobID.getJtIdentifier(),
jobID.getId(), 0, 0);
runningJobs.put(jobID, wafj);
String workerManagerName = workerManager.getWorkerManagerName(jobID,
staffID);
assertEquals(true, "Test".equals(workerManagerName));
}
@Test
public void testGetNumberWorkers() {
WorkerAgentForJob wafj = new WorkerAgentForJob(
TestUtil.createDonothingObject(WorkerSSControllerInterface.class));
BSPJobID jobID = new BSPJobID();
StaffAttemptID staffID = new StaffAttemptID(jobID.getJtIdentifier(),
jobID.getId(), 0, 0);
wafj.setNumberWorkers(jobID, staffID, 2);
Map<BSPJobID, WorkerAgentForJob> runningJobs = new ConcurrentHashMap<BSPJobID, WorkerAgentForJob>();
runningJobs.put(jobID, wafj);
try {
TestUtil.set(workerManager, "runningJobtoWorkerAgent", runningJobs);
} catch (Exception e) {
e.printStackTrace();
}
int num = workerManager.getNumberWorkers(jobID, staffID);
assertEquals(2, num);
}
@Test
public void testSetNumberWorkers() {
WorkerAgentForJob wafj = new WorkerAgentForJob(
TestUtil.createDonothingObject(WorkerSSControllerInterface.class));
BSPJobID jobID = new BSPJobID();
StaffAttemptID staffID = new StaffAttemptID(jobID.getJtIdentifier(),
jobID.getId(), 0, 0);
wafj.setNumberWorkers(jobID, staffID, 0);
Map<BSPJobID, WorkerAgentForJob> runningJobs = new ConcurrentHashMap<BSPJobID, WorkerAgentForJob>();
runningJobs.put(jobID, wafj);
try {
TestUtil.set(workerManager, "runningJobtoWorkerAgent", runningJobs);
} catch (Exception e) {
e.printStackTrace();
}
int num = workerManager.getNumberWorkers(jobID, staffID);
assertEquals(0, num);
workerManager.setNumberWorkers(jobID, staffID, 2);
num = workerManager.getNumberWorkers(jobID, staffID);
assertEquals(2, num);
}
@SuppressWarnings("unchecked")
@Test
public void testSetWorkerNametoPartitions() {
WorkerAgentForJob wafj = new WorkerAgentForJob(
TestUtil.createDonothingObject(WorkerSSControllerInterface.class));
BSPJobID jobID = new BSPJobID();
@SuppressWarnings("unused")
StaffAttemptID staffID = new StaffAttemptID(jobID.getJtIdentifier(),
jobID.getId(), 0, 0);
Map<BSPJobID, WorkerAgentForJob> runningJobs = new ConcurrentHashMap<BSPJobID, WorkerAgentForJob>();
runningJobs.put(jobID, wafj);
HashMap<Integer, String> partitionToWorkerManagerName = null;
int port = 0;
try {
partitionToWorkerManagerName = (HashMap<Integer, String>)TestUtil.get(wafj, "partitionToWorkerManagerName");
TestUtil.set(workerManager, "runningJobtoWorkerAgent", runningJobs);
port = (Integer)TestUtil.get(wafj, "portForJob");
} catch (Exception e) {
e.printStackTrace();
}
workerManager.setWorkerNametoPartitions(jobID, 5, "TEST");
String check = partitionToWorkerManagerName.get(5);
String shouldBe = "TEST:" + port;
assertEquals(true, check.equals(shouldBe));
}
public static void main(String[] args) throws Exception {
}
}