fix: Align error messages and rpc-spec 0.1.17 (#3223)

This commit is contained in:
Alex Kremer
2026-09-23 13:29:57 +01:00
committed by GitHub
parent 4a96b6612b
commit ad2ff82ab1
9 changed files with 57 additions and 37 deletions

View File

@@ -3,7 +3,7 @@
"requires": [
"zlib/1.3.2#1cb806da49011867778ffb6ac7190fcb%1782392402.122708",
"xxhash/0.8.3#681d36a0a6111fc56e5e45ea182c19cc%1782392402.420688",
"xrpl-rpc-spec/0.1.15#cd65b9ba58070dc851d67c88a0224e4f%1789705851.014228",
"xrpl-rpc-spec/0.1.17#ddfbc1f89da7797b6506fb9ee9488e17%1790136770.803908",
"xrpl/3.4.0#e06b127b3ba92806a43fc7a53fc05fd3%1789577552.219154",
"sqlite3/3.53.0#324ada52333108388a9a6108bfa96734%1782392403.185447",
"spdlog/1.17.0#bcbaaf7147bda6ad24ffbd1ac3d7142c%1782736610.443882",

View File

@@ -17,7 +17,7 @@ class ClioConan(ConanFile):
"fmt/12.1.0",
"libbacktrace/cci.20210118",
"spdlog/1.17.0",
"xrpl-rpc-spec/0.1.15",
"xrpl-rpc-spec/0.1.17",
"xrpl/3.4.0",
]

View File

@@ -1538,7 +1538,7 @@ parseBook(
}
if (pays == gets)
return std::unexpected{Status{RippledError::RpcBadMarket, "badMarket"}};
return std::unexpected{Status{RippledError::RpcBadMarket}};
return xrpl::Book{pays, gets, domainID};
}
@@ -1677,7 +1677,7 @@ parseBook(boost::json::object const& request)
}
if (payCurrency == getCurrency && payIssuer == getIssuer)
return std::unexpected{Status{RippledError::RpcBadMarket, "badMarket"}};
return std::unexpected{Status{RippledError::RpcBadMarket}};
std::optional<xrpl::uint256> domainID;
if (request.contains("domain")) {

View File

@@ -58,14 +58,8 @@ VaultInfoHandler::VaultInfoHandler(std::shared_ptr<BackendInterface> sharedPtrBa
VaultInfoHandler::Result
VaultInfoHandler::process(VaultInfoHandler::Input const& input, Context const& ctx) const
{
// vault info input must either have owner and sequence, or vault_id only. Wording and code
// match xrpld's VaultInfo.cpp parseVault().
if (not validate(input)) {
return Error{Status{
RippledError::RpcInvalidParams,
"Must specify either 'vault_id' or both 'owner' and 'seq'."
}};
}
if (not validate(input))
return Error{ClioError::RpcMalformedRequest};
auto const range = sharedPtrBackend_->fetchLedgerRange();
ASSERT(range.has_value(), "VaultInfo's ledger range must be available");

View File

@@ -706,7 +706,7 @@ TEST_F(RPCHelpersTest, ParseBookBadMarket)
auto const book = rpc::parseBook(usd, usd, std::nullopt);
ASSERT_FALSE(book.has_value());
EXPECT_TRUE(book.error().code == CombinedError{RippledError::RpcBadMarket});
EXPECT_EQ(rpc::makeError(book.error()).at("error_message").as_string(), "badMarket");
EXPECT_EQ(rpc::makeError(book.error()).at("error_message").as_string(), "No such market.");
}
// Identical MPT assets on both sides.
@@ -717,7 +717,7 @@ TEST_F(RPCHelpersTest, ParseBookBadMarket)
auto const book = rpc::parseBook(mpt, mpt, std::nullopt);
ASSERT_FALSE(book.has_value());
EXPECT_TRUE(book.error().code == CombinedError{RippledError::RpcBadMarket});
EXPECT_EQ(rpc::makeError(book.error()).at("error_message").as_string(), "badMarket");
EXPECT_EQ(rpc::makeError(book.error()).at("error_message").as_string(), "No such market.");
}
}
@@ -769,7 +769,7 @@ TEST_F(RPCHelpersTest, ParseBookCurrencyOverloadDelegates)
);
ASSERT_FALSE(book.has_value());
EXPECT_TRUE(book.error().code == CombinedError{RippledError::RpcBadMarket});
EXPECT_EQ(rpc::makeError(book.error()).at("error_message").as_string(), "badMarket");
EXPECT_EQ(rpc::makeError(book.error()).at("error_message").as_string(), "No such market.");
}
}

View File

