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