skip to content
==> tests/host_block.c <==
1/* Setters, counters, strings, and the snapshot copy with uptime and network counters. */
2#include "mesh/abi/host_net.h"
3#include "mesh/abi/host_status.h"
4#include "mesh/chan.h"
5#include "mesh/check.h"
6#include "mesh/host_block.h"
7
8#include <string.h>
9
10int main(void) {
11    static mesh_host_block h;
12    mesh_host_block_init(&h);
13    mesh_host_block_set_u32(&h, MESH_S_EPOCH, 7);
14    mesh_host_block_add_u32(&h, MESH_S_HTTP_REQUESTS, 3);
15    mesh_host_block_add_u32(&h, MESH_S_HTTP_REQUESTS, 4);
16    mesh_host_block_set_f32(&h, MESH_S_TASKS_PER_S, 2.5f);
17    mesh_host_block_set_u64(&h, MESH_S_LAST_BLINK_MS, 0x0102030405060708ull);
18    mesh_host_block_set_str(&h, MESH_S_HOSTNAME, 32, "dgx-00");
19    mesh_host_block_set_str(&h, MESH_S_LOCK_NAME, 4, "toolong");
20    uint32_t a = 1, b = 2;
21    mesh_host_field f[2] = {{MESH_S_SYSTEM, &a, 4}, {MESH_S_SYSTEMS, &b, 4}};
22    mesh_host_block_set_many(&h, f, 2);
23    CHECK_U(mesh_host_block_get_u32(&h, MESH_S_EPOCH), 7);
24    CHECK_U(mesh_host_block_get_u32(&h, MESH_S_HTTP_REQUESTS), 7);
25    CHECK(mesh_host_block_get_f32(&h, MESH_S_TASKS_PER_S) == 2.5f);
26    CHECK_U(mesh_host_block_get_u32(&h, MESH_S_SYSTEMS), 2);
27    mesh_net_counters_ctl(&h.net, 5, 9);
28    mesh_sleep_us(20000);
29    static uint8_t snap[MESH_SNAP_HOST];
30    mesh_host_block_bytes(&h, snap);
31    CHECK(memcmp(snap + MESH_S_HOSTNAME, "dgx-00\0", 7) == 0);
32    CHECK(memcmp(snap + MESH_S_LOCK_NAME, "too\0", 4) == 0);
33    CHECK(snap[MESH_S_LAST_BLINK_MS] == 8 && snap[MESH_S_LAST_BLINK_MS + 7] == 1);
34    CHECK(snap[MESH_S_CTL_RX] == 5 && snap[MESH_S_CTL_TX] == 9);
35    uint64_t up = 0;
36    for (int i = 7; i >= 0; i--) up = up << 8 | snap[MESH_S_UPTIME_MS + (size_t)i];
37    CHECK(up >= 15 && up < 5000);
38    return mesh_check_done();
39}