1212import org .junit .Test ;
1313import org .mockito .Mockito ;
1414
15+ import java .net .InetSocketAddress ;
16+ import java .time .ZonedDateTime ;
1517import java .util .Date ;
1618import java .util .UUID ;
1719
20+ import static java .util .Collections .singleton ;
21+ import static java .util .Collections .singletonList ;
1822import static org .apache .mesos .elasticsearch .common .Offers .newOfferBuilder ;
1923import static org .apache .mesos .elasticsearch .scheduler .Resources .*;
2024import static org .mockito .Mockito .mock ;
25+ import static org .mockito .Mockito .verify ;
2126import static org .mockito .Mockito .when ;
2227
2328/**
@@ -58,16 +63,9 @@ public class ElasticsearchSchedulerTest {
5863 private TaskInfoFactory taskInfoFactory ;
5964
6065 private org .apache .mesos .elasticsearch .scheduler .Configuration configuration ;
61- // private ZonedDateTime now = ZonedDateTime.now();
62- // private InetSocketAddress transportAddress = new InetSocketAddress("localhost", 9300);
63- // private InetSocketAddress clientAddress = new InetSocketAddress("localhost", 9200);
64-
6566
6667 @ Before
6768 public void before () {
68- Clock clock = mock (Clock .class );
69- when (clock .now ()).thenReturn (TASK1_DATE ).thenReturn (TASK2_DATE );
70-
7169 frameworkID = Protos .FrameworkID .newBuilder ().setValue (UUID .randomUUID ().toString ()).build ();
7270 FrameworkState frameworkState = mock (FrameworkState .class );
7371 when (frameworkState .getFrameworkID ()).thenReturn (frameworkID );
@@ -92,6 +90,7 @@ public void before() {
9290
9391 masterInfo = newMasterInfo ();
9492 scheduler .registered (driver , frameworkID , masterInfo );
93+ scheduler .offerStrategy = mock (OfferStrategy .class );
9594 }
9695
9796 @ Ignore
@@ -107,7 +106,7 @@ public void shouldCallOberversWhenExecutorLost() {
107106
108107 @ Test
109108 public void testRegistered () {
110- Mockito . verify (driver ).requestResources (
109+ verify (driver ).requestResources (
111110 Mockito .argThat (
112111 new RequestMatcher (
113112 configuration .getCpus (),
@@ -119,92 +118,33 @@ public void testRegistered() {
119118 );
120119 }
121120
122- // TODO (pnw): This requires scheduler refactoring to work. Refactor instantiation of objects out of registered method. And use setters.
123- // @Test
124- // public void testResourceOffers_isSlaveAlreadyRunningTask() {
125- // Task task1 = new Task("host1", "1", Protos.TaskState.TASK_RUNNING, now, clientAddress, transportAddress);
126- // Task task2 = new Task("host2", "2", Protos.TaskState.TASK_RUNNING, now, clientAddress, transportAddress);
127- // scheduler.tasks = new HashMap<>();
128- // scheduler.tasks.put("host1", task1);
129- // scheduler.tasks.put("host2", task2);
130- //
131- // Protos.Offer.Builder offer = newOffer("host1");
132- //
133- // scheduler.resourceOffers(driver, singletonList(offer.build()));
134- //
135- // verify(driver).declineOffer(offer.getId());
136- // }
137- //
138- // @Test
139- // public void testResourceOffers_enoughNodes() {
140- // Task task1 = new Task("host1", "1", Protos.TaskState.TASK_RUNNING, now, clientAddress, transportAddress);
141- // Task task2 = new Task("host2", "2", Protos.TaskState.TASK_RUNNING, now, clientAddress, transportAddress);
142- // Task task3 = new Task("host3", "3", Protos.TaskState.TASK_RUNNING, now, clientAddress, transportAddress);
143- // scheduler.tasks = new HashMap<>();
144- // scheduler.tasks.put("host1", task1);
145- // scheduler.tasks.put("host2", task2);
146- // scheduler.tasks.put("host3", task3);
147- //
148- // Protos.Offer.Builder offer = newOffer("host4");
149- //
150- // scheduler.resourceOffers(driver, singletonList(offer.build()));
151- //
152- // verify(driver).declineOffer(offer.getId());
153- // }
154- //
155- // @Test
156- // public void testResourceOffers_noPorts() {
157- // Task task1 = new Task("host1", "1", Protos.TaskState.TASK_RUNNING, now, clientAddress, transportAddress);
158- // Task task2 = new Task("host2", "2", Protos.TaskState.TASK_RUNNING, now, clientAddress, transportAddress);
159- // scheduler.tasks = new HashMap<>();
160- // scheduler.tasks.put("host1", task1);
161- // scheduler.tasks.put("host2", task2);
162- //
163- // Protos.Offer.Builder offer = newOffer("host3");
164- //
165- // scheduler.resourceOffers(driver, singletonList(offer.build()));
166- //
167- // verify(driver).declineOffer(offer.getId());
168- // }
169- //
170- // @SuppressWarnings("unchecked")
171- // @Test
172- // public void testResourceOffers_singlePort() {
173- // Task task = new Task("host1", "task1", Protos.TaskState.TASK_RUNNING, now, clientAddress, transportAddress);
174- // scheduler.tasks = new HashMap<>();
175- // scheduler.tasks.put("host1", task);
176- //
177- // Protos.Offer.Builder offerBuilder = newOffer("host3");
178- // offerBuilder.addResources(portRange(9200, 9200));
179- //
180- // scheduler.resourceOffers(driver, singletonList(offerBuilder.build()));
181- //
182- // Mockito.verify(driver).declineOffer(offerBuilder.build().getId());
183- // }
184- //
185- // @Test
186- // public void testResourceOffers_launchTasks() {
187- // scheduler.tasks = new HashMap<>();
188- //
189- // Protos.Offer.Builder offerBuilder = newOffer("host3");
190- // offerBuilder.addResources(portRange(9200, 9200));
191- // offerBuilder.addResources(portRange(9300, 9300));
192- //
193- // Protos.TaskInfo taskInfo = ProtoTestUtil.getDefaultTaskInfo();
194- //
195- // when(taskInfoFactory.createTask(configuration, offerBuilder.build())).thenReturn(taskInfo);
196- //
197- // scheduler.resourceOffers(driver, singletonList(offerBuilder.build()));
198- //
199- // verify(driver).launchTasks(Collections.singleton(offerBuilder.build().getId()), Collections.singleton(taskInfo));
200- // }
121+ @ Test
122+ public void willDeclineOfferIfStrategyDeclinesOffer () {
123+ Protos .Offer offer = newOffer ("host1" ).build ();
124+
125+ when (scheduler .offerStrategy .evaluate (offer )).thenReturn (OfferStrategy .OfferResult .decline ("Test" ));
126+
127+ scheduler .resourceOffers (driver , singletonList (offer ));
128+
129+ verify (driver ).declineOffer (offer .getId ());
130+ }
131+
132+ @ Test
133+ public void testResourceOffers_launchTasks () {
134+ final Protos .Offer offer = newOffer ("host3" ).build ();
135+ when (scheduler .offerStrategy .evaluate (offer )).thenReturn (OfferStrategy .OfferResult .accept ());
136+
137+ Protos .TaskInfo taskInfo = ProtoTestUtil .getDefaultTaskInfo ();
138+
139+ when (taskInfoFactory .createTask (configuration , offer )).thenReturn (taskInfo );
140+
141+ scheduler .resourceOffers (driver , singletonList (offer ));
142+
143+ verify (driver ).launchTasks (singleton (offer .getId ()), singleton (taskInfo ));
144+ }
201145
202146 private Protos .Offer .Builder newOffer (String hostname ) {
203- Protos .Offer .Builder builder = newOfferBuilder (UUID .randomUUID ().toString (), hostname , UUID .randomUUID ().toString (), frameworkID );
204- builder .addResources (cpus (configuration .getCpus (), configuration .getFrameworkRole ()));
205- builder .addResources (mem (configuration .getMem (), configuration .getFrameworkRole ()));
206- builder .addResources (disk (configuration .getDisk (), configuration .getFrameworkRole ()));
207- return builder ;
147+ return newOfferBuilder (UUID .randomUUID ().toString (), hostname , UUID .randomUUID ().toString (), frameworkID );
208148 }
209149
210150 private Protos .MasterInfo newMasterInfo () {
0 commit comments