This commit is contained in:
Eddy Ashton 2020-11-24 13:49:13 +00:00 коммит произвёл GitHub
Родитель 18e3e03483
Коммит 81f53cedc5
Не найден ключ, соответствующий данной подписи
Идентификатор ключа GPG: 4AEE18F83AFDEB23
9 изменённых файлов: 63 добавлений и 43 удалений

Просмотреть файл

@ -666,6 +666,34 @@ if(BUILD_TESTS)
ADDITIONAL_ARGS --js-app-bundle ${CMAKE_SOURCE_DIR}/tests/js-content-types ADDITIONAL_ARGS --js-app-bundle ${CMAKE_SOURCE_DIR}/tests/js-content-types
) )
add_e2e_test(
NAME governance_test
PYTHON_SCRIPT ${CMAKE_SOURCE_DIR}/tests/governance.py
CONSENSUS cft
ADDITIONAL_ARGS --oe-binary ${OE_BINDIR} --initial-operator-count 1
)
add_e2e_test(
NAME governance_ca_certs_test
PYTHON_SCRIPT ${CMAKE_SOURCE_DIR}/tests/governance_ca_certs.py GOV_SCRIPT
${CCF_DIR}/src/runtime_config/gov_ca_certs.lua
CONSENSUS cft
)
add_e2e_test(
NAME governance_ca_cert_mismatch_test
PYTHON_SCRIPT
${CMAKE_SOURCE_DIR}/tests/governance_ca_cert_mismatch.py GOV_SCRIPT
${CCF_DIR}/src/runtime_config/gov_ca_cert_mismatch.lua
CONSENSUS cft
)
add_e2e_test(
NAME jwt_test
PYTHON_SCRIPT ${CMAKE_SOURCE_DIR}/tests/jwt_test.py
CONSENSUS cft
)
if(QUOTES_ENABLED) if(QUOTES_ENABLED)
add_e2e_test( add_e2e_test(
NAME reconfiguration_test NAME reconfiguration_test
@ -687,34 +715,6 @@ if(BUILD_TESTS)
CONSENSUS cft CONSENSUS cft
ADDITIONAL_ARGS --oe-binary ${OE_BINDIR} --raft-election-timeout 4000 ADDITIONAL_ARGS --oe-binary ${OE_BINDIR} --raft-election-timeout 4000
) )
add_e2e_test(
NAME governance_test
PYTHON_SCRIPT ${CMAKE_SOURCE_DIR}/tests/governance.py
CONSENSUS cft
ADDITIONAL_ARGS --oe-binary ${OE_BINDIR} --initial-operator-count 1
)
add_e2e_test(
NAME governance_ca_certs_test
PYTHON_SCRIPT ${CMAKE_SOURCE_DIR}/tests/governance_ca_certs.py GOV_SCRIPT
${CCF_DIR}/src/runtime_config/gov_ca_certs.lua
CONSENSUS cft
)
add_e2e_test(
NAME governance_ca_cert_mismatch_test
PYTHON_SCRIPT
${CMAKE_SOURCE_DIR}/tests/governance_ca_cert_mismatch.py GOV_SCRIPT
${CCF_DIR}/src/runtime_config/gov_ca_cert_mismatch.lua
CONSENSUS cft
)
add_e2e_test(
NAME jwt_test
PYTHON_SCRIPT ${CMAKE_SOURCE_DIR}/tests/jwt_test.py
CONSENSUS cft
)
endif() endif()
if(BUILD_SMALLBANK) if(BUILD_SMALLBANK)

Просмотреть файл

@ -97,6 +97,11 @@ namespace oversized
~FragmentReconstructor() ~FragmentReconstructor()
{ {
dispatcher.remove_message_handler(OversizedMessage::fragment); dispatcher.remove_message_handler(OversizedMessage::fragment);
for (const auto& [_, partial] : partial_messages)
{
delete[] partial.data;
}
} }
}; };

Просмотреть файл

