diff --git a/ethereum/spec/src/test/java/tech/pegasys/teku/spec/datastructures/blocks/blockbody/common/AbstractBeaconBlockBodyTest.java b/ethereum/spec/src/test/java/tech/pegasys/teku/spec/datastructures/blocks/blockbody/common/AbstractBeaconBlockBodyTest.java index 8fbe8a21d0c..b1ecc4a1c5b 100644 --- a/ethereum/spec/src/test/java/tech/pegasys/teku/spec/datastructures/blocks/blockbody/common/AbstractBeaconBlockBodyTest.java +++ b/ethereum/spec/src/test/java/tech/pegasys/teku/spec/datastructures/blocks/blockbody/common/AbstractBeaconBlockBodyTest.java @@ -22,7 +22,6 @@ import java.util.List; import java.util.function.Consumer; import java.util.stream.Collectors; -import java.util.stream.Stream; import org.apache.tuweni.bytes.Bytes32; import org.junit.jupiter.api.Test; import tech.pegasys.teku.bls.BLSSignature; @@ -166,9 +165,7 @@ void equalsReturnsFalseWhenProposerSlashingsAreDifferent() { void equalsReturnsFalseWhenAttesterSlashingsAreDifferent() { // Create copy of attesterSlashings and change the element to ensure it is different. attesterSlashings = - Stream.concat( - Stream.of(dataStructureUtil.randomAttesterSlashing()), attesterSlashings.stream()) - .collect(blockBodySchema.getAttesterSlashingsSchema().collector()); + blockBodySchema.getAttesterSlashingsSchema().of(dataStructureUtil.randomAttesterSlashing()); T testBeaconBlockBody = createBlockBody(); diff --git a/ethereum/spec/src/test/java/tech/pegasys/teku/spec/datastructures/blocks/blockbody/versions/electra/BeaconBlockBodyElectraTest.java b/ethereum/spec/src/test/java/tech/pegasys/teku/spec/datastructures/blocks/blockbody/versions/electra/BeaconBlockBodyElectraTest.java new file mode 100644 index 00000000000..6b1b8fedc11 --- /dev/null +++ b/ethereum/spec/src/test/java/tech/pegasys/teku/spec/datastructures/blocks/blockbody/versions/electra/BeaconBlockBodyElectraTest.java @@ -0,0 +1,82 @@ +/* + * Copyright Consensys Software Inc., 2022 + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on + * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ + +package tech.pegasys.teku.spec.datastructures.blocks.blockbody.versions.electra; + +import java.util.function.Consumer; +import org.junit.jupiter.api.BeforeEach; +import tech.pegasys.teku.infrastructure.ssz.SszList; +import tech.pegasys.teku.spec.SpecMilestone; +import tech.pegasys.teku.spec.datastructures.blocks.blockbody.BeaconBlockBodyBuilder; +import tech.pegasys.teku.spec.datastructures.blocks.blockbody.common.AbstractBeaconBlockBodyTest; +import tech.pegasys.teku.spec.datastructures.blocks.blockbody.versions.altair.SyncAggregate; +import tech.pegasys.teku.spec.datastructures.blocks.blockbody.versions.bellatrix.BlindedBeaconBlockBodyBellatrix; +import tech.pegasys.teku.spec.datastructures.execution.ExecutionPayload; +import tech.pegasys.teku.spec.datastructures.execution.ExecutionPayloadHeader; +import tech.pegasys.teku.spec.datastructures.operations.SignedBlsToExecutionChange; +import tech.pegasys.teku.spec.datastructures.type.SszKZGCommitment; + +class BeaconBlockBodyElectraTest extends AbstractBeaconBlockBodyTest { + + protected SyncAggregate syncAggregate; + protected ExecutionPayload executionPayload; + protected ExecutionPayloadHeader executionPayloadHeader; + protected SszList blsToExecutionChanges; + protected SszList blobKzgCommitments; + + @BeforeEach + void setup() { + super.setUpBaseClass( + SpecMilestone.ELECTRA, + () -> { + syncAggregate = dataStructureUtil.randomSyncAggregate(); + executionPayload = dataStructureUtil.randomExecutionPayload(); + executionPayloadHeader = dataStructureUtil.randomExecutionPayloadHeader(); + blsToExecutionChanges = dataStructureUtil.randomSignedBlsToExecutionChangesList(); + blobKzgCommitments = dataStructureUtil.randomBlobKzgCommitments(); + }); + } + + @Override + protected BeaconBlockBodyElectra createBlockBody( + final Consumer contentProvider) { + final BeaconBlockBodyBuilder bodyBuilder = createBeaconBlockBodyBuilder(); + contentProvider.accept(bodyBuilder); + return bodyBuilder.build().toVersionElectra().orElseThrow(); + } + + @Override + protected BlindedBeaconBlockBodyBellatrix createBlindedBlockBody( + final Consumer contentProvider) { + final BeaconBlockBodyBuilder bodyBuilder = createBeaconBlockBodyBuilder(); + contentProvider.accept(bodyBuilder); + return bodyBuilder.build().toBlindedVersionElectra().orElseThrow(); + } + + @Override + protected Consumer createContentProvider(final boolean blinded) { + return super.createContentProvider(blinded) + .andThen( + builder -> { + builder + .syncAggregate(syncAggregate) + .blsToExecutionChanges(blsToExecutionChanges) + .blobKzgCommitments(blobKzgCommitments); + if (blinded) { + builder.executionPayloadHeader(executionPayloadHeader); + } else { + builder.executionPayload(executionPayload); + } + }); + } +}