Skip to content

Commit 9f0e1cb

Browse files
Few AI-generated unit tests to cover what is possible
1 parent 7a7557c commit 9f0e1cb

File tree

8 files changed

+1094
-0
lines changed

8 files changed

+1094
-0
lines changed

unit-tests/CMakeLists.txt

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,22 +53,29 @@ add_executable(test_display_utils test_display_utils.c)
5353
add_executable(test_parser test_parser.c)
5454
add_executable(test_script test_script.c)
5555
add_executable(test_wallet test_wallet.c)
56+
add_executable(test_musig_zeroing test_musig_zeroing.c)
57+
add_executable(test_merkle_return_values test_merkle_return_values.c)
5658

5759
# add_executable(test_crypto test_crypto.c)
5860

5961
# Mock libraries
6062
add_library(crypto_mocks SHARED libs/crypto_mocks.c)
6163
add_library(sha256 SHARED libs/sha-256.c)
64+
add_library(musig_test_mocks SHARED libs/musig_test_mocks.c)
65+
add_library(merkle_test_mocks SHARED libs/merkle_test_mocks.c)
6266

6367
# App's libraries
6468
add_library(base58 SHARED $ENV{BOLOS_SDK}/lib_standard_app/base58.c)
6569
add_library(bip32 SHARED $ENV{BOLOS_SDK}/lib_standard_app/bip32.c)
6670
add_library(buffer SHARED $ENV{BOLOS_SDK}/lib_standard_app/buffer.c)
6771
add_library(buffer_ext SHARED ../src/common/buffer_ext.c)
6872
add_library(display_utils SHARED ../src/ui/display_utils.c)
73+
add_library(musig SHARED ../src/musig/musig.c)
6974
add_library(parser SHARED ../src/common/parser_ext.c)
7075
add_library(read SHARED $ENV{BOLOS_SDK}/lib_standard_app/read.c)
7176
add_library(script SHARED ../src/common/script.c)
77+
add_library(secp256k1 SHARED ../src/secp256k1.c)
78+
add_library(get_merkleized_map_value SHARED ../src/handler/lib/get_merkleized_map_value.c)
7279
add_library(varint SHARED $ENV{BOLOS_SDK}/lib_standard_app/varint.c)
7380
add_library(wallet SHARED ../src/common/wallet.c)
7481
add_library(write SHARED $ENV{BOLOS_SDK}/lib_standard_app/write.c)
@@ -78,13 +85,23 @@ add_library(write SHARED $ENV{BOLOS_SDK}/lib_standard_app/write.c)
7885
# Mock libraries
7986
target_link_libraries(crypto_mocks PUBLIC sha256)
8087

88+
# Musig library needs the mock crypto functions and secp256k1 constants
89+
target_link_libraries(musig PUBLIC musig_test_mocks secp256k1 write)
90+
8191
# App's libraries
8292
target_link_libraries(test_bitvector PUBLIC cmocka gcov)
8393
target_link_libraries(test_buffer PUBLIC cmocka gcov buffer buffer_ext varint read write bip32)
8494
target_link_libraries(test_display_utils PUBLIC cmocka gcov display_utils)
8595
target_link_libraries(test_parser PUBLIC cmocka gcov parser buffer buffer_ext varint read write bip32)
8696
target_link_libraries(test_script PUBLIC cmocka gcov script buffer varint read write bip32)
8797
target_link_libraries(test_wallet PUBLIC cmocka gcov wallet script buffer buffer_ext varint read write bip32 base58 crypto_mocks)
98+
target_link_libraries(test_musig_zeroing PUBLIC cmocka gcov musig musig_test_mocks secp256k1)
99+
100+
# Merkle return value test: compile get_merkleized_map_value.c against mock sub-functions
101+
target_include_directories(get_merkleized_map_value PRIVATE ../src/common ../src/handler/lib)
102+
target_include_directories(test_merkle_return_values PRIVATE ../src/common ../src/handler/lib)
103+
target_link_libraries(get_merkleized_map_value PUBLIC merkle_test_mocks read)
104+
target_link_libraries(test_merkle_return_values PUBLIC cmocka gcov get_merkleized_map_value merkle_test_mocks read)
88105

89106
# target_link_libraries(test_crypto PUBLIC cmocka gcov crypto)
90107
add_test(test_bitvector test_bitvector)
@@ -93,5 +110,7 @@ add_test(test_display_utils test_display_utils)
93110
add_test(test_parser test_parser)
94111
add_test(test_script test_script)
95112
add_test(test_wallet test_wallet)
113+
add_test(test_musig_zeroing test_musig_zeroing)
114+
add_test(test_merkle_return_values test_merkle_return_values)
96115

