skip to content
==> tests/views.c <==
1/* crates/mesh-top/tests/views.rs's records_parse, ported, on its FLEET fixture. */
2#include "mesh/check.h"
3#include "mesh/top_views.h"
4
5#include <stdio.h>
6#include <stdlib.h>
7#include <string.h>
8
9int main(void) {
10    FILE *f = fopen("tests/data/fleet.txt", "rb");
11    CHECK(f != NULL);
12    if (!f) return mesh_check_done();
13    char *t = calloc(1, 16384);
14    CHECK(fread(t, 1, 16383, f) > 0);
15    fclose(f);
16    mt_vrec *r;
17    size_t n = mt_views_parse(t, &r);
18    CHECK_S(r[0].kind, "fleet");
19    uint64_t u;
20    CHECK(mt_vrec_u(&r[0], "leader", &u) && u == 1);
21    CHECK_S(mt_vrec_get(&r[0], "suspect"), "3");
22    uint32_t list[8];
23    CHECK_U(mt_vrec_list(&r[0], "cordon", list, 8), 1);
24    CHECK_U(list[0], 2);
25    const mt_vrec *m3 = NULL;
26    size_t cells = 0;
27    for (size_t i = 0; i < n; i++) {
28        if (strcmp(r[i].kind, "member") == 0 && mt_vrec_u(&r[i], "id", &u) && u == 3) m3 = &r[i];
29        cells += strcmp(r[i].kind, "cell") == 0;
30    }
31    CHECK(m3 && mt_vrec_flag(m3, "busy") && mt_vrec_get(m3, "share") == NULL);
32    CHECK_S(m3->text, "busy: cpu 0.91 for 6 s");
33    CHECK_U(cells, 20);
34    mt_vrecs_free(r, n);
35    mt_view v = mt_view_new(0, 0, "err view \"x\": fleet, jobs or pipes [json]\n");
36    CHECK(v.n == 0 && v.err);
37    CHECK_S(v.err, "view \"x\": fleet, jobs or pipes [json]");
38    mt_view_free(&v);
39    double d;
40    CHECK(mt_parse_f64("0.48", &d) && d == 0.48);
41    CHECK(mt_parse_f64("-", &d) == false);
42    CHECK(mt_parse_f64("1e3", &d) && d == 1000.0);
43    CHECK(!mt_parse_f64("0x10", &d));
44    CHECK(mt_parse_u64("+7", &u) && u == 7);
45    CHECK(!mt_parse_u64("-7", &u));
46    free(t);
47    return mesh_check_done();
48}