Merge pull request #4768 from inspec/zenspider/bug628

Wire up backend to rspec metadata, allowing for example groups to use resources
This commit is contained in:
Ryan Davis 2019-12-09 12:09:41 -08:00 committed by GitHub
commit 5d8a0af8ce
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 28 additions and 20 deletions

View file

@ -23,11 +23,11 @@ Gem::Specification.new do |spec|
spec.required_ruby_version = ">= 2.4"
spec.add_dependency "train", "~> 3.0" # Inspec 4 must have train 2+; 3+ if we include train-winrm
spec.add_dependency "train", "~> 3.0"
# Train plugins we ship with InSpec
spec.add_dependency "train-habitat", "~> 0.1"
spec.add_dependency "train-aws", "~> 0.1"
spec.add_dependency "train-winrm", "~> 0.2" # Requires train 3+
spec.add_dependency "train-winrm", "~> 0.2"
# Implementation dependencies
spec.add_dependency "chef-telemetry", "~> 1.0"

View file

@ -11,14 +11,13 @@ module Inspec
module DescribeDslLazyLoader
# Support for Describe DSL plugins
def method_missing(method_name, *arguments, &block)
# TODO: need a backend available at the describe level... class method somewhere?
# # see if it is a resource first
# begin
# resource = Inspec::DSL.method_missing_resource(:where_is_backend?, method_name, *arguments)
# return resource if resource
# rescue LoadError
# # pass through
# end
begin
backend = metadata[:backend] # populated via Inspec::Runner#add_resource
resource = Inspec::DSL.method_missing_resource(backend, method_name, *arguments)
return resource if resource
rescue LoadError
# pass through
end
# Check to see if there is a describe_dsl plugin activator hook with the method name
registry = Inspec::Plugin::V2::Registry.instance

View file

@ -307,6 +307,8 @@ module Inspec
def add_resource(method_name, arg, opts, block)
case method_name
when "describe"
opts = { backend: @test_collector.backend }.merge opts
@test_collector.example_group(*arg, opts, &block)
when "expect"
block.example_group

View file

@ -10,6 +10,8 @@ require "inspec/rspec_extensions"
module Inspec
class RunnerRspec
attr_accessor :formatter
def initialize(conf)
@conf = conf
@formatter = nil
@ -22,19 +24,26 @@ module Inspec
# @param [Type] &block the block associated with this example group
# @return [RSpecExampleGroup]
def example_group(*args, &block)
# NOTE: this RUNS immediately
RSpec::Core::ExampleGroup.describe(*args, &block)
end
def formatters
RSpec.configuration.formatters.grep(Inspec::Formatters::Base)
end
# Add a full profile to the runner. Only pulls in metadata
#
# @param [Inspec::Profile] profile
# @return [nil]
def add_profile(profile)
RSpec.configuration.formatters
.find_all { |c| c.is_a?(Inspec::Formatters::Base) }
.each do |fmt|
fmt.add_profile(profile)
end
formatters.each do |fmt|
fmt.add_profile(profile)
end
end
def backend
formatters.first.backend
end
# Configure the backend of the runner.
@ -42,11 +51,9 @@ module Inspec
# @param [Inspec::Backend] backend
# @return [nil]
def backend=(backend)
RSpec.configuration.formatters
.find_all { |c| c.is_a?(Inspec::Formatters::Base) }
.each do |fmt|
fmt.backend = backend
end
formatters.each do |fmt|
fmt.backend = backend
end
end
# Add an example group to the list of registered tests.