==> 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}