ronin-support 0.1.0.pre1
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/.document +4 -0
- data/.rspec +1 -0
- data/.yardopts +1 -0
- data/COPYING.txt +504 -0
- data/ChangeLog.md +4 -0
- data/Gemfile +23 -0
- data/README.md +98 -0
- data/Rakefile +29 -0
- data/gemspec.yml +20 -0
- data/lib/ronin/extensions.rb +28 -0
- data/lib/ronin/extensions/file.rb +63 -0
- data/lib/ronin/extensions/ip_addr.rb +220 -0
- data/lib/ronin/extensions/kernel.rb +45 -0
- data/lib/ronin/extensions/meta.rb +22 -0
- data/lib/ronin/extensions/meta/object.rb +24 -0
- data/lib/ronin/extensions/string.rb +200 -0
- data/lib/ronin/formatting.rb +26 -0
- data/lib/ronin/formatting/binary.rb +22 -0
- data/lib/ronin/formatting/digest.rb +22 -0
- data/lib/ronin/formatting/extensions.rb +25 -0
- data/lib/ronin/formatting/extensions/binary.rb +24 -0
- data/lib/ronin/formatting/extensions/binary/file.rb +35 -0
- data/lib/ronin/formatting/extensions/binary/integer.rb +147 -0
- data/lib/ronin/formatting/extensions/binary/string.rb +363 -0
- data/lib/ronin/formatting/extensions/digest.rb +23 -0
- data/lib/ronin/formatting/extensions/digest/file.rb +117 -0
- data/lib/ronin/formatting/extensions/digest/string.rb +80 -0
- data/lib/ronin/formatting/extensions/http.rb +23 -0
- data/lib/ronin/formatting/extensions/http/integer.rb +57 -0
- data/lib/ronin/formatting/extensions/http/string.rb +102 -0
- data/lib/ronin/formatting/extensions/text.rb +23 -0
- data/lib/ronin/formatting/extensions/text/array.rb +125 -0
- data/lib/ronin/formatting/extensions/text/string.rb +206 -0
- data/lib/ronin/formatting/http.rb +22 -0
- data/lib/ronin/formatting/text.rb +22 -0
- data/lib/ronin/network.rb +29 -0
- data/lib/ronin/network/esmtp.rb +22 -0
- data/lib/ronin/network/extensions.rb +29 -0
- data/lib/ronin/network/extensions/esmtp.rb +22 -0
- data/lib/ronin/network/extensions/esmtp/net.rb +100 -0
- data/lib/ronin/network/extensions/http.rb +22 -0
- data/lib/ronin/network/extensions/http/net.rb +661 -0
- data/lib/ronin/network/extensions/imap.rb +22 -0
- data/lib/ronin/network/extensions/imap/net.rb +124 -0
- data/lib/ronin/network/extensions/pop3.rb +22 -0
- data/lib/ronin/network/extensions/pop3/net.rb +92 -0
- data/lib/ronin/network/extensions/smtp.rb +22 -0
- data/lib/ronin/network/extensions/smtp/net.rb +110 -0
- data/lib/ronin/network/extensions/ssl.rb +22 -0
- data/lib/ronin/network/extensions/ssl/net.rb +147 -0
- data/lib/ronin/network/extensions/tcp.rb +22 -0
- data/lib/ronin/network/extensions/tcp/net.rb +304 -0
- data/lib/ronin/network/extensions/telnet.rb +22 -0
- data/lib/ronin/network/extensions/telnet/net.rb +156 -0
- data/lib/ronin/network/extensions/udp.rb +22 -0
- data/lib/ronin/network/extensions/udp/net.rb +226 -0
- data/lib/ronin/network/http.rb +24 -0
- data/lib/ronin/network/http/exceptions.rb +22 -0
- data/lib/ronin/network/http/exceptions/unknown_request.rb +29 -0
- data/lib/ronin/network/http/http.rb +290 -0
- data/lib/ronin/network/http/proxy.rb +307 -0
- data/lib/ronin/network/imap.rb +49 -0
- data/lib/ronin/network/network.rb +41 -0
- data/lib/ronin/network/pop3.rb +49 -0
- data/lib/ronin/network/smtp.rb +24 -0
- data/lib/ronin/network/smtp/email.rb +143 -0
- data/lib/ronin/network/smtp/smtp.rb +68 -0
- data/lib/ronin/network/ssl.rb +47 -0
- data/lib/ronin/network/tcp.rb +22 -0
- data/lib/ronin/network/telnet.rb +109 -0
- data/lib/ronin/network/udp.rb +22 -0
- data/lib/ronin/path.rb +132 -0
- data/lib/ronin/support.rb +28 -0
- data/lib/ronin/support/inflector.rb +40 -0
- data/lib/ronin/support/version.rb +27 -0
- data/lib/ronin/templates.rb +23 -0
- data/lib/ronin/templates/erb.rb +75 -0
- data/lib/ronin/templates/template.rb +161 -0
- data/ronin-support.gemspec +10 -0
- data/spec/extensions/file_spec.rb +24 -0
- data/spec/extensions/ip_addr_spec.rb +171 -0
- data/spec/extensions/kernel_spec.rb +30 -0
- data/spec/extensions/string_spec.rb +177 -0
- data/spec/formatting/binary/helpers/hexdumps.rb +16 -0
- data/spec/formatting/binary/helpers/hexdumps/ascii.bin +0 -0
- data/spec/formatting/binary/helpers/hexdumps/hexdump_decimal_shorts.txt +17 -0
- data/spec/formatting/binary/helpers/hexdumps/hexdump_hex_bytes.txt +17 -0
- data/spec/formatting/binary/helpers/hexdumps/hexdump_hex_shorts.txt +17 -0
- data/spec/formatting/binary/helpers/hexdumps/hexdump_octal_bytes.txt +17 -0
- data/spec/formatting/binary/helpers/hexdumps/hexdump_octal_shorts.txt +17 -0
- data/spec/formatting/binary/helpers/hexdumps/hexdump_repeated.txt +6 -0
- data/spec/formatting/binary/helpers/hexdumps/od_decimal_bytes.txt +17 -0
- data/spec/formatting/binary/helpers/hexdumps/od_decimal_ints.txt +17 -0
- data/spec/formatting/binary/helpers/hexdumps/od_decimal_quads.txt +17 -0
- data/spec/formatting/binary/helpers/hexdumps/od_decimal_shorts.txt +17 -0
- data/spec/formatting/binary/helpers/hexdumps/od_hex_bytes.txt +17 -0
- data/spec/formatting/binary/helpers/hexdumps/od_hex_ints.txt +17 -0
- data/spec/formatting/binary/helpers/hexdumps/od_hex_quads.txt +17 -0
- data/spec/formatting/binary/helpers/hexdumps/od_hex_shorts.txt +17 -0
- data/spec/formatting/binary/helpers/hexdumps/od_octal_bytes.txt +17 -0
- data/spec/formatting/binary/helpers/hexdumps/od_octal_ints.txt +17 -0
- data/spec/formatting/binary/helpers/hexdumps/od_octal_quads.txt +17 -0
- data/spec/formatting/binary/helpers/hexdumps/od_octal_shorts.txt +17 -0
- data/spec/formatting/binary/helpers/hexdumps/od_repeated.txt +6 -0
- data/spec/formatting/binary/helpers/hexdumps/repeated.bin +1 -0
- data/spec/formatting/binary/integer_spec.rb +140 -0
- data/spec/formatting/binary/string_spec.rb +306 -0
- data/spec/formatting/digest/string_spec.rb +82 -0
- data/spec/formatting/http/integer_spec.rb +42 -0
- data/spec/formatting/http/string_spec.rb +76 -0
- data/spec/formatting/text/array_spec.rb +105 -0
- data/spec/formatting/text/string_spec.rb +180 -0
- data/spec/network/http/http_spec.rb +280 -0
- data/spec/network/http/proxy_spec.rb +150 -0
- data/spec/network/network_spec.rb +8 -0
- data/spec/network/ssl_spec.rb +14 -0
- data/spec/path_spec.rb +84 -0
- data/spec/spec_helper.rb +4 -0
- data/spec/support_spec.rb +8 -0
- data/spec/templates/classes/example_erb.rb +11 -0
- data/spec/templates/classes/example_template.rb +35 -0
- data/spec/templates/erb_spec.rb +21 -0
- data/spec/templates/helpers/data.rb +9 -0
- data/spec/templates/helpers/data/includes/_relative.erb +1 -0
- data/spec/templates/helpers/data/templates/example.erb +1 -0
- data/spec/templates/template_spec.rb +54 -0
- metadata +286 -0
|
@@ -0,0 +1,280 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
require 'ronin/network/http'
|
|
3
|
+
|
|
4
|
+
describe Network::HTTP do
|
|
5
|
+
describe "proxy" do
|
|
6
|
+
it "should be disabled by default" do
|
|
7
|
+
subject.proxy.should_not be_enabled
|
|
8
|
+
end
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
describe "expand_url" do
|
|
12
|
+
let(:url) { URI('http://example.com:443/path?q=1') }
|
|
13
|
+
|
|
14
|
+
it "should accept URI objects" do
|
|
15
|
+
options = subject.expand_url(url)
|
|
16
|
+
|
|
17
|
+
options[:host].should == url.host
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
it "should accept Hashes" do
|
|
21
|
+
hash = {
|
|
22
|
+
:host => url.host,
|
|
23
|
+
:port => url.port,
|
|
24
|
+
}
|
|
25
|
+
options = subject.expand_url(hash)
|
|
26
|
+
|
|
27
|
+
options[:host].should == url.host
|
|
28
|
+
options[:port].should == url.port
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
it "should accept Strings" do
|
|
32
|
+
options = subject.expand_url(url.to_s)
|
|
33
|
+
|
|
34
|
+
options[:host].should == url.host
|
|
35
|
+
options[:port].should == url.port
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
it "should accept nil" do
|
|
39
|
+
options = subject.expand_url(nil)
|
|
40
|
+
|
|
41
|
+
options[:port].should == Net::HTTP.default_port
|
|
42
|
+
options[:path].should == '/'
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
it "should default :path to '/'" do
|
|
46
|
+
options = subject.expand_url(URI('http://example.com'))
|
|
47
|
+
|
|
48
|
+
options[:path].should == '/'
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
it "should append the query-string to the :path options" do
|
|
52
|
+
options = subject.expand_url(url)
|
|
53
|
+
|
|
54
|
+
options[:path].should == "#{url.path}?#{url.query}"
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
it "should set :ssl if the URI scheme is 'https'" do
|
|
58
|
+
options = subject.expand_url(URI('https://example.com'))
|
|
59
|
+
|
|
60
|
+
options[:ssl].should == {}
|
|
61
|
+
end
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
describe "expand_options" do
|
|
65
|
+
it "should expand the :ssl option into a Hash" do
|
|
66
|
+
options = {:ssl => true}
|
|
67
|
+
expanded_options = subject.expand_options(options)
|
|
68
|
+
|
|
69
|
+
expanded_options[:ssl].should == {}
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
it "should added a default port and path" do
|
|
73
|
+
options = {:host => 'example.com'}
|
|
74
|
+
expanded_options = subject.expand_options(options)
|
|
75
|
+
|
|
76
|
+
expanded_options[:port].should == 80
|
|
77
|
+
expanded_options[:path].should == '/'
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
it "should add the default proxy settings" do
|
|
81
|
+
options = {:host => 'example.com'}
|
|
82
|
+
expanded_options = subject.expand_options(options)
|
|
83
|
+
|
|
84
|
+
expanded_options[:proxy].should == subject.proxy
|
|
85
|
+
end
|
|
86
|
+
|
|
87
|
+
it "should disable the proxy settings if :proxy is nil" do
|
|
88
|
+
options = {:host => 'example.com', :proxy => nil}
|
|
89
|
+
expanded_options = subject.expand_options(options)
|
|
90
|
+
|
|
91
|
+
expanded_options[:proxy][:host].should be_nil
|
|
92
|
+
expanded_options[:proxy][:port].should be_nil
|
|
93
|
+
end
|
|
94
|
+
|
|
95
|
+
it "should not modify :proxy if it is a HTTP::Proxy object" do
|
|
96
|
+
proxy = Network::HTTP::Proxy.new(:host => 'proxy.com', :port => 8181)
|
|
97
|
+
options = {:host => 'example.com', :proxy => proxy}
|
|
98
|
+
expanded_options = subject.expand_options(options)
|
|
99
|
+
|
|
100
|
+
expanded_options[:proxy].should == proxy
|
|
101
|
+
end
|
|
102
|
+
|
|
103
|
+
it "should parse the :proxy option" do
|
|
104
|
+
options = {:host => 'example.com', :proxy => 'http://proxy.com:8181'}
|
|
105
|
+
expanded_options = subject.expand_options(options)
|
|
106
|
+
|
|
107
|
+
expanded_options[:proxy][:host].should == 'proxy.com'
|
|
108
|
+
expanded_options[:proxy][:port].should == 8181
|
|
109
|
+
end
|
|
110
|
+
|
|
111
|
+
it "should expand the :url option" do
|
|
112
|
+
options = {:url => 'http://joe:secret@example.com:8080/bla?var'}
|
|
113
|
+
expanded_options = subject.expand_options(options)
|
|
114
|
+
|
|
115
|
+
expanded_options[:url].should be_nil
|
|
116
|
+
expanded_options[:host].should == 'example.com'
|
|
117
|
+
expanded_options[:port].should == 8080
|
|
118
|
+
expanded_options[:user].should == 'joe'
|
|
119
|
+
expanded_options[:password].should == 'secret'
|
|
120
|
+
expanded_options[:path].should == '/bla?var'
|
|
121
|
+
end
|
|
122
|
+
|
|
123
|
+
end
|
|
124
|
+
|
|
125
|
+
describe "headers" do
|
|
126
|
+
it "should convert Symbol options to HTTP Headers" do
|
|
127
|
+
options = {:user_agent => 'bla', :location => 'test'}
|
|
128
|
+
|
|
129
|
+
subject.headers(options).should == {
|
|
130
|
+
'User-Agent' => 'bla',
|
|
131
|
+
'Location' => 'test'
|
|
132
|
+
}
|
|
133
|
+
end
|
|
134
|
+
|
|
135
|
+
it "should convert String options to HTTP Headers" do
|
|
136
|
+
options = {'user_agent' => 'bla', 'x-powered-by' => 'PHP'}
|
|
137
|
+
|
|
138
|
+
subject.headers(options).should == {
|
|
139
|
+
'User-Agent' => 'bla',
|
|
140
|
+
'X-Powered-By' => 'PHP'
|
|
141
|
+
}
|
|
142
|
+
end
|
|
143
|
+
|
|
144
|
+
it "should convert all values to Strings" do
|
|
145
|
+
mtime = Time.now.to_i
|
|
146
|
+
options = {:modified_by => mtime, :x_accept => :gzip}
|
|
147
|
+
|
|
148
|
+
subject.headers(options).should == {
|
|
149
|
+
'Modified-By' => mtime.to_s,
|
|
150
|
+
'X-Accept' => 'gzip'
|
|
151
|
+
}
|
|
152
|
+
end
|
|
153
|
+
end
|
|
154
|
+
|
|
155
|
+
describe "request" do
|
|
156
|
+
it "should handle Symbol names" do
|
|
157
|
+
subject.request(
|
|
158
|
+
:method => :get, :path => '/'
|
|
159
|
+
).class.should == Net::HTTP::Get
|
|
160
|
+
end
|
|
161
|
+
|
|
162
|
+
it "should handle String names" do
|
|
163
|
+
subject.request(
|
|
164
|
+
:method => 'GET', :path => '/'
|
|
165
|
+
).class.should == Net::HTTP::Get
|
|
166
|
+
end
|
|
167
|
+
|
|
168
|
+
it "should raise an UnknownRequest exception for invalid names" do
|
|
169
|
+
lambda {
|
|
170
|
+
subject.request(:method => :bla)
|
|
171
|
+
}.should raise_error(subject::UnknownRequest)
|
|
172
|
+
end
|
|
173
|
+
|
|
174
|
+
it "should use a default path" do
|
|
175
|
+
lambda {
|
|
176
|
+
subject.request(:method => :get)
|
|
177
|
+
}.should_not raise_error(ArgumentError)
|
|
178
|
+
end
|
|
179
|
+
|
|
180
|
+
it "should accept the :user option for Basic-Auth" do
|
|
181
|
+
req = subject.request(:method => :get, :user => 'joe')
|
|
182
|
+
|
|
183
|
+
req['authorization'].should == "Basic am9lOg=="
|
|
184
|
+
end
|
|
185
|
+
|
|
186
|
+
it "should accept the :user and :password options for Basic-Auth" do
|
|
187
|
+
req = subject.request(
|
|
188
|
+
:method => :get,
|
|
189
|
+
:user => 'joe',
|
|
190
|
+
:password => 'secret'
|
|
191
|
+
)
|
|
192
|
+
|
|
193
|
+
req['authorization'].should == "Basic am9lOnNlY3JldA=="
|
|
194
|
+
end
|
|
195
|
+
|
|
196
|
+
it "should create HTTP Copy requests" do
|
|
197
|
+
req = subject.request(:method => :copy)
|
|
198
|
+
|
|
199
|
+
req.class.should == Net::HTTP::Copy
|
|
200
|
+
end
|
|
201
|
+
|
|
202
|
+
it "should create HTTP Delete requests" do
|
|
203
|
+
req = subject.request(:method => :delete)
|
|
204
|
+
|
|
205
|
+
req.class.should == Net::HTTP::Delete
|
|
206
|
+
end
|
|
207
|
+
|
|
208
|
+
it "should create HTTP Get requests" do
|
|
209
|
+
req = subject.request(:method => :get)
|
|
210
|
+
|
|
211
|
+
req.class.should == Net::HTTP::Get
|
|
212
|
+
end
|
|
213
|
+
|
|
214
|
+
it "should create HTTP Head requests" do
|
|
215
|
+
req = subject.request(:method => :head)
|
|
216
|
+
|
|
217
|
+
req.class.should == Net::HTTP::Head
|
|
218
|
+
end
|
|
219
|
+
|
|
220
|
+
it "should create HTTP Lock requests" do
|
|
221
|
+
req = subject.request(:method => :lock)
|
|
222
|
+
|
|
223
|
+
req.class.should == Net::HTTP::Lock
|
|
224
|
+
end
|
|
225
|
+
|
|
226
|
+
it "should create HTTP Mkcol requests" do
|
|
227
|
+
req = subject.request(:method => :mkcol)
|
|
228
|
+
|
|
229
|
+
req.class.should == Net::HTTP::Mkcol
|
|
230
|
+
end
|
|
231
|
+
|
|
232
|
+
it "should create HTTP Move requests" do
|
|
233
|
+
req = subject.request(:method => :move)
|
|
234
|
+
|
|
235
|
+
req.class.should == Net::HTTP::Move
|
|
236
|
+
end
|
|
237
|
+
|
|
238
|
+
it "should create HTTP Options requests" do
|
|
239
|
+
req = subject.request(:method => :options)
|
|
240
|
+
|
|
241
|
+
req.class.should == Net::HTTP::Options
|
|
242
|
+
end
|
|
243
|
+
|
|
244
|
+
it "should create HTTP Post requests" do
|
|
245
|
+
req = subject.request(:method => :post)
|
|
246
|
+
|
|
247
|
+
req.class.should == Net::HTTP::Post
|
|
248
|
+
end
|
|
249
|
+
|
|
250
|
+
it "should create HTTP Propfind requests" do
|
|
251
|
+
req = subject.request(:method => :propfind)
|
|
252
|
+
|
|
253
|
+
req.class.should == Net::HTTP::Propfind
|
|
254
|
+
end
|
|
255
|
+
|
|
256
|
+
it "should create HTTP Proppatch requests" do
|
|
257
|
+
req = subject.request(:method => :proppatch)
|
|
258
|
+
|
|
259
|
+
req.class.should == Net::HTTP::Proppatch
|
|
260
|
+
end
|
|
261
|
+
|
|
262
|
+
it "should create HTTP Trace requests" do
|
|
263
|
+
req = subject.request(:method => :trace)
|
|
264
|
+
|
|
265
|
+
req.class.should == Net::HTTP::Trace
|
|
266
|
+
end
|
|
267
|
+
|
|
268
|
+
it "should create HTTP Unlock requests" do
|
|
269
|
+
req = subject.request(:method => :unlock)
|
|
270
|
+
|
|
271
|
+
req.class.should == Net::HTTP::Unlock
|
|
272
|
+
end
|
|
273
|
+
|
|
274
|
+
it "should raise an ArgumentError when :method is not specified" do
|
|
275
|
+
lambda {
|
|
276
|
+
subject.request()
|
|
277
|
+
}.should raise_error(ArgumentError)
|
|
278
|
+
end
|
|
279
|
+
end
|
|
280
|
+
end
|
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
require 'ronin/network/http/proxy'
|
|
3
|
+
|
|
4
|
+
describe Network::HTTP::Proxy do
|
|
5
|
+
describe "parse" do
|
|
6
|
+
subject { Network::HTTP::Proxy }
|
|
7
|
+
|
|
8
|
+
it "should parse host-names" do
|
|
9
|
+
proxy = subject.parse('127.0.0.1')
|
|
10
|
+
|
|
11
|
+
proxy.host.should == '127.0.0.1'
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
it "should parse 'host:port' URLs" do
|
|
15
|
+
proxy = subject.parse('127.0.0.1:80')
|
|
16
|
+
|
|
17
|
+
proxy.host.should == '127.0.0.1'
|
|
18
|
+
proxy.port.should == 80
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
it "should parse 'user@host:port' URLs" do
|
|
22
|
+
proxy = subject.parse('joe@127.0.0.1:80')
|
|
23
|
+
|
|
24
|
+
proxy.user.should == 'joe'
|
|
25
|
+
proxy.host.should == '127.0.0.1'
|
|
26
|
+
proxy.port.should == 80
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
it "should prase 'user:password@host:port' URLs" do
|
|
30
|
+
proxy = subject.parse('joe:lol@127.0.0.1:80')
|
|
31
|
+
|
|
32
|
+
proxy.user.should == 'joe'
|
|
33
|
+
proxy.password.should == 'lol'
|
|
34
|
+
proxy.host.should == '127.0.0.1'
|
|
35
|
+
proxy.port.should == 80
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
it "should ignore http:// prefixes when parsing proxy URLs" do
|
|
39
|
+
proxy = subject.parse('http://joe:lol@127.0.0.1:80')
|
|
40
|
+
|
|
41
|
+
proxy.user.should == 'joe'
|
|
42
|
+
proxy.password.should == 'lol'
|
|
43
|
+
proxy.host.should == '127.0.0.1'
|
|
44
|
+
proxy.port.should == 80
|
|
45
|
+
end
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
describe "create" do
|
|
49
|
+
subject { Network::HTTP::Proxy }
|
|
50
|
+
|
|
51
|
+
let(:host) { '127.0.0.1' }
|
|
52
|
+
let(:port) { 8080 }
|
|
53
|
+
|
|
54
|
+
it "should accept Proxy objects" do
|
|
55
|
+
proxy = subject.new(:host => host, :port => port)
|
|
56
|
+
|
|
57
|
+
subject.create(proxy).should == proxy
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
it "should accept URI::HTTP objects" do
|
|
61
|
+
url = URI::HTTP.build(:host => host, :port => port)
|
|
62
|
+
proxy = subject.create(url)
|
|
63
|
+
|
|
64
|
+
proxy.host.should == host
|
|
65
|
+
proxy.port.should == port
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
it "should accept Hash objects" do
|
|
69
|
+
hash = {:host => host, :port => port}
|
|
70
|
+
proxy = subject.create(hash)
|
|
71
|
+
|
|
72
|
+
proxy.host.should == host
|
|
73
|
+
proxy.port.should == port
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
it "should accept String objects" do
|
|
77
|
+
string = "#{host}:#{port}"
|
|
78
|
+
proxy = subject.create(string)
|
|
79
|
+
|
|
80
|
+
proxy.host.should == host
|
|
81
|
+
proxy.port.should == port
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
it "should accept nil" do
|
|
85
|
+
proxy = subject.create(nil)
|
|
86
|
+
|
|
87
|
+
proxy.should_not be_enabled
|
|
88
|
+
end
|
|
89
|
+
end
|
|
90
|
+
|
|
91
|
+
subject { Network::HTTP::Proxy.new }
|
|
92
|
+
|
|
93
|
+
it "should behave like a Hash" do
|
|
94
|
+
subject[:host] = 'example.com'
|
|
95
|
+
subject[:host].should == 'example.com'
|
|
96
|
+
end
|
|
97
|
+
|
|
98
|
+
it "should not have a host by default" do
|
|
99
|
+
subject.host.should be_nil
|
|
100
|
+
end
|
|
101
|
+
|
|
102
|
+
it "should not have a port by default" do
|
|
103
|
+
subject.port.should be_nil
|
|
104
|
+
end
|
|
105
|
+
|
|
106
|
+
it "should be disabled by default" do
|
|
107
|
+
subject.should_not be_enabled
|
|
108
|
+
end
|
|
109
|
+
|
|
110
|
+
it "should reset the host, port, user and password when disabled" do
|
|
111
|
+
subject[:host] = 'example.com'
|
|
112
|
+
subject[:port] = 9001
|
|
113
|
+
subject[:user] = 'joe'
|
|
114
|
+
subject[:password] = 'lol'
|
|
115
|
+
|
|
116
|
+
subject.disable!
|
|
117
|
+
|
|
118
|
+
subject[:host].should be_nil
|
|
119
|
+
subject[:port].should be_nil
|
|
120
|
+
subject[:user].should be_nil
|
|
121
|
+
subject[:password].should be_nil
|
|
122
|
+
end
|
|
123
|
+
|
|
124
|
+
it "should return a URI::HTTP representing the proxy" do
|
|
125
|
+
subject[:host] = 'example.com'
|
|
126
|
+
subject[:port] = 9001
|
|
127
|
+
subject[:user] = 'joe'
|
|
128
|
+
subject[:password] = 'lol'
|
|
129
|
+
|
|
130
|
+
url = subject.url
|
|
131
|
+
|
|
132
|
+
url.host.should == 'example.com'
|
|
133
|
+
url.port.should == 9001
|
|
134
|
+
url.user.should == 'joe'
|
|
135
|
+
url.password.should == 'lol'
|
|
136
|
+
end
|
|
137
|
+
|
|
138
|
+
it "should return nil when converting a disabled proxy to a URL" do
|
|
139
|
+
subject.url.should be_nil
|
|
140
|
+
end
|
|
141
|
+
|
|
142
|
+
it "should return the host-name when converted to a String" do
|
|
143
|
+
subject[:host] = 'example.com'
|
|
144
|
+
subject.to_s.should == 'example.com'
|
|
145
|
+
end
|
|
146
|
+
|
|
147
|
+
it "should return an empty String when there is no host-name" do
|
|
148
|
+
subject.to_s.should be_empty
|
|
149
|
+
end
|
|
150
|
+
end
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
require 'ronin/network/ssl'
|
|
3
|
+
|
|
4
|
+
describe Network::SSL do
|
|
5
|
+
describe 'verify' do
|
|
6
|
+
it "should map verify mode names to numeric values" do
|
|
7
|
+
subject.verify(:peer).should == OpenSSL::SSL::VERIFY_PEER
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
it "should default to VERIFY_NONE if no verify mode name is given" do
|
|
11
|
+
subject.verify.should == OpenSSL::SSL::VERIFY_NONE
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
end
|