Skip to content

Commit 9e75afb

Browse files
authored
[DCJ-400] Minor and patch dependency updates, inc. Spring Boot 3.2.4 -> 3.3.2 (#1767)
1 parent 324c2c3 commit 9e75afb

File tree

8 files changed

+66
-70
lines changed

8 files changed

+66
-70
lines changed

.github/dependabot.yml

+1-1
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ updates:
1818
patterns:
1919
- "*"
2020
exclude-patterns:
21-
- "spotless-plugin-gradle" # likely to require reformatting of code
21+
- "com.diffplug.spotless" # likely to require reformatting of code
2222
update-types:
2323
- "minor"
2424
- "patch"

build.gradle

+41-53
Original file line numberDiff line numberDiff line change
@@ -22,25 +22,25 @@ buildscript {
2222
dependencies {
2323
classpath('io.swagger.codegen.v3:swagger-codegen:3.0.52')
2424
// Required for gradle liquibase plugin
25-
classpath ('org.liquibase:liquibase-core:4.26.0')
25+
classpath ('org.liquibase:liquibase-core:4.29.1')
2626
}
2727
}
2828

2929
plugins {
30-
id 'com.google.cloud.tools.jib' version '3.2.0'
30+
id 'com.google.cloud.tools.jib' version '3.4.3'
3131
id 'org.liquibase.gradle' version '3.0.0'
32-
id 'org.gradle.test-retry' version '1.5.8'
32+
id 'org.gradle.test-retry' version '1.5.10'
3333
id 'antlr'
3434
id 'org.hidetake.swagger.generator' version '2.19.2'
35-
id 'org.springframework.boot' version '3.2.4'
35+
id 'org.springframework.boot' version '3.3.2'
3636
id 'idea'
3737
id 'java'
38-
id 'io.spring.dependency-management' version '1.1.4'
38+
id 'io.spring.dependency-management' version '1.1.6'
3939
id 'jacoco'
4040
id 'com.diffplug.spotless' version '6.7.1'
4141
id 'com.dorongold.task-tree' version '4.0.0'
4242
// enables release info in sentry events
43-
id 'com.gorylenko.gradle-git-properties' version '2.4.1'
43+
id 'com.gorylenko.gradle-git-properties' version '2.4.2'
4444
id 'org.sonarqube' version '4.2.1.3168'
4545
id 'com.srcclr.gradle' version '3.1.12'
4646
}
@@ -162,19 +162,13 @@ configurations {
162162
runtimeClasspath
163163
}
164164

165-
// Spring Boot 3.2.4 pulls in opentelemetry-bom 1.31.0.
166-
// It must have version >= 1.34.1 for compatibility with terra-common-lib 1.1.10:
167-
ext['opentelemetry.version'] = '1.36.0'
168-
// Spring Boot 3.2.4 pulls in io.netty:netty-bom 4.1.107.Final which is impacted by CVE-2024-29025.
169-
ext['netty.version'] = '4.1.108.Final'
170-
171165
dependencies {
172166
implementation 'com.google.apis:google-api-services-serviceusage:v1-rev20230215-2.0.0'
173167
implementation 'com.google.apis:google-api-services-appengine:v1-rev20230206-2.0.0'
174168
implementation 'com.google.apis:google-api-services-oauth2:v2-rev20200213-2.0.0'
175169
implementation 'com.google.apis:google-api-services-iam:v1-rev20230209-2.0.0'
176170

177-
implementation platform('com.google.cloud:libraries-bom:26.30.0')
171+
implementation platform('com.google.cloud:libraries-bom:26.43.0')
178172
implementation 'com.google.cloud:google-cloud-billing'
179173
implementation 'com.google.cloud:google-cloud-resourcemanager'
180174
implementation 'com.google.cloud:google-cloud-bigquery'
@@ -184,13 +178,15 @@ dependencies {
184178
implementation 'com.google.cloud:spring-cloud-gcp-starter-logging:4.9.0'
185179
implementation 'com.google.http-client:google-http-client'
186180

181+
implementation 'org.apache.commons:commons-compress:1.26.2' // For srcclr, jib plugin conflict
182+
// More info: https://discuss.gradle.org/t/plugin-dependency-conflict-with-jib-and-srcclr/42355
187183
implementation 'org.apache.commons:commons-dbcp2' // For database connection support
188184
implementation 'org.apache.commons:commons-lang3'
189185
implementation 'org.apache.commons:commons-collections4'
190186
implementation 'org.apache.directory.studio:org.apache.commons.io:2.4'
191187
implementation 'org.apache.httpcomponents.client5:httpclient5'
192188

193-
implementation 'org.liquibase:liquibase-core:4.26.0'
189+
implementation 'org.liquibase:liquibase-core'
194190

195191
implementation 'org.codehaus.janino:janino' // Provides if/else xml parsing for logback config
196192
implementation 'org.springframework.boot:spring-boot-starter-web'
@@ -201,90 +197,82 @@ dependencies {
201197
swaggerCodegen 'io.swagger.codegen.v3:swagger-codegen-cli'
202198

203199
implementation 'org.springframework:spring-jdbc'
204-
implementation 'org.antlr:ST4:4.3' // String templating
200+
implementation 'org.antlr:ST4:4.3.4' // String templating
205201

206202
implementation 'org.springframework.boot:spring-boot-starter-thymeleaf'
207203
implementation 'jakarta.servlet.jsp.jstl:jakarta.servlet.jsp.jstl-api'
208204

209205
implementation 'com.microsoft.sqlserver:mssql-jdbc:11.2.3.jre17'
210206

211207
// For distributed locking of Spring @Scheduled tasks across multiple instances
212-
implementation 'net.javacrumbs.shedlock:shedlock-provider-jdbc-template:5.2.0'
213-
implementation 'net.javacrumbs.shedlock:shedlock-spring:5.2.0'
208+
implementation 'net.javacrumbs.shedlock:shedlock-provider-jdbc-template:5.14.0'
209+
implementation 'net.javacrumbs.shedlock:shedlock-spring:5.14.0'
214210

215211
implementation 'bio.terra:terra-common-lib:1.1.17-SNAPSHOT'
216212
implementation 'org.broadinstitute.dsde.workbench:sam-client_2.13:v0.0.241'
217-
implementation 'bio.terra:terra-policy-client:1.0.11-SNAPSHOT'
213+
implementation 'bio.terra:terra-policy-client:1.0.15-SNAPSHOT'
218214
implementation 'bio.terra:terra-resource-buffer-client:0.198.42-SNAPSHOT'
219-
implementation 'bio.terra:externalcreds-client-resttemplate:1.3.0-SNAPSHOT'
215+
implementation 'bio.terra:externalcreds-client-resttemplate:1.45.0-SNAPSHOT'
220216

221217
implementation 'org.glassfish.jersey.inject:jersey-hk2'
222218

223219
implementation 'com.squareup.okhttp3:okhttp'
224220
implementation 'org.springframework.boot:spring-boot-starter-actuator'
225221
implementation 'io.micrometer:micrometer-registry-prometheus'
226222

227-
implementation 'com.fasterxml.jackson.core:jackson-core:2.15.3'
228-
implementation 'com.fasterxml.jackson.core:jackson-annotations:2.15.3'
229-
implementation 'com.fasterxml.jackson.core:jackson-databind:2.15.3'
223+
implementation 'com.fasterxml.jackson.core:jackson-core'
224+
implementation 'com.fasterxml.jackson.core:jackson-annotations'
225+
implementation 'com.fasterxml.jackson.core:jackson-databind'
230226

231227
// Azure related dependencies
232-
implementation 'com.azure:azure-identity:1.11.1'
233-
implementation 'com.azure.resourcemanager:azure-resourcemanager:2.34.0'
228+
implementation 'com.azure:azure-identity:1.13.2'
229+
implementation 'com.azure.resourcemanager:azure-resourcemanager:2.41.0'
234230
implementation 'com.azure.resourcemanager:azure-resourcemanager-loganalytics:1.0.0'
235231
implementation 'com.azure.resourcemanager:azure-resourcemanager-securityinsights:1.0.0-beta.4'
236-
implementation 'com.azure:azure-storage-common:12.24.1'
237-
implementation 'com.azure:azure-storage-file-datalake:12.18.1'
238-
implementation 'com.azure:azure-data-tables:12.3.18'
232+
implementation 'com.azure:azure-storage-common:12.26.0'
233+
implementation 'com.azure:azure-storage-file-datalake:12.20.0'
234+
implementation 'com.azure:azure-data-tables:12.4.3'
239235

240236
implementation platform('io.sentry:sentry-bom:7.13.0') //import bom
241-
implementation('io.sentry:sentry-spring-boot-starter')
237+
implementation('io.sentry:sentry-spring-boot-starter-jakarta')
242238
implementation('io.sentry:sentry-logback')
243239

244240
// OpenTelemetry @WithSpan annotations:
245-
implementation 'io.opentelemetry.instrumentation:opentelemetry-instrumentation-annotations:2.2.0'
246-
247-
testImplementation 'org.apache.parquet:parquet-common:1.12.0'
248-
testImplementation 'org.apache.parquet:parquet-hadoop:1.12.0'
249-
testImplementation 'org.apache.parquet:parquet-hadoop-bundle:1.12.0'
250-
testImplementation 'org.apache.parquet:parquet-encoding:1.12.0'
251-
testImplementation 'org.apache.parquet:parquet-column:1.12.0'
252-
testImplementation ('org.apache.hadoop:hadoop-common:3.3.1') {
241+
implementation 'io.opentelemetry.instrumentation:opentelemetry-instrumentation-annotations:2.6.0'
242+
243+
testImplementation 'org.apache.parquet:parquet-common:1.14.1'
244+
testImplementation 'org.apache.parquet:parquet-hadoop:1.14.1'
245+
testImplementation 'org.apache.parquet:parquet-hadoop-bundle:1.14.1'
246+
testImplementation 'org.apache.parquet:parquet-encoding:1.14.1'
247+
testImplementation 'org.apache.parquet:parquet-column:1.14.1'
248+
testImplementation ('org.apache.hadoop:hadoop-common:3.4.0') {
253249
exclude group: 'com.sun.jersey', module: 'jersey-core'
254250
exclude group: 'com.sun.jersey', module: 'jersey-servlet'
255251
exclude group: 'com.sun.jersey', module: 'jersey-json'
256252
exclude group: 'com.sun.jersey', module: 'jersey-server'
253+
exclude group: 'org.slf4j', module: 'slf4j-reload4j'
257254
}
258-
testImplementation ('org.apache.hadoop:hadoop-azure:3.3.1') {
255+
testImplementation('org.apache.hadoop:hadoop-mapreduce-client-core:3.4.0') {
259256
exclude group: 'com.sun.jersey', module: 'jersey-core'
260257
exclude group: 'com.sun.jersey', module: 'jersey-servlet'
261258
exclude group: 'com.sun.jersey', module: 'jersey-json'
262259
exclude group: 'com.sun.jersey', module: 'jersey-server'
260+
exclude group: 'org.slf4j', module: 'slf4j-reload4j'
263261
}
264-
testImplementation('org.apache.hadoop:hadoop-mapreduce-client-core:3.3.1') {
265-
exclude group: 'com.sun.jersey', module: 'jersey-core'
266-
exclude group: 'com.sun.jersey', module: 'jersey-servlet'
267-
exclude group: 'com.sun.jersey', module: 'jersey-json'
268-
exclude group: 'com.sun.jersey', module: 'jersey-server'
269-
}
270-
271-
testImplementation 'au.com.dius.pact.provider:junit5:4.3.19'
272-
testImplementation 'au.com.dius.pact.provider:junit5spring:4.3.19'
273262

274-
antlr 'org.antlr:antlr4:4.8'
263+
testImplementation 'au.com.dius.pact.provider:junit5:4.6.12'
264+
testImplementation 'au.com.dius.pact.provider:junit5spring:4.6.12'
275265

276-
// Need groovy on the class path for the logback config. Could use XML and skip this dependency,
277-
// but the groovy config is... well... groovy.
278-
runtimeOnly 'org.codehaus.groovy:groovy:3.0.7'
266+
antlr 'org.antlr:antlr4:4.13.2'
279267

280268
liquibaseRuntime 'org.liquibase:liquibase-core'
281269
liquibaseRuntime 'org.postgresql:postgresql'
282-
liquibaseRuntime 'info.picocli:picocli:4.7.5'
270+
liquibaseRuntime 'info.picocli:picocli:4.7.6'
283271

284272
testImplementation 'org.junit.vintage:junit-vintage-engine'
285273
testImplementation 'org.springframework.boot:spring-boot-starter-test'
286-
testImplementation 'io.zonky.test:embedded-database-spring-test:2.5.0'
287-
testImplementation 'io.zonky.test:embedded-postgres:2.0.6'
274+
testImplementation 'io.zonky.test:embedded-database-spring-test:2.5.1'
275+
testImplementation 'io.zonky.test:embedded-postgres:2.0.7'
288276
implementation enforcedPlatform('io.zonky.test.postgres:embedded-postgres-binaries-bom:12.8.0')
289277

290278
generatedCompile 'org.springframework.boot:spring-boot-starter-web'

src/main/java/bio/terra/service/auth/ras/EcmService.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
import bio.terra.common.iam.AuthenticatedUserRequest;
66
import bio.terra.externalcreds.api.PassportApi;
77
import bio.terra.externalcreds.client.ApiClient;
8+
import bio.terra.externalcreds.model.PassportProvider;
89
import bio.terra.externalcreds.model.RASv1Dot1VisaCriterion;
910
import bio.terra.externalcreds.model.ValidatePassportRequest;
1011
import bio.terra.externalcreds.model.ValidatePassportResult;
@@ -37,7 +38,6 @@ public class EcmService {
3738
private final ObjectMapper objectMapper;
3839
private final OidcApiService oidcApiService;
3940

40-
private static final String RAS_PROVIDER = "ras";
4141
@VisibleForTesting public static final String GA4GH_PASSPORT_V1_CLAIM = "ga4gh_passport_v1";
4242
private static final String RAS_DBGAP_PERMISSIONS_CLAIM = "ras_dbgap_permissions";
4343
private static final String RAS_CRITERIA_TYPE = "RASv1Dot1VisaCriterion";
@@ -98,7 +98,7 @@ public ValidatePassportResult validatePassport(ValidatePassportRequest validateP
9898
*/
9999
public String getRasProviderPassport(AuthenticatedUserRequest userReq) {
100100
try {
101-
return oidcApiService.getOidcApi(userReq).getProviderPassport(RAS_PROVIDER);
101+
return oidcApiService.getOidcApi(userReq).getProviderPassport(PassportProvider.RAS);
102102
} catch (HttpClientErrorException ex) {
103103
if (ex.getStatusCode() == HttpStatus.NOT_FOUND) {
104104
return null;

src/main/java/bio/terra/service/policy/PolicyService.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@ public static TpsPolicyInput getProtectedDataPolicyInput() {
6262
public TpsPaoGetResult getPao(UUID resourceId) {
6363
TpsApi tpsApi = policyApiService.getPolicyApi();
6464
try {
65-
return tpsApi.getPao(resourceId);
65+
return tpsApi.getPao(resourceId, false);
6666
} catch (ApiException e) {
6767
throw convertApiException(e);
6868
}

src/test/java/bio/terra/common/BQTestUtils.java

+5-2
Original file line numberDiff line numberDiff line change
@@ -66,8 +66,11 @@ public static void mockBQQuery(
6666

6767
private static Answer<TableResult> mockAnswer(Schema schema, List<Map<String, String>> results) {
6868
return a ->
69-
new TableResult(
70-
schema, results.size(), new PageImpl<>(null, null, convertValues(results, schema)));
69+
TableResult.newBuilder()
70+
.setSchema(schema)
71+
.setTotalRows((long) results.size())
72+
.setPageNoSchema(new PageImpl<>(null, null, convertValues(results, schema)))
73+
.build();
7174
}
7275

7376
private static List<FieldValueList> convertValues(

src/test/java/bio/terra/service/auth/iam/ras/EcmServiceTest.java

+7-7
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@
44
import static org.hamcrest.Matchers.empty;
55
import static org.hamcrest.Matchers.equalTo;
66
import static org.junit.jupiter.api.Assertions.assertThrows;
7-
import static org.mockito.ArgumentMatchers.any;
87
import static org.mockito.Mockito.mock;
98
import static org.mockito.Mockito.when;
109

@@ -13,6 +12,7 @@
1312
import bio.terra.common.fixtures.AuthenticationFixtures;
1413
import bio.terra.common.iam.AuthenticatedUserRequest;
1514
import bio.terra.externalcreds.api.OidcApi;
15+
import bio.terra.externalcreds.model.PassportProvider;
1616
import bio.terra.service.auth.ras.EcmService;
1717
import bio.terra.service.auth.ras.OidcApiService;
1818
import bio.terra.service.auth.ras.RasDbgapPermissions;
@@ -56,7 +56,7 @@ void testGetRasProviderPassport() {
5656
String passport = "passportJwt";
5757
HttpClientErrorException shouldCatch = new HttpClientErrorException(HttpStatus.NOT_FOUND);
5858
HttpClientErrorException shouldThrow = new HttpClientErrorException(HttpStatus.UNAUTHORIZED);
59-
when(oidcApi.getProviderPassport(any()))
59+
when(oidcApi.getProviderPassport(PassportProvider.RAS))
6060
.thenReturn(passport)
6161
.thenThrow(shouldCatch)
6262
.thenThrow(shouldThrow);
@@ -75,7 +75,7 @@ void testGetRasProviderPassport() {
7575

7676
@Test
7777
void testGetRasDbgapPermissionsNoPassport() throws Exception {
78-
when(oidcApi.getProviderPassport(any()))
78+
when(oidcApi.getProviderPassport(PassportProvider.RAS))
7979
.thenThrow(new HttpClientErrorException(HttpStatus.NOT_FOUND));
8080
assertThat(
8181
"No RAS dbGaP permissions when a user doesn't have a passport",
@@ -85,7 +85,7 @@ void testGetRasDbgapPermissionsNoPassport() throws Exception {
8585

8686
@Test
8787
void testGetRasDbgapPermissionsNoVisaClaim() throws Exception {
88-
when(oidcApi.getProviderPassport(any())).thenReturn(toJwtToken("{}"));
88+
when(oidcApi.getProviderPassport(PassportProvider.RAS)).thenReturn(toJwtToken("{}"));
8989
assertThat(
9090
"No RAS dbGaP permissions when a user's passport has no visa claim'",
9191
ecmService.getRasDbgapPermissions(TEST_USER),
@@ -94,7 +94,7 @@ void testGetRasDbgapPermissionsNoVisaClaim() throws Exception {
9494

9595
@Test
9696
void testGetRasDbgapPermissionsNoVisas() throws Exception {
97-
when(oidcApi.getProviderPassport(any())).thenReturn(toPassportJwt(null));
97+
when(oidcApi.getProviderPassport(PassportProvider.RAS)).thenReturn(toPassportJwt(null));
9898
assertThat(
9999
"No RAS dbGaP permissions when a user's passport has no visas",
100100
ecmService.getRasDbgapPermissions(TEST_USER),
@@ -110,7 +110,7 @@ void testGetRasDbgapPermissionsInvalidVisas() throws Exception {
110110
"ras_dbgap_permissions": "should throw InvalidDefinitionException"
111111
}
112112
""";
113-
when(oidcApi.getProviderPassport(any())).thenReturn(toPassportJwt(invalidVisa));
113+
when(oidcApi.getProviderPassport(PassportProvider.RAS)).thenReturn(toPassportJwt(invalidVisa));
114114

115115
assertThat(
116116
"No RAS dbGaP permissions when a user's passport has invalid visas",
@@ -143,7 +143,7 @@ void testGetRasDbgapPermissionsValidVisas() throws Exception {
143143
]
144144
}
145145
""";
146-
when(oidcApi.getProviderPassport(any())).thenReturn(toPassportJwt(validVisa));
146+
when(oidcApi.getProviderPassport(PassportProvider.RAS)).thenReturn(toPassportJwt(validVisa));
147147

148148
assertThat(
149149
"Passport visa permissions are successfully decoded and unknown properties ignored",

src/test/java/bio/terra/service/policy/PolicyServiceTest.java

+5-2
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import static org.hamcrest.MatcherAssert.assertThat;
44
import static org.hamcrest.Matchers.containsString;
5+
import static org.hamcrest.Matchers.equalTo;
56
import static org.hamcrest.Matchers.instanceOf;
67
import static org.junit.jupiter.api.Assertions.assertEquals;
78
import static org.junit.jupiter.api.Assertions.assertFalse;
@@ -19,6 +20,7 @@
1920
import bio.terra.policy.model.TpsComponent;
2021
import bio.terra.policy.model.TpsObjectType;
2122
import bio.terra.policy.model.TpsPaoCreateRequest;
23+
import bio.terra.policy.model.TpsPaoGetResult;
2224
import bio.terra.policy.model.TpsPaoUpdateRequest;
2325
import bio.terra.policy.model.TpsPolicyInput;
2426
import bio.terra.policy.model.TpsPolicyInputs;
@@ -209,7 +211,8 @@ void testStatusNotOk() throws Exception {
209211
@Test
210212
void getPao() throws ApiException {
211213
mockPolicyApi();
212-
policyService.getPao(snapshotId);
213-
verify(tpsApi).getPao(snapshotId);
214+
var expected = new TpsPaoGetResult().objectId(snapshotId);
215+
when(tpsApi.getPao(snapshotId, false)).thenReturn(expected);
216+
assertThat(policyService.getPao(snapshotId), equalTo(expected));
214217
}
215218
}

src/test/java/bio/terra/service/tabulardata/google/bigquery/BigQueryPdaoUnitTest.java

+4-2
Original file line numberDiff line numberDiff line change
@@ -1061,7 +1061,8 @@ void aggregateSnapshotTableTest() {
10611061

10621062
Page<FieldValueList> page = mockPage(listOfFieldValueList);
10631063

1064-
TableResult table = new TableResult(schema, 10, page);
1064+
TableResult table =
1065+
TableResult.newBuilder().setSchema(schema).setTotalRows(10L).setPageNoSchema(page).build();
10651066

10661067
List<BigQueryDataResultModel> result = BigQueryPdao.aggregateTableData(table);
10671068

@@ -1091,7 +1092,8 @@ void testAggregateTextColumnStats() {
10911092
"2"))))); // For some reason, it wants the numeric value passed in as a
10921093
// string
10931094

1094-
TableResult table = new TableResult(schema, 10, page);
1095+
TableResult table =
1096+
TableResult.newBuilder().setSchema(schema).setTotalRows(10L).setPageNoSchema(page).build();
10951097

10961098
List<ColumnStatisticsTextValue> result =
10971099
BigQueryPdao.aggregateTextColumnStats(table, columnName);

0 commit comments

Comments
 (0)