diff options
Diffstat (limited to 'internal/route/lfs')
-rw-r--r-- | internal/route/lfs/route.go | 6 | ||||
-rw-r--r-- | internal/route/lfs/route_test.go | 82 |
2 files changed, 47 insertions, 41 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()) } |