| 1 | package activator |
| 2 | |
| 3 | import ( |
| 4 | "errors" |
| 5 | "testing" |
| 6 | |
| 7 | "github.com/carlosframework/platform/internal/hostbox" |
| 8 | "github.com/carlosframework/platform/internal/registry" |
| 9 | ) |
| 10 | |
| 11 | func 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 | |
| 41 | func 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 | |