Skip to content

Commit

Permalink
test: Long term schedule sign tests (#16890)
Browse files Browse the repository at this point in the history
Signed-off-by: ibankov <ivan.bankov@limechain.tech>
  • Loading branch information
ibankov authored Dec 4, 2024
1 parent 9d28048 commit c780fb6
Show file tree
Hide file tree
Showing 2 changed files with 63 additions and 0 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -69,6 +69,7 @@
import static com.hederahashgraph.api.proto.java.ResponseCodeEnum.INVALID_SCHEDULE_ID;
import static com.hederahashgraph.api.proto.java.ResponseCodeEnum.NO_NEW_VALID_SIGNATURES;
import static com.hederahashgraph.api.proto.java.ResponseCodeEnum.RECORD_NOT_FOUND;
import static com.hederahashgraph.api.proto.java.ResponseCodeEnum.SCHEDULE_ALREADY_EXECUTED;
import static com.hederahashgraph.api.proto.java.ResponseCodeEnum.SOME_SIGNATURES_WERE_INVALID;

import com.hedera.services.bdd.junit.HapiTest;
Expand Down Expand Up @@ -785,6 +786,30 @@ public Stream<DynamicTest> retestsActivationOnSignWithEmptySigMap() {
getAccountBalance(SENDER).hasTinyBars(666L));
}

@HapiTest
@Order(16)
final Stream<DynamicTest> scheduleSignWhenAllSigPresent() {
return hapiTest(
cryptoCreate("receiver").balance(0L).receiverSigRequired(true),
scheduleCreate("schedule", cryptoTransfer(tinyBarsFromTo(DEFAULT_PAYER, "receiver", 1L)))
.waitForExpiry()
.expiringIn(TimeUnit.SECONDS.toMillis(5))
.via("one"),
scheduleSign("schedule").signedBy(DEFAULT_PAYER, "receiver"),
scheduleSign("schedule").hasKnownStatus(NO_NEW_VALID_SIGNATURES));
}

@HapiTest
@Order(17)
final Stream<DynamicTest> scheduleSignWhenAllSigPresentNoWaitForExpiry() {
return hapiTest(
cryptoCreate("receiver").balance(0L).receiverSigRequired(true),
scheduleCreate("schedule", cryptoTransfer(tinyBarsFromTo(DEFAULT_PAYER, "receiver", 1L)))
.via("one"),
scheduleSign("schedule").signedBy(DEFAULT_PAYER, "receiver"),
scheduleSign("schedule").hasKnownStatus(SCHEDULE_ALREADY_EXECUTED));
}

private Key lowerThirdNestedThresholdSigningReq(Key source) {
var newKey = source.getThresholdKey().getKeys().getKeys(2).toBuilder();
newKey.setThresholdKey(newKey.getThresholdKeyBuilder().setThreshold(1));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,12 @@
import static com.hedera.services.bdd.spec.transactions.TxnVerbs.cryptoTransfer;
import static com.hedera.services.bdd.spec.transactions.TxnVerbs.scheduleCreate;
import static com.hedera.services.bdd.spec.transactions.TxnVerbs.scheduleDelete;
import static com.hedera.services.bdd.spec.transactions.TxnVerbs.scheduleSign;
import static com.hedera.services.bdd.spec.transactions.TxnVerbs.tokenAssociate;
import static com.hedera.services.bdd.spec.transactions.TxnVerbs.tokenCreate;
import static com.hedera.services.bdd.spec.transactions.TxnVerbs.tokenFeeScheduleUpdate;
import static com.hedera.services.bdd.spec.transactions.crypto.HapiCryptoTransfer.tinyBarsFromTo;
import static com.hedera.services.bdd.spec.transactions.token.CustomFeeSpecs.fixedHbarFee;
import static com.hedera.services.bdd.spec.utilops.CustomSpecAssert.allRunFor;
import static com.hedera.services.bdd.spec.utilops.EmbeddedVerbs.exposeMaxSchedulable;
import static com.hedera.services.bdd.spec.utilops.UtilVerbs.blockStreamMustIncludePassFrom;
Expand All @@ -65,6 +70,7 @@
import static com.hedera.services.bdd.suites.HapiSuite.ONE_HBAR;
import static com.hedera.services.bdd.suites.HapiSuite.ONE_HUNDRED_HBARS;
import static com.hedera.services.bdd.suites.HapiSuite.ONE_MILLION_HBARS;
import static com.hedera.services.bdd.suites.HapiSuite.TOKEN_TREASURY;
import static com.hederahashgraph.api.proto.java.HederaFunctionality.ConsensusCreateTopic;
import static com.hederahashgraph.api.proto.java.ResponseCodeEnum.BUSY;
import static com.hederahashgraph.api.proto.java.ResponseCodeEnum.MISSING_EXPIRY_TIME;
Expand Down Expand Up @@ -100,6 +106,7 @@
import com.hedera.services.bdd.spec.HapiSpec;
import com.hedera.services.bdd.spec.SpecOperation;
import com.hedera.services.bdd.spec.infrastructure.RegistryNotFound;
import com.hedera.services.bdd.spec.transactions.token.TokenMovement;
import com.hedera.services.bdd.spec.utilops.streams.assertions.BlockStreamAssertion;
import com.swirlds.state.spi.ReadableKVState;
import com.swirlds.state.spi.WritableKVState;
Expand Down Expand Up @@ -565,6 +572,37 @@ final Stream<DynamicTest> executionResultsAreStreamedAsExpected() {
cryptoTransfer(tinyBarsFromTo(DEFAULT_PAYER, FUNDING, 1L)));
}

@RepeatableHapiTest(NEEDS_VIRTUAL_TIME_FOR_FAST_EXECUTION)
final Stream<DynamicTest> changeTokenFeeWhenScheduled() {
return hapiTest(
newKeyNamed("feeScheduleKey"),
cryptoCreate(TOKEN_TREASURY),
cryptoCreate("feeCollector").balance(0L),
cryptoCreate("receiver"),
cryptoCreate("sender"),
tokenCreate("fungibleToken")
.treasury(TOKEN_TREASURY)
.initialSupply(1000)
.feeScheduleKey("feeScheduleKey"),
tokenAssociate("receiver", "fungibleToken"),
tokenAssociate("sender", "fungibleToken"),
cryptoTransfer(TokenMovement.moving(5, "fungibleToken").between(TOKEN_TREASURY, "sender")),
scheduleCreate(
"schedule",
cryptoTransfer(
TokenMovement.moving(5, "fungibleToken").between("sender", "receiver")))
.expiringIn(ONE_MINUTE),
tokenFeeScheduleUpdate("fungibleToken")
.payingWith(DEFAULT_PAYER)
.signedBy(DEFAULT_PAYER, "feeScheduleKey")
.withCustom(fixedHbarFee(1, "feeCollector")),
scheduleSign("schedule").payingWith("sender"),
sleepForSeconds(ONE_MINUTE),
cryptoCreate("trigger"),
getAccountBalance("receiver").hasTokenBalance("fungibleToken", 5),
getAccountBalance("feeCollector").hasTinyBars(1));
}

private static BiConsumer<TransactionBody, TransactionResult> withStatus(@NonNull final ResponseCodeEnum status) {
requireNonNull(status);
return (body, result) -> assertEquals(status, result.status());
Expand Down

0 comments on commit c780fb6

Please sign in to comment.