97116
# add_test(test_crypto test_crypto)
Lines changed: 107 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,107 @@
1+
/**
2+
* Mock implementations for merkle/map value unit tests.
3+
*
4+
* Provides controllable mock versions of:
5+
* - call_get_merkle_leaf_index()
6+
* - call_get_merkle_leaf_element()
7+
* - merkle_compute_element_hash()
8+
*
9+
* These are the three functions called by call_get_merkleized_map_value().
10+
*/
11+
12+
#include <string.h>
13+
#include <stdint.h>
14+
#include <stddef.h>
15+
16+
#include "merkle_test_mocks.h"
17+
18+
/* Minimal type definitions needed - dispatcher_context_t is an opaque pointer here */
19+
typedef struct dispatcher_context_s dispatcher_context_t;
20+
21+
/* ---------- Internal mock state ---------- */
22+
23+
static int g_leaf_index_retval = 0;
24+
static int g_leaf_element_retval = 0;
25+
26+
/* ---------- Mock control API ---------- */
27+
28+
void merkle_mock_reset(void) {
29+
g_leaf_index_retval = 0;
30+
g_leaf_element_retval = 0;
31+
}
32+
33+
void merkle_mock_set_leaf_index_retval(int retval) {
34+
g_leaf_index_retval = retval;
35+
}
36+
37+
void merkle_mock_set_leaf_element_retval(int retval) {
38+
g_leaf_element_retval = retval;
39+
}
40+
41+
/* ---------- Mocked functions ---------- */
42+
43+
/**
44+
* Mock merkle_compute_element_hash.
45+
* Just fills the output with a dummy hash (no real SHA256 needed).
46+
*/
47+
void merkle_compute_element_hash(const uint8_t *in, size_t in_len, uint8_t out[32]) {
48+
(void) in;
49+
(void) in_len;
50+
memset(out, 0xAA, 32);
51+
}
52+
53+
/**
54+
* Mock call_get_merkle_leaf_index.
55+
* Returns whatever was configured via merkle_mock_set_leaf_index_retval().
56+
*
57+
* In real code, can return:
58+
* >= 0 on success (the index)
59+
* -1 parse failure
60+
* -2 invalid found value
61+
* -3 not found / interruption failure
62+
* -4 hash failure
63+
* -5 hash mismatch
64+
*/
65+
int call_get_merkle_leaf_index(dispatcher_context_t *dispatcher_context,
66+
size_t size,
67+
const uint8_t root[32],
68+
const uint8_t leaf_hash[32]) {
69+
(void) dispatcher_context;
70+
(void) size;
71+
(void) root;
72+
(void) leaf_hash;
73+
return g_leaf_index_retval;
74+
}
75+
76+
/**
77+
* Mock call_get_merkle_leaf_element.
78+
* Returns whatever was configured via merkle_mock_set_leaf_element_retval().
79+
*
80+
* When the configured return value is >= 0 (success), fills the output buffer
81+
* with a pattern of that many bytes.
82+
*
83+
* In real code, can return:
84+
* >= 0 on success (the length of the element)
85+
* -1 through -10 from call_get_merkle_preimage (various error codes)
86+
*/
87+
int call_get_merkle_leaf_element(dispatcher_context_t *dispatcher_context,
88+
const uint8_t merkle_root[32],
89+
uint32_t tree_size,
90+
uint32_t leaf_index,
91+
uint8_t *out_ptr,
92+
size_t out_ptr_len) {
93+
(void) dispatcher_context;
94+
(void) merkle_root;
95+
(void) tree_size;
96+
(void) leaf_index;
97+
98+
if (g_leaf_element_retval >= 0) {
99+
/* Simulate a successful read: fill buffer with dummy data */
100+
size_t fill_len = (size_t) g_leaf_element_retval;
101+
if (fill_len > out_ptr_len) {
102+
fill_len = out_ptr_len;
103+
}
104+
memset(out_ptr, 0xBB, fill_len);
105+
}
106+
return g_leaf_element_retval;
107+
}
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
#pragma once
2+
3+
/**
4+
* Mock control interface for merkle/map value unit tests.
5+
*
6+
* These allow configuring what call_get_merkle_leaf_index and
7+
* call_get_merkle_leaf_element return, enabling us to test
8+
* call_get_merkleized_map_value's error propagation behavior.
9+
*/
10+
11+
/**
12+
* Resets all mock state. Call before each test.
13+
*/
14+
void merkle_mock_reset(void);
15+
16+
/**
17+
* Set the return value that the mock call_get_merkle_leaf_index will return
18+
* on the next call.
19+
*/
20+
void merkle_mock_set_leaf_index_retval(int retval);
21+
22+
/**
23+
* Set the return value that the mock call_get_merkle_leaf_element will return
24+
* on the next call. When >= 0, the mock will also fill the output buffer
25+
* with a dummy pattern.
26+
*/
27+
void merkle_mock_set_leaf_element_retval(int retval);

0 commit comments

Comments
 (0)