Files
kopia/cli/command_repository_create_test.go
2025-04-15 22:49:13 -07:00

64 lines
2.2 KiB
Go

package cli_test
import (
"os"
"path"
"strings"
"testing"
"github.com/stretchr/testify/require"
"github.com/kopia/kopia/repo"
"github.com/kopia/kopia/repo/blob"
"github.com/kopia/kopia/repo/blob/filesystem"
"github.com/kopia/kopia/tests/testenv"
)
func TestRepositoryCreateWithConfigFile(t *testing.T) {
env := testenv.NewCLITest(t, nil, testenv.NewInProcRunner(t))
_, stderr := env.RunAndExpectFailure(t, "repo", "create", "from-config", "--file", path.Join(env.ConfigDir, "does_not_exist.config"))
require.Contains(t, stderr, "can't connect to storage: one of --token-file, --token-stdin or --token must be provided")
_, stderr = env.RunAndExpectFailure(t, "repo", "connect", "from-config")
require.Contains(t, stderr, "can't connect to storage: one of --file, --token-file, --token-stdin or --token must be provided")
_, stderr = env.RunAndExpectFailure(t, "repo", "create", "from-config", "--token", "bad-token")
require.Contains(t, stderr, "can't connect to storage: invalid token: unable to decode token")
storageCfgFName := path.Join(env.ConfigDir, "storage-config.json")
ci := blob.ConnectionInfo{
Type: "filesystem",
Config: filesystem.Options{Path: env.RepoDir},
}
token, err := repo.EncodeToken("12345678", ci)
require.NoError(t, err)
// expect failure before writing to file
_, stderr = env.RunAndExpectFailure(t, "repo", "create", "from-config", "--token-file", storageCfgFName)
require.Contains(t, strings.Join(stderr, "\n"), "can't connect to storage: unable to open token file")
require.NoError(t, os.WriteFile(storageCfgFName, []byte(token), 0o600))
defer os.Remove(storageCfgFName) //nolint:errcheck,gosec
env.RunAndExpectSuccess(t, "repo", "create", "from-config", "--token-file", storageCfgFName)
}
func TestRepositoryCreateWithConfigFromStdin(t *testing.T) {
runner := testenv.NewInProcRunner(t)
env := testenv.NewCLITest(t, nil, runner)
ci := blob.ConnectionInfo{
Type: "filesystem",
Config: filesystem.Options{Path: env.RepoDir},
}
token, err := repo.EncodeToken("12345678", ci)
require.NoError(t, err)
// set stdin
runner.SetNextStdin(strings.NewReader(token))
env.RunAndExpectSuccess(t, "repo", "create", "from-config", "--token-stdin")
}