MM-15794 Migrate "Session.Get" to Sync by default (#10990)

Этот коммит содержится в:
GianOrtiz
2019-05-30 18:22:19 -03:00
коммит произвёл Hanzei
родитель 9fa1622fc3
Коммит ec20d3a844
7 изменённых файлов: 81 добавлений и 84 удалений

Просмотреть файл

@@ -75,32 +75,28 @@ func (me SqlSessionStore) Save(session *model.Session) (*model.Session, *model.A
return session, nil
}
func (me SqlSessionStore) Get(sessionIdOrToken string) store.StoreChannel {
return store.Do(func(result *store.StoreResult) {
var sessions []*model.Session
func (me SqlSessionStore) Get(sessionIdOrToken string) (*model.Session, *model.AppError) {
var sessions []*model.Session
if _, err := me.GetReplica().Select(&sessions, "SELECT * FROM Sessions WHERE Token = :Token OR Id = :Id LIMIT 1", map[string]interface{}{"Token": sessionIdOrToken, "Id": sessionIdOrToken}); err != nil {
result.Err = model.NewAppError("SqlSessionStore.Get", "store.sql_session.get.app_error", nil, "sessionIdOrToken="+sessionIdOrToken+", "+err.Error(), http.StatusInternalServerError)
} else if len(sessions) == 0 {
result.Err = model.NewAppError("SqlSessionStore.Get", "store.sql_session.get.app_error", nil, "sessionIdOrToken="+sessionIdOrToken, http.StatusNotFound)
} else {
result.Data = sessions[0]
if _, err := me.GetReplica().Select(&sessions, "SELECT * FROM Sessions WHERE Token = :Token OR Id = :Id LIMIT 1", map[string]interface{}{"Token": sessionIdOrToken, "Id": sessionIdOrToken}); err != nil {
return nil, model.NewAppError("SqlSessionStore.Get", "store.sql_session.get.app_error", nil, "sessionIdOrToken="+sessionIdOrToken+", "+err.Error(), http.StatusInternalServerError)
} else if len(sessions) == 0 {
return nil, model.NewAppError("SqlSessionStore.Get", "store.sql_session.get.app_error", nil, "sessionIdOrToken="+sessionIdOrToken, http.StatusNotFound)
}
session := sessions[0]
tcs := me.Team().GetTeamsForUser(sessions[0].UserId)
if rtcs := <-tcs; rtcs.Err != nil {
result.Err = model.NewAppError("SqlSessionStore.Get", "store.sql_session.get.app_error", nil, "sessionIdOrToken="+sessionIdOrToken+", "+rtcs.Err.Error(), http.StatusInternalServerError)
return
} else {
tempMembers := rtcs.Data.([]*model.TeamMember)
sessions[0].TeamMembers = make([]*model.TeamMember, 0, len(tempMembers))
for _, tm := range tempMembers {
if tm.DeleteAt == 0 {
sessions[0].TeamMembers = append(sessions[0].TeamMembers, tm)
}
}
}
rtcs := <-me.Team().GetTeamsForUser(sessions[0].UserId)
if rtcs.Err != nil {
return nil, model.NewAppError("SqlSessionStore.Get", "store.sql_session.get.app_error", nil, "sessionIdOrToken="+sessionIdOrToken+", "+rtcs.Err.Error(), http.StatusInternalServerError)
}
tempMembers := rtcs.Data.([]*model.TeamMember)
sessions[0].TeamMembers = make([]*model.TeamMember, 0, len(tempMembers))
for _, tm := range tempMembers {
if tm.DeleteAt == 0 {
sessions[0].TeamMembers = append(sessions[0].TeamMembers, tm)
}
})
}
return session, nil
}
func (me SqlSessionStore) GetSessions(userId string) store.StoreChannel {

Просмотреть файл

@@ -312,8 +312,8 @@ type BotStore interface {
}
type SessionStore interface {
Get(sessionIdOrToken string) (*model.Session, *model.AppError)
Save(session *model.Session) (*model.Session, *model.AppError)
Get(sessionIdOrToken string) StoreChannel
GetSessions(userId string) StoreChannel
GetSessionsWithActiveDeviceIds(userId string) ([]*model.Session, *model.AppError)
Remove(sessionIdOrToken string) StoreChannel

Просмотреть файл

@@ -42,19 +42,28 @@ func (_m *SessionStore) Cleanup(expiryTime int64, batchSize int64) {
}
// Get provides a mock function with given fields: sessionIdOrToken
func (_m *SessionStore) Get(sessionIdOrToken string) store.StoreChannel {
func (_m *SessionStore) Get(sessionIdOrToken string) (*model.Session, *model.AppError) {
ret := _m.Called(sessionIdOrToken)
var r0 store.StoreChannel
if rf, ok := ret.Get(0).(func(string) store.StoreChannel); ok {
var r0 *model.Session
if rf, ok := ret.Get(0).(func(string) *model.Session); ok {
r0 = rf(sessionIdOrToken)
} else {
if ret.Get(0) != nil {
r0 = ret.Get(0).(store.StoreChannel)
r0 = ret.Get(0).(*model.Session)
}
}
return r0
var r1 *model.AppError
if rf, ok := ret.Get(1).(func(string) *model.AppError); ok {
r1 = rf(sessionIdOrToken)
} else {
if ret.Get(1) != nil {
r1 = ret.Get(1).(*model.AppError)
}
}
return r0, r1
}
// GetSessions provides a mock function with given fields: userId

Просмотреть файл

@@ -429,7 +429,7 @@ func testOAuthStoreDeleteApp(t *testing.T, ss store.Store) {
t.Fatal(err)
}
if err := (<-ss.Session().Get(s1.Token)).Err; err == nil {
if _, err := ss.Session().Get(s1.Token); err == nil {
t.Fatal("should error - session should be deleted")
}

Просмотреть файл

@@ -59,10 +59,10 @@ func testSessionGet(t *testing.T, ss store.Store) {
s3, err = ss.Session().Save(s3)
require.Nil(t, err)
if rs1 := (<-ss.Session().Get(s1.Id)); rs1.Err != nil {
t.Fatal(rs1.Err)
if session, err := ss.Session().Get(s1.Id); err != nil {
t.Fatal(err)
} else {
if rs1.Data.(*model.Session).Id != s1.Id {
if session.Id != s1.Id {
t.Fatal("should match")
}
}
@@ -116,17 +116,17 @@ func testSessionRemove(t *testing.T, ss store.Store) {
s1, err := ss.Session().Save(s1)
require.Nil(t, err)
if rs1 := (<-ss.Session().Get(s1.Id)); rs1.Err != nil {
t.Fatal(rs1.Err)
if session, err := ss.Session().Get(s1.Id); err != nil {
t.Fatal(err)
} else {
if rs1.Data.(*model.Session).Id != s1.Id {
if session.Id != s1.Id {
t.Fatal("should match")
}
}
store.Must(ss.Session().Remove(s1.Id))
if rs2 := (<-ss.Session().Get(s1.Id)); rs2.Err == nil {
if _, err := ss.Session().Get(s1.Id); err == nil {
t.Fatal("should have been removed")
}
}
@@ -138,17 +138,17 @@ func testSessionRemoveAll(t *testing.T, ss store.Store) {
s1, err := ss.Session().Save(s1)
require.Nil(t, err)
if rs1 := (<-ss.Session().Get(s1.Id)); rs1.Err != nil {
t.Fatal(rs1.Err)
if session, err := ss.Session().Get(s1.Id); err != nil {
t.Fatal(err)
} else {
if rs1.Data.(*model.Session).Id != s1.Id {
if session.Id != s1.Id {
t.Fatal("should match")
}
}
store.Must(ss.Session().RemoveAllSessions())
if rs2 := (<-ss.Session().Get(s1.Id)); rs2.Err == nil {
if _, err := ss.Session().Get(s1.Id); err == nil {
t.Fatal("should have been removed")
}
}
@@ -160,17 +160,17 @@ func testSessionRemoveByUser(t *testing.T, ss store.Store) {
s1, err := ss.Session().Save(s1)
require.Nil(t, err)
if rs1 := (<-ss.Session().Get(s1.Id)); rs1.Err != nil {
t.Fatal(rs1.Err)
if session, err := ss.Session().Get(s1.Id); err != nil {
t.Fatal(err)
} else {
if rs1.Data.(*model.Session).Id != s1.Id {
if session.Id != s1.Id {
t.Fatal("should match")
}
}
store.Must(ss.Session().PermanentDeleteSessionsByUser(s1.UserId))
if rs2 := (<-ss.Session().Get(s1.Id)); rs2.Err == nil {
if _, err := ss.Session().Get(s1.Id); err == nil {
t.Fatal("should have been removed")
}
}
@@ -182,17 +182,17 @@ func testSessionRemoveToken(t *testing.T, ss store.Store) {
s1, err := ss.Session().Save(s1)
require.Nil(t, err)
if rs1 := (<-ss.Session().Get(s1.Id)); rs1.Err != nil {
t.Fatal(rs1.Err)
if session, err := ss.Session().Get(s1.Id); err != nil {
t.Fatal(err)
} else {
if rs1.Data.(*model.Session).Id != s1.Id {
if session.Id != s1.Id {
t.Fatal("should match")
}
}
store.Must(ss.Session().Remove(s1.Token))
if rs2 := (<-ss.Session().Get(s1.Id)); rs2.Err == nil {
if _, err := ss.Session().Get(s1.Id); err == nil {
t.Fatal("should have been removed")
}
@@ -260,10 +260,10 @@ func testSessionStoreUpdateLastActivityAt(t *testing.T, ss store.Store) {
t.Fatal(err)
}
if r1 := <-ss.Session().Get(s1.Id); r1.Err != nil {
t.Fatal(r1.Err)
if session, err := ss.Session().Get(s1.Id); err != nil {
t.Fatal(err)
} else {
if r1.Data.(*model.Session).LastActivityAt != 1234567890 {
if session.LastActivityAt != 1234567890 {
t.Fatal("LastActivityAt not updated correctly")
}
}
@@ -320,16 +320,16 @@ func testSessionCleanup(t *testing.T, ss store.Store) {
ss.Session().Cleanup(now, 1)
err = (<-ss.Session().Get(s1.Id)).Err
_, err = ss.Session().Get(s1.Id)
assert.Nil(t, err)
err = (<-ss.Session().Get(s2.Id)).Err
_, err = ss.Session().Get(s2.Id)
assert.Nil(t, err)
err = (<-ss.Session().Get(s3.Id)).Err
_, err = ss.Session().Get(s3.Id)
assert.NotNil(t, err)
err = (<-ss.Session().Get(s4.Id)).Err
_, err = ss.Session().Get(s4.Id)
assert.NotNil(t, err)
store.Must(ss.Session().Remove(s1.Id))

Просмотреть файл

@@ -67,7 +67,7 @@ func testUserAccessTokenSaveGetDelete(t *testing.T, ss store.Store) {
t.Fatal(result.Err)
}
if err = (<-ss.Session().Get(s1.Token)).Err; err == nil {
if _, err = ss.Session().Get(s1.Token); err == nil {
t.Fatal("should error - session should be deleted")
}
@@ -90,7 +90,7 @@ func testUserAccessTokenSaveGetDelete(t *testing.T, ss store.Store) {
t.Fatal(result.Err)
}
if err := (<-ss.Session().Get(s2.Token)).Err; err == nil {
if _, err := ss.Session().Get(s2.Token); err == nil {
t.Fatal("should error - session should be deleted")
}
@@ -121,7 +121,7 @@ func testUserAccessTokenDisableEnable(t *testing.T, ss store.Store) {
t.Fatal(err)
}
if err = (<-ss.Session().Get(s1.Token)).Err; err == nil {
if _, err = ss.Session().Get(s1.Token); err == nil {
t.Fatal("should error - session should be deleted")
}