Skip to content

Commit 1b541a4

Browse files
committed
Add logic and tests for ListJobs
1 parent 47b2a5a commit 1b541a4

File tree

2 files changed

+134
-0
lines changed

2 files changed

+134
-0
lines changed

databricks-sdk-java/src/main/java/com/databricks/sdk/mixin/JobsExt.java

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import com.databricks.sdk.core.ApiClient;
44
import com.databricks.sdk.service.jobs.*;
55
import java.util.Collection;
6+
import java.util.Iterator;
67

78
public class JobsExt extends JobsAPI {
89

@@ -14,6 +15,34 @@ public JobsExt(JobsService mock) {
1415
super(mock);
1516
}
1617

18+
public Iterable<BaseJob> list(ListJobsRequest request) {
19+
Iterable<BaseJob> jobsList = super.list(request);
20+
21+
if (!request.getExpandTasks()) {
22+
return jobsList;
23+
}
24+
25+
Iterator<BaseJob> iterator = jobsList.iterator();
26+
return () -> new Iterator<BaseJob>() {
27+
@Override
28+
public boolean hasNext() {
29+
return iterator.hasNext();
30+
}
31+
32+
@Override
33+
public BaseJob next() {
34+
BaseJob job = iterator.next();
35+
GetJobRequest getJobRequest = new GetJobRequest().setJobId(job.getJobId());
36+
Job fullJob = get(getJobRequest);
37+
job.getSettings().setTasks(fullJob.getSettings().getTasks());
38+
job.getSettings().setJobClusters(fullJob.getSettings().getJobClusters());
39+
job.getSettings().setParameters(fullJob.getSettings().getParameters());
40+
job.getSettings().setEnvironments(fullJob.getSettings().getEnvironments());
41+
return job;
42+
}
43+
};
44+
}
45+
1746
/**
1847
* Wrap the {@code JobsApi.getRun} operation to retrieve paginated content without breaking the
1948
* response contract.

databricks-sdk-java/src/test/java/com/databricks/sdk/mixin/JobsExtTest.java

Lines changed: 105 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -202,4 +202,109 @@ private void addJobEnvironments(Job job, String... environmentKeys) {
202202
}
203203
job.getSettings().setEnvironments(environments);
204204
}
205+
206+
@Test
207+
public void testListJobsWithoutExpandTasks() {
208+
JobsService service = Mockito.mock(JobsService.class);
209+
BaseJob job1 = new BaseJob().setJobId(100L).setSettings(new JobSettings().setName("job1"));
210+
BaseJob job2 = new BaseJob().setJobId(200L).setSettings(new JobSettings().setName("job2"));
211+
BaseJob job3 = new BaseJob().setJobId(300L).setSettings(new JobSettings().setName("job3"));
212+
BaseJob job4 = new BaseJob().setJobId(400L).setSettings(new JobSettings().setName("job4"));
213+
214+
List<BaseJob> jobsOnFirstPage = new ArrayList<>();
215+
jobsOnFirstPage.add(job1);
216+
jobsOnFirstPage.add(job2);
217+
List<BaseJob> jobsOnSecondPage = new ArrayList<>();
218+
jobsOnSecondPage.add(job3);
219+
jobsOnSecondPage.add(job4);
220+
when(service.list(any()))
221+
.thenReturn(new ListJobsResponse().setJobs(jobsOnFirstPage))
222+
.thenReturn(new ListJobsResponse().setJobs(jobsOnSecondPage));
223+
JobsExt jobsExt = new JobsExt(service);
224+
225+
ListJobsRequest request = new ListJobsRequest().setExpandTasks(false);
226+
Iterable<BaseJob> jobsList = jobsExt.list(request);
227+
228+
List<BaseJob> expectedJobsList = new ArrayList<>();
229+
expectedJobsList.add(job1);
230+
expectedJobsList.add(job2);
231+
expectedJobsList.add(job3);
232+
expectedJobsList.add(job4);
233+
for (BaseJob job : jobsList) {
234+
BaseJob expectedJob = expectedJobsList.stream()
235+
.filter(e -> e.getJobId().equals(job.getJobId()))
236+
.findFirst()
237+
.orElse(null);
238+
assertEquals(expectedJob, job);
239+
}
240+
verify(service, times(0)).get(any());
241+
}
242+
243+
@Test
244+
public void testListJobs() {
245+
JobsService service = Mockito.mock(JobsService.class);
246+
BaseJob job1 = new BaseJob().setJobId(100L).setSettings(new JobSettings().setName("job1"));
247+
addTasks(job1, "job1_taskKey1", "job1_taskKey2");
248+
BaseJob job2 = new BaseJob().setJobId(200L).setSettings(new JobSettings().setName("job2"));
249+
addTasks(job2, "job2_taskKey1", "job2_taskKey2");
250+
251+
Job getJob1_page1 = new Job()
252+
.setJobId(100L)
253+
.setNextPageToken("job1_page2token")
254+
.setSettings(new JobSettings().setName("job1"));
255+
addTasks(getJob1_page1, "job1_taskKey1", "job1_taskKey2");
256+
Job getJob1_page2 = new Job()
257+
.setJobId(100L)
258+
.setSettings(new JobSettings().setName("job1"));
259+
addTasks(getJob1_page2, "job1_taskKey3", "job1_taskKey4");
260+
261+
Job getJob2_page1 = new Job()
262+
.setJobId(200L)
263+
.setNextPageToken("job2_page2token")
264+
.setSettings(new JobSettings().setName("job2"));
265+
addTasks(getJob2_page1, "job2_taskKey1", "job2_taskKey2");
266+
Job getJob2_page2 = new Job()
267+
.setJobId(200L)
268+
.setSettings(new JobSettings().setName("job2"));
269+
addTasks(getJob2_page2, "job2_taskKey3", "job2_taskKey4");
270+
271+
doReturn(getJob1_page1).when(service).get(argThat(request -> request != null && request.getJobId() == 100L && request.getPageToken() == null));
272+
doReturn(getJob1_page2).when(service).get(argThat(request -> request != null && request.getJobId() == 100L && "job1_page2token".equals(request.getPageToken())));
273+
doReturn(getJob2_page1).when(service).get(argThat(request -> request != null && request.getJobId() == 200L && request.getPageToken() == null));
274+
doReturn(getJob2_page2).when(service).get(argThat(request -> request != null && request.getJobId() == 200L && "job2_page2token".equals(request.getPageToken())));
275+
276+
List<BaseJob> jobsOnFirstPage = new ArrayList<>();
277+
jobsOnFirstPage.add(job1);
278+
jobsOnFirstPage.add(job2);
279+
ListJobsResponse response = new ListJobsResponse().setJobs(jobsOnFirstPage);
280+
when(service.list(any())).thenReturn(response);
281+
JobsExt jobsExt = new JobsExt(service);
282+
283+
ListJobsRequest request = new ListJobsRequest().setExpandTasks(true);
284+
Iterable<BaseJob> jobsList = jobsExt.list(request);
285+
286+
BaseJob expectedJob1 = new BaseJob().setJobId(100L).setSettings(new JobSettings().setName("job1"));
287+
addTasks(expectedJob1, "job1_taskKey1", "job1_taskKey2", "job1_taskKey3", "job1_taskKey4");
288+
BaseJob expectedJob2 = new BaseJob().setJobId(200L).setSettings(new JobSettings().setName("job2"));
289+
addTasks(expectedJob2, "job2_taskKey1", "job2_taskKey2", "job2_taskKey3", "job2_taskKey4");
290+
List<BaseJob> expectedJobsList = new ArrayList<>();
291+
expectedJobsList.add(expectedJob1);
292+
expectedJobsList.add(expectedJob2);
293+
for (BaseJob job : jobsList) {
294+
BaseJob expectedJob = expectedJobsList.stream()
295+
.filter(e -> e.getJobId().equals(job.getJobId()))
296+
.findFirst()
297+
.orElse(null);
298+
assertEquals(expectedJob, job);
299+
}
300+
verify(service, times(4)).get(any());
301+
}
302+
303+
private void addTasks(BaseJob job, String... taskKeys) {
304+
Collection<Task> tasks = new ArrayList<>();
305+
for (String taskKey : taskKeys) {
306+
tasks.add(new Task().setTaskKey(taskKey));
307+
}
308+
job.getSettings().setTasks(tasks);
309+
}
205310
}

0 commit comments

Comments
 (0)