diff options
author | Joe Chen <jc@unknwon.io> | 2022-06-11 09:42:17 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-06-11 09:42:17 +0800 |
commit | f837ea6346ac720d586eda51ab89c5c71a1f3e65 (patch) | |
tree | 678b0bdccee80e65c399e8696cd209c9e902618d /internal/route | |
parent | 9776bdc9b8b441ebd73c100bfe2aa4e495c233ca (diff) |
db: use `context` and go-mockgen for `UsersStore` (#7042)
Diffstat (limited to 'internal/route')
-rw-r--r-- | internal/route/lfs/route.go | 6 | ||||
-rw-r--r-- | internal/route/lfs/route_test.go | 82 | ||||
-rw-r--r-- | internal/route/org/setting.go | 2 | ||||
-rw-r--r-- | internal/route/repo/http.go | 6 | ||||
-rw-r--r-- | internal/route/repo/tasks.go | 4 | ||||
-rw-r--r-- | internal/route/user/auth.go | 2 | ||||
-rw-r--r-- | internal/route/user/setting.go | 2 |
7 files changed, 55 insertions, 49 deletions
diff --git a/internal/route/lfs/route.go b/internal/route/lfs/route.go index f5195837..94c42fea 100644 --- a/internal/route/lfs/route.go +++ b/internal/route/lfs/route.go @@ -58,7 +58,7 @@ func authenticate() macaron.Handler { return } - user, err := db.Users.Authenticate(username, password, -1) + user, err := db.Users.Authenticate(c.Req.Context(), username, password, -1) if err != nil && !auth.IsErrBadCredentials(err) { internalServerError(c.Resp) log.Error("Failed to authenticate user [name: %s]: %v", username, err) @@ -86,7 +86,7 @@ func authenticate() macaron.Handler { log.Error("Failed to touch access token: %v", err) } - user, err = db.Users.GetByID(token.UserID) + user, err = db.Users.GetByID(c.Req.Context(), token.UserID) if err != nil { // Once we found the token, we're supposed to find its related user, // thus any error is unexpected. @@ -108,7 +108,7 @@ func authorize(mode db.AccessMode) macaron.Handler { username := c.Params(":username") reponame := strings.TrimSuffix(c.Params(":reponame"), ".git") - owner, err := db.Users.GetByUsername(username) + owner, err := db.Users.GetByUsername(c.Req.Context(), username) if err != nil { if db.IsErrUserNotExist(err) { c.Status(http.StatusNotFound) diff --git a/internal/route/lfs/route_test.go b/internal/route/lfs/route_test.go index 57d0728f..6202695b 100644 --- a/internal/route/lfs/route_test.go +++ b/internal/route/lfs/route_test.go @@ -30,7 +30,7 @@ func Test_authenticate(t *testing.T) { tests := []struct { name string header http.Header - mockUsersStore *db.MockUsersStore + mockUsersStore func() db.UsersStore mockTwoFactorsStore *db.MockTwoFactorsStore mockAccessTokensStore func() db.AccessTokensStore expStatusCode int @@ -51,10 +51,10 @@ func Test_authenticate(t *testing.T) { header: http.Header{ "Authorization": []string{"Basic dXNlcm5hbWU6cGFzc3dvcmQ="}, }, - mockUsersStore: &db.MockUsersStore{ - MockAuthenticate: func(username, password string, loginSourceID int64) (*db.User, error) { - return &db.User{}, nil - }, + mockUsersStore: func() db.UsersStore { + mock := db.NewMockUsersStore() + mock.AuthenticateFunc.SetDefaultReturn(&db.User{}, nil) + return mock }, mockTwoFactorsStore: &db.MockTwoFactorsStore{ MockIsUserEnabled: func(userID int64) bool { @@ -70,10 +70,10 @@ func Test_authenticate(t *testing.T) { header: http.Header{ "Authorization": []string{"Basic dXNlcm5hbWU="}, }, - mockUsersStore: &db.MockUsersStore{ - MockAuthenticate: func(username, password string, loginSourceID int64) (*db.User, error) { - return nil, auth.ErrBadCredentials{} - }, + mockUsersStore: func() db.UsersStore { + mock := db.NewMockUsersStore() + mock.AuthenticateFunc.SetDefaultReturn(nil, auth.ErrBadCredentials{}) + return mock }, mockAccessTokensStore: func() db.AccessTokensStore { mock := db.NewMockAccessTokensStore() @@ -93,10 +93,10 @@ func Test_authenticate(t *testing.T) { header: http.Header{ "Authorization": []string{"Basic dXNlcm5hbWU6cGFzc3dvcmQ="}, }, - mockUsersStore: &db.MockUsersStore{ - MockAuthenticate: func(username, password string, loginSourceID int64) (*db.User, error) { - return &db.User{ID: 1, Name: "unknwon"}, nil - }, + mockUsersStore: func() db.UsersStore { + mock := db.NewMockUsersStore() + mock.AuthenticateFunc.SetDefaultReturn(&db.User{ID: 1, Name: "unknwon"}, nil) + return mock }, mockTwoFactorsStore: &db.MockTwoFactorsStore{ MockIsUserEnabled: func(userID int64) bool { @@ -112,13 +112,11 @@ func Test_authenticate(t *testing.T) { header: http.Header{ "Authorization": []string{"Basic dXNlcm5hbWU="}, }, - mockUsersStore: &db.MockUsersStore{ - MockAuthenticate: func(username, password string, loginSourceID int64) (*db.User, error) { - return nil, auth.ErrBadCredentials{} - }, - MockGetByID: func(id int64) (*db.User, error) { - return &db.User{ID: 1, Name: "unknwon"}, nil - }, + mockUsersStore: func() db.UsersStore { + mock := db.NewMockUsersStore() + mock.AuthenticateFunc.SetDefaultReturn(nil, auth.ErrBadCredentials{}) + mock.GetByIDFunc.SetDefaultReturn(&db.User{ID: 1, Name: "unknwon"}, nil) + return mock }, mockAccessTokensStore: func() db.AccessTokensStore { mock := db.NewMockAccessTokensStore() @@ -132,9 +130,10 @@ func Test_authenticate(t *testing.T) { } for _, test := range tests { t.Run(test.name, func(t *testing.T) { - db.SetMockUsersStore(t, test.mockUsersStore) + if test.mockUsersStore != nil { + db.SetMockUsersStore(t, test.mockUsersStore()) + } db.SetMockTwoFactorsStore(t, test.mockTwoFactorsStore) - if test.mockAccessTokensStore != nil { db.SetMockAccessTokensStore(t, test.mockAccessTokensStore()) } @@ -165,7 +164,7 @@ func Test_authorize(t *testing.T) { tests := []struct { name string authroize macaron.Handler - mockUsersStore *db.MockUsersStore + mockUsersStore func() db.UsersStore mockReposStore *db.MockReposStore mockPermsStore func() db.PermsStore expStatusCode int @@ -174,20 +173,22 @@ func Test_authorize(t *testing.T) { { name: "user does not exist", authroize: authorize(db.AccessModeNone), - mockUsersStore: &db.MockUsersStore{ - MockGetByUsername: func(username string) (*db.User, error) { - return nil, db.ErrUserNotExist{} - }, + mockUsersStore: func() db.UsersStore { + mock := db.NewMockUsersStore() + mock.GetByUsernameFunc.SetDefaultReturn(nil, db.ErrUserNotExist{}) + return mock }, expStatusCode: http.StatusNotFound, }, { name: "repository does not exist", authroize: authorize(db.AccessModeNone), - mockUsersStore: &db.MockUsersStore{ - MockGetByUsername: func(username string) (*db.User, error) { + mockUsersStore: func() db.UsersStore { + mock := db.NewMockUsersStore() + mock.GetByUsernameFunc.SetDefaultHook(func(ctx context.Context, username string) (*db.User, error) { return &db.User{Name: username}, nil - }, + }) + return mock }, mockReposStore: &db.MockReposStore{ MockGetByName: func(ownerID int64, name string) (*db.Repository, error) { @@ -199,10 +200,12 @@ func Test_authorize(t *testing.T) { { name: "actor is not authorized", authroize: authorize(db.AccessModeWrite), - mockUsersStore: &db.MockUsersStore{ - MockGetByUsername: func(username string) (*db.User, error) { + mockUsersStore: func() db.UsersStore { + mock := db.NewMockUsersStore() + mock.GetByUsernameFunc.SetDefaultHook(func(ctx context.Context, username string) (*db.User, error) { return &db.User{Name: username}, nil - }, + }) + return mock }, mockReposStore: &db.MockReposStore{ MockGetByName: func(ownerID int64, name string) (*db.Repository, error) { @@ -222,10 +225,12 @@ func Test_authorize(t *testing.T) { { name: "actor is authorized", authroize: authorize(db.AccessModeRead), - mockUsersStore: &db.MockUsersStore{ - MockGetByUsername: func(username string) (*db.User, error) { + mockUsersStore: func() db.UsersStore { + mock := db.NewMockUsersStore() + mock.GetByUsernameFunc.SetDefaultHook(func(ctx context.Context, username string) (*db.User, error) { return &db.User{Name: username}, nil - }, + }) + return mock }, mockReposStore: &db.MockReposStore{ MockGetByName: func(ownerID int64, name string) (*db.Repository, error) { @@ -245,9 +250,10 @@ func Test_authorize(t *testing.T) { } for _, test := range tests { t.Run(test.name, func(t *testing.T) { - db.SetMockUsersStore(t, test.mockUsersStore) + if test.mockUsersStore != nil { + db.SetMockUsersStore(t, test.mockUsersStore()) + } db.SetMockReposStore(t, test.mockReposStore) - if test.mockPermsStore != nil { db.SetMockPermsStore(t, test.mockPermsStore()) } diff --git a/internal/route/org/setting.go b/internal/route/org/setting.go index 94e9b7a6..e15b9faf 100644 --- a/internal/route/org/setting.go +++ b/internal/route/org/setting.go @@ -109,7 +109,7 @@ func SettingsDelete(c *context.Context) { org := c.Org.Organization if c.Req.Method == "POST" { - if _, err := db.Users.Authenticate(c.User.Name, c.Query("password"), c.User.LoginSource); err != nil { + if _, err := db.Users.Authenticate(c.Req.Context(), c.User.Name, c.Query("password"), c.User.LoginSource); err != nil { if auth.IsErrBadCredentials(err) { c.RenderWithErr(c.Tr("form.enterred_invalid_password"), SETTINGS_DELETE, nil) } else { diff --git a/internal/route/repo/http.go b/internal/route/repo/http.go index 7e970194..888ad4d8 100644 --- a/internal/route/repo/http.go +++ b/internal/route/repo/http.go @@ -65,7 +65,7 @@ func HTTPContexter() macaron.Handler { strings.HasSuffix(c.Req.URL.Path, "git-upload-pack") || c.Req.Method == "GET" - owner, err := db.Users.GetByUsername(ownerName) + owner, err := db.Users.GetByUsername(c.Req.Context(), ownerName) if err != nil { if db.IsErrUserNotExist(err) { c.Status(http.StatusNotFound) @@ -123,7 +123,7 @@ func HTTPContexter() macaron.Handler { return } - authUser, err := db.Users.Authenticate(authUsername, authPassword, -1) + authUser, err := db.Users.Authenticate(c.Req.Context(), authUsername, authPassword, -1) if err != nil && !auth.IsErrBadCredentials(err) { c.Status(http.StatusInternalServerError) log.Error("Failed to authenticate user [name: %s]: %v", authUsername, err) @@ -146,7 +146,7 @@ func HTTPContexter() macaron.Handler { log.Error("Failed to touch access token: %v", err) } - authUser, err = db.Users.GetByID(token.UserID) + authUser, err = db.Users.GetByID(c.Req.Context(), token.UserID) if err != nil { // Once we found token, we're supposed to find its related user, // thus any error is unexpected. diff --git a/internal/route/repo/tasks.go b/internal/route/repo/tasks.go index 81e85e2a..c5b555b9 100644 --- a/internal/route/repo/tasks.go +++ b/internal/route/repo/tasks.go @@ -26,7 +26,7 @@ func TriggerTask(c *macaron.Context) { username := c.Params(":username") reponame := c.Params(":reponame") - owner, err := db.Users.GetByUsername(username) + owner, err := db.Users.GetByUsername(c.Req.Context(), username) if err != nil { if db.IsErrUserNotExist(err) { c.Error(http.StatusBadRequest, "Owner does not exist") @@ -55,7 +55,7 @@ func TriggerTask(c *macaron.Context) { return } - pusher, err := db.Users.GetByID(pusherID) + pusher, err := db.Users.GetByID(c.Req.Context(), pusherID) if err != nil { if db.IsErrUserNotExist(err) { c.Error(http.StatusBadRequest, "Pusher does not exist") diff --git a/internal/route/user/auth.go b/internal/route/user/auth.go index f8bbe7ab..b3b785c2 100644 --- a/internal/route/user/auth.go +++ b/internal/route/user/auth.go @@ -161,7 +161,7 @@ func LoginPost(c *context.Context, f form.SignIn) { return } - u, err := db.Users.Authenticate(f.UserName, f.Password, f.LoginSource) + u, err := db.Users.Authenticate(c.Req.Context(), f.UserName, f.Password, f.LoginSource) if err != nil { switch errors.Cause(err).(type) { case auth.ErrBadCredentials: diff --git a/internal/route/user/setting.go b/internal/route/user/setting.go index cf2226c5..c28a1747 100644 --- a/internal/route/user/setting.go +++ b/internal/route/user/setting.go @@ -640,7 +640,7 @@ func SettingsDelete(c *context.Context) { c.PageIs("SettingsDelete") if c.Req.Method == "POST" { - if _, err := db.Users.Authenticate(c.User.Name, c.Query("password"), c.User.LoginSource); err != nil { + if _, err := db.Users.Authenticate(c.Req.Context(), c.User.Name, c.Query("password"), c.User.LoginSource); err != nil { if auth.IsErrBadCredentials(err) { c.RenderWithErr(c.Tr("form.enterred_invalid_password"), SETTINGS_DELETE, nil) } else { |