derailed_benchmarks 1.3.2 → 1.3.3

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: feeca2d25e7ddd4fc5a6d2fedb2236db29290259
4
- data.tar.gz: b4bd68d5b8f4067aff1f8ef4e4fc90e1cabcaa59
2
+ SHA256:
3
+ metadata.gz: 689f372f6e0a6bd25ac8b3ca6c9a1378459020ba61044aa4fa3dca67911a2363
4
+ data.tar.gz: c02c9c53ca5aa3e6469ea830534dc2c9a623f9c2bf105973df04c494920cd160
5
5
  SHA512:
6
- metadata.gz: a5b16bc6f6e738d1a205b4408e21d5079ce9de794d9380f8ff6368ccd8456dc71c8e60c623c80b80379ec5564316cada4b298d3b11d960dc3120036d3df004bf
7
- data.tar.gz: d584bd3dda3528b2ba22bfe21f035f88a68c69f51c1c1932faa94d8edea93751fdb03125bbee345de2cf54a96ee36c59f78aa9b39c296cfce85cf1c7d3e7467d
6
+ metadata.gz: f9191351090e9da616024a53040fce8f80331982fedcd165b36c19291ed59261fa0bb2afb61703d687145315b6e57eefbbaef9557b926b1cd0ff2b9d807f6443
7
+ data.tar.gz: 330e785a95650ac8163af8f4eb06d73468541157d9836f4c433a1852b21731422703eba070b96f514ef6b933772fc0f883e1ff2fe0718e685030834a1402a778
data/.gitignore CHANGED
@@ -3,3 +3,6 @@
3
3
  /test/rails_app/tmp/*
4
4
  /test/rails_app/log/*
5
5
  *.sqlite3
6
+
7
+ Gemfile.lock
8
+ gemfiles/*.lock
data/.travis.yml CHANGED
@@ -4,10 +4,33 @@ rvm:
4
4
  - 2.3
5
5
  - 2.4.0
6
6
  - ruby-head
7
+ gemfile:
8
+ - gemfiles/rails_3_2.gemfile
9
+ - gemfiles/rails_4_0.gemfile
10
+ - gemfiles/rails_4_1.gemfile
11
+ - gemfiles/rails_4_2.gemfile
12
+ - gemfiles/rails_5_0.gemfile
13
+ - gemfiles/rails_5_1.gemfile
7
14
 
8
15
  before_install:
9
16
  - gem install bundler
10
17
 
11
18
  matrix:
19
+ # Ruby 2.4 doesn't work with devise + rails 3/4, so just skip the builds to
20
+ # avoid travis runs we expect to fail. This is due to the Integer/Fixnum
21
+ # change if I am not mistaken.
22
+ exclude:
23
+ - rvm: 2.4.0
24
+ gemfile: gemfiles/rails_3_2.gemfile
25
+ - rvm: 2.4.0
26
+ gemfile: gemfiles/rails_4_0.gemfile
27
+ - rvm: 2.4.0
28
+ gemfile: gemfiles/rails_4_1.gemfile
29
+ - rvm: ruby-head
30
+ gemfile: gemfiles/rails_3_2.gemfile
31
+ - rvm: ruby-head
32
+ gemfile: gemfiles/rails_4_0.gemfile
33
+ - rvm: ruby-head
34
+ gemfile: gemfiles/rails_4_1.gemfile
12
35
  allow_failures:
13
36
  - rvm: ruby-head
data/Appraisals ADDED
@@ -0,0 +1,26 @@
1
+ # -*- mode: ruby -*-
2
+ # vi: set ft=ruby :
3
+
4
+ appraise "rails-3-2" do
5
+ gem "rails", "~> 3.2.0"
6
+ end
7
+
8
+ appraise "rails-4-0" do
9
+ gem "rails", "~> 4.0.0"
10
+ end
11
+
12
+ appraise "rails-4-1" do
13
+ gem "rails", "~> 4.1.0"
14
+ end
15
+
16
+ appraise "rails-4-2" do
17
+ gem "rails", "~> 4.2.0"
18
+ end
19
+
20
+ appraise "rails-5-0" do
21
+ gem "rails", "~> 5.0.0"
22
+ end
23
+
24
+ appraise "rails-5-1" do
25
+ gem "rails", "~> 5.1.0"
26
+ end
data/CHANGELOG.md CHANGED
@@ -1,5 +1,9 @@
1
1
  # A Log of Changes!
2
2
 
3
+ ## [1.3.3]
4
+
5
+ - Make all paths added to $LOAD_PATH absolute instead of relative to allow for use with apps that use bootsnap.
6
+
3
7
  ## [1.3.2]
4
8
 
5
9
  - Allow for use with Rack 11.
data/README.md CHANGED
@@ -5,6 +5,7 @@ A series of things you can use to benchmark a Rails or Ruby app.
5
5
  ![](http://media.giphy.com/media/lfbxexWy71b6U/giphy.gif)
6
6
 
7
7
  [![Build Status](https://travis-ci.org/schneems/derailed_benchmarks.svg)](https://travis-ci.org/schneems/derailed_benchmarks)
8
+ [![Help Contribute to Open Source](https://www.codetriage.com/schneems/derailed_benchmarks/badges/users.svg)](https://www.codetriage.com/schneems/derailed_benchmarks)
8
9
 
9
10
  ## Compatibility/Requirements
10
11
 
@@ -86,7 +87,7 @@ By default this task will only return results from the `:default` and `"producti
86
87
  $ bundle exec derailed bundle:mem development
87
88
  ```
88
89
 
89
- You can use `CUT_OFF=0.3` to only show files that have above a certain memory useage, this can be used to help eliminate noise.
90
+ You can use `CUT_OFF=0.3` to only show files that have above a certain memory usage, this can be used to help eliminate noise.
90
91
 
91
92
  Note: This method won't include files in your own app, only items in your Gemfile. For that you'll need to use `bundle exec derailed exec mem`. See below for more info.
92
93
 
@@ -318,7 +319,7 @@ TOP: 54.1836 MiB
318
319
 
319
320
  You can use `CUT_OFF=0.3` to only show files that have above a certain memory useage, this can be used to help eliminate noise.
320
321
 
321
- If your application code is exremely large at boot consider using `$ derailed exec perf:objects` to debug low level object creation.
322
+ If your application code is extremely large at boot consider using `$ derailed exec perf:objects` to debug low level object creation.
322
323
 
323
324
  ## My app is Slow
324
325
 
@@ -401,7 +402,7 @@ For tasks that are run a number of times you can set the number using `TEST_COUN
401
402
  $ TEST_COUNT=100_000 bundle exec derailed exec perf:test
402
403
  ```
403
404
 
404
- ## Hitting a different endpoint with `PATH_TO_HIT`
405
+ ### Hitting a different endpoint with `PATH_TO_HIT`
405
406
 
406
407
  By default tasks will hit your homepage `/`. If you want to hit a different url use `PATH_TO_HIT` for example if you wanted to go to `users/new` you can execute:
407
408
 
@@ -417,6 +418,16 @@ $ PATH_TO_HIT=http://subdomain.lvh.me:3000/users/new bundle exec derailed exec p
417
418
 
418
419
  Beware that you cannot combine a full uri with `USE_SERVER`.
419
420
 
421
+ ### Setting HTTP headers
422
+
423
+ You can specify HTTP headers by setting `HTTP_<header name>` variables. Example:
424
+
425
+ ```
426
+ $ HTTP_AUTHORIZATION="Basic YWRtaW46c2VjcmV0\n" \
427
+ HTTP_USER_AGENT="Mozilla/5.0" \
428
+ PATH_TO_HIT=/foo_secret bundle exec derailed exec perf:ips
429
+ ```
430
+
420
431
  ### Using a real web server with `USE_SERVER`
421
432
 
422
433
  All tests are run without a webserver (directly using `Rack::Mock` by default), if you want to use a webserver set `USE_SERVER` to a Rack::Server compliant server, such as `webrick`.
@@ -28,7 +28,8 @@ Gem::Specification.new do |gem|
28
28
  gem.add_dependency "rake", "> 10", "< 13"
29
29
  gem.add_dependency "thor", "~> 0.19"
30
30
 
31
- gem.add_development_dependency "capybara", "~> 2"
32
- gem.add_development_dependency "rails", "> 3", "< 6"
33
- gem.add_development_dependency "devise", "> 3", "< 5"
31
+ gem.add_development_dependency "capybara", "~> 2"
32
+ gem.add_development_dependency "rails", "> 3", "< 6"
33
+ gem.add_development_dependency "devise", "> 3", "< 5"
34
+ gem.add_development_dependency "appraisal", "2.2.0"
34
35
  end
@@ -0,0 +1,2 @@
1
+ ---
2
+ BUNDLE_RETRY: "1"
@@ -0,0 +1,13 @@
1
+ # This file was generated by Appraisal
2
+
3
+ source "https://rubygems.org"
4
+
5
+ gem "rails", "~> 3.2.0"
6
+
7
+ group :development, :test do
8
+ gem "sqlite3", platform: [:ruby, :mswin, :mingw]
9
+ gem "activerecord-jdbcsqlite3-adapter", "~> 1.3.13", platform: :jruby
10
+ gem "test-unit", "~> 3.0"
11
+ end
12
+
13
+ gemspec path: "../"
@@ -0,0 +1,13 @@
1
+ # This file was generated by Appraisal
2
+
3
+ source "https://rubygems.org"
4
+
5
+ gem "rails", "~> 4.0.0"
6
+
7
+ group :development, :test do
8
+ gem "sqlite3", platform: [:ruby, :mswin, :mingw]
9
+ gem "activerecord-jdbcsqlite3-adapter", "~> 1.3.13", platform: :jruby
10
+ gem "test-unit", "~> 3.0"
11
+ end
12
+
13
+ gemspec path: "../"
@@ -0,0 +1,13 @@
1
+ # This file was generated by Appraisal
2
+
3
+ source "https://rubygems.org"
4
+
5
+ gem "rails", "~> 4.1.0"
6
+
7
+ group :development, :test do
8
+ gem "sqlite3", platform: [:ruby, :mswin, :mingw]
9
+ gem "activerecord-jdbcsqlite3-adapter", "~> 1.3.13", platform: :jruby
10
+ gem "test-unit", "~> 3.0"
11
+ end
12
+
13
+ gemspec path: "../"
@@ -0,0 +1,13 @@
1
+ # This file was generated by Appraisal
2
+
3
+ source "https://rubygems.org"
4
+
5
+ gem "rails", "~> 4.2.0"
6
+
7
+ group :development, :test do
8
+ gem "sqlite3", platform: [:ruby, :mswin, :mingw]
9
+ gem "activerecord-jdbcsqlite3-adapter", "~> 1.3.13", platform: :jruby
10
+ gem "test-unit", "~> 3.0"
11
+ end
12
+
13
+ gemspec path: "../"
@@ -0,0 +1,13 @@
1
+ # This file was generated by Appraisal
2
+
3
+ source "https://rubygems.org"
4
+
5
+ gem "rails", "~> 5.0.0"
6
+
7
+ group :development, :test do
8
+ gem "sqlite3", platform: [:ruby, :mswin, :mingw]
9
+ gem "activerecord-jdbcsqlite3-adapter", "~> 1.3.13", platform: :jruby
10
+ gem "test-unit", "~> 3.0"
11
+ end
12
+
13
+ gemspec path: "../"
@@ -0,0 +1,13 @@
1
+ # This file was generated by Appraisal
2
+
3
+ source "https://rubygems.org"
4
+
5
+ gem "rails", "~> 5.1.0"
6
+
7
+ group :development, :test do
8
+ gem "sqlite3", platform: [:ruby, :mswin, :mingw]
9
+ gem "activerecord-jdbcsqlite3-adapter", "~> 1.3.13", platform: :jruby
10
+ gem "test-unit", "~> 3.0"
11
+ end
12
+
13
+ gemspec path: "../"
@@ -13,7 +13,7 @@ namespace :perf do
13
13
  puts "Booting: #{Rails.env}"
14
14
 
15
15
  %W{ . lib test config }.each do |file|
16
- $LOAD_PATH << file
16
+ $LOAD_PATH << File.expand_path(file)
17
17
  end
18
18
 
19
19
  require 'application'
@@ -66,6 +66,19 @@ namespace :perf do
66
66
  PATH_TO_HIT = ENV["PATH_TO_HIT"] || ENV['ENDPOINT'] || "/"
67
67
  puts "Endpoint: #{ PATH_TO_HIT.inspect }"
68
68
 
69
+ HTTP_HEADER_PREFIX = "HTTP_".freeze
70
+ RACK_HTTP_HEADERS = ENV.select { |key| key.starts_with?(HTTP_HEADER_PREFIX) }
71
+
72
+ HTTP_HEADERS = RACK_HTTP_HEADERS.keys.inject({}) do |hash, rack_header_name|
73
+ # e.g. "HTTP_ACCEPT_CHARSET" -> "Accept-Charset"
74
+ header_name = rack_header_name[HTTP_HEADER_PREFIX.size..-1].split("_").map(&:downcase).map(&:capitalize).join("-")
75
+ hash[header_name] = RACK_HTTP_HEADERS[rack_header_name]
76
+ hash
77
+ end
78
+ puts "HTTP headers: #{HTTP_HEADERS}" unless HTTP_HEADERS.empty?
79
+
80
+ CURL_HTTP_HEADER_ARGS = HTTP_HEADERS.map { |http_header_name, value| "-H \"#{http_header_name}: #{value}\"" }.join(" ")
81
+
69
82
  require 'rack/test'
70
83
  require 'rack/file'
71
84
 
@@ -80,7 +93,7 @@ namespace :perf do
80
93
  sleep 1
81
94
 
82
95
  def call_app(path = File.join("/", PATH_TO_HIT))
83
- cmd = "curl 'http://localhost:#{@port}#{path}' -s --fail 2>&1"
96
+ cmd = "curl #{CURL_HTTP_HEADER_ARGS} 'http://localhost:#{@port}#{path}' -s --fail 2>&1"
84
97
  response = `#{cmd}`
85
98
  raise "Bad request to #{cmd.inspect} Response:\n#{ response.inspect }" unless $?.success?
86
99
  end
@@ -88,7 +101,7 @@ namespace :perf do
88
101
  @app = Rack::MockRequest.new(DERAILED_APP)
89
102
 
90
103
  def call_app
91
- response = @app.get(PATH_TO_HIT)
104
+ response = @app.get(PATH_TO_HIT, RACK_HTTP_HEADERS)
92
105
  raise "Bad request: #{ response.body }" unless response.status == 200
93
106
  response
94
107
  end
@@ -202,35 +215,6 @@ namespace :perf do
202
215
  GC::Profiler.disable
203
216
  end
204
217
 
205
- task :foo => [:setup] do
206
- require 'objspace'
207
- call_app
208
-
209
- before = Hash.new { 0 }
210
- after = Hash.new { 0 }
211
- after_size = Hash.new { 0 }
212
- GC.start
213
- GC.disable
214
-
215
- TEST_COUNT.times { call_app }
216
-
217
- rvalue_size = GC::INTERNAL_CONSTANTS[:RVALUE_SIZE]
218
- ObjectSpace.each_object do |obj|
219
- after[obj.class] += 1
220
- memsize = ObjectSpace.memsize_of(obj) + rvalue_size
221
- # compensate for API bug
222
- memsize = rvalue_size if memsize > 100_000_000_000
223
- after_size[obj.class] += memsize
224
- end
225
-
226
- require 'pp'
227
- pp after.sort {|(k,v), (k2, v2)| v2 <=> v }
228
- puts "========="
229
- puts
230
- puts
231
- pp after_size.sort {|(k,v), (k2, v2)| v2 <=> v }
232
- end
233
-
234
218
  desc "outputs allocated object diff after app is called TEST_COUNT times"
235
219
  task :allocated_objects => [:setup] do
236
220
  call_app
@@ -1,3 +1,3 @@
1
1
  module DerailedBenchmarks
2
- VERSION = "1.3.2"
2
+ VERSION = "1.3.3"
3
3
  end
@@ -17,7 +17,7 @@ class TasksTest < ActiveSupport::TestCase
17
17
  env_string = env.map {|key, value| "#{key.shellescape}=#{value.to_s.shellescape}" }.join(" ")
18
18
  cmd = "env #{env_string} bundle exec rake -f perf.rake #{cmd} --trace"
19
19
  puts "Running: #{cmd}"
20
- result = `cd #{rails_app_path} && #{cmd}`
20
+ result = `cd '#{rails_app_path}' && #{cmd}`
21
21
  if assert_success
22
22
  assert $?.success?, "Expected '#{cmd}' to return a success status.\nOutput: #{result}"
23
23
  end
@@ -62,6 +62,22 @@ class TasksTest < ActiveSupport::TestCase
62
62
  assert_match 'Server: "webrick"', result
63
63
  end
64
64
 
65
+ test 'HTTP headers' do
66
+ env = {
67
+ "PATH_TO_HIT" => 'foo_secret',
68
+ "TEST_COUNT" => "2",
69
+ "HTTP_AUTHORIZATION" => "Basic #{Base64.encode64("admin:secret")}",
70
+ "HTTP_CACHE_CONTROL" => "no-cache"
71
+ }
72
+ result = rake "perf:test", env: env
73
+ assert_match 'Endpoint: "foo_secret"', result
74
+ assert_match 'HTTP headers: {"Authorization"=>"Basic YWRtaW46c2VjcmV0\n", "Cache-Control"=>"no-cache"}', result
75
+
76
+ env["USE_SERVER"] = "webrick"
77
+ result = rake "perf:test", env: env
78
+ assert_match 'HTTP headers: {"Authorization"=>"Basic YWRtaW46c2VjcmV0\n", "Cache-Control"=>"no-cache"}', result
79
+ end
80
+
65
81
  test 'USE_SERVER' do
66
82
  result = rake "perf:test", env: { "USE_SERVER" => 'webrick', "TEST_COUNT" => "2" }
67
83
  assert_match 'Server: "webrick"', result
@@ -1,6 +1,12 @@
1
1
  class ApplicationController < ActionController::Base
2
+ if respond_to?(:before_filter) && !respond_to?(:before_action)
3
+ class << self
4
+ alias :before_action :before_filter
5
+ end
6
+ end
7
+
2
8
  protect_from_forgery
3
- before_filter :pull_out_locale
9
+ before_action :pull_out_locale
4
10
 
5
11
 
6
12
  def pull_out_locale
@@ -1,10 +1,4 @@
1
1
  class AuthenticatedController < ApplicationController
2
- if respond_to?(:before_filter) && !respond_to?(:before_action)
3
- class << self
4
- alias :before_action :before_filter
5
- end
6
- end
7
-
8
2
  before_action :authenticate_user!
9
3
 
10
4
  def index
@@ -1,7 +1,12 @@
1
1
  class PagesController < ApplicationController
2
+ http_basic_authenticate_with name: "admin", password: "secret", only: :secret
2
3
 
3
4
  def index
4
5
  end
5
6
 
7
+ def secret
8
+ render action: 'index'
9
+ end
10
+
6
11
  private
7
12
  end
@@ -53,6 +53,7 @@ Dummy::Application.routes.draw do
53
53
  root to: "pages#index"
54
54
 
55
55
  get "foo", to: "pages#index"
56
+ get "foo_secret", to: "pages#secret"
56
57
 
57
58
  get "authenticated", to: "authenticated#index"
58
59
 
@@ -1,4 +1,5 @@
1
- class DeviseCreateUsers < ActiveRecord::Migration
1
+ inherited_class = Rails.version < "5" ? ActiveRecord::Migration : ActiveRecord::Migration[4.2]
2
+ class DeviseCreateUsers < inherited_class
2
3
  def change
3
4
  create_table(:users) do |t|
4
5
  ## Database authenticatable
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: derailed_benchmarks
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.3.2
4
+ version: 1.3.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Richard Schneeman
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-01-12 00:00:00.000000000 Z
11
+ date: 2018-03-07 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: heapy
@@ -168,6 +168,20 @@ dependencies:
168
168
  - - "<"
169
169
  - !ruby/object:Gem::Version
170
170
  version: '5'
171
+ - !ruby/object:Gem::Dependency
172
+ name: appraisal
173
+ requirement: !ruby/object:Gem::Requirement
174
+ requirements:
175
+ - - '='
176
+ - !ruby/object:Gem::Version
177
+ version: 2.2.0
178
+ type: :development
179
+ prerelease: false
180
+ version_requirements: !ruby/object:Gem::Requirement
181
+ requirements:
182
+ - - '='
183
+ - !ruby/object:Gem::Version
184
+ version: 2.2.0
171
185
  description: " Go faster, off the Rails "
172
186
  email:
173
187
  - richard.schneeman+rubygems@gmail.com
@@ -178,12 +192,20 @@ extra_rdoc_files: []
178
192
  files:
179
193
  - ".gitignore"
180
194
  - ".travis.yml"
195
+ - Appraisals
181
196
  - CHANGELOG.md
182
197
  - Gemfile
183
198
  - README.md
184
199
  - Rakefile
185
200
  - bin/derailed
186
201
  - derailed_benchmarks.gemspec
202
+ - gemfiles/.bundle/config
203
+ - gemfiles/rails_3_2.gemfile
204
+ - gemfiles/rails_4_0.gemfile
205
+ - gemfiles/rails_4_1.gemfile
206
+ - gemfiles/rails_4_2.gemfile
207
+ - gemfiles/rails_5_0.gemfile
208
+ - gemfiles/rails_5_1.gemfile
187
209
  - lib/derailed_benchmarks.rb
188
210
  - lib/derailed_benchmarks/auth_helper.rb
189
211
  - lib/derailed_benchmarks/auth_helpers/devise.rb
@@ -267,7 +289,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
267
289
  version: '0'
268
290
  requirements: []
269
291
  rubyforge_project:
270
- rubygems_version: 2.6.8
292
+ rubygems_version: 2.7.6
271
293
  signing_key:
272
294
  specification_version: 4
273
295
  summary: Benchmarks designed to performance test your ENTIRE site