diff --git a/src/ripple/app/misc/NetworkOPs.cpp b/src/ripple/app/misc/NetworkOPs.cpp index e926f786ba1..a431b5562d3 100644 --- a/src/ripple/app/misc/NetworkOPs.cpp +++ b/src/ripple/app/misc/NetworkOPs.cpp @@ -3150,10 +3150,15 @@ NetworkOPsImp::transJson( } MultiApiJson multiObj({jvObj, jvObj}); - static_assert(MultiApiJson::size == 2); - static_assert(RPC::apiMinimumSupportedVersion == 1); - for (unsigned apiVersion = 1, lastIndex = MultiApiJson::size; - apiVersion <= 2; + // Minimum supported API version must match index 0 in MultiApiJson + static_assert(apiVersionSelector(RPC::apiMinimumSupportedVersion)() == 0); + // Beta API version must match last index in MultiApiJson + static_assert( + apiVersionSelector(RPC::apiBetaVersion)() + 1 // + == MultiApiJson::size); + for (unsigned apiVersion = RPC::apiMinimumSupportedVersion, + lastIndex = MultiApiJson::size; + apiVersion <= RPC::apiBetaVersion; ++apiVersion) { unsigned const index = apiVersionSelector(apiVersion)(); diff --git a/src/test/json/MultivarJson_test.cpp b/src/test/json/MultivarJson_test.cpp index 1658ea711bf..8cb3a49aff2 100644 --- a/src/test/json/MultivarJson_test.cpp +++ b/src/test/json/MultivarJson_test.cpp @@ -18,6 +18,7 @@ //============================================================================== #include +#include #include #include "ripple/beast/unit_test/suite.hpp" @@ -244,6 +245,7 @@ struct MultivarJson_test : beast::unit_test::suite } { + // NOTE It's fine to change this test when we change API versions testcase("apiVersionSelector"); static_assert(MultiApiJson::size == 2); @@ -269,6 +271,19 @@ struct MultivarJson_test : beast::unit_test::suite apiVersionSelector( std::numeric_limits::max())() == 1); } + + { + // There should be no reson to change this test + testcase("apiVersionSelector invariants"); + + static_assert( + apiVersionSelector(RPC::apiMinimumSupportedVersion)() == 0); + static_assert( + apiVersionSelector(RPC::apiBetaVersion)() + 1 // + == MultiApiJson::size); + + BEAST_EXPECT(MultiApiJson::size >= 1); + } } };