11package org .apache .mesos .chronos .scheduler .mesos
22
3+ import java .util .concurrent .TimeUnit
4+
35import mesosphere .mesos .protos ._
46import mesosphere .mesos .util .FrameworkIdUtil
5- import org .apache .mesos .Protos .Offer
7+ import org .apache .mesos .Protos .{ DurationInfo , Offer , TimeInfo , Unavailability }
68import org .apache .mesos .chronos .ChronosTestHelper ._
79import org .apache .mesos .chronos .scheduler .jobs .{BaseJob , JobScheduler , MockJobUtils , TaskManager }
810import org .apache .mesos .{Protos , SchedulerDriver }
@@ -76,6 +78,33 @@ class MesosJobFrameworkSpec extends SpecificationWithJUnit with Mockito {
7678 there was one(mockSchedulerDriver).declineOffer(OfferID (" 1" ), Protos .Filters .getDefaultInstance)
7779 }
7880
81+ " Reject unavailable offer" in {
82+ import mesosphere .mesos .protos .Implicits ._
83+
84+ import scala .collection .JavaConverters ._
85+
86+ val mockDriverFactory = MockJobUtils .mockDriverFactory
87+ val mockSchedulerDriver = mockDriverFactory.get
88+
89+ val mesosJobFramework = spy(
90+ new MesosJobFramework (
91+ mockDriverFactory,
92+ mock[JobScheduler ],
93+ mock[TaskManager ],
94+ makeConfig(),
95+ mock[FrameworkIdUtil ],
96+ mock[MesosTaskBuilder ],
97+ mock[MesosOfferReviver ]))
98+
99+ val tasks = mutable.Buffer [(String , BaseJob , Offer )]()
100+ doReturn(tasks).when(mesosJobFramework).generateLaunchableTasks(any)
101+
102+ val offer : Offer = makeUnavailableOffer
103+ mesosJobFramework.resourceOffers(mockSchedulerDriver, Seq [Protos .Offer ](offer).asJava)
104+
105+ there was one(mockSchedulerDriver).declineOffer(OfferID (" 1" ), Protos .Filters .getDefaultInstance)
106+ }
107+
79108 " Reject unused offers with default RefuseSeconds if --decline_offer_duration is not set" in {
80109 import mesosphere .mesos .protos .Implicits ._
81110
@@ -176,6 +205,22 @@ class MesosJobFrameworkSpec extends SpecificationWithJUnit with Mockito {
176205 }
177206
178207 private [this ] def makeBasicOffer : Offer = {
208+
209+ makeBasicOfferBuilder
210+ .build()
211+ }
212+
213+ private [this ] def makeUnavailableOffer : Offer = {
214+
215+ makeBasicOfferBuilder.setUnavailability(
216+ Unavailability .newBuilder()
217+ .setStart(TimeInfo .newBuilder().setNanoseconds(System .nanoTime()))
218+ .setDuration(DurationInfo .newBuilder().setNanoseconds(TimeUnit .DAYS .toNanos(1 )))
219+ .build())
220+ .build()
221+ }
222+
223+ private [this ] def makeBasicOfferBuilder : Offer .Builder = {
179224 import mesosphere .mesos .protos .Implicits ._
180225
181226 Protos .Offer .newBuilder()
@@ -186,7 +231,6 @@ class MesosJobFrameworkSpec extends SpecificationWithJUnit with Mockito {
186231 .addResources(ScalarResource (Resource .CPUS , 1 , " *" ))
187232 .addResources(ScalarResource (Resource .MEM , 100 , " *" ))
188233 .addResources(ScalarResource (Resource .DISK , 100 , " *" ))
189- .build()
190234 }
191235
192236
0 commit comments