chefspec 0.1.0 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/lib/chefspec.rb +2 -0
- data/lib/chefspec/chef_runner.rb +41 -6
- data/lib/chefspec/monkey_patches/provider.rb +27 -0
- data/lib/chefspec/version.rb +3 -0
- metadata +42 -66
    
        data/lib/chefspec.rb
    CHANGED
    
    | @@ -1,6 +1,7 @@ | |
| 1 1 | 
             
            require 'chef'
         | 
| 2 2 | 
             
            require 'rspec'
         | 
| 3 3 | 
             
            require 'chefspec/chef_runner'
         | 
| 4 | 
            +
            require 'chefspec/version'
         | 
| 4 5 | 
             
            require 'chefspec/matchers/execute'
         | 
| 5 6 | 
             
            require 'chefspec/matchers/file'
         | 
| 6 7 | 
             
            require 'chefspec/matchers/log'
         | 
| @@ -8,3 +9,4 @@ require 'chefspec/matchers/package' | |
| 8 9 | 
             
            require 'chefspec/matchers/service'
         | 
| 9 10 | 
             
            require 'chefspec/matchers/shared'
         | 
| 10 11 | 
             
            require 'chefspec/monkey_patches/hash'
         | 
| 12 | 
            +
            require 'chefspec/monkey_patches/provider'
         | 
    
        data/lib/chefspec/chef_runner.rb
    CHANGED
    
    | @@ -18,10 +18,18 @@ module ChefSpec | |
| 18 18 |  | 
| 19 19 | 
             
                # Instantiate a new runner to run examples with.
         | 
| 20 20 | 
             
                #
         | 
| 21 | 
            -
                # @param [ | 
| 22 | 
            -
                 | 
| 21 | 
            +
                # @param [Hash] options The options for the new runner
         | 
| 22 | 
            +
                # @option options [String] :cookbook_path The path to the chef cookbook(s) to be tested.
         | 
| 23 | 
            +
                # @option options [Symbol] :log_level The log level to use (default is :warn)
         | 
| 24 | 
            +
                # @yield [node] Configuration block for Chef::Node
         | 
| 25 | 
            +
                def initialize(options={})
         | 
| 26 | 
            +
                  defaults = {:cookbook_path => default_cookbook_path, :log_level => :warn, :dry_run => false}
         | 
| 27 | 
            +
                  options = {:cookbook_path => options} unless options.respond_to(:to_hash) # backwards-compatibility
         | 
| 28 | 
            +
                  options = defaults.merge(options)
         | 
| 29 | 
            +
             | 
| 23 30 | 
             
                  the_runner = self
         | 
| 24 31 | 
             
                  @resources = []
         | 
| 32 | 
            +
                  @do_dry_run = options[:dry_run]
         | 
| 25 33 |  | 
| 26 34 | 
             
                  Chef::Resource.class_eval do
         | 
| 27 35 | 
             
                    alias :old_run_action :run_action
         | 
| @@ -43,21 +51,27 @@ module ChefSpec | |
| 43 51 | 
             
                  end
         | 
| 44 52 |  | 
| 45 53 | 
             
                  Chef::Config[:solo] = true
         | 
| 46 | 
            -
                  Chef::Config[:cookbook_path] = cookbook_path
         | 
| 54 | 
            +
                  Chef::Config[:cookbook_path] = options[:cookbook_path]
         | 
| 47 55 | 
             
                  Chef::Log.verbose = true if Chef::Log.respond_to?(:verbose)
         | 
