Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGitLab Bot <gitlab-bot@gitlab.com>2020-11-19 11:27:35 +0300
committerGitLab Bot <gitlab-bot@gitlab.com>2020-11-19 11:27:35 +0300
commit7e9c479f7de77702622631cff2628a9c8dcbc627 (patch)
treec8f718a08e110ad7e1894510980d2155a6549197 /spec/services/packages
parente852b0ae16db4052c1c567d9efa4facc81146e88 (diff)
Add latest changes from gitlab-org/gitlab@13-6-stable-eev13.6.0-rc42
Diffstat (limited to 'spec/services/packages')
-rw-r--r--spec/services/packages/composer/version_parser_service_spec.rb2
-rw-r--r--spec/services/packages/conan/create_package_file_service_spec.rb2
-rw-r--r--spec/services/packages/create_event_service_spec.rb78
-rw-r--r--spec/services/packages/create_package_file_service_spec.rb19
-rw-r--r--spec/services/packages/debian/extract_deb_metadata_service_spec.rb37
-rw-r--r--spec/services/packages/debian/parse_debian822_service_spec.rb148
-rw-r--r--spec/services/packages/generic/create_package_file_service_spec.rb6
-rw-r--r--spec/services/packages/generic/find_or_create_package_service_spec.rb10
-rw-r--r--spec/services/packages/maven/create_package_service_spec.rb2
-rw-r--r--spec/services/packages/maven/find_or_create_package_service_spec.rb17
-rw-r--r--spec/services/packages/npm/create_package_service_spec.rb11
11 files changed, 303 insertions, 29 deletions
diff --git a/spec/services/packages/composer/version_parser_service_spec.rb b/spec/services/packages/composer/version_parser_service_spec.rb
index 904c75ab0a1..1a2f653c042 100644
--- a/spec/services/packages/composer/version_parser_service_spec.rb
+++ b/spec/services/packages/composer/version_parser_service_spec.rb
@@ -19,9 +19,11 @@ RSpec.describe Packages::Composer::VersionParserService do
nil | '1.7.x' | '1.7.x-dev'
'v1.0.0' | nil | '1.0.0'
'v1.0' | nil | '1.0'
+ 'v1.0.1+meta' | nil | '1.0.1+meta'
'1.0' | nil | '1.0'
'1.0.2' | nil | '1.0.2'
'1.0.2-beta2' | nil | '1.0.2-beta2'
+ '1.0.1+meta' | nil | '1.0.1+meta'
end
with_them do
diff --git a/spec/services/packages/conan/create_package_file_service_spec.rb b/spec/services/packages/conan/create_package_file_service_spec.rb
index 0e9cbba5fc1..bd6a91c883a 100644
--- a/spec/services/packages/conan/create_package_file_service_spec.rb
+++ b/spec/services/packages/conan/create_package_file_service_spec.rb
@@ -100,7 +100,7 @@ RSpec.describe Packages::Conan::CreatePackageFileService do
end
let(:tmp_object) do
- fog_connection.directories.new(key: 'packages').files.create(
+ fog_connection.directories.new(key: 'packages').files.create( # rubocop:disable Rails/SaveBang
key: "tmp/uploads/#{file_name}",
body: 'content'
)
diff --git a/spec/services/packages/create_event_service_spec.rb b/spec/services/packages/create_event_service_spec.rb
index 7e66b430a8c..55703e9127f 100644
--- a/spec/services/packages/create_event_service_spec.rb
+++ b/spec/services/packages/create_event_service_spec.rb
@@ -15,40 +15,92 @@ RSpec.describe Packages::CreateEventService do
subject { described_class.new(nil, user, params).execute }
describe '#execute' do
- shared_examples 'package event creation' do |originator_type, expected_scope|
- it 'creates the event' do
- expect { subject }.to change { Packages::Event.count }.by(1)
-
- expect(subject.originator_type).to eq(originator_type)
- expect(subject.originator).to eq(user&.id)
- expect(subject.event_scope).to eq(expected_scope)
- expect(subject.event_type).to eq(event_name)
+ shared_examples 'db package event creation' do |originator_type, expected_scope|
+ before do
+ allow(::Gitlab::UsageDataCounters::HLLRedisCounter).to receive(:track_event)
+ end
+
+ context 'with feature flag disable' do
+ before do
+ stub_feature_flags(collect_package_events: false)
+ end
+
+ it 'does not create an event object' do
+ expect { subject }.not_to change { Packages::Event.count }
+ end
+ end
+
+ context 'with feature flag enabled' do
+ before do
+ stub_feature_flags(collect_package_events: true)
+ end
+
+ it 'creates the event' do
+ expect { subject }.to change { Packages::Event.count }.by(1)
+
+ expect(subject.originator_type).to eq(originator_type)
+ expect(subject.originator).to eq(user&.id)
+ expect(subject.event_scope).to eq(expected_scope)
+ expect(subject.event_type).to eq(event_name)
+ end
+ end
+ end
+
+ shared_examples 'redis package event creation' do |originator_type, expected_scope|
+ context 'with feature flag disable' do
+ before do
+ stub_feature_flags(collect_package_events_redis: false)
+ end
+
+ it 'does not track the event' do
+ expect(::Gitlab::UsageDataCounters::HLLRedisCounter).not_to receive(:track_event)
+
+ subject
+ end
+ end
+
+ it 'tracks the event' do
+ expect(::Gitlab::UsageDataCounters::HLLRedisCounter).to receive(:track_event).with(user.id, Packages::Event.allowed_event_name(expected_scope, event_name, originator_type))
+
+ subject
end
end
context 'with a user' do
let(:user) { create(:user) }
- it_behaves_like 'package event creation', 'user', 'container'
+ it_behaves_like 'db package event creation', 'user', 'container'
+ it_behaves_like 'redis package event creation', 'user', 'container'
end
context 'with a deploy token' do
let(:user) { create(:deploy_token) }
- it_behaves_like 'package event creation', 'deploy_token', 'container'
+ it_behaves_like 'db package event creation', 'deploy_token', 'container'
+ it_behaves_like 'redis package event creation', 'deploy_token', 'container'
end
context 'with no user' do
let(:user) { nil }
- it_behaves_like 'package event creation', 'guest', 'container'
+ it_behaves_like 'db package event creation', 'guest', 'container'
end
context 'with a package as scope' do
- let(:user) { nil }
let(:scope) { create(:npm_package) }
- it_behaves_like 'package event creation', 'guest', 'npm'
+ context 'as guest' do
+ let(:user) { nil }
+
+ it_behaves_like 'db package event creation', 'guest', 'npm'
+ end
+
+ context 'with user' do
+ let(:user) { create(:user) }
+
+ it_behaves_like 'db package event creation', 'user', 'npm'
+ it_behaves_like 'redis package event creation', 'user', 'npm'
+ end
end
end
end
diff --git a/spec/services/packages/create_package_file_service_spec.rb b/spec/services/packages/create_package_file_service_spec.rb
index 93dde54916a..12fd1039d30 100644
--- a/spec/services/packages/create_package_file_service_spec.rb
+++ b/spec/services/packages/create_package_file_service_spec.rb
@@ -2,7 +2,10 @@
require 'spec_helper'
RSpec.describe Packages::CreatePackageFileService do
- let(:package) { create(:maven_package) }
+ let_it_be(:package) { create(:maven_package) }
+ let_it_be(:user) { create(:user) }
+
+ subject { described_class.new(package, params) }
describe '#execute' do
context 'with valid params' do
@@ -14,7 +17,7 @@ RSpec.describe Packages::CreatePackageFileService do
end
it 'creates a new package file' do
- package_file = described_class.new(package, params).execute
+ package_file = subject.execute
expect(package_file).to be_valid
expect(package_file.file_name).to eq('foo.jar')
@@ -29,9 +32,17 @@ RSpec.describe Packages::CreatePackageFileService do
end
it 'raises an error' do
- service = described_class.new(package, params)
+ expect { subject.execute }.to raise_error(ActiveRecord::RecordInvalid)
+ end
+ end
+
+ context 'with a build' do
+ let_it_be(:pipeline) { create(:ci_pipeline, user: user) }
+ let(:build) { double('build', pipeline: pipeline) }
+ let(:params) { { file: Tempfile.new, file_name: 'foo.jar', build: build } }
- expect { service.execute }.to raise_error(ActiveRecord::RecordInvalid)
+ it 'creates a build_info' do
+ expect { subject.execute }.to change { Packages::PackageFileBuildInfo.count }.by(1)
end
end
end
diff --git a/spec/services/packages/debian/extract_deb_metadata_service_spec.rb b/spec/services/packages/debian/extract_deb_metadata_service_spec.rb
new file mode 100644
index 00000000000..33059adf8a2
--- /dev/null
+++ b/spec/services/packages/debian/extract_deb_metadata_service_spec.rb
@@ -0,0 +1,37 @@
+# frozen_string_literal: true
+require 'spec_helper'
+
+RSpec.describe Packages::Debian::ExtractDebMetadataService do
+ subject { described_class.new(file_path) }
+
+ let(:file_name) { 'libsample0_1.2.3~alpha2_amd64.deb' }
+ let(:file_path) { "spec/fixtures/packages/debian/#{file_name}" }
+
+ context 'with correct file' do
+ it 'return as expected' do
+ expected = {
+ 'Package': 'libsample0',
+ 'Source': 'sample',
+ 'Version': '1.2.3~alpha2',
+ 'Architecture': 'amd64',
+ 'Maintainer': 'John Doe <john.doe@example.com>',
+ 'Installed-Size': '7',
+ 'Section': 'libs',
+ 'Priority': 'optional',
+ 'Multi-Arch': 'same',
+ 'Homepage': 'https://gitlab.com/',
+ 'Description': "Some mostly empty lib\nUsed in GitLab tests.\n\nTesting another paragraph."
+ }
+
+ expect(subject.execute).to eq expected
+ end
+ end
+
+ context 'with incorrect file' do
+ let(:file_name) { 'README.md' }
+
+ it 'raise error' do
+ expect {subject.execute}.to raise_error(described_class::CommandFailedError, /is not a Debian format archive/i)
+ end
+ end
+end
diff --git a/spec/services/packages/debian/parse_debian822_service_spec.rb b/spec/services/packages/debian/parse_debian822_service_spec.rb
new file mode 100644
index 00000000000..b67daca89c4
--- /dev/null
+++ b/spec/services/packages/debian/parse_debian822_service_spec.rb
@@ -0,0 +1,148 @@
+# frozen_string_literal: true
+require 'spec_helper'
+
+RSpec.describe Packages::Debian::ParseDebian822Service do
+ subject { described_class.new(input) }
+
+ context 'with dpkg-deb --field output' do
+ let(:input) do
+ <<~HEREDOC
+ Package: libsample0
+ Source: sample
+ Version: 1.2.3~alpha2
+ Architecture: amd64
+ Maintainer: John Doe <john.doe@example.com>
+ Installed-Size: 9
+ Section: libs
+ Priority: optional
+ Multi-Arch: same
+ Homepage: https://gitlab.com/
+ Description: Some mostly empty lib
+ Used in GitLab tests.
+ .
+ Testing another paragraph.
+ HEREDOC
+ end
+
+ it 'return as expected, preserving order' do
+ expected = {
+ 'Package: libsample0' => {
+ 'Package': 'libsample0',
+ 'Source': 'sample',
+ 'Version': '1.2.3~alpha2',
+ 'Architecture': 'amd64',
+ 'Maintainer': 'John Doe <john.doe@example.com>',
+ 'Installed-Size': '9',
+ 'Section': 'libs',
+ 'Priority': 'optional',
+ 'Multi-Arch': 'same',
+ 'Homepage': 'https://gitlab.com/',
+ 'Description': "Some mostly empty lib\nUsed in GitLab tests.\n\nTesting another paragraph."
+ }
+ }
+
+ expect(subject.execute.to_s).to eq(expected.to_s)
+ end
+ end
+
+ context 'with control file' do
+ let(:input) { fixture_file('packages/debian/sample/debian/control') }
+
+ it 'return as expected, preserving order' do
+ expected = {
+ 'Source: sample' => {
+ 'Source': 'sample',
+ 'Priority': 'optional',
+ 'Maintainer': 'John Doe <john.doe@example.com>',
+ 'Build-Depends': 'debhelper-compat (= 13)',
+ 'Standards-Version': '4.5.0',
+ 'Section': 'libs',
+ 'Homepage': 'https://gitlab.com/',
+ # 'Vcs-Browser': 'https://salsa.debian.org/debian/sample-1.2.3',
+ # '#Vcs-Git': 'https://salsa.debian.org/debian/sample-1.2.3.git',
+ 'Rules-Requires-Root': 'no'
+ },
+ 'Package: sample-dev' => {
+ 'Package': 'sample-dev',
+ 'Section': 'libdevel',
+ 'Architecture': 'any',
+ 'Multi-Arch': 'same',
+ 'Depends': 'libsample0 (= ${binary:Version}), ${misc:Depends}',
+ 'Description': "Some mostly empty developpement files\nUsed in GitLab tests.\n\nTesting another paragraph."
+ },
+ 'Package: libsample0' => {
+ 'Package': 'libsample0',
+ 'Architecture': 'any',
+ 'Multi-Arch': 'same',
+ 'Depends': '${shlibs:Depends}, ${misc:Depends}',
+ 'Description': "Some mostly empty lib\nUsed in GitLab tests.\n\nTesting another paragraph."
+ },
+ 'Package: sample-udeb' => {
+ 'Package': 'sample-udeb',
+ 'Package-Type': 'udeb',
+ 'Architecture': 'any',
+ 'Depends': 'installed-base',
+ 'Description': 'Some mostly empty udeb'
+ }
+ }
+
+ expect(subject.execute.to_s).to eq(expected.to_s)
+ end
+ end
+
+ context 'with empty input' do
+ let(:input) { '' }
+
+ it 'return a empty hash' do
+ expect(subject.execute).to eq({})
+ end
+ end
+
+ context 'with unexpected continuation line' do
+ let(:input) { ' continuation' }
+
+ it 'raise error' do
+ expect {subject.execute}.to raise_error(described_class::InvalidDebian822Error, 'Parse error. Unexpected continuation line')
+ end
+ end
+
+ context 'with duplicate field' do
+ let(:input) do
+ <<~HEREDOC
+ Package: libsample0
+ Source: sample
+ Source: sample
+ HEREDOC
+ end
+
+ it 'raise error' do
+ expect {subject.execute}.to raise_error(described_class::InvalidDebian822Error, "Duplicate field 'Source' in section 'Package: libsample0'")
+ end
+ end
+
+ context 'with incorrect input' do
+ let(:input) do
+ <<~HEREDOC
+ Hello
+ HEREDOC
+ end
+
+ it 'raise error' do
+ expect {subject.execute}.to raise_error(described_class::InvalidDebian822Error, 'Parse error on line Hello')
+ end
+ end
+
+ context 'with duplicate section' do
+ let(:input) do
+ <<~HEREDOC
+ Package: libsample0
+
+ Package: libsample0
+ HEREDOC
+ end
+
+ it 'raise error' do
+ expect {subject.execute}.to raise_error(described_class::InvalidDebian822Error, "Duplicate section 'Package: libsample0'")
+ end
+ end
+end
diff --git a/spec/services/packages/generic/create_package_file_service_spec.rb b/spec/services/packages/generic/create_package_file_service_spec.rb
index 0ae109ef996..907483e3d7f 100644
--- a/spec/services/packages/generic/create_package_file_service_spec.rb
+++ b/spec/services/packages/generic/create_package_file_service_spec.rb
@@ -5,6 +5,8 @@ require 'spec_helper'
RSpec.describe Packages::Generic::CreatePackageFileService do
let_it_be(:project) { create(:project) }
let_it_be(:user) { create(:user) }
+ let_it_be(:pipeline) { create(:ci_pipeline, user: user) }
+ let(:build) { double('build', pipeline: pipeline) }
describe '#execute' do
let(:sha256) { '440e5e148a25331bbd7991575f7d54933c0ebf6cc735a18ee5066ac1381bb590' }
@@ -16,7 +18,8 @@ RSpec.describe Packages::Generic::CreatePackageFileService do
package_name: 'mypackage',
package_version: '0.0.1',
file: file,
- file_name: 'myfile.tar.gz.1'
+ file_name: 'myfile.tar.gz.1',
+ build: build
}
end
@@ -41,6 +44,7 @@ RSpec.describe Packages::Generic::CreatePackageFileService do
service = described_class.new(project, user, params)
expect { service.execute }.to change { package.package_files.count }.by(1)
+ .and change { Packages::PackageFileBuildInfo.count }.by(1)
package_file = package.package_files.last
aggregate_failures do
diff --git a/spec/services/packages/generic/find_or_create_package_service_spec.rb b/spec/services/packages/generic/find_or_create_package_service_spec.rb
index 5a9b8b03279..a045cb36418 100644
--- a/spec/services/packages/generic/find_or_create_package_service_spec.rb
+++ b/spec/services/packages/generic/find_or_create_package_service_spec.rb
@@ -27,7 +27,7 @@ RSpec.describe Packages::Generic::FindOrCreatePackageService do
expect(package.creator).to eq(user)
expect(package.name).to eq('mypackage')
expect(package.version).to eq('0.0.1')
- expect(package.build_info).to be_nil
+ expect(package.original_build_info).to be_nil
end
end
@@ -42,7 +42,7 @@ RSpec.describe Packages::Generic::FindOrCreatePackageService do
expect(package.creator).to eq(user)
expect(package.name).to eq('mypackage')
expect(package.version).to eq('0.0.1')
- expect(package.build_info.pipeline).to eq(ci_build.pipeline)
+ expect(package.original_build_info.pipeline).to eq(ci_build.pipeline)
end
end
end
@@ -60,7 +60,7 @@ RSpec.describe Packages::Generic::FindOrCreatePackageService do
expect(found_package).to eq(package)
end.not_to change { project.packages.generic.count }
- expect(package.reload.build_info).to be_nil
+ expect(package.reload.original_build_info).to be_nil
end
end
@@ -68,7 +68,7 @@ RSpec.describe Packages::Generic::FindOrCreatePackageService do
let(:pipeline) { create(:ci_pipeline, project: project) }
before do
- package.create_build_info!(pipeline: pipeline)
+ package.build_infos.create!(pipeline: pipeline)
end
it 'finds the package and does not change package build info even if build is provided' do
@@ -80,7 +80,7 @@ RSpec.describe Packages::Generic::FindOrCreatePackageService do
expect(found_package).to eq(package)
end.not_to change { project.packages.generic.count }
- expect(package.reload.build_info.pipeline).to eq(pipeline)
+ expect(package.reload.original_build_info.pipeline).to eq(pipeline)
end
end
end
diff --git a/spec/services/packages/maven/create_package_service_spec.rb b/spec/services/packages/maven/create_package_service_spec.rb
index 7ec368aa00f..11bf00c1399 100644
--- a/spec/services/packages/maven/create_package_service_spec.rb
+++ b/spec/services/packages/maven/create_package_service_spec.rb
@@ -33,8 +33,6 @@ RSpec.describe Packages::Maven::CreatePackageService do
expect(package.maven_metadatum.app_version).to eq(version)
end
- it_behaves_like 'assigns build to package'
-
it_behaves_like 'assigns the package creator'
end
diff --git a/spec/services/packages/maven/find_or_create_package_service_spec.rb b/spec/services/packages/maven/find_or_create_package_service_spec.rb
index 4406e4037e2..2eaad7db445 100644
--- a/spec/services/packages/maven/find_or_create_package_service_spec.rb
+++ b/spec/services/packages/maven/find_or_create_package_service_spec.rb
@@ -10,11 +10,12 @@ RSpec.describe Packages::Maven::FindOrCreatePackageService do
let(:version) { '1.0.0' }
let(:file_name) { 'test.jar' }
let(:param_path) { "#{path}/#{version}" }
+ let(:params) { { path: param_path, file_name: file_name } }
describe '#execute' do
using RSpec::Parameterized::TableSyntax
- subject { described_class.new(project, user, { path: param_path, file_name: file_name }).execute }
+ subject { described_class.new(project, user, params).execute }
RSpec.shared_examples 'reuse existing package' do
it { expect { subject}.not_to change { Packages::Package.count } }
@@ -23,7 +24,7 @@ RSpec.describe Packages::Maven::FindOrCreatePackageService do
end
RSpec.shared_examples 'create package' do
- it { expect { subject}.to change { Packages::Package.count }.by(1) }
+ it { expect { subject }.to change { Packages::Package.count }.by(1) }
it 'sets the proper name and version' do
pkg = subject
@@ -31,6 +32,8 @@ RSpec.describe Packages::Maven::FindOrCreatePackageService do
expect(pkg.name).to eq(path)
expect(pkg.version).to eq(version)
end
+
+ it_behaves_like 'assigns build to package'
end
context 'path with version' do
@@ -77,5 +80,15 @@ RSpec.describe Packages::Maven::FindOrCreatePackageService do
end
end
end
+
+ context 'with a build' do
+ let_it_be(:pipeline) { create(:ci_pipeline, user: user) }
+ let(:build) { double('build', pipeline: pipeline) }
+ let(:params) { { path: param_path, file_name: file_name, build: build } }
+
+ it 'creates a build_info' do
+ expect { subject }.to change { Packages::BuildInfo.count }.by(1)
+ end
+ end
end
end
diff --git a/spec/services/packages/npm/create_package_service_spec.rb b/spec/services/packages/npm/create_package_service_spec.rb
index c8431c640da..6db3777cde8 100644
--- a/spec/services/packages/npm/create_package_service_spec.rb
+++ b/spec/services/packages/npm/create_package_service_spec.rb
@@ -48,7 +48,16 @@ RSpec.describe Packages::Npm::CreatePackageService do
context 'scoped package' do
it_behaves_like 'valid package'
- it_behaves_like 'assigns build to package'
+ context 'with build info' do
+ let(:job) { create(:ci_build, user: user) }
+ let(:params) { super().merge(build: job) }
+
+ it_behaves_like 'assigns build to package'
+
+ it 'creates a package file build info' do
+ expect { subject }.to change { Packages::PackageFileBuildInfo.count }.by(1)
+ end
+ end
end
context 'invalid package name' do