Skip to content

Commit f31b398

Browse files
committed
Fix setGraffiti method
1 parent e46435b commit f31b398

File tree

5 files changed

+31
-34
lines changed

5 files changed

+31
-34
lines changed

Diff for: validator/api/src/main/java/tech/pegasys/teku/validator/api/GraffitiManager.java

+3-11
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ public GraffitiManager(final Path directory) {
4141
}
4242
}
4343

44-
public Optional<String> setGraffiti(final BLSPublicKey publicKey, final String graffiti) {
44+
public void setGraffiti(final BLSPublicKey publicKey, final String graffiti) throws IOException {
4545
final String strippedGraffiti = graffiti.strip();
4646
final int graffitiSize = strippedGraffiti.getBytes(StandardCharsets.UTF_8).length;
4747
if (graffitiSize > 32) {
@@ -51,16 +51,8 @@ public Optional<String> setGraffiti(final BLSPublicKey publicKey, final String g
5151
strippedGraffiti, graffitiSize));
5252
}
5353

54-
try {
55-
final Path file = directory.resolve(resolveFileName(publicKey));
56-
Files.writeString(file, strippedGraffiti);
57-
} catch (IOException e) {
58-
final String errorMessage =
59-
String.format("Unable to update graffiti for validator %s", publicKey);
60-
LOG.error(errorMessage, e);
61-
return Optional.of(errorMessage);
62-
}
63-
return Optional.empty();
54+
final Path file = directory.resolve(resolveFileName(publicKey));
55+
Files.writeString(file, strippedGraffiti);
6456
}
6557

