blitz 0.1.11 → 0.1.12
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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
|
|