skip to content
==> 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}