serverspec-extended-types 0.1.0 → 0.1.1
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.
- checksums.yaml +4 -4
- data/CHANGES.md +4 -0
- data/README.md +23 -3
- data/lib/serverspec_extended_types/http_get.rb +33 -1
- data/lib/serverspec_extended_types/version.rb +1 -1
- data/spec/types/bitlbee_spec.rb +3 -3
- data/spec/types/http_get_spec.rb +52 -0
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 43a6ac8ec254f443ee6fff4fe712a2144c673e4b
|
4
|
+
data.tar.gz: 01ee9a58e00b00064cd3d5565f6aca55f276b4f0
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5d647e721a7d0502c79c2ab79108660241d992dbddb5a1c7ce4fc401f075e66bc02f004ab15314181f45f715a0f48c7df14cbeb8527a01f2eeea3c9b125ca041
|
7
|
+
data.tar.gz: 3595abbf99f225406d923b144cec2470a4ee891d184b39050d979fd27e08ea34b9fe021bd6a6ab8f26e8e02c884e6f3ac167b7356b4c783bc067b2cf44da4cf4
|
data/CHANGES.md
CHANGED
@@ -1,5 +1,9 @@
|
|
1
1
|
# serverspec-extended-types, changelog
|
2
2
|
|
3
|
+
## 0.1.1 2017-07-28 ojizero <z.acnts.816@protonmail.ch>
|
4
|
+
|
5
|
+
* Add `redirected_to` and `redirected` matchers for http_get type.
|
6
|
+
|
3
7
|
## 0.1.0 2017-05-15 Jason Antman <jason@jasonantman.com>
|
4
8
|
|
5
9
|
* Add `protocol` (http|https) and `bypass_ssl_verify` parameters for http_get.
|
data/README.md
CHANGED
@@ -6,7 +6,7 @@
|
|
6
6
|
[](https://rubygems.org/gems/serverspec-extended-types)
|
7
7
|
[](https://rubygems.org/gems/serverspec-extended-types)
|
8
8
|
[](https://github.com/jantman/serverspec-extended-types/issues)
|
9
|
-
[](http://www.repostatus.org/#inactive)
|
10
10
|
|
11
11
|
serverspec-extended-types provides some purpose-specific types to be used with [serverspec](http://serverspec.org/) 2.x for
|
12
12
|
testing various things on a host, as well as some types for high-level integration tests that make actual requests against
|
@@ -134,7 +134,7 @@ Returns the String body content of the HTTP response.
|
|
134
134
|
|
135
135
|
describe http_get(80, 'myhostname', '/') do
|
136
136
|
its(:body) { should match /<html>/ }
|
137
|
-
|
137
|
+
end
|
138
138
|
|
139
139
|
##### headers
|
140
140
|
|
@@ -167,7 +167,27 @@ True if the request timed out, false otherwise.
|
|
167
167
|
|
168
168
|
describe http_get(80, 'myhostname', '/') do
|
169
169
|
it { should_not be_timed_out }
|
170
|
-
|
170
|
+
end
|
171
|
+
|
172
|
+
##### redirected?
|
173
|
+
|
174
|
+
True if the request was redirected, false otherwise.
|
175
|
+
|
176
|
+
describe http_get(80, 'myhostname', '/') do
|
177
|
+
it { should be_redirected }
|
178
|
+
end
|
179
|
+
|
180
|
+
##### redirected_to?
|
181
|
+
|
182
|
+
True if the request was redirected to the specified location, false otherwise.
|
183
|
+
|
184
|
+
describe http_get(80, 'myhostname', '/') do
|
185
|
+
it { should be_redirected_to 'https://myhostname/newpath' }
|
186
|
+
end
|
187
|
+
|
188
|
+
describe http_get(80, 'myhostname', '/') do
|
189
|
+
it { should be_redirected_to 'http://mynewhost/' }
|
190
|
+
end
|
171
191
|
|
172
192
|
### virtualenv
|
173
193
|
|
@@ -20,6 +20,8 @@ module Serverspec
|
|
20
20
|
# Perform an HTTP GET request against the serverspec target
|
21
21
|
# using {http://www.rubydoc.info/gems/faraday/ Faraday}.
|
22
22
|
class Http_Get < Base
|
23
|
+
# Http status codes that are tested against for redirect test
|
24
|
+
@@redirect_codes = [301, 302, 307, 308]
|
23
25
|
|
24
26
|
# Initialize a bunch of instance variables, then call {#getpage}
|
25
27
|
#
|
@@ -52,6 +54,8 @@ module Serverspec
|
|
52
54
|
@response_json = nil
|
53
55
|
@protocol = protocol
|
54
56
|
@bypass_ssl_verify = bypass_ssl_verify
|
57
|
+
@redirects = false
|
58
|
+
@redirect_path = nil
|
55
59
|
begin
|
56
60
|
Timeout::timeout(timeout_sec) do
|
57
61
|
getpage
|
@@ -84,6 +88,8 @@ module Serverspec
|
|
84
88
|
response.headers.each do |header, val|
|
85
89
|
@headers_hash[header] = val
|
86
90
|
end
|
91
|
+
@redirects = @@redirect_codes.include? @response_code_int
|
92
|
+
@redirect_path = @redirects ? @headers_hash['location'] : nil
|
87
93
|
# try to JSON decode
|
88
94
|
begin
|
89
95
|
@response_json = JSON.parse(@content_str)
|
@@ -130,7 +136,7 @@ module Serverspec
|
|
130
136
|
def json
|
131
137
|
@response_json
|
132
138
|
end
|
133
|
-
|
139
|
+
|
134
140
|
# Returns the HTTP status code, or 0 if timed out
|
135
141
|
#
|
136
142
|
# @example
|
@@ -161,6 +167,32 @@ module Serverspec
|
|
161
167
|
@content_str
|
162
168
|
end
|
163
169
|
|
170
|
+
# Whether or not it redirects to some other page
|
171
|
+
#
|
172
|
+
# @example
|
173
|
+
# describe http_get(80, 'myhostname', '/') do
|
174
|
+
# it { should be_redirected_to 'https://myhostname/' }
|
175
|
+
# end
|
176
|
+
#
|
177
|
+
# @api public
|
178
|
+
# @return [Boolean]
|
179
|
+
def redirected_to? (redirect_path)
|
180
|
+
@redirects and @redirect_path == redirect_path
|
181
|
+
end
|
182
|
+
|
183
|
+
# Whether or not it redirects to any other page
|
184
|
+
#
|
185
|
+
# @example
|
186
|
+
# describe http_get(80, 'myhostname', '/') do
|
187
|
+
# it { should be_redirected }
|
188
|
+
# end
|
189
|
+
#
|
190
|
+
# @api public
|
191
|
+
# @return [Boolean]
|
192
|
+
def redirected?
|
193
|
+
@redirects
|
194
|
+
end
|
195
|
+
|
164
196
|
private :getpage
|
165
197
|
end
|
166
198
|
|
data/spec/types/bitlbee_spec.rb
CHANGED
@@ -96,9 +96,9 @@ describe 'Serverspec::Type::Bitlbee' do
|
|
96
96
|
expect(sslsock_dbl).to receive(:puts).ordered.with("QUIT :\"outta here\"\n")
|
97
97
|
expect(sslsock_dbl).to receive(:close).ordered
|
98
98
|
expect(OpenSSL::SSL::SSLSocket).to receive(:new).with(sock_dbl, sslctx_dbl).and_return(sslsock_dbl)
|
99
|
-
#expect_any_instance_of(Serverspec::Type::Bitlbee).to receive(:communicate)
|
99
|
+
# expect_any_instance_of(Serverspec::Type::Bitlbee).to receive(:communicate)
|
100
100
|
x = bitlbee(1, 'foo', 'bar')
|
101
|
-
x.
|
101
|
+
allow(x).to receive(:communicate) do
|
102
102
|
x.instance_variable_get(:@socket).puts("communicate")
|
103
103
|
end
|
104
104
|
x.connect_ssl
|
@@ -114,7 +114,7 @@ describe 'Serverspec::Type::Bitlbee' do
|
|
114
114
|
expect(sock_dbl).to receive(:puts).ordered.with("QUIT :\"outta here\"\n")
|
115
115
|
expect(sock_dbl).to receive(:close).ordered
|
116
116
|
x = bitlbee(1, 'foo', 'bar')
|
117
|
-
x.
|
117
|
+
allow(x).to receive(:communicate) do
|
118
118
|
x.instance_variable_get(:@socket).puts("communicate")
|
119
119
|
end
|
120
120
|
x.connect
|
data/spec/types/http_get_spec.rb
CHANGED
@@ -28,6 +28,8 @@ describe 'http_get()' do
|
|
28
28
|
expect(x.instance_variable_get(:@response_json)).to be nil
|
29
29
|
expect(x.instance_variable_get(:@protocol)).to eq 'http'
|
30
30
|
expect(x.instance_variable_get(:@bypass_ssl_verify)).to eq false
|
31
|
+
expect(x.instance_variable_get(:@redirects)).to eq false
|
32
|
+
expect(x.instance_variable_get(:@redirect_path)).to be nil
|
31
33
|
end
|
32
34
|
it 'calls getpage' do
|
33
35
|
expect_any_instance_of(Serverspec::Type::Http_Get).to receive(:getpage).once
|
@@ -125,5 +127,55 @@ describe 'http_get()' do
|
|
125
127
|
expected_json = {"foo" => "bar", "baz" => {"blam" => "blarg"}}
|
126
128
|
expect(x.json).to eq expected_json
|
127
129
|
end
|
130
|
+
it 'without redirects' do
|
131
|
+
stub_const('ENV', ENV.to_hash.merge('TARGET_HOST' => 'myhost'))
|
132
|
+
|
133
|
+
headers = double('header')
|
134
|
+
conn = double('conn', headers: headers)
|
135
|
+
|
136
|
+
expect(headers).to receive(:[]=).with(:user_agent, %r"Serverspec::Type::Http_Get/\d+\.\d+\.\d+ \(https://github.com/jantman/serverspec-extended-types\)")
|
137
|
+
expect(headers).to receive(:[]=).with(:Host, 'hostheader')
|
138
|
+
|
139
|
+
response = double('resp', status: 200, body: 'OK', headers: ({}))
|
140
|
+
|
141
|
+
expect(conn).to receive(:get).with('mypath').and_return(response)
|
142
|
+
|
143
|
+
expect(Faraday).to receive(:new).with('http://myhost:1/').and_return(conn)
|
144
|
+
x = http_get(1, 'hostheader', 'mypath')
|
145
|
+
|
146
|
+
# test internal parameters
|
147
|
+
expect(x.instance_variable_get(:@redirects)).to eq false
|
148
|
+
expect(x.instance_variable_get(:@redirect_path)).to be nil
|
149
|
+
|
150
|
+
# test exposed API
|
151
|
+
expect(x).to_not be_redirected
|
152
|
+
expect(x).to_not be_redirected_to 'https://myhost:1/mynewpath'
|
153
|
+
end
|
154
|
+
it 'supports redirects' do
|
155
|
+
stub_const('ENV', ENV.to_hash.merge('TARGET_HOST' => 'myhost'))
|
156
|
+
|
157
|
+
headers = double('header')
|
158
|
+
conn = double('conn', headers: headers)
|
159
|
+
|
160
|
+
expect(headers).to receive(:[]=).with(:user_agent, %r"Serverspec::Type::Http_Get/\d+\.\d+\.\d+ \(https://github.com/jantman/serverspec-extended-types\)")
|
161
|
+
expect(headers).to receive(:[]=).with(:Host, 'hostheader')
|
162
|
+
|
163
|
+
redirect_location = 'https://myhost:1/mynewpath'
|
164
|
+
response = double('resp', status: 301, body: 'OK', headers: {'location' => redirect_location})
|
165
|
+
|
166
|
+
expect(conn).to receive(:get).with('mypath').and_return(response)
|
167
|
+
|
168
|
+
expect(Faraday).to receive(:new).with('http://myhost:1/').and_return(conn)
|
169
|
+
x = http_get(1, 'hostheader', 'mypath')
|
170
|
+
|
171
|
+
# test internal parameters
|
172
|
+
expect(x.instance_variable_get(:@redirects)).to eq true
|
173
|
+
expect(x.instance_variable_get(:@redirect_path)).to_not be nil
|
174
|
+
expect(x.instance_variable_get(:@redirect_path)).to eq redirect_location
|
175
|
+
|
176
|
+
# test exposed API
|
177
|
+
expect(x).to be_redirected
|
178
|
+
expect(x).to be_redirected_to redirect_location
|
179
|
+
end
|
128
180
|
end
|
129
181
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: serverspec-extended-types
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jason Antman
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-
|
11
|
+
date: 2017-06-28 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: serverspec
|