Skip to content

Commit cad8580

Browse files
committed
Fix deleteGraffiti method
1 parent f31b398 commit cad8580

File tree

5 files changed

+27
-35
lines changed

5 files changed

+27
-35
lines changed

validator/api/src/main/java/tech/pegasys/teku/validator/api/GraffitiManager.java

+5-14
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@
1616
import java.io.IOException;
1717
import java.nio.charset.StandardCharsets;
1818
import java.nio.file.Files;
19-
import java.nio.file.NoSuchFileException;
2019
import java.nio.file.Path;
2120
import java.util.Optional;
2221
import org.apache.logging.log4j.LogManager;
@@ -55,21 +54,13 @@ public void setGraffiti(final BLSPublicKey publicKey, final String graffiti) thr
5554
Files.writeString(file, strippedGraffiti);
5655
}
5756

58-
public Optional<String> deleteGraffiti(final BLSPublicKey publicKey) {
57+
public void deleteGraffiti(final BLSPublicKey publicKey) throws IOException {
5958
final Path file = directory.resolve(resolveFileName(publicKey));
60-
61-
try {
62-
Files.delete(file);
63-
return Optional.empty();
64-
} catch (NoSuchFileException e) {
65-
throw new IllegalArgumentException(
66-
"Saved graffiti does not exist for validator " + publicKey);
67-
} catch (IOException e) {
68-
final String errorMessage =
69-
String.format("Unable to delete graffiti for validator %s", publicKey);
70-
LOG.error(errorMessage, e);
71-
return Optional.of(errorMessage);
59+
if (!file.toFile().exists()) {
60+
return;
7261
}
62+
63+
Files.delete(file);
7364
}
7465

7566
public Optional<Bytes32> getGraffiti(final BLSPublicKey publicKey) {

validator/api/src/main/java/tech/pegasys/teku/validator/api/noop/NoOpGraffitiManager.java

+1-3
Original file line numberDiff line numberDiff line change
@@ -28,9 +28,7 @@ public NoOpGraffitiManager() {
2828
public void setGraffiti(final BLSPublicKey publicKey, final String graffiti) {}
2929

3030
@Override
31-
public Optional<String> deleteGraffiti(final BLSPublicKey publicKey) {
32-
return Optional.empty();
33-
}
31+
public void deleteGraffiti(final BLSPublicKey publicKey) {}
3432

3533
@Override
3634
public Optional<Bytes32> getGraffiti(final BLSPublicKey publicKey) {

validator/api/src/test/java/tech/pegasys/teku/validator/api/GraffitiManagerTest.java

+7-9
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
import static org.assertj.core.api.Assertions.assertThat;
1717
import static org.assertj.core.api.Assertions.assertThatThrownBy;
1818
import static org.assertj.core.api.Assertions.fail;
19+
import static org.junit.jupiter.api.Assertions.assertDoesNotThrow;
1920
import static tech.pegasys.teku.validator.api.GraffitiManager.GRAFFITI_DIR;
2021

2122
import java.io.File;
@@ -105,14 +106,12 @@ void setGraffiti_shouldThrowExceptionWhenGraffitiTooBig(@TempDir final Path temp
105106
}
106107

107108
@Test
108-
void deleteGraffiti_shouldThrowIllegalArgumentWhenNoGraffitiToDelete(
109-
@TempDir final Path tempDir) {
109+
void deleteGraffiti_shouldSucceedWhenNoGraffitiToDelete(@TempDir final Path tempDir) {
110110
dataDirLayout = new SimpleDataDirLayout(tempDir);
111111
manager = new GraffitiManager(dataDirLayout);
112112
assertThat(getGraffitiManagementDir().toFile().exists()).isTrue();
113-
assertThatThrownBy(() -> manager.deleteGraffiti(publicKey))
114-
.isInstanceOf(IllegalArgumentException.class)
115-
.hasMessage("Saved graffiti does not exist for validator " + publicKey);
113+
114+
assertDoesNotThrow(() -> manager.deleteGraffiti(publicKey));
116115
checkNoGraffitiFile(publicKey);
117116
}
118117

@@ -124,7 +123,7 @@ void deleteGraffiti_shouldDeleteGraffitiWhenFileExist(@TempDir final Path tempDi
124123
assertThat(getGraffitiManagementDir().resolve(getFileName(publicKey)).toFile().createNewFile())
125124
.isTrue();
126125

127-
assertThat(manager.deleteGraffiti(publicKey)).isEmpty();
126+
manager.deleteGraffiti(publicKey);
128127
checkNoGraffitiFile(publicKey);
129128
}
130129

@@ -139,8 +138,7 @@ void deleteGraffiti_shouldReturnErrorMessageWhenUnableToDeleteFile(@TempDir fina
139138
assertThat(file.createNewFile()).isTrue();
140139
assertThat(file.getParentFile().setWritable(false)).isTrue();
141140

142-
assertThat(manager.deleteGraffiti(publicKey))
143-
.hasValue("Unable to delete graffiti for validator " + publicKey);
141+
assertThatThrownBy(() -> manager.deleteGraffiti(publicKey)).isInstanceOf(IOException.class);
144142
assertThat(file.exists()).isTrue();
145143
}
146144

@@ -155,7 +153,7 @@ void shouldSetAndDeleteGraffitiWhenManagementPreexisting(@TempDir final Path tem
155153
manager.setGraffiti(publicKey, graffiti);
156154
checkStoredGraffitiFile(publicKey);
157155

158-
assertThat(manager.deleteGraffiti(publicKey)).isEmpty();
156+
manager.deleteGraffiti(publicKey);
159157
checkNoGraffitiFile(publicKey);
160158
}
161159

validator/client/src/main/java/tech/pegasys/teku/validator/client/restapi/apis/DeleteGraffiti.java

+6-4
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
import static tech.pegasys.teku.validator.client.restapi.ValidatorTypes.PARAM_PUBKEY_TYPE;
2121

2222
import com.fasterxml.jackson.core.JsonProcessingException;
23+
import java.io.IOException;
2324
import java.util.Optional;
2425
import tech.pegasys.teku.bls.BLSPublicKey;
2526
import tech.pegasys.teku.infrastructure.restapi.endpoints.EndpointMetadata;
@@ -62,11 +63,12 @@ public void handleRequest(final RestApiRequest request) throws JsonProcessingExc
6263
return;
6364
}
6465

65-
final Optional<String> error = graffitiManager.deleteGraffiti(publicKey);
66-
if (error.isPresent()) {
67-
request.respondError(SC_INTERNAL_SERVER_ERROR, error.get());
68-
} else {
66+
try {
67+
graffitiManager.deleteGraffiti(publicKey);
6968
request.respondWithCode(SC_NO_CONTENT);
69+
} catch (IOException e) {
70+
request.respondError(
71+
SC_INTERNAL_SERVER_ERROR, "Unable to delete graffiti for validator " + publicKey);
7072
}
7173
}
7274
}

validator/client/src/test/java/tech/pegasys/teku/validator/client/restapi/apis/DeleteGraffitiTest.java

+8-5
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515

1616
import static org.assertj.core.api.Assertions.assertThat;
1717
import static org.mockito.ArgumentMatchers.any;
18+
import static org.mockito.Mockito.doThrow;
1819
import static org.mockito.Mockito.mock;
1920
import static org.mockito.Mockito.when;
2021
import static tech.pegasys.teku.infrastructure.http.HttpStatusCodes.SC_BAD_REQUEST;
@@ -55,10 +56,10 @@ class DeleteGraffitiTest {
5556
.build();
5657

5758
@Test
58-
void shouldSuccessfullyDeleteGraffiti() throws JsonProcessingException {
59+
void shouldSuccessfullyDeleteGraffiti() throws IOException {
5960
final Validator validator = new Validator(publicKey, NO_OP_SIGNER, Optional::empty);
6061
when(keyManager.getValidatorByPublicKey(any())).thenReturn(Optional.of(validator));
61-
when(graffitiManager.deleteGraffiti(any())).thenReturn(Optional.empty());
62+
graffitiManager.deleteGraffiti(any());
6263

6364
handler.handleRequest(request);
6465

@@ -67,16 +68,18 @@ void shouldSuccessfullyDeleteGraffiti() throws JsonProcessingException {
6768
}
6869

6970
@Test
70-
void shouldReturnErrorWhenIssueDeleting() throws JsonProcessingException {
71+
void shouldReturnErrorWhenIssueDeleting() throws IOException {
7172
final Validator validator = new Validator(publicKey, NO_OP_SIGNER, Optional::empty);
7273
when(keyManager.getValidatorByPublicKey(any())).thenReturn(Optional.of(validator));
73-
when(graffitiManager.deleteGraffiti(any())).thenReturn(Optional.of("Error deleting graffiti"));
74+
doThrow(IOException.class).when(graffitiManager).deleteGraffiti(any());
7475

7576
handler.handleRequest(request);
7677

7778
assertThat(request.getResponseCode()).isEqualTo(SC_INTERNAL_SERVER_ERROR);
7879
assertThat(request.getResponseBody())
79-
.isEqualTo(new HttpErrorResponse(SC_INTERNAL_SERVER_ERROR, "Error deleting graffiti"));
80+
.isEqualTo(
81+
new HttpErrorResponse(
82+
SC_INTERNAL_SERVER_ERROR, "Unable to delete graffiti for validator " + publicKey));
8083
}
8184

8285
@Test

0 commit comments

Comments
 (0)