evmc/test/vmtester/tests.cpp

74 lines
2.3 KiB
C++
Raw Normal View History

2018-04-10 22:37:03 +00:00
// EVMC -- Ethereum Client-VM Connector API
// Copyright 2018 Pawel Bylica.
// Licensed under the MIT License. See the LICENSE file.
#include "vmtester.hpp"
#include <evmc/helpers.h>
2018-04-17 09:11:07 +00:00
#include <cstring>
2018-04-17 09:05:54 +00:00
// Compile time checks:
static_assert(sizeof(evmc_uint256be) == 32, "evmc_uint256be is too big");
static_assert(sizeof(evmc_address) == 20, "evmc_address is too big");
2018-06-25 14:02:24 +00:00
static_assert(sizeof(evmc_result) <= 64, "evmc_result does not fit cache line");
2018-04-17 09:05:54 +00:00
static_assert(sizeof(evmc_instance) <= 64, "evmc_instance does not fit cache line");
static_assert(offsetof(evmc_message, code_hash) % 8 == 0, "evmc_message.code_hash not aligned");
// Check enums match int size.
// On GCC/clang the underlying type should be unsigned int, on MSVC int
2018-05-11 11:24:33 +00:00
static_assert(sizeof(evmc_call_kind) == sizeof(int),
"Enum `evmc_call_kind` is not the size of int");
2018-04-17 09:05:54 +00:00
static_assert(sizeof(evmc_revision) == sizeof(int), "Enum `evmc_revision` is not the size of int");
static constexpr size_t optionalDataSize =
sizeof(evmc_result) - offsetof(evmc_result, create_address);
static_assert(optionalDataSize == sizeof(evmc_result_optional_storage), "");
2018-04-17 09:05:54 +00:00
2018-04-10 22:37:03 +00:00
TEST_F(evmc_vm_test, abi_version_match)
{
ASSERT_EQ(vm->abi_version, EVMC_ABI_VERSION);
}
TEST_F(evmc_vm_test, set_option_unknown)
{
if (vm->set_option)
{
int r = vm->set_option(vm, "unknown_option_csk9twq", "v");
EXPECT_EQ(r, 0);
r = vm->set_option(vm, "unknown_option_csk9twq", "x");
EXPECT_EQ(r, 0);
}
}
TEST_F(evmc_vm_test, set_option_empty_value)
{
if (vm->set_option)
{
int r = vm->set_option(vm, "unknown_option_csk9twq", nullptr);
EXPECT_EQ(r, 0);
}
2018-04-17 09:11:07 +00:00
}
TEST_F(evmc_vm_test, name)
{
ASSERT_NE(vm->name, nullptr);
EXPECT_GT(std::strlen(vm->name), 0) << "VM name cannot be empty";
}
TEST_F(evmc_vm_test, version)
{
ASSERT_NE(vm->version, nullptr);
EXPECT_GT(std::strlen(vm->version), 0) << "VM name cannot be empty";
}
TEST_F(evmc_vm_test, set_tracer)
{
static const auto tracer_callback = [](evmc_tracer_context*, size_t, evmc_status_code, int64_t,
size_t, const evmc_uint256be*, size_t, size_t, size_t,
const uint8_t*) noexcept {};
2018-06-18 12:22:16 +00:00
if (vm->set_tracer)
vm->set_tracer(vm, tracer_callback, nullptr);
}