diff options
author | GitLab Bot <gitlab-bot@gitlab.com> | 2022-05-19 10:33:21 +0300 |
---|---|---|
committer | GitLab Bot <gitlab-bot@gitlab.com> | 2022-05-19 10:33:21 +0300 |
commit | 36a59d088eca61b834191dacea009677a96c052f (patch) | |
tree | e4f33972dab5d8ef79e3944a9f403035fceea43f /spec/requests/lfs_http_spec.rb | |
parent | a1761f15ec2cae7c7f7bbda39a75494add0dfd6f (diff) |
Add latest changes from gitlab-org/gitlab@15-0-stable-eev15.0.0-rc42
Diffstat (limited to 'spec/requests/lfs_http_spec.rb')
-rw-r--r-- | spec/requests/lfs_http_spec.rb | 63 |
1 files changed, 22 insertions, 41 deletions
diff --git a/spec/requests/lfs_http_spec.rb b/spec/requests/lfs_http_spec.rb index 4b2f11da77e..acf83916f82 100644 --- a/spec/requests/lfs_http_spec.rb +++ b/spec/requests/lfs_http_spec.rb @@ -2,9 +2,12 @@ require 'spec_helper' RSpec.describe 'Git LFS API and storage' do + using RSpec::Parameterized::TableSyntax + include LfsHttpHelpers include ProjectForksHelper include WorkhorseHelpers + include WorkhorseLfsHelpers let_it_be(:project, reload: true) { create(:project, :empty_repo) } let_it_be(:user) { create(:user) } @@ -814,7 +817,23 @@ RSpec.describe 'Git LFS API and storage' do context 'and request to finalize the upload is not sent by gitlab-workhorse' do it 'fails with a JWT decode error' do - expect { put_finalize(lfs_tmp_file, verified: false) }.to raise_error(JWT::DecodeError) + expect { put_finalize(verified: false) }.to raise_error(JWT::DecodeError) + end + end + + context 'and the uploaded file is invalid' do + where(:size, :sha256, :status) do + nil | nil | :ok # Test setup sanity check + 0 | nil | :bad_request + nil | 'a' * 64 | :bad_request + end + + with_them do + it 'validates the upload size and SHA256' do + put_finalize(size: size, sha256: sha256) + + expect(response).to have_gitlab_http_status(status) + end end end @@ -840,7 +859,7 @@ RSpec.describe 'Git LFS API and storage' do let(:tmp_object) do fog_connection.directories.new(key: 'lfs-objects').files.create( # rubocop: disable Rails/SaveBang key: 'tmp/uploads/12312300', - body: 'content' + body: 'x' * sample_size ) end @@ -1106,13 +1125,7 @@ RSpec.describe 'Git LFS API and storage' do context 'when pushing the same LFS object to the second project' do before do - finalize_headers = headers - .merge('X-Gitlab-Lfs-Tmp' => lfs_tmp_file) - .merge(workhorse_internal_api_request_header) - - put objects_url(second_project, sample_oid, sample_size), - params: {}, - headers: finalize_headers + put_finalize(with_tempfile: true, to_project: second_project) end it_behaves_like 'LFS http 200 response' @@ -1130,38 +1143,6 @@ RSpec.describe 'Git LFS API and storage' do put authorize_url(project, sample_oid, sample_size), params: {}, headers: authorize_headers end - - def put_finalize(lfs_tmp = lfs_tmp_file, with_tempfile: false, verified: true, remote_object: nil, args: {}) - uploaded_file = nil - - if with_tempfile - upload_path = LfsObjectUploader.workhorse_local_upload_path - file_path = upload_path + '/' + lfs_tmp if lfs_tmp - - FileUtils.mkdir_p(upload_path) - FileUtils.touch(file_path) - - uploaded_file = UploadedFile.new(file_path, filename: File.basename(file_path)) - elsif remote_object - uploaded_file = fog_to_uploaded_file(remote_object) - end - - finalize_headers = headers - finalize_headers.merge!(workhorse_internal_api_request_header) if verified - - workhorse_finalize( - objects_url(project, sample_oid, sample_size), - method: :put, - file_key: :file, - params: args.merge(file: uploaded_file), - headers: finalize_headers, - send_rewritten_field: include_workhorse_jwt_header - ) - end - - def lfs_tmp_file - "#{sample_oid}012345678" - end end end end |