upleb.uk

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

summaryrefslogtreecommitdiff
path: root/tests/unit/test_firewall_sandbox.c
blob: 66a491be19a45d1c8b931ec3f542ff693b8db911 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
#include "test_framework.h"
#include "../../main/firewall.h"
#include <stdio.h>
#include <string.h>

int main(void)
{
    printf("=== test_firewall_sandbox ===\n");

    printf("\n--- FW_MAX_MAC_LEN is 18 ---\n");
    {
        ASSERT_EQ_INT(18, FW_MAX_MAC_LEN, "MAC length is 18 (17 chars + null)");
    }

    printf("\n--- esp_ip4_addr_t available ---\n");
    {
        esp_ip4_addr_t ip;
        ip.addr = 0x0102A8C0;
        ASSERT(ip.addr == 0x0102A8C0, "ip4_addr stores value");
    }

    printf("\n--- firewall_set_mining_port / set_sandbox_mint_access compile ---\n");
    {
        firewall_set_mining_port(3333);
        firewall_set_mining_port(4033);
        firewall_set_sandbox_mint_access(true);
        firewall_set_sandbox_mint_access(false);
        ASSERT(true, "setters compile and run without crash");
    }

    printf("\n--- firewall_init + client management ---\n");
    {
        esp_ip4_addr_t ap_ip = { .addr = 0x012FA80A };
        esp_err_t ret = firewall_init(ap_ip);
        ASSERT_EQ_INT(ESP_OK, (int)ret, "firewall_init succeeds");
        ASSERT_EQ_INT(0, firewall_client_count(), "no clients after init");

        firewall_grant_access(0x0201A8C0);
        ASSERT_EQ_INT(1, firewall_client_count(), "1 client after grant");
        ASSERT(firewall_is_client_allowed(0x0201A8C0), "client is allowed");

        firewall_revoke_access(0x0201A8C0);
        ASSERT_EQ_INT(0, firewall_client_count(), "0 clients after revoke");
        ASSERT(!firewall_is_client_allowed(0x0201A8C0), "client not allowed after revoke");
    }

    printf("\n--- grant same IP twice ---\n");
    {
        esp_ip4_addr_t ap_ip = { .addr = 0x012FA80A };
        firewall_init(ap_ip);

        firewall_grant_access(0x0301A8C0);
        firewall_grant_access(0x0301A8C0);
        ASSERT_EQ_INT(1, firewall_client_count(), "duplicate grant does not double count");
    }

    printf("\n--- revoke non-existent ---\n");
    {
        firewall_revoke_access(0x99999999);
        ASSERT_EQ_INT(1, firewall_client_count(), "revoke non-existent no effect");
    }

    printf("\n--- revoke_all ---\n");
    {
        firewall_grant_access(0x0401A8C0);
        firewall_grant_access(0x0501A8C0);
        ASSERT_EQ_INT(3, firewall_client_count(), "3 clients");
        firewall_revoke_all();
        ASSERT_EQ_INT(0, firewall_client_count(), "0 after revoke_all");
    }

    printf("\n--- max clients (10) ---\n");
    {
        esp_ip4_addr_t ap_ip = { .addr = 0x012FA80A };
        firewall_init(ap_ip);

        for (int i = 0; i < 10; i++) {
            firewall_grant_access(0x0A000000 + i);
        }
        ASSERT_EQ_INT(10, firewall_client_count(), "10 clients at max");

        firewall_grant_access(0x0A000100);
        ASSERT_EQ_INT(10, firewall_client_count(), "still 10 after exceeding max");
    }

    printf("\n--- is_mac_allowed (no MACs resolved in stub) ---\n");
    {
        firewall_init((esp_ip4_addr_t){ .addr = 0x012FA80A });
        firewall_grant_access(0x0601A8C0);
        ASSERT(!firewall_is_mac_allowed(""), "empty MAC not allowed");
    }

    TEST_SUMMARY();
}