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