From f82b9e48ec038a3718aeeeb248b0a01c9f88fa33 Mon Sep 17 00:00:00 2001 From: Dmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com> Date: Thu, 31 Jul 2014 15:39:01 +0300 Subject: [PATCH] Dont stub gitlab-shell calls. Make test environment closer to real one --- config/gitlab.yml.example | 6 ++ features/support/env.rb | 1 - spec/factories.rb | 4 +- spec/support/test_env.rb | 158 ++++++-------------------------------- 4 files changed, 29 insertions(+), 140 deletions(-) diff --git a/config/gitlab.yml.example b/config/gitlab.yml.example index dff709b66b8..7f31fb113c9 100644 --- a/config/gitlab.yml.example +++ b/config/gitlab.yml.example @@ -259,6 +259,12 @@ test: gitlab: host: localhost port: 80 + satellites: + path: tmp/tests/gitlab-satellites/ + gitlab_shell: + path: tmp/tests/gitlab-shell/ + repos_path: tmp/tests/repositories/ + hooks_path: tmp/tests/gitlab-shell/hooks/ issues_tracker: redmine: title: "Redmine" diff --git a/features/support/env.rb b/features/support/env.rb index 3ab2ce0a3e6..5b3e78cbec3 100644 --- a/features/support/env.rb +++ b/features/support/env.rb @@ -39,7 +39,6 @@ Capybara.ignore_hidden_elements = false DatabaseCleaner.strategy = :truncation Spinach.hooks.before_scenario do - TestEnv.setup_stubs DatabaseCleaner.start end diff --git a/spec/factories.rb b/spec/factories.rb index ad4c56986c3..5ad410ac5de 100644 --- a/spec/factories.rb +++ b/spec/factories.rb @@ -61,9 +61,7 @@ FactoryGirl.define do path { 'gitlabhq' } after :create do |project| - TestEnv.clear_repo_dir(project.namespace, project.path) - TestEnv.reset_satellite_dir - TestEnv.create_repo(project.namespace, project.path) + TestEnv.copy_repo(project) end end diff --git a/spec/support/test_env.rb b/spec/support/test_env.rb index 85059dfa9e9..fc1a920822e 100644 --- a/spec/support/test_env.rb +++ b/spec/support/test_env.rb @@ -5,24 +5,19 @@ module TestEnv # Test environment # - # all repositories and namespaces stored at - # RAILS_APP/tmp/test-git-base-path - # - # Next shell methods are stubbed and return true - # - mv_repository - # - remove_repository - # - add_key - # - remove_key + # See gitlab.yml.example test section for paths # def init(opts = {}) RSpec::Mocks::setup(self) # Disable mailer for spinach tests disable_mailer if opts[:mailer] == false - setup_stubs - clear_test_repo_dir if opts[:init_repos] == true - setup_test_repos(opts) if opts[:repos] == true + # Setup GitLab shell for test instance + setup_gitlab_shell + + # Create repository for FactoryGirl.create(:project) + setup_factory_repo end def disable_mailer @@ -33,139 +28,30 @@ module TestEnv NotificationService.any_instance.unstub(:mailer) end - def setup_stubs() - # Use tmp dir for FS manipulations - repos_path = testing_path() - ProjectWiki.any_instance.stub(:init_repo) do |path| - create_temp_repo(File.join(repos_path, "#{path}.git")) + def setup_gitlab_shell + unless File.directory?(Gitlab.config.gitlab_shell.path) + %x[rake gitlab:shell:install] end - - Gitlab.config.gitlab_shell.stub(repos_path: repos_path) - - Gitlab.config.satellites.stub(path: satellite_path) - - Gitlab::Git::Repository.stub(repos_path: repos_path) - - Gitlab::Shell.any_instance.stub( - add_repository: true, - mv_repository: true, - remove_repository: true, - update_repository_head: true, - add_key: true, - remove_key: true, - version: '6.3.0' - ) - - Gitlab::Satellite::MergeAction.any_instance.stub( - merge!: true, - ) - - Gitlab::Satellite::Satellite.any_instance.stub( - exists?: true, - destroy: true, - create: true, - lock_files_dir: repos_path - ) - - MergeRequest.any_instance.stub( - check_if_can_be_merged: true - ) - Repository.any_instance.stub( - size: 12.45 - ) end - def clear_repo_dir(namespace, name) - setup_stubs - # Clean any .wiki.git that may have been created - FileUtils.rm_rf File.join(testing_path(), "#{name}.wiki.git") - end + def setup_factory_repo + repo_path = repos_path + "/root/testme.git" + clone_url = 'https://gitlab.com/gitlab-org/testme.git' - def reset_satellite_dir - setup_stubs - [ - %W(git reset --hard --quiet), - %W(git clean -fx --quiet), - %W(git checkout --quiet origin/master) - ].each do |git_cmd| - system(*git_cmd, chdir: seed_satellite_path) + unless File.directory?(repo_path) + git_cmd = %W(git clone --bare #{clone_url} #{repo_path}) + puts git_cmd.inspect + system(*git_cmd) end end - # Create a repo and it's satellite - def create_repo(namespace, name) - setup_stubs - repo = repo(namespace, name) - - # Symlink tmp/repositories/gitlabhq to tmp/test-git-base-path/gitlabhq - FileUtils.ln_sf(seed_repo_path, repo) - create_satellite(repo, namespace, name) - end - - private - - def testing_path - Rails.root.join('tmp', 'test-git-base-path') - end - - def seed_repo_path - Rails.root.join('tmp', 'repositories', 'gitlabhq') - end - - def seed_satellite_path - Rails.root.join('tmp', 'satellite', 'gitlabhq') - end - - def satellite_path - "#{testing_path()}/satellite" - end - - def repo(namespace, name) - unless (namespace.nil? || namespace.path.nil? || namespace.path.strip.empty?) - repo = File.join(testing_path(), "#{namespace.path}/#{name}.git") - else - repo = File.join(testing_path(), "#{name}.git") - end - end - - def satellite(namespace, name) - unless (namespace.nil? || namespace.path.nil? || namespace.path.strip.empty?) - satellite_repo = File.join(satellite_path, namespace.path, name) - else - satellite_repo = File.join(satellite_path, name) - end - end - - def setup_test_repos(opts ={}) - create_repo(nil, 'gitlabhq') #unless opts[:repo].nil? || !opts[:repo].include?('') - create_repo(nil, 'source_gitlabhq') #unless opts[:repo].nil? || !opts[:repo].include?('source_') - create_repo(nil, 'target_gitlabhq') #unless opts[:repo].nil? || !opts[:repo].include?('target_') - end - - def clear_test_repo_dir - setup_stubs - - # Remove tmp/test-git-base-path - FileUtils.rm_rf Gitlab.config.gitlab_shell.repos_path - - # Recreate tmp/test-git-base-path - FileUtils.mkdir_p Gitlab.config.gitlab_shell.repos_path - - # Since much more is happening in satellites - FileUtils.mkdir_p Gitlab.config.satellites.path - end - - # Create a testing satellite, and clone the source repo into it - def create_satellite(source_repo, namespace, satellite_name) - satellite_repo = satellite(namespace, satellite_name) - # Symlink tmp/satellite/gitlabhq to tmp/test-git-base-path/satellite/gitlabhq, create the directory if it doesn't exist already - satellite_dir = File.dirname(satellite_repo) - FileUtils.mkdir_p(satellite_dir) unless File.exists?(satellite_dir) - FileUtils.ln_sf(seed_satellite_path, satellite_repo) + def copy_repo(project) + base_repo_path = repos_path + "/root/testme.git" + target_repo_path = repos_path + "/#{project.namespace.path}/#{project.path}.git" + FileUtils.cp_r(base_repo_path, target_repo_path) end - def create_temp_repo(path) - FileUtils.mkdir_p path - system(*%W(git init --quiet --bare -- #{path})) + def repos_path + Gitlab.config.gitlab_shell.repos_path end end -- GitLab