Files
kopia/internal/user/user_manager_test.go
2021-09-08 18:44:03 -07:00

114 lines
3.1 KiB
Go

package user_test
import (
"errors"
"testing"
"github.com/stretchr/testify/require"
"github.com/kopia/kopia/internal/repotesting"
"github.com/kopia/kopia/internal/user"
)
func TestUserManager(t *testing.T) {
ctx, env := repotesting.NewEnvironment(t, repotesting.FormatNotImportant)
if _, err := user.GetUserProfile(ctx, env.RepositoryWriter, "alice@somehost"); !errors.Is(err, user.ErrUserNotFound) {
t.Fatalf("unexpected error: %v", err)
}
require.NoError(t, user.SetUserProfile(ctx, env.RepositoryWriter, &user.Profile{
Username: "alice@somehost",
PasswordHash: []byte("hahaha"),
}))
if _, err := user.GetUserProfile(ctx, env.RepositoryWriter, "bob"); !errors.Is(err, user.ErrUserNotFound) {
t.Fatalf("unexpected error: %v", err)
}
a, err := user.GetUserProfile(ctx, env.RepositoryWriter, "alice@somehost")
if err != nil {
t.Fatalf("unexpected error: %v", err)
}
if got, want := string(a.PasswordHash), "hahaha"; got != want {
t.Errorf("unexpected password hash: %v, want %v", got, want)
}
require.NoError(t, user.SetUserProfile(ctx, env.RepositoryWriter, &user.Profile{
Username: "alice@somehost",
PasswordHash: []byte("hehehehe"),
}))
a, err = user.GetUserProfile(ctx, env.RepositoryWriter, "alice@somehost")
if err != nil {
t.Fatalf("unexpected error: %v", err)
}
if got, want := string(a.PasswordHash), "hehehehe"; got != want {
t.Errorf("unexpected password hash: %v, want %v", got, want)
}
err = user.DeleteUserProfile(ctx, env.RepositoryWriter, "alice@somehost")
if err != nil {
t.Fatalf("unexpected error: %v", err)
}
if _, err = user.GetUserProfile(ctx, env.RepositoryWriter, "alice@somehost"); !errors.Is(err, user.ErrUserNotFound) {
t.Fatalf("unexpected error: %v", err)
}
}
func TestValidateUsername_Valid(t *testing.T) {
cases := []string{
"foo@bar",
"foo.foo@bar",
"foo.foo@bar.bar",
"foo_foo@bar",
"foo_foo@bar_bar",
"foo_foo@bar_bar.baz",
"foo_foo@bar.bar_baz",
"foo_foo@bar.bar.baz",
"foo-foo@bar",
"foo-foo@bar-bar",
"foo0@0bar.com",
"foo@barbar",
"some_user@barbar",
"some.user@barbar",
"some-user@some-host",
"some-user123@some-host123",
"0@0", // probably illegal username and hostname, but we're not rejecting that
"foo--foo@bar", // probably illegal, but we're not rejecting that
"foo@bar--bar", // probably illegal, but we're not rejecting that
"-foo@bar", // probably illegal username, but we're not rejecting that
"foo@bar-", // probably illegal hostname, but we're not rejecting that
"foo-@bar", // probably illegal username, but we're not rejecting that
"foo@-bar", // probably illegal hostname, but we're not rejecting that
}
for _, tc := range cases {
if err := user.ValidateUsername(tc); err != nil {
t.Fatalf("unexpected invalid username %q: %v", tc, err)
}
}
}
func TestValidateUsername_Invalid(t *testing.T) {
cases := []string{
"foo@",
"Foo@bar", // uppercase not allowed
"foo@Bar",
"foo!bar@baz",
"foo@bar@baz",
"foo@baz@",
"@",
"@bar",
}
for _, tc := range cases {
if user.ValidateUsername(tc) == nil {
t.Fatalf("username should be invalid %q", tc)
}
}
}