Skip to content

Commit 5915bae

Browse files
Merge pull request #153 from OpenElements/HieroTestContext
HieroTestContext updated to use NetworkSettings
2 parents 4b81c80 + 26af99c commit 5915bae

File tree

9 files changed

+150
-72
lines changed

9 files changed

+150
-72
lines changed

hiero-enterprise-base/src/test/java/com/openelements/hiero/base/test/HieroTestContext.java

Lines changed: 0 additions & 68 deletions
This file was deleted.

hiero-enterprise-base/src/test/java/com/openelements/hiero/base/test/ProtocolLayerClientAccountTests.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,12 +6,13 @@
66
import com.openelements.hiero.base.HieroException;
77
import com.openelements.hiero.base.data.Account;
88
import com.openelements.hiero.base.implementation.ProtocolLayerClientImpl;
9+
import com.openelements.hiero.base.protocol.ProtocolLayerClient;
910
import com.openelements.hiero.base.protocol.data.AccountBalanceRequest;
1011
import com.openelements.hiero.base.protocol.data.AccountBalanceResponse;
1112
import com.openelements.hiero.base.protocol.data.AccountCreateRequest;
1213
import com.openelements.hiero.base.protocol.data.AccountCreateResult;
1314
import com.openelements.hiero.base.protocol.data.AccountDeleteRequest;
14-
import com.openelements.hiero.base.protocol.ProtocolLayerClient;
15+
import com.openelements.hiero.base.test.config.HieroTestContext;
1516
import org.junit.jupiter.api.Assertions;
1617
import org.junit.jupiter.api.BeforeAll;
1718
import org.junit.jupiter.api.Test;

hiero-enterprise-base/src/test/java/com/openelements/hiero/base/test/ProtocolLayerClientTokenTests.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
import com.openelements.hiero.base.protocol.data.TokenCreateResult;
1111
import com.openelements.hiero.base.protocol.data.TokenMintRequest;
1212
import com.openelements.hiero.base.protocol.data.TokenMintResult;
13+
import com.openelements.hiero.base.test.config.HieroTestContext;
1314
import org.junit.jupiter.api.Assertions;
1415
import org.junit.jupiter.api.BeforeAll;
1516
import org.junit.jupiter.api.Test;
Lines changed: 79 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,79 @@
1+
package com.openelements.hiero.base.test.config;
2+
3+
import com.hedera.hashgraph.sdk.AccountId;
4+
import com.hedera.hashgraph.sdk.Client;
5+
import com.hedera.hashgraph.sdk.PrivateKey;
6+
import com.hedera.hashgraph.sdk.PublicKey;
7+
import com.openelements.hiero.base.HieroContext;
8+
import com.openelements.hiero.base.config.NetworkSettings;
9+
import com.openelements.hiero.base.data.Account;
10+
import io.github.cdimascio.dotenv.Dotenv;
11+
import java.util.HashMap;
12+
import java.util.Map;
13+
import java.util.Optional;
14+
import org.jspecify.annotations.NonNull;
15+
import org.slf4j.Logger;
16+
17+
public class HieroTestContext implements HieroContext {
18+
19+
private final static Logger log = org.slf4j.LoggerFactory.getLogger(HieroTestContext.class);
20+
21+
private final Account operationalAccount;
22+
23+
private final Client client;
24+
25+
public HieroTestContext() {
26+
final Dotenv dotenv = Dotenv.configure().ignoreIfMissing().load();
27+
28+
final String hieroAccountIdByEnv = Optional.ofNullable(System.getenv("HEDERA_ACCOUNT_ID"))
29+
.orElse(dotenv.get("hiero.accountId"));
30+
final String hieroPrivateKeyByEnv = Optional.ofNullable(System.getenv("HEDERA_PRIVATE_KEY"))
31+
.orElse(dotenv.get("hiero.privateKey"));
32+
final String hieroNetwork = Optional.ofNullable(System.getenv("HEDERA_NETWORK"))
33+
.or(() -> Optional.ofNullable(dotenv.get("hiero.network")))
34+
.orElse("hedera-testnet");
35+
36+
if (hieroAccountIdByEnv == null) {
37+
throw new IllegalStateException(
38+
"AccountId for operator account is not set. Please set 'HEDERA_ACCOUNT_ID' or 'hiero.accountId' in .env file.");
39+
}
40+
if (hieroPrivateKeyByEnv == null) {
41+
throw new IllegalStateException(
42+
"PrivateKey for operator account is not set. Please set 'HEDERA_PRIVATE_KEY' or 'hiero.privateKey' in .env file.");
43+
}
44+
45+
log.info("Using operator account: {}", hieroAccountIdByEnv);
46+
log.info("Using network: {}", hieroNetwork);
47+
48+
final AccountId accountId = AccountId.fromString(hieroAccountIdByEnv);
49+
final PrivateKey privateKey = PrivateKey.fromString(hieroPrivateKeyByEnv);
50+
final PublicKey publicKey = privateKey.getPublicKey();
51+
operationalAccount = new Account(accountId, publicKey, privateKey);
52+
53+
final NetworkSettings networkSettings = NetworkSettings.forIdentifier(hieroNetwork)
54+
.orElseThrow(() -> new IllegalStateException("ENV 'HEDERA_NETWORK' is set to '" + hieroNetwork
55+
+ "' but no network settings are available for this network."));
56+
57+
final Map<String, AccountId> nodes = new HashMap<>();
58+
networkSettings.getConsensusNodes()
59+
.forEach(consensusNode -> nodes.put(consensusNode.getAddress(), consensusNode.getAccountId()));
60+
client = Client.forNetwork(nodes);
61+
if (!networkSettings.getMirrorNodeAddresses().isEmpty()) {
62+
try {
63+
client.setMirrorNetwork(networkSettings.getMirrorNodeAddresses().stream().toList());
64+
} catch (InterruptedException e) {
65+
throw new RuntimeException("Error in configuring Mirror Node", e);
66+
}
67+
}
68+
client.setOperator(accountId, privateKey);
69+
}
70+
71+
@Override
72+
public @NonNull Account getOperatorAccount() {
73+
return operationalAccount;
74+
}
75+
76+
public Client getClient() {
77+
return client;
78+
}
79+
}
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
package com.openelements.hiero.base.test.config;
2+
3+
import com.openelements.hiero.base.config.ConsensusNode;
4+
import com.openelements.hiero.base.config.NetworkSettings;
5+
import java.util.Optional;
6+
import java.util.Set;
7+
import org.jspecify.annotations.NonNull;
8+
9+
10+
public class SoloActionNetworkSettings implements NetworkSettings {
11+
12+
@Override
13+
public @NonNull String getNetworkIdentifier() {
14+
return "hiero-solo-action";
15+
}
16+
17+
@Override
18+
public @NonNull Optional<String> getNetworkName() {
19+
return Optional.of("Hiero Solo Action");
20+
}
21+
22+
@Override
23+
public @NonNull Set<String> getMirrorNodeAddresses() {
24+
return Set.of("http://localhost:8080");
25+
}
26+
27+
@Override
28+
public @NonNull Set<ConsensusNode> getConsensusNodes() {
29+
return Set.of(new ConsensusNode("127.0.0.1", "50211", "0.0.3"));
30+
}
31+
32+
@Override
33+
public @NonNull Optional<Long> chainId() {
34+
return Optional.empty();
35+
}
36+
37+
@Override
38+
public @NonNull Optional<String> relayUrl() {
39+
return Optional.empty();
40+
}
41+
}
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
package com.openelements.hiero.base.test.config;
2+
3+
import com.openelements.hiero.base.config.NetworkSettings;
4+
import com.openelements.hiero.base.config.NetworkSettingsProvider;
5+
import java.util.Set;
6+
7+
public class SoloActionNetworkSettingsProvider implements NetworkSettingsProvider {
8+
9+
@Override
10+
public String getName() {
11+
return "Provider for Hiero Solo Action";
12+
}
13+
14+
@Override
15+
public Set<NetworkSettings> createNetworkSettings() {
16+
return Set.of(new SoloActionNetworkSettings());
17+
}
18+
}

