Skip to content
Snippets Groups Projects
Commit baf4ca62 authored by pavel.uhanov's avatar pavel.uhanov
Browse files

hotfix-9910

parent 1d531786
No related branches found
No related tags found
No related merge requests found
Pipeline #33782 failed with stage
in 6 minutes and 50 seconds
Showing
with 247 additions and 33 deletions
......@@ -22,7 +22,17 @@ linux-amd64-tests:
before_script: /opt/buildtools/prepare_environment.sh amd64-linux
script:
- mkdir build
- cd build && cmake .. -DCMAKE_BUILD_TYPE=Release -DBUILD_CELLFRAME_SDK_TESTS=ON -DOFF_CORE_CELLFRAME_SDK_TESTS_OFF=network-monitor -DOFF_CRYPTO_CELLFRAME_SDK_TESTS_OFF="new-hope, multisign" && make -j$(nproc) && ctest
- cd build && cmake .. -DCMAKE_BUILD_TYPE=Release -DBUILD_CELLFRAME_SDK_TESTS=ON -DOFF_CORE_CELLFRAME_SDK_TESTS_OFF=network-monitor -DOFF_CRYPTO_CELLFRAME_SDK_TESTS_OFF="multisign" && make -j$(nproc) && ctest --verbose
linux-amd64-tests-clang:
extends: .tests
image: demlabs/amd64/debian-bullseye:linuxbuilder
before_script: /opt/buildtools/prepare_environment.sh amd64-linux
script:
- mkdir build
- cd build && cmake .. -DCMAKE_C_COMPILER=clang -DCMAKE_BUILD_TYPE=Release -DBUILD_CELLFRAME_SDK_TESTS=ON -DOFF_CORE_CELLFRAME_SDK_TESTS_OFF=network-monitor -DOFF_CRYPTO_CELLFRAME_SDK_TESTS_OFF="multisign" && make -j$(nproc) && ctest --verbose
linux-arm32v7-tests:
extends: .tests
......@@ -30,7 +40,15 @@ linux-arm32v7-tests:
before_script: /opt/buildtools/prepare_environment.sh arm32v7-linux
script:
- mkdir build
- cd build && cmake .. -DCMAKE_BUILD_TYPE=Release -DBUILD_CELLFRAME_SDK_TESTS=ON -DOFF_CORE_CELLFRAME_SDK_TESTS_OFF=network-monitor -DOFF_CRYPTO_CELLFRAME_SDK_TESTS_OFF="new-hope, multisign" && make -j$(nproc) && ctest
- cd build && cmake .. -DCMAKE_BUILD_TYPE=Release -DBUILD_CELLFRAME_SDK_TESTS=ON -DOFF_CORE_CELLFRAME_SDK_TESTS_OFF=network-monitor -DOFF_CRYPTO_CELLFRAME_SDK_TESTS_OFF="multisign" && make -j$(nproc) && ctest --verbose
linux-arm32v7-tests-clang:
extends: .tests
image: demlabs/arm32v7/debian-bullseye:linuxbuilder
before_script: /opt/buildtools/prepare_environment.sh arm32v7-linux
script:
- mkdir build
- cd build && cmake .. -DCMAKE_C_COMPILER=clang -DCMAKE_BUILD_TYPE=Release -DBUILD_CELLFRAME_SDK_TESTS=ON -DOFF_CORE_CELLFRAME_SDK_TESTS_OFF=network-monitor -DOFF_CRYPTO_CELLFRAME_SDK_TESTS_OFF="multisign" && make -j$(nproc) && ctest --verbose
linux-arm64v8-tests:
extends: .tests
......@@ -38,7 +56,15 @@ linux-arm64v8-tests:
before_script: /opt/buildtools/prepare_environment.sh arm64-linux
script:
- mkdir build
- cd build && cmake .. -DCMAKE_BUILD_TYPE=Release -DBUILD_CELLFRAME_SDK_TESTS=ON -DOFF_CORE_CELLFRAME_SDK_TESTS_OFF=network-monitor -DOFF_CRYPTO_CELLFRAME_SDK_TESTS_OFF="new-hope, multisign" && make -j$(nproc) && ctest
- cd build && cmake .. -DCMAKE_BUILD_TYPE=Release -DBUILD_CELLFRAME_SDK_TESTS=ON -DOFF_CORE_CELLFRAME_SDK_TESTS_OFF=network-monitor -DOFF_CRYPTO_CELLFRAME_SDK_TESTS_OFF="multisign" && make -j$(nproc) && ctest --verbose
linux-arm64v8-tests-clang:
extends: .tests
image: demlabs/arm64v8/debian-bullseye:linuxbuilder
before_script: /opt/buildtools/prepare_environment.sh arm64-linux
script:
- mkdir build
- cd build && cmake .. -DCMAKE_C_COMPILER=clang -DCMAKE_BUILD_TYPE=Release -DBUILD_CELLFRAME_SDK_TESTS=ON -DOFF_CORE_CELLFRAME_SDK_TESTS_OFF=network-monitor -DOFF_CRYPTO_CELLFRAME_SDK_TESTS_OFF="multisign" && make -j$(nproc) && ctest --verbose
windows-tests:
extends: .tests
......
......@@ -10,6 +10,11 @@ if (INSTALL_SDK)
set(INSTALL_DAP_SDK ON)
endif()
# problem in /usr/include/linux/netlink.h:99:24: note: expanded from macro 'NLMSG_OK' (nlh)->nlmsg_len <= (len)
if(CMAKE_C_COMPILER MATCHES "clang")
add_compile_options(-Wno-sign-compare)
endif()
if(NOT DEFINED CELLFRAME_MODULES)
include (dap-sdk/cmake/OS_Detection.cmake)
......@@ -45,6 +50,7 @@ else()
endif(NOT DAP_INT128_SUPPORT)
if (BUILD_CELLFRAME_SDK_TESTS)
enable_testing()
add_definitions("-DDAP_LEDGER_TEST")
endif()
......
......@@ -6,6 +6,10 @@ file(GLOB DAP_CHAIN_COMMON_HEADERS include/*.h)
add_library(${PROJECT_NAME} STATIC ${DAP_CHAIN_COMMON_SRCS} ${DAP_CHAIN_COMMON_HEADERS})
if(BUILD_CELLFRAME_SDK_TESTS)
add_subdirectory(tests)
endif()
target_link_libraries(${PROJECT_NAME} dap_core dap_crypto dap_json-c)
target_include_directories(${PROJECT_NAME} PUBLIC include/ )
target_include_directories(${PROJECT_NAME} PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/../../../dap-sdk/3rdparty/json-c)
......
......@@ -36,9 +36,9 @@ typedef struct dap_chain_tx_in{
struct {
dap_chain_tx_item_type_t type; /// @param type @brief Transaction item type
dap_chain_hash_fast_t tx_prev_hash; /// @param tx_prev_hash @brief Hash of the previous transaction. 0 for generation TX
uint32_t tx_out_prev_idx; /// @param tx_prev_idx @brief Previous tx_out index. 0 for generation TX
} header; /// Only header's hash is used for verification
} DAP_ALIGN_PACKED dap_chain_tx_in_t;
uint32_t tx_out_prev_idx DAP_ALIGNED(4); /// @param tx_prev_idx @brief Previous tx_out index. 0 for generation TX
} DAP_PACKED header; /// Only header's hash is used for verification
} DAP_PACKED dap_chain_tx_in_t;
typedef struct dap_chain_tx_used_out_item {
dap_chain_hash_fast_t tx_hash_fast;
......
......@@ -34,9 +34,9 @@
typedef struct dap_chain_tx_in_cond {
struct {
dap_chain_tx_item_type_t type :8; /// @param type @brief Transaction item type
dap_chain_tx_item_type_t type; /// @param type @brief Transaction item type
dap_chain_hash_fast_t tx_prev_hash; /// @param tx_prev_hash @brief Hash of the previous transaction. 0 for generation TX
uint32_t tx_out_prev_idx; /// @param tx_prev_idx @brief Previous tx_out index. 0 for generation TX
uint32_t receipt_idx;
} header;
} DAP_ALIGN_PACKED dap_chain_tx_in_cond_t;
uint32_t tx_out_prev_idx DAP_ALIGNED(4); /// @param tx_prev_idx @brief Previous tx_out index. 0 for generation TX
uint32_t receipt_idx DAP_ALIGNED(4);
} DAP_PACKED header; /// Only header's hash is used for verification
} DAP_PACKED dap_chain_tx_in_cond_t;
......@@ -34,13 +34,12 @@
*/
typedef struct dap_chain_tx_in_ems {
struct {
dap_chain_tx_item_type_t type;
dap_chain_tx_item_type_t type ;
char ticker[DAP_CHAIN_TICKER_SIZE_MAX];
uint8_t padding; // Padding
dap_chain_id_t token_emission_chain_id;
dap_chain_id_t token_emission_chain_id DAP_ALIGNED(4);
dap_hash_fast_t token_emission_hash;
} header; /// Only header's hash is used for verification
} DAP_ALIGN_PACKED dap_chain_tx_in_ems_t;
} DAP_PACKED header; /// Only header's hash is used for verification
} DAP_PACKED dap_chain_tx_in_ems_t;
/**
......
......@@ -35,16 +35,16 @@
typedef struct dap_chain_tx_out_old {
struct {
dap_chain_tx_item_type_t type; /// @param type @brief Transaction item type
uint64_t value; /// @param value @brief Number of Datoshis ( DAP/10^9 ) to be transfered
} header; /// Only header's hash is used for verification
uint64_t value DAP_ALIGNED(8); /// @param value @brief Number of Datoshis ( DAP/10^9 ) to be transfered
} DAP_PACKED header; /// Only header's hash is used for verification
dap_chain_addr_t addr; ////
} DAP_ALIGN_PACKED dap_chain_tx_out_old_t;
} DAP_PACKED dap_chain_tx_out_old_t;
//256
typedef struct dap_chain_tx_out {
struct {
dap_chain_tx_item_type_t type; /// @param type @brief Transaction item type
uint256_t value; /// @param value @brief Number of Datoshis ( DAP/10^9 ) to be transfered
} header;
} DAP_PACKED header; /// Only header's hash is used for verification
dap_chain_addr_t addr; ////
} DAP_ALIGN_PACKED dap_chain_tx_out_t;
} DAP_PACKED dap_chain_tx_out_t;
......@@ -32,8 +32,8 @@
typedef struct dap_chain_tx_out_ext{
struct {
dap_chain_tx_item_type_t type; // Transaction item type - should be TX_ITEM_TYPE_OUT_EXT
uint256_t value; // Number of Datoshis ( DAP/10^9 ) to be transfered
} header; // Only header's hash is used for verification
uint256_t value; // Number of Datoshis ( DAP/10^8 ) to be transfered
} DAP_PACKED header; // Only header's hash is used for verification
dap_chain_addr_t addr; // Address to transfer to
const char token[DAP_CHAIN_TICKER_SIZE_MAX]; // Which token is transferred
} DAP_ALIGN_PACKED dap_chain_tx_out_ext_t;
} DAP_PACKED dap_chain_tx_out_ext_t;
......@@ -35,8 +35,8 @@ typedef struct dap_chain_tx_pkey{
struct {
dap_chain_tx_item_type_t type; /// @param type @brief Transaction item type
dap_sign_type_t sig_type; /// Signature type
uint32_t sig_size; /// Signature size
} header; /// Only header's hash is used for verification
uint32_t sig_size DAP_ALIGNED(4); /// Signature size
} DAP_PACKED header; /// Only header's hash is used for verification
uint32_t seq_no; /// Sequence number, out of the header so could be changed during reorganization
uint8_t pkey[]; /// @param sig @brief raw pkey dat
} DAP_ALIGN_PACKED dap_chain_tx_pkey_t;
} DAP_PACKED dap_chain_tx_pkey_t;
......@@ -36,7 +36,7 @@
typedef struct dap_chain_tx_sig{
struct {
dap_chain_tx_item_type_t type; /// @param type @brief Transaction item type
uint32_t sig_size; /// Signature size
} header; /// Only header's hash is used for verification
uint32_t sig_size DAP_ALIGNED(4); /// Signature size
} DAP_PACKED header; /// Only header's hash is used for verification
uint8_t sig[]; /// @param sig @brief raw signature data
} DAP_ALIGN_PACKED dap_chain_tx_sig_t;
} DAP_PACKED dap_chain_tx_sig_t;
......@@ -8,8 +8,8 @@
typedef struct dap_chain_tx_tsd {
struct {
dap_chain_tx_item_type_t type;
size_t size;
} header;
uint64_t size DAP_ALIGNED(8);
} DAP_PACKED header;
byte_t tsd[];
} DAP_ALIGN_PACKED dap_chain_tx_tsd_t;
} DAP_PACKED dap_chain_tx_tsd_t;
cmake_minimum_required(VERSION 3.10)
project(struct-packing-test)
file(GLOB DAP_CHAIN_TESTS_HEADERS include/*.h)
file(GLOB DAP_CHAIN_TESTS_SRC *.c)
add_executable(${PROJECT_NAME} ${DAP_CHAIN_TESTS_SRC} ${DAP_CHAIN_TESTS_HEADERS})
target_link_libraries(${PROJECT_NAME} dap_test dap_core dap_crypto)
include_directories(../include)
if (DARWIN)
target_link_libraries(${PROJECT_NAME} bz2)
endif()
target_include_directories(${PROJECT_NAME} PUBLIC include)
add_test(
NAME struct-packing-test
COMMAND struct-packing-test
)
#include "dap_struct_packing_tests.h"
#include "dap_math_ops.h"
#include "dap_chain_datum_tx_out.h"
#include "dap_chain_datum_tx_in_cond.h"
#include "dap_chain_datum_tx_in_ems.h"
#include "dap_chain_datum_tx_in.h"
#include "dap_chain_datum_tx_out_cond.h"
#include "dap_chain_datum_tx_out_ext.h"
#include "dap_chain_datum_tx_pkey.h"
#include "dap_chain_datum_tx_sig.h"
#include "dap_chain_datum_tx_tsd.h"
DAP_STATIC_INLINE int s_get_delta_addr(const void *a_addr_1, const void *a_addr_2)
{
return a_addr_2 - a_addr_1;
}
static int s_chain_tx_in_cond_test()
{
dap_print_module_name("dap_chain_tx_in_cond_test");
dap_chain_tx_in_cond_t s = {0};
dap_assert(sizeof(s) == 44, "size");
dap_assert(sizeof(s.header) == 44, "header size");
dap_assert(s_get_delta_addr(&s, &s.header) == 0, "header");
dap_assert(s_get_delta_addr(&s, &s.header.type) == 0, "header.type");
dap_assert(s_get_delta_addr(&s, &s.header.tx_prev_hash) == 1, "header.tx_prev_hash");
dap_assert(s_get_delta_addr(&s, &s.header.tx_out_prev_idx) == 36, "header.tx_out_prev_idx");
dap_assert(s_get_delta_addr(&s, &s.header.receipt_idx) == 40, "header.receipt_idx");
return 0;
}
static int s_chain_datum_tx_in_ems_test()
{
dap_print_module_name("dap_chain_datum_tx_in_ems_test");
dap_chain_tx_in_ems_t s = {0};
dap_assert(sizeof(s) == 52, "size");
dap_assert(sizeof(s.header) == 52, "header size");
dap_assert(s_get_delta_addr(&s, &s.header) == 0, "header");
dap_assert(s_get_delta_addr(&s, &s.header.type) == 0, "header.type");
dap_assert(s_get_delta_addr(&s, &s.header.ticker) == 1, "header.ticker");
dap_assert(s_get_delta_addr(&s, &s.header.token_emission_chain_id) == 12, "header.tx_out_prev_idx");
dap_assert(s_get_delta_addr(&s, &s.header.token_emission_hash) == 20, "header.receipt_idx");
return 0;
}
static int s_chain_tx_in_test()
{
dap_print_module_name("dap_chain_tx_in_test");
dap_chain_tx_in_t s = {0};
dap_assert(sizeof(s) == 40, "size");
dap_assert(sizeof(s.header) == 40, "header size");
dap_assert(s_get_delta_addr(&s, &s.header) == 0, "header");
dap_assert(s_get_delta_addr(&s, &s.header.type) == 0, "header.type");
dap_assert(s_get_delta_addr(&s, &s.header.tx_prev_hash) == 1, "header.tx_prev_hash");
dap_assert(s_get_delta_addr(&s, &s.header.tx_out_prev_idx) == 36, "header.tx_out_prev_idx");
return 0;
}
static int s_chain_tx_out_ext_test()
{
dap_print_module_name("dap_chain_tx_out_ext_test");
dap_chain_tx_out_ext_t s = {0};
dap_assert(sizeof(s) == 120, "size");
dap_assert(sizeof(s.header) == 33, "header size");
dap_assert(s_get_delta_addr(&s, &s.header) == 0, "header");
dap_assert(s_get_delta_addr(&s, &s.header.type) == 0, "header.type");
dap_assert(s_get_delta_addr(&s, &s.header.value) == 1, "header.value");
dap_assert(s_get_delta_addr(&s, &s.addr) == 33, "addr");
dap_assert(s_get_delta_addr(&s, &s.token) == 110, "token");
return 0;
}
static int s_chain_tx_out_test()
{
dap_print_module_name("dap_chain_tx_out_test");
dap_chain_tx_out_old_t s_old = {0};
dap_assert(sizeof(s_old) == 93, "old size");
dap_assert(sizeof(s_old.header) == 16, "old.header size");
dap_assert(s_get_delta_addr(&s_old, &s_old.header) == 0, "old.header");
dap_assert(s_get_delta_addr(&s_old, &s_old.header.type) == 0, "old.header.type");
dap_assert(s_get_delta_addr(&s_old, &s_old.header.value) == 8, "old.header.value");
dap_assert(s_get_delta_addr(&s_old, &s_old.addr) == 16, "old.header.addr");
dap_chain_tx_out_t s = {0};
dap_assert(sizeof(s) == 110, "new size");
dap_assert(sizeof(s.header) == 33, "new.header size");
dap_assert(s_get_delta_addr(&s, &s.header) == 0, "new.header");
dap_assert(s_get_delta_addr(&s, &s.header.type) == 0, "new.header.type");
dap_assert(s_get_delta_addr(&s, &s.header.value) == 1, "new.header.value");
dap_assert(s_get_delta_addr(&s, &s.addr) == 33, "new.header.addr");
return 0;
}
static int s_chain_tx_pkey_test()
{
dap_print_module_name("dap_chain_tx_pkey_test");
dap_chain_tx_pkey_t s = {0};
dap_assert(sizeof(s) == 16, "size");
dap_assert(sizeof(s.header) == 12, "header size");
dap_assert(s_get_delta_addr(&s, &s.header) == 0, "header");
dap_assert(s_get_delta_addr(&s, &s.header.type) == 0, "header.type");
dap_assert(s_get_delta_addr(&s, &s.header.sig_type) == 1, "header.sig_type");
dap_assert(s_get_delta_addr(&s, &s.header.sig_size) == 8, "header.sig_size");
dap_assert(s_get_delta_addr(&s, &s.seq_no) == 12, "seq_no");
dap_assert(s_get_delta_addr(&s, &s.pkey) == 16, "pkey");
return 0;
}
static int s_chain_tx_sig_test()
{
dap_print_module_name("dap_chain_tx_sig_test");
dap_chain_tx_sig_t s = {0};
dap_assert(sizeof(s) == 8, "size");
dap_assert(sizeof(s.header) == 8, "header size");
dap_assert(s_get_delta_addr(&s, &s.header) == 0, "header");
dap_assert(s_get_delta_addr(&s, &s.header.type) == 0, "header.type");
dap_assert(s_get_delta_addr(&s, &s.header.sig_size) == 4, "header.sig_size");
dap_assert(s_get_delta_addr(&s, &s.sig) == 8, "sig");
return 0;
}
static int s_chain_tx_tsd_test()
{
dap_print_module_name("dap_chain_tx_sig_test");
dap_chain_tx_tsd_t s = {0};
dap_assert(sizeof(s) == 16, "size");
dap_assert(sizeof(s.header) == 16, "header size");
dap_assert(s_get_delta_addr(&s, &s.header) == 0, "header");
dap_assert(s_get_delta_addr(&s, &s.header.type) == 0, "header.type");
dap_assert(s_get_delta_addr(&s, &s.header.size) == 8, "header.size");
dap_assert(s_get_delta_addr(&s, &s.tsd) == 16, "tsd");
return 0;
}
void dap_struct_packing_test_run(void){
dap_print_module_name("dap_struct_packing");
s_chain_tx_in_cond_test();
s_chain_datum_tx_in_ems_test();
s_chain_tx_in_test();
s_chain_tx_out_ext_test();
s_chain_tx_out_test();
s_chain_tx_pkey_test();
s_chain_tx_sig_test();
s_chain_tx_tsd_test();
}
\ No newline at end of file
#include "dap_test.h"
void dap_struct_packing_test_run(void);
//dap_ledger_t *dap_chain_ledger_create_test();
#include "dap_struct_packing_tests.h"
int main(void){
dap_struct_packing_test_run();
return 0;
}
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment