Ruby Maintainability Gem Version

A gem to black-box test a web server configuration. For example, whether a site's SSL certificate is correctly configured and not expired:

expect('').to have_a_valid_cert

It's a tool for doing Test Driven Devops (I just made that up). See my introductory blog post for the backstory.

This library takes a minimalist approach: it simply adds new RSpec matchers. Therefore, you can use your own RSpec writing style; there's no new DSL to learn.


$ gem install rspec-webservice_matchers

What You Get

These new RSpec matchers:

be_up Looks for a 200, but will follow up to four redirects
be_fast Checks for Google PageSpeed score >= 85. Expects the environment variable WEBSERVICE_MATCHER_INSIGHTS_KEY to contain a Google "server" API key with PageSpeed Insights API enabled.
enforce_https_everywhere Passes if the site will only allow SSL connections. See the EFF project, HTTPS Everywhere
have_a_valid_cert Will fail if there's no cert, or it's expired or incorrectly configured
be_status A low-level matcher to explicitly check for a 200, 503, or any other code
redirect_permanently_to Checks for 301 and a correct destination URL
redirect_temporarily_to Checks for 302 or 307 and a correct destination


Here's an example which uses them all:

require 'rspec/webservice_matchers'

describe 'My app' do
  context '' do
    it { should be_up }
    it { should be_fast }
    it { should have_a_valid_cert }

  it 'serves the "about" page without redirecting' do
    expect('').to be_status 200

  it 'only serves via www' do
    expect('').to redirect_permanently_to ''

  it 'forces visitors to use https' do
    expect('').to enforce_https_everywhere