134 lines
4.4 KiB
Ruby
134 lines
4.4 KiB
Ruby
require_relative '../../spec_helper'
|
|
|
|
describe Carto::UserService do
|
|
before(:all) do
|
|
@user = FactoryGirl.create(:valid_user)
|
|
end
|
|
|
|
before(:each) do
|
|
delete_user_data(@user)
|
|
$pool.close_connections!
|
|
end
|
|
|
|
after(:all) do
|
|
bypass_named_maps
|
|
@user.destroy
|
|
end
|
|
|
|
describe "#in_database" do
|
|
it "initializes the connection with the expected options" do
|
|
carto_user = Carto::User.find(@user.id)
|
|
default_opts = {
|
|
username: carto_user.database_username,
|
|
password: carto_user.database_password,
|
|
user_schema: carto_user.database_schema
|
|
}
|
|
expected_params = [carto_user.database_host, carto_user.database_name, default_opts]
|
|
|
|
Carto::Db::Connection.expects(:connect).with(*expected_params)
|
|
|
|
carto_user.in_database
|
|
end
|
|
|
|
it "sets statement timeout option" do
|
|
custom_timeout = 123456
|
|
expected_returned_custom_timeout = { statement_timeout: "#{custom_timeout}ms" }
|
|
|
|
@returned_timeout = nil
|
|
@default_timeout = nil
|
|
@returned_timeout_new = nil
|
|
@default_timeout_new = nil
|
|
|
|
@user.in_database do |db|
|
|
@default_timeout = db[%{SHOW statement_timeout}].first
|
|
end
|
|
|
|
@user.in_database(statement_timeout: custom_timeout) do |db|
|
|
@returned_timeout = db[%{SHOW statement_timeout}].first
|
|
end
|
|
|
|
@returned_timeout.should eq expected_returned_custom_timeout
|
|
@default_timeout.should_not eq @returned_timeout
|
|
|
|
@user.in_database do |db|
|
|
@default_timeout.should eq db[%{SHOW statement_timeout}].first
|
|
end
|
|
|
|
# Now test with CARTO user
|
|
carto_user = Carto::User.find(@user.id)
|
|
|
|
carto_user.in_database do |db|
|
|
@default_timeout_new = db.execute(%{SHOW statement_timeout}).first
|
|
end
|
|
|
|
carto_user.in_database(statement_timeout: custom_timeout) do |db|
|
|
@returned_timeout_new = db.execute(%{SHOW statement_timeout}).first
|
|
end
|
|
|
|
@returned_timeout_new.symbolize_keys!
|
|
@default_timeout_new .symbolize_keys!
|
|
|
|
@returned_timeout_new.should eq expected_returned_custom_timeout
|
|
@default_timeout_new.should_not eq @returned_timeout_new
|
|
|
|
carto_user.in_database do |db|
|
|
@default_timeout_new.should eq db.execute(%{SHOW statement_timeout}).first.symbolize_keys
|
|
end
|
|
|
|
@default_timeout_new .symbolize_keys!
|
|
|
|
@returned_timeout_new.should eq @returned_timeout
|
|
@default_timeout_new.should eq @default_timeout
|
|
end
|
|
|
|
it "sets search_path correctly" do
|
|
expected_returned_normal_search_path = {
|
|
search_path: "#{@user.database_schema}, cartodb, cdb_dataservices_client, public"
|
|
}
|
|
|
|
@normal_search_path = nil
|
|
@normal_search_path_new = nil
|
|
@user.in_database do |db|
|
|
@normal_search_path = db[%{SHOW search_path}].first
|
|
end
|
|
@normal_search_path.should eq expected_returned_normal_search_path
|
|
|
|
carto_user = Carto::User.find(@user.id)
|
|
|
|
carto_user.in_database do |db|
|
|
@normal_search_path_new = db.execute(%{SHOW search_path}).first
|
|
end
|
|
@normal_search_path_new.symbolize_keys!
|
|
@normal_search_path_new.should eq expected_returned_normal_search_path
|
|
|
|
@normal_search_path_new.should eq @normal_search_path
|
|
end
|
|
|
|
it "only allows superadmin operations to the expected roles" do
|
|
carto_user = Carto::User.find(@user.id)
|
|
expect {
|
|
@user.in_database do |conn|
|
|
conn.execute(%{SELECT set_config('log_statement_stats', 'off', false)})
|
|
end
|
|
}.to raise_exception(Sequel::DatabaseError, /permission denied to set parameter "log_statement_stats"/)
|
|
expect {
|
|
carto_user.in_database do |conn|
|
|
conn.execute(%{SELECT set_config('log_statement_stats', 'off', false)})
|
|
end
|
|
}.to raise_exception(ActiveRecord::StatementInvalid, /permission denied to set parameter "log_statement_stats"/)
|
|
@user.in_database(as: :superuser) do |conn|
|
|
conn.execute(%{SELECT set_config('log_statement_stats', 'off', false)})
|
|
end
|
|
carto_user.in_database(as: :superuser) do |conn|
|
|
conn.execute(%{SELECT set_config('log_statement_stats', 'off', false)})
|
|
end
|
|
@user.in_database(as: :cluster_admin) do |conn|
|
|
conn.execute(%{SELECT set_config('log_statement_stats', 'off', false)})
|
|
end
|
|
carto_user.in_database(as: :cluster_admin) do |conn|
|
|
conn.execute(%{SELECT set_config('log_statement_stats', 'off', false)})
|
|
end
|
|
end
|
|
end
|
|
end
|