|
20 | 20 | import static org.assertj.core.api.Assumptions.assumeThat;
|
21 | 21 | import static tech.pegasys.teku.ethereum.json.types.beacon.StateValidatorDataBuilder.STATE_VALIDATORS_RESPONSE_TYPE;
|
22 | 22 | import static tech.pegasys.teku.ethereum.json.types.validator.SyncCommitteeDutiesBuilder.SYNC_COMMITTEE_DUTIES_TYPE;
|
| 23 | +import static tech.pegasys.teku.ethereum.json.types.validator.AttesterDutiesBuilder.ATTESTER_DUTIES_RESPONSE_TYPE; |
23 | 24 | import static tech.pegasys.teku.infrastructure.http.HttpStatusCodes.SC_BAD_REQUEST;
|
24 | 25 | import static tech.pegasys.teku.infrastructure.http.HttpStatusCodes.SC_METHOD_NOT_ALLOWED;
|
25 | 26 | import static tech.pegasys.teku.infrastructure.http.HttpStatusCodes.SC_NOT_FOUND;
|
|
44 | 45 | import tech.pegasys.teku.api.exceptions.RemoteServiceNotAvailableException;
|
45 | 46 | import tech.pegasys.teku.api.response.v1.beacon.ValidatorStatus;
|
46 | 47 | import tech.pegasys.teku.ethereum.json.types.beacon.StateValidatorData;
|
| 48 | +import tech.pegasys.teku.ethereum.json.types.validator.AttesterDuties; |
| 49 | +import tech.pegasys.teku.ethereum.json.types.validator.AttesterDuty; |
47 | 50 | import tech.pegasys.teku.ethereum.json.types.validator.SyncCommitteeDuties;
|
48 | 51 | import tech.pegasys.teku.ethereum.json.types.validator.SyncCommitteeDuty;
|
49 | 52 | import tech.pegasys.teku.infrastructure.ssz.SszDataAssert;
|
@@ -447,6 +450,43 @@ public void postSyncDuties_WhenSuccess_ReturnsResponse()
|
447 | 450 | assertThat(result.get()).isEqualTo(response);
|
448 | 451 | }
|
449 | 452 |
|
| 453 | + @TestTemplate |
| 454 | + public void postAttesterDuties_WhenSuccess_ReturnsResponse() |
| 455 | + throws JsonProcessingException, InterruptedException { |
| 456 | + final List<AttesterDuty> duties = List.of(randomAttesterDuty(), randomAttesterDuty()); |
| 457 | + final AttesterDuties response = |
| 458 | + new AttesterDuties(true, dataStructureUtil.randomBytes32(), duties); |
| 459 | + |
| 460 | + final String body = serialize(response, ATTESTER_DUTIES_RESPONSE_TYPE); |
| 461 | + mockWebServer.enqueue(new MockResponse().setResponseCode(SC_OK).setBody(body)); |
| 462 | + |
| 463 | + final UInt64 epoch = UInt64.ONE; |
| 464 | + final IntList validatorIndices = IntList.of(1, 2); |
| 465 | + Optional<AttesterDuties> result = |
| 466 | + okHttpValidatorTypeDefClient.postAttesterDuties(epoch, validatorIndices); |
| 467 | + |
| 468 | + final RecordedRequest recordedRequest = mockWebServer.takeRequest(); |
| 469 | + assertThat(recordedRequest.getPath()).isEqualTo("/eth/v1/validator/duties/attester/" + epoch); |
| 470 | + assertThat(recordedRequest.getMethod()).isEqualTo("POST"); |
| 471 | + assertThat(recordedRequest.getHeader("Content-Type")).isEqualTo(JSON_CONTENT_TYPE); |
| 472 | + assertThat(recordedRequest.getBody().readByteArray()) |
| 473 | + .isEqualTo("[\"1\",\"2\"]".getBytes(UTF_8)); |
| 474 | + |
| 475 | + assertThat(result).isPresent(); |
| 476 | + assertThat(result.get()).isEqualTo(response); |
| 477 | + } |
| 478 | + |
| 479 | + private AttesterDuty randomAttesterDuty() { |
| 480 | + return new AttesterDuty( |
| 481 | + dataStructureUtil.randomPublicKey(), |
| 482 | + dataStructureUtil.randomValidatorIndex().intValue(), |
| 483 | + dataStructureUtil.randomPositiveInt(), |
| 484 | + dataStructureUtil.randomPositiveInt(), |
| 485 | + dataStructureUtil.randomPositiveInt(), |
| 486 | + dataStructureUtil.randomPositiveInt(), |
| 487 | + dataStructureUtil.randomSlot()); |
| 488 | + } |
| 489 | + |
450 | 490 | private void verifyRegisterValidatorsPostRequest(
|
451 | 491 | final RecordedRequest recordedRequest, final String expectedContentType) {
|
452 | 492 | assertThat(recordedRequest.getPath()).isEqualTo("/eth/v1/validator/register_validator");
|
|
0 commit comments