blitz 0.1.11 → 0.1.12
Sign up to get free protection for your applications and to get access to all the features.
- data/Rakefile +1 -1
- data/blitz.gemspec +2 -2
- data/lib/blitz.rb +1 -1
- data/lib/blitz/command/curl.rb +20 -4
- data/lib/blitz/curl/error.rb +4 -0
- data/spec/command/curl_spec.rb +23 -7
- metadata +83 -30
data/Rakefile
CHANGED
data/blitz.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{blitz}
|
8
|
-
s.version = "0.1.
|
8
|
+
s.version = "0.1.12"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["pcapr"]
|
12
|
-
s.date = %q{2011-
|
12
|
+
s.date = %q{2011-10-05}
|
13
13
|
s.default_executable = %q{blitz}
|
14
14
|
s.description = %q{Make load and performance testing a fun sport}
|
15
15
|
s.email = %q{support@blitz.io}
|
data/lib/blitz.rb
CHANGED
data/lib/blitz/command/curl.rb
CHANGED
@@ -30,6 +30,18 @@ class Curl < Command # :nodoc:
|
|
30
30
|
error ""
|
31
31
|
error "#{base_url}/#{e.uuid}"
|
32
32
|
error ""
|
33
|
+
if e.checks
|
34
|
+
error "We tried checking the following URLs and got this"
|
35
|
+
error ""
|
36
|
+
e.checks.each do |check|
|
37
|
+
bytes = ''
|
38
|
+
if check['bytes']
|
39
|
+
bytes = '| ' + check['bytes']
|
40
|
+
end
|
41
|
+
error "#{check['code']} | #{check['url']} #{bytes}"
|
42
|
+
end
|
43
|
+
error ''
|
44
|
+
end
|
33
45
|
error "If your app is RESTfully built with sinatra or rails, simply add this route:"
|
34
46
|
error ""
|
35
47
|
error "get '/#{e.uuid}' do"
|
@@ -109,10 +121,14 @@ class Curl < Command # :nodoc:
|
|
109
121
|
job = ::Blitz::Curl::Rush.queue args
|
110
122
|
border = "+-----------+----------+----------+------------+--------------+--------+----------+\n"
|
111
123
|
msg "rushing from #{job.region}..."
|
112
|
-
|
113
|
-
msg "| time (s) | users | hits/sec | kbytes/sec | latency (ms) | errors | timeouts |\n"
|
114
|
-
msg border
|
124
|
+
header = true
|
115
125
|
job.result do |result|
|
126
|
+
if header
|
127
|
+
header = nil
|
128
|
+
msg border
|
129
|
+
msg "| time (s) | users | hits/sec | kbytes/sec | latency (ms) | errors | timeouts |\n"
|
130
|
+
msg border
|
131
|
+
end
|
116
132
|
print_rush_result result
|
117
133
|
sleep 1.0 if not continue
|
118
134
|
continue
|
@@ -346,7 +362,7 @@ class Curl < Command # :nodoc:
|
|
346
362
|
end
|
347
363
|
|
348
364
|
if [ '-3', '--sslv3' ].member? k
|
349
|
-
hash['ssl'] = '
|
365
|
+
hash['ssl'] = 'sslv3'
|
350
366
|
next
|
351
367
|
end
|
352
368
|
|
data/lib/blitz/curl/error.rb
CHANGED
@@ -18,12 +18,16 @@ class Error < StandardError # :nodoc:
|
|
18
18
|
|
19
19
|
# The unique ID to use a URL path in your app for authorization to succeed
|
20
20
|
attr_reader :uuid
|
21
|
+
|
22
|
+
# The set of checks performed if the app was reachable
|
23
|
+
attr_reader :checks
|
21
24
|
|
22
25
|
def initialize json
|
23
26
|
@scheme = json['scheme']
|
24
27
|
@host = json['host']
|
25
28
|
@port = json['port']
|
26
29
|
@uuid = json['uuid']
|
30
|
+
@checks = json['checks']
|
27
31
|
super
|
28
32
|
end
|
29
33
|
end
|
data/spec/command/curl_spec.rb
CHANGED
@@ -52,14 +52,14 @@ describe "arg parsing" do
|
|
52
52
|
end
|
53
53
|
|
54
54
|
@command_args = [
|
55
|
-
{ :short => '-A', :long => '--user-agent', :params => '"TEST STRING"'
|
55
|
+
{ :short => '-A', :long => '--user-agent', :params => '"TEST STRING"' },
|
56
56
|
{ :short => '-b', :long => '--cookie', :params => 'name=somecookie' },
|
57
57
|
{ :short => '-d', :long => '--data', :params => '"data for post"'},
|
58
|
-
{ :short => '-D', :long => '--dump-header', :params => '"somefile.out"' },
|
59
|
-
{ :short => '-e', :long => '--referer', :params => '"http://google.com"' },
|
58
|
+
{ :short => '-D', :long => '--dump-header', :params => '"somefile.out"' },
|
59
|
+
{ :short => '-e', :long => '--referer', :params => '"http://google.com"' },
|
60
60
|
{ :short => '-H', :long => '--header', :params => 'some_header' },
|
61
|
-
{ :short => '-s', :long => '--status', :params => '500' },
|
62
|
-
{ :short => '-T', :long => '--timeout', :params => '750' },
|
61
|
+
{ :short => '-s', :long => '--status', :params => '500', :return_type => Integer },
|
62
|
+
{ :short => '-T', :long => '--timeout', :params => '750', :return_type => Integer },
|
63
63
|
{ :short => '-u', :long => '--user', :params => 'foo:bar' },
|
64
64
|
{ :short => '-X', :long => '--request', :params => 'GET' },
|
65
65
|
{ :short => '-V', :long => '--verbose' },
|
@@ -78,8 +78,24 @@ describe "arg parsing" do
|
|
78
78
|
it "#{test[flag]} should not raise an error and populate the hash properly" do
|
79
79
|
lambda { curl.__send__ :parse_cli, argv.dup }.should_not raise_error
|
80
80
|
parsed_args = curl.__send__ :parse_cli, argv
|
81
|
-
|
82
|
-
|
81
|
+
# special checks for cookies and headers, as their structure in the return data is different
|
82
|
+
if test_name == 'cookie' || test_name == 'header'
|
83
|
+
return_key = "#{test_name}s"
|
84
|
+
parsed_args[return_key].should be_an(Array)
|
85
|
+
parsed_args[return_key][0].should == test[:params]
|
86
|
+
# special checks for data, as its structure in the return data is different
|
87
|
+
elsif test_name == 'data'
|
88
|
+
parsed_args['content'].should be_a(Hash)
|
89
|
+
parsed_args['content']['data'].should be_an(Array)
|
90
|
+
parsed_args['content']['data'][0].should == test[:params]
|
91
|
+
# special checks for ssl params
|
92
|
+
elsif test_name.match(/^ssl|tls/)
|
93
|
+
parsed_args['ssl'].should == test_name
|
94
|
+
# for integer params, make sure the test returns correct quoting
|
95
|
+
elsif test[:return_type] == Integer
|
96
|
+
parsed_args[test_name].should == test[:params].to_i
|
97
|
+
elsif test[:params].is_a?(String)
|
98
|
+
parsed_args[test_name].should == test[:params]
|
83
99
|
end
|
84
100
|
end
|
85
101
|
end
|
metadata
CHANGED
@@ -1,8 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: blitz
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
+
hash: 3
|
4
5
|
prerelease:
|
5
|
-
|
6
|
+
segments:
|
7
|
+
- 0
|
8
|
+
- 1
|
9
|
+
- 12
|
10
|
+
version: 0.1.12
|
6
11
|
platform: ruby
|
7
12
|
authors:
|
8
13
|
- pcapr
|
@@ -10,107 +15,152 @@ autorequire:
|
|
10
15
|
bindir: bin
|
11
16
|
cert_chain: []
|
12
17
|
|
13
|
-
date: 2011-
|
18
|
+
date: 2011-10-05 00:00:00 -07:00
|
14
19
|
default_executable: blitz
|
15
20
|
dependencies:
|
16
21
|
- !ruby/object:Gem::Dependency
|
17
|
-
|
22
|
+
prerelease: false
|
23
|
+
type: :runtime
|
18
24
|
requirement: &id001 !ruby/object:Gem::Requirement
|
19
25
|
none: false
|
20
26
|
requirements:
|
21
27
|
- - ~>
|
22
28
|
- !ruby/object:Gem::Version
|
29
|
+
hash: 21
|
30
|
+
segments:
|
31
|
+
- 1
|
32
|
+
- 0
|
33
|
+
- 1
|
23
34
|
version: 1.0.1
|
24
|
-
|
25
|
-
prerelease: false
|
35
|
+
name: couchrest
|
26
36
|
version_requirements: *id001
|
27
37
|
- !ruby/object:Gem::Dependency
|
28
|
-
|
38
|
+
prerelease: false
|
39
|
+
type: :runtime
|
29
40
|
requirement: &id002 !ruby/object:Gem::Requirement
|
30
41
|
none: false
|
31
42
|
requirements:
|
32
43
|
- - ~>
|
33
44
|
- !ruby/object:Gem::Version
|
45
|
+
hash: 13
|
46
|
+
segments:
|
47
|
+
- 1
|
48
|
+
- 6
|
49
|
+
- 1
|
34
50
|
version: 1.6.1
|
35
|
-
|
36
|
-
prerelease: false
|
51
|
+
name: rest-client
|
37
52
|
version_requirements: *id002
|
38
53
|
- !ruby/object:Gem::Dependency
|
39
|
-
|
54
|
+
prerelease: false
|
55
|
+
type: :runtime
|
40
56
|
requirement: &id003 !ruby/object:Gem::Requirement
|
41
57
|
none: false
|
42
58
|
requirements:
|
43
59
|
- - ~>
|
44
60
|
- !ruby/object:Gem::Version
|
61
|
+
hash: 1
|
62
|
+
segments:
|
63
|
+
- 1
|
64
|
+
- 5
|
65
|
+
- 1
|
45
66
|
version: 1.5.1
|
46
|
-
|
47
|
-
prerelease: false
|
67
|
+
name: json
|
48
68
|
version_requirements: *id003
|
49
69
|
- !ruby/object:Gem::Dependency
|
50
|
-
|
70
|
+
prerelease: false
|
71
|
+
type: :runtime
|
51
72
|
requirement: &id004 !ruby/object:Gem::Requirement
|
52
73
|
none: false
|
53
74
|
requirements:
|
54
75
|
- - ~>
|
55
76
|
- !ruby/object:Gem::Version
|
77
|
+
hash: 1
|
78
|
+
segments:
|
79
|
+
- 1
|
80
|
+
- 5
|
81
|
+
- 1
|
56
82
|
version: 1.5.1
|
57
|
-
|
58
|
-
prerelease: false
|
83
|
+
name: json_pure
|
59
84
|
version_requirements: *id004
|
60
85
|
- !ruby/object:Gem::Dependency
|
61
|
-
|
86
|
+
prerelease: false
|
87
|
+
type: :runtime
|
62
88
|
requirement: &id005 !ruby/object:Gem::Requirement
|
63
89
|
none: false
|
64
90
|
requirements:
|
65
91
|
- - ~>
|
66
92
|
- !ruby/object:Gem::Version
|
93
|
+
hash: 25
|
94
|
+
segments:
|
95
|
+
- 0
|
96
|
+
- 1
|
97
|
+
- 1
|
67
98
|
version: 0.1.1
|
68
|
-
|
69
|
-
prerelease: false
|
99
|
+
name: hexy
|
70
100
|
version_requirements: *id005
|
71
101
|
- !ruby/object:Gem::Dependency
|
72
|
-
|
102
|
+
prerelease: false
|
103
|
+
type: :runtime
|
73
104
|
requirement: &id006 !ruby/object:Gem::Requirement
|
74
105
|
none: false
|
75
106
|
requirements:
|
76
107
|
- - "="
|
77
108
|
- !ruby/object:Gem::Version
|
109
|
+
hash: 23
|
110
|
+
segments:
|
111
|
+
- 2
|
112
|
+
- 6
|
113
|
+
- 0
|
78
114
|
version: 2.6.0
|
79
|
-
|
80
|
-
prerelease: false
|
115
|
+
name: rspec
|
81
116
|
version_requirements: *id006
|
82
117
|
- !ruby/object:Gem::Dependency
|
83
|
-
|
118
|
+
prerelease: false
|
119
|
+
type: :runtime
|
84
120
|
requirement: &id007 !ruby/object:Gem::Requirement
|
85
121
|
none: false
|
86
122
|
requirements:
|
87
123
|
- - "="
|
88
124
|
- !ruby/object:Gem::Version
|
125
|
+
hash: 31
|
126
|
+
segments:
|
127
|
+
- 2
|
128
|
+
- 6
|
129
|
+
- 4
|
89
130
|
version: 2.6.4
|
90
|
-
|
91
|
-
prerelease: false
|
131
|
+
name: rspec-core
|
92
132
|
version_requirements: *id007
|
93
133
|
- !ruby/object:Gem::Dependency
|
94
|
-
|
134
|
+
prerelease: false
|
135
|
+
type: :development
|
95
136
|
requirement: &id008 !ruby/object:Gem::Requirement
|
96
137
|
none: false
|
97
138
|
requirements:
|
98
139
|
- - ~>
|
99
140
|
- !ruby/object:Gem::Version
|
141
|
+
hash: 23
|
142
|
+
segments:
|
143
|
+
- 1
|
144
|
+
- 0
|
145
|
+
- 0
|
100
146
|
version: 1.0.0
|
101
|
-
|
102
|
-
prerelease: false
|
147
|
+
name: bundler
|
103
148
|
version_requirements: *id008
|
104
149
|
- !ruby/object:Gem::Dependency
|
105
|
-
|
150
|
+
prerelease: false
|
151
|
+
type: :development
|
106
152
|
requirement: &id009 !ruby/object:Gem::Requirement
|
107
153
|
none: false
|
108
154
|
requirements:
|
109
155
|
- - ~>
|
110
156
|
- !ruby/object:Gem::Version
|
157
|
+
hash: 1
|
158
|
+
segments:
|
159
|
+
- 1
|
160
|
+
- 5
|
161
|
+
- 1
|
111
162
|
version: 1.5.1
|
112
|
-
|
113
|
-
prerelease: false
|
163
|
+
name: jeweler
|
114
164
|
version_requirements: *id009
|
115
165
|
description: Make load and performance testing a fun sport
|
116
166
|
email: support@blitz.io
|
@@ -158,7 +208,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
158
208
|
requirements:
|
159
209
|
- - ">="
|
160
210
|
- !ruby/object:Gem::Version
|
161
|
-
hash:
|
211
|
+
hash: 3
|
162
212
|
segments:
|
163
213
|
- 0
|
164
214
|
version: "0"
|
@@ -167,6 +217,9 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
167
217
|
requirements:
|
168
218
|
- - ">="
|
169
219
|
- !ruby/object:Gem::Version
|
220
|
+
hash: 3
|
221
|
+
segments:
|
222
|
+
- 0
|
170
223
|
version: "0"
|
171
224
|
requirements: []
|
172
225
|
|