upleb.uk

Public git repos — served from a NIP-34 GRASP relay at git.upleb.uk

summaryrefslogtreecommitdiff
path: root/tests/unit/test_tollgate_client_mining.c
diff options
context:
space:
mode:
Diffstat (limited to 'tests/unit/test_tollgate_client_mining.c')
-rw-r--r--tests/unit/test_tollgate_client_mining.c103
1 files changed, 103 insertions, 0 deletions
diff --git a/tests/unit/test_tollgate_client_mining.c b/tests/unit/test_tollgate_client_mining.c
new file mode 100644
index 0000000..e270864
--- /dev/null
+++ b/tests/unit/test_tollgate_client_mining.c
@@ -0,0 +1,103 @@
1#include "test_framework.h"
2#include "../../main/config.h"
3#include <string.h>
4#include <stdio.h>
5#include <stdlib.h>
6#include <cjson/cJSON.h>
7
8static tollgate_config_t g_test_config;
9
10const tollgate_config_t *tollgate_config_get(void) {
11 return &g_test_config;
12}
13
14uint64_t nucula_wallet_balance(void) { return 100; }
15esp_err_t nucula_wallet_send(uint64_t a, char *b, size_t c) { (void)a; (void)b; (void)c; return ESP_OK; }
16
17#include "freertos/FreeRTOS.h"
18
19#include "../../main/tollgate_client.c"
20
21int main(void)
22{
23 printf("=== test_tollgate_client_mining ===\n");
24
25 memset(&g_test_config, 0, sizeof(g_test_config));
26 g_test_config.client_enabled = true;
27
28 printf("\n--- mining tag: mining_available=true, port=3333 ---\n");
29 {
30 const char *json = "{\"kind\":10021,\"tags\":["
31 "[\"metric\",\"milliseconds\"],"
32 "[\"step_size\",\"60000\"],"
33 "[\"price_per_step\",\"0\",\"mining\",\"3333\",\"sat\"],"
34 "[\"tips\",\"1\",\"2\",\"5\"]"
35 "]}";
36
37 tollgate_discovery_t disc;
38 bool ok = parse_discovery_response(json, &disc);
39 ASSERT(ok, "mining discovery parsed");
40 ASSERT(disc.is_tollgate, "is_tollgate=true");
41 ASSERT(disc.mining_available, "mining_available=true");
42 ASSERT_EQ_INT(3333, (int)disc.mining_port, "mining_port=3333");
43 }
44
45 printf("\n--- mining tag: no mining tag ---\n");
46 {
47 const char *json = "{\"kind\":10021,\"tags\":["
48 "[\"metric\",\"milliseconds\"],"
49 "[\"step_size\",\"60000\"],"
50 "[\"price_per_step\",\"cashu\",\"21\",\"sat\",\"https://testnut.cashu.space\",\"1\"]"
51 "]}";
52
53 tollgate_discovery_t disc;
54 bool ok = parse_discovery_response(json, &disc);
55 ASSERT(ok, "cashu discovery parsed");
56 ASSERT(disc.is_tollgate, "is_tollgate=true");
57 ASSERT(!disc.mining_available, "mining_available=false");
58 ASSERT_EQ_INT(0, (int)disc.mining_port, "mining_port=0 when no mining");
59 ASSERT_EQ_INT(21, disc.price_per_step, "price_per_step=21 for cashu");
60 }
61
62 printf("\n--- mining tag: custom port 4033 ---\n");
63 {
64 const char *json = "{\"kind\":10021,\"tags\":["
65 "[\"metric\",\"milliseconds\"],"
66 "[\"step_size\",\"60000\"],"
67 "[\"price_per_step\",\"0\",\"mining\",\"4033\",\"sat\"]"
68 "]}";
69
70 tollgate_discovery_t disc;
71 bool ok = parse_discovery_response(json, &disc);
72 ASSERT(ok, "mining custom port parsed");
73 ASSERT(disc.mining_available, "mining_available=true");
74 ASSERT_EQ_INT(4033, (int)disc.mining_port, "mining_port=4033");
75 }
76
77 printf("\n--- tollgate_discovery_t zero-init ---\n");
78 {
79 tollgate_discovery_t disc = {0};
80 ASSERT(!disc.is_tollgate, "zero-init: is_tollgate=false");
81 ASSERT(!disc.mining_available, "zero-init: mining_available=false");
82 ASSERT_EQ_INT(0, (int)disc.mining_port, "zero-init: mining_port=0");
83 ASSERT_EQ_INT(0, disc.price_per_step, "zero-init: price=0");
84 }
85
86 printf("\n--- TG_CLIENT_MINING state enum ---\n");
87 {
88 ASSERT(TG_CLIENT_MINING > TG_CLIENT_PAID, "MINING > PAID in enum");
89 ASSERT(TG_CLIENT_MINING < TG_CLIENT_ERROR, "MINING < ERROR in enum");
90 }
91
92 printf("\n--- discovery struct fields ---\n");
93 {
94 tollgate_discovery_t disc;
95 memset(&disc, 0, sizeof(disc));
96 disc.mining_available = true;
97 disc.mining_port = 9999;
98 ASSERT(disc.mining_available, "mining_available set");
99 ASSERT_EQ_INT(9999, (int)disc.mining_port, "mining_port set");
100 }
101
102 TEST_SUMMARY();
103}