Search in sources :

Example 1 with SimpleSszReader

use of tech.pegasys.teku.infrastructure.ssz.sos.SimpleSszReader in project teku by ConsenSys.

the class SszSchemaTestBase method sszDeserialize_tooLongSszShouldFailFastWithoutReadingWholeInput.

@MethodSource("testSchemaArguments")
@ParameterizedTest
void sszDeserialize_tooLongSszShouldFailFastWithoutReadingWholeInput(SszSchema<SszData> schema) {
    long maxSszLength = schema.getSszLengthBounds().getMaxBytes();
    // ignore too large and degenerative structs
    assumeThat(maxSszLength).isLessThan(32 * 1024 * 1024).isGreaterThan(0);
    // ignore lists using SszSuperNode as many validations are skipped
    if (schema instanceof AbstractSszCollectionSchema) {
        assumeThat(((AbstractSszCollectionSchema<?, ?>) schema).getHints().getHint(SszSuperNodeHint.class)).describedAs("uses SszSuperNode").isEmpty();
    }
    SszData data = randomSsz.randomData(schema);
    Bytes ssz = data.sszSerialize();
    Bytes sszWithExtraData = Bytes.wrap(ssz, Bytes.random((int) (maxSszLength - ssz.size() + 1)));
    AtomicInteger bytesCounter = new AtomicInteger();
    SimpleSszReader countingReader = new SimpleSszReader(sszWithExtraData) {

        @Override
        public Bytes read(int length) {
            bytesCounter.addAndGet(length);
            return super.read(length);
        }
    };
    assertThatThrownBy(() -> schema.sszDeserialize(countingReader)).isInstanceOf(SszDeserializeException.class);
    assertThat(bytesCounter.get()).isLessThanOrEqualTo(ssz.size());
}
Also used : SimpleSszReader(tech.pegasys.teku.infrastructure.ssz.sos.SimpleSszReader) Bytes(org.apache.tuweni.bytes.Bytes) AbstractSszCollectionSchema(tech.pegasys.teku.infrastructure.ssz.schema.impl.AbstractSszCollectionSchema) AtomicInteger(java.util.concurrent.atomic.AtomicInteger) SszSuperNodeHint(tech.pegasys.teku.infrastructure.ssz.schema.SszSchemaHints.SszSuperNodeHint) SszData(tech.pegasys.teku.infrastructure.ssz.SszData) MethodSource(org.junit.jupiter.params.provider.MethodSource) ParameterizedTest(org.junit.jupiter.params.ParameterizedTest)

Aggregations

AtomicInteger (java.util.concurrent.atomic.AtomicInteger)1 Bytes (org.apache.tuweni.bytes.Bytes)1 ParameterizedTest (org.junit.jupiter.params.ParameterizedTest)1 MethodSource (org.junit.jupiter.params.provider.MethodSource)1 SszData (tech.pegasys.teku.infrastructure.ssz.SszData)1 SszSuperNodeHint (tech.pegasys.teku.infrastructure.ssz.schema.SszSchemaHints.SszSuperNodeHint)1 AbstractSszCollectionSchema (tech.pegasys.teku.infrastructure.ssz.schema.impl.AbstractSszCollectionSchema)1 SimpleSszReader (tech.pegasys.teku.infrastructure.ssz.sos.SimpleSszReader)1