upleb.uk

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

summaryrefslogtreecommitdiff
path: root/tests/unit/test_relay_validator.c
diff options
context:
space:
mode:
Diffstat (limited to 'tests/unit/test_relay_validator.c')
-rw-r--r--tests/unit/test_relay_validator.c76
1 files changed, 76 insertions, 0 deletions
diff --git a/tests/unit/test_relay_validator.c b/tests/unit/test_relay_validator.c
new file mode 100644
index 0000000..327eb99
--- /dev/null
+++ b/tests/unit/test_relay_validator.c
@@ -0,0 +1,76 @@
1#include "test_framework.h"
2#include "../../main/nostr_event.h"
3#include "../../main/identity.h"
4#include "../../components/wisp_relay/relay_validator.h"
5#include <string.h>
6#include <stdio.h>
7#include <stdlib.h>
8
9static const char *TEST_NSEC = "a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2";
10
11int main(void)
12{
13 printf("=== test_relay_validator ===\n");
14
15 identity_init(TEST_NSEC);
16 const tollgate_identity_t *id = identity_get();
17
18 printf("\n--- Valid event verification ---\n");
19 nostr_event_t event;
20 esp_err_t ret = nostr_event_init(&event, id->npub_hex, 1, "[]", "test relay validator");
21 ASSERT_EQ_INT(ESP_OK, ret, "event init succeeds");
22 ret = nostr_event_sign(&event, id->nsec);
23 ASSERT_EQ_INT(ESP_OK, ret, "event sign succeeds");
24
25 char json_buf[2048];
26 ret = nostr_event_to_json(&event, json_buf, sizeof(json_buf));
27 ASSERT_EQ_INT(ESP_OK, ret, "event to json succeeds");
28
29 bool valid = relay_validator_verify_event(json_buf, strlen(json_buf));
30 ASSERT(valid, "Valid event passes verification");
31
32 printf("\n--- Tampered event ID detection ---\n");
33 char *tampered = strdup(json_buf);
34 char *id_pos = strstr(tampered, event.id);
35 ASSERT(id_pos != NULL, "Found ID in JSON");
36 id_pos[0] = (id_pos[0] == 'a') ? 'b' : 'a';
37 bool tampered_valid = relay_validator_verify_event(tampered, strlen(tampered));
38 ASSERT(!tampered_valid, "Tampered event ID fails verification");
39 free(tampered);
40
41 printf("\n--- Tampered signature detection ---\n");
42 tampered = strdup(json_buf);
43 char *sig_pos = strstr(tampered, event.sig);
44 ASSERT(sig_pos != NULL, "Found sig in JSON");
45 sig_pos[0] = (sig_pos[0] == 'a') ? 'b' : 'a';
46 tampered_valid = relay_validator_verify_event(tampered, strlen(tampered));
47 ASSERT(!tampered_valid, "Tampered signature fails verification");
48 free(tampered);
49
50 printf("\n--- Tampered content detection ---\n");
51 tampered = strdup(json_buf);
52 char *content_pos = strstr(tampered, "test relay validator");
53 ASSERT(content_pos != NULL, "Found content in JSON");
54 content_pos[0] = 'X';
55 tampered_valid = relay_validator_verify_event(tampered, strlen(tampered));
56 ASSERT(!tampered_valid, "Tampered content fails verification");
57 free(tampered);
58
59 printf("\n--- Empty/invalid JSON ---\n");
60 ASSERT(!relay_validator_verify_event("", 0), "Empty string fails");
61 ASSERT(!relay_validator_verify_event("{}", 2), "Empty object fails");
62 ASSERT(!relay_validator_verify_event("not json", 8), "Non-JSON fails");
63 ASSERT(!relay_validator_verify_event("[1,2,3]", 7), "Array fails");
64
65 printf("\n--- Missing fields ---\n");
66 ASSERT(!relay_validator_verify_event("{\"id\":\"" "0000000000000000000000000000000000000000000000000000000000000000" "\"}", 71),
67 "Missing pubkey/sig fails");
68
69 printf("\n--- result_string ---\n");
70 ASSERT_EQ_STR("ok", relay_validator_result_string(VALIDATION_OK), "OK string");
71 ASSERT_EQ_STR("invalid: signature", relay_validator_result_string(VALIDATION_ERR_SIG), "SIG string");
72 ASSERT_EQ_STR("invalid: event id", relay_validator_result_string(VALIDATION_ERR_ID), "ID string");
73
74 printf("\n=== ALL TESTS PASSED ===\n");
75 return 0;
76}