6658
public Optional<String> deleteGraffiti(final BLSPublicKey publicKey) {

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

+1-3
Original file line numberDiff line numberDiff line change
@@ -25,9 +25,7 @@ public NoOpGraffitiManager() {
2525
}
2626

2727
@Override
28-
public Optional<String> setGraffiti(final BLSPublicKey publicKey, final String graffiti) {
29-
return Optional.empty();
30-
}
28+
public void setGraffiti(final BLSPublicKey publicKey, final String graffiti) {}
3129

3230
@Override
3331
public Optional<String> deleteGraffiti(final BLSPublicKey publicKey) {

Diff for: validator/api/src/test/java/tech/pegasys/teku/validator/api/GraffitiManagerTest.java

+9-7
Original file line numberDiff line numberDiff line change
@@ -54,12 +54,13 @@ void shouldThrowExceptionWhenUnableToCreateManagementDirectory(@TempDir final Pa
5454
}
5555

5656
@Test
57-
void setGraffiti_shouldSetGraffitiWhenFileNotExist(@TempDir final Path tempDir) {
57+
void setGraffiti_shouldSetGraffitiWhenFileNotExist(@TempDir final Path tempDir)
58+
throws IOException {
5859
dataDirLayout = new SimpleDataDirLayout(tempDir);
5960
manager = new GraffitiManager(dataDirLayout);
6061
assertThat(getGraffitiManagementDir().toFile().exists()).isTrue();
6162

62-
assertThat(manager.setGraffiti(publicKey, graffiti)).isEmpty();
63+
manager.setGraffiti(publicKey, graffiti);
6364
checkStoredGraffitiFile(publicKey);
6465
}
6566

@@ -70,7 +71,7 @@ void setGraffiti_shouldSetGraffitiWhenFileExist(@TempDir final Path tempDir) thr
7071
assertThat(getGraffitiManagementDir().resolve(getFileName(publicKey)).toFile().createNewFile())
7172
.isTrue();
7273

73-
assertThat(manager.setGraffiti(publicKey, graffiti)).isEmpty();
74+
manager.setGraffiti(publicKey, graffiti);
7475
checkStoredGraffitiFile(publicKey);
7576
}
7677

@@ -86,8 +87,8 @@ void setGraffiti_shouldReturnErrorMessageWhenUnableToWriteFile(@TempDir final Pa
8687
assertThat(file.createNewFile()).isTrue();
8788
assertThat(file.setWritable(false)).isTrue();
8889

89-
assertThat(manager.setGraffiti(publicKey, graffiti))
90-
.hasValue("Unable to update graffiti for validator " + publicKey);
90+
assertThatThrownBy(() -> manager.setGraffiti(publicKey, graffiti))
91+
.isInstanceOf(IOException.class);
9192
}
9293

9394
@Test
@@ -144,13 +145,14 @@ void deleteGraffiti_shouldReturnErrorMessageWhenUnableToDeleteFile(@TempDir fina
144145
}
145146

146147
@Test
147-
void shouldSetAndDeleteGraffitiWhenManagementPreexisting(@TempDir final Path tempDir) {
148+
void shouldSetAndDeleteGraffitiWhenManagementPreexisting(@TempDir final Path tempDir)
149+
throws IOException {
148150
dataDirLayout = new SimpleDataDirLayout(tempDir);
149151
final Path managementDir = getGraffitiManagementDir();
150152
assertThat(managementDir.toFile().mkdirs()).isTrue();
151153
manager = new GraffitiManager(dataDirLayout);
152154

153-
assertThat(manager.setGraffiti(publicKey, graffiti)).isEmpty();
155+
manager.setGraffiti(publicKey, graffiti);
154156
checkStoredGraffitiFile(publicKey);
155157

156158
assertThat(manager.deleteGraffiti(publicKey)).isEmpty();

Diff for: validator/client/src/main/java/tech/pegasys/teku/validator/client/restapi/apis/SetGraffiti.java

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

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

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

Diff for: validator/client/src/test/java/tech/pegasys/teku/validator/client/restapi/apis/SetGraffitiTest.java

+12-9
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
import static org.assertj.core.api.Assertions.assertThatThrownBy;
1818
import static org.mockito.ArgumentMatchers.any;
1919
import static org.mockito.ArgumentMatchers.eq;
20+
import static org.mockito.Mockito.doThrow;
2021
import static org.mockito.Mockito.mock;
2122
import static org.mockito.Mockito.when;
2223
import static tech.pegasys.teku.infrastructure.http.HttpStatusCodes.SC_BAD_REQUEST;
@@ -30,6 +31,7 @@
3031
import static tech.pegasys.teku.spec.generator.signatures.NoOpLocalSigner.NO_OP_SIGNER;
3132

3233
import com.fasterxml.jackson.core.JsonProcessingException;
34+
import java.io.IOException;
3335
import java.util.Optional;
3436
import org.junit.jupiter.api.Test;
3537
import tech.pegasys.teku.bls.BLSPublicKey;
@@ -57,12 +59,11 @@ class SetGraffitiTest {
5759
.build();
5860

5961
@Test
60-
void shouldSuccessfullySetGraffiti() throws JsonProcessingException {
62+
void shouldSuccessfullySetGraffiti() throws IOException {
6163
request.setRequestBody(graffiti);
6264

6365
final Validator validator = new Validator(publicKey, NO_OP_SIGNER, Optional::empty);
6466
when(keyManager.getValidatorByPublicKey(any())).thenReturn(Optional.of(validator));
65-
when(graffitiManager.setGraffiti(any(), any())).thenReturn(Optional.empty());
6667

6768
handler.handleRequest(request);
6869

@@ -71,23 +72,24 @@ void shouldSuccessfullySetGraffiti() throws JsonProcessingException {
7172
}
7273

7374
@Test
74-
void shouldReturnErrorWhenIssueSetting() throws JsonProcessingException {
75+
void shouldReturnErrorWhenIssueSetting() throws IOException {
7576
request.setRequestBody(graffiti);
7677

7778
final Validator validator = new Validator(publicKey, NO_OP_SIGNER, Optional::empty);
7879
when(keyManager.getValidatorByPublicKey(any())).thenReturn(Optional.of(validator));
79-
when(graffitiManager.setGraffiti(any(), eq(graffiti)))
80-
.thenReturn(Optional.of("Error deleting graffiti"));
80+
doThrow(IOException.class).when(graffitiManager).setGraffiti(any(), eq(graffiti));
8181

8282
handler.handleRequest(request);
8383

8484
assertThat(request.getResponseCode()).isEqualTo(SC_INTERNAL_SERVER_ERROR);
8585
assertThat(request.getResponseBody())
86-
.isEqualTo(new HttpErrorResponse(SC_INTERNAL_SERVER_ERROR, "Error deleting graffiti"));
86+
.isEqualTo(
87+
new HttpErrorResponse(
88+
SC_INTERNAL_SERVER_ERROR, "Unable to update graffiti for validator " + publicKey));
8789
}
8890

8991
@Test
90-
void shouldThrowExceptionWhenInvalidGraffitiInput() {
92+
void shouldThrowExceptionWhenInvalidGraffitiInput() throws IOException {
9193
final String invalidGraffiti = "This graffiti is a bit too long!!";
9294
final String errorMessage =
9395
String.format(
@@ -96,8 +98,9 @@ void shouldThrowExceptionWhenInvalidGraffitiInput() {
9698

9799
final Validator validator = new Validator(publicKey, NO_OP_SIGNER, Optional::empty);
98100
when(keyManager.getValidatorByPublicKey(any())).thenReturn(Optional.of(validator));
99-
when(graffitiManager.setGraffiti(any(), eq(invalidGraffiti)))
100-
.thenThrow(new IllegalArgumentException(errorMessage));
101+
doThrow(new IllegalArgumentException(errorMessage))
102+
.when(graffitiManager)
103+
.setGraffiti(any(), eq(invalidGraffiti));
101104

102105
assertThatThrownBy(() -> handler.handleRequest(request))
103106
.isInstanceOf(IllegalArgumentException.class)

0 commit comments

Comments
 (0)