Skip to content

Commit dce17ea

Browse files
zmalikZain Malik
authored andcommitted
Add test for the Unavailable offer
1 parent 2facb7a commit dce17ea

File tree

2 files changed

+45
-4
lines changed

2 files changed

+45
-4
lines changed

src/main/scala/org/apache/mesos/chronos/scheduler/mesos/AvailabilityChecker.scala

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,7 @@ object AvailabilityChecker {
1212
private[this] val log = Logger.getLogger(getClass.getName)
1313

1414
def checkAvailability(offer: Protos.Offer): Boolean = {
15-
var unavailability = offer.hasUnavailability
16-
var now = System.nanoTime()
15+
val now = System.nanoTime()
1716
if (offer.hasUnavailability && offer.getUnavailability.hasStart) {
1817
val start = offer.getUnavailability.getStart.getNanoseconds
1918
if (now.>=(start)) {

src/test/scala/org/apache/mesos/chronos/scheduler/mesos/MesosJobFrameworkSpec.scala

Lines changed: 44 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ package org.apache.mesos.chronos.scheduler.mesos
22

33
import mesosphere.mesos.protos._
44
import mesosphere.mesos.util.FrameworkIdUtil
5-
import org.apache.mesos.Protos.Offer
5+
import org.apache.mesos.Protos.{DurationInfo, Offer, TimeInfo, Unavailability}
66
import org.apache.mesos.chronos.ChronosTestHelper._
77
import org.apache.mesos.chronos.scheduler.jobs.{BaseJob, JobScheduler, MockJobUtils, TaskManager}
88
import org.apache.mesos.{Protos, SchedulerDriver}
@@ -76,6 +76,33 @@ class MesosJobFrameworkSpec extends SpecificationWithJUnit with Mockito {
7676
there was one(mockSchedulerDriver).declineOffer(OfferID("1"), Protos.Filters.getDefaultInstance)
7777
}
7878

79+
"Reject unavailable offer" in {
80+
import mesosphere.mesos.protos.Implicits._
81+
82+
import scala.collection.JavaConverters._
83+
84+
val mockDriverFactory = MockJobUtils.mockDriverFactory
85+
val mockSchedulerDriver = mockDriverFactory.get
86+
87+
val mesosJobFramework = spy(
88+
new MesosJobFramework(
89+
mockDriverFactory,
90+
mock[JobScheduler],
91+
mock[TaskManager],
92+
makeConfig(),
93+
mock[FrameworkIdUtil],
94+
mock[MesosTaskBuilder],
95+
mock[MesosOfferReviver]))
96+
97+
val tasks = mutable.Buffer[(String, BaseJob, Offer)]()
98+
doReturn(tasks).when(mesosJobFramework).generateLaunchableTasks(any)
99+
100+
val offer: Offer = makeUnavailableOffer
101+
mesosJobFramework.resourceOffers(mockSchedulerDriver, Seq[Protos.Offer](offer).asJava)
102+
103+
there was one(mockSchedulerDriver).declineOffer(OfferID("1"), Protos.Filters.getDefaultInstance)
104+
}
105+
79106
"Reject unused offers with default RefuseSeconds if --decline_offer_duration is not set" in {
80107
import mesosphere.mesos.protos.Implicits._
81108

@@ -176,6 +203,22 @@ class MesosJobFrameworkSpec extends SpecificationWithJUnit with Mockito {
176203
}
177204

178205
private[this] def makeBasicOffer: Offer = {
206+
207+
makeBasicOfferBuilder
208+
.build()
209+
}
210+
211+
private[this] def makeUnavailableOffer: Offer = {
212+
213+
makeBasicOfferBuilder.setUnavailability(
214+
Unavailability.newBuilder()
215+
.setStart(TimeInfo.newBuilder().setNanoseconds(System.nanoTime()))
216+
.setDuration(DurationInfo.newBuilder().setNanoseconds(-1l))
217+
.build())
218+
.build()
219+
}
220+
221+
private[this] def makeBasicOfferBuilder: Offer.Builder = {
179222
import mesosphere.mesos.protos.Implicits._
180223

181224
Protos.Offer.newBuilder()
@@ -186,7 +229,6 @@ class MesosJobFrameworkSpec extends SpecificationWithJUnit with Mockito {
186229
.addResources(ScalarResource(Resource.CPUS, 1, "*"))
187230
.addResources(ScalarResource(Resource.MEM, 100, "*"))
188231
.addResources(ScalarResource(Resource.DISK, 100, "*"))
189-
.build()
190232
}
191233

192234

0 commit comments

Comments
 (0)