| 12 | ) |
| 13 | |
| 14 | func TestWriteSecretFiles(t *testing.T) { |
| 15 | t.Parallel() |
| 16 | |
| 17 | t.Run("AbsolutePath", func(t *testing.T) { |
| 18 | t.Parallel() |
| 19 | fs := afero.NewMemMapFs() |
| 20 | ctx := testutil.Context(t, testutil.WaitShort) |
| 21 | logger := slogtest.Make(t, nil) |
| 22 | |
| 23 | writeSecretFiles(ctx, logger, fs, "/home/coder", []agentsdk.WorkspaceSecret{ |
| 24 | {FilePath: "/etc/myapp/config.json", Value: []byte(`{"key":"val"}`)}, |
| 25 | }) |
| 26 | |
| 27 | content, err := afero.ReadFile(fs, "/etc/myapp/config.json") |
| 28 | require.NoError(t, err) |
| 29 | require.Equal(t, `{"key":"val"}`, string(content)) |
| 30 | |
| 31 | fi, err := fs.Stat("/etc/myapp/config.json") |
| 32 | require.NoError(t, err) |
| 33 | require.Equal(t, 0o600, int(fi.Mode().Perm())) |
| 34 | |
| 35 | di, err := fs.Stat("/etc/myapp") |
| 36 | require.NoError(t, err) |
| 37 | require.Equal(t, 0o700, int(di.Mode().Perm())) |
| 38 | }) |
| 39 | |
| 40 | t.Run("TildePath", func(t *testing.T) { |
| 41 | t.Parallel() |
| 42 | fs := afero.NewMemMapFs() |
| 43 | ctx := testutil.Context(t, testutil.WaitShort) |
| 44 | logger := slogtest.Make(t, nil) |
| 45 | |
| 46 | writeSecretFiles(ctx, logger, fs, "/home/coder", []agentsdk.WorkspaceSecret{ |
| 47 | {FilePath: "~/.ssh/id_rsa", Value: []byte("private-key")}, |
| 48 | }) |
| 49 | |
| 50 | content, err := afero.ReadFile(fs, "/home/coder/.ssh/id_rsa") |
| 51 | require.NoError(t, err) |
| 52 | require.Equal(t, "private-key", string(content)) |
| 53 | |
| 54 | fi, err := fs.Stat("/home/coder/.ssh/id_rsa") |
| 55 | require.NoError(t, err) |
| 56 | require.Equal(t, 0o600, int(fi.Mode().Perm())) |
| 57 | |
| 58 | di, err := fs.Stat("/home/coder/.ssh") |
| 59 | require.NoError(t, err) |
| 60 | require.Equal(t, 0o700, int(di.Mode().Perm())) |
| 61 | }) |
| 62 | |
| 63 | t.Run("TildePathNoHomeDir", func(t *testing.T) { |
| 64 | t.Parallel() |
| 65 | fs := afero.NewMemMapFs() |
| 66 | ctx := testutil.Context(t, testutil.WaitShort) |
| 67 | logger := slogtest.Make(t, nil) |
| 68 | |
| 69 | writeSecretFiles(ctx, logger, fs, "", []agentsdk.WorkspaceSecret{ |
| 70 | {FilePath: "~/.config/token", Value: []byte("token")}, |
| 71 | }) |