skip to content
==> tests/svc.c <==
1/* infer.rs's addresses_pick_the_shared_link. */
2#include "mesh/check.h"
3#include "mesh/infer_svc.h"
4
5#include <stdlib.h>
6#include <string.h>
7
8static const char *keys[][2] = {{"0.peer", "192.168.177.11:61200"}, {"0.lan", "192.168.1.187"},
9                                {"1.peer", "192.168.177.12:61201"}, {"1.lan", "192.168.1.177"},
10                                {"2.peer", "192.168.1.176:61202"},  {"3.peer", "192.168.1.173:61203"}};
11
12static const char *get(void *ctx, const char *k) {
13    (void)ctx;
14    for (size_t i = 0; i < sizeof keys / sizeof keys[0]; i++) if (!strcmp(keys[i][0], k)) return keys[i][1];
15    return NULL;
16}
17
18int main(void) {
19    mesh_infer_svc s;
20    char *err = NULL, a[300];
21    CHECK_I(mesh_infer_svc_cluster(&s, get, NULL, 0, 4, &err), 0);
22    mesh_infer_svc_addr(&s, 0, 1, 101, a);
23    CHECK_S(a, "192.168.177.12:61302");
24    mesh_infer_svc_addr(&s, 3, 0, 101, a);
25    CHECK_S(a, "192.168.1.187:61301");
26    mesh_infer_svc_addr(&s, 0, 3, 102, a);
27    CHECK_S(a, "192.168.1.173:61305");
28    mesh_infer_svc_addr(&s, 2, 2, 100, a);
29    CHECK_S(a, "127.0.0.1:61302");
30    CHECK_I(mesh_infer_svc_single(&s, "127.0.0.1:7700", &err), 0);
31    mesh_infer_svc_addr(&s, 0, 0, 100, a);
32    CHECK_S(a, "127.0.0.1:7800");
33    CHECK_I(mesh_infer_svc_cluster(&s, get, NULL, 0, 5, &err), -1);
34    CHECK_S(err, "cluster: no 4.peer");
35    free(err);
36    CHECK_I(mesh_infer_svc_single(&s, "nope", &err), -1);
37    CHECK_S(err, "\"nope\": host:port");
38    free(err);
39    CHECK_I(mesh_infer_svc_single(&s, "h:70000", &err), -1);
40    CHECK_S(err, "\"h:70000\": bad port");
41    free(err);
42    return mesh_check_done();
43}