14
14
import org .hiero .mirror .common .domain .addressbook .NodeStake ;
15
15
import org .hiero .mirror .common .domain .node .Node ;
16
16
import org .hiero .mirror .common .domain .node .ServiceEndpoint ;
17
- import org .hiero .mirror .common .domain .transaction .RecordItem ;
18
17
import org .hiero .mirror .common .domain .transaction .Transaction ;
19
18
import org .hiero .mirror .common .util .DomainUtils ;
20
19
import org .hiero .mirror .importer .repository .NetworkStakeRepository ;
24
23
import org .junit .jupiter .api .Test ;
25
24
26
25
@ RequiredArgsConstructor
27
- class EntityRecordItemListenerNodeTest extends AbstractEntityRecordItemListenerTest {
26
+ final class EntityRecordItemListenerNodeTest extends AbstractEntityRecordItemListenerTest {
28
27
29
28
private final NodeRepository nodeRepository ;
30
29
private final NetworkStakeRepository networkStakeRepository ;
31
30
private final NodeStakeRepository nodeStakeRepository ;
32
31
33
- private static Node .NodeBuilder <?, ?> getExpectedNode (RecordItem recordItem ) {
34
- return Node .builder ()
35
- .createdTimestamp (recordItem .getConsensusTimestamp ())
36
- .declineReward (false )
37
- .nodeId (recordItem .getTransactionRecord ().getReceipt ().getNodeId ())
38
- .timestampRange (Range .atLeast (recordItem .getConsensusTimestamp ()));
39
- }
40
-
41
32
@ SuppressWarnings ("deprecation" )
42
33
@ Test
43
34
void nodeStakeUpdate () {
@@ -101,13 +92,17 @@ void nodeCreate() {
101
92
var recordItem = recordItemBuilder .nodeCreate ().build ();
102
93
var nodeCreate = recordItem .getTransactionBody ().getNodeCreate ();
103
94
var protoEndpoint = nodeCreate .getGrpcProxyEndpoint ();
104
- var expectedNode = getExpectedNode ( recordItem )
95
+ var expectedNode = Node . builder ( )
105
96
.adminKey (nodeCreate .getAdminKey ().toByteArray ())
97
+ .createdTimestamp (recordItem .getConsensusTimestamp ())
98
+ .declineReward (false )
106
99
.grpcProxyEndpoint (ServiceEndpoint .builder ()
107
100
.domainName (protoEndpoint .getDomainName ())
108
101
.ipAddressV4 ("" )
109
102
.port (protoEndpoint .getPort ())
110
103
.build ())
104
+ .nodeId (recordItem .getTransactionRecord ().getReceipt ().getNodeId ())
105
+ .timestampRange (Range .atLeast (recordItem .getConsensusTimestamp ()))
111
106
.build ();
112
107
113
108
parseRecordItemAndCommit (recordItem );
@@ -162,12 +157,42 @@ void nodeUpdate() {
162
157
softly .assertThat (findHistory (Node .class )).containsExactly (node );
163
158
}
164
159
160
+ @ Test
161
+ void nodeUpdateUnsetGrpcProxyEndpoint () {
162
+ var recordItem = recordItemBuilder
163
+ .nodeUpdate ()
164
+ .transactionBody (b -> b .clearAdminKey ()
165
+ .setGrpcProxyEndpoint (com .hederahashgraph .api .proto .java .ServiceEndpoint .getDefaultInstance ()))
166
+ .build ();
167
+ var nodeUpdate = recordItem .getTransactionBody ().getNodeUpdate ();
168
+ var timestamp = recordItem .getConsensusTimestamp () - 1 ;
169
+ var node = domainBuilder
170
+ .node ()
171
+ .customize (n -> n .createdTimestamp (timestamp )
172
+ .nodeId (nodeUpdate .getNodeId ())
173
+ .timestampRange (Range .atLeast (timestamp )))
174
+ .persist ();
175
+
176
+ var expectedNode = node .toBuilder ()
177
+ .grpcProxyEndpoint (null ) // Should clear
178
+ .timestampRange (Range .atLeast (recordItem .getConsensusTimestamp ()))
179
+ .build ();
180
+
181
+ parseRecordItemAndCommit (recordItem );
182
+
183
+ node .setTimestampUpper (recordItem .getConsensusTimestamp ());
184
+
185
+ softly .assertThat (nodeRepository .findAll ()).containsExactly (expectedNode );
186
+ softly .assertThat (findHistory (Node .class )).containsExactly (node );
187
+ }
188
+
165
189
@ Test
166
190
void nodeUpdateNoChange () {
167
191
var recordItem = recordItemBuilder
168
192
.nodeUpdate ()
169
193
.transactionBody (NodeUpdateTransactionBody .Builder ::clearAdminKey )
170
194
.transactionBody (NodeUpdateTransactionBody .Builder ::clearDeclineReward )
195
+ .transactionBody (NodeUpdateTransactionBody .Builder ::clearGrpcProxyEndpoint )
171
196
.build ();
172
197
var nodeUpdate = recordItem .getTransactionBody ().getNodeUpdate ();
173
198
var timestamp = recordItem .getConsensusTimestamp () - 1 ;
@@ -211,10 +236,9 @@ void nodeDelete() {
211
236
.receipt (r -> r .setNodeId (node .getNodeId ()))
212
237
.transactionBody (b -> b .setNodeId (node .getNodeId ()))
213
238
.build ();
214
- var expectedNode = getExpectedNode (recordItem )
215
- .adminKey (node .getAdminKey ())
216
- .createdTimestamp (node .getCreatedTimestamp ())
239
+ var deletedNode = node .toBuilder ()
217
240
.deleted (true )
241
+ .timestampRange (Range .atLeast (recordItem .getConsensusTimestamp ()))
218
242
.build ();
219
243
220
244
parseRecordItemAndCommit (recordItem );
@@ -228,7 +252,7 @@ void nodeDelete() {
228
252
.isNotNull ()
229
253
.returns (recordItem .getTransaction ().toByteArray (), Transaction ::getTransactionBytes )
230
254
.returns (recordItem .getTransactionRecord ().toByteArray (), Transaction ::getTransactionRecordBytes );
231
- softly .assertThat (nodeRepository .findAll ()).containsExactly (expectedNode );
255
+ softly .assertThat (nodeRepository .findAll ()).containsExactly (deletedNode );
232
256
softly .assertThat (findHistory (Node .class )).containsExactly (node );
233
257
}
234
258
}
0 commit comments