fix: Add CTID to all RPC's that includes transactions (#2011)

fixes #1998
This commit is contained in:
Peter Chen
2025-04-25 09:55:39 -04:00
committed by GitHub
parent 79e6f07863
commit 593d7298b1
17 changed files with 238 additions and 92 deletions

View File

@@ -57,6 +57,7 @@ constexpr auto kISSUER = "rK9DrarGKnVEo2nYp5MfVRXRYf5yRX3mwD";
constexpr auto kTXN_ID = "E6DBAFC99223B42257915A63DFC6B0C032D4070F9A574B255AD97466726FC321";
constexpr auto kAMM_ACCOUNT = "rnW8FAPgpQgA6VoESnVrUVJHBdq9QAtRZs";
constexpr auto kLPTOKEN_CURRENCY = "037C35306B24AAB7FF90848206E003279AA47090";
constexpr auto kNETWORK_ID = 0u;
constexpr auto kTRAN_V1 =
R"({
@@ -104,6 +105,7 @@ constexpr auto kTRAN_V1 =
"TransactionResult":"tesSUCCESS",
"delivered_amount":"unavailable"
},
"ctid":"C000002100160000",
"type":"transaction",
"validated":true,
"status":"closed",
@@ -155,6 +157,7 @@ constexpr auto kTRAN_V2 =
"TransactionResult":"tesSUCCESS",
"delivered_amount":"unavailable"
},
"ctid":"C000002100160000",
"type":"transaction",
"validated":true,
"status":"closed",
@@ -189,10 +192,10 @@ TEST_F(FeedTransactionTest, SubTransactionV1)
EXPECT_CALL(*mockSessionPtr, apiSubversion).WillOnce(testing::Return(1));
EXPECT_CALL(*mockSessionPtr, send(sharedStringJsonEq(kTRAN_V1)));
testFeedPtr->pub(trans1, ledgerHeader, backend_, mockAmendmentCenterPtr_);
testFeedPtr->pub(trans1, ledgerHeader, backend_, mockAmendmentCenterPtr_, kNETWORK_ID);
testFeedPtr->unsub(sessionPtr);
testFeedPtr->pub(trans1, ledgerHeader, backend_, mockAmendmentCenterPtr_);
testFeedPtr->pub(trans1, ledgerHeader, backend_, mockAmendmentCenterPtr_, kNETWORK_ID);
EXPECT_EQ(testFeedPtr->transactionSubCount(), 0);
}
@@ -211,10 +214,10 @@ TEST_F(FeedTransactionTest, SubTransactionForProposedTx)
EXPECT_CALL(*mockSessionPtr, apiSubversion).WillOnce(testing::Return(1));
EXPECT_CALL(*mockSessionPtr, send(sharedStringJsonEq(kTRAN_V1)));
testFeedPtr->pub(trans1, ledgerHeader, backend_, mockAmendmentCenterPtr_);
testFeedPtr->pub(trans1, ledgerHeader, backend_, mockAmendmentCenterPtr_, kNETWORK_ID);
testFeedPtr->unsubProposed(sessionPtr);
testFeedPtr->pub(trans1, ledgerHeader, backend_, mockAmendmentCenterPtr_);
testFeedPtr->pub(trans1, ledgerHeader, backend_, mockAmendmentCenterPtr_, kNETWORK_ID);
}
TEST_F(FeedTransactionTest, SubTransactionV2)
@@ -232,12 +235,12 @@ TEST_F(FeedTransactionTest, SubTransactionV2)
EXPECT_CALL(*mockSessionPtr, apiSubversion).WillOnce(testing::Return(2));
EXPECT_CALL(*mockSessionPtr, send(sharedStringJsonEq(kTRAN_V2)));
testFeedPtr->pub(trans1, ledgerHeader, backend_, mockAmendmentCenterPtr_);
testFeedPtr->pub(trans1, ledgerHeader, backend_, mockAmendmentCenterPtr_, kNETWORK_ID);
testFeedPtr->unsub(sessionPtr);
EXPECT_EQ(testFeedPtr->transactionSubCount(), 0);
testFeedPtr->pub(trans1, ledgerHeader, backend_, mockAmendmentCenterPtr_);
testFeedPtr->pub(trans1, ledgerHeader, backend_, mockAmendmentCenterPtr_, kNETWORK_ID);
}
TEST_F(FeedTransactionTest, SubAccountV1)
@@ -258,12 +261,12 @@ TEST_F(FeedTransactionTest, SubAccountV1)
EXPECT_CALL(*mockSessionPtr, apiSubversion).WillOnce(testing::Return(1));
EXPECT_CALL(*mockSessionPtr, send(sharedStringJsonEq(kTRAN_V1)));
testFeedPtr->pub(trans1, ledgerHeader, backend_, mockAmendmentCenterPtr_);
testFeedPtr->pub(trans1, ledgerHeader, backend_, mockAmendmentCenterPtr_, kNETWORK_ID);
testFeedPtr->unsub(account, sessionPtr);
EXPECT_EQ(testFeedPtr->accountSubCount(), 0);
testFeedPtr->pub(trans1, ledgerHeader, backend_, mockAmendmentCenterPtr_);
testFeedPtr->pub(trans1, ledgerHeader, backend_, mockAmendmentCenterPtr_, kNETWORK_ID);
}
TEST_F(FeedTransactionTest, SubForProposedAccount)
@@ -284,10 +287,10 @@ TEST_F(FeedTransactionTest, SubForProposedAccount)
EXPECT_CALL(*mockSessionPtr, apiSubversion).WillOnce(testing::Return(1));
EXPECT_CALL(*mockSessionPtr, send(sharedStringJsonEq(kTRAN_V1)));
testFeedPtr->pub(trans1, ledgerHeader, backend_, mockAmendmentCenterPtr_);
testFeedPtr->pub(trans1, ledgerHeader, backend_, mockAmendmentCenterPtr_, kNETWORK_ID);
testFeedPtr->unsubProposed(account, sessionPtr);
testFeedPtr->pub(trans1, ledgerHeader, backend_, mockAmendmentCenterPtr_);
testFeedPtr->pub(trans1, ledgerHeader, backend_, mockAmendmentCenterPtr_, kNETWORK_ID);
}
TEST_F(FeedTransactionTest, SubAccountV2)
@@ -307,12 +310,12 @@ TEST_F(FeedTransactionTest, SubAccountV2)
EXPECT_CALL(*mockSessionPtr, apiSubversion).WillOnce(testing::Return(2));
EXPECT_CALL(*mockSessionPtr, send(sharedStringJsonEq(kTRAN_V2)));
testFeedPtr->pub(trans1, ledgerHeader, backend_, mockAmendmentCenterPtr_);
testFeedPtr->pub(trans1, ledgerHeader, backend_, mockAmendmentCenterPtr_, kNETWORK_ID);
testFeedPtr->unsub(account, sessionPtr);
EXPECT_EQ(testFeedPtr->accountSubCount(), 0);
testFeedPtr->pub(trans1, ledgerHeader, backend_, mockAmendmentCenterPtr_);
testFeedPtr->pub(trans1, ledgerHeader, backend_, mockAmendmentCenterPtr_, kNETWORK_ID);
}
TEST_F(FeedTransactionTest, SubBothTransactionAndAccount)
@@ -334,14 +337,14 @@ TEST_F(FeedTransactionTest, SubBothTransactionAndAccount)
EXPECT_CALL(*mockSessionPtr, apiSubversion).Times(2).WillRepeatedly(testing::Return(2));
EXPECT_CALL(*mockSessionPtr, send(sharedStringJsonEq(kTRAN_V2))).Times(2);
testFeedPtr->pub(trans1, ledgerHeader, backend_, mockAmendmentCenterPtr_);
testFeedPtr->pub(trans1, ledgerHeader, backend_, mockAmendmentCenterPtr_, kNETWORK_ID);
testFeedPtr->unsub(account, sessionPtr);
EXPECT_EQ(testFeedPtr->accountSubCount(), 0);
testFeedPtr->unsub(sessionPtr);
EXPECT_EQ(testFeedPtr->transactionSubCount(), 0);
testFeedPtr->pub(trans1, ledgerHeader, backend_, mockAmendmentCenterPtr_);
testFeedPtr->pub(trans1, ledgerHeader, backend_, mockAmendmentCenterPtr_, kNETWORK_ID);
}
TEST_F(FeedTransactionTest, SubBookV1)
@@ -411,6 +414,7 @@ TEST_F(FeedTransactionTest, SubBookV1)
"TransactionResult":"tesSUCCESS",
"delivered_amount":"unavailable"
},
"ctid":"C000002100160000",
"type":"transaction",
"validated":true,
"status":"closed",
@@ -424,7 +428,7 @@ TEST_F(FeedTransactionTest, SubBookV1)
EXPECT_CALL(*mockSessionPtr, apiSubversion).WillOnce(testing::Return(1));
EXPECT_CALL(*mockSessionPtr, send(sharedStringJsonEq(kORDERBOOK_PUBLISH))).Times(1);
testFeedPtr->pub(trans1, ledgerHeader, backend_, mockAmendmentCenterPtr_);
testFeedPtr->pub(trans1, ledgerHeader, backend_, mockAmendmentCenterPtr_, kNETWORK_ID);
// trigger by offer cancel meta data
metaObj = createMetaDataForCancelOffer(kCURRENCY, kISSUER, 22, 3, 1);
@@ -467,6 +471,7 @@ TEST_F(FeedTransactionTest, SubBookV1)
"TransactionResult":"tesSUCCESS",
"delivered_amount":"unavailable"
},
"ctid":"C000002100160000",
"type":"transaction",
"validated":true,
"status":"closed",
@@ -480,7 +485,7 @@ TEST_F(FeedTransactionTest, SubBookV1)
EXPECT_CALL(*mockSessionPtr, apiSubversion).WillOnce(testing::Return(1));
EXPECT_CALL(*mockSessionPtr, send(sharedStringJsonEq(kORDERBOOK_CANCEL_PUBLISH))).Times(1);
testFeedPtr->pub(trans1, ledgerHeader, backend_, mockAmendmentCenterPtr_);
testFeedPtr->pub(trans1, ledgerHeader, backend_, mockAmendmentCenterPtr_, kNETWORK_ID);
// trigger by offer create meta data
static constexpr auto kORDERBOOK_CREATE_PUBLISH =
@@ -522,6 +527,7 @@ TEST_F(FeedTransactionTest, SubBookV1)
"TransactionResult":"tesSUCCESS",
"delivered_amount":"unavailable"
},
"ctid":"C000002100160000",
"type":"transaction",
"validated":true,
"status":"closed",
@@ -537,12 +543,12 @@ TEST_F(FeedTransactionTest, SubBookV1)
EXPECT_CALL(*mockSessionPtr, apiSubversion).WillOnce(testing::Return(1));
EXPECT_CALL(*mockSessionPtr, send(sharedStringJsonEq(kORDERBOOK_CREATE_PUBLISH))).Times(1);
testFeedPtr->pub(trans1, ledgerHeader, backend_, mockAmendmentCenterPtr_);
testFeedPtr->pub(trans1, ledgerHeader, backend_, mockAmendmentCenterPtr_, kNETWORK_ID);
testFeedPtr->unsub(book, sessionPtr);
EXPECT_EQ(testFeedPtr->bookSubCount(), 0);
testFeedPtr->pub(trans1, ledgerHeader, backend_, mockAmendmentCenterPtr_);
testFeedPtr->pub(trans1, ledgerHeader, backend_, mockAmendmentCenterPtr_, kNETWORK_ID);
}
TEST_F(FeedTransactionTest, SubBookV2)
@@ -611,6 +617,7 @@ TEST_F(FeedTransactionTest, SubBookV2)
"TransactionResult":"tesSUCCESS",
"delivered_amount":"unavailable"
},
"ctid":"C000002100160000",
"type":"transaction",
"validated":true,
"status":"closed",
@@ -625,12 +632,12 @@ TEST_F(FeedTransactionTest, SubBookV2)
EXPECT_CALL(*mockSessionPtr, apiSubversion).WillOnce(testing::Return(2));
EXPECT_CALL(*mockSessionPtr, send(sharedStringJsonEq(kORDERBOOK_PUBLISH))).Times(1);
testFeedPtr->pub(trans1, ledgerHeader, backend_, mockAmendmentCenterPtr_);
testFeedPtr->pub(trans1, ledgerHeader, backend_, mockAmendmentCenterPtr_, kNETWORK_ID);
testFeedPtr->unsub(book, sessionPtr);
EXPECT_EQ(testFeedPtr->bookSubCount(), 0);
testFeedPtr->pub(trans1, ledgerHeader, backend_, mockAmendmentCenterPtr_);
testFeedPtr->pub(trans1, ledgerHeader, backend_, mockAmendmentCenterPtr_, kNETWORK_ID);
}
TEST_F(FeedTransactionTest, TransactionContainsBothAccountsSubed)
@@ -655,18 +662,18 @@ TEST_F(FeedTransactionTest, TransactionContainsBothAccountsSubed)
EXPECT_CALL(*mockSessionPtr, apiSubversion).WillOnce(testing::Return(2));
EXPECT_CALL(*mockSessionPtr, send(sharedStringJsonEq(kTRAN_V2))).Times(1);
testFeedPtr->pub(trans1, ledgerHeader, backend_, mockAmendmentCenterPtr_);
testFeedPtr->pub(trans1, ledgerHeader, backend_, mockAmendmentCenterPtr_, kNETWORK_ID);
testFeedPtr->unsub(account, sessionPtr);
EXPECT_EQ(testFeedPtr->accountSubCount(), 1);
EXPECT_CALL(*mockSessionPtr, apiSubversion).WillOnce(testing::Return(2));
EXPECT_CALL(*mockSessionPtr, send(sharedStringJsonEq(kTRAN_V2))).Times(1);
testFeedPtr->pub(trans1, ledgerHeader, backend_, mockAmendmentCenterPtr_);
testFeedPtr->pub(trans1, ledgerHeader, backend_, mockAmendmentCenterPtr_, kNETWORK_ID);
testFeedPtr->unsub(account2, sessionPtr);
EXPECT_EQ(testFeedPtr->accountSubCount(), 0);
testFeedPtr->pub(trans1, ledgerHeader, backend_, mockAmendmentCenterPtr_);
testFeedPtr->pub(trans1, ledgerHeader, backend_, mockAmendmentCenterPtr_, kNETWORK_ID);
}
TEST_F(FeedTransactionTest, SubAccountRepeatWithDifferentVersion)
@@ -692,19 +699,19 @@ TEST_F(FeedTransactionTest, SubAccountRepeatWithDifferentVersion)
EXPECT_CALL(*mockSessionPtr, apiSubversion).WillOnce(testing::Return(2));
EXPECT_CALL(*mockSessionPtr, send(sharedStringJsonEq(kTRAN_V2))).Times(1);
testFeedPtr->pub(trans1, ledgerHeader, backend_, mockAmendmentCenterPtr_);
testFeedPtr->pub(trans1, ledgerHeader, backend_, mockAmendmentCenterPtr_, kNETWORK_ID);
testFeedPtr->unsub(account, sessionPtr);
EXPECT_EQ(testFeedPtr->accountSubCount(), 1);
EXPECT_CALL(*mockSessionPtr, apiSubversion).WillOnce(testing::Return(2));
EXPECT_CALL(*mockSessionPtr, send(sharedStringJsonEq(kTRAN_V2))).Times(1);
testFeedPtr->pub(trans1, ledgerHeader, backend_, mockAmendmentCenterPtr_);
testFeedPtr->pub(trans1, ledgerHeader, backend_, mockAmendmentCenterPtr_, kNETWORK_ID);
testFeedPtr->unsub(account2, sessionPtr);
EXPECT_EQ(testFeedPtr->accountSubCount(), 0);
testFeedPtr->pub(trans1, ledgerHeader, backend_, mockAmendmentCenterPtr_);
testFeedPtr->pub(trans1, ledgerHeader, backend_, mockAmendmentCenterPtr_, kNETWORK_ID);
}
TEST_F(FeedTransactionTest, SubTransactionRepeatWithDifferentVersion)
@@ -726,12 +733,12 @@ TEST_F(FeedTransactionTest, SubTransactionRepeatWithDifferentVersion)
EXPECT_CALL(*mockSessionPtr, apiSubversion).WillOnce(testing::Return(2));
EXPECT_CALL(*mockSessionPtr, send(sharedStringJsonEq(kTRAN_V2))).Times(1);
testFeedPtr->pub(trans1, ledgerHeader, backend_, mockAmendmentCenterPtr_);
testFeedPtr->pub(trans1, ledgerHeader, backend_, mockAmendmentCenterPtr_, kNETWORK_ID);
testFeedPtr->unsub(sessionPtr);
EXPECT_EQ(testFeedPtr->transactionSubCount(), 0);
testFeedPtr->pub(trans1, ledgerHeader, backend_, mockAmendmentCenterPtr_);
testFeedPtr->pub(trans1, ledgerHeader, backend_, mockAmendmentCenterPtr_, kNETWORK_ID);
}
TEST_F(FeedTransactionTest, SubRepeat)
@@ -858,6 +865,7 @@ TEST_F(FeedTransactionTest, PubTransactionWithOwnerFund)
"TransactionIndex":22,
"TransactionResult":"tesSUCCESS"
},
"ctid":"C000002100160000",
"type":"transaction",
"validated":true,
"status":"closed",
@@ -874,7 +882,7 @@ TEST_F(FeedTransactionTest, PubTransactionWithOwnerFund)
EXPECT_CALL(*mockAmendmentCenterPtr_, isEnabled(testing::_, Amendments::fixFrozenLPTokenTransfer, testing::_));
ON_CALL(*mockAmendmentCenterPtr_, isEnabled(testing::_, Amendments::fixFrozenLPTokenTransfer, testing::_))
.WillByDefault(testing::Return(false));
testFeedPtr->pub(trans1, ledgerHeader, backend_, mockAmendmentCenterPtr_);
testFeedPtr->pub(trans1, ledgerHeader, backend_, mockAmendmentCenterPtr_, kNETWORK_ID);
}
static constexpr auto kTRAN_FROZEN =
@@ -902,6 +910,7 @@ static constexpr auto kTRAN_FROZEN =
"TransactionIndex":22,
"TransactionResult":"tesSUCCESS"
},
"ctid":"C000002100160000",
"type":"transaction",
"validated":true,
"status":"closed",
@@ -950,7 +959,7 @@ TEST_F(FeedTransactionTest, PubTransactionOfferCreationFrozenLine)
EXPECT_CALL(*mockSessionPtr, apiSubversion).WillOnce(testing::Return(1));
EXPECT_CALL(*mockSessionPtr, send(sharedStringJsonEq(kTRAN_FROZEN))).Times(1);
testFeedPtr->pub(trans1, ledgerHeader, backend_, mockAmendmentCenterPtr_);
testFeedPtr->pub(trans1, ledgerHeader, backend_, mockAmendmentCenterPtr_, kNETWORK_ID);
}
TEST_F(FeedTransactionTest, SubTransactionOfferCreationGlobalFrozen)
@@ -991,7 +1000,7 @@ TEST_F(FeedTransactionTest, SubTransactionOfferCreationGlobalFrozen)
EXPECT_CALL(*mockSessionPtr, apiSubversion).WillOnce(testing::Return(1));
EXPECT_CALL(*mockSessionPtr, send(sharedStringJsonEq(kTRAN_FROZEN))).Times(1);
testFeedPtr->pub(trans1, ledgerHeader, backend_, mockAmendmentCenterPtr_);
testFeedPtr->pub(trans1, ledgerHeader, backend_, mockAmendmentCenterPtr_, kNETWORK_ID);
}
TEST_F(FeedTransactionTest, SubBothProposedAndValidatedAccount)
@@ -1014,13 +1023,13 @@ TEST_F(FeedTransactionTest, SubBothProposedAndValidatedAccount)
EXPECT_CALL(*mockSessionPtr, apiSubversion).WillOnce(testing::Return(1));
EXPECT_CALL(*mockSessionPtr, send(sharedStringJsonEq(kTRAN_V1))).Times(1);
testFeedPtr->pub(trans1, ledgerHeader, backend_, mockAmendmentCenterPtr_);
testFeedPtr->pub(trans1, ledgerHeader, backend_, mockAmendmentCenterPtr_, kNETWORK_ID);
testFeedPtr->unsub(account, sessionPtr);
testFeedPtr->unsubProposed(account, sessionPtr);
EXPECT_EQ(testFeedPtr->accountSubCount(), 0);
testFeedPtr->pub(trans1, ledgerHeader, backend_, mockAmendmentCenterPtr_);
testFeedPtr->pub(trans1, ledgerHeader, backend_, mockAmendmentCenterPtr_, kNETWORK_ID);
}
TEST_F(FeedTransactionTest, SubBothProposedAndValidated)
@@ -1041,11 +1050,11 @@ TEST_F(FeedTransactionTest, SubBothProposedAndValidated)
EXPECT_CALL(*mockSessionPtr, apiSubversion).Times(2).WillRepeatedly(testing::Return(1));
EXPECT_CALL(*mockSessionPtr, send(sharedStringJsonEq(kTRAN_V1))).Times(2);
testFeedPtr->pub(trans1, ledgerHeader, backend_, mockAmendmentCenterPtr_);
testFeedPtr->pub(trans1, ledgerHeader, backend_, mockAmendmentCenterPtr_, kNETWORK_ID);
testFeedPtr->unsub(sessionPtr);
testFeedPtr->unsubProposed(sessionPtr);
testFeedPtr->pub(trans1, ledgerHeader, backend_, mockAmendmentCenterPtr_);
testFeedPtr->pub(trans1, ledgerHeader, backend_, mockAmendmentCenterPtr_, kNETWORK_ID);
}
TEST_F(FeedTransactionTest, SubProposedDisconnect)
@@ -1063,10 +1072,10 @@ TEST_F(FeedTransactionTest, SubProposedDisconnect)
EXPECT_CALL(*mockSessionPtr, apiSubversion).WillOnce(testing::Return(1));
EXPECT_CALL(*mockSessionPtr, send(sharedStringJsonEq(kTRAN_V1))).Times(1);
testFeedPtr->pub(trans1, ledgerHeader, backend_, mockAmendmentCenterPtr_);
testFeedPtr->pub(trans1, ledgerHeader, backend_, mockAmendmentCenterPtr_, kNETWORK_ID);
sessionPtr.reset();
testFeedPtr->pub(trans1, ledgerHeader, backend_, mockAmendmentCenterPtr_);
testFeedPtr->pub(trans1, ledgerHeader, backend_, mockAmendmentCenterPtr_, kNETWORK_ID);
}
TEST_F(FeedTransactionTest, SubProposedAccountDisconnect)
@@ -1086,10 +1095,10 @@ TEST_F(FeedTransactionTest, SubProposedAccountDisconnect)
EXPECT_CALL(*mockSessionPtr, apiSubversion).WillOnce(testing::Return(1));
EXPECT_CALL(*mockSessionPtr, send(sharedStringJsonEq(kTRAN_V1))).Times(1);
testFeedPtr->pub(trans1, ledgerHeader, backend_, mockAmendmentCenterPtr_);
testFeedPtr->pub(trans1, ledgerHeader, backend_, mockAmendmentCenterPtr_, kNETWORK_ID);
sessionPtr.reset();
testFeedPtr->pub(trans1, ledgerHeader, backend_, mockAmendmentCenterPtr_);
testFeedPtr->pub(trans1, ledgerHeader, backend_, mockAmendmentCenterPtr_, kNETWORK_ID);
}
// This test exercises `accountHold` for amendment fixFrozenLPTokenTransfer, so that the output shows "owner_funds: 0"
@@ -1162,6 +1171,7 @@ TEST_F(FeedTransactionTest, PubTransactionWithOwnerFundFrozenLPToken)
"TransactionIndex":22,
"TransactionResult":"tesSUCCESS"
},
"ctid":"C000002100160000",
"type":"transaction",
"validated":true,
"status":"closed",
@@ -1190,7 +1200,7 @@ TEST_F(FeedTransactionTest, PubTransactionWithOwnerFundFrozenLPToken)
EXPECT_CALL(*backend_, doFetchLedgerObject(ripple::keylet::account(issuerAccount).key, testing::_, testing::_))
.WillOnce(testing::Return(issuerAccountRoot.getSerializer().peekData()));
testFeedPtr->pub(trans1, ledgerHeader, backend_, mockAmendmentCenterPtr_);
testFeedPtr->pub(trans1, ledgerHeader, backend_, mockAmendmentCenterPtr_, kNETWORK_ID);
}
struct TransactionFeedMockPrometheusTest : WithMockPrometheus, SyncExecutionCtxFixture {