Commit 862d0b5c authored by nmilojevic1's avatar nmilojevic1

Simplify specs to only cover Redis::Sessions use case

- Remove shared example redis sessions store
- We are using single instance in CI
parent 229fd8af
...@@ -45,8 +45,7 @@ RSpec.describe Groups::DependencyProxyForContainersController do ...@@ -45,8 +45,7 @@ RSpec.describe Groups::DependencyProxyForContainersController do
expect(response).to have_gitlab_http_status(:not_found) expect(response).to have_gitlab_http_status(:not_found)
end end
shared_examples 'active session' do context 'with an active session', :clean_gitlab_redis_sessions do
context 'with an active session' do
let(:session_id) { '42' } let(:session_id) { '42' }
let(:session_time) { 5.minutes.ago } let(:session_time) { 5.minutes.ago }
let(:stored_session) do let(:stored_session) do
...@@ -54,7 +53,7 @@ RSpec.describe Groups::DependencyProxyForContainersController do ...@@ -54,7 +53,7 @@ RSpec.describe Groups::DependencyProxyForContainersController do
end end
before do before do
redis_store_class.with do |redis| Gitlab::Redis::Sessions.with do |redis|
redis.set("session:gitlab:#{session_id}", Marshal.dump(stored_session)) redis.set("session:gitlab:#{session_id}", Marshal.dump(stored_session))
redis.sadd("session:lookup:user:gitlab:#{user.id}", [session_id]) redis.sadd("session:lookup:user:gitlab:#{user.id}", [session_id])
end end
...@@ -64,9 +63,6 @@ RSpec.describe Groups::DependencyProxyForContainersController do ...@@ -64,9 +63,6 @@ RSpec.describe Groups::DependencyProxyForContainersController do
end end
end end
it_behaves_like 'redis sessions store', 'active session'
end
context 'when git check is not enforced' do context 'when git check is not enforced' do
it_behaves_like successful_example it_behaves_like successful_example
end end
......
...@@ -85,12 +85,7 @@ RSpec.describe 'Login' do ...@@ -85,12 +85,7 @@ RSpec.describe 'Login' do
expect(page.body).to have_link('Register now', href: new_user_registration_path) expect(page.body).to have_link('Register now', href: new_user_registration_path)
end end
RSpec.shared_examples_for 'two-factor authentication' do describe 'with two-factor authentication required', :clean_gitlab_redis_sessions do
before do
load Rails.root.join('config/initializers/session_store.rb')
end
describe 'with two-factor authentication required' do
let_it_be(:user) { create(:user) } let_it_be(:user) { create(:user) }
let_it_be(:smartcard_identity) { create(:smartcard_identity, user: user) } let_it_be(:smartcard_identity) { create(:smartcard_identity, user: user) }
...@@ -129,9 +124,6 @@ RSpec.describe 'Login' do ...@@ -129,9 +124,6 @@ RSpec.describe 'Login' do
end end
end end
end end
it_behaves_like 'redis sessions store', 'two-factor authentication'
end
end end
end end
......
...@@ -9,7 +9,6 @@ RSpec.describe Gitlab::Auth::GroupSaml::SessionEnforcer do ...@@ -9,7 +9,6 @@ RSpec.describe Gitlab::Auth::GroupSaml::SessionEnforcer do
end end
end end
RSpec.shared_examples_for 'group saml session enforcer' do
describe '#access_restricted' do describe '#access_restricted' do
let_it_be(:saml_provider) { create(:saml_provider, enforced_sso: true) } let_it_be(:saml_provider) { create(:saml_provider, enforced_sso: true) }
let_it_be(:user) { create(:user) } let_it_be(:user) { create(:user) }
...@@ -28,7 +27,7 @@ RSpec.describe Gitlab::Auth::GroupSaml::SessionEnforcer do ...@@ -28,7 +27,7 @@ RSpec.describe Gitlab::Auth::GroupSaml::SessionEnforcer do
allow(saml_provider).to receive(:git_check_enforced?).and_return(true) allow(saml_provider).to receive(:git_check_enforced?).and_return(true)
end end
context 'with an active session' do context 'with an active session', :clean_gitlab_redis_sessions do
let(:session_id) { '42' } let(:session_id) { '42' }
let(:session_time) { 5.minutes.ago } let(:session_time) { 5.minutes.ago }
let(:stored_session) do let(:stored_session) do
...@@ -36,7 +35,7 @@ RSpec.describe Gitlab::Auth::GroupSaml::SessionEnforcer do ...@@ -36,7 +35,7 @@ RSpec.describe Gitlab::Auth::GroupSaml::SessionEnforcer do
end end
before do before do
redis_store_class.with do |redis| Gitlab::Redis::Sessions.with do |redis|
redis.set("session:gitlab:#{session_id}", Marshal.dump(stored_session)) redis.set("session:gitlab:#{session_id}", Marshal.dump(stored_session))
redis.sadd("session:lookup:user:gitlab:#{user.id}", [session_id]) redis.sadd("session:lookup:user:gitlab:#{user.id}", [session_id])
end end
...@@ -64,14 +63,14 @@ RSpec.describe Gitlab::Auth::GroupSaml::SessionEnforcer do ...@@ -64,14 +63,14 @@ RSpec.describe Gitlab::Auth::GroupSaml::SessionEnforcer do
end end
end end
context 'with two active sessions' do context 'with two active sessions', :clean_gitlab_redis_sessions do
let(:second_session_id) { '52' } let(:second_session_id) { '52' }
let(:second_stored_session) do let(:second_stored_session) do
{ 'active_group_sso_sign_ins' => { create(:saml_provider, enforced_sso: true).id => session_time } } { 'active_group_sso_sign_ins' => { create(:saml_provider, enforced_sso: true).id => session_time } }
end end
before do before do
redis_store_class.with do |redis| Gitlab::Redis::Sessions.with do |redis|
redis.set("session:gitlab:#{second_session_id}", Marshal.dump(second_stored_session)) redis.set("session:gitlab:#{second_session_id}", Marshal.dump(second_stored_session))
redis.sadd("session:lookup:user:gitlab:#{user.id}", [session_id, second_session_id]) redis.sadd("session:lookup:user:gitlab:#{user.id}", [session_id, second_session_id])
end end
...@@ -80,7 +79,7 @@ RSpec.describe Gitlab::Auth::GroupSaml::SessionEnforcer do ...@@ -80,7 +79,7 @@ RSpec.describe Gitlab::Auth::GroupSaml::SessionEnforcer do
it_behaves_like 'not enforced' it_behaves_like 'not enforced'
end end
context 'with two active sessions for the same provider and one pre-sso' do context 'with two active sessions for the same provider and one pre-sso', :clean_gitlab_redis_sessions do
let(:second_session_id) { '52' } let(:second_session_id) { '52' }
let(:third_session_id) { '62' } let(:third_session_id) { '62' }
let(:second_stored_session) do let(:second_stored_session) do
...@@ -88,7 +87,7 @@ RSpec.describe Gitlab::Auth::GroupSaml::SessionEnforcer do ...@@ -88,7 +87,7 @@ RSpec.describe Gitlab::Auth::GroupSaml::SessionEnforcer do
end end
before do before do
redis_store_class.with do |redis| Gitlab::Redis::Sessions.with do |redis|
redis.set("session:gitlab:#{second_session_id}", Marshal.dump(second_stored_session)) redis.set("session:gitlab:#{second_session_id}", Marshal.dump(second_stored_session))
redis.set("session:gitlab:#{third_session_id}", Marshal.dump({})) redis.set("session:gitlab:#{third_session_id}", Marshal.dump({}))
redis.sadd("session:lookup:user:gitlab:#{user.id}", [session_id, second_session_id, third_session_id]) redis.sadd("session:lookup:user:gitlab:#{user.id}", [session_id, second_session_id, third_session_id])
...@@ -193,14 +192,14 @@ RSpec.describe Gitlab::Auth::GroupSaml::SessionEnforcer do ...@@ -193,14 +192,14 @@ RSpec.describe Gitlab::Auth::GroupSaml::SessionEnforcer do
allow(saml_provider).to receive(:git_check_enforced?).and_return(false) allow(saml_provider).to receive(:git_check_enforced?).and_return(false)
end end
context 'with an active session' do context 'with an active session', :clean_gitlab_redis_sessions do
let(:session_id) { '42' } let(:session_id) { '42' }
let(:stored_session) do let(:stored_session) do
{ 'active_group_sso_sign_ins' => { saml_provider.id => 5.minutes.ago } } { 'active_group_sso_sign_ins' => { saml_provider.id => 5.minutes.ago } }
end end
before do before do
redis_store_class.with do |redis| Gitlab::Redis::Sessions.with do |redis|
redis.set("session:gitlab:#{session_id}", Marshal.dump(stored_session)) redis.set("session:gitlab:#{session_id}", Marshal.dump(stored_session))
redis.sadd("session:lookup:user:gitlab:#{user.id}", [session_id]) redis.sadd("session:lookup:user:gitlab:#{user.id}", [session_id])
end end
...@@ -214,7 +213,4 @@ RSpec.describe Gitlab::Auth::GroupSaml::SessionEnforcer do ...@@ -214,7 +213,4 @@ RSpec.describe Gitlab::Auth::GroupSaml::SessionEnforcer do
end end
end end
end end
end
it_behaves_like 'redis sessions store', 'group saml session enforcer'
end end
...@@ -2,8 +2,7 @@ ...@@ -2,8 +2,7 @@
require 'spec_helper' require 'spec_helper'
RSpec.describe Gitlab::Auth::Otp::SessionEnforcer do RSpec.describe Gitlab::Auth::Otp::SessionEnforcer, :clean_gitlab_redis_sessions do
shared_examples_for 'otp session enforcer' do
let_it_be(:key) { create(:key)} let_it_be(:key) { create(:key)}
describe '#update_session' do describe '#update_session' do
...@@ -14,7 +13,7 @@ RSpec.describe Gitlab::Auth::Otp::SessionEnforcer do ...@@ -14,7 +13,7 @@ RSpec.describe Gitlab::Auth::Otp::SessionEnforcer do
end end
it 'registers a session in Redis' do it 'registers a session in Redis' do
expect(redis_store_class).to receive(:with).and_yield(redis) expect(Gitlab::Redis::Sessions).to receive(:with).and_yield(redis)
session_expiry_in_seconds = Gitlab::CurrentSettings.git_two_factor_session_expiry.minutes.to_i session_expiry_in_seconds = Gitlab::CurrentSettings.git_two_factor_session_expiry.minutes.to_i
expect(redis).to( expect(redis).to(
...@@ -49,7 +48,7 @@ RSpec.describe Gitlab::Auth::Otp::SessionEnforcer do ...@@ -49,7 +48,7 @@ RSpec.describe Gitlab::Auth::Otp::SessionEnforcer do
context 'with existing session' do context 'with existing session' do
before do before do
redis_store_class.with do |redis| Gitlab::Redis::Sessions.with do |redis|
redis.set("#{::Gitlab::Redis::Sessions::OTP_SESSIONS_NAMESPACE}:#{key.id}", true ) redis.set("#{::Gitlab::Redis::Sessions::OTP_SESSIONS_NAMESPACE}:#{key.id}", true )
end end
end end
...@@ -61,7 +60,4 @@ RSpec.describe Gitlab::Auth::Otp::SessionEnforcer do ...@@ -61,7 +60,4 @@ RSpec.describe Gitlab::Auth::Otp::SessionEnforcer do
it { is_expected.to be_truthy } it { is_expected.to be_truthy }
end end
end end
end
it_behaves_like 'redis sessions store', 'otp session enforcer'
end end
...@@ -29,15 +29,14 @@ RSpec.describe Gitlab::Auth::Smartcard::SessionEnforcer do ...@@ -29,15 +29,14 @@ RSpec.describe Gitlab::Auth::Smartcard::SessionEnforcer do
stub_smartcard_setting(enabled: true, required_for_git_access: true) stub_smartcard_setting(enabled: true, required_for_git_access: true)
end end
RSpec.shared_examples_for 'smartcard session' do context 'with a smartcard session', :clean_gitlab_redis_sessions do
context 'with a smartcard session' do
let(:session_id) { '42' } let(:session_id) { '42' }
let(:stored_session) do let(:stored_session) do
{ 'smartcard_signins' => { 'last_signin_at' => 5.minutes.ago } } { 'smartcard_signins' => { 'last_signin_at' => 5.minutes.ago } }
end end
before do before do
redis_store_class.with do |redis| Gitlab::Redis::Sessions.with do |redis|
redis.set("session:gitlab:#{session_id}", Marshal.dump(stored_session)) redis.set("session:gitlab:#{session_id}", Marshal.dump(stored_session))
redis.sadd("session:lookup:user:gitlab:#{user.id}", [session_id]) redis.sadd("session:lookup:user:gitlab:#{user.id}", [session_id])
end end
...@@ -45,9 +44,6 @@ RSpec.describe Gitlab::Auth::Smartcard::SessionEnforcer do ...@@ -45,9 +44,6 @@ RSpec.describe Gitlab::Auth::Smartcard::SessionEnforcer do
it { is_expected.to be_falsey } it { is_expected.to be_falsey }
end end
end
it_behaves_like 'redis sessions store', 'smartcard session'
context 'without any session' do context 'without any session' do
it { is_expected.to be_truthy } it { is_expected.to be_truthy }
......
...@@ -3,20 +3,19 @@ ...@@ -3,20 +3,19 @@
require 'spec_helper' require 'spec_helper'
RSpec.describe Gitlab::Auth::Smartcard::Session do RSpec.describe Gitlab::Auth::Smartcard::Session do
RSpec.shared_examples_for 'smartcard session' do
describe '#active?' do describe '#active?' do
let(:user) { create(:user) } let(:user) { create(:user) }
subject { described_class.new.active?(user) } subject { described_class.new.active?(user) }
context 'with a smartcard session' do context 'with a smartcard session', :clean_gitlab_redis_sessions do
let(:session_id) { '42' } let(:session_id) { '42' }
let(:stored_session) do let(:stored_session) do
{ 'smartcard_signins' => { 'last_signin_at' => 5.minutes.ago } } { 'smartcard_signins' => { 'last_signin_at' => 5.minutes.ago } }
end end
before do before do
redis_store_class.with do |redis| Gitlab::Redis::Sessions.with do |redis|
redis.set("session:gitlab:#{session_id}", Marshal.dump(stored_session)) redis.set("session:gitlab:#{session_id}", Marshal.dump(stored_session))
redis.sadd("session:lookup:user:gitlab:#{user.id}", [session_id]) redis.sadd("session:lookup:user:gitlab:#{user.id}", [session_id])
end end
...@@ -45,7 +44,4 @@ RSpec.describe Gitlab::Auth::Smartcard::Session do ...@@ -45,7 +44,4 @@ RSpec.describe Gitlab::Auth::Smartcard::Session do
expect(Gitlab::Session.current[:smartcard_signins]).to eq({ 'last_signin_at' => now }) expect(Gitlab::Session.current[:smartcard_signins]).to eq({ 'last_signin_at' => now })
end end
end end
end
it_behaves_like 'redis sessions store', 'smartcard session'
end end
...@@ -704,7 +704,6 @@ RSpec.describe Gitlab::GitAccess do ...@@ -704,7 +704,6 @@ RSpec.describe Gitlab::GitAccess do
end end
end end
RSpec.shared_examples_for 'checks smartcard access & otp session' do
describe '#check_smartcard_access!' do describe '#check_smartcard_access!' do
before do before do
stub_licensed_features(smartcard_auth: true) stub_licensed_features(smartcard_auth: true)
...@@ -713,14 +712,14 @@ RSpec.describe Gitlab::GitAccess do ...@@ -713,14 +712,14 @@ RSpec.describe Gitlab::GitAccess do
project.add_developer(user) project.add_developer(user)
end end
context 'user with a smartcard session' do context 'user with a smartcard session', :clean_gitlab_redis_sessions do
let(:session_id) { '42' } let(:session_id) { '42' }
let(:stored_session) do let(:stored_session) do
{ 'smartcard_signins' => { 'last_signin_at' => 5.minutes.ago } } { 'smartcard_signins' => { 'last_signin_at' => 5.minutes.ago } }
end end
before do before do
redis_store_class.with do |redis| Gitlab::Redis::Sessions.with do |redis|
redis.set("session:gitlab:#{session_id}", Marshal.dump(stored_session)) redis.set("session:gitlab:#{session_id}", Marshal.dump(stored_session))
redis.sadd("session:lookup:user:gitlab:#{user.id}", [session_id]) redis.sadd("session:lookup:user:gitlab:#{user.id}", [session_id])
end end
...@@ -773,9 +772,9 @@ RSpec.describe Gitlab::GitAccess do ...@@ -773,9 +772,9 @@ RSpec.describe Gitlab::GitAccess do
stub_licensed_features(git_two_factor_enforcement: true) stub_licensed_features(git_two_factor_enforcement: true)
end end
context 'with an OTP session' do context 'with an OTP session', :clean_gitlab_redis_sessions do
before do before do
redis_store_class.with do |redis| Gitlab::Redis::Sessions.with do |redis|
redis.set("#{Gitlab::Redis::Sessions::OTP_SESSIONS_NAMESPACE}:#{key.id}", true) redis.set("#{Gitlab::Redis::Sessions::OTP_SESSIONS_NAMESPACE}:#{key.id}", true)
end end
end end
...@@ -804,7 +803,7 @@ RSpec.describe Gitlab::GitAccess do ...@@ -804,7 +803,7 @@ RSpec.describe Gitlab::GitAccess do
def stub_redis def stub_redis
redis = double(:redis) redis = double(:redis)
expect(redis_store_class).to receive(:with).at_most(:twice).and_yield(redis) expect(Gitlab::Redis::Sessions).to receive(:with).at_most(:twice).and_yield(redis)
expect(redis).to( expect(redis).to(
receive(:get) receive(:get)
...@@ -930,9 +929,6 @@ RSpec.describe Gitlab::GitAccess do ...@@ -930,9 +929,6 @@ RSpec.describe Gitlab::GitAccess do
end end
end end
end end
end
it_behaves_like 'redis sessions store', 'checks smartcard access & otp session'
describe '#check_sso_session!' do describe '#check_sso_session!' do
before do before do
......
...@@ -154,15 +154,14 @@ RSpec.describe API::Internal::Base do ...@@ -154,15 +154,14 @@ RSpec.describe API::Internal::Base do
project.add_developer(user) project.add_developer(user)
end end
RSpec.shared_examples_for 'smartcard session' do context 'user with a smartcard session', :clean_gitlab_redis_sessions do
context 'user with a smartcard session' do
let(:session_id) { '42' } let(:session_id) { '42' }
let(:stored_session) do let(:stored_session) do
{ 'smartcard_signins' => { 'last_signin_at' => 5.minutes.ago } } { 'smartcard_signins' => { 'last_signin_at' => 5.minutes.ago } }
end end
before do before do
redis_store_class.with do |redis| Gitlab::Redis::Sessions.with do |redis|
redis.set("session:gitlab:#{session_id}", Marshal.dump(stored_session)) redis.set("session:gitlab:#{session_id}", Marshal.dump(stored_session))
redis.sadd("session:lookup:user:gitlab:#{user.id}", [session_id]) redis.sadd("session:lookup:user:gitlab:#{user.id}", [session_id])
end end
...@@ -174,9 +173,6 @@ RSpec.describe API::Internal::Base do ...@@ -174,9 +173,6 @@ RSpec.describe API::Internal::Base do
expect(response).to have_gitlab_http_status(:ok) expect(response).to have_gitlab_http_status(:ok)
end end
end end
end
it_behaves_like 'redis sessions store', 'smartcard session'
context 'user without a smartcard session' do context 'user without a smartcard session' do
it "does not allow access" do it "does not allow access" do
......
...@@ -54,15 +54,14 @@ RSpec.describe Repositories::GitHttpController, type: :request do ...@@ -54,15 +54,14 @@ RSpec.describe Repositories::GitHttpController, type: :request do
project.add_developer(user) project.add_developer(user)
end end
RSpec.shared_examples_for 'smartcard session' do context 'user with a smartcard session', :clean_gitlab_redis_sessions do
context 'user with a smartcard session' do
let(:session_id) { '42' } let(:session_id) { '42' }
let(:stored_session) do let(:stored_session) do
{ 'smartcard_signins' => { 'last_signin_at' => 5.minutes.ago } } { 'smartcard_signins' => { 'last_signin_at' => 5.minutes.ago } }
end end
before do before do
redis_store_class.with do |redis| Gitlab::Redis::Sessions.with do |redis|
redis.set("session:gitlab:#{session_id}", Marshal.dump(stored_session)) redis.set("session:gitlab:#{session_id}", Marshal.dump(stored_session))
redis.sadd("session:lookup:user:gitlab:#{user.id}", [session_id]) redis.sadd("session:lookup:user:gitlab:#{user.id}", [session_id])
end end
...@@ -74,9 +73,6 @@ RSpec.describe Repositories::GitHttpController, type: :request do ...@@ -74,9 +73,6 @@ RSpec.describe Repositories::GitHttpController, type: :request do
expect(response).to have_gitlab_http_status(:ok) expect(response).to have_gitlab_http_status(:ok)
end end
end end
end
it_behaves_like 'redis sessions store', 'smartcard session'
context 'user without a smartcard session' do context 'user without a smartcard session' do
it "does not allow access" do it "does not allow access" do
......
...@@ -2,13 +2,12 @@ ...@@ -2,13 +2,12 @@
require 'spec_helper' require 'spec_helper'
RSpec.describe ApplicationCable::Connection do RSpec.describe ApplicationCable::Connection, :clean_gitlab_redis_sessions do
RSpec.shared_examples_for 'ApplicationCable::Connection' do
let(:session_id) { Rack::Session::SessionId.new('6919a6f1bb119dd7396fadc38fd18d0d') } let(:session_id) { Rack::Session::SessionId.new('6919a6f1bb119dd7396fadc38fd18d0d') }
context 'when session cookie is set' do context 'when session cookie is set' do
before do before do
redis_store_class.with do |redis| Gitlab::Redis::Sessions.with do |redis|
redis.set("session:gitlab:#{session_id.private_id}", Marshal.dump(session_hash)) redis.set("session:gitlab:#{session_id.private_id}", Marshal.dump(session_hash))
end end
...@@ -65,7 +64,4 @@ RSpec.describe ApplicationCable::Connection do ...@@ -65,7 +64,4 @@ RSpec.describe ApplicationCable::Connection do
expect(connection.current_user).to be_nil expect(connection.current_user).to be_nil
end end
end end
end
it_behaves_like 'redis sessions store', 'ApplicationCable::Connection'
end end
...@@ -2,8 +2,7 @@ ...@@ -2,8 +2,7 @@
require 'spec_helper' require 'spec_helper'
RSpec.describe 'Active user sessions' do RSpec.describe 'Active user sessions', :clean_gitlab_redis_sessions do
RSpec.shared_examples_for 'active user sessions' do
it 'successful login adds a new active user login' do it 'successful login adds a new active user login' do
now = Time.zone.parse('2018-03-12 09:06') now = Time.zone.parse('2018-03-12 09:06')
Timecop.freeze(now) do Timecop.freeze(now) do
...@@ -30,13 +29,13 @@ RSpec.describe 'Active user sessions' do ...@@ -30,13 +29,13 @@ RSpec.describe 'Active user sessions' do
it 'successful login cleans up obsolete entries' do it 'successful login cleans up obsolete entries' do
user = create(:user) user = create(:user)
redis_store_class.with do |redis| Gitlab::Redis::Sessions.with do |redis|
redis.sadd("session:lookup:user:gitlab:#{user.id}", '59822c7d9fcdfa03725eff41782ad97d') redis.sadd("session:lookup:user:gitlab:#{user.id}", '59822c7d9fcdfa03725eff41782ad97d')
end end
gitlab_sign_in(user) gitlab_sign_in(user)
redis_store_class.with do |redis| Gitlab::Redis::Sessions.with do |redis|
expect(redis.smembers("session:lookup:user:gitlab:#{user.id}")).not_to include '59822c7d9fcdfa03725eff41782ad97d' expect(redis.smembers("session:lookup:user:gitlab:#{user.id}")).not_to include '59822c7d9fcdfa03725eff41782ad97d'
end end
end end
...@@ -45,14 +44,14 @@ RSpec.describe 'Active user sessions' do ...@@ -45,14 +44,14 @@ RSpec.describe 'Active user sessions' do
user = create(:user) user = create(:user)
personal_access_token = create(:personal_access_token, user: user) personal_access_token = create(:personal_access_token, user: user)
redis_store_class.with do |redis| Gitlab::Redis::Sessions.with do |redis|
redis.sadd("session:lookup:user:gitlab:#{user.id}", '59822c7d9fcdfa03725eff41782ad97d') redis.sadd("session:lookup:user:gitlab:#{user.id}", '59822c7d9fcdfa03725eff41782ad97d')
end end
visit user_path(user, :atom, private_token: personal_access_token.token) visit user_path(user, :atom, private_token: personal_access_token.token)
expect(page.status_code).to eq 200 expect(page.status_code).to eq 200
redis_store_class.with do |redis| Gitlab::Redis::Sessions.with do |redis|
expect(redis.smembers("session:lookup:user:gitlab:#{user.id}")).to include '59822c7d9fcdfa03725eff41782ad97d' expect(redis.smembers("session:lookup:user:gitlab:#{user.id}")).to include '59822c7d9fcdfa03725eff41782ad97d'
end end
end end
...@@ -69,7 +68,4 @@ RSpec.describe 'Active user sessions' do ...@@ -69,7 +68,4 @@ RSpec.describe 'Active user sessions' do
expect(ActiveSession.list(user)).to be_empty expect(ActiveSession.list(user)).to be_empty
end end
end
it_behaves_like 'redis sessions store', 'active user sessions'
end end
...@@ -2,10 +2,9 @@ ...@@ -2,10 +2,9 @@
require 'spec_helper' require 'spec_helper'
RSpec.describe 'Session TTLs' do RSpec.describe 'Session TTLs', :clean_gitlab_redis_shared_state do
include SessionHelpers include SessionHelpers
RSpec.shared_examples_for 'session ttls' do
it 'creates a session with a short TTL when login fails' do it 'creates a session with a short TTL when login fails' do
visit new_user_session_path visit new_user_session_path
# The session key only gets created after a post # The session key only gets created after a post
...@@ -15,7 +14,7 @@ RSpec.describe 'Session TTLs' do ...@@ -15,7 +14,7 @@ RSpec.describe 'Session TTLs' do
expect(page).to have_content('Invalid login or password') expect(page).to have_content('Invalid login or password')
expect_single_session_with_short_ttl(redis_store_class) expect_single_session_with_short_ttl
end end
it 'increases the TTL when the login succeeds' do it 'increases the TTL when the login succeeds' do
...@@ -24,7 +23,7 @@ RSpec.describe 'Session TTLs' do ...@@ -24,7 +23,7 @@ RSpec.describe 'Session TTLs' do
expect(page).to have_content(user.name) expect(page).to have_content(user.name)
expect_single_session_with_authenticated_ttl(redis_store_class) expect_single_session_with_authenticated_ttl
end end
context 'with an unauthorized project' do context 'with an unauthorized project' do
...@@ -33,11 +32,8 @@ RSpec.describe 'Session TTLs' do ...@@ -33,11 +32,8 @@ RSpec.describe 'Session TTLs' do
it 'creates a session with a short TTL' do it 'creates a session with a short TTL' do
visit project_raw_path(project, 'master/README.md') visit project_raw_path(project, 'master/README.md')
expect_single_session_with_short_ttl(redis_store_class) expect_single_session_with_short_ttl
expect(page).to have_current_path(new_user_session_path) expect(page).to have_current_path(new_user_session_path)
end end
end end
end
it_behaves_like 'redis sessions store', 'session ttls'
end end
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
require 'spec_helper' require 'spec_helper'
RSpec.describe 'Login' do RSpec.describe 'Login', :clean_gitlab_redis_sessions do
include TermsHelper include TermsHelper
include UserLoginHelper include UserLoginHelper
include SessionHelpers include SessionHelpers
...@@ -11,11 +11,6 @@ RSpec.describe 'Login' do ...@@ -11,11 +11,6 @@ RSpec.describe 'Login' do
stub_authentication_activity_metrics(debug: true) stub_authentication_activity_metrics(debug: true)
end end
RSpec.shared_examples_for 'login' do
before do
load Rails.root.join('config/initializers/session_store.rb')
end
describe 'password reset token after successful sign in' do describe 'password reset token after successful sign in' do
it 'invalidates password reset token' do it 'invalidates password reset token' do
expect(authentication_metrics) expect(authentication_metrics)
...@@ -65,7 +60,7 @@ RSpec.describe 'Login' do ...@@ -65,7 +60,7 @@ RSpec.describe 'Login' do
fill_in 'user_password', with: 'password' fill_in 'user_password', with: 'password'
click_button 'Sign in' click_button 'Sign in'
expect_single_session_with_authenticated_ttl(redis_store_class) expect_single_session_with_authenticated_ttl
expect(current_path).to eq root_path expect(current_path).to eq root_path
end end
...@@ -211,7 +206,7 @@ RSpec.describe 'Login' do ...@@ -211,7 +206,7 @@ RSpec.describe 'Login' do
enter_code(user.current_otp) enter_code(user.current_otp)
expect(page).not_to have_content(I18n.t('devise.failure.already_authenticated')) expect(page).not_to have_content(I18n.t('devise.failure.already_authenticated'))
expect_single_session_with_authenticated_ttl(redis_store_class) expect_single_session_with_authenticated_ttl
end end
it 'does not allow sign-in if the user password is updated before entering a one-time code' do it 'does not allow sign-in if the user password is updated before entering a one-time code' do
...@@ -230,7 +225,7 @@ RSpec.describe 'Login' do ...@@ -230,7 +225,7 @@ RSpec.describe 'Login' do
enter_code(user.current_otp) enter_code(user.current_otp)
expect_single_session_with_authenticated_ttl(redis_store_class) expect_single_session_with_authenticated_ttl
expect(current_path).to eq root_path expect(current_path).to eq root_path
end end
...@@ -259,7 +254,7 @@ RSpec.describe 'Login' do ...@@ -259,7 +254,7 @@ RSpec.describe 'Login' do
enter_code(user.current_otp) enter_code(user.current_otp)
expect_single_session_with_authenticated_ttl(redis_store_class) expect_single_session_with_authenticated_ttl
expect(current_path).to eq root_path expect(current_path).to eq root_path
end end
...@@ -376,7 +371,7 @@ RSpec.describe 'Login' do ...@@ -376,7 +371,7 @@ RSpec.describe 'Login' do
sign_in_using_saml! sign_in_using_saml!
expect_single_session_with_authenticated_ttl(redis_store_class) expect_single_session_with_authenticated_ttl
expect(page).not_to have_content('Two-Factor Authentication') expect(page).not_to have_content('Two-Factor Authentication')
expect(current_path).to eq root_path expect(current_path).to eq root_path
end end
...@@ -395,7 +390,7 @@ RSpec.describe 'Login' do ...@@ -395,7 +390,7 @@ RSpec.describe 'Login' do
enter_code(user.current_otp) enter_code(user.current_otp)
expect_single_session_with_authenticated_ttl(redis_store_class) expect_single_session_with_authenticated_ttl
expect(current_path).to eq root_path expect(current_path).to eq root_path
end end
end end
...@@ -416,7 +411,7 @@ RSpec.describe 'Login' do ...@@ -416,7 +411,7 @@ RSpec.describe 'Login' do
gitlab_sign_in(user) gitlab_sign_in(user)
expect_single_session_with_authenticated_ttl(redis_store_class) expect_single_session_with_authenticated_ttl
expect(current_path).to eq root_path expect(current_path).to eq root_path
expect(page).not_to have_content(I18n.t('devise.failure.already_authenticated')) expect(page).not_to have_content(I18n.t('devise.failure.already_authenticated'))
end end
...@@ -428,7 +423,7 @@ RSpec.describe 'Login' do ...@@ -428,7 +423,7 @@ RSpec.describe 'Login' do
gitlab_sign_in(user) gitlab_sign_in(user)
visit new_user_session_path visit new_user_session_path
expect_single_session_with_authenticated_ttl(redis_store_class) expect_single_session_with_authenticated_ttl
expect(page).not_to have_content(I18n.t('devise.failure.already_authenticated')) expect(page).not_to have_content(I18n.t('devise.failure.already_authenticated'))
end end
...@@ -470,7 +465,7 @@ RSpec.describe 'Login' do ...@@ -470,7 +465,7 @@ RSpec.describe 'Login' do
gitlab_sign_in(user) gitlab_sign_in(user)
expect_single_session_with_short_ttl(redis_store_class) expect_single_session_with_short_ttl
expect(page).to have_content('Invalid login or password.') expect(page).to have_content('Invalid login or password.')
end end
end end
...@@ -957,7 +952,4 @@ RSpec.describe 'Login' do ...@@ -957,7 +952,4 @@ RSpec.describe 'Login' do
end end
end end
end end
end
it_behaves_like 'redis sessions store', 'login'
end end
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
require 'spec_helper' require 'spec_helper'
RSpec.describe Gitlab::AnonymousSession do RSpec.describe Gitlab::AnonymousSession, :clean_gitlab_redis_sessions do
let(:default_session_id) { '6919a6f1bb119dd7396fadc38fd18d0d' } let(:default_session_id) { '6919a6f1bb119dd7396fadc38fd18d0d' }
let(:additional_session_id) { '7919a6f1bb119dd7396fadc38fd18d0d' } let(:additional_session_id) { '7919a6f1bb119dd7396fadc38fd18d0d' }
...@@ -12,12 +12,11 @@ RSpec.describe Gitlab::AnonymousSession do ...@@ -12,12 +12,11 @@ RSpec.describe Gitlab::AnonymousSession do
described_class.new('127.0.0.1') described_class.new('127.0.0.1')
end end
RSpec.shared_examples_for 'anonymous sessions' do
describe '#store_session_ip' do describe '#store_session_ip' do
it 'adds session id to proper key' do it 'adds session id to proper key' do
subject.count_session_ip subject.count_session_ip
redis_store_class.with do |redis| Gitlab::Redis::Sessions.with do |redis|
expect(redis.get("session:lookup:ip:gitlab2:127.0.0.1").to_i).to eq 1 expect(redis.get("session:lookup:ip:gitlab2:127.0.0.1").to_i).to eq 1
end end
end end
...@@ -26,7 +25,7 @@ RSpec.describe Gitlab::AnonymousSession do ...@@ -26,7 +25,7 @@ RSpec.describe Gitlab::AnonymousSession do
freeze_time do freeze_time do
subject.count_session_ip subject.count_session_ip
redis_store_class.with do |redis| Gitlab::Redis::Sessions.with do |redis|
expect(redis.ttl("session:lookup:ip:gitlab2:127.0.0.1")).to eq(24.hours.to_i) expect(redis.ttl("session:lookup:ip:gitlab2:127.0.0.1")).to eq(24.hours.to_i)
end end
end end
...@@ -37,7 +36,7 @@ RSpec.describe Gitlab::AnonymousSession do ...@@ -37,7 +36,7 @@ RSpec.describe Gitlab::AnonymousSession do
subject.count_session_ip subject.count_session_ip
new_anonymous_session.count_session_ip new_anonymous_session.count_session_ip
redis_store_class.with do |redis| Gitlab::Redis::Sessions.with do |redis|
expect(redis.get("session:lookup:ip:gitlab2:127.0.0.1").to_i).to eq(2) expect(redis.get("session:lookup:ip:gitlab2:127.0.0.1").to_i).to eq(2)
end end
end end
...@@ -46,7 +45,7 @@ RSpec.describe Gitlab::AnonymousSession do ...@@ -46,7 +45,7 @@ RSpec.describe Gitlab::AnonymousSession do
describe '#stored_sessions' do describe '#stored_sessions' do
it 'returns all anonymous sessions per ip' do it 'returns all anonymous sessions per ip' do
redis_store_class.with do |redis| Gitlab::Redis::Sessions.with do |redis|
redis.set("session:lookup:ip:gitlab2:127.0.0.1", 2) redis.set("session:lookup:ip:gitlab2:127.0.0.1", 2)
end end
...@@ -55,17 +54,14 @@ RSpec.describe Gitlab::AnonymousSession do ...@@ -55,17 +54,14 @@ RSpec.describe Gitlab::AnonymousSession do
end end
it 'removes obsolete lookup through ip entries' do it 'removes obsolete lookup through ip entries' do
redis_store_class.with do |redis| Gitlab::Redis::Sessions.with do |redis|
redis.set("session:lookup:ip:gitlab2:127.0.0.1", 2) redis.set("session:lookup:ip:gitlab2:127.0.0.1", 2)
end end
subject.cleanup_session_per_ip_count subject.cleanup_session_per_ip_count
redis_store_class.with do |redis| Gitlab::Redis::Sessions.with do |redis|
expect(redis.exists("session:lookup:ip:gitlab2:127.0.0.1")).to eq(false) expect(redis.exists("session:lookup:ip:gitlab2:127.0.0.1")).to eq(false)
end end
end end
end
it_behaves_like 'redis sessions store', 'anonymous sessions'
end end
This diff is collapsed.
...@@ -376,13 +376,12 @@ RSpec.describe API::Commits do ...@@ -376,13 +376,12 @@ RSpec.describe API::Commits do
end end
end end
RSpec.shared_examples_for 'warden user session' do
context 'when using warden' do context 'when using warden' do
it 'increments usage counters' do it 'increments usage counters', :clean_gitlab_redis_sessions do
session_id = Rack::Session::SessionId.new('6919a6f1bb119dd7396fadc38fd18d0d') session_id = Rack::Session::SessionId.new('6919a6f1bb119dd7396fadc38fd18d0d')
session_hash = { 'warden.user.user.key' => [[user.id], user.encrypted_password[0, 29]] } session_hash = { 'warden.user.user.key' => [[user.id], user.encrypted_password[0, 29]] }
redis_store_class.with do |redis| Gitlab::Redis::Sessions.with do |redis|
redis.set("session:gitlab:#{session_id.private_id}", Marshal.dump(session_hash)) redis.set("session:gitlab:#{session_id.private_id}", Marshal.dump(session_hash))
end end
...@@ -394,9 +393,6 @@ RSpec.describe API::Commits do ...@@ -394,9 +393,6 @@ RSpec.describe API::Commits do
post api(url), params: valid_c_params post api(url), params: valid_c_params
end end
end end
end
it_behaves_like 'redis sessions store', 'warden user session'
context 'a new file in project repo' do context 'a new file in project repo' do
before do before do
......
# frozen_string_literal: true # frozen_string_literal: true
module SessionHelpers module SessionHelpers
def expect_single_session_with_authenticated_ttl(redis_store_class) def expect_single_session_with_authenticated_ttl
expect_single_session_with_expiration(redis_store_class, Settings.gitlab['session_expire_delay'] * 60) expect_single_session_with_expiration(Settings.gitlab['session_expire_delay'] * 60)
end end
def expect_single_session_with_short_ttl(redis_store_class) def expect_single_session_with_short_ttl
expect_single_session_with_expiration(redis_store_class, Settings.gitlab['unauthenticated_session_expire_delay']) expect_single_session_with_expiration(Settings.gitlab['unauthenticated_session_expire_delay'])
end end
def expect_single_session_with_expiration(redis_store_class, expiration) def expect_single_session_with_expiration(expiration)
session_keys = get_session_keys(redis_store_class) session_keys = get_session_keys
expect(session_keys.size).to eq(1) expect(session_keys.size).to eq(1)
expect(get_ttl(redis_store_class, session_keys.first)).to be_within(5).of(expiration) expect(get_ttl(session_keys.first)).to be_within(5).of(expiration)
end end
def get_session_keys(redis_store_class) def get_session_keys
redis_store_class.with { |redis| redis.scan_each(match: 'session:gitlab:*').to_a } Gitlab::Redis::Sessions.with { |redis| redis.scan_each(match: 'session:gitlab:*').to_a }
end end
def get_ttl(redis_store_class, key) def get_ttl(key)
redis_store_class.with { |redis| redis.ttl(key) } Gitlab::Redis::Sessions.with { |redis| redis.ttl(key) }
end end
end end
# frozen_string_literal: true
RSpec.shared_examples 'redis sessions store' do |example|
context 'when ENV[GITLAB_USE_REDIS_SESSIONS_STORE] is true', :clean_gitlab_redis_sessions do
before do
stub_env('GITLAB_USE_REDIS_SESSIONS_STORE', 'true')
end
it_behaves_like example do
let(:redis_store_class) { Gitlab::Redis::Sessions }
end
end
context 'when ENV[GITLAB_USE_REDIS_SESSIONS_STORE] is false', :clean_gitlab_redis_shared_state do
before do
stub_env('GITLAB_USE_REDIS_SESSIONS_STORE', 'false')
end
it_behaves_like example do
let(:redis_store_class) { Gitlab::Redis::SharedState }
end
end
end
...@@ -18,20 +18,19 @@ RSpec.shared_examples 'snippet edit usage data counters' do ...@@ -18,20 +18,19 @@ RSpec.shared_examples 'snippet edit usage data counters' do
end end
end end
RSpec.shared_examples_for 'sessionless user' do context 'when user is not sessionless', :clean_gitlab_redis_sessions do
context 'when user is not sessionless' do
before do before do
session_id = Rack::Session::SessionId.new('6919a6f1bb119dd7396fadc38fd18d0d') session_id = Rack::Session::SessionId.new('6919a6f1bb119dd7396fadc38fd18d0d')
session_hash = { 'warden.user.user.key' => [[current_user.id], current_user.encrypted_password[0, 29]] } session_hash = { 'warden.user.user.key' => [[current_user.id], current_user.encrypted_password[0, 29]] }
redis_store_class.with do |redis| Gitlab::Redis::Sessions.with do |redis|
redis.set("session:gitlab:#{session_id.private_id}", Marshal.dump(session_hash)) redis.set("session:gitlab:#{session_id.private_id}", Marshal.dump(session_hash))
end end
cookies[Gitlab::Application.config.session_options[:key]] = session_id.public_id cookies[Gitlab::Application.config.session_options[:key]] = session_id.public_id
end end
it 'tracks usage data actions' do it 'tracks usage data actions', :clean_gitlab_redis_sessions do
expect(::Gitlab::UsageDataCounters::EditorUniqueCounter).to receive(:track_snippet_editor_edit_action) expect(::Gitlab::UsageDataCounters::EditorUniqueCounter).to receive(:track_snippet_editor_edit_action)
post_graphql_mutation(mutation) post_graphql_mutation(mutation)
...@@ -47,7 +46,4 @@ RSpec.shared_examples 'snippet edit usage data counters' do ...@@ -47,7 +46,4 @@ RSpec.shared_examples 'snippet edit usage data counters' do
end end
end end
end end
end
it_behaves_like 'redis sessions store', 'sessionless user'
end end
...@@ -3,7 +3,6 @@ ...@@ -3,7 +3,6 @@
require 'rake_helper' require 'rake_helper'
RSpec.describe 'gitlab:cleanup rake tasks', :silence_stdout do RSpec.describe 'gitlab:cleanup rake tasks', :silence_stdout do
RSpec.shared_examples_for 'rake gitlab:cleanup' do
before do before do
Rake.application.rake_require 'tasks/gitlab/cleanup' Rake.application.rake_require 'tasks/gitlab/cleanup'
end end
...@@ -167,14 +166,14 @@ RSpec.describe 'gitlab:cleanup rake tasks', :silence_stdout do ...@@ -167,14 +166,14 @@ RSpec.describe 'gitlab:cleanup rake tasks', :silence_stdout do
end end
context 'sessions' do context 'sessions' do
describe 'gitlab:cleanup:sessions:active_sessions_lookup_keys' do describe 'gitlab:cleanup:sessions:active_sessions_lookup_keys', :clean_gitlab_redis_sessions do
subject(:rake_task) { run_rake_task('gitlab:cleanup:sessions:active_sessions_lookup_keys') } subject(:rake_task) { run_rake_task('gitlab:cleanup:sessions:active_sessions_lookup_keys') }
let!(:user) { create(:user) } let!(:user) { create(:user) }
let(:existing_session_id) { '5' } let(:existing_session_id) { '5' }
before do before do
redis_store_class.with do |redis| Gitlab::Redis::Sessions.with do |redis|
redis.set("session:user:gitlab:#{user.id}:#{existing_session_id}", redis.set("session:user:gitlab:#{user.id}:#{existing_session_id}",
Marshal.dump(true)) Marshal.dump(true))
redis.sadd("session:lookup:user:gitlab:#{user.id}", (1..10).to_a) redis.sadd("session:lookup:user:gitlab:#{user.id}", (1..10).to_a)
...@@ -186,7 +185,7 @@ RSpec.describe 'gitlab:cleanup rake tasks', :silence_stdout do ...@@ -186,7 +185,7 @@ RSpec.describe 'gitlab:cleanup rake tasks', :silence_stdout do
end end
it 'removes expired active session lookup keys' do it 'removes expired active session lookup keys' do
redis_store_class.with do |redis| Gitlab::Redis::Sessions.with do |redis|
lookup_key = "session:lookup:user:gitlab:#{user.id}" lookup_key = "session:lookup:user:gitlab:#{user.id}"
expect { subject }.to change { redis.scard(lookup_key) }.from(10).to(1) expect { subject }.to change { redis.scard(lookup_key) }.from(10).to(1)
expect(redis.smembers("session:lookup:user:gitlab:#{user.id}")).to( expect(redis.smembers("session:lookup:user:gitlab:#{user.id}")).to(
...@@ -195,7 +194,4 @@ RSpec.describe 'gitlab:cleanup rake tasks', :silence_stdout do ...@@ -195,7 +194,4 @@ RSpec.describe 'gitlab:cleanup rake tasks', :silence_stdout do
end end
end end
end end
end
it_behaves_like 'redis sessions store', 'rake gitlab:cleanup'
end end
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment