Files
rippled/src/test/rpc/RPCCall_test.cpp
2025-11-17 18:16:14 +05:30

5743 lines
135 KiB
C++

#include <test/jtx.h>
#include <test/jtx/utility.h>
#include <xrpld/rpc/RPCCall.h>
#include <xrpl/beast/unit_test.h>
#include <xrpl/json/json_reader.h>
#include <xrpl/protocol/ApiVersion.h>
#include <xrpl/protocol/ErrorCodes.h>
#include <boost/algorithm/string.hpp>
#include <functional>
#include <initializer_list>
#include <vector>
namespace ripple {
namespace test {
struct RPCCallTestData
{
char const* const description;
int const line;
// List of passed arguments.
std::vector<char const*> const args;
// Expected JSON response.
std::vector<char const*> exp;
RPCCallTestData(
char const* description_,
int line_,
std::initializer_list<char const*> const& args_,
char const* exp_)
: description(description_), line(line_), args(args_), exp(1, exp_)
{
}
RPCCallTestData(
char const* description_,
int line_,
std::initializer_list<char const*> const& args_,
std::initializer_list<char const*> exp_)
: description(description_), line(line_), args(args_), exp(exp_)
{
}
RPCCallTestData() = delete;
RPCCallTestData(RPCCallTestData const&) = delete;
RPCCallTestData(RPCCallTestData&&) = delete;
RPCCallTestData&
operator=(RPCCallTestData const&) = delete;
RPCCallTestData&
operator=(RPCCallTestData&&) = delete;
};
static RPCCallTestData const rpcCallTestArray[] = {
// account_channels
// ------------------------------------------------------------
{"account_channels: minimal.",
__LINE__,
{"account_channels", "rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh"},
R"({
"method" : "account_channels",
"params" : [
{
"api_version" : %API_VER%,
"account" : "rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh"
}
]
})"},
{"account_channels: account and ledger hash.",
__LINE__,
{"account_channels",
"rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh",
"rD5MbavGfiSC5m7mkxy1FANuT7s3HxqpoF"},
R"({
"method" : "account_channels",
"params" : [
{
"api_version" : %API_VER%,
"account" : "rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh",
"destination_account" : "rD5MbavGfiSC5m7mkxy1FANuT7s3HxqpoF"
}
]
})"},
{"account_channels: account and ledger index.",
__LINE__,
{"account_channels",
"rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh",
"r9emE59aTWb85t64dAebKrxYMBTpzK5yR7"},
R"({
"method" : "account_channels",
"params" : [
{
"api_version" : %API_VER%,
"account" : "rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh",
"destination_account" : "r9emE59aTWb85t64dAebKrxYMBTpzK5yR7"
}
]
})"},
{"account_channels: two accounts.",
__LINE__,
{"account_channels",
"rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh",
"rnUy2SHTrB9DubsPmkJZUXTf5FcNDGrYEA"},
R"({
"method" : "account_channels",
"params" : [
{
"api_version" : %API_VER%,
"account" : "rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh",
"destination_account" : "rnUy2SHTrB9DubsPmkJZUXTf5FcNDGrYEA"
}
]
})"},
{"account_channels: two accounts and ledger hash.",
__LINE__,
{"account_channels",
"rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh",
"rnUy2SHTrB9DubsPmkJZUXTf5FcNDGrYEA",
"0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF"},
R"({
"method" : "account_channels",
"params" : [
{
"api_version" : %API_VER%,
"account" : "rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh",
"destination_account" : "rnUy2SHTrB9DubsPmkJZUXTf5FcNDGrYEA",
"ledger_hash" : "0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF"
}
]
})"},
{"account_channels: two accounts and ledger index.",
__LINE__,
{"account_channels",
"rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh",
"rnUy2SHTrB9DubsPmkJZUXTf5FcNDGrYEA",
"90210"},
R"({
"method" : "account_channels",
"params" : [
{
"api_version" : %API_VER%,
"account" : "rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh",
"destination_account" : "rnUy2SHTrB9DubsPmkJZUXTf5FcNDGrYEA",
"ledger_index" : 90210
}
]
})"},
{"account_channels: too few arguments.",
__LINE__,
{
"account_channels",
},
R"({
"method" : "account_channels",
"params" : [
{
"error" : "badSyntax",
"error_code" : 1,
"error_message" : "Syntax error."
}
]
})"},
{"account_channels: too many arguments.",
__LINE__,
{"account_channels",
"rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh",
"rnUy2SHTrB9DubsPmkJZUXTf5FcNDGrYEA",
"current",
"extra"},
R"({
"method" : "account_channels",
"params" : [
{
"error" : "badSyntax",
"error_code" : 1,
"error_message" : "Syntax error."
}
]
})"},
{"account_channels: invalid accountID.",
__LINE__,
{
"account_channels",
"", // Note: very few values are detected as bad!
},
R"({
"method" : "account_channels",
"params" : [
{
"error" : "actMalformed",
"error_code" : 35,
"error_message" : "Account malformed."
}
]
})"},
// account_currencies
// ----------------------------------------------------------
{"account_currencies: minimal 1.",
__LINE__,
{"account_currencies", "rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh"},
R"({
"method" : "account_currencies",
"params" : [
{
"api_version" : %API_VER%,
"account" : "rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh"
}
]
})"},
{"account_currencies: minimal 2.",
__LINE__,
{"account_currencies", "racb4o3DrdYxuCfyVa6vsLb7vgju9RFbBr"},
R"({
"method" : "account_currencies",
"params" : [
{
"api_version" : %API_VER%,
"account" : "racb4o3DrdYxuCfyVa6vsLb7vgju9RFbBr"
}
]
})"},
{"account_currencies: ledger index.",
__LINE__,
{"account_currencies", "rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh", "42"},
R"({
"method" : "account_currencies",
"params" : [
{
"api_version" : %API_VER%,
"account" : "rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh",
"ledger_index" : 42
}
]
})"},
{"account_currencies: validated ledger.",
__LINE__,
{"account_currencies", "rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh", "validated"},
R"({
"method" : "account_currencies",
"params" : [
{
"api_version" : %API_VER%,
"account" : "rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh",
"ledger_index" : "validated"
}
]
})"},
{"account_currencies: current ledger.",
__LINE__,
{"account_currencies", "rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh", "current"},
R"({
"method" : "account_currencies",
"params" : [
{
"account" : "rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh",
"api_version" : %API_VER%,
"ledger_index" : "current"
}
]
})"},
{"account_currencies: too few arguments.",
__LINE__,
{
"account_currencies",
},
R"({
"method" : "account_currencies",
"params" : [
{
"error" : "badSyntax",
"error_code" : 1,
"error_message" : "Syntax error."
}
]
})"},
{"account_currencies: too many arguments.",
__LINE__,
{"account_currencies",
"rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh",
"current",
"spare1",
"spare2"},
R"({
"method" : "account_currencies",
"params" : [
{
"error" : "badSyntax",
"error_code" : 1,
"error_message" : "Syntax error."
}
]
})"},
{"account_currencies: invalid second argument.",
__LINE__,
{"account_currencies", "rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh", "yup"},
R"({
"method" : "account_currencies",
"params" : [
{
"api_version" : %API_VER%,
"account" : "rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh",
"ledger_index" : 0
}
]
})"},
{
"account_currencies: invalid accountID.",
__LINE__,
{
"account_currencies",
"", // Note: very few values are detected as bad!
},
R"({
"method" : "account_currencies",
"params" : [
{
"error" : "actMalformed",
"error_code" : 35,
"error_message" : "Account malformed."
}
]
})",
},
// account_info
// ----------------------------------------------------------------
{"account_info: minimal.",
__LINE__,
{"account_info", "rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh"},
R"({
"method" : "account_info",
"params" : [
{
"api_version" : %API_VER%,
"account" : "rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh"
}
]
})"},
{"account_info: with numeric ledger index.",
__LINE__,
{"account_info", "rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh", "77777"},
R"({
"method" : "account_info",
"params" : [
{
"api_version" : %API_VER%,
"account" : "rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh",
"ledger_index" : 77777
}
]
})"},
{"account_info: with text ledger index.",
__LINE__,
{"account_info", "rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh", "closed"},
R"({
"method" : "account_info",
"params" : [
{
"api_version" : %API_VER%,
"account" : "rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh",
"ledger_index" : "closed"
}
]
})"},
{"account_info: with ledger hash.",
__LINE__,
{"account_info",
"rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh",
"0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF"},
R"({
"method" : "account_info",
"params" : [
{
"api_version" : %API_VER%,
"account" : "rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh",
"ledger_hash" : "0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF"
}
]
})"},
{"account_info: with ledger index.",
__LINE__,
{"account_info", "rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh", "validated"},
R"({
"method" : "account_info",
"params" : [
{
"account" : "rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh",
"api_version" : %API_VER%,
"ledger_index" : "validated"
}
]
})"},
{"account_info: too few arguments.",
__LINE__,
{
"account_info",
},
R"({
"method" : "account_info",
"params" : [
{
"error" : "badSyntax",
"error_code" : 1,
"error_message" : "Syntax error."
}
]
})"},
{"account_info: too many arguments.",
__LINE__,
{"account_info",
"rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh",
"current",
"extra1",
"extra2"},
R"({
"method" : "account_info",
"params" : [
{
"error" : "badSyntax",
"error_code" : 1,
"error_message" : "Syntax error."
}
]
})"},
{
"account_info: invalid accountID.",
__LINE__,
{
"account_info",
"", // Note: very few values are detected as bad!
},
R"({
"method" : "account_info",
"params" : [
{
"error" : "actMalformed",
"error_code" : 35,
"error_message" : "Account malformed."
}
]
})",
},
// account_lines
// ---------------------------------------------------------------
{"account_lines: minimal.",
__LINE__,
{"account_lines", "rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh"},
R"({
"method" : "account_lines",
"params" : [
{
"api_version" : %API_VER%,
"account" : "rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh",
}
]
})"},
{"account_lines: peer.",
__LINE__,
{"account_lines",
"rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh",
"rnUy2SHTrB9DubsPmkJZUXTf5FcNDGrYEA"},
R"({
"method" : "account_lines",
"params" : [
{
"api_version" : %API_VER%,
"account" : "rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh",
"peer" : "rnUy2SHTrB9DubsPmkJZUXTf5FcNDGrYEA"
}
]
})"},
{"account_lines: peer and numeric ledger index.",
__LINE__,
{"account_lines",
"rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh",
"rnUy2SHTrB9DubsPmkJZUXTf5FcNDGrYEA",
"888888888"},
R"({
"method" : "account_lines",
"params" : [
{
"api_version" : %API_VER%,
"account" : "rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh",
"ledger_index" : 888888888,
"peer" : "rnUy2SHTrB9DubsPmkJZUXTf5FcNDGrYEA"
}
]
})"},
{"account_lines: peer and text ledger index.",
__LINE__,
{"account_lines",
"rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh",
"rnUy2SHTrB9DubsPmkJZUXTf5FcNDGrYEA",
"closed"},
R"({
"method" : "account_lines",
"params" : [
{
"api_version" : %API_VER%,
"account" : "rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh",
"ledger_index" : "closed",
"peer" : "rnUy2SHTrB9DubsPmkJZUXTf5FcNDGrYEA"
}
]
})"},
{"account_lines: peer and ledger hash.",
__LINE__,
{"account_lines",
"rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh",
"rnUy2SHTrB9DubsPmkJZUXTf5FcNDGrYEA",
"FFFFEEEEDDDDCCCCBBBBAAAA9999888877776666555544443333222211110000"},
R"({
"method" : "account_lines",
"params" : [
{
"api_version" : %API_VER%,
"account" : "rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh",
"ledger_hash" : "FFFFEEEEDDDDCCCCBBBBAAAA9999888877776666555544443333222211110000",
"peer" : "rnUy2SHTrB9DubsPmkJZUXTf5FcNDGrYEA"
}
]
})"},
{"account_lines: too few arguments.",
__LINE__,
{
"account_lines",
},
R"({
"method" : "account_lines",
"params" : [
{
"error" : "badSyntax",
"error_code" : 1,
"error_message" : "Syntax error."
}
]
})"},
{// Note: I believe this _ought_ to be detected as too many arguments.
"account_lines: four arguments.",
__LINE__,
{"account_lines",
"rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh",
"rnUy2SHTrB9DubsPmkJZUXTf5FcNDGrYEA",
"12345678",
"current"},
R"({
"method" : "account_lines",
"params" : [
{
"api_version" : %API_VER%,
"account" : "rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh",
"ledger_index" : 12345678,
"peer" : "rnUy2SHTrB9DubsPmkJZUXTf5FcNDGrYEA"
}
]
})"},
{// Note: I believe this _ought_ to be detected as too many arguments.
"account_lines: five arguments.",
__LINE__,
{"account_lines",
"rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh",
"rnUy2SHTrB9DubsPmkJZUXTf5FcNDGrYEA",
"12345678",
"current",
"0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF"},
R"({
"method" : "account_lines",
"params" : [
{
"api_version" : %API_VER%,
"account" : "rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh",
"ledger_index" : 12345678,
"peer" : "rnUy2SHTrB9DubsPmkJZUXTf5FcNDGrYEA"
}
]
})"},
{"account_lines: too many arguments.",
__LINE__,
{"account_lines",
"rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh",
"rnUy2SHTrB9DubsPmkJZUXTf5FcNDGrYEA",
"12345678",
"current",
"0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF",
"validated"},
R"({
"method" : "account_lines",
"params" : [
{
"error" : "badSyntax",
"error_code" : 1,
"error_message" : "Syntax error."
}
]
})"},
{
"account_lines: first invalid accountID.",
__LINE__,
{
"account_lines",
"", // Note: very few values are detected as bad!
},
R"({
"method" : "account_lines",
"params" : [
{
"error" : "actMalformed",
"error_code" : 35,
"error_message" : "Account malformed."
}
]
})",
},
{
"account_lines: second invalid accountID.",
__LINE__,
{
"account_lines",
"rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh",
"" // Note: very few values are detected as bad!
},
R"({
"method" : "account_lines",
"params" : [
{
"api_version" : %API_VER%,
"account" : "rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh"
}
]
})",
},
{
"account_lines: invalid ledger selector.",
__LINE__,
{"account_lines",
"rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh",
"rnUy2SHTrB9DubsPmkJZUXTf5FcNDGrYEA",
"not_a_ledger"},
R"({
"method" : "account_lines",
"params" : [
{
"api_version" : %API_VER%,
"account" : "rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh",
"ledger_index" : 0,
"peer" : "rnUy2SHTrB9DubsPmkJZUXTf5FcNDGrYEA"
}
]
})",
},
// account_objects
// -------------------------------------------------------------
{"account_objects: minimal.",
__LINE__,
{"account_objects", "rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh"},
R"({
"method" : "account_objects",
"params" : [
{
"api_version" : %API_VER%,
"account" : "rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh"
}
]
})"},
{"account_objects: with numeric ledger index.",
__LINE__,
{"account_objects", "rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh", "77777"},
R"({
"method" : "account_objects",
"params" : [
{
"api_version" : %API_VER%,
"account" : "rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh",
"ledger_index" : 77777
}
]
})"},
{"account_objects: with text ledger index.",
__LINE__,
{"account_objects", "rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh", "closed"},
R"({
"method" : "account_objects",
"params" : [
{
"api_version" : %API_VER%,
"account" : "rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh",
"ledger_index" : "closed"
}
]
})"},
{"account_objects: with ledger hash.",
__LINE__,
{"account_objects",
"rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh",
"0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF"},
R"({
"method" : "account_objects",
"params" : [
{
"api_version" : %API_VER%,
"account" : "rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh",
"ledger_hash" : "0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF"
}
]
})"},
{"account_objects: with ledger index.",
__LINE__,
{"account_objects", "rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh", "validated"},
R"({
"method" : "account_objects",
"params" : [
{
"api_version" : %API_VER%,
"account" : "rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh",
"ledger_index" : "validated"
}
]
})"},
{"account_objects: too few arguments.",
__LINE__,
{
"account_objects",
},
R"({
"method" : "account_objects",
"params" : [
{
"error" : "badSyntax",
"error_code" : 1,
"error_message" : "Syntax error."
}
]
})"},
{// Note: I believe this _ought_ to be detected as too many arguments.
"account_objects: four arguments.",
__LINE__,
{
"account_objects",
"rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh",
"current",
"extra1",
"extra2",
},
R"({
"method" : "account_objects",
"params" : [
{
"api_version" : %API_VER%,
"account" : "rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh"
}
]
})"},
{// Note: I believe this _ought_ to be detected as too many arguments.
"account_objects: five arguments.",
__LINE__,
{
"account_objects",
"rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh",
"current",
"extra1",
"extra2",
"extra3",
},
R"({
"method" : "account_objects",
"params" : [
{
"api_version" : %API_VER%,
"account" : "rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh"
}
]
})"},
{"account_objects: too many arguments.",
__LINE__,
{
"account_objects",
"rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh",
"current",
"extra1",
"extra2",
"extra3",
"extra4",
},
R"({
"method" : "account_objects",
"params" : [
{
"error" : "badSyntax",
"error_code" : 1,
"error_message" : "Syntax error."
}
]
})"},
{
"account_objects: invalid accountID.",
__LINE__,
{
"account_objects",
"", // Note: very few values are detected as bad!
},
R"({
"method" : "account_objects",
"params" : [
{
"error" : "actMalformed",
"error_code" : 35,
"error_message" : "Account malformed."
}
]
})",
},
{
// Note: there is code in place to return rpcLGR_IDX_MALFORMED. That
// cannot currently occur because jvParseLedger() always returns true.
"account_objects: invalid ledger selection 1.",
__LINE__,
{"account_objects", "rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh", "no_ledger"},
R"({
"method" : "account_objects",
"params" : [
{
"api_version" : %API_VER%,
"account" : "rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh",
"ledger_index" : 0
}
]
})",
},
{
// Note: there is code in place to return rpcLGR_IDX_MALFORMED. That
// cannot currently occur because jvParseLedger() always returns true.
"account_objects: invalid ledger selection 2.",
__LINE__,
{"account_objects", "rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh", "no_ledger"},
R"({
"method" : "account_objects",
"params" : [
{
"api_version" : %API_VER%,
"account" : "rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh",
"ledger_index" : 0
}
]
})",
},
// account_offers
// --------------------------------------------------------------
{"account_offers: minimal.",
__LINE__,
{"account_offers", "rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh"},
R"({
"method" : "account_offers",
"params" : [
{
"api_version" : %API_VER%,
"account" : "rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh"
}
]
})"},
{"account_offers: with numeric ledger index.",
__LINE__,
{"account_offers", "rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh", "987654321"},
R"({
"method" : "account_offers",
"params" : [
{
"api_version" : %API_VER%,
"account" : "rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh",
"ledger_index" : 987654321
}
]
})"},
{"account_offers: with text ledger index.",
__LINE__,
{"account_offers", "rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh", "validated"},
R"({
"method" : "account_offers",
"params" : [
{
"api_version" : %API_VER%,
"account" : "rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh",
"ledger_index" : "validated"
}
]
})"},
{"account_offers: with ledger hash.",
__LINE__,
{"account_offers",
"rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh",
"0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF"},
R"({
"method" : "account_offers",
"params" : [
{
"api_version" : %API_VER%,
"account" : "rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh",
"ledger_hash" : "0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF"
}
]
})"},
{"account_offers: with ledger index.",
__LINE__,
{"account_offers", "rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh", "validated"},
R"({
"method" : "account_offers",
"params" : [
{
"api_version" : %API_VER%,
"account" : "rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh",
"ledger_index" : "validated"
}
]
})"},
{"account_offers: too few arguments.",
__LINE__,
{
"account_offers",
},
R"({
"method" : "account_offers",
"params" : [
{
"error" : "badSyntax",
"error_code" : 1,
"error_message" : "Syntax error."
}
]
})"},
{// Note: I believe this _ought_ to be detected as too many arguments.
"account_offers: four arguments.",
__LINE__,
{"account_offers",
"rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh",
"current",
"extra"},
R"({
"method" : "account_offers",
"params" : [
{
"api_version" : %API_VER%,
"account" : "rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh"
}
]
})"},
{"account_offers: too many arguments.",
__LINE__,
{
"account_offers",
"rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh",
"current",
"extra1",
"extra2",
"extra3",
},
R"({
"method" : "account_offers",
"params" : [
{
"error" : "badSyntax",
"error_code" : 1,
"error_message" : "Syntax error."
}
]
})"},
{
"account_offers: invalid accountID.",
__LINE__,
{
"account_offers",
"", // Note: very few values are detected as bad!
},
R"({
"method" : "account_offers",
"params" : [
{
"error" : "actMalformed",
"error_code" : 35,
"error_message" : "Account malformed."
}
]
})",
},
{
// Note: there is code in place to return rpcLGR_IDX_MALFORMED. That
// cannot currently occur because jvParseLedger() always returns true.
"account_offers: invalid ledger selection 1.",
__LINE__,
{"account_offers", "rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh", "no_ledger"},
R"({
"method" : "account_offers",
"params" : [
{
"api_version" : %API_VER%,
"account" : "rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh",
"ledger_index" : 0
}
]
})",
},
{
// Note: there is code in place to return rpcLGR_IDX_MALFORMED. That
// cannot currently occur because jvParseLedger() always returns true.
"account_offers: invalid ledger selection 2.",
__LINE__,
{"account_offers", "rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh", "no_ledger"},
R"({
"method" : "account_offers",
"params" : [
{
"api_version" : %API_VER%,
"account" : "rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh",
"ledger_index" : 0
}
]
})",
},
// account_tx
// ------------------------------------------------------------------
{"account_tx: minimal.",
__LINE__,
{"account_tx", "rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh"},
R"({
"method" : "account_tx",
"params" : [
{
"api_version" : %API_VER%,
"account" : "rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh",
}
]
})"},
{"account_tx: ledger_index .",
__LINE__,
{"account_tx", "rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh", "444"},
R"({
"method" : "account_tx",
"params" : [
{
"api_version" : %API_VER%,
"account" : "rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh",
"ledger_index" : 444
}
]
})"},
{"account_tx: ledger_index plus trailing params.",
__LINE__,
{"account_tx",
"rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh",
"707",
"descending",
"binary",
"count"},
R"({
"method" : "account_tx",
"params" : [
{
"api_version" : %API_VER%,
"account" : "rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh",
"count" : true,
"binary" : true,
"descending" : true,
"ledger_index" : 707
}
]
})"},
{"account_tx: ledger_index_min and _max.",
__LINE__,
{"account_tx", "rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh", "-1", "-1"},
R"({
"method" : "account_tx",
"params" : [
{
"api_version" : %API_VER%,
"account" : "rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh",
"ledger_index_max" : -1,
"ledger_index_min" : -1
}
]
})"},
{"account_tx: ledger_index_min and _max plus trailing params.",
__LINE__,
{"account_tx",
"rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh",
"-1",
"413",
"binary",
"count",
"descending"},
R"({
"method" : "account_tx",
"params" : [
{
"api_version" : %API_VER%,
"account" : "rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh",
"binary" : true,
"count" : true,
"descending" : true,
"ledger_index_max" : 413,
"ledger_index_min" : -1
}
]
})"},
{"account_tx: ledger_index_min and _max plus limit.",
__LINE__,
{"account_tx", "rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh", "247", "-1", "300"},
R"({
"method" : "account_tx",
"params" : [
{
"api_version" : %API_VER%,
"account" : "rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh",
"ledger_index_max" : -1,
"ledger_index_min" : 247,
"limit" : 300
}
]
})"},
{"account_tx: ledger_index_min and _max, limit, trailing args.",
__LINE__,
{"account_tx",
"rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh",
"247",
"-1",
"300",
"count",
"descending",
"binary"},
R"({
"method" : "account_tx",
"params" : [
{
"api_version" : %API_VER%,
"account" : "rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh",
"binary" : true,
"count" : true,
"descending" : true,
"ledger_index_max" : -1,
"ledger_index_min" : 247,
"limit" : 300
}
]
})"},
{"account_tx: ledger_index_min and _max plus limit and offset.",
__LINE__,
{"account_tx",
"rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh",
"589",
"590",
"67",
"45"},
R"({
"method" : "account_tx",
"params" : [
{
"api_version" : %API_VER%,
"account" : "rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh",
"ledger_index_max" : 590,
"ledger_index_min" : 589,
"limit" : 67,
"offset" : 45
}
]
})"},
{"account_tx: ledger_index_min and _max, limit, offset, trailing.",
__LINE__,
{"account_tx",
"rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh",
"589",
"590",
"67",
"45",
"descending",
"count"},
R"({
"method" : "account_tx",
"params" : [
{
"api_version" : %API_VER%,
"account" : "rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh",
"count" : true,
"descending" : true,
"ledger_index_max" : 590,
"ledger_index_min" : 589,
"limit" : 67,
"offset" : 45
}
]
})"},
{"account_tx: too few arguments.",
__LINE__,
{
"account_tx",
},
R"({
"method" : "account_tx",
"params" : [
{
"error" : "badSyntax",
"error_code" : 1,
"error_message" : "Syntax error."
}
]
})"},
{"account_tx: too many arguments.",
__LINE__,
{"account_tx",
"rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh",
"589",
"590",
"67",
"45",
"extra",
"descending",
"count",
"binary"},
R"({
"method" : "account_tx",
"params" : [
{
"error" : "badSyntax",
"error_code" : 1,
"error_message" : "Syntax error."
}
]
})"},
{
"account_tx: invalid accountID.",
__LINE__,
{"account_tx", "rHb9CJAWyB4rj9!VRWn96DkukG4bwdtyTh"},
R"({
"method" : "account_tx",
"params" : [
{
"error" : "actMalformed",
"error_code" : 35,
"error_message" : "Account malformed."
}
]
})",
},
{
// Note: not currently detected as bad input.
"account_tx: invalid ledger.",
__LINE__,
{"account_tx", "rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh", "-478.7"},
R"({
"method" : "account_tx",
"params" : [
{
"api_version" : %API_VER%,
"account" : "rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh",
"ledger_index" : 0
}
]
})",
},
{
"account_tx: max less than min.",
__LINE__,
{"account_tx", "rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh", "580", "579"},
{
R"({
"method" : "account_tx",
"params" : [
{
"error" : "lgrIdxsInvalid",
"error_code" : 55,
"error_message" : "Ledger indexes invalid."
}
]
})",
R"({
"method" : "account_tx",
"params" : [
{
"error" : "notSynced",
"error_code" : 55,
"error_message" : "Not synced to the network."
}
]
})"},
},
{
// Note: this really shouldn't throw, but does at the moment.
"account_tx: non-integer min.",
__LINE__,
{"account_tx", "rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh", "Binary", "-1"},
R"({
"method" : "account_tx",
"params" : [
{
"error" : "invalidLgrRange",
"error_message" : "Ledger range is invalid."
}
]
})",
},
{
// Note: this really shouldn't throw, but does at the moment.
"account_tx: non-integer max.",
__LINE__,
{"account_tx", "rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh", "-1", "counts"},
R"({
"method" : "account_tx",
"params" : [
{
"error" : "invalidLgrRange",
"error_message" : "Ledger range is invalid."
}
]
})",
},
{
// Note: this really shouldn't throw, but does at the moment.
"account_tx: non-integer offset.",
__LINE__,
{"account_tx",
"rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh",
"-1",
"-1",
"200",
"bad_offset"},
R"({
"method" : "account_tx",
"params" : [
{
"error" : "invalidParams",
"error_message" : "Invalid field 'offset'."
}
]
})",
},
{
"account_tx: non-integer limit.",
__LINE__,
{"account_tx",
"rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh",
"-1",
"-1",
"bad_limit"},
R"({
"method" : "account_tx",
"params" : [
{
"error" : "invalidParams",
"error_message" : "Invalid field 'limit'."
}
]
})",
},
{"account_tx: RIPD-1570.",
__LINE__,
{"account_tx",
"rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh",
"-1",
"-1",
"2",
"false",
"false",
"false"},
R"({
"method" : "account_tx",
"params" : [
{
"error" : "invalidParams",
"error_message" : "Invalid field 'offset'."
}
]
})"},
// book_offers
// -----------------------------------------------------------------
{"book_offers: minimal no issuer.",
__LINE__,
{
"book_offers",
"USD",
"EUR",
},
R"({
"method" : "book_offers",
"params" : [
{
"api_version" : %API_VER%,
"taker_gets" : {
"currency" : "EUR"
},
"taker_pays" : {
"currency" : "USD"
}
}
]
})"},
{"book_offers: minimal with currency/issuer",
__LINE__,
{
"book_offers",
"USD/rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh",
"EUR/rnUy2SHTrB9DubsPmkJZUXTf5FcNDGrYEA",
},
R"({
"method" : "book_offers",
"params" : [
{
"api_version" : %API_VER%,
"taker_gets" : {
"currency" : "EUR",
"issuer" : "rnUy2SHTrB9DubsPmkJZUXTf5FcNDGrYEA"
},
"taker_pays" : {
"currency" : "USD",
"issuer" : "rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh"
}
}
]
})"},
{// Note: documentation suggests that "issuer" is the wrong type.
// Should it be "taker" instead?
"book_offers: add issuer.",
__LINE__,
{"book_offers", "USD", "EUR", "rnUy2SHTrB9DubsPmkJZUXTf5FcNDGrYEA"},
R"({
"method" : "book_offers",
"params" : [
{
"api_version" : %API_VER%,
"issuer" : "rnUy2SHTrB9DubsPmkJZUXTf5FcNDGrYEA",
"taker_gets" : {
"currency" : "EUR"
},
"taker_pays" : {
"currency" : "USD"
}
}
]
})"},
{"book_offers: add issuer and numeric ledger index.",
__LINE__,
{"book_offers",
"USD/rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh",
"EUR",
"rnUy2SHTrB9DubsPmkJZUXTf5FcNDGrYEA",
"666"},
R"({
"method" : "book_offers",
"params" : [
{
"api_version" : %API_VER%,
"issuer" : "rnUy2SHTrB9DubsPmkJZUXTf5FcNDGrYEA",
"ledger_index" : 666,
"taker_gets" : {
"currency" : "EUR"
},
"taker_pays" : {
"currency" : "USD",
"issuer" : "rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh"
}
}
]
})"},
{"book_offers: add issuer and text ledger index.",
__LINE__,
{"book_offers",
"USD",
"EUR/rnUy2SHTrB9DubsPmkJZUXTf5FcNDGrYEA",
"rnUy2SHTrB9DubsPmkJZUXTf5FcNDGrYEA",
"current"},
R"({
"method" : "book_offers",
"params" : [
{
"api_version" : %API_VER%,
"issuer" : "rnUy2SHTrB9DubsPmkJZUXTf5FcNDGrYEA",
"ledger_index" : "current",
"taker_gets" : {
"currency" : "EUR",
"issuer" : "rnUy2SHTrB9DubsPmkJZUXTf5FcNDGrYEA"
},
"taker_pays" : {
"currency" : "USD"
}
}
]
})"},
{"book_offers: add issuer and ledger hash.",
__LINE__,
{"book_offers",
"USD/rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh",
"EUR/rnUy2SHTrB9DubsPmkJZUXTf5FcNDGrYEA",
"rnUy2SHTrB9DubsPmkJZUXTf5FcNDGrYEA",
"ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789"},
R"({
"method" : "book_offers",
"params" : [
{
"api_version" : %API_VER%,
"issuer" : "rnUy2SHTrB9DubsPmkJZUXTf5FcNDGrYEA",
"ledger_hash" : "ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789",
"taker_gets" : {
"currency" : "EUR",
"issuer" : "rnUy2SHTrB9DubsPmkJZUXTf5FcNDGrYEA"
},
"taker_pays" : {
"currency" : "USD",
"issuer" : "rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh"
}
}
]
})"},
{"book_offers: issuer, ledger hash, and limit.",
__LINE__,
{
"book_offers",
"USD/rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh",
"EUR/rnUy2SHTrB9DubsPmkJZUXTf5FcNDGrYEA",
"rnUy2SHTrB9DubsPmkJZUXTf5FcNDGrYEA",
"ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789",
"200",
},
R"({
"method" : "book_offers",
"params" : [
{
"api_version" : %API_VER%,
"issuer" : "rnUy2SHTrB9DubsPmkJZUXTf5FcNDGrYEA",
"ledger_hash" : "ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789",
"limit" : 200,
"taker_gets" : {
"currency" : "EUR",
"issuer" : "rnUy2SHTrB9DubsPmkJZUXTf5FcNDGrYEA"
},
"taker_pays" : {
"currency" : "USD",
"issuer" : "rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh"
}
}
]
})"},
{// Note: parser supports "marker", but the docs don't cover it.
"book_offers: issuer, ledger hash, limit, and marker.",
__LINE__,
{"book_offers",
"USD/rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh",
"EUR/rnUy2SHTrB9DubsPmkJZUXTf5FcNDGrYEA",
"rnUy2SHTrB9DubsPmkJZUXTf5FcNDGrYEA",
"ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789",
"200",
"0",
"MyMarker"},
R"({
"method" : "book_offers",
"params" : [
{
"api_version" : %API_VER%,
"issuer" : "rnUy2SHTrB9DubsPmkJZUXTf5FcNDGrYEA",
"ledger_hash" : "ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789",
"limit" : 200,
"marker" : "MyMarker",
"proof" : true,
"taker_gets" : {
"currency" : "EUR",
"issuer" : "rnUy2SHTrB9DubsPmkJZUXTf5FcNDGrYEA"
},
"taker_pays" : {
"currency" : "USD",
"issuer" : "rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh"
}
}
]
})"},
{"book_offers: too few arguments.",
__LINE__,
{
"book_offers",
},
R"({
"method" : "book_offers",
"params" : [
{
"error" : "badSyntax",
"error_code" : 1,
"error_message" : "Syntax error."
}
]
})"},
{"book_offers: too many arguments.",
__LINE__,
{"book_offers",
"USD/rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh",
"EUR/rnUy2SHTrB9DubsPmkJZUXTf5FcNDGrYEA",
"rnUy2SHTrB9DubsPmkJZUXTf5FcNDGrYEA",
"ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789",
"200",
"0",
"MyMarker",
"extra"},
R"({
"method" : "book_offers",
"params" : [
{
"error" : "badSyntax",
"error_code" : 1,
"error_message" : "Syntax error."
}
]
})"},
{"book_offers: taker pays no currency.",
__LINE__,
{
"book_offers",
"/rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh",
"EUR/rnUy2SHTrB9DubsPmkJZUXTf5FcNDGrYEA",
},
R"({
"method" : "book_offers",
"params" : [
{
"error" : "invalidParams",
"error_code" : 31,
"error_message" : "Invalid currency/issuer '/rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh'"
}
]
})"},
{"book_offers: taker gets no currency.",
__LINE__,
{
"book_offers",
"USD/rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh",
"/rnUy2SHTrB9DubsPmkJZUXTf5FcNDGrYEA",
},
R"({
"method" : "book_offers",
"params" : [
{
"error" : "invalidParams",
"error_code" : 31,
"error_message" : "Invalid currency/issuer '/rnUy2SHTrB9DubsPmkJZUXTf5FcNDGrYEA'"
}
]
})"},
{"book_offers: invalid issuer.",
__LINE__,
{"book_offers", "USD", "EUR", "not_a_valid_issuer"},
R"({
"method" : "book_offers",
"params" : [
{
"api_version" : %API_VER%,
"issuer" : "not_a_valid_issuer",
"taker_gets" : {
"currency" : "EUR"
},
"taker_pays" : {
"currency" : "USD"
}
}
]
})"},
{"book_offers: invalid text ledger index.",
__LINE__,
{"book_offers",
"USD",
"EUR/rnUy2SHTrB9DubsPmkJZUXTf5FcNDGrYEA",
"rnUy2SHTrB9DubsPmkJZUXTf5FcNDGrYEA",
"not_a_ledger"},
R"({
"method" : "book_offers",
"params" : [
{
"api_version" : %API_VER%,
"issuer" : "rnUy2SHTrB9DubsPmkJZUXTf5FcNDGrYEA",
"ledger_index" : 0,
"taker_gets" : {
"currency" : "EUR",
"issuer" : "rnUy2SHTrB9DubsPmkJZUXTf5FcNDGrYEA"
},
"taker_pays" : {
"currency" : "USD"
}
}
]
})"},
{// Note: this really shouldn't throw, but does at the moment.
"book_offers: non-numeric limit.",
__LINE__,
{
"book_offers",
"USD/rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh",
"EUR/rnUy2SHTrB9DubsPmkJZUXTf5FcNDGrYEA",
"rnUy2SHTrB9DubsPmkJZUXTf5FcNDGrYEA",
"ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789",
"not_a_number",
},
R"({
"method" : "book_offers",
"params" : [
{
"error" : "invalidParams",
"error_code" : 31,
"error_message" : "Invalid field 'limit'."
}
]
})"},
// can_delete
// ------------------------------------------------------------------
{"can_delete: minimal.",
__LINE__,
{
"can_delete",
},
R"({
"method" : "can_delete",
"params" : [
{
"api_version" : %API_VER%,
}
]
})"},
{"can_delete: ledger index.",
__LINE__,
{
"can_delete",
"4294967295",
},
R"({
"method" : "can_delete",
"params" : [
{
"api_version" : %API_VER%,
"can_delete" : 4294967295
}
]
})"},
{"can_delete: ledger hash.",
__LINE__,
{
"can_delete",
"FEDCBA9876543210FEDCBA9876543210FEDCBA9876543210FEDCBA9876543210",
},
R"({
"method" : "can_delete",
"params" : [
{
"api_version" : %API_VER%,
"can_delete" : "FEDCBA9876543210FEDCBA9876543210FEDCBA9876543210FEDCBA9876543210"
}
]
})"},
{"can_delete: always.",
__LINE__,
{
"can_delete",
"always",
},
R"({
"method" : "can_delete",
"params" : [
{
"api_version" : %API_VER%,
"can_delete" : "always"
}
]
})"},
{"can_delete: never.",
__LINE__,
{
"can_delete",
"never",
},
R"({
"method" : "can_delete",
"params" : [
{
"api_version" : %API_VER%,
"can_delete" : "never"
}
]
})"},
{"can_delete: now.",
__LINE__,
{
"can_delete",
"now",
},
R"({
"method" : "can_delete",
"params" : [
{
"api_version" : %API_VER%,
"can_delete" : "now"
}
]
})"},
{"can_delete: too many arguments.",
__LINE__,
{"can_delete", "always", "never"},
R"({
"method" : "can_delete",
"params" : [
{
"error" : "badSyntax",
"error_code" : 1,
"error_message" : "Syntax error."
}
]
})"},
{"can_delete: invalid argument.",
__LINE__,
{"can_delete", "invalid"},
R"({
"method" : "can_delete",
"params" : [
{
"api_version" : %API_VER%,
"can_delete" : "invalid"
}
]
})"},
{// Note: this should return an error but not throw.
"can_delete: ledger index > 32 bits.",
__LINE__,
{
"can_delete",
"4294967296",
},
R"({
"method" : "can_delete",
"params" : [
{
"error" : "invalidParams",
"error_message" : "Invalid field 'can_delete'."
}
]
})"},
{// Note: this really shouldn't throw since it's a legitimate ledger hash.
"can_delete: ledger hash with no alphas.",
__LINE__,
{
"can_delete",
"0123456701234567012345670123456701234567012345670123456701234567",
},
R"({
"method" : "can_delete",
"params" : [
{
"error" : "invalidParams",
"error_message" : "Invalid field 'can_delete'."
}
]
})"},
// channel_authorize
// -----------------------------------------------------------
{"channel_authorize: minimal.",
__LINE__,
{"channel_authorize",
"secret_can_be_anything",
"0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF",
"18446744073709551615"},
R"({
"method" : "channel_authorize",
"params" : [
{
"api_version" : %API_VER%,
"amount" : "18446744073709551615",
"channel_id" : "0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF",
"secret" : "secret_can_be_anything"
}
]
})"},
{"channel_authorize: too few arguments.",
__LINE__,
{
"channel_authorize",
"secret_can_be_anything",
"0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF",
},
R"({
"method" : "channel_authorize",
"params" : [
{
"error" : "badSyntax",
"error_code" : 1,
"error_message" : "Syntax error."
}
]
})"},
{"channel_authorize: too many arguments.",
__LINE__,
{"channel_authorize",
"secp256k1",
"0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF",
"2000",
"whatever",
"whenever"},
R"({
"method" : "channel_authorize",
"params" : [
{
"error" : "badSyntax",
"error_code" : 1,
"error_message" : "Syntax error."
}
]
})"},
{"channel_authorize: bad key type.",
__LINE__,
{"channel_authorize",
"secp257k1",
"0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF",
"2000",
"whatever"},
R"({
"method" : "channel_authorize",
"params" : [
{
"error" : "badKeyType",
"error_code" : 1,
"error_message" : "Bad key type."
}
]
})"},
{"channel_authorize: channel_id too short.",
__LINE__,
{"channel_authorize",
"secret_can_be_anything",
"123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF",
"2000"},
R"({
"method" : "channel_authorize",
"params" : [
{
"error" : "channelMalformed",
"error_code" : 43,
"error_message" : "Payment channel is malformed."
}
]
})"},
{"channel_authorize: channel_id too long.",
__LINE__,
{"channel_authorize",
"secret_can_be_anything",
"10123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF",
"2000"},
R"({
"method" : "channel_authorize",
"params" : [
{
"error" : "channelMalformed",
"error_code" : 43,
"error_message" : "Payment channel is malformed."
}
]
})"},
{"channel_authorize: channel_id not hex.",
__LINE__,
{"channel_authorize",
"secret_can_be_anything",
"0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEZ",
"2000"},
R"({
"method" : "channel_authorize",
"params" : [
{
"error" : "channelMalformed",
"error_code" : 43,
"error_message" : "Payment channel is malformed."
}
]
})"},
{"channel_authorize: negative amount.",
__LINE__,
{"channel_authorize",
"secret_can_be_anything",
"0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF",
"-1"},
R"({
"method" : "channel_authorize",
"params" : [
{
"error" : "channelAmtMalformed",
"error_code" : 44,
"error_message" : "Payment channel amount is malformed."
}
]
})"},
{"channel_authorize: amount > 64 bits.",
__LINE__,
{"channel_authorize",
"secret_can_be_anything",
"0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF",
"18446744073709551616"},
R"({
"method" : "channel_authorize",
"params" : [
{
"error" : "channelAmtMalformed",
"error_code" : 44,
"error_message" : "Payment channel amount is malformed."
}
]
})"},
// channel_verify
// --------------------------------------------------------------
{"channel_verify: public key.",
__LINE__,
{"channel_verify",
"aB4BXXLuPu8DpVuyq1DBiu3SrPdtK9AYZisKhu8mvkoiUD8J9Gov",
"0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF",
"0",
"DEADBEEF"},
R"({
"method" : "channel_verify",
"params" : [
{
"api_version" : %API_VER%,
"amount" : "0",
"channel_id" : "0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF",
"public_key" : "aB4BXXLuPu8DpVuyq1DBiu3SrPdtK9AYZisKhu8mvkoiUD8J9Gov",
"signature" : "DEADBEEF"
}
]
})"},
{"channel_verify: public key hex.",
__LINE__,
{"channel_verify",
"021D93E21C44160A1B3B66DA1F37B86BE39FFEA3FC4B95FAA2063F82EE823599F6",
"0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF",
"18446744073709551615",
"DEADBEEF"},
R"({
"method" : "channel_verify",
"params" : [
{
"api_version" : %API_VER%,
"amount" : "18446744073709551615",
"channel_id" : "0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF",
"public_key" : "021D93E21C44160A1B3B66DA1F37B86BE39FFEA3FC4B95FAA2063F82EE823599F6",
"signature" : "DEADBEEF"
}
]
})"},
{"channel_verify: too few arguments.",
__LINE__,
{"channel_verify",
"aB4BXXLuPu8DpVuyq1DBiu3SrPdtK9AYZisKhu8mvkoiUD8J9Gov",
"0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF"},
R"({
"method" : "channel_verify",
"params" : [
{
"error" : "badSyntax",
"error_code" : 1,
"error_message" : "Syntax error."
}
]
})"},
{"channel_verify: too many arguments.",
__LINE__,
{"channel_verify",
"aB4BXXLuPu8DpVuyq1DBiu3SrPdtK9AYZisKhu8mvkoiUD8J9Gov",
"0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF",
"2000",
"DEADBEEF",
"Whatever"},
R"({
"method" : "channel_verify",
"params" : [
{
"error" : "badSyntax",
"error_code" : 1,
"error_message" : "Syntax error."
}
]
})"},
{"channel_verify: malformed public key.",
__LINE__,
{"channel_verify",
"aB4BXXLuPu8DpVuyq1DBiu3SrPdtK9AYZisKhu8mvkoiUD8J9GoV",
"0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF",
"2000",
"DEADBEEF"},
R"({
"method" : "channel_verify",
"params" : [
{
"error" : "publicMalformed",
"error_code" : 60,
"error_message" : "Public key is malformed."
}
]
})"},
{"channel_verify: malformed hex public key.",
__LINE__,
{"channel_verify",
"021D93E21C44160A1B3B66DA1F37B86BE39FFEA3FC4B95FAA2063F82EE823599F",
"0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF",
"2000",
"DEADBEEF"},
R"({
"method" : "channel_verify",
"params" : [
{
"error" : "publicMalformed",
"error_code" : 60,
"error_message" : "Public key is malformed."
}
]
})"},
{"channel_verify: invalid channel id.",
__LINE__,
{"channel_verify",
"aB4BXXLuPu8DpVuyq1DBiu3SrPdtK9AYZisKhu8mvkoiUD8J9Gov",
"10123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF",
"2000",
"DEADBEEF"},
R"({
"method" : "channel_verify",
"params" : [
{
"error" : "channelMalformed",
"error_code" : 43,
"error_message" : "Payment channel is malformed."
}
]
})"},
{"channel_verify: short channel id.",
__LINE__,
{"channel_verify",
"aB4BXXLuPu8DpVuyq1DBiu3SrPdtK9AYZisKhu8mvkoiUD8J9Gov",
"123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF",
"2000",
"DEADBEEF"},
R"({
"method" : "channel_verify",
"params" : [
{
"error" : "channelMalformed",
"error_code" : 43,
"error_message" : "Payment channel is malformed."
}
]
})"},
{"channel_verify: amount too small.",
__LINE__,
{"channel_verify",
"021D93E21C44160A1B3B66DA1F37B86BE39FFEA3FC4B95FAA2063F82EE823599F6",
"0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF",
"-1",
"DEADBEEF"},
R"({
"method" : "channel_verify",
"params" : [
{
"error" : "channelAmtMalformed",
"error_code" : 44,
"error_message" : "Payment channel amount is malformed."
}
]
})"},
{"channel_verify: amount too large.",
__LINE__,
{"channel_verify",
"021D93E21C44160A1B3B66DA1F37B86BE39FFEA3FC4B95FAA2063F82EE823599F6",
"0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF",
"18446744073709551616",
"DEADBEEF"},
R"({
"method" : "channel_verify",
"params" : [
{
"error" : "channelAmtMalformed",
"error_code" : 44,
"error_message" : "Payment channel amount is malformed."
}
]
})"},
{"channel_verify: non-hex signature.",
__LINE__,
{"channel_verify",
"aB4BXXLuPu8DpVuyq1DBiu3SrPdtK9AYZisKhu8mvkoiUD8J9Gov",
"0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF",
"40000000",
"ThisIsNotHexadecimal"},
R"({
"method" : "channel_verify",
"params" : [
{
"api_version" : %API_VER%,
"amount" : "40000000",
"channel_id" : "0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF",
"public_key" : "aB4BXXLuPu8DpVuyq1DBiu3SrPdtK9AYZisKhu8mvkoiUD8J9Gov",
"signature" : "ThisIsNotHexadecimal"
}
]
})"},
// connect
// ---------------------------------------------------------------------
{"connect: minimal.",
__LINE__,
{
"connect",
"ThereIsNoCheckingOnTheIPFormat",
},
R"({
"method" : "connect",
"params" : [
{
"api_version" : %API_VER%,
"ip" : "ThereIsNoCheckingOnTheIPFormat"
}
]
})"},
{"connect: ip and port.",
__LINE__,
{"connect", "ThereIsNoCheckingOnTheIPFormat", "6561"},
R"({
"method" : "connect",
"params" : [
{
"api_version" : %API_VER%,
"ip" : "ThereIsNoCheckingOnTheIPFormat",
"port" : 6561
}
]
})"},
{"connect: too few arguments.",
__LINE__,
{
"connect",
},
R"({
"method" : "connect",
"params" : [
{
"error" : "badSyntax",
"error_code" : 1,
"error_message" : "Syntax error."
}
]
})"},
{"connect: too many arguments.",
__LINE__,
{"connect", "ThereIsNoCheckingOnTheIPFormat", "6561", "extra"},
R"({
"method" : "connect",
"params" : [
{
"error" : "badSyntax",
"error_code" : 1,
"error_message" : "Syntax error."
}
]
})"},
{// Note: this should return an error but not throw.
"connect: port too small.",
__LINE__,
{
"connect",
"ThereIsNoCheckingOnTheIPFormat",
"-1",
},
R"({
"method" : "connect",
"params" : [
{
"error" : "invalidParams",
"error_message" : "Invalid field 'port'."
}
]
})"},
{// Note: this should return an error but not throw.
"connect: port too large.",
__LINE__,
{
"connect",
"ThereIsNoCheckingOnTheIPFormat",
"4294967296",
},
R"({
"method" : "connect",
"params" : [
{
"error" : "invalidParams",
"error_message" : "Invalid field 'port'."
}
]
})"},
// consensus_info
// --------------------------------------------------------------
{"consensus_info: minimal.",
__LINE__,
{
"consensus_info",
},
R"({
"method" : "consensus_info",
"params" : [
{
"api_version" : %API_VER%
}
]
})"},
{"consensus_info: too many arguments.",
__LINE__,
{"consensus_info", "whatever"},
R"({
"method" : "consensus_info",
"params" : [
{
"error" : "badSyntax",
"error_code" : 1,
"error_message" : "Syntax error."
}
]
})"},
// deposit_authorized
// ----------------------------------------------------------
{"deposit_authorized: minimal.",
__LINE__,
{
"deposit_authorized",
"source_account_NotValidated",
"destination_account_NotValidated",
},
R"({
"method" : "deposit_authorized",
"params" : [
{
"api_version" : %API_VER%,
"destination_account" : "destination_account_NotValidated",
"source_account" : "source_account_NotValidated"
}
]
})"},
{"deposit_authorized: with text ledger index.",
__LINE__,
{"deposit_authorized",
"source_account_NotValidated",
"destination_account_NotValidated",
"validated"},
R"({
"method" : "deposit_authorized",
"params" : [
{
"api_version" : %API_VER%,
"destination_account" : "destination_account_NotValidated",
"ledger_index" : "validated",
"source_account" : "source_account_NotValidated"
}
]
})"},
{"deposit_authorized: with ledger index.",
__LINE__,
{"deposit_authorized",
"source_account_NotValidated",
"destination_account_NotValidated",
"4294967295",
"cred1",
"cred2",
"cred3",
"cred4",
"cred5",
"cred6",
"cred7",
"cred8"},
R"({
"method" : "deposit_authorized",
"params" : [
{
"api_version" : %API_VER%,
"destination_account" : "destination_account_NotValidated",
"ledger_index" : 4294967295,
"source_account" : "source_account_NotValidated",
"credentials": ["cred1", "cred2", "cred3", "cred4", "cred5", "cred6", "cred7", "cred8"]
}
]
})"},
{"deposit_authorized: with ledger hash.",
__LINE__,
{"deposit_authorized",
"source_account_NotValidated",
"destination_account_NotValidated",
"ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789"},
R"({
"method" : "deposit_authorized",
"params" : [
{
"api_version" : %API_VER%,
"destination_account" : "destination_account_NotValidated",
"ledger_hash" : "ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789",
"source_account" : "source_account_NotValidated"
}
]
})"},
{"deposit_authorized: too few arguments.",
__LINE__,
{
"deposit_authorized",
"source_account_NotValidated",
},
R"({
"method" : "deposit_authorized",
"params" : [
{
"error" : "badSyntax",
"error_code" : 1,
"error_message" : "Syntax error."
}
]
})"},
{"deposit_authorized: too many arguments.",
__LINE__,
{"deposit_authorized",
"source_account_NotValidated",
"destination_account_NotValidated",
"ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789",
"cred1",
"cred2",
"cred3",
"cred4",
"cred5",
"cred6",
"cred7",
"cred8",
"too_much"},
R"({
"method" : "deposit_authorized",
"params" : [
{
"error" : "badSyntax",
"error_code" : 1,
"error_message" : "Syntax error."
}
]
})"},
{"deposit_authorized: invalid ledger selection.",
__LINE__,
{
"deposit_authorized",
"source_account_NotValidated",
"destination_account_NotValidated",
"NotALedger",
},
R"({
"method" : "deposit_authorized",
"params" : [
{
"api_version" : %API_VER%,
"destination_account" : "destination_account_NotValidated",
"ledger_index" : 0,
"source_account" : "source_account_NotValidated"
}
]
})"},
// feature
// ---------------------------------------------------------------------
{"feature: minimal.",
__LINE__,
{
"feature",
},
R"({
"method" : "feature",
"params" : [
{
"api_version" : %API_VER%,
}
]
})"},
{"feature: with name.",
__LINE__,
{"feature", "featureNameOrHexIsNotValidated"},
R"({
"method" : "feature",
"params" : [
{
"api_version" : %API_VER%,
"feature" : "featureNameOrHexIsNotValidated"
}
]
})"},
{"feature: accept.",
__LINE__,
{"feature",
"FEDCBA9876543210FEDCBA9876543210FEDCBA9876543210FEDCBA9876543210FEDCBA98"
"76543210",
"accept"},
R"({
"method" : "feature",
"params" : [
{
"api_version" : %API_VER%,
"feature" : "FEDCBA9876543210FEDCBA9876543210FEDCBA9876543210FEDCBA9876543210FEDCBA9876543210",
"vetoed" : false
}
]
})"},
{"feature: reject.",
__LINE__,
{"feature", "0", "reject"},
R"({
"method" : "feature",
"params" : [
{
"api_version" : %API_VER%,
"feature" : "0",
"vetoed" : true
}
]
})"},
{"feature: too many arguments.",
__LINE__,
{"feature", "featureNameOrHexIsNotValidated", "accept", "anotherArg"},
R"({
"method" : "feature",
"params" : [
{
"error" : "badSyntax",
"error_code" : 1,
"error_message" : "Syntax error."
}
]
})"},
{"feature: neither accept nor reject.",
__LINE__,
{
"feature",
"featureNameOrHexIsNotValidated",
"veto",
},
R"({
"method" : "feature",
"params" : [
{
"error" : "invalidParams",
"error_code" : 31,
"error_message" : "Invalid parameters."
}
]
})"},
// fetch_info
// ------------------------------------------------------------------
{"fetch_info: minimal.",
__LINE__,
{
"fetch_info",
},
R"({
"method" : "fetch_info",
"params" : [
{
"api_version" : %API_VER%,
}
]
})"},
{"fetch_info: clear.",
__LINE__,
{"fetch_info", "clear"},
R"({
"method" : "fetch_info",
"params" : [
{
"api_version" : %API_VER%,
"clear" : true
}
]
})"},
{"fetch_info: too many arguments.",
__LINE__,
{"fetch_info", "clear", "other"},
R"({
"method" : "fetch_info",
"params" : [
{
"error" : "badSyntax",
"error_code" : 1,
"error_message" : "Syntax error."
}
]
})"},
{"fetch_info: other trailing argument.",
__LINE__,
{"fetch_info", "too"},
R"({
"method" : "fetch_info",
"params" : [
{
"api_version" : %API_VER%,
"too" : true
}
]
})"},
// gateway_balances
// ------------------------------------------------------------
{"gateway_balances: minimal.",
__LINE__,
{"gateway_balances", "rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh"},
R"({
"method" : "gateway_balances",
"params" : [
{
"api_version" : %API_VER%,
"account" : "rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh",
}
]
})"},
{"gateway_balances: with ledger index.",
__LINE__,
{"gateway_balances", "890765", "rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh"},
R"({
"method" : "gateway_balances",
"params" : [
{
"api_version" : %API_VER%,
"account" : "rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh",
"ledger_index" : "890765"
}
]
})"},
{"gateway_balances: with text ledger index.",
__LINE__,
{"gateway_balances", "current", "rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh"},
R"({
"method" : "gateway_balances",
"params" : [
{
"api_version" : %API_VER%,
"account" : "rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh",
"ledger_index" : "current"
}
]
})"},
{"gateway_balances: with 64 character ledger hash.",
__LINE__,
{"gateway_balances",
"0123456789ABCDEFGHIJKLMNOPQRSTUV0123456789ABCDEFGHIJKLMNOPQRSTUV",
"rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh"},
R"({
"method" : "gateway_balances",
"params" : [
{
"api_version" : %API_VER%,
"account" : "rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh",
"ledger_hash" : "0123456789ABCDEFGHIJKLMNOPQRSTUV0123456789ABCDEFGHIJKLMNOPQRSTUV"
}
]
})"},
{"gateway_balances: 1 hotwallet.",
__LINE__,
{"gateway_balances",
"rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh",
"hotwallet_is_not_validated"},
R"({
"method" : "gateway_balances",
"params" : [
{
"api_version" : %API_VER%,
"account" : "rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh",
"hotwallet" : [ "hotwallet_is_not_validated" ]
}
]
})"},
{"gateway_balances: 3 hotwallets.",
__LINE__,
{
"gateway_balances",
"0123456789ABCDEFGHIJKLMNOPQRSTUV0123456789ABCDEFGHIJKLMNOPQRSTUV",
"rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh",
"hotwallet_is_not_validated_1",
"hotwallet_is_not_validated_2",
"hotwallet_is_not_validated_3",
},
R"({
"method" : "gateway_balances",
"params" : [
{
"api_version" : %API_VER%,
"account" : "rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh",
"hotwallet" : [
"hotwallet_is_not_validated_1",
"hotwallet_is_not_validated_2",
"hotwallet_is_not_validated_3"
],
"ledger_hash" : "0123456789ABCDEFGHIJKLMNOPQRSTUV0123456789ABCDEFGHIJKLMNOPQRSTUV"
}
]
})"},
{"gateway_balances: too few arguments.",
__LINE__,
{
"gateway_balances",
},
R"({
"method" : "gateway_balances",
"params" : [
{
"error" : "badSyntax",
"error_code" : 1,
"error_message" : "Syntax error."
}
]
})"},
{"gateway_balances: empty first argument.",
__LINE__,
{"gateway_balances", ""},
R"({
"method" : "gateway_balances",
"params" : [
{
"error" : "invalidParams",
"error_code" : 31,
"error_message" : "Invalid first parameter"
}
]
})"},
{"gateway_balances: with ledger index but no gateway.",
__LINE__,
{
"gateway_balances",
"890765",
},
R"({
"method" : "gateway_balances",
"params" : [
{
"error" : "invalidParams",
"error_code" : 31,
"error_message" : "Invalid hotwallet"
}
]
})"},
{"gateway_balances: with text ledger index but no gateway.",
__LINE__,
{
"gateway_balances",
"current",
},
R"({
"method" : "gateway_balances",
"params" : [
{
"error" : "invalidParams",
"error_code" : 31,
"error_message" : "Invalid hotwallet"
}
]
})"},
{"gateway_balances: with 64 character ledger hash but no gateway.",
__LINE__,
{
"gateway_balances",
"0123456789ABCDEFGHIJKLMNOPQRSTUV0123456789ABCDEFGHIJKLMNOPQRSTUV",
},
R"({
"method" : "gateway_balances",
"params" : [
{
"error" : "invalidParams",
"error_code" : 31,
"error_message" : "Invalid hotwallet"
}
]
})"},
// get_counts
// ------------------------------------------------------------------
{"get_counts: minimal.",
__LINE__,
{
"get_counts",
},
R"({
"method" : "get_counts",
"params" : [
{
"api_version" : %API_VER%,
}
]
})"},
{"get_counts: with maximum count.",
__LINE__,
{"get_counts", "100"},
R"({
"method" : "get_counts",
"params" : [
{
"api_version" : %API_VER%,
"min_count" : 100
}
]
})"},
{"get_counts: too many arguments.",
__LINE__,
{"get_counts", "100", "whatever"},
R"({
"method" : "get_counts",
"params" : [
{
"error" : "badSyntax",
"error_code" : 1,
"error_message" : "Syntax error."
}
]
})"},
{"get_counts: count too small.",
__LINE__,
{
"get_counts",
"-1",
},
R"({
"method" : "get_counts",
"params" : [
{
"error" : "invalidParams",
"error_code" : 31,
"error_message" : "Invalid field 'min_count'."
}
]
})"},
{"get_counts: count too large.",
__LINE__,
{"get_counts", "4294967296"},
R"({
"method" : "get_counts",
"params" : [
{
"error" : "invalidParams",
"error_code" : 31,
"error_message" : "Invalid field 'min_count'."
}
]
})"},
// json
// ------------------------------------------------------------------------
{"json: minimal.",
__LINE__,
{
"json",
"command",
R"({"json_argument":true})",
},
R"({
"method" : "command",
"params" : [
{
"api_version" : %API_VER%,
"json_argument" : true,
"method" : "command"
}
]
})"},
{"json: null object.",
__LINE__,
{
"json",
"command",
R"({})",
},
R"({
"method" : "command",
"params" : [
{
"api_version" : %API_VER%,
"method" : "command"
}
]
})"},
{"json: too few arguments.",
__LINE__,
{"json", "command"},
R"({
"method" : "json",
"params" : [
{
"error" : "badSyntax",
"error_code" : 1,
"error_message" : "Syntax error."
}
]
})"},
{"json: too many arguments.",
__LINE__,
{"json", "command", R"({"json_argument":true})", "extra"},
R"({
"method" : "json",
"params" : [
{
"error" : "badSyntax",
"error_code" : 1,
"error_message" : "Syntax error."
}
]
})"},
{"json: array, not object.",
__LINE__,
{
"json",
"command",
R"(["arg1","arg2"])",
},
R"({
"method" : "json",
"params" : [
{
"error" : "invalidParams",
"error_code" : 31,
"error_message" : "Invalid parameters."
}
]
})"},
{"json: invalid json (note closing comma).",
__LINE__,
{
"json",
"command",
R"({"json_argument":true,})",
},
R"({
"method" : "json",
"params" : [
{
"error" : "invalidParams",
"error_code" : 31,
"error_message" : "Invalid parameters."
}
]
})"},
// json2
// -----------------------------------------------------------------------
{"json2: minimal object.",
__LINE__,
{
"json2",
R"({"jsonrpc":"2.0","ripplerpc":"2.0","id":"A1","method":"call_1"})",
},
R"({
"id" : "A1",
"jsonrpc" : "2.0",
"method" : "call_1",
"params" : [
{
"api_version" : %API_VER%,
"id" : "A1",
"jsonrpc" : "2.0",
"method" : "call_1",
"ripplerpc" : "2.0"
}
],
"ripplerpc" : "2.0"
})"},
{"json2: object with nested params.",
__LINE__,
{
"json2",
R"({
"jsonrpc" : "2.0",
"ripplerpc" : "2.0",
"id" : "A1",
"method" : "call_1",
"params" : [{"inner_arg" : "yup"}]
})",
},
R"({
"id" : "A1",
"jsonrpc" : "2.0",
"method" : "call_1",
"params" : [
{
"api_version" : %API_VER%,
"0" : {
"inner_arg" : "yup"
},
"id" : "A1",
"jsonrpc" : "2.0",
"method" : "call_1",
"ripplerpc" : "2.0"
}
],
"ripplerpc" : "2.0"
})"},
{"json2: minimal array.",
__LINE__,
{
"json2",
R"([{"jsonrpc":"2.0","ripplerpc":"2.0","id":"A1","method":"call_1"}])",
},
R"({
"method" : "json2",
"params" : [
[
{
"api_version" : %API_VER%,
"id" : "A1",
"jsonrpc" : "2.0",
"method" : "call_1",
"ripplerpc" : "2.0"
}
]
]
})"},
{"json2: array with object with nested params.",
__LINE__,
{
"json2",
R"([
{"jsonrpc":"2.0",
"ripplerpc":"2.0",
"id":"A1",
"method":"call_1",
"params" : [{"inner_arg" : "yup"}]}
])",
},
R"({
"method" : "json2",
"params" : [
[
{
"api_version" : %API_VER%,
"0" : {
"inner_arg" : "yup"
},
"id" : "A1",
"jsonrpc" : "2.0",
"method" : "call_1",
"ripplerpc" : "2.0"
}
]
]})"},
{"json2: too few arguments.",
__LINE__,
{
"json2",
},
R"({
"method" : "json2",
"params" : [
{
"error" : "badSyntax",
"error_code" : 1,
"error_message" : "Syntax error."
}
]
})"},
{"json2: too many arguments.",
__LINE__,
{"json2",
R"({"jsonrpc":"2.0","ripplerpc":"2.0","id":"A1","method":"call_this"})",
"extra"},
R"({
"method" : "json2",
"params" : [
{
"error" : "badSyntax",
"error_code" : 1,
"error_message" : "Syntax error."
}
]
})"},
{"json2: malformed json (note extra comma).",
__LINE__,
{
"json2",
R"({"jsonrpc":"2.0","ripplerpc":"2.0","id":"A1","method":"call_1",})",
},
R"({
"id" : "A1",
"jsonrpc" : "2.0",
"method" : "json2",
"params" : [
{
"error" : "invalidParams",
"error_code" : 31,
"error_message" : "Invalid parameters.",
"id" : "A1",
"jsonrpc" : "2.0",
"ripplerpc" : "2.0"
}
],
"ripplerpc" : "2.0"
})"},
{"json2: omit jsonrpc.",
__LINE__,
{
"json2",
R"({"ripplerpc":"2.0","id":"A1","method":"call_1"})",
},
R"({
"id" : "A1",
"method" : "json2",
"params" : [
{
"error" : "invalidParams",
"error_code" : 31,
"error_message" : "Invalid parameters.",
"id" : "A1",
"ripplerpc" : "2.0"
}
],
"ripplerpc" : "2.0"
})"},
{"json2: wrong jsonrpc version.",
__LINE__,
{
"json2",
R"({"jsonrpc":"2.1","ripplerpc":"2.0","id":"A1","method":"call_1"})",
},
R"({
"id" : "A1",
"jsonrpc" : "2.1",
"method" : "json2",
"params" : [
{
"error" : "invalidParams",
"error_code" : 31,
"error_message" : "Invalid parameters.",
"id" : "A1",
"jsonrpc" : "2.1",
"ripplerpc" : "2.0"
}
],
"ripplerpc" : "2.0"
})"},
{"json2: omit ripplerpc.",
__LINE__,
{
"json2",
R"({"jsonrpc":"2.0","id":"A1","method":"call_1"})",
},
R"({
"id" : "A1",
"jsonrpc" : "2.0",
"method" : "json2",
"params" : [
{
"error" : "invalidParams",
"error_code" : 31,
"error_message" : "Invalid parameters.",
"id" : "A1",
"jsonrpc" : "2.0"
}
]
})"},
{"json2: wrong ripplerpc version.",
__LINE__,
{
"json2",
R"({"jsonrpc":"2.0","ripplerpc":"2.00","id":"A1","method":"call_1"})",
},
R"({
"id" : "A1",
"jsonrpc" : "2.0",
"method" : "json2",
"params" : [
{
"error" : "invalidParams",
"error_code" : 31,
"error_message" : "Invalid parameters.",
"id" : "A1",
"jsonrpc" : "2.0",
"ripplerpc" : "2.00"
}
],
"ripplerpc" : "2.00"
})"},
{"json2: omit id.",
__LINE__,
{
"json2",
R"({"jsonrpc":"2.0","ripplerpc":"2.0","method":"call_1"})",
},
R"({
"jsonrpc" : "2.0",
"method" : "json2",
"params" : [
{
"error" : "invalidParams",
"error_code" : 31,
"error_message" : "Invalid parameters.",
"jsonrpc" : "2.0",
"ripplerpc" : "2.0"
}
],
"ripplerpc" : "2.0"
})"},
{"json2: omit method.",
__LINE__,
{
"json2",
R"({"jsonrpc":"2.0","ripplerpc":"2.0","id":"A1"})",
},
R"({
"id" : "A1",
"jsonrpc" : "2.0",
"method" : "json2",
"params" : [
{
"error" : "invalidParams",
"error_code" : 31,
"error_message" : "Invalid parameters.",
"id" : "A1",
"jsonrpc" : "2.0",
"ripplerpc" : "2.0"
}
],
"ripplerpc" : "2.0"
})"},
{"json2: empty outer array.",
__LINE__,
{
"json2",
R"([])",
},
R"({
"method" : "json2",
"params" : [
{
"error" : "invalidParams",
"error_code" : 31,
"error_message" : "Invalid parameters."
}
]
})"},
{"json2: empty inner array.",
__LINE__,
{
"json2",
R"([{"jsonrpc":"2.0","ripplerpc":"2.0","id":"A1","method":"call_1",[]}])",
},
R"({
"method" : "json2",
"params" : [
{
"error" : "invalidParams",
"error_code" : 31,
"error_message" : "Invalid parameters."
}
]
})"},
{"json2: array with non-json2 object.",
__LINE__,
{
"json2",
R"([
{"jsonrpc" : "2.1",
"ripplerpc" : "2.0",
"id" : "A1",
"method" : "call_1"
}
])",
},
R"({
"method" : "json2",
"params" : [
{
"error" : "invalidParams",
"error_code" : 31,
"error_message" : "Invalid parameters."
}
]
})"},
{"json2: non-object or -array inner params member.",
__LINE__,
{
"json2",
R"({
"jsonrpc" : "2.0",
"ripplerpc" : "2.0",
"id" : "A1",
"method" : "call_1",
"params" : true
})",
},
R"({
"id" : "A1",
"jsonrpc" : "2.0",
"method" : "json2",
"params" : [
{
"error" : "invalidParams",
"error_code" : 31,
"error_message" : "Invalid parameters.",
"id" : "A1",
"jsonrpc" : "2.0",
"ripplerpc" : "2.0"
}
],
"ripplerpc" : "2.0"
})"},
// ledger
// ----------------------------------------------------------------------
{"ledger: minimal.",
__LINE__,
{"ledger"},
R"({
"method" : "ledger",
"params" : [
{
"api_version" : %API_VER%,
}
]
})"},
{"ledger: ledger index.",
__LINE__,
{"ledger", "4294967295"},
R"({
"method" : "ledger",
"params" : [
{
"api_version" : %API_VER%,
"ledger_index" : 4294967295
}
]
})"},
{"ledger: text ledger index.",
__LINE__,
{"ledger", "validated"},
R"({
"method" : "ledger",
"params" : [
{
"api_version" : %API_VER%,
"ledger_index" : "validated"
}
]
})"},
{"ledger: ledger hash.",
__LINE__,
{"ledger",
"ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789"},
R"({
"method" : "ledger",
"params" : [
{
"api_version" : %API_VER%,
"ledger_hash" : "ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789"
}
]
})"},
{"ledger: full.",
__LINE__,
{"ledger", "current", "full"},
R"({
"method" : "ledger",
"params" : [
{
"api_version" : %API_VER%,
"full" : true,
"ledger_index" : "current"
}
]
})"},
{"ledger: tx.",
__LINE__,
{"ledger", "closed", "tx"},
R"({
"method" : "ledger",
"params" : [
{
"api_version" : %API_VER%,
"expand" : true,
"ledger_index" : "closed",
"transactions" : true
}
]
})"},
{"ledger: too many arguments.",
__LINE__,
{"ledger", "4294967295", "spare"},
R"({
"method" : "ledger",
"params" : [
{
"api_version" : %API_VER%,
"ledger_index" : 4294967295
}
]
})"},
{"ledger: ledger index too small.",
__LINE__,
{"ledger", "-1"},
R"({
"method" : "ledger",
"params" : [
{
"api_version" : %API_VER%,
"ledger_index" : 0
}
]
})"},
{"ledger: ledger index too big.",
__LINE__,
{"ledger", "4294967296"},
R"({
"method" : "ledger",
"params" : [
{
"api_version" : %API_VER%,
"ledger_index" : 0
}
]
})"},
{"ledger: invalid ledger text.",
__LINE__,
{"ledger", "latest"},
R"({
"method" : "ledger",
"params" : [
{
"api_version" : %API_VER%,
"ledger_index" : 0
}
]
})"},
{"ledger: unsupported final argument.",
__LINE__,
{"ledger", "current", "expand"},
R"({
"method" : "ledger",
"params" : [
{
"api_version" : %API_VER%,
"ledger_index" : "current"
}
]
})"},
// ledger_closed
// ---------------------------------------------------------------
{"ledger_closed: minimal.",
__LINE__,
{"ledger_closed"},
R"({
"method" : "ledger_closed",
"params" : [
{
"api_version" : %API_VER%,
}
]
})"},
{"ledger_closed: too many arguments.",
__LINE__,
{"ledger_closed", "today"},
R"({
"method" : "ledger_closed",
"params" : [
{
"error" : "badSyntax",
"error_code" : 1,
"error_message" : "Syntax error."
}
]
})"},
// ledger_current
// --------------------------------------------------------------
{"ledger_current: minimal.",
__LINE__,
{"ledger_current"},
R"({
"method" : "ledger_current",
"params" : [
{
"api_version" : %API_VER%,
}
]
})"},
{"ledger_current: too many arguments.",
__LINE__,
{"ledger_current", "today"},
R"({
"method" : "ledger_current",
"params" : [
{
"error" : "badSyntax",
"error_code" : 1,
"error_message" : "Syntax error."
}
]
})"},
// ledger_header
// ---------------------------------------------------------------
{"ledger_header: ledger index.",
__LINE__,
{"ledger_header", "4294967295"},
R"({
"method" : "ledger_header",
"params" : [
{
"api_version" : %API_VER%,
"ledger_index" : 4294967295
}
]
})"},
{"ledger_header: ledger hash.",
__LINE__,
{"ledger_header",
"ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789"},
R"({
"method" : "ledger_header",
"params" : [
{
"api_version" : %API_VER%,
"ledger_hash" : "ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789"
}
]
})"},
{"ledger_header: too few arguments.",
__LINE__,
{
"ledger_header",
},
R"({
"method" : "ledger_header",
"params" : [
{
"error" : "badSyntax",
"error_code" : 1,
"error_message" : "Syntax error."
}
]
})"},
{"ledger_header: too many arguments.",
__LINE__,
{"ledger_header", "4294967295", "spare"},
R"({
"method" : "ledger_header",
"params" : [
{
"error" : "badSyntax",
"error_code" : 1,
"error_message" : "Syntax error."
}
]
})"},
{"ledger_header: text ledger index.",
__LINE__,
{"ledger_header", "current"},
R"({
"method" : "ledger_header",
"params" : [
{
"api_version" : %API_VER%,
"ledger_index" : 0
}
]
})"},
{"ledger_header: ledger index too small.",
__LINE__,
{"ledger_header", "-1"},
R"({
"method" : "ledger_header",
"params" : [
{
"api_version" : %API_VER%,
"ledger_index" : 0
}
]
})"},
{"ledger_header: ledger index too big.",
__LINE__,
{"ledger_header", "4294967296"},
R"({
"method" : "ledger_header",
"params" : [
{
"api_version" : %API_VER%,
"ledger_index" : 0
}
]
})"},
// ledger_request
// --------------------------------------------------------------
{"ledger_request: ledger index.",
__LINE__,
{"ledger_request", "4294967295"},
R"({
"method" : "ledger_request",
"params" : [
{
"api_version" : %API_VER%,
"ledger_index" : 4294967295
}
]
})"},
{"ledger_request: ledger hash.",
__LINE__,
{"ledger_request",
"ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789"},
R"({
"method" : "ledger_request",
"params" : [
{
"api_version" : %API_VER%,
"ledger_hash" : "ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789"
}
]
})"},
{"ledger_request: too few arguments.",
__LINE__,
{
"ledger_request",
},
R"({
"method" : "ledger_request",
"params" : [
{
"error" : "badSyntax",
"error_code" : 1,
"error_message" : "Syntax error."
}
]
})"},
{"ledger_request: too many arguments.",
__LINE__,
{"ledger_request", "4294967295", "spare"},
R"({
"method" : "ledger_request",
"params" : [
{
"error" : "badSyntax",
"error_code" : 1,
"error_message" : "Syntax error."
}
]
})"},
{"ledger_request: text ledger index.",
__LINE__,
{"ledger_request", "current"},
R"({
"method" : "ledger_request",
"params" : [
{
"api_version" : %API_VER%,
"ledger_index" : 0
}
]
})"},
{"ledger_request: ledger index too small.",
__LINE__,
{"ledger_request", "-1"},
R"({
"method" : "ledger_request",
"params" : [
{
"api_version" : %API_VER%,
"ledger_index" : 0
}
]
})"},
{"ledger_request: ledger index too big.",
__LINE__,
{"ledger_request", "4294967296"},
R"({
"method" : "ledger_request",
"params" : [
{
"api_version" : %API_VER%,
"ledger_index" : 0
}
]
})"},
// log_level
// -------------------------------------------------------------------
{"log_level: minimal.",
__LINE__,
{
"log_level",
},
R"({
"method" : "log_level",
"params" : [
{
"api_version" : %API_VER%,
}
]
})"},
{"log_level: fatal.",
__LINE__,
{"log_level", "fatal"},
R"({
"method" : "log_level",
"params" : [
{
"api_version" : %API_VER%,
"severity" : "fatal"
}
]
})"},
{"log_level: error.",
__LINE__,
{"log_level", "error"},
R"({
"method" : "log_level",
"params" : [
{
"api_version" : %API_VER%,
"severity" : "error"
}
]
})"},
{"log_level: warn.",
__LINE__,
{"log_level", "warn"},
R"({
"method" : "log_level",
"params" : [
{
"api_version" : %API_VER%,
"severity" : "warn"
}
]
})"},
{"log_level: debug.",
__LINE__,
{"log_level", "debug"},
R"({
"method" : "log_level",
"params" : [
{
"api_version" : %API_VER%,
"severity" : "debug"
}
]
})"},
{"log_level: trace.",
__LINE__,
{"log_level", "trace"},
R"({
"method" : "log_level",
"params" : [
{
"api_version" : %API_VER%,
"severity" : "trace"
}
]
})"},
{"log_level: base partition.",
__LINE__,
{"log_level", "base", "trace"},
R"({
"method" : "log_level",
"params" : [
{
"api_version" : %API_VER%,
"partition" : "base",
"severity" : "trace"
}
]
})"},
{"log_level: partiton_name.",
__LINE__,
{"log_level", "partition_name", "fatal"},
R"({
"method" : "log_level",
"params" : [
{
"api_version" : %API_VER%,
"partition" : "partition_name",
"severity" : "fatal"
}
]
})"},
{"log_level: too many arguments.",
__LINE__,
{"log_level", "partition_name", "fatal", "extra"},
R"({
"method" : "log_level",
"params" : [
{
"error" : "badSyntax",
"error_code" : 1,
"error_message" : "Syntax error."
}
]
})"},
{"log_level: invalid severity.",
__LINE__,
{"log_level", "err"},
R"({
"method" : "log_level",
"params" : [
{
"api_version" : %API_VER%,
"severity" : "err"
}
]
})"},
{"log_level: swap partition name and severity.",
__LINE__,
{
"log_level",
"fatal",
"partition_name",
},
R"({
"method" : "log_level",
"params" : [
{
"api_version" : %API_VER%,
"partition" : "fatal",
"severity" : "partition_name"
}
]
})"},
// logrotate
// -------------------------------------------------------------------
{"logrotate: minimal.",
__LINE__,
{
"logrotate",
},
R"({
"method" : "logrotate",
"params" : [
{
"api_version" : %API_VER%,
}
]
})"},
{"logrotate: too many arguments.",
__LINE__,
{"logrotate", "extra"},
R"({
"method" : "logrotate",
"params" : [
{
"error" : "badSyntax",
"error_code" : 1,
"error_message" : "Syntax error."
}
]
})"},
// owner_info
// ------------------------------------------------------------------
{"owner_info: minimal.",
__LINE__,
{"owner_info", "rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh"},
R"({
"method" : "owner_info",
"params" : [
{
"api_version" : %API_VER%,
"account" : "rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh"
}
]
})"},
{"owner_info: with numeric ledger index.",
__LINE__,
{"owner_info", "rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh", "987654321"},
R"({
"method" : "owner_info",
"params" : [
{
"api_version" : %API_VER%,
"account" : "rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh",
"ledger_index" : 987654321
}
]
})"},
{"owner_info: with text ledger index.",
__LINE__,
{"owner_info", "rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh", "validated"},
R"({
"method" : "owner_info",
"params" : [
{
"api_version" : %API_VER%,
"account" : "rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh",
"ledger_index" : "validated"
}
]
})"},
{"owner_info: with ledger hash.",
__LINE__,
{"owner_info",
"rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh",
"0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF"},
R"({
"method" : "owner_info",
"params" : [
{
"api_version" : %API_VER%,
"account" : "rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh",
"ledger_hash" : "0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF"
}
]
})"},
{"owner_info: with ledger index.",
__LINE__,
{"owner_info", "rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh", "validated"},
R"({
"method" : "owner_info",
"params" : [
{
"account" : "rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh",
"api_version" : %API_VER%,
"ledger_index" : "validated"
}
]
})"},
{"owner_info: too few arguments.",
__LINE__,
{
"owner_info",
},
R"({
"method" : "owner_info",
"params" : [
{
"error" : "badSyntax",
"error_code" : 1,
"error_message" : "Syntax error."
}
]
})"},
{"owner_info: too many arguments.",
__LINE__,
{
"owner_info",
"rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh",
"current",
"extra1",
"extra2",
},
R"({
"method" : "owner_info",
"params" : [
{
"error" : "badSyntax",
"error_code" : 1,
"error_message" : "Syntax error."
}
]
})"},
{
"owner_info: invalid accountID.",
__LINE__,
{
"owner_info",
"", // Note: very few values are detected as bad!
},
R"({
"method" : "owner_info",
"params" : [
{
"error" : "actMalformed",
"error_code" : 35,
"error_message" : "Account malformed."
}
]
})",
},
{
// Note: there is code in place to return rpcLGR_IDX_MALFORMED. That
// cannot currently occur because jvParseLedger() always returns true.
"owner_info: invalid ledger selection.",
__LINE__,
{"owner_info", "rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh", "no_ledger"},
R"({
"method" : "owner_info",
"params" : [
{
"api_version" : %API_VER%,
"account" : "rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh",
"ledger_index" : 0
}
]
})",
},
{
// Note: there is code in place to return rpcLGR_IDX_MALFORMED. That
// cannot currently occur because jvParseLedger() always returns true.
"owner_info: invalid ledger selection.",
__LINE__,
{"owner_info", "rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh", "no_ledger"},
R"({
"method" : "owner_info",
"params" : [
{
"account" : "rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh",
"api_version" : %API_VER%,
"ledger_index" : 0
}
]
})",
},
// peers
// -----------------------------------------------------------------------
{"peers: minimal.",
__LINE__,
{
"peers",
},
R"({
"method" : "peers",
"params" : [
{
"api_version" : %API_VER%,
}
]
})"},
{"peers: too many arguments.",
__LINE__,
{"peers", "extra"},
R"({
"method" : "peers",
"params" : [
{
"error" : "badSyntax",
"error_code" : 1,
"error_message" : "Syntax error."
}
]
})"},
// peer_reservations_add
// -------------------------------------------------------
{"peer_reservations_add: minimal.",
__LINE__,
{"peer_reservations_add", "public_key_string"},
R"({
"method" : "peer_reservations_add",
"params" : [
{
"api_version" : %API_VER%,
"public_key" : "public_key_string"
}
]
})"},
{"peer_reservations_add: with description.",
__LINE__,
{"peer_reservations_add", "public_key_string", "public_key_description"},
R"({
"method" : "peer_reservations_add",
"params" : [
{
"api_version" : %API_VER%,
"description" : "public_key_description",
"public_key" : "public_key_string"
}
]
})"},
{"peer_reservations_add: too few arguments.",
__LINE__,
{"peer_reservations_add"},
R"({
"method" : "peer_reservations_add",
"params" : [
{
"error" : "badSyntax",
"error_code" : 1,
"error_message" : "Syntax error."
}
]
})"},
{"peer_reservations_add: too many arguments.",
__LINE__,
{"peer_reservations_add",
"public_key_string",
"public_key_description",
"spare"},
R"({
"method" : "peer_reservations_add",
"params" : [
{
"error" : "badSyntax",
"error_code" : 1,
"error_message" : "Syntax error."
}
]
})"},
// peer_reservations_del
// -------------------------------------------------------
{"peer_reservations_del: minimal.",
__LINE__,
{"peer_reservations_del", "public_key_string"},
R"({
"method" : "peer_reservations_del",
"params" : [
{
"api_version" : %API_VER%,
"public_key" : "public_key_string"
}
]
})"},
{"peer_reservations_del: too few arguments.",
__LINE__,
{"peer_reservations_del"},
R"({
"method" : "peer_reservations_del",
"params" : [
{
"error" : "badSyntax",
"error_code" : 1,
"error_message" : "Syntax error."
}
]
})"},
{"peer_reservations_del: too many arguments.",
__LINE__,
{"peer_reservations_del",
"public_key_string",
"public_key_description",
"spare"},
R"({
"method" : "peer_reservations_del",
"params" : [
{
"error" : "badSyntax",
"error_code" : 1,
"error_message" : "Syntax error."
}
]
})"},
// ping
// ------------------------------------------------------------------------
{"ping: minimal.",
__LINE__,
{
"ping",
},
R"({
"method" : "ping",
"params" : [
{
"api_version" : %API_VER%,
}
]
})"},
{"ping: too many arguments.",
__LINE__,
{"ping", "extra"},
R"({
"method" : "ping",
"params" : [
{
"error" : "badSyntax",
"error_code" : 1,
"error_message" : "Syntax error."
}
]
})"},
// print
// -----------------------------------------------------------------------
{"print: minimal.",
__LINE__,
{
"print",
},
R"({
"method" : "print",
"params" : [
{
"api_version" : %API_VER%,
}
]
})"},
{// The docs indicate that no arguments are allowed. So should this error?
"print: extra argument.",
__LINE__,
{"print", "extra"},
R"({
"method" : "print",
"params" : [
{
"api_version" : %API_VER%,
"params" : [ "extra" ]
}
]
})"},
{"print: too many arguments.",
__LINE__,
{"print", "extra1", "extra2"},
R"({
"method" : "print",
"params" : [
{
"error" : "badSyntax",
"error_code" : 1,
"error_message" : "Syntax error."
}
]
})"},
// random
// ----------------------------------------------------------------------
{"random: minimal.",
__LINE__,
{
"random",
},
R"({
"method" : "random",
"params" : [
{
"api_version" : %API_VER%,
}
]
})"},
{"random: too many arguments.",
__LINE__,
{"random", "extra"},
R"({
"method" : "random",
"params" : [
{
"error" : "badSyntax",
"error_code" : 1,
"error_message" : "Syntax error."
}
]
})"},
// ripple_path_find
// ------------------------------------------------------------
{"ripple_path_find: minimal.",
__LINE__,
{
"ripple_path_find",
R"({"json_argument":true})",
},
R"({
"method" : "ripple_path_find",
"params" : [
{
"api_version" : %API_VER%,
"json_argument" : true
}
]
})"},
{"ripple_path_find: ledger index.",
__LINE__,
{"ripple_path_find", R"({"json_argument":true})", "4294967295"},
R"({
"method" : "ripple_path_find",
"params" : [
{
"api_version" : %API_VER%,
"json_argument" : true,
"ledger_index" : 4294967295
}
]
})"},
{"ripple_path_find: text ledger index.",
__LINE__,
{"ripple_path_find", R"({"json_argument":true})", "closed"},
R"({
"method" : "ripple_path_find",
"params" : [
{
"api_version" : %API_VER%,
"json_argument" : true,
"ledger_index" : "closed"
}
]
})"},
{"ripple_path_find: ledger hash.",
__LINE__,
{"ripple_path_find",
R"({"json_argument":true})",
"0123456789ABCDEFGHIJKLMNOPQRSTUV0123456789ABCDEFGHIJKLMNOPQRSTUV"},
R"({
"method" : "ripple_path_find",
"params" : [
{
"api_version" : %API_VER%,
"json_argument" : true,
"ledger_hash" : "0123456789ABCDEFGHIJKLMNOPQRSTUV0123456789ABCDEFGHIJKLMNOPQRSTUV"
}
]
})"},
{"ripple_path_find: too few arguments.",
__LINE__,
{
"ripple_path_find",
},
R"({
"method" : "ripple_path_find",
"params" : [
{
"error" : "badSyntax",
"error_code" : 1,
"error_message" : "Syntax error."
}
]
})"},
{"ripple_path_find: too many arguments.",
__LINE__,
{"ripple_path_find", R"({"json_argument":true})", "current", "extra"},
R"({
"method" : "ripple_path_find",
"params" : [
{
"error" : "badSyntax",
"error_code" : 1,
"error_message" : "Syntax error."
}
]
})"},
{"ripple_path_find: invalid json (note extra comma).",
__LINE__,
{
"ripple_path_find",
R"({"json_argument":true,})",
},
R"({
"method" : "ripple_path_find",
"params" : [
{
"error" : "invalidParams",
"error_code" : 31,
"error_message" : "Invalid parameters."
}
]
})"},
{"ripple_path_find: ledger index too small.",
__LINE__,
{"ripple_path_find", R"({"json_argument":true})", "-1"},
R"({
"method" : "ripple_path_find",
"params" : [
{
"api_version" : %API_VER%,
"json_argument" : true,
"ledger_index" : 0
}
]
})"},
{"ripple_path_find: ledger index too big.",
__LINE__,
{"ripple_path_find", R"({"json_argument":true})", "4294967296"},
R"({
"method" : "ripple_path_find",
"params" : [
{
"api_version" : %API_VER%,
"json_argument" : true,
"ledger_index" : 0
}
]
})"},
{"ripple_path_find: invalid text ledger index.",
__LINE__,
{"ripple_path_find", R"({"json_argument":true})", "cur"},
R"({
"method" : "ripple_path_find",
"params" : [
{
"api_version" : %API_VER%,
"json_argument" : true,
"ledger_index" : 0
}
]
})"},
// sign
// ------------------------------------------------------------------------
{"sign: minimal.",
__LINE__,
{
"sign",
"my_secret",
R"({"json_argument":true})",
},
R"({
"method" : "sign",
"params" : [
{
"api_version" : %API_VER%,
"secret" : "my_secret",
"tx_json" : {
"json_argument" : true
}
}
]
})"},
{"sign: offline.",
__LINE__,
{"sign", "my_secret", R"({"json_argument":true})", "offline"},
R"({
"method" : "sign",
"params" : [
{
"api_version" : %API_VER%,
"offline" : true,
"secret" : "my_secret",
"tx_json" : {
"json_argument" : true
}
}
]
})"},
{"sign: too few arguments.",
__LINE__,
{"sign", "contents_of_blob"},
R"({
"method" : "sign",
"params" : [
{
"error" : "badSyntax",
"error_code" : 1,
"error_message" : "Syntax error."
}
]
})"},
{"sign: offline flag with signature_target.",
__LINE__,
{"sign", "my_secret", R"({"json_argument":true})", "offline", "extra"},
R"({
"method" : "sign",
"params" : [
{
"api_version" : %API_VER%,
"offline" : true,
"secret" : "my_secret",
"signature_target" : "extra",
"tx_json" :
{
"json_argument" : true
}
}
]
})"},
{"sign: too many arguments.",
__LINE__,
{"sign",
"my_secret",
R"({"json_argument":true})",
"offline",
"CounterpartySignature",
"extra"},
R"({
"method" : "sign",
"params" : [
{
"error" : "badSyntax",
"error_code" : 1,
"error_message" : "Syntax error."
}
]
})"},
{"sign: invalid JSON (note extra comma).",
__LINE__,
{
"sign",
"my_secret",
R"({"json_argument":true,})",
},
R"({
"method" : "sign",
"params" : [
{
"error" : "invalidParams",
"error_code" : 31,
"error_message" : "Invalid parameters."
}
]
})"},
{"sign: misspelled offline flag interpreted as signature_target.",
__LINE__,
{"sign", "my_secret", R"({"json_argument":true})", "offlin"},
R"({
"method" : "sign",
"params" : [
{
"api_version" : %API_VER%,
"secret" : "my_secret",
"signature_target" : "offlin",
"tx_json" :
{
"json_argument" : true
}
}
]
})"},
// sign_for
// --------------------------------------------------------------------
{"sign_for: minimal.",
__LINE__,
{
"sign_for",
"rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh",
"my_secret",
R"({"json_argument":true})",
},
R"({
"method" : "sign_for",
"params" : [
{
"api_version" : %API_VER%,
"account" : "rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh",
"secret" : "my_secret",
"tx_json" : {
"json_argument" : true
}
}
]
})"},
{"sign_for: offline.",
__LINE__,
{"sign_for",
"rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh",
"my_secret",
R"({"json_argument":true})",
"offline"},
R"({
"method" : "sign_for",
"params" : [
{
"api_version" : %API_VER%,
"account" : "rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh",
"offline" : true,
"secret" : "my_secret",
"tx_json" : {
"json_argument" : true
}
}
]
})"},
{"sign_for: too few arguments.",
__LINE__,
{
"sign_for",
"rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh",
"my_secret",
},
R"({
"method" : "sign_for",
"params" : [
{
"error" : "badSyntax",
"error_code" : 1,
"error_message" : "Syntax error."
}
]
})"},
{"sign_for: too many arguments.",
__LINE__,
{"sign_for",
"rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh",
"my_secret",
R"({"json_argument":true})",
"offline",
"extra"},
R"({
"method" : "sign_for",
"params" : [
{
"error" : "badSyntax",
"error_code" : 1,
"error_message" : "Syntax error."
}
]
})"},
{"sign_for: invalid json (note extra comma).",
__LINE__,
{
"sign_for",
"rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh",
"my_secret",
R"({"json_argument":true,})",
},
R"({
"method" : "sign_for",
"params" : [
{
"error" : "invalidParams",
"error_code" : 31,
"error_message" : "Invalid parameters."
}
]
})"},
{"sign_for: invalid final argument.",
__LINE__,
{"sign_for",
"rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh",
"my_secret",
R"({"json_argument":true})",
"ofline"},
R"({
"method" : "sign_for",
"params" : [
{
"error" : "invalidParams",
"error_code" : 31,
"error_message" : "Invalid parameters."
}
]
})"},
// submit
// ----------------------------------------------------------------------
{"submit: blob.",
__LINE__,
{"submit", "the blob is unvalidated and may be any length..."},
R"({
"method" : "submit",
"params" : [
{
"api_version" : %API_VER%,
"tx_blob" : "the blob is unvalidated and may be any length..."
}
]
})"},
{"submit: json.",
__LINE__,
{
"submit",
"my_secret",
R"({"json_argument":true})",
},
R"({
"method" : "submit",
"params" : [
{
"api_version" : %API_VER%,
"secret" : "my_secret",
"tx_json" : {
"json_argument" : true
}
}
]
})"},
{"submit: too few arguments.",
__LINE__,
{
"submit",
},
R"({
"method" : "submit",
"params" : [
{
"error" : "badSyntax",
"error_code" : 1,
"error_message" : "Syntax error."
}
]
})"},
{// Note: I believe this _ought_ to be detected as too many arguments.
"submit: four arguments.",
__LINE__,
{"submit", "my_secret", R"({"json_argument":true})", "offline"},
R"({
"method" : "submit",
"params" : [
{
"api_version" : %API_VER%,
"offline" : true,
"secret" : "my_secret",
"tx_json" : {
"json_argument" : true
}
}
]
})"},
{"submit: offline flag with signature_target.",
__LINE__,
{"submit", "my_secret", R"({"json_argument":true})", "offline", "extra"},
R"({
"method" : "submit",
"params" : [
{
"api_version" : %API_VER%,
"offline" : true,
"secret" : "my_secret",
"signature_target" : "extra",
"tx_json" :
{
"json_argument" : true
}
}
]
})"},
{"submit: too many arguments.",
__LINE__,
{"submit",
"my_secret",
R"({"json_argument":true})",
"offline",
"CounterpartySignature",
"extra"},
R"({
"method" : "submit",
"params" : [
{
"error" : "badSyntax",
"error_code" : 1,
"error_message" : "Syntax error."
}
]
})"},
{"submit: invalid json (note extra comma).",
__LINE__,
{
"submit",
"my_secret",
R"({"json_argument":true,})",
},
R"({
"method" : "submit",
"params" : [
{
"error" : "invalidParams",
"error_code" : 31,
"error_message" : "Invalid parameters."
}
]
})"},
{"submit: misspelled offline flag interpreted as signature_target.",
__LINE__,
{"submit", "my_secret", R"({"json_argument":true})", "offlne"},
R"({
"method" : "submit",
"params" : [
{
"api_version" : %API_VER%,
"secret" : "my_secret",
"signature_target" : "offlne",
"tx_json" :
{
"json_argument" : true
}
}
]
})"},
// submit_multisigned
// ----------------------------------------------------------
{"submit_multisigned: json.",
__LINE__,
{
"submit_multisigned",
R"({"json_argument":true})",
},
R"({
"method" : "submit_multisigned",
"params" : [
{
"api_version" : %API_VER%,
"tx_json" : {
"json_argument" : true
}
}
]
})"},
{"submit_multisigned: too few arguments.",
__LINE__,
{
"submit_multisigned",
},
R"({
"method" : "submit_multisigned",
"params" : [
{
"error" : "badSyntax",
"error_code" : 1,
"error_message" : "Syntax error."
}
]
})"},
{"submit_multisigned: too many arguments.",
__LINE__,
{"submit_multisigned", R"({"json_argument":true})", "extra"},
R"({
"method" : "submit_multisigned",
"params" : [
{
"error" : "badSyntax",
"error_code" : 1,
"error_message" : "Syntax error."
}
]
})"},
{"submit_multisigned: invalid json (note extra comma).",
__LINE__,
{
"submit_multisigned",
R"({"json_argument":true,})",
},
R"({
"method" : "submit_multisigned",
"params" : [
{
"error" : "invalidParams",
"error_code" : 31,
"error_message" : "Invalid parameters."
}
}
]
})"},
// server_info
// -----------------------------------------------------------------
{"server_info: minimal.",
__LINE__,
{
"server_info",
},
R"({
"method" : "server_info",
"params" : [
{
"api_version" : %API_VER%,
}
]
})"},
{"server_info: counters.",
__LINE__,
{"server_info", "counters"},
R"({
"method" : "server_info",
"params" : [
{
"api_version" : %API_VER%,
"counters" : true
}
]
})"},
{"server_info: too many arguments.",
__LINE__,
{"server_info", "counters", "extra"},
R"({
"method" : "server_info",
"params" : [
{
"error" : "badSyntax",
"error_code" : 1,
"error_message" : "Syntax error."
}
]
})"},
{"server_info: non-counters argument.",
__LINE__,
{"server_info", "counter"},
R"({
"method" : "server_info",
"params" : [
{
"api_version" : %API_VER%,
}
]
})"},
// server_state
// ----------------------------------------------------------------
{"server_state: minimal.",
__LINE__,
{
"server_state",
},
R"({
"method" : "server_state",
"params" : [
{
"api_version" : %API_VER%,
}
]
})"},
{"server_state: counters.",
__LINE__,
{"server_state", "counters"},
R"({
"method" : "server_state",
"params" : [
{
"api_version" : %API_VER%,
"counters" : true
}
]
})"},
{"server_state: too many arguments.",
__LINE__,
{"server_state", "counters", "extra"},
R"({
"method" : "server_state",
"params" : [
{
"error" : "badSyntax",
"error_code" : 1,
"error_message" : "Syntax error."
}
]
})"},
{"server_state: non-counters argument.",
__LINE__,
{"server_state", "counter"},
R"({
"method" : "server_state",
"params" : [
{
"api_version" : %API_VER%,
}
]
})"},
// stop
// ------------------------------------------------------------------------
{"stop: minimal.",
__LINE__,
{
"stop",
},
R"({
"method" : "stop",
"params" : [
{
"api_version" : %API_VER%,
}
]
})"},
{"stop: too many arguments.",
__LINE__,
{"stop", "extra"},
R"({
"method" : "stop",
"params" : [
{
"error" : "badSyntax",
"error_code" : 1,
"error_message" : "Syntax error."
}
]
})"},
// transaction_entry
// -----------------------------------------------------------
{"transaction_entry: ledger index.",
__LINE__,
{"transaction_entry",
"0123456789ABCDEFGHIJKLMNOPQRSTUV0123456789ABCDEFGHIJKLMNOPQRSTUV",
"4294967295"},
R"({
"method" : "transaction_entry",
"params" : [
{
"api_version" : %API_VER%,
"ledger_index" : 4294967295,
"tx_hash" : "0123456789ABCDEFGHIJKLMNOPQRSTUV0123456789ABCDEFGHIJKLMNOPQRSTUV"
}
]
})"},
{"transaction_entry: text ledger index.",
__LINE__,
{"transaction_entry",
"0123456789ABCDEFGHIJKLMNOPQRSTUV0123456789ABCDEFGHIJKLMNOPQRSTUV",
"current"},
R"({
"method" : "transaction_entry",
"params" : [
{
"api_version" : %API_VER%,
"ledger_index" : "current",
"tx_hash" : "0123456789ABCDEFGHIJKLMNOPQRSTUV0123456789ABCDEFGHIJKLMNOPQRSTUV"
}
]
})"},
{"transaction_entry: ledger hash.",
__LINE__,
{"transaction_entry",
"0123456789ABCDEFGHIJKLMNOPQRSTUV0123456789ABCDEFGHIJKLMNOPQRSTUV",
"VUTSRQPONMLKJIHGFEDCBA9876543210VUTSRQPONMLKJIHGFEDCBA9876543210"},
R"({
"method" : "transaction_entry",
"params" : [
{
"api_version" : %API_VER%,
"ledger_hash" : "VUTSRQPONMLKJIHGFEDCBA9876543210VUTSRQPONMLKJIHGFEDCBA9876543210",
"tx_hash" : "0123456789ABCDEFGHIJKLMNOPQRSTUV0123456789ABCDEFGHIJKLMNOPQRSTUV"
}
]
})"},
{"transaction_entry: too few arguments.",
__LINE__,
{
"transaction_entry",
"0123456789ABCDEFGHIJKLMNOPQRSTUV0123456789ABCDEFGHIJKLMNOPQRSTUV",
},
R"({
"method" : "transaction_entry",
"params" : [
{
"error" : "badSyntax",
"error_code" : 1,
"error_message" : "Syntax error."
}
]
})"},
{"transaction_entry: too many arguments.",
__LINE__,
{"transaction_entry",
"0123456789ABCDEFGHIJKLMNOPQRSTUV0123456789ABCDEFGHIJKLMNOPQRSTUV",
"validated",
"extra"},
R"({
"method" : "transaction_entry",
"params" : [
{
"error" : "badSyntax",
"error_code" : 1,
"error_message" : "Syntax error."
}
]
})"},
{"transaction_entry: short tx_hash.",
__LINE__,
{
"transaction_entry",
"123456789ABCDEFGHIJKLMNOPQRSTUV0123456789ABCDEFGHIJKLMNOPQRSTUV",
"validated",
},
R"({
"method" : "transaction_entry",
"params" : [
{
"error" : "invalidParams",
"error_code" : 31,
"error_message" : "Invalid parameters."
}
]
})"},
{"transaction_entry: long tx_hash.",
__LINE__,
{
"transaction_entry",
"0123456789ABCDEFGHIJKLMNOPQRSTUV0123456789ABCDEFGHIJKLMNOPQRSTUVW",
"validated",
},
R"({
"method" : "transaction_entry",
"params" : [
{
"error" : "invalidParams",
"error_code" : 31,
"error_message" : "Invalid parameters."
}
]
})"},
{"transaction_entry: small ledger index.",
__LINE__,
{
"transaction_entry",
"0123456789ABCDEFGHIJKLMNOPQRSTUV0123456789ABCDEFGHIJKLMNOPQRSTUV",
"0",
},
R"({
"method" : "transaction_entry",
"params" : [
{
"error" : "invalidParams",
"error_code" : 31,
"error_message" : "Invalid parameters."
}
]
})"},
{"transaction_entry: large ledger index.",
__LINE__,
{
"transaction_entry",
"0123456789ABCDEFGHIJKLMNOPQRSTUV0123456789ABCDEFGHIJKLMNOPQRSTUV",
"4294967296",
},
R"({
"method" : "transaction_entry",
"params" : [
{
"error" : "invalidParams",
"error_code" : 31,
"error_message" : "Invalid parameters."
}
]
})"},
{"transaction_entry: short ledger hash.",
__LINE__,
{
"transaction_entry",
"0123456789ABCDEFGHIJKLMNOPQRSTUV0123456789ABCDEFGHIJKLMNOPQRSTUV",
"VUTSRQPONMLKJIHGFEDCBA9876543210VUTSRQPONMLKJIHGFEDCBA987654321",
},
R"({
"method" : "transaction_entry",
"params" : [
{
"error" : "invalidParams",
"error_code" : 31,
"error_message" : "Invalid parameters."
}
]
})"},
{"transaction_entry: long ledger hash.",
__LINE__,
{
"transaction_entry",
"0123456789ABCDEFGHIJKLMNOPQRSTUV0123456789ABCDEFGHIJKLMNOPQRSTUV",
"VUTSRQPONMLKJIHGFEDCBA9876543210VUTSRQPONMLKJIHGFEDCBA9876543210Z",
},
R"({
"method" : "transaction_entry",
"params" : [
{
"error" : "invalidParams",
"error_code" : 31,
"error_message" : "Invalid parameters."
}
]
})"},
// tx
// --------------------------------------------------------------------------
{"tx: ctid. minimal",
__LINE__,
{"tx", "FFFFFFFFFFFFFFFF", "1", "2"},
R"({
"method" : "tx",
"params" : [
{
"api_version" : %API_VER%,
"ctid" : "FFFFFFFFFFFFFFFF",
"max_ledger" : "2",
"min_ledger" : "1"
}
]
})"},
{"tx: ctid. binary",
__LINE__,
{"tx", "FFFFFFFFFFFFFFFF", "binary", "1", "2"},
R"({
"method" : "tx",
"params" : [
{
"api_version" : %API_VER%,
"binary" : true,
"ctid" : "FFFFFFFFFFFFFFFF",
"max_ledger" : "2",
"min_ledger" : "1"
}
]
})"},
{"tx: minimal.",
__LINE__,
{"tx", "transaction_hash_is_not_validated"},
R"({
"method" : "tx",
"params" : [
{
"api_version" : %API_VER%,
"transaction" : "transaction_hash_is_not_validated"
}
]
})"},
{"tx: binary.",
__LINE__,
{"tx", "transaction_hash_is_not_validated", "binary"},
R"({
"method" : "tx",
"params" : [
{
"api_version" : %API_VER%,
"binary" : true,
"transaction" : "transaction_hash_is_not_validated"
}
]
})"},
{"tx: too few arguments.",
__LINE__,
{
"tx",
},
R"({
"method" : "tx",
"params" : [
{
"error" : "badSyntax",
"error_code" : 1,
"error_message" : "Syntax error."
}
]
})"},
{"tx: too many arguments.",
__LINE__,
{"tx", "transaction_hash_is_not_validated", "binary", "1", "2", "extra"},
R"({
"method" : "tx",
"params" : [
{
"error" : "badSyntax",
"error_code" : 1,
"error_message" : "Syntax error."
}
]
})"},
{"tx: invalid final argument is apparently ignored.",
__LINE__,
{"tx", "transaction_hash_is_not_validated", "bin"},
R"({
"method" : "tx",
"params" : [
{
"api_version" : %API_VER%,
"transaction" : "transaction_hash_is_not_validated"
}
]
})"},
// tx_history
// ------------------------------------------------------------------
{"tx_history: minimal.",
__LINE__,
{"tx_history", "0"},
R"({
"method" : "tx_history",
"params" : [
{
"api_version" : %API_VER%,
"start" : 0
}
]
})"},
{"tx_history: too few arguments.",
__LINE__,
{
"tx_history",
},
R"({
"method" : "tx_history",
"params" : [
{
"error" : "badSyntax",
"error_code" : 1,
"error_message" : "Syntax error."
}
]
})"},
{"tx_history: too many arguments.",
__LINE__,
{"tx_history", "0", "1"},
R"({
"method" : "tx_history",
"params" : [
{
"error" : "badSyntax",
"error_code" : 1,
"error_message" : "Syntax error."
}
]
})"},
{
// Note: this really shouldn't throw, but does at the moment.
"tx_history: start too small.",
__LINE__,
{"tx_history", "-1"},
R"({
"method" : "tx_history",
"params" : [
{
"error" : "invalidParams",
"error_code" : 31,
"error_message" : "Invalid field 'start'."
}
]
})",
},
{
// Note: this really shouldn't throw, but does at the moment.
"tx_history: start too big.",
__LINE__,
{"tx_history", "4294967296"},
R"({
"method" : "tx_history",
"params" : [
{
"error" : "invalidParams",
"error_code" : 31,
"error_message" : "Invalid field 'start'."
}
]
})",
},
{
// Note: this really shouldn't throw, but does at the moment.
"tx_history: start not integer.",
__LINE__,
{"tx_history", "beginning"},
R"({
"method" : "tx_history",
"params" : [
{
"error" : "invalidParams",
"error_code" : 31,
"error_message" : "Invalid field 'start'."
}
]
})",
},
// unl_list
// --------------------------------------------------------------------
{"unl_list: minimal.",
__LINE__,
{
"unl_list",
},
R"({
"method" : "unl_list",
"params" : [
{
"api_version" : %API_VER%,
}
]
})"},
{"unl_list: too many arguments.",
__LINE__,
{"unl_list", "extra"},
R"({
"method" : "unl_list",
"params" : [
{
"error" : "badSyntax",
"error_code" : 1,
"error_message" : "Syntax error."
}
]
})"},
// validation_create
// -----------------------------------------------------------
{"validation_create: minimal.",
__LINE__,
{
"validation_create",
},
R"({
"method" : "validation_create",
"params" : [
{
"api_version" : %API_VER%,
}
]
})"},
{"validation_create: with secret.",
__LINE__,
{"validation_create", "the form of the secret is not validated"},
R"({
"method" : "validation_create",
"params" : [
{
"api_version" : %API_VER%,
"secret" : "the form of the secret is not validated"
}
]
})"},
{"validation_create: too many arguments.",
__LINE__,
{"validation_create", "the form of the secret is not validated", "extra"},
R"({
"method" : "validation_create",
"params" : [
{
"error" : "badSyntax",
"error_code" : 1,
"error_message" : "Syntax error."
}
]
})"},
// version
// ---------------------------------------------------------------------
{"version: minimal.",
__LINE__,
{
"version",
},
R"({
"method" : "version",
"params" : [
{
"api_version" : %API_VER%,
}
]
})"},
{"version: too many arguments.",
__LINE__,
{"version", "extra"},
R"({
"method" : "version",
"params" : [
{
"error" : "badSyntax",
"error_code" : 1,
"error_message" : "Syntax error."
}
]
})"},
// wallet_propose
// --------------------------------------------------------------
{"wallet_propose: minimal.",
__LINE__,
{
"wallet_propose",
},
R"({
"method" : "wallet_propose",
"params" : [
{
"api_version" : %API_VER%,
}
]
})"},
{"wallet_propose: with passphrase.",
__LINE__,
{"wallet_propose", "the form of the passphrase is not validated"},
R"({
"method" : "wallet_propose",
"params" : [
{
"api_version" : %API_VER%,
"passphrase" : "the form of the passphrase is not validated"
}
]
})"},
{"wallet_propose: too many arguments.",
__LINE__,
{"wallet_propose", "the form of the passphrase is not validated", "extra"},
R"({
"method" : "wallet_propose",
"params" : [
{
"error" : "badSyntax",
"error_code" : 1,
"error_message" : "Syntax error."
}
]
})"},
// internal
// --------------------------------------------------------------------
{"internal: minimal.",
__LINE__,
{"internal", "command_name"},
R"({
"method" : "internal",
"params" : [
{
"api_version" : %API_VER%,
"internal_command" : "command_name",
"params" : []
}
]
})"},
{"internal: with parameters.",
__LINE__,
{"internal",
"command_name",
"string_arg",
"1",
"-1",
"4294967296",
"3.14159"},
R"({
"method" : "internal",
"params" : [
{
"api_version" : %API_VER%,
"internal_command" : "command_name",
"params" : [ "string_arg", "1", "-1", "4294967296", "3.14159" ]
}
]
})"},
{"internal: too few arguments.",
__LINE__,
{
"internal",
},
R"({
"method" : "internal",
"params" : [
{
"error" : "badSyntax",
"error_code" : 1,
"error_message" : "Syntax error."
}
]
})"},
// path_find
// -------------------------------------------------------------------
{"path_find: minimal.",
__LINE__,
{
"path_find",
},
R"({
"method" : "path_find",
"params" : [
{
"error" : "noEvents",
"error_code" : 7,
"error_message" : "Current transport does not support events."
}
]
})"},
{"path_find: with arguments.",
__LINE__,
{"path_find", "string_arg", "1", "-1", "4294967296", "3.14159"},
R"({
"method" : "path_find",
"params" : [
{
"error" : "noEvents",
"error_code" : 7,
"error_message" : "Current transport does not support events."
}
]
})"},
// subscribe
// -------------------------------------------------------------------
{"subscribe: minimal.",
__LINE__,
{
"subscribe",
},
R"({
"method" : "subscribe",
"params" : [
{
"error" : "noEvents",
"error_code" : 7,
"error_message" : "Current transport does not support events."
}
]
})"},
{"subscribe: with arguments.",
__LINE__,
{"subscribe", "string_arg", "1", "-1", "4294967296", "3.14159"},
R"({
"method" : "subscribe",
"params" : [
{
"error" : "noEvents",
"error_code" : 7,
"error_message" : "Current transport does not support events."
}
]
})"},
// unsubscribe
// -----------------------------------------------------------------
{"unsubscribe: minimal.",
__LINE__,
{
"unsubscribe",
},
R"({
"method" : "unsubscribe",
"params" : [
{
"error" : "noEvents",
"error_code" : 7,
"error_message" : "Current transport does not support events."
}
]
})"},
{"unsubscribe: with arguments.",
__LINE__,
{"unsubscribe", "string_arg", "1", "-1", "4294967296", "3.14159"},
R"({
"method" : "unsubscribe",
"params" : [
{
"error" : "noEvents",
"error_code" : 7,
"error_message" : "Current transport does not support events."
}
]
})"},
// unknown_command
// -------------------------------------------------------------
{"unknown_command: minimal.",
__LINE__,
{
"unknown_command",
},
R"({
"method" : "unknown_command",
"params" : [
{
"api_version" : %API_VER%,
}
]
})"},
{"unknown_command: with arguments.",
__LINE__,
{"unknown_command", "string_arg", "1", "-1", "4294967296", "3.14159"},
R"({
"method" : "unknown_command",
"params" : [
{
"api_version" : %API_VER%,
"params" : [ "string_arg", "1", "-1", "4294967296", "3.14159" ]
}
]
})"},
};
std::string
updateAPIVersionString(char const* const req, unsigned apiVersion)
{
std::string const version_str = std::to_string(apiVersion);
static auto const place_holder = "%API_VER%";
std::string jr(req);
boost::replace_all(jr, place_holder, version_str);
return jr;
}
std::unique_ptr<Config>
makeNetworkConfig(uint32_t networkID)
{
using namespace test::jtx;
return envconfig([&](std::unique_ptr<Config> cfg) {
cfg->NETWORK_ID = networkID;
return cfg;
});
}
class RPCCall_test : public beast::unit_test::suite
{
public:
void
testRPCCall(unsigned apiVersion)
{
testcase << "RPCCall API version " << apiVersion;
if (!BEAST_EXPECT(
apiVersion >= RPC::apiMinimumSupportedVersion &&
apiVersion <= RPC::apiMaximumValidVersion))
return;
test::jtx::Env env(
*this, makeNetworkConfig(11111)); // Used only for its Journal.
// For each RPCCall test.
for (RPCCallTestData const& rpcCallTest : rpcCallTestArray)
{
if (!BEAST_EXPECT(!rpcCallTest.exp.empty()))
break;
std::vector<std::string> const args{
rpcCallTest.args.begin(), rpcCallTest.args.end()};
char const* const expVersioned =
(apiVersion - RPC::apiMinimumSupportedVersion) <
rpcCallTest.exp.size()
? rpcCallTest.exp[apiVersion - RPC::apiMinimumSupportedVersion]
: rpcCallTest.exp.back();
// Note that, over the long term, none of these tests should
// throw. But, for the moment, some of them do. So handle it.
Json::Value got;
try
{
got = jtx::cmdToJSONRPC(args, env.journal, apiVersion);
}
catch (std::bad_cast const&)
{
fail(rpcCallTest.description, __FILE__, rpcCallTest.line);
// Try the next test.
continue;
}
Json::Value exp;
Json::Reader{}.parse(
updateAPIVersionString(expVersioned, apiVersion), exp);
// Lambda to remove the "params[0u]:error_code" field if present.
// Error codes are not expected to be stable between releases.
auto rmErrorCode = [](Json::Value& json) {
if (json.isMember(jss::params) && json[jss::params].isArray() &&
json[jss::params].size() > 0 &&
json[jss::params][0u].isObject())
{
json[jss::params][0u].removeMember(jss::error_code);
}
};
rmErrorCode(got);
rmErrorCode(exp);
// Pass if we didn't expect a throw and we got what we expected.
if (got == exp)
{
pass();
}
else
{
fail(rpcCallTest.description, __FILE__, rpcCallTest.line);
}
}
}
void
run() override
{
forAllApiVersions(std::bind_front(&RPCCall_test::testRPCCall, this));
}
};
BEAST_DEFINE_TESTSUITE(RPCCall, rpc, ripple);
} // namespace test
} // namespace ripple