http
Use the http
Chef InSpec audit resource to test an http endpoint.
Availability
Installation
This resource is distributed along with Chef InSpec itself. You can use it automatically.
Version
This resource first became available in v1.10.0 of InSpec.
Syntax
An http
resource block declares the configuration settings to be tested:
describe http('url', auth: {user: 'user', pass: 'test'}, params: {params}, method: 'method', headers: {headers}, data: data, open_timeout: 60, read_timeout: 60, ssl_verify: true, max_redirects: 3) do
its('status') { should eq number }
its('body') { should eq 'body' }
its('headers.name') { should eq 'header' }
end
where
('url')
is the url to testauth: { user: 'user', pass: 'test' }
may be specified for basic auth request{params}
may be specified for http request parameters'method'
may be specified for http request method (default to ‘GET’){headers}
may be specified for http request headersdata
may be specified for http request bodyopen_timeout
may be specified for a timeout for opening connections (default to 60)read_timeout
may be specified for a timeout for reading connections (default to 60)ssl_verify
may be specified to enable or disable verification of SSL certificates (default totrue
)max_redirects
may be specified to control how many HTTP Redirects to follow (defaults to0
)
Example
The following examples show how to use this Chef InSpec audit resource. An http
resource block declares the configuration settings to be tested:
Simple http test
For example, a service is listening on default http port can be tested like this:
describe http('http://localhost') do
its('status') { should cmp 200 }
end
Complex http test
describe http('http://localhost:8080/ping',
auth: {user: 'user', pass: 'test'},
params: {format: 'html'},
method: 'POST',
headers: {'Content-Type' => 'application/json'},
data: '{"data":{"a":"1","b":"five"}}') do
its('status') { should cmp 200 }
its('body') { should cmp 'pong' }
its('headers.Content-Type') { should cmp 'text/html' }
end
Local vs. Remote
Beginning with Chef InSpec 1.41, you can enable the ability to have the HTTP test execute on the remote target:
describe http('http://www.example.com', enable_remote_worker: true) do
its('body') { should cmp 'awesome' }
end
In Chef InSpec 2.0, the HTTP test will automatically execute remotely whenever Chef InSpec is testing a remote node.
Parameters
url
,auth
,params
,method
,headers
,data
,open_timeout
,read_timeout
,ssl_verify
,max_redirects
Parameter Examples
url
('url')
is the url to test.
describe http('http://localhost:8080/ping') do
...
end
auth
auth: { user: 'user', pass: 'test' }
may be specified for basic auth request.
describe http('http://localhost:8080/ping',
auth: {user: 'user', pass: 'test'}) do
...
end
params
{params}
may be specified for http request parameters.
describe http('http://localhost:8080/ping',
params: {format: 'html'}) do
...
end
method
'method'
may be specified for http request method (default to ‘GET’).
describe http('http://localhost:8080/ping',
method: 'POST') do
...
end
headers
{headers}
may be specified for http request headers.
describe http('http://localhost:8080/ping',
headers: {'Content-Type' => 'application/json'}) do
...
end
data
data
may be specified for http request body.
describe http('http://localhost:8080/ping',
data: '{"data":{"a":"1","b":"five"}}') do
...
end
open_timeout
open_timeout
may be specified for a timeout for opening connections (default to 60).
describe http('http://localhost:8080/ping',
open_timeout: '90') do
...
end
read_timeout
read_timeout
may be specified for a timeout for reading connections (default to 60).
describe http('http://localhost:8080/ping',
read_timeout: '90') do
...
end
ssl_verify
ssl_verify
may be specified to enable or disable verification of SSL certificates (default to true
).
describe http('http://localhost:8080/ping',
ssl_verify: true) do
...
end
max_redirects
max_redirects
may be specified to control how many HTTP Redirects to follow (default to 0).
describe http('http://localhost:8080/ping',
max_redirects: 3) do
...
end
Properties
body
,headers
,http_method
,status
,
Property Examples
body
The body
matcher tests body content of http response:
its('body') { should eq 'hello\n' }
headers
The headers
matcher returns an hash of all http headers:
its('headers') { should eq {} }
Individual headers can be tested via:
its('headers.Content-Type') { should cmp 'text/html' }
status
The status
matcher tests status of the http response:
its('status') { should eq 200 }
Matchers
For a full list of available matchers, please visit our matchers page.