Skip to content

Commit 2c459f1

Browse files
committed
if total page headers missing, fallback to get until no more to get
1 parent 63cfaad commit 2c459f1

File tree

5 files changed

+48
-5
lines changed

5 files changed

+48
-5
lines changed

src/main/java/com/redhat/labs/lodestar/models/PagedResults.java

Lines changed: 26 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -26,29 +26,51 @@
2626
@AllArgsConstructor
2727
public class PagedResults<T> {
2828
public static final Logger LOGGER = LoggerFactory.getLogger(PagedResults.class);
29-
29+
30+
private static final int UNDEFINED_PAGE_COUNT = 10000;
31+
private int pageSize;
3032
@Builder.Default private int number = 1;
3133
@Builder.Default private int total = 1;
3234
@Builder.Default private List<T> results = new ArrayList<>();
3335

36+
public PagedResults(int pageSize) {
37+
this();
38+
this.pageSize = pageSize;
39+
}
40+
3441

3542
public boolean hasMore() {
3643
return total >= number;
3744
}
3845

3946
public void update(Response response, GenericType<List<T>> type) {
47+
LOGGER.debug("update");
4048

4149
if(number == 1) {
4250
String totalPageString = response.getHeaderString("X-Total-Pages");
43-
total = Integer.valueOf(totalPageString);
51+
52+
if(totalPageString == null) {
53+
total = UNDEFINED_PAGE_COUNT; //Should not be able to get this high
54+
LOGGER.debug("X-Total-Pages header is missing");
55+
} else {
56+
total = Integer.valueOf(totalPageString);
57+
}
58+
4459
LOGGER.trace("TOTAL PAGES {}", total);
4560
}
46-
List<T> p = response.readEntity(type);
47-
results.addAll(p);
61+
List<T> responseSet = response.readEntity(type);
62+
63+
//There were no results so don't get any more.
64+
if(responseSet.size() < pageSize && total == UNDEFINED_PAGE_COUNT) {
65+
total = 1;
66+
}
67+
68+
results.addAll(responseSet);
4869
number++;
4970
}
5071

5172
public int size() {
5273
return results.size();
5374
}
75+
5476
}

src/main/java/com/redhat/labs/lodestar/service/ProjectService.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -151,7 +151,7 @@ public void enableDeploymentKeyOnProject(Integer projectId, Integer deployKey) {
151151
}
152152

153153
public List<Commit> getCommitLog(String projectId) {
154-
PagedResults<Commit> page = new PagedResults<>();
154+
PagedResults<Commit> page = new PagedResults<>(commitPageSize);
155155

156156
while(page.hasMore()) {
157157
Response response = gitLabService.getCommitLog(projectId, commitPageSize, page.getNumber());

src/test/java/com/redhat/labs/lodestar/mocks/MockGitLabService.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -321,6 +321,10 @@ public Response getCommitLog(String projectId, int perPage, int pageNumber) {
321321
if("multi/page/iac".equals(projectId)) {
322322
return Response.ok(commitList).header("X-Total-Pages", 2).build();
323323
}
324+
325+
if("multi/page/missingheader".equals(projectId)) {
326+
return Response.ok(commitList).build();
327+
}
324328

325329
return Response.ok(new ArrayList<Commit>()).header("X-Total-Pages", 0).build();
326330
}

src/test/java/com/redhat/labs/lodestar/service/EngagementServiceTest.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
import javax.ws.rs.core.Response;
1717

1818
import org.eclipse.microprofile.rest.client.inject.RestClient;
19+
import org.junit.jupiter.api.BeforeEach;
1920
import org.junit.jupiter.api.Test;
2021
import org.mockito.Mockito;
2122

@@ -41,6 +42,15 @@ public class EngagementServiceTest {
4142
@RestClient
4243
GitLabService gitLabService;
4344

45+
@BeforeEach
46+
void setup() {
47+
48+
// set the engagement path prefix
49+
Group g = Group.builder().fullPath("top/dog").build();
50+
MockUtils.setGetGroupByIdOrPathMock(gitLabService, 2, g);
51+
52+
}
53+
4454
@Test void testCreateEngagementNewProject() {
4555

4656
// given

src/test/java/com/redhat/labs/lodestar/service/ProjectServiceTest.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -104,4 +104,11 @@ class ProjectServiceTest {
104104
assertEquals(6, commits.size());
105105

106106
}
107+
108+
//Will only get first page since the page size will be larger
109+
@Test void getCommitsMultiPageMissingHeader() {
110+
List<Commit> commits = projectService.getCommitLog("multi/page/missingheader");
111+
assertNotNull(commits);
112+
assertEquals(3, commits.size());
113+
}
107114
}

0 commit comments

Comments
 (0)