serverspec-extended-types 0.0.2 → 0.0.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +8 -8
- data/CHANGES.md +6 -2
- data/README.md +11 -1
- data/lib/serverspec_extended_types/http_get.rb +21 -0
- data/lib/serverspec_extended_types/version.rb +1 -1
- data/spec/types/http_get_spec.rb +26 -0
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
---
|
2
2
|
!binary "U0hBMQ==":
|
3
3
|
metadata.gz: !binary |-
|
4
|
-
|
4
|
+
Yzc2OWUzM2M5NDljNTNkM2I1ZjE5ZWUwYjZlMzUzM2NhNTAyYjliMg==
|
5
5
|
data.tar.gz: !binary |-
|
6
|
-
|
6
|
+
OGRiMjQ5NWZhNGMxZjg4MzQ2ZmM0MDA1MTllM2M4NDUzZWE5ZWU4Yw==
|
7
7
|
SHA512:
|
8
8
|
metadata.gz: !binary |-
|
9
|
-
|
10
|
-
|
11
|
-
|
9
|
+
YWE2ZWRlOGZmNzlkZjM0OWIwODZhODUwMmQzNzkxNjYwYWJjYjFhZWUxNTYw
|
10
|
+
ZjA0NmVjNTkzYmQ5OTI3ZjA4ZDFkYjIxZTQwM2NjNzE0ZjNiNjJhMDAzNjBm
|
11
|
+
NzkzYjY3NDE4NDcwZGNkNmQzMmQ0ZGFjY2EzZTcxYWQ4OTQ5YzY=
|
12
12
|
data.tar.gz: !binary |-
|
13
|
-
|
14
|
-
|
15
|
-
|
13
|
+
OWFhMTJmOTE5YzU3NDI3ODZmNTZkZjQyNGFhMTk4NzQ4MjZmMDQ3Yzc0ODRi
|
14
|
+
ZTUzMTJkMmM5YjFjYzllNjZhMWQ2ZWY1MmQwNjQ0YzU3ZGIwMWVlNTgyNjc0
|
15
|
+
YzM1ODRkYTRjYzZhOWVmMmRjMGJmZjY4NTJlNzEwMDM0NTY1NmQ=
|
data/CHANGES.md
CHANGED
@@ -1,9 +1,13 @@
|
|
1
1
|
# serverspec-extended-types, changelog
|
2
2
|
|
3
|
-
## 0.0.
|
3
|
+
## 0.0.3 2015-03-23 Jason Antman <jason@jasonantman.com>
|
4
4
|
|
5
|
-
*
|
5
|
+
* Add ``json`` matcher for http_get type.
|
6
6
|
|
7
7
|
## 0.0.2 2015-03-14 Jason Antman <jason@jasonantman.com>
|
8
8
|
|
9
9
|
* Minor bugfix in Serverspec::Types::Virtualenv#virtualenv?
|
10
|
+
|
11
|
+
## 0.0.1 2015-03-14 Jason Antman <jason@jasonantman.com>
|
12
|
+
|
13
|
+
* Initial release with bitlbee, http_get and virtualenv types
|
data/README.md
CHANGED
@@ -17,7 +17,8 @@ Current types include:
|
|
17
17
|
* A ``virtualenv`` type to make expectations about a Python Virtualenv, its ``pip`` and ``python`` versions, and packages
|
18
18
|
installed in it. This also works for system-wide Python if ``pip`` is installed.
|
19
19
|
* A ``http_get`` type to perform an HTTP GET request (specifying a port number, the ``Host:`` header to set, and the path
|
20
|
-
to request) and make expectations about whether the request times out, its status code, headers,
|
20
|
+
to request) and make expectations about whether the request times out, its status code, headers, response body, and
|
21
|
+
JSON content (if the response body is parsable as JSON).
|
21
22
|
* A ``bitlbee`` type to actually connect via IRC to a running [bitlbee](http://www.bitlbee.org/) IRC gateway and authenticate
|
22
23
|
to it, and make expectations that the connection and authentication worked, and what version of Bitlbee is running.
|
23
24
|
|
@@ -141,6 +142,15 @@ Returns the HTTP response headers as a hash.
|
|
141
142
|
its(:headers) { should include('HeaderName' => /value regex/) }
|
142
143
|
end
|
143
144
|
|
145
|
+
##### json
|
146
|
+
|
147
|
+
If the response body is deserializable as JSON, contains the JSON hash,
|
148
|
+
otherwise an empty hash.
|
149
|
+
|
150
|
+
describe http_get(80, 'myhostname', '/') do
|
151
|
+
its(:json) { should include('Key' => /value regex/) }
|
152
|
+
end
|
153
|
+
|
144
154
|
##### status
|
145
155
|
|
146
156
|
Returns the HTTP status code, or 0 if timed out.
|
@@ -12,6 +12,7 @@
|
|
12
12
|
require 'timeout'
|
13
13
|
require 'faraday'
|
14
14
|
require 'serverspec_extended_types/version'
|
15
|
+
require 'json'
|
15
16
|
|
16
17
|
module Serverspec
|
17
18
|
module Type
|
@@ -46,6 +47,7 @@ module Serverspec
|
|
46
47
|
@content_str = nil
|
47
48
|
@headers_hash = nil
|
48
49
|
@response_code_int = nil
|
50
|
+
@response_json = nil
|
49
51
|
begin
|
50
52
|
Timeout::timeout(timeout_sec) do
|
51
53
|
getpage
|
@@ -75,6 +77,12 @@ module Serverspec
|
|
75
77
|
response.headers.each do |header, val|
|
76
78
|
@headers_hash[header] = val
|
77
79
|
end
|
80
|
+
# try to JSON decode
|
81
|
+
begin
|
82
|
+
@response_json = JSON.parse(@content_str)
|
83
|
+
rescue
|
84
|
+
@response_json = {}
|
85
|
+
end
|
78
86
|
end
|
79
87
|
|
80
88
|
# Whether or not the request timed out
|
@@ -103,6 +111,19 @@ module Serverspec
|
|
103
111
|
@headers_hash
|
104
112
|
end
|
105
113
|
|
114
|
+
# Returns the decoded JSON response, or an empty hash
|
115
|
+
#
|
116
|
+
# @example
|
117
|
+
# describe http_get(80, 'myhostname', '/') do
|
118
|
+
# its(:json) { should include('foo' => /value regex/) }
|
119
|
+
# end
|
120
|
+
#
|
121
|
+
# @api public
|
122
|
+
# @return [Hash]
|
123
|
+
def json
|
124
|
+
@response_json
|
125
|
+
end
|
126
|
+
|
106
127
|
# Returns the HTTP status code, or 0 if timed out
|
107
128
|
#
|
108
129
|
# @example
|
data/spec/types/http_get_spec.rb
CHANGED
@@ -25,6 +25,7 @@ describe 'http_get()' do
|
|
25
25
|
expect(x.instance_variable_get(:@content_str)).to be nil
|
26
26
|
expect(x.instance_variable_get(:@headers_hash)).to be nil
|
27
27
|
expect(x.instance_variable_get(:@response_code_int)).to be nil
|
28
|
+
expect(x.instance_variable_get(:@response_json)).to be nil
|
28
29
|
end
|
29
30
|
it 'calls getpage' do
|
30
31
|
expect_any_instance_of(Serverspec::Type::Http_Get).to receive(:getpage).once
|
@@ -70,6 +71,31 @@ describe 'http_get()' do
|
|
70
71
|
expect(x.body).to eq 'foo bar'
|
71
72
|
expected_headers = {'h1' => 'h1val', 'h2' => 'h2val'}
|
72
73
|
expect(x.headers).to eq expected_headers
|
74
|
+
expect(x.json).to be_empty
|
75
|
+
expect(x.json).to be_a_kind_of(Hash)
|
76
|
+
end
|
77
|
+
it 'sets JSON if parsable' do
|
78
|
+
stub_const('ENV', ENV.to_hash.merge('TARGET_HOST' => 'myhost'))
|
79
|
+
conn = double
|
80
|
+
headers = double
|
81
|
+
expect(headers).to receive(:[]=).with(:user_agent, %r"Serverspec::Type::Http_Get/\d+\.\d+\.\d+ \(https://github.com/jantman/serverspec-extended-types\)")
|
82
|
+
expect(conn).to receive(:headers).and_return(headers)
|
83
|
+
expect(headers).to receive(:[]=).with(:Host, 'hostheader')
|
84
|
+
expect(conn).to receive(:headers).and_return(headers)
|
85
|
+
response = double
|
86
|
+
expect(response).to receive(:status).and_return(200)
|
87
|
+
expect(response).to receive(:body).and_return('{"foo": "bar", "baz": {"blam": "blarg"}}')
|
88
|
+
expect(response).to receive(:headers).and_return({'h1' => 'h1val', 'h2' => 'h2val'})
|
89
|
+
expect(conn).to receive(:get).with('mypath').and_return(response)
|
90
|
+
expect(Faraday).to receive(:new).with("http://myhost:1/").and_return(conn)
|
91
|
+
x = http_get(1, 'hostheader', 'mypath')
|
92
|
+
expect(x.timed_out?).to eq false
|
93
|
+
expect(x.status).to eq 200
|
94
|
+
expect(x.body).to eq '{"foo": "bar", "baz": {"blam": "blarg"}}'
|
95
|
+
expected_headers = {'h1' => 'h1val', 'h2' => 'h2val'}
|
96
|
+
expect(x.headers).to eq expected_headers
|
97
|
+
expected_json = {"foo" => "bar", "baz" => {"blam" => "blarg"}}
|
98
|
+
expect(x.json).to eq expected_json
|
73
99
|
end
|
74
100
|
end
|
75
101
|
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.0.
|
4
|
+
version: 0.0.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jason Antman
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-03-
|
11
|
+
date: 2015-03-24 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: serverspec
|