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
817aa53e
Commit
817aa53e
authored
May 12, 2021
by
Rémy Coutable
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Run setup test env tasks in parallel
Signed-off-by:
Rémy Coutable
<
remy@rymai.me
>
parent
088ba481
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
39 additions
and
42 deletions
+39
-42
ee/spec/support/helpers/ee/test_env.rb
ee/spec/support/helpers/ee/test_env.rb
+12
-7
spec/support/helpers/test_env.rb
spec/support/helpers/test_env.rb
+27
-35
No files found.
ee/spec/support/helpers/ee/test_env.rb
View file @
817aa53e
...
...
@@ -4,27 +4,32 @@ load File.expand_path('../../../../../lib/tasks/gitlab/helpers.rake', __dir__)
load
File
.
expand_path
(
'../../../../lib/tasks/gitlab/indexer.rake'
,
__dir__
)
require_relative
'../../../../lib/gitlab/elastic/indexer'
unless
defined?
(
Gitlab
::
Elastic
::
Indexer
)
require_relative
'../../../../../lib/gitlab/utils/override'
module
EE
module
TestEnv
def
init
(
*
args
,
&
blk
)
extend
::
Gitlab
::
Utils
::
Override
override
:setup_methods
def
setup_methods
(
super
+
[
:setup_indexer
]).
freeze
end
override
:post_init
def
post_init
super
setup_indexer
Settings
.
elasticsearch
[
'indexer_path'
]
=
indexer_bin_path
end
def
setup_indexer
indexer_args
=
[
indexer_path
,
indexer_url
].
compact
component_timed_setup
(
'GitLab Elasticsearch Indexer'
,
install_dir:
indexer_path
,
version:
indexer_version
,
task:
"gitlab:indexer:install"
,
task_args:
indexer_args
task_args:
[
indexer_path
,
indexer_url
].
compact
)
Settings
.
elasticsearch
[
'indexer_path'
]
=
indexer_bin_path
end
def
indexer_path
...
...
spec/support/helpers/test_env.rb
View file @
817aa53e
# frozen_string_literal: true
require
'parallel'
unless
defined?
(
Rails
)
require
'request_store'
require
'rake'
...
...
@@ -123,44 +125,40 @@ module TestEnv
TMP_TEST_PATH
=
Rails
.
root
.
join
(
'tmp'
,
'tests'
).
freeze
REPOS_STORAGE
=
'default'
SECOND_STORAGE_PATH
=
Rails
.
root
.
join
(
'tmp'
,
'tests'
,
'second_storage'
)
SETUP_METHODS
=
%i[setup_gitaly setup_gitlab_shell setup_workhorse setup_factory_repo setup_forked_repo]
.
freeze
# Can be overriden
def
setup_methods
SETUP_METHODS
end
# Test environment
#
# See gitlab.yml.example test section for paths
#
def
init
(
opts
=
{})
def
init
unless
Rails
.
env
.
test?
puts
"
\n
TestEnv.init can only be run if `RAILS_ENV` is set to 'test' not '
#{
Rails
.
env
}
'!
\n
"
exit
1
end
start
=
Time
.
now
# Disable mailer for spinach tests
disable_mailer
if
opts
[
:mailer
]
==
false
clean_test_path
setup_gitlab_shell
setup_gitaly
# Feature specs are run through Workhorse
setup_workhorse
# Create repository for FactoryBot.create(:project)
setup_factory_repo
# Install components in parallel as most of the setup is I/O.
Parallel
.
each
(
setup_methods
)
do
|
method
|
public_send
(
method
)
end
# Create repository for FactoryBot.create(:forked_project_with_submodules)
setup_forked_repo
end
post_init
def
disable_mailer
allow_any_instance_of
(
NotificationService
).
to
receive
(
:mailer
)
.
and_return
(
double
.
as_null_object
)
puts
"
\n
Test environment set up in
#{
Time
.
now
-
start
}
seconds"
end
def
enable_mailer
allow_any_instance_of
(
NotificationService
).
to
receive
(
:mailer
)
.
and_call_original
# Can be overriden
def
post_init
start_gitaly
(
gitaly_dir
)
end
# Clean /tmp/tests
...
...
@@ -187,13 +185,11 @@ module TestEnv
end
def
setup_gitaly
install_gitaly_args
=
[
gitaly_dir
,
repos_path
,
gitaly_url
].
compact
component_timed_setup
(
'Gitaly'
,
install_dir:
gitaly_dir
,
version:
Gitlab
::
GitalyClient
.
expected_server_version
,
task:
"gitlab:gitaly:install"
,
task_args:
install_gitaly_args
)
do
task_args:
[
gitaly_dir
,
repos_path
,
gitaly_url
].
compact
)
do
Gitlab
::
SetupHelper
::
Gitaly
.
create_configuration
(
gitaly_dir
,
{
'default'
=>
repos_path
},
...
...
@@ -214,8 +210,6 @@ module TestEnv
)
Gitlab
::
SetupHelper
::
Praefect
.
create_configuration
(
gitaly_dir
,
{
'praefect'
=>
repos_path
},
force:
true
)
end
start_gitaly
(
gitaly_dir
)
end
def
gitaly_socket_path
...
...
@@ -297,19 +291,18 @@ module TestEnv
raise
"could not connect to
#{
service
}
at
#{
socket
.
inspect
}
after
#{
sleep_time
}
seconds"
end
# Feature specs are run through Workhorse
def
setup_workhorse
start
=
Time
.
now
return
if
skip_compile_workhorse?
puts
"
\n
==> Setting up GitLab Workhorse..."
FileUtils
.
rm_rf
(
workhorse_dir
)
Gitlab
::
SetupHelper
::
Workhorse
.
compile_into
(
workhorse_dir
)
Gitlab
::
SetupHelper
::
Workhorse
.
create_configuration
(
workhorse_dir
,
nil
)
File
.
write
(
workhorse_tree_file
,
workhorse_tree
)
if
workhorse_source_clean?
puts
"
GitLab Workhorse set up in
#{
Time
.
now
-
start
}
seconds...
\n
"
puts
"
==>
GitLab Workhorse set up in
#{
Time
.
now
-
start
}
seconds...
\n
"
end
def
skip_compile_workhorse?
...
...
@@ -373,10 +366,12 @@ module TestEnv
ENV
.
fetch
(
'GITLAB_WORKHORSE_URL'
,
nil
)
end
# Create repository for FactoryBot.create(:project)
def
setup_factory_repo
setup_repo
(
factory_repo_path
,
factory_repo_path_bare
,
factory_repo_name
,
BRANCH_SHA
)
end
# Create repository for FactoryBot.create(:forked_project_with_submodules)
# This repo has a submodule commit that is not present in the main test
# repository.
def
setup_forked_repo
...
...
@@ -387,20 +382,18 @@ module TestEnv
clone_url
=
"https://gitlab.com/gitlab-org/
#{
repo_name
}
.git"
unless
File
.
directory?
(
repo_path
)
puts
"
\n
==> Setting up
#{
repo_name
}
repository in
#{
repo_path
}
..."
start
=
Time
.
now
system
(
*
%W(
#{
Gitlab
.
config
.
git
.
bin_path
}
clone --quiet --
#{
clone_url
}
#{
repo_path
}
)
)
puts
"
#{
repo_path
}
set up in
#{
Time
.
now
-
start
}
seconds...
\n
"
puts
"
==>
#{
repo_path
}
set up in
#{
Time
.
now
-
start
}
seconds...
\n
"
end
set_repo_refs
(
repo_path
,
refs
)
unless
File
.
directory?
(
repo_path_bare
)
puts
"
\n
==> Setting up
#{
repo_name
}
bare repository in
#{
repo_path_bare
}
..."
start
=
Time
.
now
# We must copy bare repositories because we will push to them.
system
(
git_env
,
*
%W(
#{
Gitlab
.
config
.
git
.
bin_path
}
clone --quiet --bare --
#{
repo_path
}
#{
repo_path_bare
}
)
)
puts
"
#{
repo_path_bare
}
set up in
#{
Time
.
now
-
start
}
seconds...
\n
"
puts
"
==>
#{
repo_path_bare
}
set up in
#{
Time
.
now
-
start
}
seconds...
\n
"
end
end
...
...
@@ -555,7 +548,6 @@ module TestEnv
return
if
File
.
exist?
(
install_dir
)
&&
ci?
if
component_needs_update?
(
install_dir
,
version
)
puts
"
\n
==> Setting up
#{
component
}
..."
# Cleanup the component entirely to ensure we start fresh
FileUtils
.
rm_rf
(
install_dir
)
...
...
@@ -565,7 +557,7 @@ module TestEnv
yield
if
block_given?
puts
"
#{
component
}
set up in
#{
Time
.
now
-
start
}
seconds...
\n
"
puts
"
==>
#{
component
}
set up in
#{
Time
.
now
-
start
}
seconds...
\n
"
end
rescue
ComponentFailedToInstallError
puts
"
\n
#{
component
}
failed to install, cleaning up
#{
install_dir
}
!
\n
"
...
...
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