You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@myriad.apache.org by da...@apache.org on 2016/07/12 18:51:41 UTC
[1/2] incubator-myriad git commit: MYRIAD-200
Repository: incubator-myriad
Updated Branches:
refs/heads/master 6354ce6ac -> 4a6e50c41
http://git-wip-us.apache.org/repos/asf/incubator-myriad/blob/4a6e50c4/myriad-scheduler/src/test/java/org/apache/myriad/scheduler/fgs/OfferLifeCycleManagerTest.java
----------------------------------------------------------------------
diff --git a/myriad-scheduler/src/test/java/org/apache/myriad/scheduler/fgs/OfferLifeCycleManagerTest.java b/myriad-scheduler/src/test/java/org/apache/myriad/scheduler/fgs/OfferLifeCycleManagerTest.java
new file mode 100644
index 0000000..a16e8e6
--- /dev/null
+++ b/myriad-scheduler/src/test/java/org/apache/myriad/scheduler/fgs/OfferLifeCycleManagerTest.java
@@ -0,0 +1,54 @@
+package org.apache.myriad.scheduler.fgs;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+
+import org.apache.hadoop.net.NodeBase;
+import org.apache.hadoop.yarn.api.records.impl.pb.NodeIdPBImpl;
+import org.apache.hadoop.yarn.api.records.impl.pb.ResourcePBImpl;
+import org.apache.hadoop.yarn.proto.YarnProtos.NodeIdProto;
+import org.apache.hadoop.yarn.server.resourcemanager.rmnode.RMNode;
+import org.apache.hadoop.yarn.server.resourcemanager.rmnode.RMNodeImpl;
+import org.apache.hadoop.yarn.server.resourcemanager.scheduler.SchedulerNode;
+import org.apache.hadoop.yarn.server.resourcemanager.scheduler.common.fica.FiCaSchedulerNode;
+import org.apache.mesos.Protos.Offer;
+import org.apache.myriad.TestObjectFactory;
+import org.apache.myriad.scheduler.MockSchedulerDriver;
+import org.apache.myriad.scheduler.MyriadDriver;
+import org.apache.myriad.state.MockRMContext;
+import org.junit.Before;
+import org.junit.Test;
+
+/**
+ * Unit tests for OfferLifeCycleManager
+ */
+public class OfferLifeCycleManagerTest {
+ OfferLifecycleManager manager;
+
+ @Before
+ public void setUp() throws Exception {
+ NodeStore store = new NodeStore();
+ NodeIdProto nodeId = NodeIdProto.newBuilder().setHost("localhost").setPort(8000).build();
+ RMNode rmNode = new RMNodeImpl(new NodeIdPBImpl(nodeId), new MockRMContext(), "localhost", 8000, 8070, new NodeBase(),
+ new ResourcePBImpl(), "1.0");
+ SchedulerNode node = new FiCaSchedulerNode(rmNode, false);
+ store.add(node);
+ manager = new OfferLifecycleManager(store, new MyriadDriver(new MockSchedulerDriver()));
+ }
+
+ @Test
+ public void testAddOffers() throws Exception {
+ manager.addOffers(TestObjectFactory.getOffer("localhost", "slave-1", "mock-framework", "offer-1"));
+ assertNotNull(manager.getOfferFeed("localhost").poll());
+ }
+
+ @Test
+ public void testMarkAsConsumed() throws Exception {
+ Offer offer = TestObjectFactory.getOffer("localhost-1", "slave-2", "mock-framework", "consumed-offer-1");
+ manager.addOffers(offer);
+ manager.markAsConsumed(offer);
+ ConsumedOffer cOffers = manager.getConsumedOffer("localhost-1");
+ Offer cOffer = cOffers.getOffers().get(0);
+ assertEquals(offer, cOffer);
+ }
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-myriad/blob/4a6e50c4/myriad-scheduler/src/test/java/org/apache/myriad/scheduler/fgs/OfferUtilsTest.java
----------------------------------------------------------------------
diff --git a/myriad-scheduler/src/test/java/org/apache/myriad/scheduler/fgs/OfferUtilsTest.java b/myriad-scheduler/src/test/java/org/apache/myriad/scheduler/fgs/OfferUtilsTest.java
new file mode 100644
index 0000000..915ac0b
--- /dev/null
+++ b/myriad-scheduler/src/test/java/org/apache/myriad/scheduler/fgs/OfferUtilsTest.java
@@ -0,0 +1,74 @@
+package org.apache.myriad.scheduler.fgs;
+
+import java.util.List;
+
+import org.apache.mesos.Protos;
+import org.apache.mesos.Protos.FrameworkID;
+import org.apache.mesos.Protos.Offer;
+import org.apache.mesos.Protos.OfferID;
+import org.apache.mesos.Protos.Resource;
+import org.apache.mesos.Protos.SlaveID;
+import org.apache.mesos.Protos.Value;
+import org.apache.mesos.Protos.Value.Scalar;
+import org.junit.Before;
+import org.junit.Test;
+import static org.junit.Assert.assertEquals;
+
+import com.google.common.collect.Lists;
+
+/**
+ * Unit tests for OfferUtils
+ */
+public class OfferUtilsTest {
+
+ List<Offer> offers;
+
+ @Before
+ public void setUp() throws Exception {
+ offers = generateOffers(generateResources());
+ }
+
+ private List<Offer> generateOffers(List<Resource> resources) {
+ FrameworkID fidOne = Protos.FrameworkID.newBuilder().setValue("framework-1").build();
+ FrameworkID fidTwo = Protos.FrameworkID.newBuilder().setValue("framework-2").build();
+ FrameworkID fidThree = Protos.FrameworkID.newBuilder().setValue("framework-3").build();
+ FrameworkID fidFour = Protos.FrameworkID.newBuilder().setValue("framework-4").build();
+
+ OfferID oidOne = Protos.OfferID.newBuilder().setValue("offer-1").build();
+ OfferID oidTwo = Protos.OfferID.newBuilder().setValue("offer-2").build();
+ OfferID oidThree = Protos.OfferID.newBuilder().setValue("offer-3").build();
+ OfferID oidFour = Protos.OfferID.newBuilder().setValue("offer-4").build();
+
+ SlaveID sidOne = Protos.SlaveID.newBuilder().setValue("slave-1").build();
+ SlaveID sidTwo = Protos.SlaveID.newBuilder().setValue("slave-2").build();
+ SlaveID sidThree = Protos.SlaveID.newBuilder().setValue("slave-3").build();
+ SlaveID sidFour = Protos.SlaveID.newBuilder().setValue("slave-4").build();
+
+ Offer offerOne = Protos.Offer.newBuilder().setFrameworkId(fidOne).setHostname("10.0.0.1").setId(oidOne).setSlaveId(sidOne).
+ addResources(resources.get(0)).addResources(resources.get(1)).build();
+ Offer offerTwo = Protos.Offer.newBuilder().setFrameworkId(fidTwo).setHostname("10.0.0.2").setId(oidTwo).setSlaveId(sidTwo).
+ addResources(resources.get(2)).addResources(resources.get(3)).build();
+ Offer offerThree = Protos.Offer.newBuilder().setFrameworkId(fidThree).setHostname("10.0.0.3").setId(oidThree).setSlaveId(sidThree).
+ addResources(resources.get(0)).addResources(resources.get(3)).build();
+ Offer offerFour = Protos.Offer.newBuilder().setFrameworkId(fidFour).setHostname("10.0.0.4").setId(oidFour).setSlaveId(sidFour).
+ addResources(resources.get(2)).addResources(resources.get(1)).build();
+
+ return Lists.newArrayList(offerOne, offerTwo, offerThree, offerFour);
+ }
+
+ private List<Resource> generateResources() {
+ Resource rOne = Protos.Resource.newBuilder().setName("cpus").setType(Value.Type.SCALAR).setScalar(Scalar.newBuilder().setValue(0.5)).build();
+ Resource rTwo = Protos.Resource.newBuilder().setName("mem").setType(Value.Type.SCALAR).setScalar(Scalar.newBuilder().setValue(1.0)).build();
+ Resource rThree = Protos.Resource.newBuilder().setName("cpus").setType(Value.Type.SCALAR).setScalar(Scalar.newBuilder().setValue(1.0)).build();
+ Resource rFour = Protos.Resource.newBuilder().setName("mem").setType(Value.Type.SCALAR).setScalar(Scalar.newBuilder().setValue(2.0)).build();
+
+ return Lists.newArrayList(rOne, rTwo, rThree, rFour);
+ }
+
+ @Test
+ public void testgetYarnResourcesFromMesosOffers() throws Exception {
+ org.apache.hadoop.yarn.api.records.Resource resource = OfferUtils.getYarnResourcesFromMesosOffers(offers);
+ assertEquals(6.0, resource.getMemory(), 1.0);
+ assertEquals(3.0, resource.getVirtualCores(), 1.0);
+ }
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-myriad/blob/4a6e50c4/myriad-scheduler/src/test/java/org/apache/myriad/state/ClusterTest.java
----------------------------------------------------------------------
diff --git a/myriad-scheduler/src/test/java/org/apache/myriad/state/ClusterTest.java b/myriad-scheduler/src/test/java/org/apache/myriad/state/ClusterTest.java
new file mode 100644
index 0000000..69954b7
--- /dev/null
+++ b/myriad-scheduler/src/test/java/org/apache/myriad/state/ClusterTest.java
@@ -0,0 +1,62 @@
+package org.apache.myriad.state;
+
+import static org.junit.Assert.assertEquals;
+
+import org.apache.myriad.scheduler.ServiceResourceProfile;
+import org.apache.myriad.scheduler.constraints.LikeConstraint;
+import org.junit.Before;
+import org.junit.Test;
+
+/**
+ * Unit tests for Cluster
+ */
+public class ClusterTest {
+ Cluster cluster;
+ NodeTask task1, task2, task3;
+
+ @Before
+ public void setUp() throws Exception {
+ cluster = new Cluster();
+ cluster.setClusterName("test-cluster");
+ cluster.setMinQuota(5.0);
+ cluster.setResourceManagerHost("localhost");
+ cluster.setResourceManagerPort("8192");
+
+ task1 = new NodeTask(new ServiceResourceProfile("profile1", 0.1, 1024.0), new LikeConstraint("hostname1", "host-[0-9]*.example1.com"));
+ task2 = new NodeTask(new ServiceResourceProfile("profile2", 0.2, 1024.0), new LikeConstraint("hostname2", "host-[0-9]*.example2.com"));
+ task3 = new NodeTask(new ServiceResourceProfile("profile3", 0.3, 1024.0), new LikeConstraint("hostname3", "host-[0-9]*.example3.com"));
+ }
+
+ private void resetCluster() throws Exception {
+ cluster.removeAllNodes();
+ }
+
+ @Test
+ public void testCoreAttributes() throws Exception {
+ assertEquals("test-cluster", cluster.getClusterName());
+ assertEquals(5.0, cluster.getMinQuota(), 0.0001);
+ assertEquals("localhost", cluster.getResourceManagerHost());
+ assertEquals("8192", cluster.getResourceManagerPort());
+ }
+
+ @Test
+ public void testAddNode() throws Exception {
+ resetCluster();
+ cluster.addNode(task1);
+ assertEquals(1, cluster.getNodes().size());
+ cluster.addNode(task2);
+ assertEquals(2, cluster.getNodes().size());
+ }
+
+ @Test
+ public void testRemoveNode() throws Exception {
+ resetCluster();
+ cluster.addNode(task1);
+ cluster.addNode(task2);
+ cluster.addNode(task3);
+ cluster.removeNode(task1);
+ assertEquals(2, cluster.getNodes().size());
+ cluster.removeNode(task2);
+ assertEquals(1, cluster.getNodes().size());
+ }
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-myriad/blob/4a6e50c4/myriad-scheduler/src/test/java/org/apache/myriad/state/MockDispatcher.java
----------------------------------------------------------------------
diff --git a/myriad-scheduler/src/test/java/org/apache/myriad/state/MockDispatcher.java b/myriad-scheduler/src/test/java/org/apache/myriad/state/MockDispatcher.java
new file mode 100644
index 0000000..bc06441
--- /dev/null
+++ b/myriad-scheduler/src/test/java/org/apache/myriad/state/MockDispatcher.java
@@ -0,0 +1,32 @@
+package org.apache.myriad.state;
+
+import org.apache.hadoop.yarn.event.Dispatcher;
+import org.apache.hadoop.yarn.event.EventHandler;
+import org.apache.hadoop.yarn.server.resourcemanager.rmapp.RMAppEvent;
+
+/**
+ * Mock Dispatcher implementation for unit tests
+ */
+public class MockDispatcher implements Dispatcher {
+ EventHandler<RMAppEvent> handler = new MockEventHandler();
+
+ /**
+ * Mock EventHandler implementation for unit tests
+ */
+ public static class MockEventHandler implements EventHandler<RMAppEvent> {
+ @Override
+ public void handle(RMAppEvent event) {
+ //noop
+ }
+ }
+
+ @Override
+ public EventHandler<RMAppEvent> getEventHandler() {
+ return handler;
+ }
+
+ @Override
+ public void register(Class<? extends Enum> eventType, EventHandler handler) {
+ //noop
+ }
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-myriad/blob/4a6e50c4/myriad-scheduler/src/test/java/org/apache/myriad/state/MockFuture.java
----------------------------------------------------------------------
diff --git a/myriad-scheduler/src/test/java/org/apache/myriad/state/MockFuture.java b/myriad-scheduler/src/test/java/org/apache/myriad/state/MockFuture.java
new file mode 100644
index 0000000..fa4628f
--- /dev/null
+++ b/myriad-scheduler/src/test/java/org/apache/myriad/state/MockFuture.java
@@ -0,0 +1,44 @@
+package org.apache.myriad.state;
+
+import java.util.concurrent.ExecutionException;
+import java.util.concurrent.Future;
+import java.util.concurrent.TimeUnit;
+import java.util.concurrent.TimeoutException;
+
+import org.apache.mesos.state.Variable;
+
+/**
+ * Stubbed-out implementation for unit tests
+ */
+public class MockFuture implements Future<Variable> {
+ private Variable value;
+
+ public MockFuture(Variable value) {
+ this.value = value;
+ }
+ @Override
+ public boolean cancel(boolean mayInterruptIfRunning) {
+ return false;
+ }
+
+ @Override
+ public boolean isCancelled() {
+ return false;
+ }
+
+ @Override
+ public boolean isDone() {
+ return false;
+ }
+
+ @Override
+ public Variable get() throws InterruptedException, ExecutionException {
+ return value;
+ }
+
+ @Override
+ public Variable get(long timeout, TimeUnit unit)
+ throws InterruptedException, ExecutionException, TimeoutException {
+ return value;
+ }
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-myriad/blob/4a6e50c4/myriad-scheduler/src/test/java/org/apache/myriad/state/MockRMApp.java
----------------------------------------------------------------------
diff --git a/myriad-scheduler/src/test/java/org/apache/myriad/state/MockRMApp.java b/myriad-scheduler/src/test/java/org/apache/myriad/state/MockRMApp.java
new file mode 100644
index 0000000..822c08a
--- /dev/null
+++ b/myriad-scheduler/src/test/java/org/apache/myriad/state/MockRMApp.java
@@ -0,0 +1,202 @@
+package org.apache.myriad.state;
+
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Set;
+
+import org.apache.hadoop.yarn.api.records.ApplicationAttemptId;
+import org.apache.hadoop.yarn.api.records.ApplicationId;
+import org.apache.hadoop.yarn.api.records.ApplicationReport;
+import org.apache.hadoop.yarn.api.records.ApplicationSubmissionContext;
+import org.apache.hadoop.yarn.api.records.FinalApplicationStatus;
+import org.apache.hadoop.yarn.api.records.NodeId;
+import org.apache.hadoop.yarn.api.records.Priority;
+import org.apache.hadoop.yarn.api.records.ReservationId;
+import org.apache.hadoop.yarn.api.records.ResourceRequest;
+import org.apache.hadoop.yarn.api.records.YarnApplicationState;
+import org.apache.hadoop.yarn.server.resourcemanager.rmapp.RMApp;
+import org.apache.hadoop.yarn.server.resourcemanager.rmapp.RMAppEvent;
+import org.apache.hadoop.yarn.server.resourcemanager.rmapp.RMAppMetrics;
+import org.apache.hadoop.yarn.server.resourcemanager.rmapp.RMAppState;
+import org.apache.hadoop.yarn.server.resourcemanager.rmapp.attempt.RMAppAttempt;
+import org.apache.hadoop.yarn.server.resourcemanager.rmnode.RMNode;
+
+/**
+ * Mock RMApp for unit tests
+ */
+public class MockRMApp implements RMApp {
+ static final int DT = 1000000;
+ String user = "yarn";
+ String name = "mock-app";
+ String queue = "mock-queue";
+ long start = System.currentTimeMillis();
+ long submit = start - (5 * DT);
+ long finish = start + (15 * DT);
+ RMAppState state = RMAppState.NEW;
+ String applicationType = "mock";
+ ApplicationId id;
+ ApplicationSubmissionContext context;
+ String tUrl = "localhost:8080";
+ String oUrl = "localhost:8081";
+ int maxAppAttempts = 5;
+
+ Map<ApplicationAttemptId, RMAppAttempt> attempts = new HashMap<ApplicationAttemptId, RMAppAttempt>();
+
+ public MockRMApp(int newId, long time, RMAppState state) {
+ finish = time;
+ id = ApplicationId.newInstance(System.currentTimeMillis(), newId);
+ context = ApplicationSubmissionContext.newInstance(id, name, queue, Priority.newInstance(0), null, false, false, newId, null, applicationType);
+ this.state = state;
+ }
+
+ @Override
+ public void handle(RMAppEvent event) {
+
+ }
+
+ @Override
+ public ApplicationId getApplicationId() {
+ return id;
+ }
+
+ @Override
+ public ApplicationSubmissionContext getApplicationSubmissionContext() {
+ return context;
+ }
+
+ @Override
+ public RMAppState getState() {
+ return state;
+ }
+
+ @Override
+ public String getUser() {
+ return user;
+ }
+
+ @Override
+ public float getProgress() {
+ return 0;
+ }
+
+ @Override
+ public RMAppAttempt getRMAppAttempt(ApplicationAttemptId appAttemptId) {
+ return null;
+ }
+
+ @Override
+ public String getQueue() {
+ return queue;
+ }
+
+ @Override
+ public void setQueue(String queue) {
+ this.queue = queue;
+ }
+
+ @Override
+ public String getName() {
+ return name;
+ }
+
+ @Override
+ public RMAppAttempt getCurrentAppAttempt() {
+ return null;
+ }
+
+ @Override
+ public Map<ApplicationAttemptId, RMAppAttempt> getAppAttempts() {
+ return attempts;
+ }
+
+ @Override
+ public ApplicationReport createAndGetApplicationReport(String clientUserName, boolean allowAccess) {
+ return null;
+ }
+
+ @Override
+ public int pullRMNodeUpdates(Collection<RMNode> updatedNodes) {
+ return 0;
+ }
+
+ @Override
+ public long getFinishTime() {
+ return finish;
+ }
+
+ @Override
+ public long getStartTime() {
+ return start;
+ }
+
+ @Override
+ public long getSubmitTime() {
+ return submit;
+ }
+
+ @Override
+ public String getTrackingUrl() {
+ return this.tUrl;
+ }
+
+ @Override
+ public String getOriginalTrackingUrl() {
+ return this.oUrl;
+ }
+
+ @Override
+ public StringBuilder getDiagnostics() {
+ return null;
+ }
+
+ @Override
+ public FinalApplicationStatus getFinalApplicationStatus() {
+ return null;
+ }
+
+ @Override
+ public int getMaxAppAttempts() {
+ return this.maxAppAttempts;
+ }
+
+ @Override
+ public String getApplicationType() {
+ return this.applicationType;
+ }
+
+ @Override
+ public Set<String> getApplicationTags() {
+ return null;
+ }
+
+ @Override
+ public boolean isAppFinalStateStored() {
+ return false;
+ }
+
+ @Override
+ public Set<NodeId> getRanNodes() {
+ return null;
+ }
+
+ @Override
+ public YarnApplicationState createApplicationState() {
+ return null;
+ }
+
+ @Override
+ public RMAppMetrics getRMAppMetrics() {
+ return null;
+ }
+
+ @Override
+ public ReservationId getReservationId() {
+ return null;
+ }
+
+ @Override
+ public ResourceRequest getAMResourceRequest() {
+ return null;
+ }
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-myriad/blob/4a6e50c4/myriad-scheduler/src/test/java/org/apache/myriad/state/MockRMContext.java
----------------------------------------------------------------------
diff --git a/myriad-scheduler/src/test/java/org/apache/myriad/state/MockRMContext.java b/myriad-scheduler/src/test/java/org/apache/myriad/state/MockRMContext.java
new file mode 100644
index 0000000..42fa045
--- /dev/null
+++ b/myriad-scheduler/src/test/java/org/apache/myriad/state/MockRMContext.java
@@ -0,0 +1,339 @@
+package org.apache.myriad.state;
+
+import java.nio.ByteBuffer;
+import java.util.concurrent.ConcurrentMap;
+
+import org.apache.hadoop.conf.Configuration;
+import org.apache.hadoop.ha.HAServiceProtocol;
+import org.apache.hadoop.ha.HAServiceProtocol.HAServiceState;
+import org.apache.hadoop.yarn.api.records.ApplicationId;
+import org.apache.hadoop.yarn.api.records.NodeId;
+import org.apache.hadoop.yarn.conf.ConfigurationProvider;
+import org.apache.hadoop.yarn.event.Dispatcher;
+import org.apache.hadoop.yarn.server.resourcemanager.AdminService;
+import org.apache.hadoop.yarn.server.resourcemanager.ApplicationMasterService;
+import org.apache.hadoop.yarn.server.resourcemanager.ClientRMService;
+import org.apache.hadoop.yarn.server.resourcemanager.NodesListManager;
+import org.apache.hadoop.yarn.server.resourcemanager.RMActiveServiceContext;
+import org.apache.hadoop.yarn.server.resourcemanager.RMContext;
+import org.apache.hadoop.yarn.server.resourcemanager.ResourceTrackerService;
+import org.apache.hadoop.yarn.server.resourcemanager.ahs.RMApplicationHistoryWriter;
+import org.apache.hadoop.yarn.server.resourcemanager.metrics.SystemMetricsPublisher;
+import org.apache.hadoop.yarn.server.resourcemanager.nodelabels.RMNodeLabelsManager;
+import org.apache.hadoop.yarn.server.resourcemanager.recovery.RMStateStore;
+import org.apache.hadoop.yarn.server.resourcemanager.reservation.ReservationSystem;
+import org.apache.hadoop.yarn.server.resourcemanager.rmapp.RMApp;
+import org.apache.hadoop.yarn.server.resourcemanager.rmapp.attempt.AMLivelinessMonitor;
+import org.apache.hadoop.yarn.server.resourcemanager.rmcontainer.ContainerAllocationExpirer;
+import org.apache.hadoop.yarn.server.resourcemanager.rmnode.RMNode;
+import org.apache.hadoop.yarn.server.resourcemanager.scheduler.ResourceScheduler;
+import org.apache.hadoop.yarn.server.resourcemanager.security.AMRMTokenSecretManager;
+import org.apache.hadoop.yarn.server.resourcemanager.security.ClientToAMTokenSecretManagerInRM;
+import org.apache.hadoop.yarn.server.resourcemanager.security.DelegationTokenRenewer;
+import org.apache.hadoop.yarn.server.resourcemanager.security.NMTokenSecretManagerInRM;
+import org.apache.hadoop.yarn.server.resourcemanager.security.RMContainerTokenSecretManager;
+import org.apache.hadoop.yarn.server.resourcemanager.security.RMDelegationTokenSecretManager;
+
+/**
+ * Mock implementation of RMContext for the purposes of JUnit tests
+ */
+public class MockRMContext implements RMContext {
+ Dispatcher dispatcher;
+ boolean haEnabled = false;
+ RMStateStore stateStore;
+ AMLivelinessMonitor amLivelinessMonitor;
+ AMLivelinessMonitor amFinishingMonitor;
+ RMActiveServiceContext activeServiceContext;
+ HAServiceState haServiceState = HAServiceProtocol.HAServiceState.INITIALIZING;
+ Configuration yarnConfiguration;
+ RMNodeLabelsManager mgr;
+ ResourceScheduler resourceScheduler;
+ boolean workPreservingRecoveryEnabled;
+ NMTokenSecretManagerInRM nmTokenSecretManager;
+ RMApplicationHistoryWriter rmApplicationHistoryWriter = new RMApplicationHistoryWriter();
+ RMDelegationTokenSecretManager delegationTokenSecretManager;
+ RMContainerTokenSecretManager containerTokenSecretManager;
+ NodesListManager nodesListManager;
+ ContainerAllocationExpirer containerAllocationExpirer;
+ AMRMTokenSecretManager tokenSecretManager;
+ DelegationTokenRenewer delegationTokenRenewer;
+ ClientRMService clientRMService;
+ ApplicationMasterService applicationMasterService;
+ ResourceTrackerService resourceTrackerService;
+ SystemMetricsPublisher systemMetricsPublisher;
+ ConfigurationProvider configurationProvider;
+ AdminService adminService;
+
+ public void setApplicationMasterService(ApplicationMasterService applicationMasterService) {
+ this.applicationMasterService = applicationMasterService;
+ }
+
+ public RMActiveServiceContext getActiveServiceContext() {
+ return activeServiceContext;
+ }
+
+ public void setActiveServiceContext(RMActiveServiceContext activeServiceContext) {
+ this.activeServiceContext = activeServiceContext;
+ }
+
+ public void setResourceTrackerService(ResourceTrackerService resourceTrackerService) {
+ this.resourceTrackerService = resourceTrackerService;
+ }
+
+ public void setContainerTokenSecretManager(RMContainerTokenSecretManager containerTokenSecretManager) {
+ this.containerTokenSecretManager = containerTokenSecretManager;
+ }
+
+ public void setDelegationTokenRenewer(DelegationTokenRenewer delegationTokenRenewer) {
+ this.delegationTokenRenewer = delegationTokenRenewer;
+ }
+
+ public void setAdminService(AdminService adminService) {
+ this.adminService = adminService;
+ }
+
+ public void setConfigurationProvider(ConfigurationProvider configurationProvider) {
+ this.configurationProvider = configurationProvider;
+ }
+
+ public void setDelegationTokenSecretManager(RMDelegationTokenSecretManager delegationTokenSecretManager) {
+ this.delegationTokenSecretManager = delegationTokenSecretManager;
+ }
+
+ public void setTokenSecretManager(AMRMTokenSecretManager tokenSecretManager) {
+ this.tokenSecretManager = tokenSecretManager;
+ }
+
+ public void setContainerAllocationExpirer(ContainerAllocationExpirer containerAllocationExpirer) {
+ this.containerAllocationExpirer = containerAllocationExpirer;
+ }
+
+ public void setNodesListManager(NodesListManager nodesListManager) {
+ this.nodesListManager = nodesListManager;
+ }
+
+ public void setNmTokenSecretManager(NMTokenSecretManagerInRM nmTokenSecretManager) {
+ this.nmTokenSecretManager = nmTokenSecretManager;
+ }
+
+ public void setWorkPreservingRecoveryEnabled(boolean workPreservingRecoveryEnabled) {
+ this.workPreservingRecoveryEnabled = workPreservingRecoveryEnabled;
+ }
+
+ public void setResourceScheduler(ResourceScheduler resourceScheduler) {
+ this.resourceScheduler = resourceScheduler;
+ }
+
+ public void setMgr(RMNodeLabelsManager mgr) {
+ this.mgr = mgr;
+ }
+
+ public void setYarnConfiguration(Configuration yarnConfiguration) {
+ this.yarnConfiguration = yarnConfiguration;
+ }
+
+ public void setHaEnabled(boolean haEnabled) {
+ this.haEnabled = haEnabled;
+ }
+
+ public void setAmLivelinessMonitor(AMLivelinessMonitor amLivelinessMonitor) {
+ this.amLivelinessMonitor = amLivelinessMonitor;
+ }
+
+ public void setAmFinishingMonitor(AMLivelinessMonitor amFinishingMonitor) {
+ this.amFinishingMonitor = amFinishingMonitor;
+ }
+
+ public void setDispatcher(Dispatcher dispatcher) {
+ this.dispatcher = dispatcher;
+ }
+
+ public void setStateStore(RMStateStore stateStore) {
+ this.stateStore = stateStore;
+ }
+
+ @Override
+ public Dispatcher getDispatcher() {
+ return dispatcher;
+ }
+
+ @Override
+ public boolean isHAEnabled() {
+ return haEnabled;
+ }
+
+ @Override
+ public HAServiceState getHAServiceState() {
+ return haServiceState;
+ }
+
+ @Override
+ public RMStateStore getStateStore() {
+ return stateStore;
+ }
+
+ @Override
+ public ConcurrentMap<ApplicationId, RMApp> getRMApps() {
+ return null;
+ }
+
+ @Override
+ public ConcurrentMap<ApplicationId, ByteBuffer> getSystemCredentialsForApps() {
+ return null;
+ }
+
+ @Override
+ public ConcurrentMap<String, RMNode> getInactiveRMNodes() {
+ return null;
+ }
+
+ @Override
+ public ConcurrentMap<NodeId, RMNode> getRMNodes() {
+ return null;
+ }
+
+ @Override
+ public AMLivelinessMonitor getAMLivelinessMonitor() {
+ return amLivelinessMonitor;
+ }
+
+ @Override
+ public AMLivelinessMonitor getAMFinishingMonitor() {
+ return amFinishingMonitor;
+ }
+
+ @Override
+ public ContainerAllocationExpirer getContainerAllocationExpirer() {
+ return containerAllocationExpirer;
+ }
+
+ @Override
+ public DelegationTokenRenewer getDelegationTokenRenewer() {
+ return delegationTokenRenewer;
+ }
+
+ @Override
+ public AMRMTokenSecretManager getAMRMTokenSecretManager() {
+ return tokenSecretManager;
+ }
+
+ @Override
+ public RMContainerTokenSecretManager getContainerTokenSecretManager() {
+ return containerTokenSecretManager;
+ }
+
+ @Override
+ public NMTokenSecretManagerInRM getNMTokenSecretManager() {
+ return nmTokenSecretManager;
+ }
+
+ @Override
+ public ResourceScheduler getScheduler() {
+ return resourceScheduler;
+ }
+
+ @Override
+ public NodesListManager getNodesListManager() {
+ return nodesListManager;
+ }
+
+ @Override
+ public ClientToAMTokenSecretManagerInRM getClientToAMTokenSecretManager() {
+ return null;
+ }
+
+ @Override
+ public AdminService getRMAdminService() {
+ return adminService;
+ }
+
+ @Override
+ public ClientRMService getClientRMService() {
+ return clientRMService;
+ }
+
+ @Override
+ public ApplicationMasterService getApplicationMasterService() {
+ return applicationMasterService;
+ }
+
+ @Override
+ public ResourceTrackerService getResourceTrackerService() {
+ return resourceTrackerService;
+ }
+
+ @Override
+ public void setClientRMService(ClientRMService clientRMService) {
+ this.clientRMService = clientRMService;
+ }
+
+ @Override
+ public RMDelegationTokenSecretManager getRMDelegationTokenSecretManager() {
+ return delegationTokenSecretManager;
+ }
+
+ @Override
+ public void setRMDelegationTokenSecretManager(RMDelegationTokenSecretManager delegationTokenSecretManager) {
+ this.delegationTokenSecretManager = delegationTokenSecretManager;
+ }
+
+ @Override
+ public RMApplicationHistoryWriter getRMApplicationHistoryWriter() {
+ return rmApplicationHistoryWriter;
+ }
+
+ @Override
+ public void setRMApplicationHistoryWriter(RMApplicationHistoryWriter rmApplicationHistoryWriter) {
+ this.rmApplicationHistoryWriter = rmApplicationHistoryWriter;
+ }
+
+ @Override
+ public void setSystemMetricsPublisher(SystemMetricsPublisher systemMetricsPublisher) {
+ this.systemMetricsPublisher = systemMetricsPublisher;
+ }
+
+ @Override
+ public SystemMetricsPublisher getSystemMetricsPublisher() {
+ return systemMetricsPublisher;
+ }
+
+ @Override
+ public ConfigurationProvider getConfigurationProvider() {
+ return configurationProvider;
+ }
+
+ @Override
+ public boolean isWorkPreservingRecoveryEnabled() {
+ return workPreservingRecoveryEnabled;
+ }
+
+ @Override
+ public RMNodeLabelsManager getNodeLabelManager() {
+ return mgr;
+ }
+
+ @Override
+ public void setNodeLabelManager(RMNodeLabelsManager mgr) {
+ this.mgr = mgr;
+ }
+
+ @Override
+ public long getEpoch() {
+ return 0;
+ }
+
+ @Override
+ public ReservationSystem getReservationSystem() {
+ return null;
+ }
+
+ @Override
+ public boolean isSchedulerReadyForAllocatingContainers() {
+ return false;
+ }
+
+ @Override
+ public Configuration getYarnConfiguration() {
+ return this.yarnConfiguration;
+ }
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-myriad/blob/4a6e50c4/myriad-scheduler/src/test/java/org/apache/myriad/state/MockState.java
----------------------------------------------------------------------
diff --git a/myriad-scheduler/src/test/java/org/apache/myriad/state/MockState.java b/myriad-scheduler/src/test/java/org/apache/myriad/state/MockState.java
new file mode 100644
index 0000000..ba29ff8
--- /dev/null
+++ b/myriad-scheduler/src/test/java/org/apache/myriad/state/MockState.java
@@ -0,0 +1,45 @@
+package org.apache.myriad.state;
+
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.Map;
+import java.util.concurrent.Future;
+
+import org.apache.mesos.state.State;
+import org.apache.mesos.state.Variable;
+
+/**
+ * Stubbed-out implementation for unit tests
+ */
+public class MockState implements State {
+ private Map<String, Future<Variable>> values = new HashMap<String, Future<Variable>>();
+
+ @Override
+ public Future<Variable> fetch(String name) {
+ return values.get(name);
+ }
+
+ @Override
+ public Future<Variable> store(Variable variable) {
+ MockFuture future = new MockFuture(variable);
+
+ if (!(variable instanceof MockVariable)) {
+ throw new IllegalArgumentException("The Variable must be a MockVariable");
+ }
+
+ MockVariable mVar = (MockVariable) variable;
+ values.put(mVar.name(), future);
+
+ return future;
+ }
+
+ @Override
+ public Future<Boolean> expunge(Variable variable) {
+ return null;
+ }
+
+ @Override
+ public Future<Iterator<String>> names() {
+ return null;
+ }
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-myriad/blob/4a6e50c4/myriad-scheduler/src/test/java/org/apache/myriad/state/MockVariable.java
----------------------------------------------------------------------
diff --git a/myriad-scheduler/src/test/java/org/apache/myriad/state/MockVariable.java b/myriad-scheduler/src/test/java/org/apache/myriad/state/MockVariable.java
new file mode 100644
index 0000000..06655e3
--- /dev/null
+++ b/myriad-scheduler/src/test/java/org/apache/myriad/state/MockVariable.java
@@ -0,0 +1,35 @@
+package org.apache.myriad.state;
+
+import org.apache.mesos.state.Variable;
+
+/**
+ * Simplified implementation for unit tests
+ */
+public class MockVariable extends Variable {
+ private byte[] value;
+ private String name;
+ public MockVariable(){}
+
+ public MockVariable setValue(byte[] value) {
+ this.value = value.clone();
+ return this;
+ }
+
+ public MockVariable setName(String name) {
+ this.name = name;
+ return this;
+ }
+
+ @Override
+ public byte[] value() {
+ return this.value.clone();
+ }
+
+ public String name() {
+ return this.name;
+ }
+ @Override
+ public Variable mutate(byte[] value) {
+ return new MockVariable();
+ }
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-myriad/blob/4a6e50c4/myriad-scheduler/src/test/java/org/apache/myriad/state/MyriadStateTest.java
----------------------------------------------------------------------
diff --git a/myriad-scheduler/src/test/java/org/apache/myriad/state/MyriadStateTest.java b/myriad-scheduler/src/test/java/org/apache/myriad/state/MyriadStateTest.java
new file mode 100644
index 0000000..e5a378f
--- /dev/null
+++ b/myriad-scheduler/src/test/java/org/apache/myriad/state/MyriadStateTest.java
@@ -0,0 +1,21 @@
+package org.apache.myriad.state;
+
+import org.apache.mesos.Protos.FrameworkID;
+import org.junit.Test;
+import static org.junit.Assert.assertEquals;
+
+/**
+ * Unit test for MyriadState
+ */
+public class MyriadStateTest {
+ @Test
+ public void testSetAndGetFrameworkITask() throws Exception {
+ MockState mState = new MockState();
+ mState.store(new MockVariable().setName("frameworkId").setValue(FrameworkID.newBuilder().setValue("mock-framework").build().toByteArray()));
+
+ MyriadState state = new MyriadState(mState);
+ state.setFrameworkId(FrameworkID.newBuilder().setValue("mock-framework").build());
+
+ assertEquals("mock-framework", state.getFrameworkID().getValue());
+ }
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-myriad/blob/4a6e50c4/myriad-scheduler/src/test/java/org/apache/myriad/state/NodeTaskTest.java
----------------------------------------------------------------------
diff --git a/myriad-scheduler/src/test/java/org/apache/myriad/state/NodeTaskTest.java b/myriad-scheduler/src/test/java/org/apache/myriad/state/NodeTaskTest.java
new file mode 100644
index 0000000..d3cf2fe
--- /dev/null
+++ b/myriad-scheduler/src/test/java/org/apache/myriad/state/NodeTaskTest.java
@@ -0,0 +1,40 @@
+package org.apache.myriad.state;
+
+import org.apache.myriad.scheduler.ServiceResourceProfile;
+import org.apache.myriad.scheduler.constraints.LikeConstraint;
+import org.junit.Assert;
+import org.junit.Before;
+import org.junit.Test;
+
+/**
+ * Unit test cases for NodeTask
+ */
+public class NodeTaskTest {
+ NodeTask task;
+
+ @Before
+ public void setUp() throws Exception {
+ task = new NodeTask(new ServiceResourceProfile("profile", 0.1, 1024.0), new LikeConstraint("hostname", "host-[0-9]*.example.com"));
+
+ task.setHostname("localhost");
+ task.setTaskPrefix("prefix");
+ task.setProfile(new ServiceResourceProfile("ServiceResourceProfile", 0.1, 1024.0, 0.1, 512.0));
+ }
+
+ @Test
+ public void testCoreState() throws Exception {
+ Assert.assertEquals("prefix", task.getTaskPrefix());
+ Assert.assertEquals("localhost", task.getHostname());
+ }
+
+ @Test
+ public void testConstraintState() throws Exception {
+ Assert.assertEquals("LIKE", task.getConstraint().getType().toString());
+ }
+
+ @Test
+ public void testServiceResourceProfileState() throws Exception {
+ Assert.assertEquals(new Double(1024.0), task.getProfile().getMemory());
+ Assert.assertEquals(new Double(0.1), task.getProfile().getCpus());
+ }
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-myriad/blob/4a6e50c4/myriad-scheduler/src/test/java/org/apache/myriad/state/SchedulerStateTest.java
----------------------------------------------------------------------
diff --git a/myriad-scheduler/src/test/java/org/apache/myriad/state/SchedulerStateTest.java b/myriad-scheduler/src/test/java/org/apache/myriad/state/SchedulerStateTest.java
new file mode 100644
index 0000000..a3cdf4f
--- /dev/null
+++ b/myriad-scheduler/src/test/java/org/apache/myriad/state/SchedulerStateTest.java
@@ -0,0 +1,65 @@
+package org.apache.myriad.state;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertNull;
+
+import java.util.Set;
+
+import org.apache.hadoop.conf.Configuration;
+import org.apache.hadoop.yarn.server.resourcemanager.recovery.MyriadFileSystemRMStateStore;
+import org.apache.mesos.Protos.FrameworkID;
+import org.apache.mesos.Protos.TaskID;
+import org.apache.myriad.TestObjectFactory;
+import org.apache.myriad.scheduler.ServiceResourceProfile;
+import org.apache.myriad.scheduler.constraints.LikeConstraint;
+import org.junit.Before;
+import org.junit.Test;
+
+import com.google.common.collect.Sets;
+
+/**
+ * Unit tests for SchedulerState
+ */
+public class SchedulerStateTest {
+ SchedulerState state;
+
+ @Before
+ public void setUp() throws Exception {
+ MyriadFileSystemRMStateStore store = TestObjectFactory.getStateStore(getConfiguration());
+ state = new SchedulerState(store);
+ }
+
+ @Test
+ public void testSetFrameworkID() throws Exception {
+ state.setFrameworkId(FrameworkID.newBuilder().setValue("mock-framework").build());
+ assertEquals("mock-framework", state.getFrameworkID().get().getValue());
+ }
+
+ @Test
+ public void testAddAndRemoveTask() throws Exception {
+ NodeTask task1 = new NodeTask(new ServiceResourceProfile("profile1", 0.1, 1024.0), new LikeConstraint("hostname", "host-[0-9]*.example.com"));
+ NodeTask task2 = new NodeTask(new ServiceResourceProfile("profile2", 0.1, 1024.0), new LikeConstraint("hostname", "host-[0-9]*.example.com"));
+ TaskID id1 = TaskID.newBuilder().setValue("mock-task-1").build();
+ TaskID id2 = TaskID.newBuilder().setValue("mock-task-2").build();
+
+ Set<TaskID> taskIds = Sets.newHashSet(id1, id2);
+ state.addTask(id1, task1);
+ assertNotNull(state.getTask(id1));
+ state.addTask(id2, task2);
+ assertNotNull(state.getTask(id2));
+ assertEquals(2, state.getTasks(taskIds).size());
+ state.removeTask(id1);
+ assertEquals(1, state.getTasks(taskIds).size());
+ assertNull(state.getTask(id1));
+ state.removeTask(id2);
+ assertEquals(0, state.getTasks(taskIds).size());
+ assertNull(state.getTask(id2));
+ }
+
+ private Configuration getConfiguration() {
+ Configuration conf = new Configuration();
+ conf.set("yarn.resourcemanager.fs.state-store.uri", "file:///tmp/");
+ return conf;
+ }
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-myriad/blob/4a6e50c4/myriad-scheduler/src/test/java/org/apache/myriad/state/utils/ByteBufferSupportTest.java
----------------------------------------------------------------------
diff --git a/myriad-scheduler/src/test/java/org/apache/myriad/state/utils/ByteBufferSupportTest.java b/myriad-scheduler/src/test/java/org/apache/myriad/state/utils/ByteBufferSupportTest.java
new file mode 100644
index 0000000..6794ec2
--- /dev/null
+++ b/myriad-scheduler/src/test/java/org/apache/myriad/state/utils/ByteBufferSupportTest.java
@@ -0,0 +1,184 @@
+package org.apache.myriad.state.utils;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
+
+import java.io.ByteArrayOutputStream;
+import java.nio.ByteBuffer;
+import java.util.List;
+
+import org.apache.commons.lang3.ArrayUtils;
+import org.apache.mesos.Protos;
+import org.apache.mesos.Protos.CommandInfo;
+import org.apache.mesos.Protos.ExecutorID;
+import org.apache.mesos.Protos.ExecutorInfo;
+import org.apache.mesos.Protos.FrameworkID;
+import org.apache.myriad.scheduler.ServiceResourceProfile;
+import org.apache.myriad.scheduler.constraints.LikeConstraint;
+import org.apache.myriad.state.NodeTask;
+import org.junit.Before;
+import org.junit.Test;
+
+import com.google.common.collect.Lists;
+
+/**
+ * Unit tests for ByteBufferSupport class
+ *
+ */
+public class ByteBufferSupportTest {
+
+ private static final byte[] BYTE_ARRAY = getByteArray("e04fd020ea3a6910a2d808002b30309d");
+
+ private NodeTask task;
+
+ @Before
+ public void setUp() throws Exception {
+ task = new NodeTask(new ServiceResourceProfile("profile", 0.1, 1024.0), new LikeConstraint("hostname", "host-[0-9]*.example.com"));
+ task.setHostname("localhost");
+ task.setTaskPrefix("prefix");
+ task.setExecutorInfo(getExecutorInfo());
+ }
+
+ private ExecutorInfo getExecutorInfo() {
+ FrameworkID id = Protos.FrameworkID.newBuilder().setValue("framework1").build();
+ ExecutorID eid = Protos.ExecutorID.newBuilder().setValue("executor1").build();
+ CommandInfo cm = Protos.CommandInfo.newBuilder().setValue("command").build();
+ return ExecutorInfo.newBuilder().setFrameworkId(id).setExecutorId(eid).setCommand(cm).build();
+ }
+
+ private ByteBuffer getByteBuffer(byte[] bytes) {
+ ByteBuffer bb = ByteBuffer.allocate(bytes.length);
+ bb.put(bytes);
+ bb.rewind();
+ return bb;
+ }
+
+ private static byte[] getByteArray(String s) {
+ int len = s.length();
+ byte[] data = new byte[len / 2];
+ for (int i = 0; i < len; i += 2) {
+ data[i / 2] = (byte) ((Character.digit(s.charAt(i), 16) << 4)
+ + Character.digit(s.charAt(i + 1), 16));
+ }
+ return data;
+ }
+
+ @Test
+ public void testGetBytes() throws Exception {
+ ByteBuffer bb = getByteBuffer(BYTE_ARRAY);
+
+ byte[] bytes = ByteBufferSupport.getBytes(bb, bb.capacity());
+
+ assertEquals(BYTE_ARRAY.length, bytes.length);
+
+ for (int i = 0, j = bytes.length; i < j; i++) {
+ assertEquals(bytes[i], BYTE_ARRAY[i]);
+ }
+ }
+
+ @Test
+ public void testFillBuffer() throws Exception {
+ ByteBuffer bb = ByteBufferSupport.fillBuffer(BYTE_ARRAY);
+ ByteBuffer bbCompare = getByteBuffer(BYTE_ARRAY);
+
+ assertEquals(bb, bbCompare);
+ }
+
+ @Test
+ public void testNonEmptyAddByteBuffer() throws Exception {
+ ByteBuffer bb = getByteBuffer(BYTE_ARRAY);
+ ByteArrayOutputStream stream = new ByteArrayOutputStream();
+
+ ByteBufferSupport.addByteBuffer(bb, stream);
+ assertEquals(20, stream.size());
+ ByteBufferSupport.addByteBuffer(bb, stream);
+ assertEquals(40, stream.size());
+ }
+
+ @Test
+ public void testEmptyAddByteBuffer() throws Exception {
+ ByteArrayOutputStream stream = new ByteArrayOutputStream();
+ ByteBuffer bb = getByteBuffer(ArrayUtils.EMPTY_BYTE_ARRAY);
+ ByteBufferSupport.addByteBuffer(bb, stream);
+ assertEquals(0, stream.size());
+ }
+
+ @Test
+ public void testNullAddByteBuffer() throws Exception {
+ ByteArrayOutputStream stream = new ByteArrayOutputStream();
+
+ ByteBufferSupport.addByteBuffer(null, stream);
+ assertEquals(0, stream.size());
+ }
+
+ @Test
+ public void testNonEmptyAddByteBufferList() throws Exception {
+ ByteBuffer bb = getByteBuffer(BYTE_ARRAY);
+ ByteBuffer bbTwo = getByteBuffer(BYTE_ARRAY);
+ ByteArrayOutputStream stream = new ByteArrayOutputStream();
+
+ List<ByteBuffer> bList = Lists.newArrayList(bb, bbTwo);
+
+ ByteBufferSupport.addByteBuffers(bList, stream);
+ assertEquals(44, stream.size());
+ }
+
+ @Test
+ public void testToIntBuffer() throws Exception {
+ byte[] bytes = ByteBufferSupport.toIntBytes(10);
+ assertEquals(4, bytes.length);
+ assertEquals(10, bytes[0]);
+ assertEquals(0, bytes[1]);
+ assertEquals(0, bytes[2]);
+ assertEquals(0, bytes[3]);
+ }
+
+ @Test
+ public void testNodeTaskToFromByteBuffer() throws Exception {
+ ByteBuffer bb = ByteBufferSupport.toByteBuffer(task);
+ NodeTask sTask = ByteBufferSupport.toNodeTask(bb);
+
+ assertEquals(task.getClass().getName(), sTask.getClass().getName());
+ assertEquals(task.getHostname(), sTask.getHostname());
+ assertEquals(task.getSlaveId(), sTask.getSlaveId());
+ assertEquals(task.getTaskPrefix(), sTask.getTaskPrefix());
+ assertEquals(task.getProfile(), sTask.getProfile());
+ assertEquals(task.getSlaveAttributes(), sTask.getSlaveAttributes());
+ assertEquals(task.getConstraint(), sTask.getConstraint());
+ assertEquals(task.getExecutorInfo(), sTask.getExecutorInfo());
+ }
+
+ @Test
+ public void testFrameworkIDToFromByteBuffer() throws Exception {
+ ByteBuffer bb = ByteBufferSupport.toByteBuffer(getExecutorInfo().getFrameworkId());
+ FrameworkID id = ByteBufferSupport.toFrameworkID(bb);
+
+ assertEquals(getExecutorInfo().getFrameworkId(), id);
+ }
+
+ @Test
+ public void testToString() throws Exception {
+ String output = ByteBufferSupport.toString(ByteBufferSupport.toByteBuffer(task));
+
+ assertTrue(output.contains("\"name\":\"profile\""));
+ assertTrue(output.contains("\"cpus\":0.1"));
+ assertTrue(output.contains("\"memory\":1024.0"));
+ assertTrue(output.contains("\"executorCpu\":0.0"));
+ assertTrue(output.contains("\"executorMemory\":0.0"));
+ assertTrue(output.contains("\"className\":\"org.apache.myriad.scheduler.ServiceResourceProfile\""));
+ }
+
+ public void testExecutorInfoToFromByteBuffer() throws Exception {
+ ExecutorInfo info = getExecutorInfo();
+ ByteBuffer bb = ByteBufferSupport.toByteBuffer(task);
+ ExecutorInfo bInfo = ByteBufferSupport.toExecutorInfo(bb);
+
+ assertEquals(info.getClass().getName(), bInfo.getClass().getName());
+ }
+
+ public void testGetConstraint() throws Exception {
+ ByteBuffer bb = ByteBufferSupport.toByteBuffer(task);
+
+ assertEquals(task.getConstraint(), ByteBufferSupport.getConstraint(bb));
+ }
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-myriad/blob/4a6e50c4/myriad-scheduler/src/test/java/org/apache/myriad/webapp/HttpConnectorProviderTest.java
----------------------------------------------------------------------
diff --git a/myriad-scheduler/src/test/java/org/apache/myriad/webapp/HttpConnectorProviderTest.java b/myriad-scheduler/src/test/java/org/apache/myriad/webapp/HttpConnectorProviderTest.java
new file mode 100644
index 0000000..5c4dd7d
--- /dev/null
+++ b/myriad-scheduler/src/test/java/org/apache/myriad/webapp/HttpConnectorProviderTest.java
@@ -0,0 +1,22 @@
+package org.apache.myriad.webapp;
+
+import static org.junit.Assert.assertEquals;
+
+import org.apache.myriad.BaseConfigurableTest;
+import org.junit.Test;
+import org.mortbay.jetty.Connector;
+
+/**
+ * Unit tests for HttpConnectionProvider
+ */
+public class HttpConnectorProviderTest extends BaseConfigurableTest {
+
+ @Test
+ public void testConnector() throws Exception {
+ HttpConnectorProvider provider = new HttpConnectorProvider(cfg);
+ Connector connector = provider.get();
+ assertEquals(8192, connector.getPort());
+ assertEquals("0.0.0.0", connector.getHost());
+ assertEquals("Myriad", connector.getName());
+ }
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-myriad/blob/4a6e50c4/myriad-scheduler/src/test/java/org/apache/myriad/webapp/MyriadWebServerTest.java
----------------------------------------------------------------------
diff --git a/myriad-scheduler/src/test/java/org/apache/myriad/webapp/MyriadWebServerTest.java b/myriad-scheduler/src/test/java/org/apache/myriad/webapp/MyriadWebServerTest.java
new file mode 100644
index 0000000..31c7119
--- /dev/null
+++ b/myriad-scheduler/src/test/java/org/apache/myriad/webapp/MyriadWebServerTest.java
@@ -0,0 +1,29 @@
+package org.apache.myriad.webapp;
+
+import static org.junit.Assert.assertEquals;
+
+import org.apache.myriad.BaseConfigurableTest;
+import org.apache.myriad.TestObjectFactory;
+import org.junit.Before;
+import org.junit.Test;
+
+/**
+ * Unit test cases for MyriadWebServer class
+ */
+public class MyriadWebServerTest extends BaseConfigurableTest {
+ MyriadWebServer webServer;
+
+ @Before
+ public void setUp() throws Exception {
+ super.setUp();
+ webServer = TestObjectFactory.getMyriadWebServer(cfg);
+ }
+
+ @Test
+ public void testStartStopMyriadWebServer() throws Exception {
+ webServer.start();
+ assertEquals(MyriadWebServer.Status.STARTED, webServer.getStatus());
+ webServer.stop();
+ assertEquals(MyriadWebServer.Status.STOPPED, webServer.getStatus());
+ }
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-myriad/blob/4a6e50c4/myriad-scheduler/src/test/resources/myriad-config-test-default.yml
----------------------------------------------------------------------
diff --git a/myriad-scheduler/src/test/resources/myriad-config-test-default.yml b/myriad-scheduler/src/test/resources/myriad-config-test-default.yml
index 2945bcd..f6f6b58 100644
--- a/myriad-scheduler/src/test/resources/myriad-config-test-default.yml
+++ b/myriad-scheduler/src/test/resources/myriad-config-test-default.yml
@@ -15,8 +15,10 @@
# specific language governing permissions and limitations
# under the License.
+servedConfigPath: /tmp/myriadEtc
+servedBinaryPath: /tmp/myriadBinary
mesosMaster: 10.0.2.15:5050
-haEnabled: true
+haEnabled: false
checkpoint: false
frameworkFailoverTimeout: 44200000
frameworkName: MyriadTest
@@ -58,7 +60,8 @@ yarnEnvironment:
mesosAuthenticationPrincipal:
mesosAuthenticationSecretFilename:
services:
- jobhistory:
+ jobhistory:
+ maxInstances: 1
jvmMaxMemoryMB: 1024
cpus: 1
ports:
[2/2] incubator-myriad git commit: MYRIAD-200
Posted by da...@apache.org.
MYRIAD-200
Increase JUnit Test Coverage
JIRA:
[MYRIAD-200] https://issues.apache.org/jira/browse/MYRIAD-200
Pull Request:
Closes #78
Author: hokiegeek2 <ho...@gmail.com>
Project: http://git-wip-us.apache.org/repos/asf/incubator-myriad/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-myriad/commit/4a6e50c4
Tree: http://git-wip-us.apache.org/repos/asf/incubator-myriad/tree/4a6e50c4
Diff: http://git-wip-us.apache.org/repos/asf/incubator-myriad/diff/4a6e50c4
Branch: refs/heads/master
Commit: 4a6e50c41ce3098a393c96ff8f55f9d4eb78b390
Parents: 6354ce6
Author: hokiegeek2 <ho...@gmail.com>
Authored: Thu Jun 9 15:03:24 2016 -0400
Committer: darinj <da...@apache.org>
Committed: Tue Jul 12 14:48:32 2016 -0400
----------------------------------------------------------------------
.../myriad/executor/MyriadExecutorDefaults.java | 6 +-
.../apache/myriad/executor/NMTaskConfig.java | 2 +-
.../recovery/MyriadFileSystemRMStateStore.java | 5 +-
.../src/main/java/org/apache/myriad/Main.java | 30 +-
.../java/org/apache/myriad/MyriadModule.java | 22 +-
.../apache/myriad/health/HealthCheckUtils.java | 39 ++-
.../scheduler/ExtendedResourceProfile.java | 47 ++-
.../org/apache/myriad/scheduler/NMProfile.java | 47 ++-
.../myriad/scheduler/NMProfileManager.java | 25 +-
.../scheduler/ServiceResourceProfile.java | 96 +++++-
.../scheduler/event/OfferRescindedEvent.java | 6 +-
.../handlers/OfferRescindedEventHandler.java | 5 +-
.../event/handlers/SlaveLostEventHandler.java | 1 +
.../scheduler/fgs/OfferLifecycleManager.java | 9 +
.../java/org/apache/myriad/state/Cluster.java | 4 +
.../java/org/apache/myriad/state/NodeTask.java | 15 +-
.../myriad/state/utils/ByteBufferSupport.java | 27 +-
.../apache/myriad/webapp/MyriadWebServer.java | 21 +-
.../MyriadFileSystemRMStateStoreTest.java | 69 ++++
.../org/apache/myriad/BaseConfigurableTest.java | 35 ++
.../org/apache/myriad/MultiBindingsTest.java | 33 +-
.../org/apache/myriad/TestObjectFactory.java | 90 +++++
.../myriad/api/ArtifactsResourceTest.java | 51 +++
.../myriad/api/SchedulerStateResourceTest.java | 58 ++++
.../configuration/MyriadConfigurationTest.java | 95 +++---
.../myriad/health/HealthCheckUtilsTest.java | 27 ++
.../health/MesosDriverHealthCheckTest.java | 69 ++++
.../myriad/scheduler/MockSchedulerDriver.java | 124 +++++++
.../myriad/scheduler/MyriadDriverTest.java | 43 +++
.../myriad/scheduler/MyriadOperationsTest.java | 112 ++++++
.../myriad/scheduler/NMProfileManagerTest.java | 63 ++++
.../scheduler/ServiceResourceProfileTest.java | 31 ++
.../scheduler/TaskConstraintsManagerTest.java | 32 ++
.../scheduler/TestServiceCommandLine.java | 27 +-
.../apache/myriad/scheduler/TestTaskUtils.java | 41 +--
.../fgs/OfferLifeCycleManagerTest.java | 54 +++
.../myriad/scheduler/fgs/OfferUtilsTest.java | 74 ++++
.../org/apache/myriad/state/ClusterTest.java | 62 ++++
.../org/apache/myriad/state/MockDispatcher.java | 32 ++
.../org/apache/myriad/state/MockFuture.java | 44 +++
.../java/org/apache/myriad/state/MockRMApp.java | 202 +++++++++++
.../org/apache/myriad/state/MockRMContext.java | 339 +++++++++++++++++++
.../java/org/apache/myriad/state/MockState.java | 45 +++
.../org/apache/myriad/state/MockVariable.java | 35 ++
.../apache/myriad/state/MyriadStateTest.java | 21 ++
.../org/apache/myriad/state/NodeTaskTest.java | 40 +++
.../apache/myriad/state/SchedulerStateTest.java | 65 ++++
.../state/utils/ByteBufferSupportTest.java | 184 ++++++++++
.../webapp/HttpConnectorProviderTest.java | 22 ++
.../myriad/webapp/MyriadWebServerTest.java | 29 ++
.../resources/myriad-config-test-default.yml | 7 +-
51 files changed, 2455 insertions(+), 207 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-myriad/blob/4a6e50c4/myriad-commons/src/main/java/org/apache/myriad/executor/MyriadExecutorDefaults.java
----------------------------------------------------------------------
diff --git a/myriad-commons/src/main/java/org/apache/myriad/executor/MyriadExecutorDefaults.java b/myriad-commons/src/main/java/org/apache/myriad/executor/MyriadExecutorDefaults.java
index bda7ff0..c7e4515 100644
--- a/myriad-commons/src/main/java/org/apache/myriad/executor/MyriadExecutorDefaults.java
+++ b/myriad-commons/src/main/java/org/apache/myriad/executor/MyriadExecutorDefaults.java
@@ -69,9 +69,7 @@ public class MyriadExecutorDefaults {
public static final double DEFAULT_JVM_MAX_MEMORY_MB = 256;
/**
- * Default cpus for executor JVM.
+ * Default CPU cores for executor JVM.
*/
public static final double DEFAULT_CPUS = 0.2;
-
-
-}
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-myriad/blob/4a6e50c4/myriad-commons/src/main/java/org/apache/myriad/executor/NMTaskConfig.java
----------------------------------------------------------------------
diff --git a/myriad-commons/src/main/java/org/apache/myriad/executor/NMTaskConfig.java b/myriad-commons/src/main/java/org/apache/myriad/executor/NMTaskConfig.java
index 21d2420..1b250ec 100644
--- a/myriad-commons/src/main/java/org/apache/myriad/executor/NMTaskConfig.java
+++ b/myriad-commons/src/main/java/org/apache/myriad/executor/NMTaskConfig.java
@@ -21,7 +21,7 @@ package org.apache.myriad.executor;
import java.util.Map;
/**
- * Node Manger Task Configuraiton
+ * Node Manger Task Configuration
*/
public class NMTaskConfig {
private String yarnHome;
http://git-wip-us.apache.org/repos/asf/incubator-myriad/blob/4a6e50c4/myriad-scheduler/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/recovery/MyriadFileSystemRMStateStore.java
----------------------------------------------------------------------
diff --git a/myriad-scheduler/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/recovery/MyriadFileSystemRMStateStore.java b/myriad-scheduler/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/recovery/MyriadFileSystemRMStateStore.java
index 923e29d..6257ffc 100644
--- a/myriad-scheduler/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/recovery/MyriadFileSystemRMStateStore.java
+++ b/myriad-scheduler/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/recovery/MyriadFileSystemRMStateStore.java
@@ -32,6 +32,8 @@ import org.apache.myriad.state.utils.StoreContext;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import com.google.common.annotations.VisibleForTesting;
+
/**
* StateStore that stores Myriad state in addition to RM state to DFS.
*/
@@ -70,6 +72,7 @@ public class MyriadFileSystemRMStateStore extends FileSystemRMStateStore impleme
return null;
}
+ @VisibleForTesting
@Override
protected synchronized void startInternal() throws Exception {
super.startInternal();
@@ -120,7 +123,7 @@ public class MyriadFileSystemRMStateStore extends FileSystemRMStateStore impleme
protected void reflectedUpdateFile(Path outputPath, byte[] data) throws InvocationTargetException, IllegalAccessException {
- Class [] parameters = updateFileMethod.getParameterTypes();
+ Class<?> [] parameters = updateFileMethod.getParameterTypes();
if (parameters.length == 2 && parameters[0].equals(Path.class) && parameters[1].isArray()) {
updateFileMethod.invoke(this, outputPath, data);
} else if (parameters.length == 3 && parameters[0].equals(Path.class) && parameters[1].isArray() && parameters[2].isPrimitive()) {
http://git-wip-us.apache.org/repos/asf/incubator-myriad/blob/4a6e50c4/myriad-scheduler/src/main/java/org/apache/myriad/Main.java
----------------------------------------------------------------------
diff --git a/myriad-scheduler/src/main/java/org/apache/myriad/Main.java b/myriad-scheduler/src/main/java/org/apache/myriad/Main.java
index e825256..14ab806 100644
--- a/myriad-scheduler/src/main/java/org/apache/myriad/Main.java
+++ b/myriad-scheduler/src/main/java/org/apache/myriad/Main.java
@@ -18,19 +18,13 @@
*/
package org.apache.myriad;
-import com.codahale.metrics.JmxReporter;
-import com.codahale.metrics.MetricRegistry;
-import com.codahale.metrics.health.HealthCheckRegistry;
-import com.fasterxml.jackson.databind.ObjectMapper;
-import com.fasterxml.jackson.dataformat.yaml.YAMLFactory;
-import com.google.inject.Guice;
-import com.google.inject.Injector;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
+
import org.apache.commons.collections.MapUtils;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.yarn.server.resourcemanager.RMContext;
@@ -61,6 +55,12 @@ import org.apache.myriad.webapp.WebAppGuiceModule;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import com.codahale.metrics.JmxReporter;
+import com.codahale.metrics.MetricRegistry;
+import com.codahale.metrics.health.HealthCheckRegistry;
+import com.google.inject.Guice;
+import com.google.inject.Injector;
+
/**
* Main entry point for myriad scheduler
*/
@@ -76,18 +76,14 @@ public class Main {
private static Injector injector;
public static void initialize(Configuration hadoopConf, AbstractYarnScheduler yarnScheduler, RMContext rmContext,
- InterceptorRegistry registry) throws Exception {
- ObjectMapper mapper = new ObjectMapper(new YAMLFactory());
- MyriadConfiguration cfg = mapper.readValue(Thread.currentThread().getContextClassLoader().getResource(
- "myriad-config-default.yml"), MyriadConfiguration.class);
-
- MyriadModule myriadModule = new MyriadModule(cfg, hadoopConf, yarnScheduler, rmContext, registry);
+ InterceptorRegistry registry) throws Exception {
+ MyriadModule myriadModule = new MyriadModule("myriad-config-default.yml", hadoopConf, yarnScheduler, rmContext, registry);
MesosModule mesosModule = new MesosModule();
injector = Guice.createInjector(myriadModule, mesosModule, new WebAppGuiceModule());
- new Main().run(cfg);
+ new Main().run(injector.getInstance(MyriadConfiguration.class));
}
-
+
// TODO (Kannan Rajah) Hack to get injector in unit test.
public static Injector getInjector() {
return injector;
@@ -158,10 +154,8 @@ public class Main {
Long cpu = Long.parseLong(profileResourceMap.get("cpu"));
Long mem = Long.parseLong(profileResourceMap.get("mem"));
- ServiceResourceProfile serviceProfile = new ExtendedResourceProfile(new NMProfile(profile.getKey(), cpu, mem),
+ ServiceResourceProfile serviceProfile = new ExtendedResourceProfile(new NMProfile(profile.getKey(), cpu, mem), taskUtils.getExecutorCpus(), taskUtils.getExecutorMemory(),
taskUtils.getNodeManagerCpus(), taskUtils.getNodeManagerMemory());
- serviceProfile.setExecutorCpu(taskUtils.getExecutorCpus());
- serviceProfile.setExecutorMemory(taskUtils.getExecutorMemory());
profileManager.add(serviceProfile);
} else {
http://git-wip-us.apache.org/repos/asf/incubator-myriad/blob/4a6e50c4/myriad-scheduler/src/main/java/org/apache/myriad/MyriadModule.java
----------------------------------------------------------------------
diff --git a/myriad-scheduler/src/main/java/org/apache/myriad/MyriadModule.java b/myriad-scheduler/src/main/java/org/apache/myriad/MyriadModule.java
index 92add9a..8748dcb 100644
--- a/myriad-scheduler/src/main/java/org/apache/myriad/MyriadModule.java
+++ b/myriad-scheduler/src/main/java/org/apache/myriad/MyriadModule.java
@@ -18,11 +18,15 @@
*/
package org.apache.myriad;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.dataformat.yaml.YAMLFactory;
import com.google.inject.AbstractModule;
import com.google.inject.Provides;
import com.google.inject.Scopes;
import com.google.inject.Singleton;
import com.google.inject.multibindings.MapBinder;
+
+import java.io.IOException;
import java.util.Map;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.yarn.server.resourcemanager.RMContext;
@@ -68,15 +72,15 @@ public class MyriadModule extends AbstractModule {
private final RMContext rmContext;
private InterceptorRegistry interceptorRegistry;
- public MyriadModule(MyriadConfiguration cfg, Configuration hadoopConf, AbstractYarnScheduler yarnScheduler, RMContext rmContext,
+ public MyriadModule(String configFile, Configuration hadoopConf, AbstractYarnScheduler yarnScheduler, RMContext rmContext,
InterceptorRegistry interceptorRegistry) {
- this.cfg = cfg;
+ this.cfg = this.generateMyriadConfiguration(configFile);
this.hadoopConf = hadoopConf;
this.yarnScheduler = yarnScheduler;
this.rmContext = rmContext;
this.interceptorRegistry = interceptorRegistry;
}
-
+
@Override
protected void configure() {
LOGGER.debug("Configuring guice");
@@ -168,4 +172,16 @@ public class MyriadModule extends AbstractModule {
}
return cliGenerator;
}
+
+ protected MyriadConfiguration generateMyriadConfiguration(String configFile) {
+ ObjectMapper mapper = new ObjectMapper(new YAMLFactory());
+
+ try {
+ return mapper.readValue(Thread.currentThread().getContextClassLoader().getResource(
+ configFile), MyriadConfiguration.class);
+ } catch (IOException e) {
+ LOGGER.error("The configFile {} could not be found", configFile);
+ throw new IllegalArgumentException("The configFile cannot be found", e);
+ }
+ }
}
http://git-wip-us.apache.org/repos/asf/incubator-myriad/blob/4a6e50c4/myriad-scheduler/src/main/java/org/apache/myriad/health/HealthCheckUtils.java
----------------------------------------------------------------------
diff --git a/myriad-scheduler/src/main/java/org/apache/myriad/health/HealthCheckUtils.java b/myriad-scheduler/src/main/java/org/apache/myriad/health/HealthCheckUtils.java
index 8abbb57..75ac1f6 100644
--- a/myriad-scheduler/src/main/java/org/apache/myriad/health/HealthCheckUtils.java
+++ b/myriad-scheduler/src/main/java/org/apache/myriad/health/HealthCheckUtils.java
@@ -20,6 +20,8 @@ package org.apache.myriad.health;
import java.io.IOException;
import java.net.Socket;
+
+import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -30,15 +32,34 @@ public class HealthCheckUtils {
private static final Logger LOGGER = LoggerFactory.getLogger(HealthCheckUtils.class);
public static boolean checkHostPort(String connectionString) {
- String[] split = connectionString.split(":");
- String serverAddress = split[0];
- Integer serverPort = Integer.valueOf(split[1]);
- try (Socket s = new Socket(serverAddress, serverPort)) {
+ String[] hostPort = generateHostPortArray(connectionString);
+
+ try {
+ createSocket(hostPort);
return true;
- } catch (IOException ex) {
- LOGGER.error("parsing host port", ex);
- }
-
+ } catch (IOException e) {
+ LOGGER.error("error in connecting to " + hostPort[0] + ":" + hostPort[1], e);
+ }
+
return false;
}
-}
+
+ private static void createSocket(String[] hostPort) throws IOException {
+ String address = hostPort[0];
+ Integer port = Integer.valueOf(hostPort[1]);
+
+ Socket s = new Socket(address, port);
+ s.close();
+ }
+
+ private static String[] generateHostPortArray(String connectionString) {
+ String[] split = connectionString.split(":");
+ if (split.length != 2) {
+ throw new IllegalArgumentException("The Connection String " + connectionString + " is invalid. It must be in <host>:<port> format");
+ } else if (!StringUtils.isNumeric(split[1])) {
+ throw new IllegalArgumentException("The Connection String " + connectionString + " is invalid. The port must be an integer");
+ } else {
+ return split;
+ }
+ }
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-myriad/blob/4a6e50c4/myriad-scheduler/src/main/java/org/apache/myriad/scheduler/ExtendedResourceProfile.java
----------------------------------------------------------------------
diff --git a/myriad-scheduler/src/main/java/org/apache/myriad/scheduler/ExtendedResourceProfile.java b/myriad-scheduler/src/main/java/org/apache/myriad/scheduler/ExtendedResourceProfile.java
index 8119360..6232258 100644
--- a/myriad-scheduler/src/main/java/org/apache/myriad/scheduler/ExtendedResourceProfile.java
+++ b/myriad-scheduler/src/main/java/org/apache/myriad/scheduler/ExtendedResourceProfile.java
@@ -33,8 +33,21 @@ public class ExtendedResourceProfile extends ServiceResourceProfile {
* @param cpu
* @param mem will throw NullPoiterException if childProfile is null
*/
+ public ExtendedResourceProfile(NMProfile childProfile, Double cpu, Double mem, Double execCpu, Double execMemory) {
+ super(childProfile.getName(), cpu, mem, execCpu, execMemory);
+
+ this.childProfile = childProfile;
+ this.className = ExtendedResourceProfile.class.getName();
+ }
+
+ /**
+ * @param childProfile - should be null
+ * @param cpu
+ * @param mem will throw NullPoiterException if childProfile is null
+ */
public ExtendedResourceProfile(NMProfile childProfile, Double cpu, Double mem) {
super(childProfile.getName(), cpu, mem);
+
this.childProfile = childProfile;
this.className = ExtendedResourceProfile.class.getName();
}
@@ -77,4 +90,36 @@ public class ExtendedResourceProfile extends ServiceResourceProfile {
Gson gson = new Gson();
return gson.toJson(this);
}
-}
+
+ @Override
+ public int hashCode() {
+ final int prime = 31;
+ int result = super.hashCode();
+ result = prime * result + ((childProfile == null) ? 0 : childProfile.hashCode());
+ return result;
+ }
+
+ @Override
+ public boolean equals(Object obj) {
+ if (this == obj) {
+ return true;
+ }
+ if (!super.equals(obj)) {
+ return false;
+ }
+ if (getClass() != obj.getClass()) {
+ return false;
+ }
+
+ ExtendedResourceProfile other = (ExtendedResourceProfile) obj;
+
+ if (childProfile == null) {
+ if (other.childProfile != null) {
+ return false;
+ }
+ } else if (!childProfile.equals(other.childProfile)) {
+ return false;
+ }
+ return true;
+ }
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-myriad/blob/4a6e50c4/myriad-scheduler/src/main/java/org/apache/myriad/scheduler/NMProfile.java
----------------------------------------------------------------------
diff --git a/myriad-scheduler/src/main/java/org/apache/myriad/scheduler/NMProfile.java b/myriad-scheduler/src/main/java/org/apache/myriad/scheduler/NMProfile.java
index 3de82a5..2215835 100644
--- a/myriad-scheduler/src/main/java/org/apache/myriad/scheduler/NMProfile.java
+++ b/myriad-scheduler/src/main/java/org/apache/myriad/scheduler/NMProfile.java
@@ -60,4 +60,49 @@ public class NMProfile {
return gson.toJson(this);
}
-}
+ @Override
+ public int hashCode() {
+ final int prime = 31;
+ int result = 1;
+ result = prime * result + ((cpus == null) ? 0 : cpus.hashCode());
+ result = prime * result + ((memory == null) ? 0 : memory.hashCode());
+ result = prime * result + ((name == null) ? 0 : name.hashCode());
+ return result;
+ }
+
+ @Override
+ public boolean equals(Object obj) {
+ if (this == obj) {
+ return true;
+ }
+ if (obj == null) {
+ return false;
+ }
+ if (getClass() != obj.getClass()) {
+ return false;
+ }
+ NMProfile other = (NMProfile) obj;
+ if (cpus == null) {
+ if (other.cpus != null) {
+ return false;
+ }
+ } else if (!cpus.equals(other.cpus)) {
+ return false;
+ }
+ if (memory == null) {
+ if (other.memory != null) {
+ return false;
+ }
+ } else if (!memory.equals(other.memory)) {
+ return false;
+ }
+ if (name == null) {
+ if (other.name != null) {
+ return false;
+ }
+ } else if (!name.equals(other.name)) {
+ return false;
+ }
+ return true;
+ }
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-myriad/blob/4a6e50c4/myriad-scheduler/src/main/java/org/apache/myriad/scheduler/NMProfileManager.java
----------------------------------------------------------------------
diff --git a/myriad-scheduler/src/main/java/org/apache/myriad/scheduler/NMProfileManager.java b/myriad-scheduler/src/main/java/org/apache/myriad/scheduler/NMProfileManager.java
index 4256f40..285de5d 100644
--- a/myriad-scheduler/src/main/java/org/apache/myriad/scheduler/NMProfileManager.java
+++ b/myriad-scheduler/src/main/java/org/apache/myriad/scheduler/NMProfileManager.java
@@ -18,14 +18,16 @@
*/
package org.apache.myriad.scheduler;
-import com.google.gson.Gson;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
+
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
- * Node Manager Profile Manager
+ * NMProfile Manager
*/
public class NMProfileManager {
private static final Logger LOGGER = LoggerFactory.getLogger(NMProfileManager.class);
@@ -46,8 +48,21 @@ public class NMProfileManager {
return this.profiles.containsKey(name);
}
+ public int numberOfProfiles() {
+ return profiles.size();
+ }
+
+ @Override
public String toString() {
- Gson gson = new Gson();
- return gson.toJson(this);
+ ToStringBuilder builder = new ToStringBuilder(this, ToStringStyle.JSON_STYLE);
+
+ for (Map.Entry<String, NMProfile> profile : profiles.entrySet()) {
+ NMProfile value = profile.getValue();
+ builder.append("name", value.getName());
+ builder.append("cpus", value.getCpus());
+ builder.append("memory", value.getMemory());
+ }
+
+ return builder.toString();
}
-}
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-myriad/blob/4a6e50c4/myriad-scheduler/src/main/java/org/apache/myriad/scheduler/ServiceResourceProfile.java
----------------------------------------------------------------------
diff --git a/myriad-scheduler/src/main/java/org/apache/myriad/scheduler/ServiceResourceProfile.java b/myriad-scheduler/src/main/java/org/apache/myriad/scheduler/ServiceResourceProfile.java
index 4c033c9..146a80c 100644
--- a/myriad-scheduler/src/main/java/org/apache/myriad/scheduler/ServiceResourceProfile.java
+++ b/myriad-scheduler/src/main/java/org/apache/myriad/scheduler/ServiceResourceProfile.java
@@ -28,7 +28,7 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
- * Resource Profile for any service
+ * Resource Profile for any service
*/
public class ServiceResourceProfile {
@@ -48,15 +48,21 @@ public class ServiceResourceProfile {
protected Double executorMemory = 0.0;
- protected String className;
+ protected String className = ServiceResourceProfile.class.getName();
- public ServiceResourceProfile(String name, Double cpu, Double mem) {
+ public ServiceResourceProfile(String name, Double cpus, Double mem) {
this.name = name;
- this.cpus = cpu;
+ this.cpus = cpus;
this.memory = mem;
- this.className = ServiceResourceProfile.class.getName();
}
+ public ServiceResourceProfile(String name, Double cpus, Double mem, Double execCpus, Double execMemory) {
+ this.name = name;
+ this.cpus = cpus;
+ this.memory = mem;
+ this.executorCpu = execCpus;
+ this.executorMemory = execMemory;
+ }
public String getName() {
return name;
@@ -82,19 +88,10 @@ public class ServiceResourceProfile {
return executorCpu;
}
- public void setExecutorCpu(Double executorCpu) {
- this.executorCpu = executorCpu;
- }
-
public Double getExecutorMemory() {
return executorMemory;
}
- public void setExecutorMemory(Double executorMemory) {
- this.executorMemory = executorMemory;
- }
-
-
@Override
public String toString() {
Gson gson = new Gson();
@@ -125,6 +122,75 @@ public class ServiceResourceProfile {
}
return null;
}
+ }
+
+ @Override
+ public int hashCode() {
+ final int prime = 31;
+ int result = 1;
+ result = prime * result + ((className == null) ? 0 : className.hashCode());
+ result = prime * result + ((cpus == null) ? 0 : cpus.hashCode());
+ result = prime * result + ((executorCpu == null) ? 0 : executorCpu.hashCode());
+ result = prime * result + ((executorMemory == null) ? 0 : executorMemory.hashCode());
+ result = prime * result + ((memory == null) ? 0 : memory.hashCode());
+ result = prime * result + ((name == null) ? 0 : name.hashCode());
+ return result;
+ }
+ @Override
+ public boolean equals(Object obj) {
+ if (this == obj) {
+ return true;
+ }
+ if (obj == null) {
+ return false;
+ }
+ if (getClass() != obj.getClass()) {
+ return false;
+ }
+ ServiceResourceProfile other = (ServiceResourceProfile) obj;
+ if (className == null) {
+ if (other.className != null) {
+ return false;
+ }
+ } else if (!className.equals(other.className)) {
+ return false;
+ }
+ if (cpus == null) {
+ if (other.cpus != null) {
+ return false;
+ }
+ } else if (!cpus.equals(other.cpus)) {
+ return false;
+ }
+ if (executorCpu == null) {
+ if (other.executorCpu != null) {
+ return false;
+ }
+ } else if (!executorCpu.equals(other.executorCpu)) {
+ return false;
+ }
+ if (executorMemory == null) {
+ if (other.executorMemory != null) {
+ return false;
+ }
+ } else if (!executorMemory.equals(other.executorMemory)) {
+ return false;
+ }
+ if (memory == null) {
+ if (other.memory != null) {
+ return false;
+ }
+ } else if (!memory.equals(other.memory)) {
+ return false;
+ }
+ if (name == null) {
+ if (other.name != null) {
+ return false;
+ }
+ } else if (!name.equals(other.name)) {
+ return false;
+ }
+ return true;
}
-}
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-myriad/blob/4a6e50c4/myriad-scheduler/src/main/java/org/apache/myriad/scheduler/event/OfferRescindedEvent.java
----------------------------------------------------------------------
diff --git a/myriad-scheduler/src/main/java/org/apache/myriad/scheduler/event/OfferRescindedEvent.java b/myriad-scheduler/src/main/java/org/apache/myriad/scheduler/event/OfferRescindedEvent.java
index 180655c..126cfb8 100644
--- a/myriad-scheduler/src/main/java/org/apache/myriad/scheduler/event/OfferRescindedEvent.java
+++ b/myriad-scheduler/src/main/java/org/apache/myriad/scheduler/event/OfferRescindedEvent.java
@@ -44,4 +44,8 @@ public class OfferRescindedEvent {
this.offerId = offerId;
}
-}
+ @Override
+ public String toString() {
+ return "OfferRescindedEvent [driver=" + driver + ", offerId=" + offerId + "]";
+ }
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-myriad/blob/4a6e50c4/myriad-scheduler/src/main/java/org/apache/myriad/scheduler/event/handlers/OfferRescindedEventHandler.java
----------------------------------------------------------------------
diff --git a/myriad-scheduler/src/main/java/org/apache/myriad/scheduler/event/handlers/OfferRescindedEventHandler.java b/myriad-scheduler/src/main/java/org/apache/myriad/scheduler/event/handlers/OfferRescindedEventHandler.java
index 85e8043..e49d2b9 100644
--- a/myriad-scheduler/src/main/java/org/apache/myriad/scheduler/event/handlers/OfferRescindedEventHandler.java
+++ b/myriad-scheduler/src/main/java/org/apache/myriad/scheduler/event/handlers/OfferRescindedEventHandler.java
@@ -31,7 +31,6 @@ public class OfferRescindedEventHandler implements EventHandler<OfferRescindedEv
@Override
public void onEvent(OfferRescindedEvent event, long sequence, boolean endOfBatch) throws Exception {
- LOGGER.info("OfferRescinded event: {}", event);
+ LOGGER.info("OfferRescindedEvent for offer id: {} for scheuler {}", event.getOfferId().toString(), event.getDriver().getClass().getName());
}
-
-}
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-myriad/blob/4a6e50c4/myriad-scheduler/src/main/java/org/apache/myriad/scheduler/event/handlers/SlaveLostEventHandler.java
----------------------------------------------------------------------
diff --git a/myriad-scheduler/src/main/java/org/apache/myriad/scheduler/event/handlers/SlaveLostEventHandler.java b/myriad-scheduler/src/main/java/org/apache/myriad/scheduler/event/handlers/SlaveLostEventHandler.java
index b1f37bb..9e17f6c 100644
--- a/myriad-scheduler/src/main/java/org/apache/myriad/scheduler/event/handlers/SlaveLostEventHandler.java
+++ b/myriad-scheduler/src/main/java/org/apache/myriad/scheduler/event/handlers/SlaveLostEventHandler.java
@@ -30,6 +30,7 @@ import org.slf4j.LoggerFactory;
public class SlaveLostEventHandler implements EventHandler<SlaveLostEvent> {
private static final Logger LOGGER = LoggerFactory.getLogger(SlaveLostEventHandler.class);
+ //TODO (hokiegeek2) Research how else Myriad should respond to this event
@Override
public void onEvent(SlaveLostEvent event, long sequence, boolean endOfBatch) throws Exception {
SlaveID slaveId = event.getSlaveId();
http://git-wip-us.apache.org/repos/asf/incubator-myriad/blob/4a6e50c4/myriad-scheduler/src/main/java/org/apache/myriad/scheduler/fgs/OfferLifecycleManager.java
----------------------------------------------------------------------
diff --git a/myriad-scheduler/src/main/java/org/apache/myriad/scheduler/fgs/OfferLifecycleManager.java b/myriad-scheduler/src/main/java/org/apache/myriad/scheduler/fgs/OfferLifecycleManager.java
index 135158f..e4cec83 100644
--- a/myriad-scheduler/src/main/java/org/apache/myriad/scheduler/fgs/OfferLifecycleManager.java
+++ b/myriad-scheduler/src/main/java/org/apache/myriad/scheduler/fgs/OfferLifecycleManager.java
@@ -21,13 +21,17 @@ package org.apache.myriad.scheduler.fgs;
import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
+
import javax.inject.Inject;
+
import org.apache.mesos.Protos;
import org.apache.mesos.Protos.Offer;
import org.apache.myriad.scheduler.MyriadDriver;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import com.google.common.annotations.VisibleForTesting;
+
/**
* Manages the Mesos offers tracked by Myriad.
*/
@@ -110,4 +114,9 @@ public class OfferLifecycleManager {
LOGGER.info("Declined {} outstanding offers for host {}", numOutStandingOffers, hostname);
}
}
+
+ @VisibleForTesting
+ public ConsumedOffer getConsumedOffer(String hostname) {
+ return consumedOfferMap.get(hostname);
+ }
}
http://git-wip-us.apache.org/repos/asf/incubator-myriad/blob/4a6e50c4/myriad-scheduler/src/main/java/org/apache/myriad/state/Cluster.java
----------------------------------------------------------------------
diff --git a/myriad-scheduler/src/main/java/org/apache/myriad/state/Cluster.java b/myriad-scheduler/src/main/java/org/apache/myriad/state/Cluster.java
index a5ccca7..2586720 100644
--- a/myriad-scheduler/src/main/java/org/apache/myriad/state/Cluster.java
+++ b/myriad-scheduler/src/main/java/org/apache/myriad/state/Cluster.java
@@ -66,6 +66,10 @@ public class Cluster {
public void removeNode(NodeTask task) {
this.nodes.remove(task);
}
+
+ public void removeAllNodes() {
+ this.nodes.clear();
+ }
public String getResourceManagerHost() {
return resourceManagerHost;
http://git-wip-us.apache.org/repos/asf/incubator-myriad/blob/4a6e50c4/myriad-scheduler/src/main/java/org/apache/myriad/state/NodeTask.java
----------------------------------------------------------------------
diff --git a/myriad-scheduler/src/main/java/org/apache/myriad/state/NodeTask.java b/myriad-scheduler/src/main/java/org/apache/myriad/state/NodeTask.java
index 3a4ee56..5acd7cb 100644
--- a/myriad-scheduler/src/main/java/org/apache/myriad/state/NodeTask.java
+++ b/myriad-scheduler/src/main/java/org/apache/myriad/state/NodeTask.java
@@ -21,6 +21,8 @@ package org.apache.myriad.state;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.google.inject.Inject;
import java.util.List;
+
+import org.apache.commons.lang.StringUtils;
import org.apache.mesos.Protos;
import org.apache.mesos.Protos.Attribute;
import org.apache.myriad.scheduler.ServiceResourceProfile;
@@ -32,7 +34,7 @@ import org.apache.myriad.scheduler.constraints.Constraint;
*/
public class NodeTask {
@JsonProperty
- private String hostname;
+ private String hostname = StringUtils.EMPTY;
@JsonProperty
private Protos.SlaveID slaveId;
@JsonProperty
@@ -40,21 +42,22 @@ public class NodeTask {
@JsonProperty
private String taskPrefix;
@JsonProperty
- private ServiceResourceProfile serviceresourceProfile;
+ private ServiceResourceProfile profile;
@Inject
TaskUtils taskUtils;
+
/**
* Mesos executor for this node.
*/
private Protos.ExecutorInfo executorInfo;
private Constraint constraint;
+
private List<Attribute> slaveAttributes;
public NodeTask(ServiceResourceProfile profile, Constraint constraint) {
- this.serviceresourceProfile = profile;
- this.hostname = "";
+ this.profile = profile;
this.constraint = constraint;
}
@@ -111,10 +114,10 @@ public class NodeTask {
}
public ServiceResourceProfile getProfile() {
- return serviceresourceProfile;
+ return profile;
}
public void setProfile(ServiceResourceProfile serviceresourceProfile) {
- this.serviceresourceProfile = serviceresourceProfile;
+ this.profile = serviceresourceProfile;
}
}
http://git-wip-us.apache.org/repos/asf/incubator-myriad/blob/4a6e50c4/myriad-scheduler/src/main/java/org/apache/myriad/state/utils/ByteBufferSupport.java
----------------------------------------------------------------------
diff --git a/myriad-scheduler/src/main/java/org/apache/myriad/state/utils/ByteBufferSupport.java b/myriad-scheduler/src/main/java/org/apache/myriad/state/utils/ByteBufferSupport.java
index b473b9e..9b0e643 100644
--- a/myriad-scheduler/src/main/java/org/apache/myriad/state/utils/ByteBufferSupport.java
+++ b/myriad-scheduler/src/main/java/org/apache/myriad/state/utils/ByteBufferSupport.java
@@ -28,6 +28,9 @@ import java.nio.ByteBuffer;
import java.nio.ByteOrder;
import java.util.ArrayList;
import java.util.List;
+
+import org.apache.commons.collections.CollectionUtils;
+import org.apache.commons.lang.ArrayUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.mesos.Protos;
import org.apache.myriad.scheduler.ServiceResourceProfile;
@@ -50,7 +53,7 @@ public class ByteBufferSupport {
public static void addByteBuffers(List<ByteBuffer> list, ByteArrayOutputStream bytes) throws IOException {
// If list, add the list size, then the size of each buffer followed by the buffer.
- if (list != null) {
+ if (CollectionUtils.isNotEmpty(list)) {
bytes.write(toIntBytes(list.size()));
for (ByteBuffer bb : list) {
addByteBuffer(bb, bytes);
@@ -61,7 +64,7 @@ public class ByteBufferSupport {
}
public static void addByteBuffer(ByteBuffer bb, ByteArrayOutputStream bytes) throws IOException {
- if (bb != null && bytes != null) {
+ if (byteBufferNotEmpty(bb)) {
bytes.write(toIntBytes(bb.array().length));
bytes.write(bb.array());
}
@@ -199,16 +202,21 @@ public class ByteBufferSupport {
*/
public static NodeTask toNodeTask(ByteBuffer bb) {
NodeTask nt = null;
- if (bb != null && bb.array().length > 0) {
+ if (byteBufferNotEmpty(bb)) {
nt = new NodeTask(getServiceResourceProfile(bb), getConstraint(bb));
nt.setHostname(toString(bb));
nt.setSlaveId(toSlaveId(bb));
nt.setTaskStatus(toTaskStatus(bb));
nt.setExecutorInfo(toExecutorInfo(bb));
+ nt.setTaskPrefix(toString(bb));
}
return nt;
}
+ private static boolean byteBufferNotEmpty(ByteBuffer bb) {
+ return bb != null && bb.array().length > 0;
+ }
+
public static byte[] getTaskBytes(NodeTask nt) {
if (nt.getTaskStatus() != null) {
return nt.getTaskStatus().toByteArray();
@@ -234,7 +242,7 @@ public class ByteBufferSupport {
}
public static void putBytes(ByteBuffer bb, byte bytes[]) {
- if (bytes != null && bytes.length > 0) {
+ if (ArrayUtils.isNotEmpty(bytes)) {
bb.putInt(bytes.length);
bb.put(bytes);
} else {
@@ -250,7 +258,7 @@ public class ByteBufferSupport {
/**
* This assumes the next position is the size as an int, and the following is a string
- * iff the size is not zero.
+ * if the size is not zero.
*
* @param bb ByteBuffer to extract string from
* @return string from the next position, or "" if the size is zero
@@ -259,7 +267,7 @@ public class ByteBufferSupport {
byte[] bytes = new byte[bb.getInt()];
String s = "";
try {
- if (bytes.length > 0) {
+ if (ArrayUtils.isNotEmpty(bytes)) {
bb.get(bytes);
s = new String(bytes, UTF8);
}
@@ -279,7 +287,7 @@ public class ByteBufferSupport {
public static ServiceResourceProfile getServiceResourceProfile(ByteBuffer bb) {
String p = toString(bb);
- if (!StringUtils.isEmpty(p)) {
+ if (StringUtils.isNotEmpty(p)) {
return gsonCustom.fromJson(p, ServiceResourceProfile.class);
} else {
return null;
@@ -295,7 +303,7 @@ public class ByteBufferSupport {
case LIKE:
- if (!StringUtils.isEmpty(p)) {
+ if (StringUtils.isNotEmpty(p)) {
return gson.fromJson(p, LikeConstraint.class);
}
}
@@ -363,5 +371,4 @@ public class ByteBufferSupport {
public static ByteBuffer createBuffer(ByteBuffer bb) {
return fillBuffer(getBytes(bb, bb.getInt()));
}
-
-}
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-myriad/blob/4a6e50c4/myriad-scheduler/src/main/java/org/apache/myriad/webapp/MyriadWebServer.java
----------------------------------------------------------------------
diff --git a/myriad-scheduler/src/main/java/org/apache/myriad/webapp/MyriadWebServer.java b/myriad-scheduler/src/main/java/org/apache/myriad/webapp/MyriadWebServer.java
index 126febc..60ef87d 100644
--- a/myriad-scheduler/src/main/java/org/apache/myriad/webapp/MyriadWebServer.java
+++ b/myriad-scheduler/src/main/java/org/apache/myriad/webapp/MyriadWebServer.java
@@ -37,6 +37,11 @@ public class MyriadWebServer {
private final Connector connector;
private final GuiceFilter filter;
+ /**
+ * Status codes for MyriadWebServer
+ */
+ public enum Status {STARTED, RUNNING, STOPPED, FAILED, UNKNOWN}
+
@Inject
public MyriadWebServer(Server jetty, Connector connector, GuiceFilter filter) {
this.jetty = jetty;
@@ -71,8 +76,22 @@ public class MyriadWebServer {
this.jetty.start();
}
+ public Status getStatus() {
+ if (jetty.isFailed()) {
+ return Status.FAILED;
+ } else if (jetty.isStarted()) {
+ return Status.STARTED;
+ } else if (jetty.isRunning()) {
+ return Status.RUNNING;
+ } else if (jetty.isStopped()) {
+ return Status.STOPPED;
+ } else {
+ return Status.UNKNOWN;
+ }
+ }
+
public void stop() throws Exception {
this.jetty.stop();
this.connector.close();
}
-}
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-myriad/blob/4a6e50c4/myriad-scheduler/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/recovery/MyriadFileSystemRMStateStoreTest.java
----------------------------------------------------------------------
diff --git a/myriad-scheduler/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/recovery/MyriadFileSystemRMStateStoreTest.java b/myriad-scheduler/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/recovery/MyriadFileSystemRMStateStoreTest.java
new file mode 100644
index 0000000..a0a9ed1
--- /dev/null
+++ b/myriad-scheduler/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/recovery/MyriadFileSystemRMStateStoreTest.java
@@ -0,0 +1,69 @@
+package org.apache.hadoop.yarn.server.resourcemanager.recovery;
+
+import static org.junit.Assert.assertTrue;
+
+import org.apache.hadoop.conf.Configuration;
+import org.apache.hadoop.service.Service.STATE;
+import org.apache.hadoop.yarn.server.resourcemanager.rmapp.RMApp;
+import org.apache.hadoop.yarn.server.resourcemanager.rmapp.RMAppState;
+import org.apache.myriad.state.MockDispatcher;
+import org.apache.myriad.state.MockRMApp;
+import org.junit.Test;
+
+/**
+ * Unit tests for MyriadFileSystemRMStateStore
+ */
+public class MyriadFileSystemRMStateStoreTest {
+
+ @Test
+ public void testInit() throws Exception {
+ Configuration conf = getConfiguration();
+ MyriadFileSystemRMStateStore store = new MyriadFileSystemRMStateStore();
+ assertTrue(store.isInState(STATE.NOTINITED));
+ store.init(conf);
+ assertTrue(store.isInState(STATE.INITED));
+ store.startInternal();
+ store.close();
+ }
+
+ @Test
+ public void testStartStop() throws Exception {
+ MyriadFileSystemRMStateStore store = getInitializedStore();
+ store.start();
+ assertTrue(store.isInState(STATE.STARTED));
+ store.stop();
+ assertTrue(store.isInState(STATE.STOPPED));
+ store.close();
+ }
+
+ @Test
+ public void testStoreAndRemoveApplication() throws Exception {
+ MyriadFileSystemRMStateStore store = getInitializedStore();
+ store.start();
+ RMApp appOne = new MockRMApp(0, 0, RMAppState.NEW);
+ RMApp appTwo = new MockRMApp(0, 0, RMAppState.NEW);
+
+ store.storeNewApplication(appOne);
+ store.storeNewApplication(appTwo);
+ store.removeApplication(appOne);
+ store.removeApplication(appTwo);
+ store.close();
+ }
+
+ private MyriadFileSystemRMStateStore getInitializedStore() throws Exception {
+ Configuration conf = getConfiguration();
+ MyriadFileSystemRMStateStore store = new MyriadFileSystemRMStateStore();
+ store.init(conf);
+ store.startInternal();
+ store.loadState();
+ store.loadMyriadState();
+ store.setRMDispatcher(new MockDispatcher());
+ return store;
+ }
+
+ private Configuration getConfiguration() {
+ Configuration conf = new Configuration();
+ conf.set("yarn.resourcemanager.fs.state-store.uri", "file:///tmp/");
+ return conf;
+ }
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-myriad/blob/4a6e50c4/myriad-scheduler/src/test/java/org/apache/myriad/BaseConfigurableTest.java
----------------------------------------------------------------------
diff --git a/myriad-scheduler/src/test/java/org/apache/myriad/BaseConfigurableTest.java b/myriad-scheduler/src/test/java/org/apache/myriad/BaseConfigurableTest.java
new file mode 100644
index 0000000..45443fe
--- /dev/null
+++ b/myriad-scheduler/src/test/java/org/apache/myriad/BaseConfigurableTest.java
@@ -0,0 +1,35 @@
+package org.apache.myriad;
+
+import org.apache.myriad.configuration.MyriadConfiguration;
+import org.junit.Before;
+import org.junit.Test;
+
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.dataformat.yaml.YAMLFactory;
+
+/**
+ * Base class for all JUnit tests that require a MyriadConfiguration object. This class encapsulates the
+ * logic instantiate and configure a MyriadConfiguration object using all yml config files.
+ *
+ */
+public class BaseConfigurableTest {
+ protected MyriadConfiguration cfg;
+ protected MyriadConfiguration cfgWithRole;
+ protected MyriadConfiguration cfgWithDocker;
+
+ @Before
+ public void setUp() throws Exception {
+ ObjectMapper mapper = new ObjectMapper(new YAMLFactory());
+ cfg = mapper.readValue(Thread.currentThread().getContextClassLoader().getResource("myriad-config-test-default.yml"),
+ MyriadConfiguration.class);
+ cfgWithRole = mapper.readValue(Thread.currentThread().getContextClassLoader().getResource("myriad-config-test-default-with-framework-role.yml"),
+ MyriadConfiguration.class);
+ cfgWithDocker = mapper.readValue(Thread.currentThread().getContextClassLoader().getResource("myriad-config-test-default-with-docker-info.yml"),
+ MyriadConfiguration.class);
+ }
+
+ @Test
+ public void testMyriadConfiguration() throws Exception {
+ cfg.getFrameworkName();
+ }
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-myriad/blob/4a6e50c4/myriad-scheduler/src/test/java/org/apache/myriad/MultiBindingsTest.java
----------------------------------------------------------------------
diff --git a/myriad-scheduler/src/test/java/org/apache/myriad/MultiBindingsTest.java b/myriad-scheduler/src/test/java/org/apache/myriad/MultiBindingsTest.java
index b36f32e..e8cb8b0 100644
--- a/myriad-scheduler/src/test/java/org/apache/myriad/MultiBindingsTest.java
+++ b/myriad-scheduler/src/test/java/org/apache/myriad/MultiBindingsTest.java
@@ -18,15 +18,20 @@
package org.apache.myriad;
-import com.google.inject.Guice;
-import com.google.inject.Injector;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
+
+import java.util.List;
import java.util.Map;
+
import org.apache.myriad.scheduler.TaskFactory;
-import org.junit.AfterClass;
import org.junit.BeforeClass;
import org.junit.Test;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
+
+import com.google.common.collect.Lists;
+import com.google.inject.Guice;
+import com.google.inject.Injector;
/**
* Test for Multibindings
@@ -34,22 +39,17 @@ import static org.junit.Assert.assertNotNull;
public class MultiBindingsTest {
private static Injector injector;
+
+ private List<String> keyNames = Lists.newArrayList("nm", "jobhistory", "timelineserver");
@BeforeClass
public static void setUpBeforeClass() throws Exception {
MyriadTestModule myriadModule = new MyriadTestModule();
injector = Guice.createInjector(myriadModule);
-
- }
-
- @AfterClass
- public static void tearDownAfterClass() throws Exception {
}
@Test
public void multiBindingsTest() {
-
-
MultiBindingsUsage myinstance = injector.getInstance(MultiBindingsUsage.class);
Map<String, TaskFactory> taskMap = myinstance.getMap();
@@ -58,12 +58,7 @@ public class MultiBindingsTest {
taskMap = myinstance.getMap();
for (Map.Entry<String, TaskFactory> entry : taskMap.entrySet()) {
- String keyName = entry.getKey();
- TaskFactory taskFactory = entry.getValue();
- System.out.println(taskFactory);
+ assertTrue(keyNames.contains(entry.getKey()));
}
-
-
}
-
-}
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-myriad/blob/4a6e50c4/myriad-scheduler/src/test/java/org/apache/myriad/TestObjectFactory.java
----------------------------------------------------------------------
diff --git a/myriad-scheduler/src/test/java/org/apache/myriad/TestObjectFactory.java b/myriad-scheduler/src/test/java/org/apache/myriad/TestObjectFactory.java
new file mode 100644
index 0000000..c0cf187
--- /dev/null
+++ b/myriad-scheduler/src/test/java/org/apache/myriad/TestObjectFactory.java
@@ -0,0 +1,90 @@
+package org.apache.myriad;
+
+import org.apache.hadoop.conf.Configuration;
+import org.apache.hadoop.yarn.server.resourcemanager.recovery.MyriadFileSystemRMStateStore;
+import org.apache.hadoop.yarn.server.resourcemanager.scheduler.AbstractYarnScheduler;
+import org.apache.hadoop.yarn.server.resourcemanager.scheduler.common.fica.FiCaSchedulerApp;
+import org.apache.hadoop.yarn.server.resourcemanager.scheduler.common.fica.FiCaSchedulerNode;
+import org.apache.mesos.Protos;
+import org.apache.mesos.Protos.FrameworkID;
+import org.apache.mesos.Protos.Offer;
+import org.apache.mesos.Protos.OfferID;
+import org.apache.mesos.Protos.SlaveID;
+import org.apache.myriad.configuration.MyriadConfiguration;
+import org.apache.myriad.scheduler.MockSchedulerDriver;
+import org.apache.myriad.scheduler.MyriadDriver;
+import org.apache.myriad.scheduler.MyriadDriverManager;
+import org.apache.myriad.scheduler.yarn.MyriadCapacityScheduler;
+import org.apache.myriad.scheduler.yarn.interceptor.CompositeInterceptor;
+import org.apache.myriad.scheduler.yarn.interceptor.InterceptorRegistry;
+import org.apache.myriad.state.MockDispatcher;
+import org.apache.myriad.state.SchedulerState;
+import org.apache.myriad.webapp.HttpConnectorProvider;
+import org.apache.myriad.webapp.MyriadWebServer;
+import org.mortbay.jetty.Connector;
+import org.mortbay.jetty.Server;
+import org.mortbay.jetty.servlet.DefaultServlet;
+import org.mortbay.jetty.servlet.ServletHandler;
+import org.mortbay.jetty.servlet.ServletHolder;
+
+import com.google.inject.servlet.GuiceFilter;
+
+/**
+ * Factory for common objects utilized over 1..n Junit tests
+ */
+public class TestObjectFactory {
+ public static SchedulerState getSchedulerState(MyriadConfiguration cfg) {
+ SchedulerState state = new SchedulerState(new MyriadFileSystemRMStateStore());
+ state.setFrameworkId(FrameworkID.newBuilder().setValue("mock-framework").build());
+ return state;
+ }
+
+ public static MyriadDriverManager getMyriadDriverManager() {
+ return new MyriadDriverManager(new MyriadDriver(new MockSchedulerDriver()));
+ }
+
+ public static InterceptorRegistry getInterceptorRegistry() {
+ return new CompositeInterceptor();
+ }
+
+ public static AbstractYarnScheduler<FiCaSchedulerApp, FiCaSchedulerNode> getYarnScheduler() {
+ MyriadCapacityScheduler scheduler = new MyriadCapacityScheduler();
+ return scheduler;
+ }
+
+ public static Server getJettyServer() {
+ Server server = new Server();
+ ServletHandler context = new ServletHandler();
+ ServletHolder holder = new ServletHolder(DefaultServlet.class);
+ holder.setInitParameter("resourceBase", System.getProperty("user.dir"));
+ holder.setInitParameter("dirAllowed", "true");
+ context.setServer(server);
+ context.addServlet(holder);
+ server.setHandler(context);
+
+ return server;
+ }
+
+ public static MyriadWebServer getMyriadWebServer(MyriadConfiguration cfg) {
+ Server server = TestObjectFactory.getJettyServer();
+ HttpConnectorProvider provider = new HttpConnectorProvider(cfg);
+ Connector connector = provider.get();
+ return new MyriadWebServer(server, connector, new GuiceFilter());
+ }
+
+ public static MyriadFileSystemRMStateStore getStateStore(Configuration conf) throws Exception {
+ conf.set("yarn.resourcemanager.fs.state-store.uri", "file:///tmp/");
+ MyriadFileSystemRMStateStore store = new MyriadFileSystemRMStateStore();
+ store.init(conf);
+ store.start();
+ store.loadState();
+ store.setRMDispatcher(new MockDispatcher());
+ return store;
+ }
+
+ public static Offer getOffer(String host, String slaveId, String frameworkId, String offerId) {
+ Protos.SlaveID sid = SlaveID.newBuilder().setValue(slaveId).build();
+ Protos.FrameworkID fid = FrameworkID.newBuilder().setValue(frameworkId).build();
+ return Protos.Offer.newBuilder().setHostname(host).setId(OfferID.newBuilder().setValue(offerId)).setSlaveId(sid).setFrameworkId(fid).build();
+ }
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-myriad/blob/4a6e50c4/myriad-scheduler/src/test/java/org/apache/myriad/api/ArtifactsResourceTest.java
----------------------------------------------------------------------
diff --git a/myriad-scheduler/src/test/java/org/apache/myriad/api/ArtifactsResourceTest.java b/myriad-scheduler/src/test/java/org/apache/myriad/api/ArtifactsResourceTest.java
new file mode 100644
index 0000000..5d7bb75
--- /dev/null
+++ b/myriad-scheduler/src/test/java/org/apache/myriad/api/ArtifactsResourceTest.java
@@ -0,0 +1,51 @@
+package org.apache.myriad.api;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
+
+import java.io.File;
+import javax.ws.rs.core.Response;
+
+import org.apache.myriad.BaseConfigurableTest;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+
+/**
+ * Unit tests for ArtifactsResource
+ */
+public class ArtifactsResourceTest extends BaseConfigurableTest {
+ ArtifactsResource resource;
+ File configFile;
+ File binaryFile;
+
+ @Before
+ public void setUp() throws Exception {
+ super.setUp();
+ configFile = new File("/tmp/myriadEtc");
+ binaryFile = new File("/tmp/myriadBinary");
+ assertTrue(configFile.createNewFile());
+ assertTrue(binaryFile.createNewFile());
+ resource = new ArtifactsResource(cfg);
+ }
+
+ @Test
+ public void testGetConfig() throws Exception {
+ Response res = resource.getConfig();
+ assertEquals(configFile, res.getEntity());
+ assertEquals(200, res.getStatus());
+ }
+
+ @Test
+ public void testGetBinary() throws Exception {
+ Response res = resource.getBinary();
+ assertEquals(binaryFile, res.getEntity());
+ assertEquals(200, res.getStatus());
+ }
+
+ @After
+ public void tearDown() throws Exception {
+ assertTrue(new File("/tmp/myriadEtc").delete());
+ assertTrue(new File("/tmp/myriadBinary").delete());
+ }
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-myriad/blob/4a6e50c4/myriad-scheduler/src/test/java/org/apache/myriad/api/SchedulerStateResourceTest.java
----------------------------------------------------------------------
diff --git a/myriad-scheduler/src/test/java/org/apache/myriad/api/SchedulerStateResourceTest.java b/myriad-scheduler/src/test/java/org/apache/myriad/api/SchedulerStateResourceTest.java
new file mode 100644
index 0000000..e57b128
--- /dev/null
+++ b/myriad-scheduler/src/test/java/org/apache/myriad/api/SchedulerStateResourceTest.java
@@ -0,0 +1,58 @@
+package org.apache.myriad.api;
+
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertEquals;
+
+import org.apache.hadoop.yarn.server.resourcemanager.recovery.MyriadFileSystemRMStateStore;
+import org.apache.mesos.Protos;
+import org.apache.mesos.Protos.FrameworkID;
+import org.apache.mesos.Protos.TaskID;
+import org.apache.myriad.BaseConfigurableTest;
+import org.apache.myriad.api.model.GetSchedulerStateResponse;
+import org.apache.myriad.scheduler.ServiceResourceProfile;
+import org.apache.myriad.scheduler.constraints.LikeConstraint;
+import org.apache.myriad.state.NodeTask;
+import org.apache.myriad.state.SchedulerState;
+import org.junit.Before;
+import org.junit.Test;
+
+/**
+ * Unit tests for SchedulerStateResource
+ */
+public class SchedulerStateResourceTest extends BaseConfigurableTest {
+ SchedulerStateResource resource;
+ TaskID idOne, idTwo, idThree;
+
+ @Before
+ public void setUp() throws Exception {
+ super.setUp();
+ resource = new SchedulerStateResource(cfg, getSchedulerState());
+ }
+
+ private SchedulerState getSchedulerState() throws Exception {
+ SchedulerState state = new SchedulerState(new MyriadFileSystemRMStateStore());
+ idOne = Protos.TaskID.newBuilder().setValue("nt-1").build();
+ idTwo = Protos.TaskID.newBuilder().setValue("nt-2").build();
+ idThree = Protos.TaskID.newBuilder().setValue("nt-3").build();
+
+ state.addTask(idOne, new NodeTask(new ServiceResourceProfile("profile1", 0.2, 1024.0), new LikeConstraint("localhost", "host-[0-9]*.example.com")));
+ state.addTask(idTwo, new NodeTask(new ServiceResourceProfile("profile2", 0.4, 2048.0), new LikeConstraint("localhost", "host-[0-9]*.example.com")));
+ state.addTask(idThree, new NodeTask(new ServiceResourceProfile("profile3", 0.6, 3072.0), new LikeConstraint("localhost", "host-[0-9]*.example.com")));
+
+ state.setFrameworkId(FrameworkID.newBuilder().setValue("mock-framework").build());
+ state.makeTaskActive(idOne);
+ state.makeTaskPending(idTwo);
+ state.makeTaskStaging(idThree);
+
+ return state;
+ }
+
+ @Test
+ public void test() throws Exception {
+ GetSchedulerStateResponse response = resource.getState();
+ assertNotNull(response);
+ assertEquals(1, response.getActiveTasks().size());
+ assertEquals(1, response.getPendingTasks().size());
+ assertEquals(1, response.getStagingTasks().size());
+ }
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-myriad/blob/4a6e50c4/myriad-scheduler/src/test/java/org/apache/myriad/configuration/MyriadConfigurationTest.java
----------------------------------------------------------------------
diff --git a/myriad-scheduler/src/test/java/org/apache/myriad/configuration/MyriadConfigurationTest.java b/myriad-scheduler/src/test/java/org/apache/myriad/configuration/MyriadConfigurationTest.java
index 22df23d..562d128 100644
--- a/myriad-scheduler/src/test/java/org/apache/myriad/configuration/MyriadConfigurationTest.java
+++ b/myriad-scheduler/src/test/java/org/apache/myriad/configuration/MyriadConfigurationTest.java
@@ -21,71 +21,51 @@ package org.apache.myriad.configuration;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.assertNotNull;
+import java.util.Iterator;
import java.util.Map;
+import java.util.Set;
-import org.junit.BeforeClass;
+import org.apache.myriad.BaseConfigurableTest;
import org.junit.Test;
-import com.fasterxml.jackson.databind.ObjectMapper;
-import com.fasterxml.jackson.dataformat.yaml.YAMLFactory;
+import com.google.common.collect.Sets;
/**
- * AuxServices/tasks test
+ * Unit tests for MyriadConfiguration
*/
-public class MyriadConfigurationTest {
+public class MyriadConfigurationTest extends BaseConfigurableTest {
- static MyriadConfiguration cfg;
+ public void testMyriadContainerConfiguration() throws Exception {
+ MyriadContainerConfiguration conf = cfgWithDocker.getContainerInfo().get();
+ assertTrue(conf.getDockerInfo().isPresent());
- @BeforeClass
- public static void setUpBeforeClass() throws Exception {
- ObjectMapper mapper = new ObjectMapper(new YAMLFactory());
- cfg = mapper.readValue(Thread.currentThread().getContextClassLoader().getResource("myriad-config-test-default.yml"),
- MyriadConfiguration.class);
+ MyriadDockerConfiguration dConf = conf.getDockerInfo().get();
+ assertEquals(false, dConf.getForcePullImage());
+ assertEquals("mesos/myriad", dConf.getImage());
- }
-
- @Test
- public void serviceConfigurationTest() throws Exception {
- Map<String, ServiceConfiguration> auxConfigs = cfg.getServiceConfigurations();
-
- assertEquals(auxConfigs.size(), 2);
-
- for (Map.Entry<String, ServiceConfiguration> entry : auxConfigs.entrySet()) {
- String taskName = entry.getKey();
- ServiceConfiguration config = entry.getValue();
- String outTaskname = config.getTaskName();
- assertEquals(taskName, outTaskname);
+ assertNotNull(conf.getVolumes());
+
+ Set<String> keys = Sets.newHashSet("hostPath", "containerPath", "mode");
+ Set<String> modes = Sets.newHashSet("RO", "RW");
+ Iterator<Map<String, String>> iter = conf.getVolumes().iterator();
+
+ while (iter.hasNext()) {
+ Map<String, String> mcConf = iter.next();
+ assertEquals(keys, mcConf.keySet());
+ assertTrue(modes.contains(mcConf.get("mode")));
}
}
-
+
@Test
- public void coreConfigurationTest() throws Exception {
- assertEquals("MyriadTest", cfg.getFrameworkName());
-
- //authorization parameters
+ public void testRoles() throws Exception {
+ assertEquals("test", cfgWithRole.getFrameworkRole());
assertEquals("*", cfg.getFrameworkRole());
- assertEquals("hduser", cfg.getFrameworkUser().get());
- assertEquals("root", cfg.getFrameworkSuperUser().get());
-
- //ports and directory paths
- assertEquals("10.0.2.15:5050", cfg.getMesosMaster());
- assertEquals("/usr/local/lib/libmesos.so", cfg.getNativeLibrary());
- assertEquals(new Integer(8192), cfg.getRestApiPort());
- assertEquals("10.0.2.15:2181", cfg.getZkServers());
-
- //timeouts
- assertEquals(new Double(44200000), cfg.getFrameworkFailoverTimeout());
- assertEquals(new Integer(25000), cfg.getZkTimeout());
-
- //checkpoints
- assertEquals(false, cfg.isCheckpoint());
- assertEquals(true, cfg.isHAEnabled());
- assertEquals(false, cfg.isRebalancerEnabled());
}
-
+
@Test
- public void executorConfigurationTest() throws Exception {
+ public void testExecutorConfiguration() throws Exception {
MyriadExecutorConfiguration conf = cfg.getMyriadExecutorConfiguration();
assertEquals(new Double(256), conf.getJvmMaxMemoryMB());
@@ -94,7 +74,18 @@ public class MyriadConfigurationTest {
}
@Test
- public void nodeManagerConfigurationTest() throws Exception {
+ public void testServiceConfigurations() throws Exception {
+ Map<String, ServiceConfiguration> confs = cfg.getServiceConfigurations();
+ Set<String> configKeys = Sets.newHashSet("jobhistory", "timelineserver");
+
+ assertEquals(configKeys, confs.keySet());
+ ServiceConfiguration sConfig = confs.get("jobhistory");
+ assertEquals(new Double(1.0), sConfig.getCpus());
+ assertEquals("jobhistory", sConfig.getTaskName());
+ }
+
+ @Test
+ public void testNodeManagerConfiguration() throws Exception {
NodeManagerConfiguration config = cfg.getNodeManagerConfiguration();
assertFalse(config.getCgroups());
@@ -103,7 +94,7 @@ public class MyriadConfigurationTest {
}
@Test
- public void profilesConfigurationTest() throws Exception {
+ public void testProfilesConfiguration() throws Exception {
Map<String, Map<String, String>> profiles = cfg.getProfiles();
for (Map.Entry<String, Map<String, String>> profile : profiles.entrySet()) {
@@ -112,9 +103,9 @@ public class MyriadConfigurationTest {
}
private boolean validateProfile(Map.Entry<String, Map<String, String>> entry) {
- String key = entry.getKey();
+ String key = entry.getKey();
Map<String, String> value = entry.getValue();
-
+
switch (key) {
case "small" : {
return value.get("cpu").equals("1") && value.get("mem").equals("1100");
http://git-wip-us.apache.org/repos/asf/incubator-myriad/blob/4a6e50c4/myriad-scheduler/src/test/java/org/apache/myriad/health/HealthCheckUtilsTest.java
----------------------------------------------------------------------
diff --git a/myriad-scheduler/src/test/java/org/apache/myriad/health/HealthCheckUtilsTest.java b/myriad-scheduler/src/test/java/org/apache/myriad/health/HealthCheckUtilsTest.java
new file mode 100644
index 0000000..e403f90
--- /dev/null
+++ b/myriad-scheduler/src/test/java/org/apache/myriad/health/HealthCheckUtilsTest.java
@@ -0,0 +1,27 @@
+package org.apache.myriad.health;
+
+import java.net.ServerSocket;
+
+import org.junit.Test;
+
+/**
+ * Unit tests for HealthCheckUtils class
+ */
+public class HealthCheckUtilsTest {
+ @Test(expected = IllegalArgumentException.class)
+ public void testInvalidHost() throws Exception {
+ HealthCheckUtils.checkHostPort("localhost-8000");
+ }
+
+ @Test(expected = IllegalArgumentException.class)
+ public void testInvalidPort() throws Exception {
+ HealthCheckUtils.checkHostPort("localhost:ab12");
+ }
+
+ @Test
+ public void testValidHostPortString() throws Exception {
+ ServerSocket socket = new ServerSocket(8000);
+ HealthCheckUtils.checkHostPort("localhost:8000");
+ socket.close();
+ }
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-myriad/blob/4a6e50c4/myriad-scheduler/src/test/java/org/apache/myriad/health/MesosDriverHealthCheckTest.java
----------------------------------------------------------------------
diff --git a/myriad-scheduler/src/test/java/org/apache/myriad/health/MesosDriverHealthCheckTest.java b/myriad-scheduler/src/test/java/org/apache/myriad/health/MesosDriverHealthCheckTest.java
new file mode 100644
index 0000000..cebf2c7
--- /dev/null
+++ b/myriad-scheduler/src/test/java/org/apache/myriad/health/MesosDriverHealthCheckTest.java
@@ -0,0 +1,69 @@
+package org.apache.myriad.health;
+
+import static org.junit.Assert.assertEquals;
+
+import org.apache.myriad.scheduler.MockSchedulerDriver;
+import org.apache.myriad.scheduler.MyriadDriver;
+import org.apache.myriad.scheduler.MyriadDriverManager;
+import org.junit.Test;
+
+import com.codahale.metrics.health.HealthCheck.Result;
+
+/**
+ * Unit tests for MesosDriverHealthCheck
+ */
+public class MesosDriverHealthCheckTest {
+
+ private static class HealthCheckTestTuple {
+ MyriadDriverManager manager;
+ MesosDriverHealthCheck checker;
+
+ private HealthCheckTestTuple(MyriadDriverManager manager) {
+ this.manager = manager;
+ this.checker = new MesosDriverHealthCheck(manager);
+ }
+
+ public MyriadDriverManager getManager() {
+ return manager;
+ }
+
+ public MesosDriverHealthCheck getChecker() {
+ return checker;
+ }
+ }
+
+ private HealthCheckTestTuple getTestStack() {
+ MyriadDriver driver = new MyriadDriver(new MockSchedulerDriver());
+ return new HealthCheckTestTuple(new MyriadDriverManager(driver));
+ }
+
+ @Test
+ public void testCheckHealthyResult() throws Exception {
+ HealthCheckTestTuple tuple = getTestStack();
+ MyriadDriverManager manager = tuple.getManager();
+ MesosDriverHealthCheck checker = tuple.getChecker();
+ manager.startDriver();
+ assertEquals(Result.healthy(), checker.check());
+ manager.stopDriver(false);
+ }
+
+ @Test
+ public void testCheckStoppedDriverUnhealthyResult() throws Exception {
+ HealthCheckTestTuple tuple = getTestStack();
+ MyriadDriverManager manager = tuple.getManager();
+ MesosDriverHealthCheck checker = tuple.getChecker();
+ manager.startDriver();
+ manager.stopDriver(false);
+ assertEquals(Result.unhealthy("Driver status: DRIVER_STOPPED"), checker.check());
+ }
+
+ @Test
+ public void testCheckAbortedDriverUnhealthyResult() throws Exception {
+ HealthCheckTestTuple tuple = getTestStack();
+ MyriadDriverManager manager = tuple.getManager();
+ MesosDriverHealthCheck checker = tuple.getChecker();
+ manager.startDriver();
+ manager.abortDriver();
+ assertEquals(Result.unhealthy("Driver status: DRIVER_ABORTED"), checker.check());
+ }
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-myriad/blob/4a6e50c4/myriad-scheduler/src/test/java/org/apache/myriad/scheduler/MockSchedulerDriver.java
----------------------------------------------------------------------
diff --git a/myriad-scheduler/src/test/java/org/apache/myriad/scheduler/MockSchedulerDriver.java b/myriad-scheduler/src/test/java/org/apache/myriad/scheduler/MockSchedulerDriver.java
new file mode 100644
index 0000000..2a60e58
--- /dev/null
+++ b/myriad-scheduler/src/test/java/org/apache/myriad/scheduler/MockSchedulerDriver.java
@@ -0,0 +1,124 @@
+package org.apache.myriad.scheduler;
+
+import java.util.Collection;
+
+import org.apache.mesos.Protos;
+import org.apache.mesos.Protos.ExecutorID;
+import org.apache.mesos.Protos.Filters;
+import org.apache.mesos.Protos.Offer.Operation;
+import org.apache.mesos.Protos.OfferID;
+import org.apache.mesos.Protos.Request;
+import org.apache.mesos.Protos.SlaveID;
+import org.apache.mesos.Protos.Status;
+import org.apache.mesos.Protos.TaskID;
+import org.apache.mesos.Protos.TaskInfo;
+import org.apache.mesos.Protos.TaskStatus;
+import org.apache.mesos.SchedulerDriver;
+
+/**
+ * Mock SchedulerDriver implementation for JUnit tests
+ */
+public class MockSchedulerDriver implements SchedulerDriver {
+
+ @Override
+ public Status start() {
+ return Protos.Status.DRIVER_RUNNING;
+ }
+
+ @Override
+ public Status stop(boolean failover) {
+ return Protos.Status.DRIVER_STOPPED;
+ }
+
+ @Override
+ public Status stop() {
+ return Protos.Status.DRIVER_STOPPED;
+ }
+
+ @Override
+ public Status abort() {
+ return Protos.Status.DRIVER_ABORTED;
+ }
+
+ @Override
+ public Status join() {
+ return Protos.Status.DRIVER_RUNNING;
+ }
+
+ @Override
+ public Status run() {
+ return Protos.Status.DRIVER_RUNNING;
+ }
+
+ @Override
+ public Status requestResources(Collection<Request> requests) {
+ return null;
+ }
+
+ @Override
+ public Status launchTasks(Collection<OfferID> offerIds, Collection<TaskInfo> tasks, Filters filters) {
+ return null;
+ }
+
+ @Override
+ public Status launchTasks(Collection<OfferID> offerIds, Collection<TaskInfo> tasks) {
+ return null;
+ }
+
+ @Override
+ @SuppressWarnings("deprecation")
+ public Status launchTasks(OfferID offerId, Collection<TaskInfo> tasks, Filters filters) {
+ return null;
+ }
+
+ @Override
+ @SuppressWarnings("deprecation")
+ public Status launchTasks(OfferID offerId, Collection<TaskInfo> tasks) {
+ return null;
+ }
+
+ @Override
+ public Status killTask(TaskID taskId) {
+ return null;
+ }
+
+ @Override
+ public Status acceptOffers(Collection<OfferID> offerIds, Collection<Operation> operations, Filters filters) {
+ return null;
+ }
+
+ @Override
+ public Status declineOffer(OfferID offerId, Filters filters) {
+ return null;
+ }
+
+ @Override
+ public Status declineOffer(OfferID offerId) {
+ return null;
+ }
+
+ @Override
+ public Status reviveOffers() {
+ return null;
+ }
+
+ @Override
+ public Status suppressOffers() {
+ return null;
+ }
+
+ @Override
+ public Status acknowledgeStatusUpdate(TaskStatus status) {
+ return null;
+ }
+
+ @Override
+ public Status sendFrameworkMessage(ExecutorID executorId, SlaveID slaveId, byte[] data) {
+ return null;
+ }
+
+ @Override
+ public Status reconcileTasks(Collection<TaskStatus> statuses) {
+ return null;
+ }
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-myriad/blob/4a6e50c4/myriad-scheduler/src/test/java/org/apache/myriad/scheduler/MyriadDriverTest.java
----------------------------------------------------------------------
diff --git a/myriad-scheduler/src/test/java/org/apache/myriad/scheduler/MyriadDriverTest.java b/myriad-scheduler/src/test/java/org/apache/myriad/scheduler/MyriadDriverTest.java
new file mode 100644
index 0000000..d384150
--- /dev/null
+++ b/myriad-scheduler/src/test/java/org/apache/myriad/scheduler/MyriadDriverTest.java
@@ -0,0 +1,43 @@
+package org.apache.myriad.scheduler;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
+
+import org.apache.mesos.Protos;
+import org.apache.mesos.Protos.Status;
+import org.apache.mesos.SchedulerDriver;
+import org.junit.Test;
+
+/**
+ * Unit test for MyriadDriver class
+ */
+public class MyriadDriverTest {
+ @Test
+ public void testStart() throws Exception {
+ MyriadDriver driver = new MyriadDriver(new MockSchedulerDriver());
+ Status status = driver.start();
+ assertEquals(Protos.Status.DRIVER_RUNNING_VALUE, status.getNumber());
+ }
+
+ @Test
+ public void testAbort() throws Exception {
+ MyriadDriver driver = new MyriadDriver(new MockSchedulerDriver());
+ Status status = driver.abort();
+ assertEquals(Protos.Status.DRIVER_ABORTED_VALUE, status.getNumber());
+ }
+
+ @Test
+ public void testStop() throws Exception {
+ MyriadDriver driver = new MyriadDriver(new MockSchedulerDriver());
+ Status status = driver.stop(true);
+ assertEquals(Protos.Status.DRIVER_STOPPED_VALUE, status.getNumber());
+ }
+
+ @Test
+ public void testGetDriver() throws Exception {
+ MyriadDriver driver = new MyriadDriver(new MockSchedulerDriver());
+ SchedulerDriver sDriver = driver.getDriver();
+
+ assertTrue(sDriver instanceof MockSchedulerDriver);
+ }
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-myriad/blob/4a6e50c4/myriad-scheduler/src/test/java/org/apache/myriad/scheduler/MyriadOperationsTest.java
----------------------------------------------------------------------
diff --git a/myriad-scheduler/src/test/java/org/apache/myriad/scheduler/MyriadOperationsTest.java b/myriad-scheduler/src/test/java/org/apache/myriad/scheduler/MyriadOperationsTest.java
new file mode 100644
index 0000000..6c039dd
--- /dev/null
+++ b/myriad-scheduler/src/test/java/org/apache/myriad/scheduler/MyriadOperationsTest.java
@@ -0,0 +1,112 @@
+package org.apache.myriad.scheduler;
+
+import static org.junit.Assert.assertEquals;
+
+import org.apache.hadoop.conf.Configuration;
+import org.apache.hadoop.yarn.event.Dispatcher;
+import org.apache.hadoop.yarn.server.resourcemanager.RMContext;
+import org.apache.hadoop.yarn.server.resourcemanager.ahs.RMApplicationHistoryWriter;
+import org.apache.hadoop.yarn.server.resourcemanager.rmapp.attempt.AMLivelinessMonitor;
+import org.apache.hadoop.yarn.server.resourcemanager.scheduler.AbstractYarnScheduler;
+import org.apache.hadoop.yarn.server.resourcemanager.scheduler.common.fica.FiCaSchedulerApp;
+import org.apache.hadoop.yarn.server.resourcemanager.scheduler.common.fica.FiCaSchedulerNode;
+import org.apache.hadoop.yarn.server.resourcemanager.security.RMDelegationTokenSecretManager;
+import org.apache.mesos.Protos.FrameworkID;
+import org.apache.myriad.BaseConfigurableTest;
+import org.apache.myriad.TestObjectFactory;
+import org.apache.myriad.configuration.MyriadBadConfigurationException;
+import org.apache.myriad.policy.LeastAMNodesFirstPolicy;
+import org.apache.myriad.scheduler.constraints.Constraint;
+import org.apache.myriad.scheduler.constraints.LikeConstraint;
+import org.apache.myriad.scheduler.yarn.interceptor.CompositeInterceptor;
+import org.apache.myriad.state.MockDispatcher;
+import org.apache.myriad.state.MockRMContext;
+import org.apache.myriad.state.SchedulerState;
+import org.apache.myriad.webapp.MyriadWebServer;
+import org.junit.Before;
+import org.junit.Test;
+
+/**
+ * Unit tests for MyriadOperations class
+ */
+public class MyriadOperationsTest extends BaseConfigurableTest {
+ MyriadOperations ops;
+ ServiceResourceProfile small;
+ Constraint constraint = new LikeConstraint("localhost", "host-[0-9]*.example.com");
+ SchedulerState sState;
+
+ @Before
+ public void setUp() throws Exception {
+ super.setUp();
+ AbstractYarnScheduler<FiCaSchedulerApp, FiCaSchedulerNode> scheduler = TestObjectFactory.getYarnScheduler();
+ //sState = new SchedulerState(new MyriadFileSystemRMStateStore());
+ sState = TestObjectFactory.getSchedulerState(cfg);
+ sState.setFrameworkId(FrameworkID.newBuilder().setValue("mock-framework").build());
+
+ MyriadDriverManager manager = TestObjectFactory.getMyriadDriverManager();
+ MyriadWebServer webServer = TestObjectFactory.getMyriadWebServer(cfg);
+ CompositeInterceptor registry = new CompositeInterceptor();
+ LeastAMNodesFirstPolicy policy = new LeastAMNodesFirstPolicy(registry, scheduler, sState);
+
+ manager.startDriver();
+
+ ops = new MyriadOperations(cfg, sState, policy, manager, webServer, generateRMContext(scheduler));
+ generateProfiles();
+ }
+
+ private void generateProfiles() {
+ small = new ServiceResourceProfile("small", 0.1, 512.0);
+ }
+
+ private RMContext generateRMContext(AbstractYarnScheduler<FiCaSchedulerApp, FiCaSchedulerNode> scheduler) throws Exception {
+ Configuration conf = new Configuration();
+ MockRMContext context = null;
+ Dispatcher dispatcher = new MockDispatcher();
+
+ RMApplicationHistoryWriter rmApplicationHistoryWriter = new RMApplicationHistoryWriter();
+ AMLivelinessMonitor amLivelinessMonitor = new AMLivelinessMonitor(dispatcher);
+ AMLivelinessMonitor amFinishingMonitor = new AMLivelinessMonitor(dispatcher);
+ RMDelegationTokenSecretManager delegationTokenSecretManager = new RMDelegationTokenSecretManager(1, 1, 1, 1, context);
+
+ context = new MockRMContext();
+ context.setStateStore(TestObjectFactory.getStateStore(conf));
+ context.setAmLivelinessMonitor(amLivelinessMonitor);
+ context.setAmFinishingMonitor(amFinishingMonitor);
+ context.setRMApplicationHistoryWriter(rmApplicationHistoryWriter);
+ context.setRMDelegationTokenSecretManager(delegationTokenSecretManager);
+ return context;
+ }
+
+ @Test
+ public void testFlexUpAndFlexDownCluster() throws Exception {
+ assertEquals(0, sState.getPendingTaskIds().size());
+ ops.flexUpCluster(small, 1, constraint);
+ assertEquals(1, sState.getPendingTaskIds().size());
+ ops.flexDownCluster(small, constraint, 1);
+ assertEquals(0, sState.getPendingTaskIds().size());
+ }
+
+ @Test
+ public void testFlexUpAndFlexDownService() throws Exception {
+ ops.flexUpAService(1, "jobhistory");
+ assertEquals(1, sState.getPendingTasksByType("jobhistory").size());
+ ops.flexDownAService(1, "jobhistory");
+ assertEquals(0, sState.getPendingTasksByType("jobhistory").size());
+ }
+
+ @Test(expected = MyriadBadConfigurationException.class)
+ public void testFlexUpAServiceOverMaxInstances() throws Exception {
+ ops.flexUpAService(2, "jobhistory");
+ }
+
+ @Test
+ public void testGetFlexibleInstances() throws Exception {
+ ops.flexUpAService(1, "jobhistory");
+ assertEquals(1, ops.getFlexibleInstances("jobhistory").intValue());
+ }
+
+ @Test
+ public void testShutdownCluster() throws Exception {
+ ops.shutdownFramework();
+ }
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-myriad/blob/4a6e50c4/myriad-scheduler/src/test/java/org/apache/myriad/scheduler/NMProfileManagerTest.java
----------------------------------------------------------------------
diff --git a/myriad-scheduler/src/test/java/org/apache/myriad/scheduler/NMProfileManagerTest.java b/myriad-scheduler/src/test/java/org/apache/myriad/scheduler/NMProfileManagerTest.java
new file mode 100644
index 0000000..a0aab74
--- /dev/null
+++ b/myriad-scheduler/src/test/java/org/apache/myriad/scheduler/NMProfileManagerTest.java
@@ -0,0 +1,63 @@
+package org.apache.myriad.scheduler;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
+import org.junit.Test;
+
+/**
+ * Unit test cases for NMProfileManager
+ */
+public class NMProfileManagerTest {
+ private NMProfileManager getNMProfileManager() {
+ NMProfileManager manager = new NMProfileManager();
+ NMProfile profile1 = new NMProfile("profile1", 1L, 512L);
+ NMProfile profile2 = new NMProfile("profile2", 2L, 1024L);
+ NMProfile profile3 = new NMProfile("profile3", 3L, 2048L);
+ NMProfile profile4 = new NMProfile("profile4", 4L, 3072L);
+ NMProfile profile5 = new NMProfile("profile5", 5L, 4096L);
+
+ manager.add(profile1);
+ manager.add(profile2);
+ manager.add(profile3);
+ manager.add(profile4);
+ manager.add(profile5);
+
+ return manager;
+ }
+
+ @Test
+ public void testAdd() throws Exception {
+ NMProfileManager manager = this.getNMProfileManager();
+ assertEquals(5, manager.numberOfProfiles());
+ }
+
+ @Test
+ public void testRetrieval() throws Exception {
+ NMProfileManager manager = this.getNMProfileManager();
+ assertEquals("profile1", manager.get("profile1").getName());
+ assertEquals("profile2", manager.get("profile2").getName());
+ assertEquals("profile3", manager.get("profile3").getName());
+ assertEquals("profile4", manager.get("profile4").getName());
+ assertEquals("profile5", manager.get("profile5").getName());
+ }
+
+ @Test
+ public void testExists() throws Exception {
+ NMProfileManager manager = this.getNMProfileManager();
+ assertTrue(manager.exists("profile1"));
+ assertTrue(manager.exists("profile2"));
+ assertTrue(manager.exists("profile3"));
+ assertTrue(manager.exists("profile4"));
+ assertTrue(manager.exists("profile5"));
+ }
+ @Test
+ public void testToString() throws Exception {
+ NMProfileManager manager = this.getNMProfileManager();
+ String toString = manager.toString();
+ assertTrue(toString.contains("\"name\":\"profile1\",\"cpus\":1,\"memory\":512"));
+ assertTrue(toString.contains("\"name\":\"profile2\",\"cpus\":2,\"memory\":1024"));
+ assertTrue(toString.contains("\"name\":\"profile3\",\"cpus\":3,\"memory\":2048"));
+ assertTrue(toString.contains("\"name\":\"profile4\",\"cpus\":4,\"memory\":3072"));
+ assertTrue(toString.contains("\"name\":\"profile5\",\"cpus\":5,\"memory\":4096"));
+ }
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-myriad/blob/4a6e50c4/myriad-scheduler/src/test/java/org/apache/myriad/scheduler/ServiceResourceProfileTest.java
----------------------------------------------------------------------
diff --git a/myriad-scheduler/src/test/java/org/apache/myriad/scheduler/ServiceResourceProfileTest.java b/myriad-scheduler/src/test/java/org/apache/myriad/scheduler/ServiceResourceProfileTest.java
new file mode 100644
index 0000000..72e0092
--- /dev/null
+++ b/myriad-scheduler/src/test/java/org/apache/myriad/scheduler/ServiceResourceProfileTest.java
@@ -0,0 +1,31 @@
+package org.apache.myriad.scheduler;
+
+import org.junit.Assert;
+import org.junit.Before;
+import org.junit.Test;
+
+/**
+ * Unit test cases for ServiceResourceProfile
+ *
+ */
+public class ServiceResourceProfileTest {
+ ServiceResourceProfile profile;
+
+ @Before
+ public void setUp() throws Exception {
+ profile = new ServiceResourceProfile("ServiceResourceProfile", 0.1, 1024.0, 0.1, 512.0);
+ }
+
+ @Test
+ public void testRequestedResources() throws Exception {
+ Assert.assertEquals(new Double(0.1), profile.getCpus());
+ Assert.assertEquals(new Double(1024.0), profile.getMemory());
+ Assert.assertEquals(new Double(0.1), profile.getExecutorCpu());
+ Assert.assertEquals(new Double(512.0), profile.getExecutorMemory());
+ }
+
+ @Test
+ public void testName() throws Exception {
+ Assert.assertEquals("ServiceResourceProfile", profile.getName());
+ }
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-myriad/blob/4a6e50c4/myriad-scheduler/src/test/java/org/apache/myriad/scheduler/TaskConstraintsManagerTest.java
----------------------------------------------------------------------
diff --git a/myriad-scheduler/src/test/java/org/apache/myriad/scheduler/TaskConstraintsManagerTest.java b/myriad-scheduler/src/test/java/org/apache/myriad/scheduler/TaskConstraintsManagerTest.java
new file mode 100644
index 0000000..94946ce
--- /dev/null
+++ b/myriad-scheduler/src/test/java/org/apache/myriad/scheduler/TaskConstraintsManagerTest.java
@@ -0,0 +1,32 @@
+package org.apache.myriad.scheduler;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
+
+import org.apache.myriad.BaseConfigurableTest;
+import org.junit.Before;
+import org.junit.Test;
+
+/**
+ * Unit tests for TaskConstraintsManager
+ */
+public class TaskConstraintsManagerTest extends BaseConfigurableTest {
+ TaskConstraintsManager manager = new TaskConstraintsManager();
+
+ @Before
+ public void setUp() throws Exception {
+ super.setUp();
+ manager.addTaskConstraints("jobhistory", new ServiceTaskConstraints(cfg, "jobhistory"));
+ }
+
+ @Test
+ public void testAddConstraints() throws Exception {
+ assertTrue(manager.exists("jobhistory"));
+ }
+
+ @Test
+ public void testGetConstraints() throws Exception {
+ TaskConstraints tCon = manager.getConstraints("jobhistory");
+ assertEquals(3, tCon.portsCount());
+ }
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-myriad/blob/4a6e50c4/myriad-scheduler/src/test/java/org/apache/myriad/scheduler/TestServiceCommandLine.java
----------------------------------------------------------------------
diff --git a/myriad-scheduler/src/test/java/org/apache/myriad/scheduler/TestServiceCommandLine.java b/myriad-scheduler/src/test/java/org/apache/myriad/scheduler/TestServiceCommandLine.java
index e49c19c..87aee56 100644
--- a/myriad-scheduler/src/test/java/org/apache/myriad/scheduler/TestServiceCommandLine.java
+++ b/myriad-scheduler/src/test/java/org/apache/myriad/scheduler/TestServiceCommandLine.java
@@ -18,24 +18,17 @@
*/
package org.apache.myriad.scheduler;
-import com.fasterxml.jackson.databind.ObjectMapper;
-import com.fasterxml.jackson.dataformat.yaml.YAMLFactory;
+import static org.junit.Assert.assertTrue;
+
import org.apache.mesos.Protos.CommandInfo;
-import org.apache.myriad.configuration.MyriadConfiguration;
+import org.apache.myriad.BaseConfigurableTest;
import org.apache.myriad.scheduler.TaskFactory.NMTaskFactoryImpl;
-import org.junit.AfterClass;
-import org.junit.BeforeClass;
import org.junit.Test;
-import static org.junit.Assert.assertTrue;
-
/**
* Class to test CommandLine generation
*/
-public class TestServiceCommandLine {
-
- static MyriadConfiguration cfg;
-
+public class TestServiceCommandLine extends BaseConfigurableTest {
static String toJHSCompare =
"echo \" sudo tar -zxpf hadoop-2.7.0.tar.gz && sudo cp conf /usr/local/hadoop/etc/hadoop/yarn-site.xml; " +
"export TASK_DIR=`basename $PWD`; sudo chmod +wx /sys/fs/cgroup/cpu/mesos/$TASK_DIR;" +
@@ -44,18 +37,6 @@ public class TestServiceCommandLine {
static String toCompare =
"echo \" sudo tar -zxpf hadoop-2.7.0.tar.gz && sudo cp conf /usr/local/hadoop/etc/hadoop/yarn-site.xml;";
- @BeforeClass
- public static void setUpBeforeClass() throws Exception {
- ObjectMapper mapper = new ObjectMapper(new YAMLFactory());
- cfg = mapper.readValue(Thread.currentThread().getContextClassLoader().getResource("myriad-config-test-default.yml"),
- MyriadConfiguration.class);
-
- }
-
- @AfterClass
- public static void tearDownAfterClass() throws Exception {
- }
-
@Test
public void testJHSCommandLineGeneration() throws Exception {
ServiceTaskFactoryImpl jhs = new ServiceTaskFactoryImpl(cfg, null);
http://git-wip-us.apache.org/repos/asf/incubator-myriad/blob/4a6e50c4/myriad-scheduler/src/test/java/org/apache/myriad/scheduler/TestTaskUtils.java
----------------------------------------------------------------------
diff --git a/myriad-scheduler/src/test/java/org/apache/myriad/scheduler/TestTaskUtils.java b/myriad-scheduler/src/test/java/org/apache/myriad/scheduler/TestTaskUtils.java
index 06fa698..29d7691 100644
--- a/myriad-scheduler/src/test/java/org/apache/myriad/scheduler/TestTaskUtils.java
+++ b/myriad-scheduler/src/test/java/org/apache/myriad/scheduler/TestTaskUtils.java
@@ -17,48 +17,25 @@
*/
package org.apache.myriad.scheduler;
-import com.fasterxml.jackson.databind.ObjectMapper;
-import com.fasterxml.jackson.dataformat.yaml.YAMLFactory;
-import com.google.common.collect.Range;
-import com.google.common.collect.Ranges;
-import com.google.gson.Gson;
-import com.google.gson.GsonBuilder;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
+
import org.apache.mesos.Protos;
+import org.apache.myriad.BaseConfigurableTest;
import org.apache.myriad.configuration.MyriadBadConfigurationException;
-import org.apache.myriad.configuration.MyriadConfiguration;
-import org.junit.AfterClass;
-import org.junit.BeforeClass;
import org.junit.Test;
-import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.fail;
+import com.google.common.collect.Range;
+import com.google.common.collect.Ranges;
+import com.google.gson.Gson;
+import com.google.gson.GsonBuilder;
/**
* Tests for TaskUtils
*/
-public class TestTaskUtils {
-
- static MyriadConfiguration cfg;
- static MyriadConfiguration cfgWithRole;
- static MyriadConfiguration cfgWithDocker;
+public class TestTaskUtils extends BaseConfigurableTest {
static double epsilon = .0001;
- @BeforeClass
- public static void setUpBeforeClass() throws Exception {
- ObjectMapper mapper = new ObjectMapper(new YAMLFactory());
- cfg = mapper.readValue(Thread.currentThread().getContextClassLoader().getResource("myriad-config-test-default.yml"),
- MyriadConfiguration.class);
- cfgWithRole = mapper.readValue(Thread.currentThread().getContextClassLoader().getResource("myriad-config-test-default-with-framework-role.yml"),
- MyriadConfiguration.class);
- cfgWithDocker = mapper.readValue(Thread.currentThread().getContextClassLoader().getResource("myriad-config-test-default-with-docker-info.yml"),
- MyriadConfiguration.class);
-
- }
-
- @AfterClass
- public static void tearDownAfterClass() throws Exception {
- }
-
@Test
public void testGetResource() {
TaskUtils taskUtils = new TaskUtils(cfg);