Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
G
gitlab-ce
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
1
Merge Requests
1
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
nexedi
gitlab-ce
Commits
a75d82f0
Commit
a75d82f0
authored
Jan 21, 2017
by
Stan Hu
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Revert "Merge branch 'dont-persist-application-settings-in-test-env-ee' into 'master'"
This reverts merge request !1056
parent
46f2709d
Changes
13
Hide whitespace changes
Inline
Side-by-side
Showing
13 changed files
with
114 additions
and
156 deletions
+114
-156
app/models/application_setting.rb
app/models/application_setting.rb
+43
-50
lib/gitlab/current_settings.rb
lib/gitlab/current_settings.rb
+35
-13
lib/gitlab/github_import/project_creator.rb
lib/gitlab/github_import/project_creator.rb
+1
-3
spec/controllers/health_check_controller_spec.rb
spec/controllers/health_check_controller_spec.rb
+0
-6
spec/features/admin/admin_disables_git_access_protocol_spec.rb
...features/admin/admin_disables_git_access_protocol_spec.rb
+0
-3
spec/features/admin/admin_health_check_spec.rb
spec/features/admin/admin_health_check_spec.rb
+3
-6
spec/features/admin/admin_runners_spec.rb
spec/features/admin/admin_runners_spec.rb
+0
-3
spec/features/admin/admin_settings_spec.rb
spec/features/admin/admin_settings_spec.rb
+1
-4
spec/features/admin/admin_uses_repository_checks_spec.rb
spec/features/admin/admin_uses_repository_checks_spec.rb
+2
-7
spec/lib/gitlab/current_settings_spec.rb
spec/lib/gitlab/current_settings_spec.rb
+20
-48
spec/lib/gitlab/elastic/indexer_spec.rb
spec/lib/gitlab/elastic/indexer_spec.rb
+3
-9
spec/requests/api/internal_spec.rb
spec/requests/api/internal_spec.rb
+6
-3
spec/spec_helper.rb
spec/spec_helper.rb
+0
-1
No files found.
app/models/application_setting.rb
View file @
a75d82f0
...
...
@@ -14,55 +14,6 @@ class ApplicationSetting < ActiveRecord::Base
[
\r\n
] # any number of newline characters
}x
DEFAULTS_CE
=
{
after_sign_up_text:
nil
,
akismet_enabled:
false
,
container_registry_token_expire_delay:
5
,
default_branch_protection:
Settings
.
gitlab
[
'default_branch_protection'
],
default_project_visibility:
Settings
.
gitlab
.
default_projects_features
[
'visibility_level'
],
default_projects_limit:
Settings
.
gitlab
[
'default_projects_limit'
],
default_snippet_visibility:
Settings
.
gitlab
.
default_projects_features
[
'visibility_level'
],
disabled_oauth_sign_in_sources:
[],
domain_whitelist:
Settings
.
gitlab
[
'domain_whitelist'
],
gravatar_enabled:
Settings
.
gravatar
[
'enabled'
],
help_page_text:
nil
,
housekeeping_bitmaps_enabled:
true
,
housekeeping_enabled:
true
,
housekeeping_full_repack_period:
50
,
housekeeping_gc_period:
200
,
housekeeping_incremental_repack_period:
10
,
import_sources:
Gitlab
::
ImportSources
.
values
,
koding_enabled:
false
,
koding_url:
nil
,
max_artifacts_size:
Settings
.
artifacts
[
'max_size'
],
max_attachment_size:
Settings
.
gitlab
[
'max_attachment_size'
],
plantuml_enabled:
false
,
plantuml_url:
nil
,
recaptcha_enabled:
false
,
repository_checks_enabled:
true
,
repository_storages:
[
'default'
],
require_two_factor_authentication:
false
,
restricted_visibility_levels:
Settings
.
gitlab
[
'restricted_visibility_levels'
],
session_expire_delay:
Settings
.
gitlab
[
'session_expire_delay'
],
send_user_confirmation_email:
false
,
shared_runners_enabled:
Settings
.
gitlab_ci
[
'shared_runners_enabled'
],
shared_runners_text:
nil
,
sidekiq_throttling_enabled:
false
,
sign_in_text:
nil
,
signin_enabled:
Settings
.
gitlab
[
'signin_enabled'
],
signup_enabled:
Settings
.
gitlab
[
'signup_enabled'
],
two_factor_grace_period:
48
,
user_default_external:
false
}
DEFAULTS_EE
=
{
elasticsearch_host:
ENV
[
'ELASTIC_HOST'
]
||
'localhost'
,
elasticsearch_port:
ENV
[
'ELASTIC_PORT'
]
||
'9200'
,
usage_ping_enabled:
true
}
DEFAULTS
=
DEFAULTS_CE
.
merge
(
DEFAULTS_EE
)
serialize
:restricted_visibility_levels
serialize
:import_sources
serialize
:disabled_oauth_sign_in_sources
,
Array
...
...
@@ -225,7 +176,49 @@ class ApplicationSetting < ActiveRecord::Base
end
def
self
.
create_from_defaults
create
(
DEFAULTS
)
create
(
default_projects_limit:
Settings
.
gitlab
[
'default_projects_limit'
],
default_branch_protection:
Settings
.
gitlab
[
'default_branch_protection'
],
signup_enabled:
Settings
.
gitlab
[
'signup_enabled'
],
signin_enabled:
Settings
.
gitlab
[
'signin_enabled'
],
gravatar_enabled:
Settings
.
gravatar
[
'enabled'
],
sign_in_text:
nil
,
after_sign_up_text:
nil
,
help_page_text:
nil
,
shared_runners_text:
nil
,
restricted_visibility_levels:
Settings
.
gitlab
[
'restricted_visibility_levels'
],
max_attachment_size:
Settings
.
gitlab
[
'max_attachment_size'
],
session_expire_delay:
Settings
.
gitlab
[
'session_expire_delay'
],
default_project_visibility:
Settings
.
gitlab
.
default_projects_features
[
'visibility_level'
],
default_snippet_visibility:
Settings
.
gitlab
.
default_projects_features
[
'visibility_level'
],
domain_whitelist:
Settings
.
gitlab
[
'domain_whitelist'
],
import_sources:
Gitlab
::
ImportSources
.
values
,
shared_runners_enabled:
Settings
.
gitlab_ci
[
'shared_runners_enabled'
],
max_artifacts_size:
Settings
.
artifacts
[
'max_size'
],
require_two_factor_authentication:
false
,
two_factor_grace_period:
48
,
recaptcha_enabled:
false
,
akismet_enabled:
false
,
koding_enabled:
false
,
koding_url:
nil
,
plantuml_enabled:
false
,
plantuml_url:
nil
,
repository_checks_enabled:
true
,
disabled_oauth_sign_in_sources:
[],
send_user_confirmation_email:
false
,
container_registry_token_expire_delay:
5
,
elasticsearch_host:
ENV
[
'ELASTIC_HOST'
]
||
'localhost'
,
elasticsearch_port:
ENV
[
'ELASTIC_PORT'
]
||
'9200'
,
usage_ping_enabled:
true
,
repository_storages:
[
'default'
],
user_default_external:
false
,
sidekiq_throttling_enabled:
false
,
housekeeping_enabled:
true
,
housekeeping_bitmaps_enabled:
true
,
housekeeping_incremental_repack_period:
10
,
housekeeping_full_repack_period:
50
,
housekeeping_gc_period:
200
,
)
end
def
elasticsearch_host
...
...
lib/gitlab/current_settings.rb
View file @
a75d82f0
...
...
@@ -9,9 +9,7 @@ module Gitlab
end
def
ensure_application_settings!
return
fake_application_settings
unless
connect_to_db?
unless
ENV
[
'IN_MEMORY_APPLICATION_SETTINGS'
]
==
'true'
if
connect_to_db?
begin
settings
=
::
ApplicationSetting
.
current
# In case Redis isn't running or the Redis UNIX socket file is not available
...
...
@@ -22,23 +20,47 @@ module Gitlab
settings
||=
::
ApplicationSetting
.
create_from_defaults
unless
ActiveRecord
::
Migrator
.
needs_migration?
end
settings
||
in_memory
_application_settings
settings
||
fake
_application_settings
end
def
sidekiq_throttling_enabled?
current_application_settings
.
sidekiq_throttling_enabled?
end
def
in_memory_application_settings
@in_memory_application_settings
||=
ApplicationSetting
.
new
(
ApplicationSetting
::
DEFAULTS
)
# In case migrations the application_settings table is not created yet,
# we fallback to a simple OpenStruct
rescue
ActiveRecord
::
StatementInvalid
fake_application_settings
end
def
fake_application_settings
OpenStruct
.
new
(
ApplicationSetting
::
DEFAULTS
)
OpenStruct
.
new
(
default_projects_limit:
Settings
.
gitlab
[
'default_projects_limit'
],
default_branch_protection:
Settings
.
gitlab
[
'default_branch_protection'
],
signup_enabled:
Settings
.
gitlab
[
'signup_enabled'
],
signin_enabled:
Settings
.
gitlab
[
'signin_enabled'
],
gravatar_enabled:
Settings
.
gravatar
[
'enabled'
],
koding_enabled:
false
,
plantuml_enabled:
false
,
sign_in_text:
nil
,
after_sign_up_text:
nil
,
help_page_text:
nil
,
shared_runners_text:
nil
,
restricted_visibility_levels:
Settings
.
gitlab
[
'restricted_visibility_levels'
],
max_attachment_size:
Settings
.
gitlab
[
'max_attachment_size'
],
session_expire_delay:
Settings
.
gitlab
[
'session_expire_delay'
],
default_project_visibility:
Settings
.
gitlab
.
default_projects_features
[
'visibility_level'
],
default_snippet_visibility:
Settings
.
gitlab
.
default_projects_features
[
'visibility_level'
],
domain_whitelist:
Settings
.
gitlab
[
'domain_whitelist'
],
import_sources:
%w[gitea github bitbucket gitlab google_code fogbugz git gitlab_project]
,
shared_runners_enabled:
Settings
.
gitlab_ci
[
'shared_runners_enabled'
],
max_artifacts_size:
Settings
.
artifacts
[
'max_size'
],
require_two_factor_authentication:
false
,
two_factor_grace_period:
48
,
akismet_enabled:
false
,
repository_checks_enabled:
true
,
container_registry_token_expire_delay:
5
,
elasticsearch_search:
false
,
elasticsearch_indexing:
false
,
elasticsearch_host:
ENV
[
'ELASTIC_HOST'
]
||
'localhost'
,
elasticsearch_port:
ENV
[
'ELASTIC_PORT'
]
||
'9200'
,
user_default_external:
false
,
sidekiq_throttling_enabled:
false
,
)
end
private
...
...
lib/gitlab/github_import/project_creator.rb
View file @
a75d82f0
module
Gitlab
module
GithubImport
class
ProjectCreator
include
Gitlab
::
CurrentSettings
attr_reader
:repo
,
:name
,
:namespace
,
:current_user
,
:session_data
,
:type
def
initialize
(
repo
,
name
,
namespace
,
current_user
,
session_data
,
type:
'github'
)
...
...
@@ -36,7 +34,7 @@ module Gitlab
end
def
visibility_level
repo
.
private
?
Gitlab
::
VisibilityLevel
::
PRIVATE
:
current_application_settings
.
default_project_visibility
repo
.
private
?
Gitlab
::
VisibilityLevel
::
PRIVATE
:
ApplicationSetting
.
current
.
default_project_visibility
end
#
...
...
spec/controllers/health_check_controller_spec.rb
View file @
a75d82f0
require
'spec_helper'
describe
HealthCheckController
do
include
StubENV
let
(
:token
)
{
current_application_settings
.
health_check_access_token
}
let
(
:json_response
)
{
JSON
.
parse
(
response
.
body
)
}
let
(
:xml_response
)
{
Hash
.
from_xml
(
response
.
body
)[
'hash'
]
}
before
do
stub_env
(
'IN_MEMORY_APPLICATION_SETTINGS'
,
'false'
)
end
describe
'GET #index'
do
context
'when services are up but NO access token'
do
it
'returns a not found page'
do
...
...
spec/features/admin/admin_disables_git_access_protocol_spec.rb
View file @
a75d82f0
require
'rails_helper'
feature
'Admin disables Git access protocol'
,
feature:
true
do
include
StubENV
let
(
:project
)
{
create
(
:empty_project
,
:empty_repo
)
}
let
(
:admin
)
{
create
(
:admin
)
}
background
do
stub_env
(
'IN_MEMORY_APPLICATION_SETTINGS'
,
'false'
)
login_as
(
admin
)
end
...
...
spec/features/admin/admin_health_check_spec.rb
View file @
a75d82f0
require
'spec_helper'
feature
"Admin Health Check"
,
feature:
true
do
include
StubENV
include
WaitForAjax
before
do
stub_env
(
'IN_MEMORY_APPLICATION_SETTINGS'
,
'false'
)
login_as
:admin
end
...
...
@@ -14,12 +12,11 @@ feature "Admin Health Check", feature: true do
visit
admin_health_check_path
end
it
'has a health check access token'
do
page
.
has_text?
'Health Check'
page
.
has_text?
'Health information can be retrieved'
it
{
page
.
has_text?
'Health Check'
}
it
{
page
.
has_text?
'Health information can be retrieved'
}
it
'has a health check access token'
do
token
=
current_application_settings
.
health_check_access_token
expect
(
page
).
to
have_content
(
"Access token is
#{
token
}
"
)
expect
(
page
).
to
have_selector
(
'#health-check-token'
,
text:
token
)
end
...
...
spec/features/admin/admin_runners_spec.rb
View file @
a75d82f0
require
'spec_helper'
describe
"Admin Runners"
do
include
StubENV
before
do
stub_env
(
'IN_MEMORY_APPLICATION_SETTINGS'
,
'false'
)
login_as
:admin
end
...
...
spec/features/admin/admin_settings_spec.rb
View file @
a75d82f0
require
'spec_helper'
feature
'Admin updates settings'
,
feature:
true
do
include
StubENV
before
do
stub_env
(
'IN_MEMORY_APPLICATION_SETTINGS'
,
'false'
)
before
(
:each
)
do
login_as
:admin
visit
admin_application_settings_path
end
...
...
spec/features/admin/admin_uses_repository_checks_spec.rb
View file @
a75d82f0
require
'rails_helper'
feature
'Admin uses repository checks'
,
feature:
true
do
include
StubENV
before
do
stub_env
(
'IN_MEMORY_APPLICATION_SETTINGS'
,
'false'
)
login_as
:admin
end
before
{
login_as
:admin
}
scenario
'to trigger a single check'
do
project
=
create
(
:empty_project
)
...
...
@@ -34,7 +29,7 @@ feature 'Admin uses repository checks', feature: true do
scenario
'to clear all repository checks'
,
js:
true
do
visit
admin_application_settings_path
expect
(
RepositoryCheck
::
ClearWorker
).
to
receive
(
:perform_async
)
click_link
'Clear all repository checks'
...
...
spec/lib/gitlab/current_settings_spec.rb
View file @
a75d82f0
require
'spec_helper'
describe
Gitlab
::
CurrentSettings
do
include
StubENV
before
do
stub_env
(
'IN_MEMORY_APPLICATION_SETTINGS'
,
'false'
)
end
describe
'#current_application_settings'
do
context
'with DB available'
do
before
do
allow_any_instance_of
(
Gitlab
::
CurrentSettings
).
to
receive
(
:connect_to_db?
).
and_return
(
true
)
end
it
'attempts to use cached values first'
do
expect
(
ApplicationSetting
).
to
receive
(
:current
)
expect
(
ApplicationSetting
).
not_to
receive
(
:last
)
expect
(
current_application_settings
).
to
be_a
(
ApplicationSetting
)
end
it
'attempts to use cached values first'
do
allow_any_instance_of
(
Gitlab
::
CurrentSettings
).
to
receive
(
:connect_to_db?
).
and_return
(
true
)
expect
(
ApplicationSetting
).
to
receive
(
:current
).
and_return
(
::
ApplicationSetting
.
create_from_defaults
)
expect
(
ApplicationSetting
).
not_to
receive
(
:last
)
it
'falls back to DB if Redis returns an empty value'
do
expect
(
ApplicationSetting
).
to
receive
(
:last
).
and_call_original
expect
(
current_application_settings
).
to
be_a
(
ApplicationSetting
)
end
expect
(
current_application_settings
).
to
be_a
(
ApplicationSetting
)
end
it
'falls back to DB if Redis fails'
do
expect
(
ApplicationSetting
).
to
receive
(
:current
).
and_raise
(
::
Redis
::
BaseError
)
expect
(
ApplicationSetting
).
to
receive
(
:last
).
and_call_original
it
'does not attempt to connect to DB or Redis'
do
allow_any_instance_of
(
Gitlab
::
CurrentSettings
).
to
receive
(
:connect_to_db?
).
and_return
(
false
)
expect
(
ApplicationSetting
).
not_to
receive
(
:current
)
expect
(
ApplicationSetting
).
not_to
receive
(
:last
)
expect
(
current_application_settings
).
to
be_a
(
ApplicationSetting
)
end
expect
(
current_application_settings
).
to
eq
fake_application_settings
end
context
'with DB unavailable'
do
before
do
allow_any_instance_of
(
Gitlab
::
CurrentSettings
).
to
receive
(
:connect_to_db?
).
and_return
(
false
)
end
it
'falls back to DB if Redis returns an empty value'
do
allow_any_instance_of
(
Gitlab
::
CurrentSettings
).
to
receive
(
:connect_to_db?
).
and_return
(
true
)
expect
(
ApplicationSetting
).
to
receive
(
:last
).
and_call_original
it
'returns an in-memory ApplicationSetting object'
do
expect
(
ApplicationSetting
).
not_to
receive
(
:current
)
expect
(
ApplicationSetting
).
not_to
receive
(
:last
)
expect
(
current_application_settings
).
to
be_a
(
OpenStruct
)
end
expect
(
current_application_settings
).
to
be_a
(
ApplicationSetting
)
end
context
'when ENV["IN_MEMORY_APPLICATION_SETTINGS"] is true'
do
before
do
stub_env
(
'IN_MEMORY_APPLICATION_SETTINGS'
,
'true'
)
end
it
'returns an in-memory ApplicationSetting object'
do
expect
(
ApplicationSetting
).
not_to
receive
(
:current
)
expect
(
ApplicationSetting
).
not_to
receive
(
:last
)
it
'falls back to DB if Redis fails'
do
allow_any_instance_of
(
Gitlab
::
CurrentSettings
).
to
receive
(
:connect_to_db?
).
and_return
(
true
)
expect
(
ApplicationSetting
).
to
receive
(
:current
).
and_raise
(
::
Redis
::
BaseError
)
expect
(
ApplicationSetting
).
to
receive
(
:last
).
and_call_original
expect
(
current_application_settings
).
to
be_a
(
ApplicationSetting
)
expect
(
current_application_settings
).
not_to
be_persisted
end
expect
(
current_application_settings
).
to
be_a
(
ApplicationSetting
)
end
end
end
spec/lib/gitlab/elastic/indexer_spec.rb
View file @
a75d82f0
require
'spec_helper'
describe
"Indexer"
do
include
StubENV
before
do
stub_env
(
'IN_MEMORY_APPLICATION_SETTINGS'
,
'true'
)
stub_application_setting
(
es_host:
[
'elastic-host1'
,
'elastic-host2'
])
end
it
"runs commands"
do
stub_application_setting
(
es_host:
[
'elastic-host1'
,
'elastic-host2'
])
expect
(
Gitlab
::
Popen
).
to
receive
(
:popen
).
with
(
[
File
.
join
(
Rails
.
root
,
'bin/elastic_repo_indexer'
),
'1'
,
'full_repo_path'
],
nil
,
hash_including
(
'ELASTIC_CONNECTION_INFO'
=>
{
host:
current_application_settings
.
elasticsearch_host
,
port:
current_application_settings
.
elasticsearch_port
host:
ApplicationSetting
.
current
.
elasticsearch_host
,
port:
ApplicationSetting
.
current
.
elasticsearch_port
}.
to_json
,
'RAILS_ENV'
=>
Rails
.
env
,
'FROM_SHA'
=>
'000000'
,
...
...
spec/requests/api/internal_spec.rb
View file @
a75d82f0
...
...
@@ -400,7 +400,8 @@ describe API::Internal, api: true do
context
'ssh access has been disabled'
do
before
do
stub_application_setting
(
enabled_git_access_protocol:
'http'
)
settings
=
::
ApplicationSetting
.
create_from_defaults
settings
.
update_attribute
(
:enabled_git_access_protocol
,
'http'
)
end
it
'rejects the SSH push'
do
...
...
@@ -422,7 +423,8 @@ describe API::Internal, api: true do
context
'http access has been disabled'
do
before
do
stub_application_setting
(
enabled_git_access_protocol:
'ssh'
)
settings
=
::
ApplicationSetting
.
create_from_defaults
settings
.
update_attribute
(
:enabled_git_access_protocol
,
'ssh'
)
end
it
'rejects the HTTP push'
do
...
...
@@ -444,7 +446,8 @@ describe API::Internal, api: true do
context
'web actions are always allowed'
do
it
'allows WEB push'
do
stub_application_setting
(
enabled_git_access_protocol:
'ssh'
)
settings
=
::
ApplicationSetting
.
create_from_defaults
settings
.
update_attribute
(
:enabled_git_access_protocol
,
'ssh'
)
project
.
team
<<
[
user
,
:developer
]
push
(
key
,
project
,
'web'
)
...
...
spec/spec_helper.rb
View file @
a75d82f0
...
...
@@ -2,7 +2,6 @@ require './spec/simplecov_env'
SimpleCovEnv
.
start!
ENV
[
"RAILS_ENV"
]
||=
'test'
ENV
[
"IN_MEMORY_APPLICATION_SETTINGS"
]
=
'true'
require
File
.
expand_path
(
"../../config/environment"
,
__FILE__
)
require
'rspec/rails'
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment