carlos / platform Public

Clone
git clone https://amadan.net/carlos/platform

Plain git — no account needed to clone.

Download

Download this file

1package activator
2
3import (
4 "errors"
5 "testing"
6
7 "github.com/carlosframework/platform/internal/hostbox"
8 "github.com/carlosframework/platform/internal/registry"
9)
10
11func TestRev2ShapeIsolatedArgv(t *testing.T) {
12 const launch, run = "/data/instances/i1", "/run/carlos/instances/i1"
13 sock, db := run+"/app.sock", launch+"/app.db"
14 args := func(extra ...string) []string { return append([]string{"--socket", sock, "--db", db}, extra...) }
15 env := []string{"CARLOS_ADMIN_TOKEN=t", "A=1"}
16 argv, s, d, err := IsolatedArgv("h.example", launch, run, args(), env)
17 if err != nil || s != sock || d != db || len(argv) != 5 || argv[0] != "/opt/carlos/live/h.example" && argv[0] == "" {
18 t.Fatalf("valid: %v %q %q %v", err, s, d, argv)
19 }
20 for name, tc := range map[string]struct{ args, env []string }{
21 "odd": {args("--x"), env},
22 "extra": {args("--x", "y"), env},
23 "dup socket": {args("--socket", sock), env},
24 "dup db": {args("--db", db), env},
25 "NUL": {[]string{"--socket", sock + "\x00", "--db", db}, env},
26 "wrong dir": {[]string{"--socket", "/tmp/app.sock", "--db", db}, env},
27 "unclean": {[]string{"--socket", run + "/../i1/app.sock", "--db", db}, env},
28 "no env": {args(), nil},
29 "no token": {args(), []string{"A=1"}},
30 "empty token": {args(), []string{"CARLOS_ADMIN_TOKEN="}},
31 "dup env": {args(), append([]string{"A=2"}, env...)},
32 "bad env": {args(), append([]string{"X"}, env...)},
33 "NUL env": {args(), append([]string{"X=\x00"}, env...)},
34 } {
35 if _, _, _, err := IsolatedArgv("h.example", launch, run, tc.args, tc.env); !errors.Is(err, hostbox.ErrRoleLaunchShape) {
36 t.Fatalf("%s: %v", name, err)
37 }
38 }
39}
40
41func TestRev2ShapeClaimLaunchRoles(t *testing.T) {
42 b := &ExecBackend{DataDir: t.TempDir()}
43 if got, err := b.ClaimLaunchRoles(registry.Route{Host: "h.example"}); err != nil || len(got) != 1 || got[0] != "main" {
44 t.Fatalf("roles=%v err=%v", got, err)
45 }
46 if got, err := b.ClaimLaunchRoles(registry.Route{Host: "h.example", Seed: `["init"]`}); err != nil || len(got) != 2 || got[1] != "seed" {
47 t.Fatalf("roles=%v err=%v", got, err)
48 }
49}
50