summaryrefslogtreecommitdiff
path: root/spec/support/shared/unit/resource/static_provider_resolution.rb
blob: 147852598a732509f98b3446e3a76d37dc395461 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
#
# Author:: Lamont Granquist (<lamont@chef.io>)
# Copyright:: Copyright (c) 2014 Chef Software, Inc.
# License:: Apache License, Version 2.0
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#



#
# This is for typical "static" provider resolution which maps resources onto
# providers based only on the node data.  Its not really 'static' because it
# all goes through the Chef::ProviderResolver, but the effective result is
# a static mapping for the node (unlike the service resource which is
# complicated).
#
def static_provider_resolution(opts={})
  action           = opts[:action]
  provider_class   = opts[:provider]
  resource_class   = opts[:resource]
  name             = opts[:name]
  os               = opts[:os]
  platform_family  = opts[:platform_family]
  platform_version = opts[:platform_version]

  describe resource_class, "static provider initialization" do
    let(:node) {
      node = Chef::Node.new
      node.automatic_attrs[:os] = os
      node.automatic_attrs[:platform_family] = platform_family
      node.automatic_attrs[:platform_version] = platform_version
      node
    }
    let(:events) { Chef::EventDispatch::Dispatcher.new }
    let(:provider_resolver) { Chef::ProviderResolver.new(node) }
    let(:run_context) {
      run_context = Chef::RunContext.new(node, {}, events)
      run_context.provider_resolver = provider_resolver
      run_context
    }
    let(:resource) { resource_class.new("foo", run_context) }

    it "should return a #{resource_class}" do
      expect(resource).to be_a_kind_of(resource_class)
    end

    it "should set the resource_name to #{name}" do
      expect(resource.resource_name).to eql(name)
    end

    it "should leave the provider nil" do
      expect(resource.provider).to eql(nil)
    end

    it "should resolve to a #{provider_class}" do
      expect(resource.provider_for_action(action)).to be_a(provider_class)
    end
  end
end