2121import junit .framework .Assert ;
2222import org .junit .Test ;
2323
24- import java .util .ArrayList ;
25- import java .util .Collections ;
26- import java .util .List ;
27- import java .util .Map ;
24+ import java .util .*;
2825import java .util .concurrent .BlockingQueue ;
2926import java .util .concurrent .ConcurrentHashMap ;
3027import java .util .concurrent .ConcurrentMap ;
@@ -198,7 +195,7 @@ public void call(VirtualMachineLease virtualMachineLease) {
198195 @ Test
199196 public void testTimedOfferRejects () throws Exception {
200197 final AtomicInteger expireCount = new AtomicInteger ();
201- final int leaseExpirySecs =3 ;
198+ final int leaseExpirySecs =2 ;
202199 final TaskScheduler scheduler = new TaskScheduler .Builder ()
203200 .withLeaseRejectAction (new Action1 <VirtualMachineLease >() {
204201 @ Override
@@ -216,7 +213,7 @@ public void call(VirtualMachineLease virtualMachineLease) {
216213 leases .clear ();
217214 Thread .sleep (1000 );
218215 }
219- leases = LeaseProvider .getLeases (nLeases , 4 , 4000 , 1 , 10 );
216+ leases = LeaseProvider .getLeases (nLeases , nLeases , 4 , 4000 , 1 , 10 );
220217 for (int i =0 ; i <leaseExpirySecs -1 ; i ++) {
221218 scheduler .scheduleOnce (Collections .<TaskRequest >emptyList (), leases );
222219 leases .clear ();
@@ -230,4 +227,35 @@ public void call(VirtualMachineLease virtualMachineLease) {
230227 }
231228 Assert .assertEquals (nLeases *2 , expireCount .get ());
232229 }
230+
231+ // test that all offers of a VM are rejected when one of them expires
232+ @ Test
233+ public void testRejectAllOffersOfVm () throws Exception {
234+ final AtomicInteger expireCount = new AtomicInteger ();
235+ final int leaseExpirySecs =2 ;
236+ final Set <String > hostsRejectedFrom = new HashSet <>();
237+ final TaskScheduler scheduler = new TaskScheduler .Builder ()
238+ .withLeaseRejectAction (new Action1 <VirtualMachineLease >() {
239+ @ Override
240+ public void call (VirtualMachineLease virtualMachineLease ) {
241+ expireCount .incrementAndGet ();
242+ hostsRejectedFrom .add (virtualMachineLease .hostname ());
243+ }
244+ })
245+ .withLeaseOfferExpirySecs (leaseExpirySecs )
246+ .withMaxOffersToReject (1 )
247+ .build ();
248+ final int nhosts = 2 ;
249+ List <VirtualMachineLease > leases = LeaseProvider .getLeases (nhosts , 4 , 4000 , 1 , 10 );
250+ // add the same leases with same hostnames twice again, so there are 3 offers for each of the nHosts.
251+ leases .addAll (LeaseProvider .getLeases (nhosts , 4 , 4000 , 1 , 10 ));
252+ leases .addAll (LeaseProvider .getLeases (nhosts , 4 , 4000 , 1 , 10 ));
253+ for (int i =0 ; i <leaseExpirySecs +1 ; i ++) {
254+ scheduler .scheduleOnce (Collections .<TaskRequest >emptyList (), leases );
255+ leases .clear ();
256+ Thread .sleep (1000 );
257+ }
258+ Assert .assertEquals (3 , expireCount .get ());
259+ Assert .assertEquals (1 , hostsRejectedFrom .size ());
260+ }
233261}
0 commit comments