diff options
| author | mo khan <mo.khan@gmail.com> | 2020-08-19 12:52:44 -0600 |
|---|---|---|
| committer | mo khan <mo.khan@gmail.com> | 2020-08-19 13:36:03 -0600 |
| commit | 13f23838dcd280c3ed079ad5de51763068668935 (patch) | |
| tree | 8252c9c29227a77e2b59d4f0bdcadc0b2cc0a718 | |
| parent | 99a89248b2e6c08bf7a5c6c7950793b1418b9555 (diff) | |
test: add performance specs
| -rw-r--r-- | Gemfile.lock | 9 | ||||
| -rw-r--r-- | license-management.gemspec | 1 | ||||
| -rw-r--r-- | spec/integration/c/conan_spec.rb | 1 | ||||
| -rw-r--r-- | spec/integration/dotnet/nuget_spec.rb | 29 | ||||
| -rw-r--r-- | spec/integration/go/modules_spec.rb | 16 | ||||
| -rw-r--r-- | spec/integration/rust/cargo_spec.rb | 16 | ||||
| -rw-r--r-- | spec/spec_helper.rb | 2 |
7 files changed, 47 insertions, 27 deletions
diff --git a/Gemfile.lock b/Gemfile.lock index 908e411..e505b27 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -34,6 +34,9 @@ GEM aws-sigv4 (~> 1.1) aws-sigv4 (1.2.1) aws-eventstream (~> 1, >= 1.0.2) + benchmark-malloc (0.2.0) + benchmark-perf (0.6.0) + benchmark-trend (0.4.0) byebug (11.1.3) chef-cleanroom (1.0.2) chef-config (16.2.50) @@ -127,6 +130,11 @@ GEM rspec-core (~> 3.9.0) rspec-expectations (~> 3.9.0) rspec-mocks (~> 3.9.0) + rspec-benchmark (0.6.0) + benchmark-malloc (~> 0.2) + benchmark-perf (~> 0.6) + benchmark-trend (~> 0.4) + rspec (>= 3.0) rspec-core (3.9.1) rspec-support (~> 3.9.1) rspec-expectations (3.9.1) @@ -184,6 +192,7 @@ DEPENDENCIES omnibus (~> 7.0) omnibus-software! rspec (~> 3.9) + rspec-benchmark (~> 0.6) rspec_junit_formatter (~> 0.4) simplecov (~> 0.18) simplecov-cobertura (~> 1.3) diff --git a/license-management.gemspec b/license-management.gemspec index a58c5ea..fcdb84d 100644 --- a/license-management.gemspec +++ b/license-management.gemspec @@ -33,6 +33,7 @@ Gem::Specification.new do |spec| spec.add_development_dependency 'json-schema', '~> 2.8' spec.add_development_dependency 'omnibus', '~> 7.0' spec.add_development_dependency 'rspec', '~> 3.9' + spec.add_development_dependency 'rspec-benchmark', '~> 0.6' spec.add_development_dependency 'rspec_junit_formatter', '~> 0.4' spec.add_development_dependency 'simplecov', '~> 0.18' spec.add_development_dependency 'simplecov-cobertura', '~> 1.3' diff --git a/spec/integration/c/conan_spec.rb b/spec/integration/c/conan_spec.rb index 86025bd..52b7a39 100644 --- a/spec/integration/c/conan_spec.rb +++ b/spec/integration/c/conan_spec.rb @@ -15,6 +15,7 @@ RSpec.describe "conan" do end specify { expect(subject).to match_schema } + specify { expect { subject }.to perform_under(60).sec.warmup(0).times } specify { expect(subject.dependency_names).to match_array(%w[openssl poco]) } specify { expect(subject.licenses_for('openssl')).to match_array(['OpenSSL']) } specify { expect(subject.licenses_for('poco')).to match_array(['BSL-1.0']) } diff --git a/spec/integration/dotnet/nuget_spec.rb b/spec/integration/dotnet/nuget_spec.rb index 5bda5db..c72296e 100644 --- a/spec/integration/dotnet/nuget_spec.rb +++ b/spec/integration/dotnet/nuget_spec.rb @@ -3,6 +3,10 @@ require 'spec_helper' RSpec.describe "nuget" do + subject { runner.scan(env: env) } + + let(:env) { {} } + before do system("rm -fr /opt/gitlab/.nuget/packages") end @@ -28,13 +32,14 @@ RSpec.describe "nuget" do XML end - it 'produces a valid report' do + before do runner.add_file('packages.config', packages_config) - report = runner.scan + end - expect(report).to match_schema - expect(report[:licenses].count).not_to be_zero - expect(report.dependency_names).to match_array([ + it 'produces a valid report' do + expect(subject).to match_schema + expect(subject[:licenses].count).not_to be_zero + expect(subject.dependency_names).to match_array([ "Microsoft.CodeDom.Providers.DotNetCompilerPlatform", "Microsoft.Net.Compilers", "Microsoft.Web.Infrastructure", @@ -47,6 +52,8 @@ RSpec.describe "nuget" do "jive" ]) end + + specify { expect { subject }.to perform_under(60).sec.warmup(0).times } end context "when a project has multiple nuget packages.config in different sub directories" do @@ -80,8 +87,6 @@ RSpec.describe "nuget" do end context "when a project has a dependency that has indirect dependencies" do - subject { runner.scan } - before do runner.mount(dir: fixture_file('dotnet/nuget-transient-dependencies')) end @@ -103,8 +108,6 @@ RSpec.describe "nuget" do end context "when scanning a VB.NET project" do - subject { runner.scan } - before do runner.mount(dir: fixture_file('dotnet/nuget-vbproj')) end @@ -117,8 +120,6 @@ RSpec.describe "nuget" do end context "when scanning a F# project" do - subject { runner.scan } - before do runner.mount(dir: fixture_file('dotnet/nuget-fsproj')) end @@ -131,8 +132,6 @@ RSpec.describe "nuget" do end context "when scanning a solution file with multiple projects" do - subject { runner.scan } - before do runner.mount(dir: fixture_file('dotnet/nuget-sln')) end @@ -201,10 +200,6 @@ RSpec.describe "nuget" do end context "when fetching dependencies from a custom registry" do - subject { runner.scan(env: env) } - - let(:env) { {} } - before do add_host('nuget.test', '127.0.0.1') start_proxy_server diff --git a/spec/integration/go/modules_spec.rb b/spec/integration/go/modules_spec.rb index 3edef74..7d85b9f 100644 --- a/spec/integration/go/modules_spec.rb +++ b/spec/integration/go/modules_spec.rb @@ -3,6 +3,10 @@ require 'spec_helper' RSpec.describe "modules" do + subject { runner.scan(env: env) } + + let(:env) { {} } + before do # Delete go module cache system('rm -fr /opt/gitlab/.local/pkg') @@ -13,8 +17,6 @@ RSpec.describe "modules" do ['1.11', '1.12', '1.13', '1.14'].each do |version| context "when scanning a go.mod and go.sum files with v#{version}" do - subject { runner.scan } - before do runner.add_file('main.go', fixture_file_content('go/main.go')) runner.add_file('go.mod', fixture_file_content('go/go.mod')) @@ -53,8 +55,6 @@ RSpec.describe "modules" do end context "when scanning the `gitaly` project" do - subject { runner.scan } - before do runner.clone('https://gitlab.com/gitlab-org/gitaly.git') end @@ -64,11 +64,11 @@ RSpec.describe "modules" do expect(subject[:licenses]).not_to be_empty expect(subject[:dependencies]).not_to be_empty end + + specify { expect { subject }.to perform_under(60).sec.warmup(0).times } end context "when scanning the `gitlab-runner` project" do - subject { runner.scan } - before do runner.clone('https://gitlab.com/gitlab-org/gitlab-runner.git') end @@ -82,8 +82,6 @@ RSpec.describe "modules" do end context "when scanning a project with vendored modules" do - subject { runner.scan } - before do runner.mount(dir: fixture_file('go/1.14-vendored-modules')) end @@ -108,8 +106,6 @@ RSpec.describe "modules" do end context "when scanning a project sourced from a TLS endpoint with a X.509 certificate signed by a private authority" do - subject { runner.scan(env: env) } - before do add_host('goproxy.test', '127.0.0.1') start_proxy_server diff --git a/spec/integration/rust/cargo_spec.rb b/spec/integration/rust/cargo_spec.rb index 3ab010d..a0f2550 100644 --- a/spec/integration/rust/cargo_spec.rb +++ b/spec/integration/rust/cargo_spec.rb @@ -7,6 +7,11 @@ RSpec.describe "cargo" do let(:env) { {} } + before do + install_dir = '/opt/asdf/installs/rust' + system("rm -r #{install_dir}") if Dir.exist?(install_dir) + end + context "when scanning a cargo project" do before do runner.mount(dir: fixture_file('rust/cargo/hello_world')) @@ -57,4 +62,15 @@ RSpec.describe "cargo" do expect(subject.dependency_names).not_to include('pretty_assertions') end end + + context "when scanning https://gitlab.com/inko-lang/inko.git" do + let(:env) { { 'LICENSE_FINDER_CLI_OPTS' => '--aggregate-paths=vm compiler' } } + + before do + runner.clone('https://gitlab.com/inko-lang/inko.git') + end + + specify { expect(subject).to match_schema } + specify { expect { subject }.to perform_under(60).sec.warmup(0).times } + end end diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb index 618175b..2c42e92 100644 --- a/spec/spec_helper.rb +++ b/spec/spec_helper.rb @@ -6,6 +6,7 @@ require 'license/management' require 'json' require 'json-schema' require 'securerandom' +require 'rspec-benchmark' require 'support/fixture_file_helper' require 'support/report' require 'support/project_helper' @@ -15,6 +16,7 @@ require 'support/proxy_helper' require 'support/shared' RSpec.configure do |config| + config.include RSpec::Benchmark::Matchers config.include FixtureFileHelper config.include IntegrationTestHelper, type: :integration config.define_derived_metadata(file_path: %r{/spec/integration}) do |metadata| |
