blitz 0.1.21 → 0.1.22

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/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.21"
8
+ s.version = "0.1.22"
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{2012-02-07}
12
+ s.date = %q{2012-02-17}
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
@@ -6,7 +6,7 @@ require 'pp'
6
6
 
7
7
  class Blitz # :nodoc:
8
8
  require 'blitz/helper'
9
- Version = "0.1.21"
9
+ Version = "0.1.22"
10
10
 
11
11
  extend Blitz::Helper
12
12
 
@@ -78,6 +78,35 @@ class Curl < Command # :nodoc:
78
78
  rtt = ("%.2f" % rtt) + ' sec';
79
79
  end
80
80
  end
81
+
82
+ def print_sprint_content content
83
+ if not content.empty?
84
+ if /^[[:print:]]+$/ =~ content
85
+ puts content
86
+ else
87
+ puts Hexy.new(content).to_s
88
+ end
89
+ puts
90
+ end
91
+ end
92
+
93
+ def print_sprint_header obj, path, symbol, mode
94
+ if path == "-"
95
+ puts symbol + obj.line
96
+ obj.headers.each_pair { |k, v| puts "#{symbol}#{k}: #{v}\r\n" }
97
+ puts
98
+ else
99
+ begin
100
+ File.open(path, mode) do |myfile|
101
+ myfile.puts ""
102
+ myfile.puts obj.line
103
+ obj.headers.each_pair { |k, v| myfile.puts("#{k}: #{v}") }
104
+ end
105
+ rescue Exception => e
106
+ msg "#{red(e.message)}"
107
+ end
108
+ end
109
+ end
81
110
 
82
111
  def print_sprint_result args, result
83
112
  if result.respond_to? :duration
@@ -88,34 +117,21 @@ class Curl < Command # :nodoc:
88
117
 
89
118
  result.steps.each do |step|
90
119
  req, res = step.request, step.response
91
- if args['dump-header'] or args['verbose']
92
- puts "> " + req.line
93
- req.headers.each_pair { |k, v| puts "> #{k}: #{v}\r\n" }
94
- puts
95
-
96
- content = req.content
97
- if not content.empty?
98
- if /^[[:print:]]+$/ =~ content
99
- puts content
100
- else
101
- puts Hexy.new(content).to_s
102
- end
103
- puts
104
- end
105
-
120
+ dump_header = args['dump-header']
121
+ verbose = args['verbose']
122
+ if dump_header and verbose
123
+ print_sprint_header req, dump_header, "> ", 'w'
124
+ print_sprint_content req.content
106
125
  if res
107
- puts "< " + res.line
108
- res.headers.each_pair { |k, v| puts "< #{k}: #{v}\r\n" }
109
- puts
110
- content = res.content
111
- if not content.empty?
112
- if /^[[:print:]]+$/ =~ content
113
- puts content
114
- else
115
- puts Hexy.new(content).to_s
116
- end
117
- end
126
+ print_sprint_header res, dump_header, "< ", 'a'
127
+ print_sprint_content res.content
118
128
  end
129
+ elsif dump_header.nil? and verbose
130
+ print_sprint_content req.content
131
+ print_sprint_content res.content if res
132
+ elsif dump_header and verbose.nil?
133
+ print_sprint_header req, dump_header, "> ", 'w'
134
+ print_sprint_header res, dump_header, "< ", 'a' if res
119
135
  else
120
136
  puts "> " + req.method + ' ' + req.url
121
137
  if res
data/lib/blitz/curl.rb CHANGED
@@ -71,7 +71,7 @@ class Curl
71
71
  end
72
72
 
73
73
  if [ '-D', '--dump-header' ].member? k
74
- hash['dump-header'] = shift(k, argv)
74
+ hash['dump-header'] = argv[0]=="-" ? argv.shift : shift(k, argv)
75
75
  next
76
76
  end
77
77
 