hiero-enterprise-base/src/test/java/module-info.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,4 +5,7 @@
55
requires org.junit.jupiter.api;
66
requires org.junit.jupiter.params;
77
requires org.mockito;
8+
requires org.slf4j;
9+
10+
provides com.openelements.hiero.base.config.NetworkSettingsProvider with com.openelements.hiero.base.test.config.SoloActionNetworkSettingsProvider;
811
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
com.openelements.hiero.base.test.config.SoloActionNetworkSettingsProvider

hiero-enterprise-microprofile/src/test/java/com/openelements/hiero/microprofile/test/TestConfigSource.java

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,8 @@ public class TestConfigSource implements ConfigSource {
1515
private final Map<String, String> properties;
1616

1717
public TestConfigSource() {
18+
final Dotenv dotenv = Dotenv.configure().ignoreIfMissing().load();
19+
1820
properties = new HashMap<>();
1921
properties.put("mp.initializer.allow", "true");
2022
properties.put("mp.initializer.no-warn", "true");
@@ -23,21 +25,21 @@ public TestConfigSource() {
2325
if (hieroAccountIdByEnv != null) {
2426
properties.put("hiero.accountId", hieroAccountIdByEnv);
2527
} else {
26-
properties.put("hiero.accountId", Dotenv.load().get("hiero.accountId"));
28+
properties.put("hiero.accountId", dotenv.get("hiero.accountId"));
2729
}
2830

2931
final String hieroPrivateKeyByEnv = System.getenv("HEDERA_PRIVATE_KEY");
3032
if (hieroPrivateKeyByEnv != null) {
3133
properties.put("hiero.privateKey", hieroPrivateKeyByEnv);
3234
} else {
33-
properties.put("hiero.privateKey", Dotenv.load().get("hiero.privateKey"));
35+
properties.put("hiero.privateKey", dotenv.get("hiero.privateKey"));
3436
}
3537

3638
final String hieroNetwork = System.getenv("HEDERA_NETWORK");
3739
if (hieroNetwork != null) {
3840
properties.put("hiero.network.name", hieroNetwork);
3941
} else {
40-
properties.put("hiero.network.name", Dotenv.load().get("hiero.network.name"));
42+
properties.put("hiero.network.name", dotenv.get("hiero.network.name"));
4143
}
4244

4345
properties.forEach((k, v) -> log.info("CONFIG: '" + k + "'->'" + v + "'"));

0 commit comments

Comments
 (0)