Skip to content

Commit 12cf97b

Browse files
authored
Fix remaining failing non-zero realm tests (#11634)
- Change testing framework to parse and preserve non-zero realm/shard from env variables - Fix failing rest-java tests Signed-off-by: Xin Li <[email protected]>
1 parent d83b556 commit 12cf97b

File tree

6 files changed

+158
-86
lines changed

6 files changed

+158
-86
lines changed

common/src/test/java/org/hiero/mirror/common/GlobalTestSetup.java

Lines changed: 17 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,11 @@
22

33
package org.hiero.mirror.common;
44

5+
import java.util.function.Consumer;
56
import org.hiero.mirror.common.tableusage.CsvReportGenerator;
67
import org.hiero.mirror.common.tableusage.MarkdownReportGenerator;
78
import org.hiero.mirror.common.tableusage.TestExecutionTracker;
9+
import org.hiero.mirror.common.util.CommonUtils;
810
import org.junit.platform.engine.TestExecutionResult;
911
import org.junit.platform.launcher.LauncherSession;
1012
import org.junit.platform.launcher.LauncherSessionListener;
@@ -13,7 +15,8 @@
1315
import org.junit.platform.launcher.TestPlan;
1416

1517
public class GlobalTestSetup implements LauncherSessionListener, TestExecutionListener {
16-
private CommonProperties originalCommonProperties;
18+
19+
private final CommonProperties originalCommonProperties = new CommonProperties();
1720

1821
@Override
1922
public void launcherSessionOpened(LauncherSession session) {
@@ -29,21 +32,18 @@ public void testPlanExecutionStarted(TestPlan testPlan) {
2932
try {
3033
CommonProperties.getInstance();
3134
} catch (IllegalStateException ex) {
32-
new CommonProperties().init();
35+
var commonProperties = new CommonProperties();
36+
commonProperties.init();
37+
setPropertyFromEnv("HIERO_MIRROR_COMMON_REALM", commonProperties::setRealm);
38+
setPropertyFromEnv("HIERO_MIRROR_COMMON_SHARD", commonProperties::setShard);
3339
} finally {
34-
var commonProperties = CommonProperties.getInstance();
35-
36-
originalCommonProperties = new CommonProperties();
37-
originalCommonProperties.setShard(commonProperties.getShard());
38-
originalCommonProperties.setRealm(commonProperties.getRealm());
40+
CommonUtils.copyCommonProperties(CommonProperties.getInstance(), originalCommonProperties);
3941
}
4042
}
4143

4244
@Override
4345
public void executionFinished(TestIdentifier testIdentifier, TestExecutionResult testExecutionResult) {
44-
var commonProperties = CommonProperties.getInstance();
45-
commonProperties.setShard(originalCommonProperties.getShard());
46-
commonProperties.setRealm(originalCommonProperties.getRealm());
46+
CommonUtils.copyCommonProperties(originalCommonProperties, CommonProperties.getInstance());
4747
}
4848

4949
@Override
@@ -55,4 +55,11 @@ public void launcherSessionClosed(LauncherSession session) {
5555
CsvReportGenerator.generateReport();
5656
}
5757
}
58+
59+
private void setPropertyFromEnv(String key, Consumer<Long> setter) {
60+
var value = System.getenv(key);
61+
if (value != null) {
62+
setter.accept(Long.valueOf(value));
63+
}
64+
}
5865
}

common/src/test/java/org/hiero/mirror/common/config/CommonIntegrationTest.java

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@
88
import org.hiero.mirror.common.CommonProperties;
99
import org.hiero.mirror.common.domain.DomainBuilder;
1010
import org.hiero.mirror.common.domain.SystemEntity;
11+
import org.hiero.mirror.common.util.CommonUtils;
12+
import org.junit.jupiter.api.AfterEach;
1113
import org.junit.jupiter.api.BeforeEach;
1214
import org.junit.jupiter.api.TestInfo;
1315
import org.slf4j.Logger;
@@ -41,17 +43,21 @@ public abstract class CommonIntegrationTest {
4143
@Autowired(required = false)
4244
private Collection<CacheManager> cacheManagers;
4345

46+
private final CommonProperties defaultCommonProperties = new CommonProperties();
47+
4448
@BeforeEach
4549
void logTest(TestInfo testInfo) {
50+
CommonUtils.copyCommonProperties(commonProperties, defaultCommonProperties);
4651
reset();
4752
log.info("Executing: {}", testInfo.getDisplayName());
4853
}
4954

50-
protected void reset() {
51-
var defaultCommonProperties = new CommonProperties();
52-
commonProperties.setRealm(defaultCommonProperties.getRealm());
53-
commonProperties.setShard(defaultCommonProperties.getShard());
55+
@AfterEach
56+
void resetCommonProperties() {
57+
CommonUtils.copyCommonProperties(defaultCommonProperties, commonProperties);
58+
}
5459

60+
protected void reset() {
5561
if (cacheManagers != null) {
5662
cacheManagers.forEach(this::resetCacheManager);
5763
}

common/src/test/java/org/hiero/mirror/common/util/CommonUtils.java

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,21 +5,27 @@
55
import java.security.SecureRandom;
66
import java.time.Instant;
77
import lombok.experimental.UtilityClass;
8+
import org.hiero.mirror.common.CommonProperties;
89

910
@UtilityClass
1011
public class CommonUtils {
1112

1213
private static final SecureRandom RANDOM = new SecureRandom();
1314

14-
public static byte[] nextBytes(int length) {
15-
var bytes = new byte[length];
16-
RANDOM.nextBytes(bytes);
17-
return bytes;
15+
public static void copyCommonProperties(CommonProperties source, CommonProperties target) {
16+
target.setRealm(source.getRealm());
17+
target.setShard(source.getShard());
1818
}
1919

2020
public static Instant instant(long nanos) {
2121
final long seconds = nanos / 1_000_000_000;
2222
final int remainingNanos = (int) (nanos % 1_000_000_000);
2323
return Instant.ofEpochSecond(seconds, remainingNanos);
2424
}
25+
26+
public static byte[] nextBytes(int length) {
27+
var bytes = new byte[length];
28+
RANDOM.nextBytes(bytes);
29+
return bytes;
30+
}
2531
}

rest-java/src/test/java/org/hiero/mirror/restjava/common/EntityIdRangeParameterTest.java

Lines changed: 17 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -6,14 +6,19 @@
66
import static org.hiero.mirror.restjava.common.RangeOperator.EQ;
77
import static org.junit.jupiter.api.Assertions.assertThrows;
88

9+
import java.util.List;
10+
import java.util.function.Function;
11+
import java.util.stream.Stream;
912
import org.hiero.mirror.common.domain.DomainBuilder;
1013
import org.hiero.mirror.common.domain.entity.EntityId;
1114
import org.hiero.mirror.common.exception.InvalidEntityException;
1215
import org.junit.jupiter.api.DisplayName;
16+
import org.junit.jupiter.api.DynamicTest;
1317
import org.junit.jupiter.api.Test;
18+
import org.junit.jupiter.api.TestFactory;
1419
import org.junit.jupiter.api.extension.ExtendWith;
20+
import org.junit.jupiter.api.function.ThrowingConsumer;
1521
import org.junit.jupiter.params.ParameterizedTest;
16-
import org.junit.jupiter.params.provider.CsvSource;
1722
import org.junit.jupiter.params.provider.ValueSource;
1823
import org.mockito.junit.jupiter.MockitoExtension;
1924

@@ -33,13 +38,18 @@ void testConversion() {
3338
.isEqualTo(EntityIdRangeParameter.valueOf(null));
3439
}
3540

36-
@ParameterizedTest
37-
@CsvSource({"0.0.1000,1000", "0.1000,1000", "1000,1000"})
38-
@DisplayName("EntityIdRangeParameter parse from string tests, valid cases")
39-
void testValidParam(String input, long num) {
40-
var entityId = domainBuilder.entityNum(num);
41+
@TestFactory
42+
Stream<DynamicTest> testValidParam() {
43+
final var entityId = domainBuilder.entityNum(1000);
44+
final var inputs = List.of(
45+
entityId.toString(),
46+
String.format("%d.%d", entityId.getRealm(), entityId.getNum()),
47+
Long.toString(entityId.getNum()));
48+
final ThrowingConsumer<String> executor = input -> {
49+
assertThat(EntityIdRangeParameter.valueOf(input)).isEqualTo(new EntityIdRangeParameter(EQ, entityId));
50+
};
4151

42-
assertThat(new EntityIdRangeParameter(EQ, entityId)).isEqualTo(EntityIdRangeParameter.valueOf(input));
52+
return DynamicTest.stream(inputs.iterator(), Function.identity(), executor);
4353
}
4454

4555
@ParameterizedTest

rest-java/src/test/java/org/hiero/mirror/restjava/controller/TokenAirdropsControllerTest.java

Lines changed: 59 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -8,16 +8,22 @@
88

99
import com.google.common.io.BaseEncoding;
1010
import java.util.List;
11+
import java.util.function.Function;
12+
import java.util.stream.Stream;
1113
import lombok.RequiredArgsConstructor;
14+
import org.assertj.core.api.InstanceOfAssertFactories;
1215
import org.assertj.core.api.ThrowableAssert.ThrowingCallable;
1316
import org.hiero.mirror.common.domain.token.TokenAirdrop;
1417
import org.hiero.mirror.common.util.DomainUtils;
1518
import org.hiero.mirror.rest.model.Links;
1619
import org.hiero.mirror.rest.model.TokenAirdropsResponse;
1720
import org.hiero.mirror.restjava.mapper.TokenAirdropMapper;
1821
import org.junit.jupiter.api.DisplayName;
22+
import org.junit.jupiter.api.DynamicTest;
1923
import org.junit.jupiter.api.Nested;
2024
import org.junit.jupiter.api.Test;
25+
import org.junit.jupiter.api.TestFactory;
26+
import org.junit.jupiter.api.function.ThrowingConsumer;
2127
import org.junit.jupiter.params.ParameterizedTest;
2228
import org.junit.jupiter.params.provider.CsvSource;
2329
import org.junit.jupiter.params.provider.ValueSource;
@@ -46,31 +52,40 @@ protected String getUrl() {
4652
@Override
4753
protected RequestHeadersSpec<?> defaultRequest(RequestHeadersUriSpec<?> uriSpec) {
4854
var sender = domainBuilder.entityNum(1000);
49-
var tokenAirdrop = domainBuilder
55+
domainBuilder
5056
.tokenAirdrop(FUNGIBLE_COMMON)
5157
.customize(e -> e.senderAccountId(sender.getId()))
5258
.persist();
5359
return uriSpec.uri("", sender.getNum());
5460
}
5561

56-
@ParameterizedTest
57-
@CsvSource({"0.0.1000,1000", "0.1000,1000", "1000,1000"})
58-
void entityId(String input, long num) {
59-
// Given
60-
var encodedId = domainBuilder.entityNum(num).getId();
61-
var tokenAirdrop = domainBuilder
62+
@TestFactory
63+
Stream<DynamicTest> entityId() {
64+
final var entityId = domainBuilder.entityNum(1000);
65+
final var inputs = List.of(
66+
entityId.toString(),
67+
String.format("%d.%d", entityId.getRealm(), entityId.getNum()),
68+
Long.toString(entityId.getNum()));
69+
final var tokenAirdrop = domainBuilder
6270
.tokenAirdrop(FUNGIBLE_COMMON)
63-
.customize(a -> a.senderAccountId(encodedId))
64-
.persist();
65-
66-
// When
67-
var response = restClient.get().uri("", input).retrieve().toEntity(TokenAirdropsResponse.class);
68-
69-
// Then
70-
assertThat(response.getBody().getAirdrops().getFirst()).isEqualTo(mapper.map(tokenAirdrop));
71-
// Based on application.yml response headers configuration
72-
assertThat(response.getHeaders().getAccessControlAllowOrigin()).isEqualTo("*");
73-
assertThat(response.getHeaders().getCacheControl()).isEqualTo("public, max-age=1");
71+
.customize(a -> a.senderAccountId(entityId.getId()))
72+
.persist();
73+
final ThrowingConsumer<String> executor = input -> {
74+
// When
75+
final var response = restClient.get().uri("", input).retrieve().toEntity(TokenAirdropsResponse.class);
76+
77+
// Then
78+
assertThat(response.getBody())
79+
.extracting(
80+
TokenAirdropsResponse::getAirdrops, InstanceOfAssertFactories.list(TokenAirdrop.class))
81+
.first()
82+
.isEqualTo(mapper.map(tokenAirdrop));
83+
// Based on application.yml response headers configuration
84+
assertThat(response.getHeaders().getAccessControlAllowOrigin()).isEqualTo("*");
85+
assertThat(response.getHeaders().getCacheControl()).isEqualTo("public, max-age=1");
86+
};
87+
88+
return DynamicTest.stream(inputs.iterator(), Function.identity(), executor);
7489
}
7590

7691
@Test
@@ -998,24 +1013,33 @@ protected RequestHeadersSpec<?> defaultRequest(RequestHeadersUriSpec<?> uriSpec)
9981013
return uriSpec.uri("", receiverId.getNum());
9991014
}
10001015

1001-
@ParameterizedTest
1002-
@CsvSource({"0.0.1000,1000", "0.1000,1000", "1000,1000"})
1003-
void entityId(String input, long num) {
1004-
// Given
1005-
var encodedId = domainBuilder.entityNum(num).getId();
1006-
var tokenAirdrop = domainBuilder
1016+
@TestFactory
1017+
Stream<DynamicTest> entityId() {
1018+
final var entityId = domainBuilder.entityNum(1000);
1019+
final var inputs = List.of(
1020+
entityId.toString(),
1021+
String.format("%d.%d", entityId.getRealm(), entityId.getNum()),
1022+
Long.toString(entityId.getNum()));
1023+
final var tokenAirdrop = domainBuilder
10071024
.tokenAirdrop(FUNGIBLE_COMMON)
1008-
.customize(a -> a.receiverAccountId(encodedId))
1009-
.persist();
1010-
1011-
// When
1012-
var response = restClient.get().uri("", input).retrieve().toEntity(TokenAirdropsResponse.class);
1013-
1014-
// Then
1015-
assertThat(response.getBody().getAirdrops().getFirst()).isEqualTo(mapper.map(tokenAirdrop));
1016-
// Based on application.yml response headers configuration
1017-
assertThat(response.getHeaders().getAccessControlAllowOrigin()).isEqualTo("*");
1018-
assertThat(response.getHeaders().getCacheControl()).isEqualTo("public, max-age=1");
1025+
.customize(a -> a.receiverAccountId(entityId.getId()))
1026+
.persist();
1027+
final ThrowingConsumer<String> executor = input -> {
1028+
// When
1029+
final var response = restClient.get().uri("", input).retrieve().toEntity(TokenAirdropsResponse.class);
1030+
1031+
// Then
1032+
assertThat(response.getBody())
1033+
.extracting(
1034+
TokenAirdropsResponse::getAirdrops, InstanceOfAssertFactories.list(TokenAirdrop.class))
1035+
.first()
1036+
.isEqualTo(mapper.map(tokenAirdrop));
1037+
// Based on application.yml response headers configuration
1038+
assertThat(response.getHeaders().getAccessControlAllowOrigin()).isEqualTo("*");
1039+
assertThat(response.getHeaders().getCacheControl()).isEqualTo("public, max-age=1");
1040+
};
1041+
1042+
return DynamicTest.stream(inputs.iterator(), Function.identity(), executor);
10191043
}
10201044

10211045
@Test

0 commit comments

Comments
 (0)