diff options
author | GitLab Bot <gitlab-bot@gitlab.com> | 2019-12-27 15:08:16 +0000 |
---|---|---|
committer | GitLab Bot <gitlab-bot@gitlab.com> | 2019-12-27 15:08:16 +0000 |
commit | fb73ca3398c2ac49a616ab553e117b0586089702 (patch) | |
tree | c2f787ac97df38569c59cd0e967331ec1ead6d7e /spec | |
parent | b6b8f7dc871e73f29af55f06a773136a7242df57 (diff) | |
download | gitlab-ce-fb73ca3398c2ac49a616ab553e117b0586089702.tar.gz |
Add latest changes from gitlab-org/gitlab@master
Diffstat (limited to 'spec')
-rw-r--r-- | spec/controllers/projects/git_http_controller_spec.rb | 38 | ||||
-rw-r--r-- | spec/fixtures/api/schemas/public_api/v4/issue.json | 5 | ||||
-rw-r--r-- | spec/fixtures/api/schemas/public_api/v4/merge_request.json | 7 | ||||
-rw-r--r-- | spec/initializers/lograge_spec.rb | 2 | ||||
-rw-r--r-- | spec/lib/gitlab/backtrace_cleaner_spec.rb | 50 | ||||
-rw-r--r-- | spec/lib/gitlab/grape_logging/loggers/exception_logger_spec.rb | 2 | ||||
-rw-r--r-- | spec/lib/gitlab/profiler_spec.rb | 45 | ||||
-rw-r--r-- | spec/lib/gitlab/repository_cache_spec.rb | 2 | ||||
-rw-r--r-- | spec/lib/gitlab/repository_set_cache_spec.rb | 2 | ||||
-rw-r--r-- | spec/lib/gitlab/sidekiq_logging/exception_handler_spec.rb | 2 | ||||
-rw-r--r-- | spec/requests/api/internal/base_spec.rb | 16 | ||||
-rw-r--r-- | spec/requests/api/issues/get_group_issues_spec.rb | 27 | ||||
-rw-r--r-- | spec/requests/api/issues/issues_spec.rb | 11 | ||||
-rw-r--r-- | spec/requests/api/merge_requests_spec.rb | 30 | ||||
-rw-r--r-- | spec/services/merge_requests/get_urls_service_spec.rb | 7 | ||||
-rw-r--r-- | spec/support/helpers/query_recorder.rb | 2 | ||||
-rw-r--r-- | spec/support/helpers/test_env.rb | 4 |
17 files changed, 190 insertions, 62 deletions
diff --git a/spec/controllers/projects/git_http_controller_spec.rb b/spec/controllers/projects/git_http_controller_spec.rb index b756dd5662d..b7568346cdc 100644 --- a/spec/controllers/projects/git_http_controller_spec.rb +++ b/spec/controllers/projects/git_http_controller_spec.rb @@ -3,10 +3,17 @@ require 'spec_helper' describe Projects::GitHttpController do + let_it_be(:project) { create(:project, :public, :repository) } + let(:project_params) do + { + namespace_id: project.namespace.to_param, + project_id: project.path + '.git' + } + end + let(:params) { project_params } + describe 'HEAD #info_refs' do it 'returns 403' do - project = create(:project, :public, :repository) - head :info_refs, params: { namespace_id: project.namespace.to_param, project_id: project.path + '.git' } expect(response.status).to eq(403) @@ -14,18 +21,17 @@ describe Projects::GitHttpController do end describe 'GET #info_refs' do + let(:params) { project_params.merge(service: 'git-upload-pack') } + it 'returns 401 for unauthenticated requests to public repositories when http protocol is disabled' do stub_application_setting(enabled_git_access_protocol: 'ssh') - project = create(:project, :public, :repository) - get :info_refs, params: { service: 'git-upload-pack', namespace_id: project.namespace.to_param, project_id: project.path + '.git' } + get :info_refs, params: params expect(response.status).to eq(401) end context 'with exceptions' do - let(:project) { create(:project, :public, :repository) } - before do allow(controller).to receive(:verify_workhorse_api!).and_return(true) end @@ -33,7 +39,7 @@ describe Projects::GitHttpController do it 'returns 503 with GRPC Unavailable' do allow(controller).to receive(:access_check).and_raise(GRPC::Unavailable) - get :info_refs, params: { service: 'git-upload-pack', namespace_id: project.namespace.to_param, project_id: project.path + '.git' } + get :info_refs, params: params expect(response.status).to eq(503) end @@ -41,11 +47,27 @@ describe Projects::GitHttpController do it 'returns 503 with timeout error' do allow(controller).to receive(:access_check).and_raise(Gitlab::GitAccess::TimeoutError) - get :info_refs, params: { service: 'git-upload-pack', namespace_id: project.namespace.to_param, project_id: project.path + '.git' } + get :info_refs, params: params expect(response.status).to eq(503) expect(response.body).to eq 'Gitlab::GitAccess::TimeoutError' end end end + + describe 'POST #git_upload_pack' do + before do + allow(controller).to receive(:authenticate_user).and_return(true) + allow(controller).to receive(:verify_workhorse_api!).and_return(true) + allow(controller).to receive(:access_check).and_return(nil) + end + + after do + post :git_upload_pack, params: params + end + + it 'updates project statistics' do + expect(ProjectDailyStatisticsWorker).to receive(:perform_async) + end + end end diff --git a/spec/fixtures/api/schemas/public_api/v4/issue.json b/spec/fixtures/api/schemas/public_api/v4/issue.json index 147f53239e0..bf1b4a06f0b 100644 --- a/spec/fixtures/api/schemas/public_api/v4/issue.json +++ b/spec/fixtures/api/schemas/public_api/v4/issue.json @@ -84,6 +84,11 @@ "total_time_spent": { "type": "integer" }, "human_time_estimate": { "type": ["string", "null"] }, "human_total_time_spent": { "type": ["string", "null"] } + }, + "references": { + "short": {"type": "string"}, + "relative": {"type": "string"}, + "full": {"type": "string"} } }, "required": [ diff --git a/spec/fixtures/api/schemas/public_api/v4/merge_request.json b/spec/fixtures/api/schemas/public_api/v4/merge_request.json index a423bf70b69..3bf1299a1d8 100644 --- a/spec/fixtures/api/schemas/public_api/v4/merge_request.json +++ b/spec/fixtures/api/schemas/public_api/v4/merge_request.json @@ -113,7 +113,12 @@ "human_total_time_spent": { "type": ["string", "null"] } }, "allow_collaboration": { "type": ["boolean", "null"] }, - "allow_maintainer_to_push": { "type": ["boolean", "null"] } + "allow_maintainer_to_push": { "type": ["boolean", "null"] }, + "references": { + "short": {"type": "string"}, + "relative": {"type": "string"}, + "full": {"type": "string"} + } }, "required": [ "id", "iid", "project_id", "title", "description", diff --git a/spec/initializers/lograge_spec.rb b/spec/initializers/lograge_spec.rb index 5dd296b6040..65652468d93 100644 --- a/spec/initializers/lograge_spec.rb +++ b/spec/initializers/lograge_spec.rb @@ -112,7 +112,7 @@ describe 'lograge', type: :request do expect(log_data['exception.class']).to eq('RuntimeError') expect(log_data['exception.message']).to eq('bad request') - expect(log_data['exception.backtrace']).to eq(Gitlab::Profiler.clean_backtrace(backtrace)) + expect(log_data['exception.backtrace']).to eq(Gitlab::BacktraceCleaner.clean_backtrace(backtrace)) end end end diff --git a/spec/lib/gitlab/backtrace_cleaner_spec.rb b/spec/lib/gitlab/backtrace_cleaner_spec.rb new file mode 100644 index 00000000000..f3aded9faad --- /dev/null +++ b/spec/lib/gitlab/backtrace_cleaner_spec.rb @@ -0,0 +1,50 @@ +# frozen_string_literal: true + +require 'spec_helper' + +describe Gitlab::BacktraceCleaner do + describe '.clean_backtrace' do + it 'uses the Rails backtrace cleaner' do + backtrace = [] + + expect(Rails.backtrace_cleaner).to receive(:clean).with(backtrace) + + described_class.clean_backtrace(backtrace) + end + + it 'removes lines from IGNORE_BACKTRACES' do + backtrace = [ + "lib/gitlab/gitaly_client.rb:294:in `block (2 levels) in migrate'", + "lib/gitlab/gitaly_client.rb:331:in `allow_n_plus_1_calls'", + "lib/gitlab/gitaly_client.rb:280:in `block in migrate'", + "lib/gitlab/metrics/influx_db.rb:103:in `measure'", + "lib/gitlab/gitaly_client.rb:278:in `migrate'", + "lib/gitlab/git/repository.rb:1451:in `gitaly_migrate'", + "lib/gitlab/git/commit.rb:66:in `find'", + "app/models/repository.rb:1047:in `find_commit'", + "lib/gitlab/metrics/instrumentation.rb:159:in `block in find_commit'", + "lib/gitlab/metrics/method_call.rb:36:in `measure'", + "lib/gitlab/metrics/instrumentation.rb:159:in `find_commit'", + "app/models/repository.rb:113:in `commit'", + "lib/gitlab/i18n.rb:50:in `with_locale'", + "lib/gitlab/middleware/multipart.rb:95:in `call'", + "lib/gitlab/request_profiler/middleware.rb:14:in `call'", + "ee/lib/gitlab/database/load_balancing/rack_middleware.rb:37:in `call'", + "ee/lib/gitlab/jira/middleware.rb:15:in `call'" + ] + + expect(described_class.clean_backtrace(backtrace)) + .to eq([ + "lib/gitlab/gitaly_client.rb:294:in `block (2 levels) in migrate'", + "lib/gitlab/gitaly_client.rb:331:in `allow_n_plus_1_calls'", + "lib/gitlab/gitaly_client.rb:280:in `block in migrate'", + "lib/gitlab/gitaly_client.rb:278:in `migrate'", + "lib/gitlab/git/repository.rb:1451:in `gitaly_migrate'", + "lib/gitlab/git/commit.rb:66:in `find'", + "app/models/repository.rb:1047:in `find_commit'", + "app/models/repository.rb:113:in `commit'", + "ee/lib/gitlab/jira/middleware.rb:15:in `call'" + ]) + end + end +end diff --git a/spec/lib/gitlab/grape_logging/loggers/exception_logger_spec.rb b/spec/lib/gitlab/grape_logging/loggers/exception_logger_spec.rb index 0cfda80b854..c9021e2f436 100644 --- a/spec/lib/gitlab/grape_logging/loggers/exception_logger_spec.rb +++ b/spec/lib/gitlab/grape_logging/loggers/exception_logger_spec.rb @@ -39,7 +39,7 @@ describe Gitlab::GrapeLogging::Loggers::ExceptionLogger do before do current_backtrace = caller allow(exception).to receive(:backtrace).and_return(current_backtrace) - expected['exception.backtrace'] = Gitlab::Profiler.clean_backtrace(current_backtrace) + expected['exception.backtrace'] = Gitlab::BacktraceCleaner.clean_backtrace(current_backtrace) end it 'includes the backtrace' do diff --git a/spec/lib/gitlab/profiler_spec.rb b/spec/lib/gitlab/profiler_spec.rb index a19392f4bcb..c27e3ca7ace 100644 --- a/spec/lib/gitlab/profiler_spec.rb +++ b/spec/lib/gitlab/profiler_spec.rb @@ -120,51 +120,6 @@ describe Gitlab::Profiler do end end - describe '.clean_backtrace' do - it 'uses the Rails backtrace cleaner' do - backtrace = [] - - expect(Rails.backtrace_cleaner).to receive(:clean).with(backtrace) - - described_class.clean_backtrace(backtrace) - end - - it 'removes lines from IGNORE_BACKTRACES' do - backtrace = [ - "lib/gitlab/gitaly_client.rb:294:in `block (2 levels) in migrate'", - "lib/gitlab/gitaly_client.rb:331:in `allow_n_plus_1_calls'", - "lib/gitlab/gitaly_client.rb:280:in `block in migrate'", - "lib/gitlab/metrics/influx_db.rb:103:in `measure'", - "lib/gitlab/gitaly_client.rb:278:in `migrate'", - "lib/gitlab/git/repository.rb:1451:in `gitaly_migrate'", - "lib/gitlab/git/commit.rb:66:in `find'", - "app/models/repository.rb:1047:in `find_commit'", - "lib/gitlab/metrics/instrumentation.rb:159:in `block in find_commit'", - "lib/gitlab/metrics/method_call.rb:36:in `measure'", - "lib/gitlab/metrics/instrumentation.rb:159:in `find_commit'", - "app/models/repository.rb:113:in `commit'", - "lib/gitlab/i18n.rb:50:in `with_locale'", - "lib/gitlab/middleware/multipart.rb:95:in `call'", - "lib/gitlab/request_profiler/middleware.rb:14:in `call'", - "ee/lib/gitlab/database/load_balancing/rack_middleware.rb:37:in `call'", - "ee/lib/gitlab/jira/middleware.rb:15:in `call'" - ] - - expect(described_class.clean_backtrace(backtrace)) - .to eq([ - "lib/gitlab/gitaly_client.rb:294:in `block (2 levels) in migrate'", - "lib/gitlab/gitaly_client.rb:331:in `allow_n_plus_1_calls'", - "lib/gitlab/gitaly_client.rb:280:in `block in migrate'", - "lib/gitlab/gitaly_client.rb:278:in `migrate'", - "lib/gitlab/git/repository.rb:1451:in `gitaly_migrate'", - "lib/gitlab/git/commit.rb:66:in `find'", - "app/models/repository.rb:1047:in `find_commit'", - "app/models/repository.rb:113:in `commit'", - "ee/lib/gitlab/jira/middleware.rb:15:in `call'" - ]) - end - end - describe '.with_custom_logger' do context 'when the logger is set' do it 'uses the replacement logger for the duration of the block' do diff --git a/spec/lib/gitlab/repository_cache_spec.rb b/spec/lib/gitlab/repository_cache_spec.rb index 6a684595eb8..1b7dd1766da 100644 --- a/spec/lib/gitlab/repository_cache_spec.rb +++ b/spec/lib/gitlab/repository_cache_spec.rb @@ -3,8 +3,8 @@ require 'spec_helper' describe Gitlab::RepositoryCache do + let_it_be(:project) { create(:project) } let(:backend) { double('backend').as_null_object } - let(:project) { create(:project) } let(:repository) { project.repository } let(:namespace) { "#{repository.full_path}:#{project.id}" } let(:cache) { described_class.new(repository, backend: backend) } diff --git a/spec/lib/gitlab/repository_set_cache_spec.rb b/spec/lib/gitlab/repository_set_cache_spec.rb index 87e51f801e5..de0f3602346 100644 --- a/spec/lib/gitlab/repository_set_cache_spec.rb +++ b/spec/lib/gitlab/repository_set_cache_spec.rb @@ -3,7 +3,7 @@ require 'spec_helper' describe Gitlab::RepositorySetCache, :clean_gitlab_redis_cache do - let(:project) { create(:project) } + let_it_be(:project) { create(:project) } let(:repository) { project.repository } let(:namespace) { "#{repository.full_path}:#{project.id}" } let(:cache) { described_class.new(repository) } diff --git a/spec/lib/gitlab/sidekiq_logging/exception_handler_spec.rb b/spec/lib/gitlab/sidekiq_logging/exception_handler_spec.rb index 24b6090cb19..a79a0678e2b 100644 --- a/spec/lib/gitlab/sidekiq_logging/exception_handler_spec.rb +++ b/spec/lib/gitlab/sidekiq_logging/exception_handler_spec.rb @@ -33,7 +33,7 @@ describe Gitlab::SidekiqLogging::ExceptionHandler do error_class: 'RuntimeError', error_message: exception_message, context: 'Test', - error_backtrace: Gitlab::Profiler.clean_backtrace(backtrace) + error_backtrace: Gitlab::BacktraceCleaner.clean_backtrace(backtrace) ) expect(logger).to receive(:warn).with(expected_data) diff --git a/spec/requests/api/internal/base_spec.rb b/spec/requests/api/internal/base_spec.rb index df55e9ad849..4fe0d4a5983 100644 --- a/spec/requests/api/internal/base_spec.rb +++ b/spec/requests/api/internal/base_spec.rb @@ -1000,6 +1000,22 @@ describe API::Internal::Base do it 'does not try to notify that project moved' do allow_any_instance_of(Gitlab::Identifier).to receive(:identify).and_return(nil) + expect(Gitlab::Checks::ProjectMoved).not_to receive(:fetch_message) + + post api('/internal/post_receive'), params: valid_params + + expect(response).to have_gitlab_http_status(200) + end + end + + context 'when project is nil' do + let(:gl_repository) { 'project-foo' } + + it 'does not try to notify that project moved' do + allow(Gitlab::GlRepository).to receive(:parse).and_return([nil, Gitlab::GlRepository::PROJECT]) + + expect(Gitlab::Checks::ProjectMoved).not_to receive(:fetch_message) + post api('/internal/post_receive'), params: valid_params expect(response).to have_gitlab_http_status(200) diff --git a/spec/requests/api/issues/get_group_issues_spec.rb b/spec/requests/api/issues/get_group_issues_spec.rb index 3ee08758f99..ef63902ffd7 100644 --- a/spec/requests/api/issues/get_group_issues_spec.rb +++ b/spec/requests/api/issues/get_group_issues_spec.rb @@ -688,5 +688,32 @@ describe API::Issues do end end end + + context "#to_reference" do + it 'exposes reference path in context of group' do + get api(base_url, user) + + expect(json_response.first['references']['short']).to eq("##{group_closed_issue.iid}") + expect(json_response.first['references']['relative']).to eq("#{group_closed_issue.project.path}##{group_closed_issue.iid}") + expect(json_response.first['references']['full']).to eq("#{group_closed_issue.project.full_path}##{group_closed_issue.iid}") + end + + context 'referencing from parent group' do + let(:parent_group) { create(:group) } + + before do + group.update(parent_id: parent_group.id) + group_closed_issue.reload + end + + it 'exposes reference path in context of parent group' do + get api("/groups/#{parent_group.id}/issues") + + expect(json_response.first['references']['short']).to eq("##{group_closed_issue.iid}") + expect(json_response.first['references']['relative']).to eq("#{group_closed_issue.project.full_path}##{group_closed_issue.iid}") + expect(json_response.first['references']['full']).to eq("#{group_closed_issue.project.full_path}##{group_closed_issue.iid}") + end + end + end end end diff --git a/spec/requests/api/issues/issues_spec.rb b/spec/requests/api/issues/issues_spec.rb index 50a0a80b542..a3538aa98b1 100644 --- a/spec/requests/api/issues/issues_spec.rb +++ b/spec/requests/api/issues/issues_spec.rb @@ -805,6 +805,17 @@ describe API::Issues do end end + describe 'GET /projects/:id/issues/:issue_iid' do + it 'exposes full reference path' do + get api("/projects/#{project.id}/issues/#{issue.iid}", user) + + expect(response).to have_gitlab_http_status(200) + expect(json_response['references']['short']).to eq("##{issue.iid}") + expect(json_response['references']['relative']).to eq("##{issue.iid}") + expect(json_response['references']['full']).to eq("#{project.parent.path}/#{project.path}##{issue.iid}") + end + end + describe 'DELETE /projects/:id/issues/:issue_iid' do it 'rejects a non member from deleting an issue' do delete api("/projects/#{project.id}/issues/#{issue.iid}", non_member) diff --git a/spec/requests/api/merge_requests_spec.rb b/spec/requests/api/merge_requests_spec.rb index e5ad1a6378e..582bf19820d 100644 --- a/spec/requests/api/merge_requests_spec.rb +++ b/spec/requests/api/merge_requests_spec.rb @@ -736,6 +736,33 @@ describe API::MergeRequests do it_behaves_like 'merge requests list' end + + context "#to_reference" do + it 'exposes reference path in context of group' do + get api("/groups/#{group.id}/merge_requests", user) + + expect(json_response.first['references']['short']).to eq("!#{merge_request_merged.iid}") + expect(json_response.first['references']['relative']).to eq("#{merge_request_merged.target_project.path}!#{merge_request_merged.iid}") + expect(json_response.first['references']['full']).to eq("#{merge_request_merged.target_project.full_path}!#{merge_request_merged.iid}") + end + + context 'referencing from parent group' do + let(:parent_group) { create(:group) } + + before do + group.update(parent_id: parent_group.id) + merge_request_merged.reload + end + + it 'exposes reference path in context of parent group' do + get api("/groups/#{parent_group.id}/merge_requests") + + expect(json_response.first['references']['short']).to eq("!#{merge_request_merged.iid}") + expect(json_response.first['references']['relative']).to eq("#{merge_request_merged.target_project.full_path}!#{merge_request_merged.iid}") + expect(json_response.first['references']['full']).to eq("#{merge_request_merged.target_project.full_path}!#{merge_request_merged.iid}") + end + end + end end describe "GET /projects/:id/merge_requests/:merge_request_iid" do @@ -783,6 +810,9 @@ describe API::MergeRequests do expect(json_response).not_to include('rebase_in_progress') expect(json_response['has_conflicts']).to be_falsy expect(json_response['blocking_discussions_resolved']).to be_truthy + expect(json_response['references']['short']).to eq("!#{merge_request.iid}") + expect(json_response['references']['relative']).to eq("!#{merge_request.iid}") + expect(json_response['references']['full']).to eq("#{merge_request.target_project.full_path}!#{merge_request.iid}") end it 'exposes description and title html when render_html is true' do diff --git a/spec/services/merge_requests/get_urls_service_spec.rb b/spec/services/merge_requests/get_urls_service_spec.rb index dcb8c8080a1..bb8a1873dac 100644 --- a/spec/services/merge_requests/get_urls_service_spec.rb +++ b/spec/services/merge_requests/get_urls_service_spec.rb @@ -45,6 +45,13 @@ describe MergeRequests::GetUrlsService do end end + context 'when project is nil' do + let(:project) { nil } + let(:changes) { default_branch_changes } + + it_behaves_like 'no_merge_request_url' + end + context 'pushing to default branch' do let(:changes) { default_branch_changes } diff --git a/spec/support/helpers/query_recorder.rb b/spec/support/helpers/query_recorder.rb index 9d47a0c23df..1d04014c9a6 100644 --- a/spec/support/helpers/query_recorder.rb +++ b/spec/support/helpers/query_recorder.rb @@ -16,7 +16,7 @@ module ActiveRecord def show_backtrace(values) Rails.logger.debug("QueryRecorder SQL: #{values[:sql]}") - Gitlab::Profiler.clean_backtrace(caller).each { |line| Rails.logger.debug(" --> #{line}") } + Gitlab::BacktraceCleaner.clean_backtrace(caller).each { |line| Rails.logger.debug(" --> #{line}") } end def callback(name, start, finish, message_id, values) diff --git a/spec/support/helpers/test_env.rb b/spec/support/helpers/test_env.rb index f2fa6af6402..bd945fe6409 100644 --- a/spec/support/helpers/test_env.rb +++ b/spec/support/helpers/test_env.rb @@ -245,8 +245,8 @@ module TestEnv end end - def copy_repo(project, bare_repo:, refs:) - target_repo_path = File.expand_path(repos_path + "/#{project.disk_path}.git") + def copy_repo(subject, bare_repo:, refs:) + target_repo_path = File.expand_path(repos_path + "/#{subject.disk_path}.git") FileUtils.mkdir_p(target_repo_path) FileUtils.cp_r("#{File.expand_path(bare_repo)}/.", target_repo_path) |