Skip to content

Commit 78aebc7

Browse files
committed
turn getRetiringFederationAddress to return an optional, added two tests to BridgeIT to check the returned string is correct
1 parent e17a688 commit 78aebc7

File tree

10 files changed

+56
-30
lines changed

10 files changed

+56
-30
lines changed

rskj-core/src/main/java/co/rsk/peg/Bridge.java

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -860,14 +860,11 @@ public long getFederationCreationBlockNumber(Object[] args) {
860860
public String getRetiringFederationAddress(Object[] args) {
861861
logger.trace("getRetiringFederationAddress");
862862

863-
Address address = bridgeSupport.getRetiringFederationAddress();
863+
Optional<Address> address = bridgeSupport.getRetiringFederationAddress();
864864

865-
if (address == null) {
866-
// When there's no address, empty string is returned
867-
return "";
868-
}
865+
// When there's no address, empty string is returned
866+
return address.map(Address::toBase58).orElse("");
869867

870-
return address.toBase58();
871868
}
872869

873870
public Integer getRetiringFederationSize(Object[] args) {

rskj-core/src/main/java/co/rsk/peg/BridgeSupport.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1271,10 +1271,11 @@ private void processFundsMigration(Transaction rskTx) throws IOException {
12711271
availableUTXOs
12721272
);
12731273
} catch (Exception e) {
1274+
// Funds cannot be migrated if there is no retiring federation
12741275
logger.error(
12751276
"[processFundsMigration] Unable to complete retiring federation migration. Balance left: {} in {}",
12761277
retiringFederationWallet.getBalance().toFriendlyString(),
1277-
getRetiringFederationAddress()
1278+
getRetiringFederationAddress().get()
12781279
);
12791280
panicProcessor.panic("updateCollection", "Unable to complete retiring federation migration.");
12801281
}
@@ -2334,7 +2335,7 @@ public long getActiveFederationCreationBlockNumber() {
23342335
return federationSupport.getActiveFederationCreationBlockNumber();
23352336
}
23362337

2337-
public Address getRetiringFederationAddress() {
2338+
public Optional<Address> getRetiringFederationAddress() {
23382339
return federationSupport.getRetiringFederationAddress();
23392340
}
23402341

rskj-core/src/main/java/co/rsk/peg/federation/FederationSupport.java

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -83,10 +83,12 @@ public interface FederationSupport {
8383
Optional<Federation> getRetiringFederation();
8484

8585
/**
86-
* Returns the retiring federation bitcoin address.
87-
* @return the retiring federation bitcoin address, null if no retiring federation exists
86+
* Returns the retiring federation bitcoin address, if it exists.
87+
*
88+
* @return An {@link Optional} containing the retiring federation address,
89+
* or an empty {@link Optional} if no retiring federation exists
8890
*/
89-
Address getRetiringFederationAddress();
91+
Optional<Address> getRetiringFederationAddress();
9092

9193
/**
9294
* Returns the currently retiring federation size, if it exists.

rskj-core/src/main/java/co/rsk/peg/federation/FederationSupportImpl.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -215,9 +215,9 @@ private StorageFederationReference getRetiringFederationReference() {
215215
}
216216

217217
@Override
218-
public Address getRetiringFederationAddress() {
218+
public Optional<Address> getRetiringFederationAddress() {
219219
Optional<Federation> retiringFederation = getRetiringFederation();
220-
return retiringFederation.map(Federation::getAddress).orElse(null);
220+
return retiringFederation.map(Federation::getAddress);
221221
}
222222

223223
@Override

rskj-core/src/test/java/co/rsk/peg/BridgeIT.java

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1968,6 +1968,25 @@ void getRetiringFederationCreationBlockNumber() {
19681968
MatcherAssert.assertThat(bridge.getRetiringFederationCreationBlockNumber(new Object[]{}), is(retiringFederationCreationBlockNumber));
19691969
}
19701970

1971+
@Test
1972+
void getRetiringFederationAddress_withNoRetiringFederation_shouldReturnEmptyString() {
1973+
Bridge bridge = new Bridge(BRIDGE_ADDRESS, constants, activationConfig, null, signatureCache);
1974+
BridgeSupport bridgeSupportMock = mock(BridgeSupport.class);
1975+
TestUtils.setInternalState(bridge, "bridgeSupport", bridgeSupportMock);
1976+
when(bridgeSupportMock.getRetiringFederation()).thenReturn(Optional.empty());
1977+
MatcherAssert.assertThat(bridge.getRetiringFederationAddress(new Object[]{}), is(""));
1978+
}
1979+
1980+
@Test
1981+
void getRetiringFederationAddress_withRetiringFederation_shouldReturnTheCorrectRetiringFederationAddress() {
1982+
Bridge bridge = new Bridge(BRIDGE_ADDRESS, constants, activationConfig, null, signatureCache);
1983+
BridgeSupport bridgeSupportMock = mock(BridgeSupport.class);
1984+
TestUtils.setInternalState(bridge, "bridgeSupport", bridgeSupportMock);
1985+
Address retiringFederationAddress = new BtcECKey().toAddress(regtestParameters);
1986+
when(bridgeSupportMock.getRetiringFederationAddress()).thenReturn(Optional.of(retiringFederationAddress));
1987+
MatcherAssert.assertThat(bridge.getRetiringFederationAddress(new Object[]{}), is(retiringFederationAddress.toBase58()));
1988+
}
1989+
19711990
@Test
19721991
void getRetiringFederatorPublicKey_beforeMultikey() throws Exception {
19731992
doReturn(false).when(activationConfig).isActive(eq(RSKIP123), anyLong());

rskj-core/src/test/java/co/rsk/peg/BridgeSupportIT.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2489,7 +2489,9 @@ void getRetiringFederationMethods_presentNewActive() {
24892489
assertTrue(retiringFederationCreationTime.isPresent());
24902490
assertEquals(1000, retiringFederationCreationTime.get().toEpochMilli());
24912491

2492-
assertEquals(mockedOldFederation.getAddress().toString(), bridgeSupport.getRetiringFederationAddress().toString());
2492+
Optional<Address> retiringFederationAddress = bridgeSupport.getRetiringFederationAddress();
2493+
assertTrue(retiringFederationAddress.isPresent());
2494+
assertEquals(mockedOldFederation.getAddress().toString(), retiringFederationAddress.get().toString());
24932495
List<FederationMember> members = FederationTestUtils.getFederationMembers(4);
24942496
for (int i = 0; i < 4; i++) {
24952497
assertArrayEquals(

rskj-core/src/test/java/co/rsk/peg/BridgeSupportTest.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -469,8 +469,9 @@ void getRetiringFederation() {
469469
void getRetiringFederationAddress() {
470470
Address address = federation.getAddress();
471471

472-
when(federationSupport.getRetiringFederationAddress()).thenReturn(address);
473-
assertThat(bridgeSupport.getRetiringFederationAddress(), is(address));
472+
Optional<Address> retiringFederationAddressOptional = Optional.of(address);
473+
when(federationSupport.getRetiringFederationAddress()).thenReturn(retiringFederationAddressOptional);
474+
assertThat(bridgeSupport.getRetiringFederationAddress(), is(retiringFederationAddressOptional));
474475
}
475476

476477
@Test

rskj-core/src/test/java/co/rsk/peg/BridgeTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2040,7 +2040,7 @@ void getRetiringFederationAddress(MessageCall.MsgType msgType, ActivationConfig
20402040

20412041
BridgeSupport bridgeSupportMock = mock(BridgeSupport.class);
20422042
Address retiringFederationAddress = Address.fromBase58(networkParameters, "32Bhwee9FzQbuaG29RcXpdrvYnvZeMk11M");
2043-
when(bridgeSupportMock.getRetiringFederationAddress()).thenReturn(retiringFederationAddress);
2043+
when(bridgeSupportMock.getRetiringFederationAddress()).thenReturn(Optional.of(retiringFederationAddress));
20442044

20452045
Bridge bridge = bridgeBuilder
20462046
.transaction(rskTxMock)

rskj-core/src/test/java/co/rsk/peg/federation/FederationChangeIT.java

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -879,7 +879,9 @@ private void assertNewAndOldFederationsReferences(Federation expectedNewFederati
879879

880880
private void assertActiveAndRetiringFederationsHaveExpectedAddress(Address expectedNewFederationAddress, Address expectedOldFederationAddress) {
881881
assertEquals(expectedNewFederationAddress, bridgeSupport.getActiveFederationAddress());
882-
assertEquals(expectedOldFederationAddress, bridgeSupport.getRetiringFederationAddress());
882+
Optional<Address> retiringFederationAddress = bridgeSupport.getRetiringFederationAddress();
883+
assertTrue(retiringFederationAddress.isPresent());
884+
assertEquals(expectedOldFederationAddress, retiringFederationAddress.get());
883885
}
884886

885887
private void assertNextFederationCreationBlockHeight(long newFederationCreationBlockNumber) {
@@ -907,7 +909,8 @@ private void assertMigrationHasStarted() throws Exception {
907909
private void assertOnlyActiveFedIsLive(Federation newFederation) {
908910
// New active federation still there, retiring federation no longer there
909911
assertEquals(newFederation, bridgeSupport.getActiveFederation());
910-
assertNull(bridgeSupport.getRetiringFederationAddress());
912+
Optional<Address> retiringFederationAddress = bridgeSupport.getRetiringFederationAddress();
913+
assertTrue(retiringFederationAddress.isEmpty());
911914
}
912915

913916
private void assertLastRetiredFederationP2SHScriptMatchesWithOriginalFederation(

rskj-core/src/test/java/co/rsk/peg/federation/FederationSupportImplTest.java

Lines changed: 12 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1277,9 +1277,9 @@ void getRetiringFederation_returnsEmpty() {
12771277

12781278
@Test
12791279
@Tag("getRetiringFederationAddress")
1280-
void getRetiringFederationAddress_returnsNull() {
1281-
Address retiringFederationAddress = federationSupport.getRetiringFederationAddress();
1282-
assertThat(retiringFederationAddress, is(nullValue()));
1280+
void getRetiringFederationAddress_returnsEmpty() {
1281+
Optional<Address> retiringFederationAddress = federationSupport.getRetiringFederationAddress();
1282+
assertTrue(retiringFederationAddress.isEmpty());
12831283
}
12841284

12851285
@Test
@@ -1366,9 +1366,9 @@ void getRetiringFederation_returnsEmpty() {
13661366

13671367
@Test
13681368
@Tag("getRetiringFederationAddress")
1369-
void getRetiringFederationAddress_returnsNull() {
1370-
Address retiringFederationAddress = federationSupport.getRetiringFederationAddress();
1371-
assertThat(retiringFederationAddress, is(nullValue()));
1369+
void getRetiringFederationAddress_returnsEmpty() {
1370+
Optional<Address> retiringFederationAddress = federationSupport.getRetiringFederationAddress();
1371+
assertTrue(retiringFederationAddress.isEmpty());
13721372
}
13731373

13741374
@Test
@@ -1518,7 +1518,7 @@ void getRetiringFederation_withNewFederationActive_returnsOldFederation(
15181518
@ParameterizedTest
15191519
@Tag("getRetiringFederationAddress")
15201520
@MethodSource("newFederationNotActiveActivationArgs")
1521-
void getRetiringFederationAddress_withNewFederationNotActive_returnsNull(
1521+
void getRetiringFederationAddress_withNewFederationNotActive_returnsEmpty(
15221522
long currentBlock,
15231523
ActivationConfig.ForBlock activations) {
15241524

@@ -1532,8 +1532,8 @@ void getRetiringFederationAddress_withNewFederationNotActive_returnsNull(
15321532
.withActivations(activations)
15331533
.build();
15341534

1535-
Address retiringFederationAddress = federationSupport.getRetiringFederationAddress();
1536-
assertThat(retiringFederationAddress, is(nullValue()));
1535+
Optional<Address> retiringFederationAddress = federationSupport.getRetiringFederationAddress();
1536+
assertTrue(retiringFederationAddress.isEmpty());
15371537
}
15381538

15391539
@ParameterizedTest
@@ -1553,8 +1553,9 @@ void getRetiringFederationAddress_withNewFederationActive_returnsOldFederationAd
15531553
.withActivations(activations)
15541554
.build();
15551555

1556-
Address retiringFederationAddress = federationSupport.getRetiringFederationAddress();
1557-
assertThat(retiringFederationAddress, is(oldFederation.getAddress()));
1556+
Optional<Address> retiringFederationAddress = federationSupport.getRetiringFederationAddress();
1557+
assertTrue(retiringFederationAddress.isPresent());
1558+
assertThat(retiringFederationAddress.get(), is(oldFederation.getAddress()));
15581559
}
15591560

15601561
@ParameterizedTest

0 commit comments

Comments
 (0)