@@ -152,7 +152,7 @@ generateParameterBookOffersTestBundles()
}
})JSON",
.expectedError = "invalidParams",
.expectedErrorMessage = "Required field 'currency' missing"
.expectedErrorMessage = "Missing field 'taker_pays.currency'."
},
ParameterTestBundle{
.testName = "TakerGetsMissingCurrency",
@@ -163,7 +163,7 @@ generateParameterBookOffersTestBundles()
}
})JSON",
.expectedError = "invalidParams",
.expectedErrorMessage = "Required field 'currency' missing"
.expectedErrorMessage = "Missing field 'taker_gets.currency'."
},
ParameterTestBundle{
.testName = "TakerGetsWrongCurrency",
@@ -208,8 +208,8 @@ generateParameterBookOffersTestBundles()
"currency": "XRP"
}
})JSON",
.expectedError = "dstAmtMalformed",
.expectedErrorMessage = "Destination amount/currency/issuer is malformed."
.expectedError = "invalidParams",
.expectedErrorMessage = "Invalid field 'taker_gets.currency', not string."
},
ParameterTestBundle{
.testName = "TakerPaysCurrencyNotString",
@@ -222,8 +222,8 @@ generateParameterBookOffersTestBundles()
"currency": "XRP"
}
})JSON",
.expectedError = "srcCurMalformed",
.expectedErrorMessage = "Source currency is malformed."
.expectedError = "invalidParams",
.expectedErrorMessage = "Invalid field 'taker_pays.currency', not string."
},
ParameterTestBundle{
.testName = "TakerGetsWrongIssuer",
@@ -490,7 +490,33 @@ generateParameterBookOffersTestBundles()
}
})JSON",
.expectedError = "badMarket",
.expectedErrorMessage = "badMarket"
.expectedErrorMessage = "No such market."
},
ParameterTestBundle{
.testName = "TakerGetsMptIdNotString",
.testJson = R"JSON({
"taker_gets": {
"mpt_issuance_id": 123
},
"taker_pays": {
"currency": "XRP"
}
})JSON",
.expectedError = "invalidParams",
.expectedErrorMessage = "Invalid field 'taker_gets.mpt_issuance_id', not string."
},
ParameterTestBundle{
.testName = "TakerPaysMptIdNotString",
.testJson = R"JSON({
"taker_gets": {
"currency": "XRP"
},
"taker_pays": {
"mpt_issuance_id": true
}
})JSON",
.expectedError = "invalidParams",
.expectedErrorMessage = "Invalid field 'taker_pays.mpt_issuance_id', not string."
},
ParameterTestBundle{
.testName = "TakerGetsMptIdAndCurrency",
@@ -585,7 +611,7 @@ generateParameterBookOffersTestBundles()
}
})JSON",
.expectedError = "badMarket",
.expectedErrorMessage = "badMarket"
.expectedErrorMessage = "No such market."
},
// The "account one" issuer (rrrrrrrrrrrrrrrrrrrrBZbvji == xrpl::noAccount()) is rejected,
// mirroring rippled's parseTakerIssuerJSON "bad issuer account one" check.

View File

@@ -476,7 +476,7 @@ generateTestValuesForParametersTest()
]
})JSON",
.expectedError = "badMarket",
.expectedErrorMessage = "badMarket"
.expectedErrorMessage = "No such market."
},
SubscribeParamTestCaseBundle{
.testName = "BooksItemInvalidSnapshot",

View File

@@ -439,7 +439,7 @@ generateTestValuesForParametersTest()
]
})JSON",
.expectedError = "badMarket",
.expectedErrorMessage = "badMarket"
.expectedErrorMessage = "No such market."
},
UnsubscribeParamTestCaseBundle{
.testName = "BooksItemInvalidBoth",

View File

@@ -70,27 +70,27 @@ generateTestValuesForParametersTest()
.testJson = R"JSON({
"idk": "idk"
})JSON",
.expectedError = "invalidParams",
.expectedErrorCode = RippledError::RpcInvalidParams,
.expectedErrorMessage = "Must specify either 'vault_id' or both 'owner' and 'seq'."
.expectedError = "malformedRequest",
.expectedErrorCode = rpc::ClioError::RpcMalformedRequest,
.expectedErrorMessage = "Malformed request."
},
VaultInfoParamTestCaseBundle{
.testName = "MissingOwnerInVault",
.testJson = R"JSON({
"seq": 4
})JSON",
.expectedError = "invalidParams",
.expectedErrorCode = RippledError::RpcInvalidParams,
.expectedErrorMessage = "Must specify either 'vault_id' or both 'owner' and 'seq'."
.expectedError = "malformedRequest",
.expectedErrorCode = rpc::ClioError::RpcMalformedRequest,
.expectedErrorMessage = "Malformed request."
},
VaultInfoParamTestCaseBundle{
.testName = "MissingSeqInVault",
.testJson = R"JSON({
"owner": "rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh"
})JSON",
.expectedError = "invalidParams",
.expectedErrorCode = RippledError::RpcInvalidParams,
.expectedErrorMessage = "Must specify either 'vault_id' or both 'owner' and 'seq'."
.expectedError = "malformedRequest",
.expectedErrorCode = rpc::ClioError::RpcMalformedRequest,
.expectedErrorMessage = "Malformed request."
},
VaultInfoParamTestCaseBundle{
.testName = "SeqNotAnInteger",
@@ -150,9 +150,9 @@ generateTestValuesForParametersTest()
kVaultId,
kAccount
),
.expectedError = "invalidParams",
.expectedErrorCode = RippledError::RpcInvalidParams,
.expectedErrorMessage = "Must specify either 'vault_id' or both 'owner' and 'seq'."
.expectedError = "malformedRequest",
.expectedErrorCode = rpc::ClioError::RpcMalformedRequest,
.expectedErrorMessage = "Malformed request."
}
};
}