Skip to content

Commit 6f6474d

Browse files
authored
feat: update network size logic (#2564)
Signed-off-by: emiliyank <e.kadiyski@gmail.com>
1 parent 839d855 commit 6f6474d

2 files changed

Lines changed: 120 additions & 1 deletion

File tree

sdk/src/main/java/com/hedera/hashgraph/sdk/Network.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -277,7 +277,7 @@ int getNumberOfNodesForRequest() {
277277
if (maxNodesPerRequest != null) {
278278
return Math.min(maxNodesPerRequest, network.size());
279279
} else {
280-
return (network.size() + 3 - 1) / 3;
280+
return (network.size());
281281
}
282282
}
283283

Lines changed: 119 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,119 @@
1+
// SPDX-License-Identifier: Apache-2.0
2+
package com.hedera.hashgraph.sdk;
3+
4+
import static org.assertj.core.api.Assertions.assertThat;
5+
6+
import java.util.HashMap;
7+
import java.util.Map;
8+
import java.util.concurrent.ExecutorService;
9+
import java.util.concurrent.LinkedBlockingQueue;
10+
import java.util.concurrent.ThreadPoolExecutor;
11+
import java.util.concurrent.TimeUnit;
12+
import org.junit.jupiter.api.AfterEach;
13+
import org.junit.jupiter.api.BeforeEach;
14+
import org.junit.jupiter.api.DisplayName;
15+
import org.junit.jupiter.api.Test;
16+
17+
class NetworkTest {
18+
19+
private ExecutorService executor;
20+
21+
@BeforeEach
22+
void setUp() {
23+
executor = new ThreadPoolExecutor(
24+
2,
25+
2,
26+
0L,
27+
TimeUnit.MILLISECONDS,
28+
new LinkedBlockingQueue<>(),
29+
new ThreadPoolExecutor.CallerRunsPolicy());
30+
}
31+
32+
@AfterEach
33+
void tearDown() {
34+
if (executor != null) {
35+
executor.shutdown();
36+
}
37+
}
38+
39+
@Test
40+
@DisplayName("When maxNodesPerRequest is NOT set, return full network size")
41+
void getNumberOfNodesForRequestReturnsFullNetworkSizeWhenNotSet() {
42+
Network network = createNetwork(3);
43+
44+
// When maxNodesPerRequest is not set, should return full network size
45+
int numberOfNodes = network.getNumberOfNodesForRequest();
46+
assertThat(numberOfNodes).isEqualTo(3);
47+
}
48+
49+
@Test
50+
@DisplayName("When maxNodesPerRequest IS set, return the limit if network is larger")
51+
void getNumberOfNodesForRequestReturnsMaxWhenSetAndLessThanNetworkSize() {
52+
Network network = createNetwork(5);
53+
54+
// Set maxNodesPerRequest to 2
55+
network.setMaxNodesPerRequest(2);
56+
57+
// Should return 2
58+
int numberOfNodes = network.getNumberOfNodesForRequest();
59+
assertThat(numberOfNodes).isEqualTo(2);
60+
}
61+
62+
@Test
63+
@DisplayName("When maxNodesPerRequest IS set, return actual size if network is smaller than limit")
64+
void getNumberOfNodesForRequestReturnsNetworkSizeWhenMaxIsGreater() {
65+
Network network = createNetwork(2);
66+
67+
// Set maxNodesPerRequest to 10 (greater than network size)
68+
network.setMaxNodesPerRequest(10);
69+
70+
// Should return 2 (the network size, not 10)
71+
int numberOfNodes = network.getNumberOfNodesForRequest();
72+
assertThat(numberOfNodes).isEqualTo(2);
73+
}
74+
75+
@Test
76+
@DisplayName("When maxNodesPerRequest equals network size, return network size")
77+
void getNumberOfNodesForRequestReturnsNetworkSizeWhenMaxEqualsNetworkSize() {
78+
Network network = createNetwork(4);
79+
80+
// Set maxNodesPerRequest to 4 (equals network size)
81+
network.setMaxNodesPerRequest(4);
82+
83+
// Should return 4
84+
int numberOfNodes = network.getNumberOfNodesForRequest();
85+
assertThat(numberOfNodes).isEqualTo(4);
86+
}
87+
88+
@Test
89+
@DisplayName("Single node network returns 1")
90+
void getNumberOfNodesForRequestReturnsOneForSingleNodeNetwork() {
91+
Network network = createNetwork(1);
92+
93+
// Should return 1
94+
int numberOfNodes = network.getNumberOfNodesForRequest();
95+
assertThat(numberOfNodes).isEqualTo(1);
96+
}
97+
98+
@Test
99+
@DisplayName("Empty network returns 0")
100+
void getNumberOfNodesForRequestReturnsZeroForEmptyNetwork() {
101+
Network network = createNetwork(0);
102+
103+
// Should return 0
104+
int numberOfNodes = network.getNumberOfNodesForRequest();
105+
assertThat(numberOfNodes).isEqualTo(0);
106+
}
107+
108+
/**
109+
* Helper method to generate a network of a specific size.
110+
*/
111+
private Network createNetwork(int nodeCount) {
112+
Map<String, AccountId> networkMap = new HashMap<>();
113+
for (int i = 0; i < nodeCount; i++) {
114+
// Generate dummy node addresses and IDs
115+
networkMap.put(i + ".testnet.hedera.com:50211", new AccountId(0, 0, 3 + i));
116+
}
117+
return Network.forNetwork(executor, networkMap);
118+
}
119+
}

0 commit comments

Comments
 (0)