summaryrefslogtreecommitdiff
path: root/spec/models/active_session_spec.rb
diff options
context:
space:
mode:
authorDouwe Maan <douwe@gitlab.com>2018-05-02 11:56:47 +0000
committerDouwe Maan <douwe@gitlab.com>2018-05-02 11:56:47 +0000
commite3b15d37180b49949e1ea19210f3ea219b645ec1 (patch)
tree1e070cf5943034b85a8ddc74301681814301ed84 /spec/models/active_session_spec.rb
parent75f6e91fcde12029068f48b6b7fb3fd13a612c61 (diff)
downloadgitlab-ce-revert-1350d80c.tar.gz
Revert "Merge branch 'feature/display-active-sessions' into 'master'"revert-1350d80c
This reverts merge request !17867
Diffstat (limited to 'spec/models/active_session_spec.rb')
-rw-r--r--spec/models/active_session_spec.rb216
1 files changed, 0 insertions, 216 deletions
diff --git a/spec/models/active_session_spec.rb b/spec/models/active_session_spec.rb
deleted file mode 100644
index 129b2f92683..00000000000
--- a/spec/models/active_session_spec.rb
+++ /dev/null
@@ -1,216 +0,0 @@
-require 'rails_helper'
-
-RSpec.describe ActiveSession, :clean_gitlab_redis_shared_state do
- let(:user) do
- create(:user).tap do |user|
- user.current_sign_in_at = Time.current
- end
- end
-
- let(:session) { double(:session, id: '6919a6f1bb119dd7396fadc38fd18d0d') }
-
- let(:request) do
- double(:request, {
- user_agent: 'Mozilla/5.0 (iPhone; CPU iPhone OS 8_1_3 like Mac OS X) AppleWebKit/600.1.4 ' \
- '(KHTML, like Gecko) Mobile/12B466 [FBDV/iPhone7,2]',
- ip: '127.0.0.1',
- session: session
- })
- end
-
- describe '#current?' do
- it 'returns true if the active session matches the current session' do
- active_session = ActiveSession.new(session_id: '6919a6f1bb119dd7396fadc38fd18d0d')
-
- expect(active_session.current?(session)).to be true
- end
-
- it 'returns false if the active session does not match the current session' do
- active_session = ActiveSession.new(session_id: '59822c7d9fcdfa03725eff41782ad97d')
-
- expect(active_session.current?(session)).to be false
- end
-
- it 'returns false if the session id is nil' do
- active_session = ActiveSession.new(session_id: nil)
- session = double(:session, id: nil)
-
- expect(active_session.current?(session)).to be false
- end
- end
-
- describe '.list' do
- it 'returns all sessions by user' do
- Gitlab::Redis::SharedState.with do |redis|
- redis.set("session:user:gitlab:#{user.id}:6919a6f1bb119dd7396fadc38fd18d0d", Marshal.dump({ session_id: 'a' }))
- redis.set("session:user:gitlab:#{user.id}:59822c7d9fcdfa03725eff41782ad97d", Marshal.dump({ session_id: 'b' }))
- redis.set("session:user:gitlab:9999:5c8611e4f9c69645ad1a1492f4131358", '')
-
- redis.sadd(
- "session:lookup:user:gitlab:#{user.id}",
- %w[
- 6919a6f1bb119dd7396fadc38fd18d0d
- 59822c7d9fcdfa03725eff41782ad97d
- ]
- )
- end
-
- expect(ActiveSession.list(user)).to match_array [{ session_id: 'a' }, { session_id: 'b' }]
- end
-
- it 'does not return obsolete entries and cleans them up' do
- Gitlab::Redis::SharedState.with do |redis|
- redis.set("session:user:gitlab:#{user.id}:6919a6f1bb119dd7396fadc38fd18d0d", Marshal.dump({ session_id: 'a' }))
-
- redis.sadd(
- "session:lookup:user:gitlab:#{user.id}",
- %w[
- 6919a6f1bb119dd7396fadc38fd18d0d
- 59822c7d9fcdfa03725eff41782ad97d
- ]
- )
- end
-
- expect(ActiveSession.list(user)).to eq [{ session_id: 'a' }]
-
- Gitlab::Redis::SharedState.with do |redis|
- expect(redis.sscan_each("session:lookup:user:gitlab:#{user.id}").to_a).to eq ['6919a6f1bb119dd7396fadc38fd18d0d']
- end
- end
-
- it 'returns an empty array if the use does not have any active session' do
- expect(ActiveSession.list(user)).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)
-
- Gitlab::Redis::SharedState.with do |redis|
- expect(redis.scan_each.to_a).to match_array [
- "session:user:gitlab:#{user.id}:6919a6f1bb119dd7396fadc38fd18d0d",
- "session:lookup:user:gitlab:#{user.id}"
- ]
- end
- end
-
- it 'adds timestamps and information from the request' do
- Timecop.freeze(Time.zone.parse('2018-03-12 09:06')) do
- ActiveSession.set(user, request)
-
- session = ActiveSession.list(user)
-
- expect(session.count).to eq 1
- expect(session.first).to have_attributes(
- ip_address: '127.0.0.1',
- browser: 'Mobile Safari',
- os: 'iOS',
- device_name: 'iPhone 6',
- device_type: 'smartphone',
- created_at: Time.zone.parse('2018-03-12 09:06'),
- updated_at: Time.zone.parse('2018-03-12 09:06'),
- session_id: '6919a6f1bb119dd7396fadc38fd18d0d'
- )
- end
- end
-
- it 'keeps the created_at from the login on consecutive requests' do
- now = Time.zone.parse('2018-03-12 09:06')
-
- Timecop.freeze(now) do
- ActiveSession.set(user, request)
-
- Timecop.freeze(now + 1.minute) do
- ActiveSession.set(user, request)
-
- session = ActiveSession.list(user)
-
- expect(session.first).to have_attributes(
- created_at: Time.zone.parse('2018-03-12 09:06'),
- updated_at: Time.zone.parse('2018-03-12 09:07')
- )
- end
- end
- end
- end
-
- describe '.destroy' do
- it 'removes the entry associated with the currently killed user session' do
- Gitlab::Redis::SharedState.with do |redis|
- redis.set("session:user:gitlab:#{user.id}:6919a6f1bb119dd7396fadc38fd18d0d", '')
- redis.set("session:user:gitlab:#{user.id}:59822c7d9fcdfa03725eff41782ad97d", '')
- redis.set("session:user:gitlab:9999:5c8611e4f9c69645ad1a1492f4131358", '')
- end
-
- ActiveSession.destroy(user, request.session.id)
-
- Gitlab::Redis::SharedState.with do |redis|
- expect(redis.scan_each(match: "session:user:gitlab:*")).to match_array [
- "session:user:gitlab:#{user.id}:59822c7d9fcdfa03725eff41782ad97d",
- "session:user:gitlab:9999:5c8611e4f9c69645ad1a1492f4131358"
- ]
- end
- end
-
- it 'removes the lookup entry' do
- Gitlab::Redis::SharedState.with do |redis|
- redis.set("session:user:gitlab:#{user.id}:6919a6f1bb119dd7396fadc38fd18d0d", '')
- redis.sadd("session:lookup:user:gitlab:#{user.id}", '6919a6f1bb119dd7396fadc38fd18d0d')
- end
-
- ActiveSession.destroy(user, request.session.id)
-
- Gitlab::Redis::SharedState.with do |redis|
- expect(redis.scan_each(match: "session:lookup:user:gitlab:#{user.id}").to_a).to be_empty
- end
- end
-
- it 'removes the devise session' do
- Gitlab::Redis::SharedState.with do |redis|
- redis.set("session:user:gitlab:#{user.id}:6919a6f1bb119dd7396fadc38fd18d0d", '')
- redis.set("session:gitlab:6919a6f1bb119dd7396fadc38fd18d0d", '')
- end
-
- ActiveSession.destroy(user, request.session.id)
-
- Gitlab::Redis::SharedState.with do |redis|
- expect(redis.scan_each(match: "session:gitlab:*").to_a).to be_empty
- end
- end
-
- it 'does not remove the devise session if the active session could not be found' do
- Gitlab::Redis::SharedState.with do |redis|
- redis.set("session:gitlab:6919a6f1bb119dd7396fadc38fd18d0d", '')
- end
-
- other_user = create(:user)
-
- ActiveSession.destroy(other_user, request.session.id)
-
- Gitlab::Redis::SharedState.with do |redis|
- expect(redis.scan_each(match: "session:gitlab:*").to_a).not_to be_empty
- end
- end
- end
-
- describe '.cleanup' do
- it 'removes obsolete lookup entries' do
- Gitlab::Redis::SharedState.with do |redis|
- redis.set("session:user:gitlab:#{user.id}:6919a6f1bb119dd7396fadc38fd18d0d", '')
- redis.sadd("session:lookup:user:gitlab:#{user.id}", '6919a6f1bb119dd7396fadc38fd18d0d')
- redis.sadd("session:lookup:user:gitlab:#{user.id}", '59822c7d9fcdfa03725eff41782ad97d')
- end
-
- ActiveSession.cleanup(user)
-
- Gitlab::Redis::SharedState.with do |redis|
- expect(redis.smembers("session:lookup:user:gitlab:#{user.id}")).to eq ['6919a6f1bb119dd7396fadc38fd18d0d']
- end
- end
-
- it 'does not bail if there are no lookup entries' do
- ActiveSession.cleanup(user)
- end
- end
-end