| 48 | 
            -
                  Chef::Log.level(: | 
| 56 | 
            +
                  Chef::Log.level(options[:log_level])
         | 
| 49 57 | 
             
                  @client = Chef::Client.new
         | 
| 50 | 
            -
                  @client. | 
| 58 | 
            +
                  fake_ohai(@client.ohai)
         | 
| 51 59 | 
             
                  @node = @client.build_node
         | 
| 60 | 
            +
                  if block_given?
         | 
| 61 | 
            +
                    yield @node
         | 
| 62 | 
            +
                  end
         | 
| 52 63 | 
             
                end
         | 
| 53 64 |  | 
| 54 65 | 
             
                # Run the specified recipes, but without actually converging the node.
         | 
| 55 66 | 
             
                #
         | 
| 56 67 | 
             
                # @param [array] recipe_names The names of the recipes to execute
         | 
| 68 | 
            +
                # @return ChefSpec::ChefRunner The runner itself
         | 
| 57 69 | 
             
                def converge(*recipe_names)
         | 
| 70 | 
            +
                  @node.run_list.reset!
         | 
| 58 71 | 
             
                  recipe_names.each do |recipe_name|
         | 
| 59 72 | 
             
                    @node.run_list << recipe_name
         | 
| 60 73 | 
             
                  end
         | 
| 74 | 
            +
                  return self if @do_dry_run
         | 
| 61 75 |  | 
| 62 76 | 
             
                  @client.instance_eval do
         | 
| 63 77 | 
             
                    if defined?(@expanded_run_list_with_versions) # 0.10.x
         | 
| @@ -67,7 +81,6 @@ module ChefSpec | |
| 67 81 | 
             
                  end
         | 
| 68 82 |  | 
| 69 83 | 
             
                  @resources = []
         | 
| 70 | 
            -
             | 
| 71 84 | 
             
                  if @client.respond_to?(:setup_run_context) # 0.10.x
         | 
| 72 85 | 
             
                    run_context = @client.setup_run_context
         | 
| 73 86 | 
             
                  else
         | 
| @@ -75,6 +88,7 @@ module ChefSpec | |
| 75 88 | 
             
                  end
         | 
| 76 89 | 
             
                  runner = Chef::Runner.new(run_context)
         | 
| 77 90 | 
             
                  runner.converge
         | 
| 91 | 
            +
                  self
         | 
| 78 92 | 
             
                end
         | 
| 79 93 |  | 
| 80 94 | 
             
                # Find any directory declared with the given path
         | 
| @@ -93,8 +107,29 @@ module ChefSpec | |
| 93 107 | 
             
                  find_resource('file', path)
         | 
| 94 108 | 
             
                end
         | 
| 95 109 |  | 
| 110 | 
            +
                # This runner as a string.
         | 
| 111 | 
            +
                #
         | 
| 112 | 
            +
                # @return [String] Currently includes the run_list. Format of the string may change between versions of this gem.
         | 
| 113 | 
            +
                def to_s
         | 
| 114 | 
            +
                  return "chef_run: #{@node.run_list.to_s}" unless @node.run_list.empty?
         | 
| 115 | 
            +
                  'chef_run'
         | 
| 116 | 
            +
                end
         | 
| 117 | 
            +
             | 
| 96 118 | 
             
                private
         | 
| 97 119 |  | 
| 120 | 
            +
                # Populate basic OHAI attributes required to get recipes working. This is a minimal set - if your recipe example
         | 
| 121 | 
            +
                # does conditional execution based on these values or additional attributes you can set these via
         | 
| 122 | 
            +
                # node.automatic_attrs.
         | 
| 123 | 
            +
                #
         | 
| 124 | 
            +
                # @param [Ohai::System] ohai The ohai instance to set fake attributes on
         | 
| 125 | 
            +
                def fake_ohai(ohai)
         | 
| 126 | 
            +
                  {:os => 'chefspec', :os_version => ChefSpec::VERSION, :fqdn => 'chefspec.local', :domain => 'local',
         | 
| 127 | 
            +
                   :ipaddress => '127.0.0.1', :hostname => 'chefspec',
         | 
| 128 | 
            +
                   :kernel => Mash.new({:machine => 'i386'})}.each_pair do |attribute,value|
         | 
| 129 | 
            +
                    ohai[attribute] = value
         | 
| 130 | 
            +
                  end
         | 
| 131 | 
            +
                end
         | 
| 132 | 
            +
             | 
| 98 133 | 
             
                # Infer the default cookbook path from the location of the calling spec.
         | 
| 99 134 | 
             
                #
         | 
| 100 135 | 
             
                # @return [String] The path to the cookbooks directory
         | 
| @@ -0,0 +1,27 @@ | |
| 1 | 
            +
            # Override Chef LWRP creation to remove existing class to avoid redefinition warnings.
         | 
| 2 | 
            +
            class Chef
         | 
| 3 | 
            +
              class Provider
         | 
| 4 | 
            +
                class << self
         | 
| 5 | 
            +
                  alias :old_build_from_file :build_from_file
         | 
| 6 | 
            +
             | 
| 7 | 
            +
                  def build_from_file(cookbook_name, filename, run_context)
         | 
| 8 | 
            +
                    remove_existing_lwrp(convert_to_class_name(filename_to_qualified_string(cookbook_name, filename)))
         | 
| 9 | 
            +
                    old_build_from_file(cookbook_name, filename, run_context)
         | 
| 10 | 
            +
                  end
         | 
| 11 | 
            +
             | 
| 12 | 
            +
                  # Remove any existing Chef provider or resource with the specified name.
         | 
| 13 | 
            +
                  #
         | 
| 14 | 
            +
                  # @param [String] class_name The class name. Must be a valid constant name.
         | 
| 15 | 
            +
                  def remove_existing_lwrp(class_name)
         | 
| 16 | 
            +
                    [Chef::Resource, Chef::Provider].each do |resource_holder|
         | 
| 17 | 
            +
                      if resource_holder.const_defined? class_name
         | 
| 18 | 
            +
                        resource_holder.send(:remove_const, class_name)
         | 
| 19 | 
            +
                      end
         | 
| 20 | 
            +
                    end
         | 
| 21 | 
            +
                  end
         | 
| 22 | 
            +
             | 
| 23 | 
            +
                end
         | 
| 24 | 
            +
              end
         | 
| 25 | 
            +
            end
         | 
| 26 | 
            +
             | 
| 27 | 
            +
             | 
    
        metadata
    CHANGED
    
    | @@ -1,70 +1,47 @@ | |
| 1 | 
            -
            --- !ruby/object:Gem::Specification | 
| 1 | 
            +
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: chefspec
         | 
| 3 | 
            -
            version: !ruby/object:Gem::Version | 
| 4 | 
            -
               | 
| 3 | 
            +
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            +
              version: 0.2.0
         | 
| 5 5 | 
             
              prerelease: 
         | 
| 6 | 
            -
              segments: 
         | 
| 7 | 
            -
              - 0
         | 
| 8 | 
            -
              - 1
         | 
| 9 | 
            -
              - 0
         | 
| 10 | 
            -
              version: 0.1.0
         | 
| 11 6 | 
             
            platform: ruby
         | 
| 12 | 
            -
            authors: | 
| 7 | 
            +
            authors:
         | 
| 13 8 | 
             
            - Andrew Crump
         | 
| 14 9 | 
             
            autorequire: 
         | 
| 15 10 | 
             
            bindir: bin
         | 
| 16 11 | 
             
            cert_chain: []
         | 
| 17 | 
            -
             | 
| 18 | 
            -
             | 
| 19 | 
            -
             | 
| 20 | 
            -
             | 
| 21 | 
            -
               | 
| 12 | 
            +
            date: 2011-09-21 00:00:00.000000000Z
         | 
| 13 | 
            +
            dependencies:
         | 
| 14 | 
            +
            - !ruby/object:Gem::Dependency
         | 
| 15 | 
            +
              name: chef
         | 
| 16 | 
            +
              requirement: &2156420500 !ruby/object:Gem::Requirement
         | 
| 22 17 | 
             
                none: false
         | 
| 23 | 
            -
                requirements: | 
| 24 | 
            -
                - -  | 
| 25 | 
            -
                  - !ruby/object:Gem::Version | 
| 26 | 
            -
                    hash: 35
         | 
| 27 | 
            -
                    segments: 
         | 
| 28 | 
            -
                    - 0
         | 
| 29 | 
            -
                    - 9
         | 
| 30 | 
            -
                    - 12
         | 
| 18 | 
            +
                requirements:
         | 
| 19 | 
            +
                - - ! '>='
         | 
| 20 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 31 21 | 
             
                    version: 0.9.12
         | 
| 32 22 | 
             
                - - ~>
         | 
| 33 | 
            -
                  - !ruby/object:Gem::Version | 
| 34 | 
            -
                     | 
| 35 | 
            -
                    segments: 
         | 
| 36 | 
            -
                    - 0
         | 
| 37 | 
            -
                    - 10
         | 
| 38 | 
            -
                    version: "0.10"
         | 
| 39 | 
            -
              name: chef
         | 
| 23 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 24 | 
            +
                    version: '0.10'
         | 
| 40 25 | 
             
              type: :runtime
         | 
| 41 26 | 
             
              prerelease: false
         | 
| 42 | 
            -
               | 
| 43 | 
            -
            - !ruby/object:Gem::Dependency | 
| 44 | 
            -
               | 
| 27 | 
            +
              version_requirements: *2156420500
         | 
| 28 | 
            +
            - !ruby/object:Gem::Dependency
         | 
| 29 | 
            +
              name: rspec
         | 
| 30 | 
            +
              requirement: &2156417840 !ruby/object:Gem::Requirement
         | 
| 45 31 | 
             
                none: false
         | 
| 46 | 
            -
                requirements: | 
| 47 | 
            -
                - -  | 
| 48 | 
            -
                  - !ruby/object:Gem::Version | 
| 49 | 
            -
                    hash: 23
         | 
| 50 | 
            -
                    segments: 
         | 
| 51 | 
            -
                    - 2
         | 
| 52 | 
            -
                    - 6
         | 
| 53 | 
            -
                    - 0
         | 
| 32 | 
            +
                requirements:
         | 
| 33 | 
            +
                - - ! '>='
         | 
| 34 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 54 35 | 
             
                    version: 2.6.0
         | 
| 55 | 
            -
              name: rspec
         | 
| 56 36 | 
             
              type: :runtime
         | 
| 57 37 | 
             
              prerelease: false
         | 
| 58 | 
            -
               | 
| 38 | 
            +
              version_requirements: *2156417840
         | 
| 59 39 | 
             
            description: Write RSpec examples for Opscode Chef recipes
         | 
| 60 40 | 
             
            email: 
         | 
| 61 41 | 
             
            executables: []
         | 
| 62 | 
            -
             | 
| 63 42 | 
             
            extensions: []
         | 
| 64 | 
            -
             | 
| 65 43 | 
             
            extra_rdoc_files: []
         | 
| 66 | 
            -
             | 
| 67 | 
            -
            files: 
         | 
| 44 | 
            +
            files:
         | 
| 68 45 | 
             
            - lib/chefspec/chef_runner.rb
         | 
| 69 46 | 
             
            - lib/chefspec/matchers/execute.rb
         | 
| 70 47 | 
             
            - lib/chefspec/matchers/file.rb
         | 
| @@ -73,39 +50,38 @@ files: | |
| 73 50 | 
             
            - lib/chefspec/matchers/service.rb
         | 
| 74 51 | 
             
            - lib/chefspec/matchers/shared.rb
         | 
| 75 52 | 
             
            - lib/chefspec/monkey_patches/hash.rb
         | 
| 53 | 
            +
            - lib/chefspec/monkey_patches/provider.rb
         | 
| 54 | 
            +
            - lib/chefspec/version.rb
         | 
| 76 55 | 
             
            - lib/chefspec.rb
         | 
| 77 56 | 
             
            homepage: http://acrmp.github.com/chefspec
         | 
| 78 | 
            -
            licenses: | 
| 57 | 
            +
            licenses:
         | 
| 79 58 | 
             
            - MIT
         | 
| 80 59 | 
             
            post_install_message: 
         | 
| 81 60 | 
             
            rdoc_options: []
         | 
| 82 | 
            -
             | 
| 83 | 
            -
            require_paths: 
         | 
| 61 | 
            +
            require_paths:
         | 
| 84 62 | 
             
            - lib
         | 
| 85 | 
            -
            required_ruby_version: !ruby/object:Gem::Requirement | 
| 63 | 
            +
            required_ruby_version: !ruby/object:Gem::Requirement
         | 
| 86 64 | 
             
              none: false
         | 
| 87 | 
            -
              requirements: | 
| 88 | 
            -
              - -  | 
| 89 | 
            -
                - !ruby/object:Gem::Version | 
| 90 | 
            -
                   | 
| 91 | 
            -
                  segments: | 
| 65 | 
            +
              requirements:
         | 
| 66 | 
            +
              - - ! '>='
         | 
| 67 | 
            +
                - !ruby/object:Gem::Version
         | 
| 68 | 
            +
                  version: '0'
         | 
| 69 | 
            +
                  segments:
         | 
| 92 70 | 
             
                  - 0
         | 
| 93 | 
            -
                   | 
| 94 | 
            -
            required_rubygems_version: !ruby/object:Gem::Requirement | 
| 71 | 
            +
                  hash: 2232582329296012492
         | 
| 72 | 
            +
            required_rubygems_version: !ruby/object:Gem::Requirement
         | 
| 95 73 | 
             
              none: false
         | 
| 96 | 
            -
              requirements: | 
| 97 | 
            -
              - -  | 
| 98 | 
            -
                - !ruby/object:Gem::Version | 
| 99 | 
            -
                   | 
| 100 | 
            -
                  segments: | 
| 74 | 
            +
              requirements:
         | 
| 75 | 
            +
              - - ! '>='
         | 
| 76 | 
            +
                - !ruby/object:Gem::Version
         | 
| 77 | 
            +
                  version: '0'
         | 
| 78 | 
            +
                  segments:
         | 
| 101 79 | 
             
                  - 0
         | 
| 102 | 
            -
                   | 
| 80 | 
            +
                  hash: 2232582329296012492
         | 
| 103 81 | 
             
            requirements: []
         | 
| 104 | 
            -
             | 
| 105 82 | 
             
            rubyforge_project: 
         | 
| 106 83 | 
             
            rubygems_version: 1.8.6
         | 
| 107 84 | 
             
            signing_key: 
         | 
| 108 85 | 
             
            specification_version: 3
         | 
| 109 | 
            -
            summary: chefspec-0. | 
| 86 | 
            +
            summary: chefspec-0.2.0
         | 
| 110 87 | 
             
            test_files: []
         | 
| 111 | 
            -
             |