@ -35,7 +35,7 @@ namespace ccf
} }
case nlohmann::json::value_t::object: case nlohmann::json::value_t::object:
{ {
lua_newtable(l); lua_createtable(l, 0, j.size());
for (auto it = j.begin(); it != j.end(); ++it) for (auto it = j.begin(); it != j.end(); ++it)
{ {
push_raw(l, it.value()); push_raw(l, it.value());
@ -44,7 +44,7 @@ namespace ccf
// Set custom __was_object metatable property // Set custom __was_object metatable property
if (lua_getmetatable(l, -1) == 0) if (lua_getmetatable(l, -1) == 0)
{ {
lua_newtable(l); lua_createtable(l, 0, 1);
} }
lua_pushboolean(l, true); lua_pushboolean(l, true);
lua_setfield(l, -2, "__was_object"); lua_setfield(l, -2, "__was_object");
@ -53,7 +53,7 @@ namespace ccf
} }
case nlohmann::json::value_t::array: case nlohmann::json::value_t::array:
{ {
lua_newtable(l); lua_createtable(l, j.size(), 0);
size_t i = 0; size_t i = 0;
for (const auto& v : j) for (const auto& v : j)
{ {
@ -64,7 +64,7 @@ namespace ccf
// Set custom __was_object metatable property // Set custom __was_object metatable property
if (lua_getmetatable(l, -1) == 0) if (lua_getmetatable(l, -1) == 0)
{ {
lua_newtable(l); lua_createtable(l, 0, 1);
} }
lua_pushboolean(l, false); lua_pushboolean(l, false);
lua_setfield(l, -2, "__was_object"); lua_setfield(l, -2, "__was_object");

Просмотреть файл

@ -116,11 +116,18 @@ namespace ccf
template <typename F0, typename F1> template <typename F0, typename F1>
auto check_and_convert(lua_State* l, int arg, F0 check, F1 convert) auto check_and_convert(lua_State* l, int arg, F0 check, F1 convert)
{ {
sanitize_stack_idx(l, arg); arg = sanitize_stack_idx(l, arg);
if (!check(l, arg)) // e.g., lua_isnumber() const auto stack_before = lua_gettop(l);
const auto check_ok = check(l, arg); // e.g., lua_isnumber()
expect_top(l, stack_before);
if (!check_ok)
throw ex("Lua stack object has wrong type."); throw ex("Lua stack object has wrong type.");
return convert(l, arg, nullptr); // e.g., lua_tonumberx() const auto convert_result =
convert(l, arg, nullptr); // e.g., lua_tonumberx()
expect_top(l, stack_before);
return convert_result;
} }
template <typename F0, typename F1> template <typename F0, typename F1>

Просмотреть файл

@ -71,7 +71,6 @@ namespace ccf
static int lua_verify_cert_and_get_claims(lua_State* l) static int lua_verify_cert_and_get_claims(lua_State* l)
{ {
LOG_INFO_FMT("lua_verify_cert_and_get_claims");
nlohmann::json json = lua::check_get<nlohmann::json>(l, -1); nlohmann::json json = lua::check_get<nlohmann::json>(l, -1);
std::vector<uint8_t> cert_der = json; std::vector<uint8_t> cert_der = json;

Просмотреть файл

@ -59,6 +59,6 @@ namespace ccf
}; };
DECLARE_JSON_TYPE_WITH_BASE(PrimarySignature, NodeSignature) DECLARE_JSON_TYPE_WITH_BASE(PrimarySignature, NodeSignature)
DECLARE_JSON_REQUIRED_FIELDS( DECLARE_JSON_REQUIRED_FIELDS(
PrimarySignature, seqno, view, commit_seqno, commit_view, root) PrimarySignature, seqno, view, commit_seqno, commit_view, root, tree)
using Signatures = kv::Map<ObjectId, PrimarySignature>; using Signatures = kv::Map<ObjectId, PrimarySignature>;
} }

Просмотреть файл

@ -19,7 +19,7 @@ namespace tls
// Obtain the size of the output buffer // Obtain the size of the output buffer
auto rc = mbedtls_base64_decode(nullptr, 0, &len_written, data, size); auto rc = mbedtls_base64_decode(nullptr, 0, &len_written, data, size);
if (rc != MBEDTLS_ERR_BASE64_BUFFER_TOO_SMALL) if (rc < 0 && rc != MBEDTLS_ERR_BASE64_BUFFER_TOO_SMALL)
{ {
throw std::logic_error(fmt::format( throw std::logic_error(fmt::format(
"Could not obtain length of decoded base64 buffer: {}", "Could not obtain length of decoded base64 buffer: {}",
@ -45,7 +45,7 @@ namespace tls
// Obtain required size for output buffer // Obtain required size for output buffer
auto rc = mbedtls_base64_encode(nullptr, 0, &len_written, data, size); auto rc = mbedtls_base64_encode(nullptr, 0, &len_written, data, size);
if (rc != MBEDTLS_ERR_BASE64_BUFFER_TOO_SMALL) if (rc < 0 && rc != MBEDTLS_ERR_BASE64_BUFFER_TOO_SMALL)
{ {
throw std::logic_error(fmt::format( throw std::logic_error(fmt::format(
"Could not obtain length required for encoded base64 buffer: {}", "Could not obtain length required for encoded base64 buffer: {}",
@ -63,9 +63,12 @@ namespace tls
fmt::format("Could not encode base64 string: {}", error_string(rc))); fmt::format("Could not encode base64 string: {}", error_string(rc)));
} }
// mbedtls includes the terminating null, but std-string provides this if (b64_string.size() > 0)
// already {
b64_string.pop_back(); // mbedtls includes the terminating null, but std-string provides this
// already
b64_string.pop_back();
}
return b64_string; return b64_string;
} }

Просмотреть файл

@ -12,6 +12,12 @@ namespace tls
constexpr size_t len = 256; constexpr size_t len = 256;
char buf[len]; char buf[len];
mbedtls_strerror(err, buf, len); mbedtls_strerror(err, buf, len);
if (strlen(buf) == 0)
{
return std::to_string(err);
}
return std::string(buf); return std::string(buf);
} }
} }

Просмотреть файл

@ -148,7 +148,7 @@ class Member:
with remote_node.client(f"member{self.member_id}") as mc: with remote_node.client(f"member{self.member_id}") as mc:
r = mc.post( r = mc.post(
"/gov/ack", "/gov/ack",
body={"state_digest": state_digest["state_digest"]}, body=state_digest,
signed=True, signed=True,
) )
assert r.status_code == 200, f"Error ACK: {r}" assert r.status_code == 200, f"Error ACK: {r}"