==> tests/state_file.c <==1/* loader.rs's state-file half of confined_and_catalog. */
2#include "mesh/check.h"
3#include "mesh/state_file.h"
4#include "mesh/text.h"
5
6#include <stdio.h>
7#include <stdlib.h>
8#include <string.h>
9#include <unistd.h>
10
11int main(void) {
12 char dir[] = "/tmp/meshd-state-XXXXXX";
13 CHECK(mkdtemp(dir) != NULL);
14 char *st = mesh_fmt("%s/state", dir);
15 mesh_saved *set;
16 size_t n;
17 char *err = NULL;
18 CHECK(mesh_state_read(st, &set, &n, &err) && n == 0);
19 mesh_saved want[] = {{"hello", "hello-v2", true}, {"x", "x", false}};
20 CHECK(mesh_state_write(st, want, 2, &err));
21 CHECK(mesh_state_read(st, &set, &n, &err));
22 CHECK_U(n, 2);
23 CHECK_S(set[0].name, "hello");
24 CHECK_S(set[0].dir, "hello-v2");
25 CHECK(set[0].running && !set[1].running);
26 mesh_state_free(set, n);
27 FILE *f = fopen(st, "w");
28 fputs("hello ../x 1\n", f);
29 fclose(f);
30 CHECK(!mesh_state_read(st, &set, &n, &err));
31 char *want_err = mesh_fmt("--state %s line 1: expected `name dir 0|1`, got \"hello ../x 1\"", st);
32 CHECK_S(err, want_err);
33 free(want_err);
34 free(err);
35 unlink(st);
36 free(st);
37 rmdir(dir);
38 return mesh_check_done();
39}