/
githubmirror
/
photoprism
Обзор
Документация
Войти
/
githubmirror
/
photoprism
Код
Запросы
0
Пакеты
0
Релизы
0
Аналитика
Безопасность
develop
internal/entity/auth_session_delete_test.go
137 строк
4 KB
Michael Mayer
Downloads: Add signed tokens and file-level album selection #5733 #5743
24 июл 2026, 18:55
24 июл 2026, 18:55
1cea6cc
Код
Авторство
О чём код?
package entity import ( "testing" "time" "github.com/stretchr/testify/assert" "github.com/photoprism/photoprism/pkg/authn" "github.com/photoprism/photoprism/pkg/rnd" "github.com/photoprism/photoprism/pkg/time/unix" ) func TestDeleteSession(t *testing.T) { t.Run("Success", func(t *testing.T) { id := rnd.SessionID("77be27ac5ca305b394046a83f6fda18167ca3d3f2dbe7ac1") m := &Session{ID: id, PreviewToken: "preview123"} CacheSession(m, time.Hour) r, _ := sessionCache.Get(id) assert.NotEmpty(t, r) err := DeleteSession(m) if err != nil { t.Fatal(err) } r2, _ := sessionCache.Get(id) assert.Empty(t, r2) }) t.Run("ReleasesTokens", func(t *testing.T) { id := rnd.SessionID("11be27ac5ca305b394046a83f6fda18167ca3d3f2dbe7ac1") m := &Session{ID: id, PreviewToken: "release-pv-token"} CacheSession(m, time.Hour) assert.True(t, PreviewToken.HasValue("release-pv-token")) if err := DeleteSession(m); err != nil { t.Fatal(err) } assert.True(t, PreviewToken.MissingValue("release-pv-token")) }) t.Run("KeepsTokenWhileOtherSessionActive", func(t *testing.T) { first := &Session{ID: rnd.SessionID("22be27ac5ca305b394046a83f6fda18167ca3d3f2dbe7ac1"), PreviewToken: "shared-pv-token"} CacheSession(first, time.Hour) second := &Session{ID: rnd.SessionID("33be27ac5ca305b394046a83f6fda18167ca3d3f2dbe7ac1"), PreviewToken: "shared-pv-token"} CacheSession(second, time.Hour) // Removing the first session keeps the shared tokens because the second still uses them. if err := DeleteSession(first); err != nil { t.Fatal(err) } assert.True(t, PreviewToken.HasValue("shared-pv-token")) // Removing the last session releases the tokens. if err := DeleteSession(second); err != nil { t.Fatal(err) } assert.True(t, PreviewToken.MissingValue("shared-pv-token")) }) t.Run("InvalidId", func(t *testing.T) { m := &Session{ID: "123-invalid", PreviewToken: "preview123"} CacheSession(m, time.Hour) err := DeleteSession(m) assert.Error(t, err) }) } func TestDeleteChildSessions(t *testing.T) { t.Run("New", func(t *testing.T) { s := NewSession(3600, 0) assert.Equal(t, 0, DeleteChildSessions(s)) }) } func TestDeleteClientSessions(t *testing.T) { // Test client UID. clientUID := "cs5gfen1bgx00000" // Create new test client. client := NewClient() client.ClientUID = clientUID // Make sure no sessions exist yet and test missing arguments. assert.Equal(t, 0, DeleteClientSessions(&Client{}, authn.MethodUndefined, -1)) assert.Equal(t, 0, DeleteClientSessions(client, authn.MethodOAuth2, -1)) assert.Equal(t, 0, DeleteClientSessions(client, authn.MethodOAuth2, 0)) assert.Equal(t, 0, DeleteClientSessions(&Client{}, authn.MethodDefault, 0)) // Create 10 test client sessions. for range 10 { sess := NewSession(3600, 0) sess.SetClient(client) if err := sess.Save(); err != nil { t.Fatal(err) } } // Check if the expected number of sessions is deleted until none are left. assert.Equal(t, 0, DeleteClientSessions(client, authn.MethodOAuth2, -1)) assert.Equal(t, 0, DeleteClientSessions(client, authn.MethodDefault, 1)) assert.Equal(t, 9, DeleteClientSessions(client, authn.MethodOAuth2, 1)) assert.Equal(t, 1, DeleteClientSessions(client, authn.MethodOAuth2, 0)) assert.Equal(t, 0, DeleteClientSessions(client, authn.MethodOAuth2, 0)) assert.Equal(t, 0, DeleteClientSessions(client, authn.MethodUndefined, 0)) } func TestDeleteExpiredSessions(t *testing.T) { assert.Equal(t, 0, DeleteExpiredSessions()) m := NewSession(unix.Day, unix.Hour) m.Expires(time.Date(2000, 01, 15, 12, 30, 0, 0, time.UTC)) if err := m.Save(); err != nil { t.Fatal(err) } assert.Equal(t, 1, DeleteExpiredSessions()) } func TestDeleteFromSessionCache(t *testing.T) { id := rnd.SessionID("69be27ac5ca305b394046a83f6fda18167ca3d3f2dbe7ac1") sessionCache.Flush() bob := FindSessionByRefID("sessxkkcabce") CacheSession(bob, time.Hour) r, b := sessionCache.Get(id) assert.NotEmpty(t, r) assert.True(t, b) DeleteFromSessionCache("") r2, b2 := sessionCache.Get(id) assert.NotEmpty(t, r2) assert.True(t, b2) DeleteFromSessionCache(id) r3, b3 := sessionCache.Get(id) assert.Empty(t, r3) assert.False(t, b3) }