Search in sources :

Example 1 with PublishRequest

use of com.hedera.mirror.monitor.publish.PublishRequest in project hedera-mirror-node by hashgraph.

the class CompositeTransactionGeneratorTest method distribution.

@Test
void distribution() {
    properties.setWarmupPeriod(Duration.ZERO);
    CompositeTransactionGenerator generator = supplier.get();
    assertThat(generator.distribution.get().getPmf()).hasSize(properties.getScenarios().size()).extracting(Pair::getValue).containsExactly(0.75, 0.25);
    Multiset<TransactionType> types = HashMultiset.create();
    double seconds = 5;
    for (int i = 0; i < totalTps * seconds; ) {
        List<PublishRequest> requests = generator.next();
        requests.stream().map(r -> r.getScenario().getProperties().getType()).forEach(types::add);
        i += requests.size();
    }
    for (PublishScenarioProperties publishScenarioProperties : properties.getScenarios().values()) {
        assertThat(types.count(publishScenarioProperties.getType())).isNotNegative().isNotZero().isCloseTo((int) (publishScenarioProperties.getTps() * seconds), withinPercentage(10));
    }
}
Also used : BeforeEach(org.junit.jupiter.api.BeforeEach) Stopwatch(com.google.common.base.Stopwatch) Multiset(com.google.common.collect.Multiset) Assertions.assertThat(org.assertj.core.api.Assertions.assertThat) TransactionType(com.hedera.mirror.monitor.publish.transaction.TransactionType) PublishRequest(com.hedera.mirror.monitor.publish.PublishRequest) PublishScenarioProperties(com.hedera.mirror.monitor.publish.PublishScenarioProperties) Assertions.withinPercentage(org.assertj.core.api.Assertions.withinPercentage) Supplier(java.util.function.Supplier) ArrayList(java.util.ArrayList) ScenarioStatus(com.hedera.mirror.monitor.ScenarioStatus) HashMultiset(com.google.common.collect.HashMultiset) Duration(java.time.Duration) Map(java.util.Map) Suppliers(com.google.common.base.Suppliers) ValueSource(org.junit.jupiter.params.provider.ValueSource) Pair(org.apache.commons.math3.util.Pair) Assertions.from(org.assertj.core.api.Assertions.from) Collectors(java.util.stream.Collectors) Test(org.junit.jupiter.api.Test) PublishScenario(com.hedera.mirror.monitor.publish.PublishScenario) PublishProperties(com.hedera.mirror.monitor.publish.PublishProperties) List(java.util.List) ParameterizedTest(org.junit.jupiter.params.ParameterizedTest) Timeout(org.junit.jupiter.api.Timeout) TransactionType(com.hedera.mirror.monitor.publish.transaction.TransactionType) PublishScenarioProperties(com.hedera.mirror.monitor.publish.PublishScenarioProperties) PublishRequest(com.hedera.mirror.monitor.publish.PublishRequest) Test(org.junit.jupiter.api.Test) ParameterizedTest(org.junit.jupiter.params.ParameterizedTest)

Example 2 with PublishRequest

use of com.hedera.mirror.monitor.publish.PublishRequest in project hedera-mirror-node by hashgraph.

the class ConfigurableTransactionGenerator method next.

@Override
public List<PublishRequest> next(int count) {
    if (count <= 0) {
        count = 1;
    }
    long left = remaining.getAndAdd(-count);
    long actual = Math.min(left, count);
    if (actual <= 0) {
        throw new ScenarioException(scenario, "Reached publish limit");
    }
    if (stopTime - System.nanoTime() <= 0) {
        throw new ScenarioException(scenario, "Reached publish duration");
    }
    List<PublishRequest> publishRequests = new ArrayList<>();
    for (long i = 0; i < actual; i++) {
        var transaction = transactionSupplier.get().get().setMaxAttempts((int) properties.getRetry().getMaxAttempts()).setTransactionMemo(scenario.getMemo());
        PublishRequest publishRequest = builder.receipt(shouldGenerate(properties.getReceiptPercent())).record(shouldGenerate(properties.getRecordPercent())).timestamp(Instant.now()).transaction(transaction).build();
        publishRequests.add(publishRequest);
    }
    return publishRequests;
}
Also used : ArrayList(java.util.ArrayList) PublishRequest(com.hedera.mirror.monitor.publish.PublishRequest)

Aggregations

PublishRequest (com.hedera.mirror.monitor.publish.PublishRequest)2 ArrayList (java.util.ArrayList)2 Stopwatch (com.google.common.base.Stopwatch)1 Suppliers (com.google.common.base.Suppliers)1 HashMultiset (com.google.common.collect.HashMultiset)1 Multiset (com.google.common.collect.Multiset)1 ScenarioStatus (com.hedera.mirror.monitor.ScenarioStatus)1 PublishProperties (com.hedera.mirror.monitor.publish.PublishProperties)1 PublishScenario (com.hedera.mirror.monitor.publish.PublishScenario)1 PublishScenarioProperties (com.hedera.mirror.monitor.publish.PublishScenarioProperties)1 TransactionType (com.hedera.mirror.monitor.publish.transaction.TransactionType)1 Duration (java.time.Duration)1 List (java.util.List)1 Map (java.util.Map)1 Supplier (java.util.function.Supplier)1 Collectors (java.util.stream.Collectors)1 Pair (org.apache.commons.math3.util.Pair)1 Assertions.assertThat (org.assertj.core.api.Assertions.assertThat)1 Assertions.from (org.assertj.core.api.Assertions.from)1 Assertions.withinPercentage (org.assertj.core.api.Assertions.withinPercentage)1