data/lib/blitz/utils.rb CHANGED
@@ -27,7 +27,6 @@ end
27
27
  class Blitz
28
28
  module Utils
29
29
  include Test::Unit::Assertions
30
-
31
30
  def shift key, argv
32
31
  val = argv.shift
33
32
  assert_not_nil(val, "missing value for #{key}")
@@ -1,4 +1,140 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe Blitz::Command::Curl do
4
+
5
+ let(:sprint_data) {
6
+ {
7
+ 'line'=>"GET / HTTP/1.1",
8
+ 'method'=>"GET",
9
+ 'url'=>"www.example.com",
10
+ 'content'=>"",
11
+ 'status'=>200,
12
+ 'message'=>"OK",
13
+ 'headers'=> {
14
+ "User-Agent"=>"blitz.io; 5f691b@11.22.33.250",
15
+ "Host"=>"blitz.io",
16
+ "X-Powered-By"=>"blitz.io",
17
+ "X-User-ID"=>"5f6938a60e",
18
+ "X-User-IP"=>"44.55.66.250"
19
+ }
20
+ }
21
+ }
22
+
23
+ def mocked_sprint_request
24
+ Blitz::Curl::Sprint::Request.new(sprint_data)
25
+ end
26
+
27
+ def mocked_sprint_args
28
+ {
29
+ "steps"=>[{"url"=>"http://blitz.io"}],
30
+ "region"=>"california",
31
+ "dump-header"=>"/mocked/path/head.txt",
32
+ "verbose"=>true
33
+ }
34
+ end
35
+
36
+ def mocked_sprint
37
+ sprint = {
38
+ 'result' => {
39
+ 'region'=>"california",
40
+ 'duration'=> 0.39443,
41
+ 'steps'=>[
42
+ 'connect'=>0.117957,
43
+ 'duration'=>0.394431,
44
+ 'request' => sprint_data,
45
+ 'response' => sprint_data
46
+ ]
47
+ }
48
+ }
49
+ Blitz::Curl::Sprint::Result.new(sprint)
50
+ end
51
+
52
+ context "#print_sprint_header" do
53
+ def check_print_sprint_header path="/mocked/path/head.txt"
54
+ myfile = StringIO.new
55
+ request = mocked_sprint_request
56
+ symbol = "> "
57
+ mode = 'w'
58
+ obj = Blitz::Command::Curl.new
59
+ yield(obj, path, mode)
60
+ obj.send(:print_sprint_header, request, path, symbol, mode)
61
+ end
62
+ it "should prints header to console when path is '-'" do
63
+ check_print_sprint_header("-") {|obj, path, mode|
64
+ obj.should_receive(:puts).with("> GET / HTTP/1.1")
65
+ obj.should_receive(:puts).with("> User-Agent: blitz.io; 5f691b@11.22.33.250\r\n")
66
+ obj.should_receive(:puts).with("> Host: blitz.io\r\n")
67
+ obj.should_receive(:puts).with("> X-Powered-By: blitz.io\r\n")
68
+ obj.should_receive(:puts).with("> X-User-ID: 5f6938a60e\r\n")
69
+ obj.should_receive(:puts).with("> X-User-IP: 44.55.66.250\r\n")
70
+ obj.should_receive(:puts).with()
71
+ }
72
+ end
73
+ it "should warn user if it can not open the file" do
74
+ check_print_sprint_header() {|obj, path, mode|
75
+ File.should_receive(:open).with(path, mode).and_raise("No such file or directory - #{path}")
76
+ obj.should_receive(:puts).with("\e[31mNo such file or directory - #{path}\e[0m")
77
+ }
78
+ end
79
+ it "should print request headers to file" do
80
+ check_print_sprint_header() {|obj, path, mode|
81
+ file = mock('file')
82
+ File.should_receive(:open).with(path, mode).and_yield(file)
83
+ file.should_receive(:puts).with("")
84
+ file.should_receive(:puts).with("GET / HTTP/1.1")
85
+ file.should_receive(:puts).with("User-Agent: blitz.io; 5f691b@11.22.33.250")
86
+ file.should_receive(:puts).with("Host: blitz.io")
87
+ file.should_receive(:puts).with("X-Powered-By: blitz.io")
88
+ file.should_receive(:puts).with("X-User-ID: 5f6938a60e")
89
+ file.should_receive(:puts).with("X-User-IP: 44.55.66.250")
90
+ }
91
+ end
92
+ end
93
+
94
+ context "#print_sprint_result" do
95
+ def check_print_sprint_result args
96
+ result = mocked_sprint
97
+ obj = Blitz::Command::Curl.new
98
+ yield(obj, result)
99
+ obj.send(:print_sprint_result, args, result)
100
+ end
101
+ it "should not dump-header and verbose when they are not available" do
102
+ args = mocked_sprint_args
103
+ args.delete "verbose"
104
+ args.delete "dump-header"
105
+ check_print_sprint_result(args){|obj, result|
106
+ obj.should_receive(:puts).with("Transaction time \e[32m394 ms\e[0m")
107
+ obj.should_receive(:puts).with()
108
+ obj.should_receive(:puts).with("> GET www.example.com")
109
+ obj.should_receive(:puts).with("< 200 OK in \e[32m394 ms\e[0m")
110
+ obj.should_receive(:puts).with()
111
+ }
112
+ end
113
+ it "should dump-header and verbose when both are available" do
114
+ check_print_sprint_result(mocked_sprint_args){|obj, result|
115
+ obj.should_receive(:print_sprint_header).twice.and_return(true)
116
+ obj.should_receive(:print_sprint_content).twice.and_return(true)
117
+ result.should_receive(:respond_to?).with(:duration).and_return(false)
118
+ }
119
+ end
120
+ it "should only do verbose when dump-header is not available" do
121
+ args = mocked_sprint_args
122
+ args.delete "dump-header"
123
+ check_print_sprint_result(args){|obj, result|
124
+ obj.should_not_receive(:print_sprint_header)
125
+ obj.should_receive(:print_sprint_content).twice.and_return(true)
126
+ result.should_receive(:respond_to?).with(:duration).and_return(false)
127
+ }
128
+ end
129
+ it "should only do dump-header when verbose is not available" do
130
+ args = mocked_sprint_args
131
+ args.delete "verbose"
132
+ check_print_sprint_result(args){|obj, result|
133
+ obj.should_receive(:print_sprint_header).twice.and_return(true)
134
+ obj.should_not_receive(:print_sprint_content)
135
+ result.should_receive(:respond_to?).with(:duration).and_return(false)
136
+ }
137
+ end
138
+ end
139
+
4
140
  end
data/spec/spec_helper.rb CHANGED
@@ -10,4 +10,5 @@ end
10
10
  require 'rspec/core'
11
11
  require 'blitz'
12
12
  require 'rake'
13
- require 'blitz/command/curl'
13
+ require 'blitz/command/curl'
14
+ require 'stringio'
metadata CHANGED
@@ -2,7 +2,7 @@
2
2
  name: blitz
3
3
  version: !ruby/object:Gem::Version
4
4
  prerelease:
5
- version: 0.1.21
5
+ version: 0.1.22
6
6
  platform: ruby
7
7
  authors:
8
8
  - pcapr
@@ -10,7 +10,7 @@ autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
12
 
13
- date: 2012-02-07 00:00:00 -08:00
13
+ date: 2012-02-17 00:00:00 -08:00
14
14
  default_executable: blitz
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
@@ -171,7 +171,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
171
171
  requirements:
172
172
  - - ">="
173
173
  - !ruby/object:Gem::Version
174
- hash: 824321089
174
+ hash: -600337631
175
175
  segments:
176
176
  - 0
177
177
  version: "0"