diff --git a/src/rpc/Errors.cpp b/src/rpc/Errors.cpp index aa0be8fdb..e0aa79027 100644 --- a/src/rpc/Errors.cpp +++ b/src/rpc/Errors.cpp @@ -126,7 +126,6 @@ getErrorInfo(ClioError code) {.code = ClioError::RpcMalformedAuthorizedCredentials, .error = "malformedAuthorizedCredentials", .message = "Malformed authorized credentials."}, - {.code = ClioError::RpcEntryNotFound, .error = "entryNotFound", .message = "Entry Not Found."}, // special system errors {.code = ClioError::RpcInvalidApiVersion, .error = JS(invalid_API_version), .message = "Invalid API version."}, {.code = ClioError::RpcCommandIsMissing, diff --git a/src/rpc/Errors.hpp b/src/rpc/Errors.hpp index 0aaa78308..5dfa21ce2 100644 --- a/src/rpc/Errors.hpp +++ b/src/rpc/Errors.hpp @@ -43,7 +43,8 @@ enum class ClioError { RpcFieldNotFoundTransaction = 5006, RpcMalformedOracleDocumentId = 5007, RpcMalformedAuthorizedCredentials = 5008, - RpcEntryNotFound = 5009, + // NOTE: RpcEntryNotFound is replaced with RippledError::rpcENTRY_NOT_FOUND + // RpcEntryNotFound = 5009, // special system errors start with 6000 RpcInvalidApiVersion = 6000, diff --git a/src/rpc/handlers/VaultInfo.cpp b/src/rpc/handlers/VaultInfo.cpp index ad4074594..64e9a2d72 100644 --- a/src/rpc/handlers/VaultInfo.cpp +++ b/src/rpc/handlers/VaultInfo.cpp @@ -107,7 +107,7 @@ VaultInfoHandler::process(VaultInfoHandler::Input const& input, Context const& c sharedPtrBackend_->fetchLedgerObject(accountKeylet.key, lgrInfo.seq, ctx.yield); if (!accountLedgerObject) - return std::unexpected{Status{ClioError::RpcEntryNotFound}}; + return std::unexpected{Status{RippledError::rpcENTRY_NOT_FOUND}}; } return ripple::keylet::vault(*accountID, *input.tnxSequence); @@ -116,7 +116,7 @@ VaultInfoHandler::process(VaultInfoHandler::Input const& input, Context const& c if (nodeIndex.parseHex(*input.vaultID)) return ripple::keylet::vault(nodeIndex); - return std::unexpected{Status{ClioError::RpcEntryNotFound}}; + return std::unexpected{Status{RippledError::rpcENTRY_NOT_FOUND}}; }(); if (not vaultKeylet.has_value()) @@ -127,7 +127,7 @@ VaultInfoHandler::process(VaultInfoHandler::Input const& input, Context const& c sharedPtrBackend_->fetchLedgerObject(vaultKeylet.value().key, lgrInfo.seq, ctx.yield); if (not vaultLedgerObject) - return Error{Status{ClioError::RpcEntryNotFound, "vault object not found."}}; + return Error{Status{RippledError::rpcENTRY_NOT_FOUND, "vault object not found."}}; ripple::STLedgerEntry const vaultSle{ ripple::SerialIter{vaultLedgerObject->data(), vaultLedgerObject->size()}, vaultKeylet.value().key @@ -137,7 +137,7 @@ VaultInfoHandler::process(VaultInfoHandler::Input const& input, Context const& c auto const issuanceObject = sharedPtrBackend_->fetchLedgerObject(issuanceKeylet, lgrInfo.seq, ctx.yield); if (not issuanceObject) - return Error{Status{ClioError::RpcEntryNotFound, "issuance object not found."}}; + return Error{Status{RippledError::rpcENTRY_NOT_FOUND, "issuance object not found."}}; ripple::STLedgerEntry const issuanceSle{ ripple::SerialIter{issuanceObject->data(), issuanceObject->size()}, issuanceKeylet diff --git a/src/web/impl/ErrorHandling.hpp b/src/web/impl/ErrorHandling.hpp index fff6589d6..30290773b 100644 --- a/src/web/impl/ErrorHandling.hpp +++ b/src/web/impl/ErrorHandling.hpp @@ -91,7 +91,6 @@ public: case rpc::ClioError::RpcFieldNotFoundTransaction: case rpc::ClioError::RpcMalformedOracleDocumentId: case rpc::ClioError::RpcMalformedAuthorizedCredentials: - case rpc::ClioError::RpcEntryNotFound: case rpc::ClioError::EtlConnectionError: case rpc::ClioError::EtlRequestError: case rpc::ClioError::EtlRequestTimeout: diff --git a/src/web/ng/impl/ErrorHandling.cpp b/src/web/ng/impl/ErrorHandling.cpp index 215cef225..30d3729d1 100644 --- a/src/web/ng/impl/ErrorHandling.cpp +++ b/src/web/ng/impl/ErrorHandling.cpp @@ -105,7 +105,6 @@ ErrorHelper::makeError(rpc::Status const& err) const case rpc::ClioError::RpcFieldNotFoundTransaction: case rpc::ClioError::RpcMalformedOracleDocumentId: case rpc::ClioError::RpcMalformedAuthorizedCredentials: - case rpc::ClioError::RpcEntryNotFound: case rpc::ClioError::EtlConnectionError: case rpc::ClioError::EtlRequestError: case rpc::ClioError::EtlRequestTimeout: diff --git a/tests/unit/rpc/handlers/VaultInfoTests.cpp b/tests/unit/rpc/handlers/VaultInfoTests.cpp index a7aa80f33..cd5160776 100644 --- a/tests/unit/rpc/handlers/VaultInfoTests.cpp +++ b/tests/unit/rpc/handlers/VaultInfoTests.cpp @@ -71,6 +71,7 @@ struct VaultInfoParamTestCaseBundle { std::string testName; std::string testJson; std::string expectedError; + CombinedError expectedErrorCode; std::string expectedErrorMessage; }; @@ -86,6 +87,7 @@ generateTestValuesForParametersTest() "idk": "idk" })JSON", .expectedError = "malformedRequest", + .expectedErrorCode = ClioError::RpcMalformedRequest, .expectedErrorMessage = "Malformed request." }, VaultInfoParamTestCaseBundle{ @@ -94,6 +96,7 @@ generateTestValuesForParametersTest() "seq": 4 })JSON", .expectedError = "malformedRequest", + .expectedErrorCode = ClioError::RpcMalformedRequest, .expectedErrorMessage = "Malformed request." }, VaultInfoParamTestCaseBundle{ @@ -102,6 +105,7 @@ generateTestValuesForParametersTest() "owner": "rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh" })JSON", .expectedError = "malformedRequest", + .expectedErrorCode = ClioError::RpcMalformedRequest, .expectedErrorMessage = "Malformed request." }, VaultInfoParamTestCaseBundle{ @@ -111,6 +115,7 @@ generateTestValuesForParametersTest() "seq": "asdf" })JSON", .expectedError = "malformedRequest", + .expectedErrorCode = ClioError::RpcMalformedRequest, .expectedErrorMessage = "Malformed request." }, VaultInfoParamTestCaseBundle{ @@ -120,6 +125,7 @@ generateTestValuesForParametersTest() "seq": 3 })JSON", .expectedError = "malformedRequest", + .expectedErrorCode = ClioError::RpcMalformedRequest, .expectedErrorMessage = "OwnerNotHexString" }, VaultInfoParamTestCaseBundle{ @@ -129,6 +135,7 @@ generateTestValuesForParametersTest() "seq": 3 })JSON", .expectedError = "malformedRequest", + .expectedErrorCode = ClioError::RpcMalformedRequest, .expectedErrorMessage = "OwnerNotHexString" }, VaultInfoParamTestCaseBundle{ @@ -137,6 +144,7 @@ generateTestValuesForParametersTest() "vault_id": 3 })JSON", .expectedError = "malformedRequest", + .expectedErrorCode = ClioError::RpcMalformedRequest, .expectedErrorMessage = "Malformed request." }, VaultInfoParamTestCaseBundle{ @@ -145,6 +153,7 @@ generateTestValuesForParametersTest() "vault_id": "idk" })JSON", .expectedError = "malformedRequest", + .expectedErrorCode = ClioError::RpcMalformedRequest, .expectedErrorMessage = "Malformed request." }, VaultInfoParamTestCaseBundle{ @@ -158,6 +167,7 @@ generateTestValuesForParametersTest() kACCOUNT ), .expectedError = "malformedRequest", + .expectedErrorCode = ClioError::RpcMalformedRequest, .expectedErrorMessage = "Malformed request." } }; @@ -181,6 +191,10 @@ TEST_P(VaultInfoParameterTest, InvalidParams) auto const err = rpc::makeError(output.result.error()); EXPECT_EQ(err.at("error").as_string(), testBundle.expectedError); + EXPECT_EQ( + err.at("error_code").as_uint64(), + std::visit([](auto code) { return static_cast(code); }, testBundle.expectedErrorCode) + ); EXPECT_EQ(err.at("error_message").as_string(), testBundle.expectedErrorMessage); }); } @@ -208,6 +222,8 @@ TEST_F(RPCVaultInfoHandlerTest, InputHasOwnerButNotFoundResultsInError) ASSERT_FALSE(output); auto const err = rpc::makeError(output.result.error()); EXPECT_EQ(err.at("error").as_string(), "entryNotFound"); + EXPECT_EQ(err.at("error_code").as_uint64(), rpc::RippledError::rpcENTRY_NOT_FOUND); + EXPECT_EQ(err.at("error_message").as_string(), "Entry not found."); }); } @@ -237,6 +253,8 @@ TEST_F(RPCVaultInfoHandlerTest, VaultIDFailsVaultDeserializationReturnsEntryNotF ASSERT_FALSE(output); auto const err = rpc::makeError(output.result.error()); EXPECT_EQ(err.at("error").as_string(), "entryNotFound"); + EXPECT_EQ(err.at("error_code").as_uint64(), rpc::RippledError::rpcENTRY_NOT_FOUND); + EXPECT_EQ(err.at("error_message").as_string(), "vault object not found."); }); } @@ -277,6 +295,8 @@ TEST_F(RPCVaultInfoHandlerTest, MissingIssuanceObject) ASSERT_FALSE(output); auto const err = rpc::makeError(output.result.error()); EXPECT_EQ(err.at("error").as_string(), "entryNotFound"); + EXPECT_EQ(err.at("error_code").as_uint64(), rpc::RippledError::rpcENTRY_NOT_FOUND); + EXPECT_EQ(err.at("error_message").as_string(), "issuance object not found."); }); }