@@ -2,7 +2,7 @@ package org.apache.mesos.chronos.scheduler.mesos
22
33import mesosphere .mesos .protos ._
44import mesosphere .mesos .util .FrameworkIdUtil
5- import org .apache .mesos .Protos .Offer
5+ import org .apache .mesos .Protos .{ DurationInfo , Offer , TimeInfo , Unavailability }
66import org .apache .mesos .chronos .ChronosTestHelper ._
77import org .apache .mesos .chronos .scheduler .jobs .{BaseJob , JobScheduler , MockJobUtils , TaskManager }
88import 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(1000000l ))
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