@@ -2,7 +2,7 @@ package org.apache.mesos.chronos.scheduler.mesos
2
2
3
3
import mesosphere .mesos .protos ._
4
4
import mesosphere .mesos .util .FrameworkIdUtil
5
- import org .apache .mesos .Protos .Offer
5
+ import org .apache .mesos .Protos .{ DurationInfo , Offer , TimeInfo , Unavailability }
6
6
import org .apache .mesos .chronos .ChronosTestHelper ._
7
7
import org .apache .mesos .chronos .scheduler .jobs .{BaseJob , JobScheduler , MockJobUtils , TaskManager }
8
8
import org .apache .mesos .{Protos , SchedulerDriver }
@@ -76,6 +76,33 @@ class MesosJobFrameworkSpec extends SpecificationWithJUnit with Mockito {
76
76
there was one(mockSchedulerDriver).declineOffer(OfferID (" 1" ), Protos .Filters .getDefaultInstance)
77
77
}
78
78
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
+
79
106
" Reject unused offers with default RefuseSeconds if --decline_offer_duration is not set" in {
80
107
import mesosphere .mesos .protos .Implicits ._
81
108
@@ -176,6 +203,22 @@ class MesosJobFrameworkSpec extends SpecificationWithJUnit with Mockito {
176
203
}
177
204
178
205
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 = {
179
222
import mesosphere .mesos .protos .Implicits ._
180
223
181
224
Protos .Offer .newBuilder()
@@ -186,7 +229,6 @@ class MesosJobFrameworkSpec extends SpecificationWithJUnit with Mockito {
186
229
.addResources(ScalarResource (Resource .CPUS , 1 , " *" ))
187
230
.addResources(ScalarResource (Resource .MEM , 100 , " *" ))
188
231
.addResources(ScalarResource (Resource .DISK , 100 , " *" ))
189
- .build()
190
232
}
191
233
192
234
0 commit comments