diff options
| author | Stan Hu <stanhu@gmail.com> | 2019-05-16 00:14:19 +0000 |
|---|---|---|
| committer | Stan Hu <stanhu@gmail.com> | 2019-05-16 00:14:19 +0000 |
| commit | 14c18677b8d3d2eda85d529f7ef9dc6a6de5a55c (patch) | |
| tree | 8e95457fa391b3d6bfd27279685f2612f5109047 /spec | |
| parent | 124eacf774d1a8cb85daad92b1d8d03578fcbebc (diff) | |
| parent | 79f05f8a7e5d038d62f85f1a3f242932bbd981b3 (diff) | |
| download | gitlab-ce-14c18677b8d3d2eda85d529f7ef9dc6a6de5a55c.tar.gz | |
Merge branch 'jej/list-sessions-for-user' into 'master'
Sessions can be listed for a given user
See merge request gitlab-org/gitlab-ce!28306
Diffstat (limited to 'spec')
| -rw-r--r-- | spec/models/active_session_spec.rb | 46 |
1 files changed, 46 insertions, 0 deletions
diff --git a/spec/models/active_session_spec.rb b/spec/models/active_session_spec.rb index b523f393ece..2762eaeccd3 100644 --- a/spec/models/active_session_spec.rb +++ b/spec/models/active_session_spec.rb @@ -88,6 +88,52 @@ RSpec.describe ActiveSession, :clean_gitlab_redis_shared_state do end end + describe '.list_sessions' do + it 'uses the ActiveSession lookup to return original sessions' do + Gitlab::Redis::SharedState.with do |redis| + redis.set("session:gitlab:6919a6f1bb119dd7396fadc38fd18d0d", Marshal.dump({ _csrf_token: 'abcd' })) + + redis.sadd( + "session:lookup:user:gitlab:#{user.id}", + %w[ + 6919a6f1bb119dd7396fadc38fd18d0d + 59822c7d9fcdfa03725eff41782ad97d + ] + ) + end + + expect(ActiveSession.list_sessions(user)).to eq [{ _csrf_token: 'abcd' }] + end + end + + describe '.session_ids_for_user' do + it 'uses the user lookup table to return session ids' do + session_ids = ['59822c7d9fcdfa03725eff41782ad97d'] + + Gitlab::Redis::SharedState.with do |redis| + redis.sadd("session:lookup:user:gitlab:#{user.id}", session_ids) + end + + expect(ActiveSession.session_ids_for_user(user)).to eq(session_ids) + end + end + + describe '.sessions_from_ids' do + it 'uses the ActiveSession lookup to return original sessions' do + Gitlab::Redis::SharedState.with do |redis| + redis.set("session:gitlab:6919a6f1bb119dd7396fadc38fd18d0d", Marshal.dump({ _csrf_token: 'abcd' })) + end + + expect(ActiveSession.sessions_from_ids(['6919a6f1bb119dd7396fadc38fd18d0d'])).to eq [{ _csrf_token: 'abcd' }] + end + + it 'avoids a redis lookup for an empty array' do + expect(Gitlab::Redis::SharedState).not_to receive(:with) + + expect(ActiveSession.sessions_from_ids([])).to eq([]) + end + end + describe '.set' do it 'sets a new redis entry for the user session and a lookup entry' do ActiveSession.set(user, request) |
