add function tests for compliance command

This commit is contained in:
Christoph Hartmann 2016-04-13 16:54:29 +02:00
parent 07c359431f
commit 3007aef248
3 changed files with 72 additions and 4 deletions

View file

@ -85,6 +85,11 @@ module Compliance
option :overwrite, type: :boolean, default: false,
desc: 'Overwrite existing profile on Chef Compliance.'
def upload(path) # rubocop:disable Metrics/MethodLength, Metrics/AbcSize, PerceivedComplexity
unless File.exist?(path)
puts "Directory #{path} does not exist."
exit 1
end
o = options.dup
configure_logger(o)
# check the profile, we only allow to upload valid profiles
@ -164,9 +169,8 @@ module Compliance
desc 'logout', 'user logout from Chef Compliance'
def logout
if Compliance::Configuration.new.supported?(:oidc)
config = Compliance::Configuration.new
else
unless config.supported?(:oidc) || config['token'].nil?
config = Compliance::Configuration.new
url = "#{config['server']}/logout"
Compliance::API.post(url, config['token'], config['insecure'], !config.supported?(:oidc))

View file

@ -47,7 +47,11 @@ module Compliance
# deletes data
def destroy
if File.exist?(@config_file)
File.delete(@config_file)
else
true
end
end
# return if the (stored) api version does not support a certain feature

View file

@ -0,0 +1,60 @@
# encoding: utf-8
# author: Dominik Richter
# author: Christoph Hartmann
require 'functional/helper'
# basic testing without availability of any server
describe 'inspec compliance' do
include FunctionalHelper
it 'help' do
out = inspec('compliance help')
out.exit_status.must_equal 0
out.stdout.must_include 'inspec compliance exec PROFILE'
end
# ensure we are logged out
it 'logout' do
out = inspec('compliance logout')
out.exit_status.must_equal 0
out.stdout.must_include ''
end
it 'login server url missing' do
out = inspec('compliance login')
#TODO: we need to convince thor that this is an error
out.exit_status.must_equal 0
out.stderr.must_include 'ERROR: "inspec login" was called with no arguments'
end
it 'login server with missing parameters' do
out = inspec('compliance login http://example.com')
out.exit_status.must_equal 1
#TODO: inspec should really use stderr for errors
out.stdout.must_include 'Please run `inspec compliance login` with options'
end
it 'inspec compliance profiles without authentication' do
out = inspec('compliance profile')
out.exit_status.must_equal 1
end
it 'try to upload a profile without directory' do
out = inspec('compliance upload')
out.stderr.must_include 'ERROR: "inspec upload" was called with no arguments'
out.exit_status.must_equal 0
end
it 'try to upload a profile a non-existing path' do
out = inspec('compliance upload /path/to/dir')
out.stdout.must_include 'Directory /path/to/dir does not exist.'
out.exit_status.must_equal 1
end
it 'logout' do
out = inspec('compliance logout')
out.exit_status.must_equal 0
out.stdout.must_include ''
end
end