puppet 4.5.0-x64-mingw32 → 4.5.1-x64-mingw32
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.
Potentially problematic release.
This version of puppet might be problematic. Click here for more details.
- data/ext/README.environment +1 -1
 - data/lib/puppet/data_providers.rb +1 -1
 - data/lib/puppet/data_providers/lookup_adapter.rb +21 -14
 - data/lib/puppet/defaults.rb +5 -5
 - data/lib/puppet/parser/compiler.rb +1 -1
 - data/lib/puppet/pops/evaluator/runtime3_support.rb +1 -1
 - data/lib/puppet/pops/types/type_mismatch_describer.rb +38 -0
 - data/lib/puppet/pops/types/types.rb +14 -37
 - data/lib/puppet/settings/config_file.rb +1 -1
 - data/lib/puppet/type.rb +3 -1
 - data/lib/puppet/version.rb +1 -1
 - data/spec/fixtures/unit/data_providers/environments/hiera_module_config/modules/one/data1/name.yaml +1 -0
 - data/spec/fixtures/unit/data_providers/environments/hiera_module_config/modules/one/data1/server1.yaml +1 -0
 - data/spec/fixtures/unit/data_providers/environments/hiera_module_config/modules/one/data1/server2.yaml +1 -0
 - data/spec/fixtures/unit/data_providers/environments/hiera_module_config/modules/one/hiera.yaml +2 -0
 - data/spec/unit/data_providers/hiera_data_provider_spec.rb +22 -2
 - data/spec/unit/pops/types/type_calculator_spec.rb +12 -0
 - data/spec/unit/pops/types/type_mismatch_describer_spec.rb +21 -1
 - data/spec/unit/pops/types/types_spec.rb +16 -0
 - data/spec/unit/type_spec.rb +72 -0
 - data/spec/unit/util/monkey_patches_spec.rb +16 -0
 - metadata +6 -2
 
    
        data/ext/README.environment
    CHANGED
    
    
| 
         @@ -1,6 +1,8 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            # A LookupAdapter is a specialized DataAdapter that uses its hash to store module providers. It also remembers the  
     | 
| 
       2 
     | 
    
         
            -
            # that it is attached to and maintains a cache of _lookup options_ retrieved from  
     | 
| 
      
 1 
     | 
    
         
            +
            # A LookupAdapter is a specialized DataAdapter that uses its hash to store module providers. It also remembers the compiler
         
     | 
| 
      
 2 
     | 
    
         
            +
            # that it is attached to and maintains a cache of _lookup options_ retrieved from the data providers associated with the
         
     | 
| 
      
 3 
     | 
    
         
            +
            # compiler's environment.
         
     | 
| 
       3 
4 
     | 
    
         
             
            #
         
     | 
| 
      
 5 
     | 
    
         
            +
            # @api private
         
     | 
| 
       4 
6 
     | 
    
         
             
            class Puppet::DataProviders::LookupAdapter < Puppet::DataProviders::DataAdapter
         
     | 
| 
       5 
7 
     | 
    
         | 
| 
       6 
8 
     | 
    
         
             
              LOOKUP_OPTIONS = Puppet::Pops::Lookup::LOOKUP_OPTIONS
         
     | 
| 
         @@ -9,13 +11,13 @@ class Puppet::DataProviders::LookupAdapter < Puppet::DataProviders::DataAdapter 
     | 
|
| 
       9 
11 
     | 
    
         
             
              HASH = 'hash'.freeze
         
     | 
| 
       10 
12 
     | 
    
         
             
              MERGE = 'merge'.freeze
         
     | 
| 
       11 
13 
     | 
    
         | 
| 
       12 
     | 
    
         
            -
              def self.create_adapter( 
     | 
| 
       13 
     | 
    
         
            -
                new( 
     | 
| 
      
 14 
     | 
    
         
            +
              def self.create_adapter(compiler)
         
     | 
| 
      
 15 
     | 
    
         
            +
                new(compiler)
         
     | 
| 
       14 
16 
     | 
    
         
             
              end
         
     | 
| 
       15 
17 
     | 
    
         | 
| 
       16 
     | 
    
         
            -
              def initialize( 
     | 
| 
      
 18 
     | 
    
         
            +
              def initialize(compiler)
         
     | 
| 
       17 
19 
     | 
    
         
             
                super()
         
     | 
| 
       18 
     | 
    
         
            -
                @ 
     | 
| 
      
 20 
     | 
    
         
            +
                @compiler = compiler
         
     | 
| 
       19 
21 
     | 
    
         
             
                @lookup_options = {}
         
     | 
| 
       20 
22 
     | 
    
         
             
              end
         
     | 
| 
       21 
23 
     | 
    
         | 
| 
         @@ -77,7 +79,7 @@ class Puppet::DataProviders::LookupAdapter < Puppet::DataProviders::DataAdapter 
     | 
|
| 
       77 
79 
     | 
    
         
             
                lookup_invocation.with(:global, terminus) do
         
     | 
| 
       78 
80 
     | 
    
         
             
                  catch(:no_such_key) do
         
     | 
| 
       79 
81 
     | 
    
         
             
                    return lookup_invocation.report_found(name, Puppet::DataBinding.indirection.find(name,
         
     | 
| 
       80 
     | 
    
         
            -
                        { :environment =>  
     | 
| 
      
 82 
     | 
    
         
            +
                        { :environment => environment, :variables => lookup_invocation.scope, :merge => merge_strategy }))
         
     | 
| 
       81 
83 
     | 
    
         
             
                  end
         
     | 
| 
       82 
84 
     | 
    
         
             
                  lookup_invocation.report_not_found(name)
         
     | 
| 
       83 
85 
     | 
    
         
             
                  throw :no_such_key
         
     | 
| 
         @@ -101,7 +103,7 @@ class Puppet::DataProviders::LookupAdapter < Puppet::DataProviders::DataAdapter 
     | 
|
| 
       101 
103 
     | 
    
         
             
                throw :no_such_key if module_name.nil?
         
     | 
| 
       102 
104 
     | 
    
         | 
| 
       103 
105 
     | 
    
         
             
                lookup_invocation.with(:module, module_name) do
         
     | 
| 
       104 
     | 
    
         
            -
                  if  
     | 
| 
      
 106 
     | 
    
         
            +
                  if environment.module(module_name).nil?
         
     | 
| 
       105 
107 
     | 
    
         
             
                    lookup_invocation.report_module_not_found
         
     | 
| 
       106 
108 
     | 
    
         
             
                    throw :no_such_key
         
     | 
| 
       107 
109 
     | 
    
         
             
                  end
         
     | 
| 
         @@ -157,7 +159,7 @@ class Puppet::DataProviders::LookupAdapter < Puppet::DataProviders::DataAdapter 
     | 
|
| 
       157 
159 
     | 
    
         
             
                meta_invocation = Puppet::Pops::Lookup::Invocation.new(lookup_invocation.scope)
         
     | 
| 
       158 
160 
     | 
    
         
             
                meta_invocation.top_key = lookup_invocation.top_key
         
     | 
| 
       159 
161 
     | 
    
         
             
                env_opts = env_lookup_options(meta_invocation, merge_strategy)
         
     | 
| 
       160 
     | 
    
         
            -
                unless module_name.nil? ||  
     | 
| 
      
 162 
     | 
    
         
            +
                unless module_name.nil? || environment.module(module_name).nil?
         
     | 
| 
       161 
163 
     | 
    
         
             
                  catch(:no_such_key) do
         
     | 
| 
       162 
164 
     | 
    
         
             
                    meta_invocation.module_name = module_name
         
     | 
| 
       163 
165 
     | 
    
         
             
                    options = module_provider(module_name).lookup(LOOKUP_OPTIONS, meta_invocation, merge_strategy)
         
     | 
| 
         @@ -168,7 +170,7 @@ class Puppet::DataProviders::LookupAdapter < Puppet::DataProviders::DataAdapter 
     | 
|
| 
       168 
170 
     | 
    
         
             
                env_opts
         
     | 
| 
       169 
171 
     | 
    
         
             
              end
         
     | 
| 
       170 
172 
     | 
    
         | 
| 
       171 
     | 
    
         
            -
              # Retrieve and cache lookup options specific to the environment that this adapter is attached to (i.e. a merge
         
     | 
| 
      
 173 
     | 
    
         
            +
              # Retrieve and cache lookup options specific to the environment of the compiler that this adapter is attached to (i.e. a merge
         
     | 
| 
       172 
174 
     | 
    
         
             
              # of global and environment lookup options).
         
     | 
| 
       173 
175 
     | 
    
         
             
              def env_lookup_options(meta_invocation, merge_strategy)
         
     | 
| 
       174 
176 
     | 
    
         
             
                if !instance_variable_defined?(:@env_lookup_options)
         
     | 
| 
         @@ -214,9 +216,9 @@ class Puppet::DataProviders::LookupAdapter < Puppet::DataProviders::DataAdapter 
     | 
|
| 
       214 
216 
     | 
    
         
             
                service = injector.lookup(nil, service_type, service_name)
         
     | 
| 
       215 
217 
     | 
    
         
             
                provider = service[provider_name]
         
     | 
| 
       216 
218 
     | 
    
         
             
                unless provider
         
     | 
| 
       217 
     | 
    
         
            -
                  raise Puppet::Error.new("Environment '#{ 
     | 
| 
      
 219 
     | 
    
         
            +
                  raise Puppet::Error.new("Environment '#{environment.name}', cannot find module_data_provider '#{provider_name}'")
         
     | 
| 
       218 
220 
     | 
    
         
             
                end
         
     | 
| 
       219 
     | 
    
         
            -
                # Provider is configured per module but cached using  
     | 
| 
      
 221 
     | 
    
         
            +
                # Provider is configured per module but cached using compiler life cycle so it must be cloned
         
     | 
| 
       220 
222 
     | 
    
         
             
                provider.clone
         
     | 
| 
       221 
223 
     | 
    
         
             
              end
         
     | 
| 
       222 
224 
     | 
    
         | 
| 
         @@ -227,7 +229,7 @@ class Puppet::DataProviders::LookupAdapter < Puppet::DataProviders::DataAdapter 
     | 
|
| 
       227 
229 
     | 
    
         
             
                return EnvironmentDataProvider.new() unless injector
         
     | 
| 
       228 
230 
     | 
    
         | 
| 
       229 
231 
     | 
    
         
             
                # Get the name of the data provider from the environment's configuration and find the bound implementation
         
     | 
| 
       230 
     | 
    
         
            -
                provider_name =  
     | 
| 
      
 232 
     | 
    
         
            +
                provider_name = environment.configuration.environment_data_provider
         
     | 
| 
       231 
233 
     | 
    
         
             
                service_type = Registry.hash_of_environment_data_providers
         
     | 
| 
       232 
234 
     | 
    
         
             
                service_name = ENV_DATA_PROVIDERS_KEY
         
     | 
| 
       233 
235 
     | 
    
         | 
| 
         @@ -235,7 +237,7 @@ class Puppet::DataProviders::LookupAdapter < Puppet::DataProviders::DataAdapter 
     | 
|
| 
       235 
237 
     | 
    
         
             
                service = injector.lookup(nil, service_type, service_name)
         
     | 
| 
       236 
238 
     | 
    
         
             
                provider = service[provider_name]
         
     | 
| 
       237 
239 
     | 
    
         
             
                unless provider
         
     | 
| 
       238 
     | 
    
         
            -
                  raise Puppet::Error.new("Environment '#{ 
     | 
| 
      
 240 
     | 
    
         
            +
                  raise Puppet::Error.new("Environment '#{environment.name}', cannot find environment_data_provider '#{provider_name}'")
         
     | 
| 
       239 
241 
     | 
    
         
             
                end
         
     | 
| 
       240 
242 
     | 
    
         
             
                provider
         
     | 
| 
       241 
243 
     | 
    
         
             
              end
         
     | 
| 
         @@ -244,4 +246,9 @@ class Puppet::DataProviders::LookupAdapter < Puppet::DataProviders::DataAdapter 
     | 
|
| 
       244 
246 
     | 
    
         
             
                qual_index = name.index('::')
         
     | 
| 
       245 
247 
     | 
    
         
             
                qual_index.nil? ? nil : name[0..qual_index-1]
         
     | 
| 
       246 
248 
     | 
    
         
             
              end
         
     | 
| 
      
 249 
     | 
    
         
            +
             
     | 
| 
      
 250 
     | 
    
         
            +
              # @return [Puppet::Node::Environment] the environment of the compiler that this adapter is associated with
         
     | 
| 
      
 251 
     | 
    
         
            +
              def environment
         
     | 
| 
      
 252 
     | 
    
         
            +
                @compiler.environment
         
     | 
| 
      
 253 
     | 
    
         
            +
              end
         
     | 
| 
       247 
254 
     | 
    
         
             
            end
         
     | 
    
        data/lib/puppet/defaults.rb
    CHANGED
    
    | 
         @@ -308,7 +308,7 @@ module Puppet 
     | 
|
| 
       308 
308 
     | 
    
         | 
| 
       309 
309 
     | 
    
         
             
                    This setting must have a value set to enable **directory environments.** The
         
     | 
| 
       310 
310 
     | 
    
         
             
                    recommended value is `$codedir/environments`. For more details, see
         
     | 
| 
       311 
     | 
    
         
            -
                    https://docs. 
     | 
| 
      
 311 
     | 
    
         
            +
                    <https://docs.puppet.com/puppet/latest/reference/environments.html>",
         
     | 
| 
       312 
312 
     | 
    
         
             
                  :type    => :path,
         
     | 
| 
       313 
313 
     | 
    
         
             
                },
         
     | 
| 
       314 
314 
     | 
    
         
             
                :always_cache_features => {
         
     | 
| 
         @@ -1077,7 +1077,7 @@ EOT 
     | 
|
| 
       1077 
1077 
     | 
    
         
             
                    directory environments instead. If you need to use something other than the
         
     | 
| 
       1078 
1078 
     | 
    
         
             
                    environment's `manifests` directory as the main manifest, you can set
         
     | 
| 
       1079 
1079 
     | 
    
         
             
                    `manifest` in environment.conf. For more info, see
         
     | 
| 
       1080 
     | 
    
         
            -
                    https://docs. 
     | 
| 
      
 1080 
     | 
    
         
            +
                    <https://docs.puppet.com/puppet/latest/reference/environments.html>",
         
     | 
| 
       1081 
1081 
     | 
    
         
             
                },
         
     | 
| 
       1082 
1082 
     | 
    
         
             
                :modulepath => {
         
     | 
| 
       1083 
1083 
     | 
    
         
             
                  :default => "",
         
     | 
| 
         @@ -1091,7 +1091,7 @@ EOT 
     | 
|
| 
       1091 
1091 
     | 
    
         
             
                    directory environments instead. If you need to use something other than the
         
     | 
| 
       1092 
1092 
     | 
    
         
             
                    default modulepath of `<ACTIVE ENVIRONMENT'S MODULES DIR>:$basemodulepath`,
         
     | 
| 
       1093 
1093 
     | 
    
         
             
                    you can set `modulepath` in environment.conf. For more info, see
         
     | 
| 
       1094 
     | 
    
         
            -
                    https://docs. 
     | 
| 
      
 1094 
     | 
    
         
            +
                    <https://docs.puppet.com/puppet/latest/reference/environments.html>",
         
     | 
| 
       1095 
1095 
     | 
    
         
             
                },
         
     | 
| 
       1096 
1096 
     | 
    
         
             
                :config_version => {
         
     | 
| 
       1097 
1097 
     | 
    
         
             
                  :default    => "",
         
     | 
| 
         @@ -1103,7 +1103,7 @@ EOT 
     | 
|
| 
       1103 
1103 
     | 
    
         
             
                  Setting a global value for config_version in puppet.conf is not allowed
         
     | 
| 
       1104 
1104 
     | 
    
         
             
                  (but it can be overridden from the commandline). Please set a
         
     | 
| 
       1105 
1105 
     | 
    
         
             
                  per-environment value in environment.conf instead. For more info, see
         
     | 
| 
       1106 
     | 
    
         
            -
                  https://docs. 
     | 
| 
      
 1106 
     | 
    
         
            +
                  <https://docs.puppet.com/puppet/latest/reference/environments.html>",
         
     | 
| 
       1107 
1107 
     | 
    
         
             
                }
         
     | 
| 
       1108 
1108 
     | 
    
         
             
              )
         
     | 
| 
       1109 
1109 
     | 
    
         | 
| 
         @@ -1215,7 +1215,7 @@ EOT 
     | 
|
| 
       1215 
1215 
     | 
    
         
             
                    These are the modules that will be used by _all_ environments. Note that
         
     | 
| 
       1216 
1216 
     | 
    
         
             
                    the `modules` directory of the active environment will have priority over
         
     | 
| 
       1217 
1217 
     | 
    
         
             
                    any global directories. For more info, see
         
     | 
| 
       1218 
     | 
    
         
            -
                    https://docs. 
     | 
| 
      
 1218 
     | 
    
         
            +
                    <https://docs.puppet.com/puppet/latest/reference/environments.html>",
         
     | 
| 
       1219 
1219 
     | 
    
         
             
                },
         
     | 
| 
       1220 
1220 
     | 
    
         
             
                :ssl_client_header => {
         
     | 
| 
       1221 
1221 
     | 
    
         
             
                  :default    => "HTTP_X_CLIENT_DN",
         
     | 
| 
         @@ -27,7 +27,7 @@ class Puppet::Parser::Compiler 
     | 
|
| 
       27 
27 
     | 
    
         
             
                  errors.each { |e| Puppet.err(e) } if errors.size > 1
         
     | 
| 
       28 
28 
     | 
    
         
             
                  errmsg = [
         
     | 
| 
       29 
29 
     | 
    
         
             
                    "Compilation has been halted because: #{errors.first}",
         
     | 
| 
       30 
     | 
    
         
            -
                    "For more information, see https://docs. 
     | 
| 
      
 30 
     | 
    
         
            +
                    "For more information, see https://docs.puppet.com/puppet/latest/reference/environments.html",
         
     | 
| 
       31 
31 
     | 
    
         
             
                  ]
         
     | 
| 
       32 
32 
     | 
    
         
             
                  raise(Puppet::Error, errmsg.join(' '))
         
     | 
| 
       33 
33 
     | 
    
         
             
                end
         
     | 
| 
         @@ -82,7 +82,7 @@ module Runtime3Support 
     | 
|
| 
       82 
82 
     | 
    
         
             
                  # Must convert :undef back to nil - this can happen when an undefined variable is used in a
         
     | 
| 
       83 
83 
     | 
    
         
             
                  # parameter's default value expression - there nil must be :undef to work with the rest of 3x.
         
     | 
| 
       84 
84 
     | 
    
         
             
                  # Now that the value comes back to 4x it is changed to nil.
         
     | 
| 
       85 
     | 
    
         
            -
                  return :undef 
     | 
| 
      
 85 
     | 
    
         
            +
                  return :undef.equal?(x) ? nil : x
         
     | 
| 
       86 
86 
     | 
    
         
             
                }
         
     | 
| 
       87 
87 
     | 
    
         
             
                # It is always ok to reference numeric variables even if they are not assigned. They are always undef
         
     | 
| 
       88 
88 
     | 
    
         
             
                # if not set by a match expression.
         
     | 
| 
         @@ -745,6 +745,34 @@ module Types 
     | 
|
| 
       745 
745 
     | 
    
         
             
                  end
         
     | 
| 
       746 
746 
     | 
    
         
             
                end
         
     | 
| 
       747 
747 
     | 
    
         | 
| 
      
 748 
     | 
    
         
            +
                def describe_PArrayType(expected, actual, path)
         
     | 
| 
      
 749 
     | 
    
         
            +
                  descriptions = []
         
     | 
| 
      
 750 
     | 
    
         
            +
                  element_type = expected.element_type || PAnyType::DEFAULT
         
     | 
| 
      
 751 
     | 
    
         
            +
                  if actual.is_a?(PTupleType)
         
     | 
| 
      
 752 
     | 
    
         
            +
                    types = actual.types
         
     | 
| 
      
 753 
     | 
    
         
            +
                    expected_size = expected.size_type || PCollectionType::DEFAULT_SIZE
         
     | 
| 
      
 754 
     | 
    
         
            +
                    actual_size = actual.size_type || PIntegerType.new(types.size, types.size)
         
     | 
| 
      
 755 
     | 
    
         
            +
                    if expected_size.assignable?(actual_size)
         
     | 
| 
      
 756 
     | 
    
         
            +
                      types.each_with_index do |type, idx|
         
     | 
| 
      
 757 
     | 
    
         
            +
                        descriptions.concat(describe(element_type, type, path + [ArrayPathElement.new(idx)])) unless element_type.assignable?(type)
         
     | 
| 
      
 758 
     | 
    
         
            +
                      end
         
     | 
| 
      
 759 
     | 
    
         
            +
                    else
         
     | 
| 
      
 760 
     | 
    
         
            +
                      descriptions << SizeMismatch.new(path, expected_size, actual_size)
         
     | 
| 
      
 761 
     | 
    
         
            +
                    end
         
     | 
| 
      
 762 
     | 
    
         
            +
                  elsif actual.is_a?(PArrayType)
         
     | 
| 
      
 763 
     | 
    
         
            +
                    expected_size = expected.size_type
         
     | 
| 
      
 764 
     | 
    
         
            +
                    actual_size = actual.size_type || PCollectionType::DEFAULT_SIZE
         
     | 
| 
      
 765 
     | 
    
         
            +
                    if expected_size.nil? || expected_size.assignable?(actual_size)
         
     | 
| 
      
 766 
     | 
    
         
            +
                      descriptions << TypeMismatch.new(path, expected, actual)
         
     | 
| 
      
 767 
     | 
    
         
            +
                    else
         
     | 
| 
      
 768 
     | 
    
         
            +
                      descriptions << SizeMismatch.new(path, expected_size, actual_size)
         
     | 
| 
      
 769 
     | 
    
         
            +
                    end
         
     | 
| 
      
 770 
     | 
    
         
            +
                  else
         
     | 
| 
      
 771 
     | 
    
         
            +
                    descriptions << TypeMismatch.new(path, expected, actual)
         
     | 
| 
      
 772 
     | 
    
         
            +
                  end
         
     | 
| 
      
 773 
     | 
    
         
            +
                  descriptions
         
     | 
| 
      
 774 
     | 
    
         
            +
                end
         
     | 
| 
      
 775 
     | 
    
         
            +
             
     | 
| 
       748 
776 
     | 
    
         
             
                def describe_PHashType(expected, actual, path)
         
     | 
| 
       749 
777 
     | 
    
         
             
                  descriptions = []
         
     | 
| 
       750 
778 
     | 
    
         
             
                  key_type = expected.key_type || PAnyType::DEFAULT
         
     | 
| 
         @@ -761,6 +789,14 @@ module Types 
     | 
|
| 
       761 
789 
     | 
    
         
             
                    else
         
     | 
| 
       762 
790 
     | 
    
         
             
                      descriptions << SizeMismatch.new(path, expected_size, actual_size)
         
     | 
| 
       763 
791 
     | 
    
         
             
                    end
         
     | 
| 
      
 792 
     | 
    
         
            +
                  elsif actual.is_a?(PHashType)
         
     | 
| 
      
 793 
     | 
    
         
            +
                    expected_size = expected.size_type
         
     | 
| 
      
 794 
     | 
    
         
            +
                    actual_size = actual.size_type || PCollectionType::DEFAULT_SIZE
         
     | 
| 
      
 795 
     | 
    
         
            +
                    if expected_size.nil? || expected_size.assignable?(actual_size)
         
     | 
| 
      
 796 
     | 
    
         
            +
                      descriptions << TypeMismatch.new(path, expected, actual)
         
     | 
| 
      
 797 
     | 
    
         
            +
                    else
         
     | 
| 
      
 798 
     | 
    
         
            +
                      descriptions << SizeMismatch.new(path, expected_size, actual_size)
         
     | 
| 
      
 799 
     | 
    
         
            +
                    end
         
     | 
| 
       764 
800 
     | 
    
         
             
                  else
         
     | 
| 
       765 
801 
     | 
    
         
             
                    descriptions << TypeMismatch.new(path, expected, actual)
         
     | 
| 
       766 
802 
     | 
    
         
             
                  end
         
     | 
| 
         @@ -915,6 +951,8 @@ module Types 
     | 
|
| 
       915 
951 
     | 
    
         
             
                      describe_PHashType(expected, actual, path)
         
     | 
| 
       916 
952 
     | 
    
         
             
                    when PTupleType
         
     | 
| 
       917 
953 
     | 
    
         
             
                      describe_PTupleType(expected, actual, path)
         
     | 
| 
      
 954 
     | 
    
         
            +
                    when PArrayType
         
     | 
| 
      
 955 
     | 
    
         
            +
                      describe_PArrayType(expected, actual, path)
         
     | 
| 
       918 
956 
     | 
    
         
             
                    when PCallableType
         
     | 
| 
       919 
957 
     | 
    
         
             
                      describe_PCallableType(expected, actual, path)
         
     | 
| 
       920 
958 
     | 
    
         
             
                    when POptionalType
         
     | 
| 
         @@ -292,20 +292,6 @@ class PAnyType < TypedModelObject 
     | 
|
| 
       292 
292 
     | 
    
         
             
                end
         
     | 
| 
       293 
293 
     | 
    
         
             
              end
         
     | 
| 
       294 
294 
     | 
    
         | 
| 
       295 
     | 
    
         
            -
             
     | 
| 
       296 
     | 
    
         
            -
              # Transform size_type to min, max
         
     | 
| 
       297 
     | 
    
         
            -
              # if size_type == nil the constraint is 1,1
         
     | 
| 
       298 
     | 
    
         
            -
              # if size_type.from == nil min size = 1
         
     | 
| 
       299 
     | 
    
         
            -
              # if size_type.to == nil max size == Infinity
         
     | 
| 
       300 
     | 
    
         
            -
              #
         
     | 
| 
       301 
     | 
    
         
            -
              # @api private
         
     | 
| 
       302 
     | 
    
         
            -
              def type_to_range(size_type)
         
     | 
| 
       303 
     | 
    
         
            -
                return [1,1] if size_type.nil?
         
     | 
| 
       304 
     | 
    
         
            -
                from = size_type.from
         
     | 
| 
       305 
     | 
    
         
            -
                to = size_type.to
         
     | 
| 
       306 
     | 
    
         
            -
                [from.nil? ? 1 : from, to.nil? ? Float::INFINITY : to]
         
     | 
| 
       307 
     | 
    
         
            -
              end
         
     | 
| 
       308 
     | 
    
         
            -
             
     | 
| 
       309 
295 
     | 
    
         
             
              # Applies a transformation by sending the given _method_ and _method_args_ to each of the types of the given array
         
     | 
| 
       310 
296 
     | 
    
         
             
              # and collecting the results in a new array. If all transformation calls returned the type instance itself (i.e. no
         
     | 
| 
       311 
297 
     | 
    
         
             
              # transformation took place), then this method will return `self`. If a transformation did occur, then this method
         
     | 
| 
         @@ -606,7 +592,7 @@ class PEnumType < PScalarType 
     | 
|
| 
       606 
592 
     | 
    
         
             
              attr_reader :values
         
     | 
| 
       607 
593 
     | 
    
         | 
| 
       608 
594 
     | 
    
         
             
              def initialize(values)
         
     | 
| 
       609 
     | 
    
         
            -
                @values = values.sort.freeze
         
     | 
| 
      
 595 
     | 
    
         
            +
                @values = values.uniq.sort.freeze
         
     | 
| 
       610 
596 
     | 
    
         
             
              end
         
     | 
| 
       611 
597 
     | 
    
         | 
| 
       612 
598 
     | 
    
         
             
              # Returns Enumerator if no block is given, otherwise, calls the given
         
     | 
| 
         @@ -1086,10 +1072,13 @@ class PCollectionType < PAnyType 
     | 
|
| 
       1086 
1072 
     | 
    
         
             
                    (@size_type || DEFAULT_SIZE).assignable?(o.size_type || DEFAULT_SIZE, guard)
         
     | 
| 
       1087 
1073 
     | 
    
         
             
                  when PTupleType
         
     | 
| 
       1088 
1074 
     | 
    
         
             
                    # compute the tuple's min/max size, and check if that size matches
         
     | 
| 
       1089 
     | 
    
         
            -
                     
     | 
| 
       1090 
     | 
    
         
            -
                     
     | 
| 
       1091 
     | 
    
         
            -
                     
     | 
| 
       1092 
     | 
    
         
            -
             
     | 
| 
      
 1075 
     | 
    
         
            +
                    size_s = size_type || DEFAULT_SIZE
         
     | 
| 
      
 1076 
     | 
    
         
            +
                    size_o = o.size_type
         
     | 
| 
      
 1077 
     | 
    
         
            +
                    if size_o.nil?
         
     | 
| 
      
 1078 
     | 
    
         
            +
                      type_count = o.types.size
         
     | 
| 
      
 1079 
     | 
    
         
            +
                      size_o = PIntegerType.new(type_count, type_count)
         
     | 
| 
      
 1080 
     | 
    
         
            +
                    end
         
     | 
| 
      
 1081 
     | 
    
         
            +
                    size_s.assignable?(size_o)
         
     | 
| 
       1093 
1082 
     | 
    
         
             
                  when PStructType
         
     | 
| 
       1094 
1083 
     | 
    
         
             
                    from = to = o.elements.size
         
     | 
| 
       1095 
1084 
     | 
    
         
             
                    (@size_type || DEFAULT_SIZE).assignable?(PIntegerType.new(from, to), guard)
         
     | 
| 
         @@ -2008,26 +1997,14 @@ class PArrayType < PCollectionType 
     | 
|
| 
       2008 
1997 
     | 
    
         
             
                  # tuple can be assigned.
         
     | 
| 
       2009 
1998 
     | 
    
         
             
                  return true if s_entry.nil?
         
     | 
| 
       2010 
1999 
     | 
    
         | 
| 
       2011 
     | 
    
         
            -
                   
     | 
| 
       2012 
     | 
    
         
            -
                  o_regular = o.types[0..-2]
         
     | 
| 
       2013 
     | 
    
         
            -
                  o_ranged = o.types[-1]
         
     | 
| 
       2014 
     | 
    
         
            -
                  o_from, o_to = type_to_range(o.size_type)
         
     | 
| 
       2015 
     | 
    
         
            -
                  o_required = o_regular.size + o_from
         
     | 
| 
       2016 
     | 
    
         
            -
             
     | 
| 
       2017 
     | 
    
         
            -
                  # array type may be size constrained
         
     | 
| 
      
 2000 
     | 
    
         
            +
                  o_types = o.types
         
     | 
| 
       2018 
2001 
     | 
    
         
             
                  size_s = size_type || DEFAULT_SIZE
         
     | 
| 
       2019 
     | 
    
         
            -
                   
     | 
| 
       2020 
     | 
    
         
            -
                   
     | 
| 
       2021 
     | 
    
         
            -
             
     | 
| 
       2022 
     | 
    
         
            -
             
     | 
| 
       2023 
     | 
    
         
            -
                  return false if o_regular.size + o_to > max
         
     | 
| 
       2024 
     | 
    
         
            -
                  # each tuple type must be assignable to the element type
         
     | 
| 
       2025 
     | 
    
         
            -
                  o_required.times do |index|
         
     | 
| 
       2026 
     | 
    
         
            -
                    o_entry = tuple_entry_at(o, o_to, index)
         
     | 
| 
       2027 
     | 
    
         
            -
                    return false unless s_entry.assignable?(o_entry, guard)
         
     | 
| 
      
 2002 
     | 
    
         
            +
                  size_o = o.size_type
         
     | 
| 
      
 2003 
     | 
    
         
            +
                  if size_o.nil?
         
     | 
| 
      
 2004 
     | 
    
         
            +
                    type_count = o_types.size
         
     | 
| 
      
 2005 
     | 
    
         
            +
                    size_o = PIntegerType.new(type_count, type_count)
         
     | 
| 
       2028 
2006 
     | 
    
         
             
                  end
         
     | 
| 
       2029 
     | 
    
         
            -
                   
     | 
| 
       2030 
     | 
    
         
            -
                  s_entry.assignable?(o_ranged)
         
     | 
| 
      
 2007 
     | 
    
         
            +
                  size_s.assignable?(size_o) && o_types.all? { |ot| s_entry.assignable?(ot, guard) }
         
     | 
| 
       2031 
2008 
     | 
    
         
             
                elsif o.is_a?(PArrayType)
         
     | 
| 
       2032 
2009 
     | 
    
         
             
                  super && (s_entry.nil? || s_entry.assignable?(o.element_type, guard))
         
     | 
| 
       2033 
2010 
     | 
    
         
             
                else
         
     | 
| 
         @@ -82,7 +82,7 @@ private 
     | 
|
| 
       82 
82 
     | 
    
         
             
              def unique_sections_in(ini, file, allowed_section_names)
         
     | 
| 
       83 
83 
     | 
    
         
             
                ini.section_lines.collect do |section|
         
     | 
| 
       84 
84 
     | 
    
         
             
                  if !allowed_section_names.empty? && !allowed_section_names.include?(section.name)
         
     | 
| 
       85 
     | 
    
         
            -
                    raise(Puppet::Error, "Illegal section '#{section.name}' in config file #{file} at line #{section.line_number}. The only valid puppet.conf sections are: [#{allowed_section_names.join(", ")}]. Please use the directory environments feature to specify environments. (See https://docs. 
     | 
| 
      
 85 
     | 
    
         
            +
                    raise(Puppet::Error, "Illegal section '#{section.name}' in config file #{file} at line #{section.line_number}. The only valid puppet.conf sections are: [#{allowed_section_names.join(", ")}]. Please use the directory environments feature to specify environments. (See https://docs.puppet.com/puppet/latest/reference/environments.html)")
         
     | 
| 
       86 
86 
     | 
    
         
             
                  end
         
     | 
| 
       87 
87 
     | 
    
         
             
                  section.name
         
     | 
| 
       88 
88 
     | 
    
         
             
                end.uniq
         
     | 
    
        data/lib/puppet/type.rb
    CHANGED
    
    | 
         @@ -2132,8 +2132,10 @@ end 
     | 
|
| 
       2132 
2132 
     | 
    
         | 
| 
       2133 
2133 
     | 
    
         
             
                  # Collect the current prereqs
         
     | 
| 
       2134 
2134 
     | 
    
         
             
                  list.each { |dep|
         
     | 
| 
      
 2135 
     | 
    
         
            +
                    next if dep.nil?
         
     | 
| 
      
 2136 
     | 
    
         
            +
             
     | 
| 
       2135 
2137 
     | 
    
         
             
                    # Support them passing objects directly, to save some effort.
         
     | 
| 
       2136 
     | 
    
         
            -
                    unless dep.is_a? 
     | 
| 
      
 2138 
     | 
    
         
            +
                    unless dep.is_a?(Puppet::Type)
         
     | 
| 
       2137 
2139 
     | 
    
         
             
                      # Skip autorelation that we aren't managing
         
     | 
| 
       2138 
2140 
     | 
    
         
             
                      unless dep = rel_catalog.resource(type, dep)
         
     | 
| 
       2139 
2141 
     | 
    
         
             
                        next
         
     | 
    
        data/lib/puppet/version.rb
    CHANGED
    
    
| 
         @@ -0,0 +1 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            one::my_var: 'server1'
         
     | 
| 
         @@ -0,0 +1 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            one::my_var: 'server2'
         
     | 
| 
         @@ -28,14 +28,18 @@ describe "when using a hiera data provider" do 
     | 
|
| 
       28 
28 
     | 
    
         
             
              end
         
     | 
| 
       29 
29 
     | 
    
         | 
| 
       30 
30 
     | 
    
         
             
              def compile_and_get_notifications(environment, code = nil)
         
     | 
| 
       31 
     | 
    
         
            -
                compile(environment, code) 
     | 
| 
      
 31 
     | 
    
         
            +
                extract_notifications(compile(environment, code))
         
     | 
| 
       32 
32 
     | 
    
         
             
              end
         
     | 
| 
       33 
33 
     | 
    
         | 
| 
       34 
34 
     | 
    
         
             
              def compile(environment, code = nil)
         
     | 
| 
       35 
35 
     | 
    
         
             
                Puppet[:code] = code if code
         
     | 
| 
       36 
36 
     | 
    
         
             
                node = Puppet::Node.new("testnode", :facts => facts, :environment => environment)
         
     | 
| 
       37 
37 
     | 
    
         
             
                compiler = Puppet::Parser::Compiler.new(node)
         
     | 
| 
       38 
     | 
    
         
            -
                block_given? ? compiler.compile 
     | 
| 
      
 38 
     | 
    
         
            +
                block_given? ? compiler.compile { |catalog| yield(compiler); catalog } : compiler.compile
         
     | 
| 
      
 39 
     | 
    
         
            +
              end
         
     | 
| 
      
 40 
     | 
    
         
            +
             
     | 
| 
      
 41 
     | 
    
         
            +
              def extract_notifications(catalog)
         
     | 
| 
      
 42 
     | 
    
         
            +
                catalog.resources.map(&:ref).select { |r| r.start_with?('Notify[') }.map { |r| r[7..-2] }
         
     | 
| 
       39 
43 
     | 
    
         
             
              end
         
     | 
| 
       40 
44 
     | 
    
         | 
| 
       41 
45 
     | 
    
         
             
              it 'uses default configuration for environment and module data' do
         
     | 
| 
         @@ -147,6 +151,22 @@ describe "when using a hiera data provider" do 
     | 
|
| 
       147 
151 
     | 
    
         
             
                expect(resources).to include('Value from interpolation with alias')
         
     | 
| 
       148 
152 
     | 
    
         
             
              end
         
     | 
| 
       149 
153 
     | 
    
         | 
| 
      
 154 
     | 
    
         
            +
              it 'uses compiler lifecycle for caching' do
         
     | 
| 
      
 155 
     | 
    
         
            +
                Puppet[:code] = 'notify{lookup(one::my_var):}'
         
     | 
| 
      
 156 
     | 
    
         
            +
                node = Puppet::Node.new('testnode', :facts => facts, :environment => 'hiera_module_config')
         
     | 
| 
      
 157 
     | 
    
         
            +
             
     | 
| 
      
 158 
     | 
    
         
            +
                compiler = Puppet::Parser::Compiler.new(node)
         
     | 
| 
      
 159 
     | 
    
         
            +
                compiler.topscope['my_fact'] = 'server1'
         
     | 
| 
      
 160 
     | 
    
         
            +
                expect(extract_notifications(compiler.compile)).to include('server1')
         
     | 
| 
      
 161 
     | 
    
         
            +
             
     | 
| 
      
 162 
     | 
    
         
            +
                compiler = Puppet::Parser::Compiler.new(node)
         
     | 
| 
      
 163 
     | 
    
         
            +
                compiler.topscope['my_fact'] = 'server2'
         
     | 
| 
      
 164 
     | 
    
         
            +
                expect(extract_notifications(compiler.compile)).to include('server2')
         
     | 
| 
      
 165 
     | 
    
         
            +
             
     | 
| 
      
 166 
     | 
    
         
            +
                compiler = Puppet::Parser::Compiler.new(node)
         
     | 
| 
      
 167 
     | 
    
         
            +
                expect(extract_notifications(compiler.compile)).to include('In name.yaml')
         
     | 
| 
      
 168 
     | 
    
         
            +
              end
         
     | 
| 
      
 169 
     | 
    
         
            +
             
     | 
| 
       150 
170 
     | 
    
         
             
              it 'traps endless interpolate recursion' do
         
     | 
| 
       151 
171 
     | 
    
         
             
                expect do
         
     | 
| 
       152 
172 
     | 
    
         
             
                  compile_and_get_notifications('hiera_misc', '$r1 = "%{r2}" $r2 = "%{r1}" notify{lookup(recursive):}')
         
     | 
| 
         @@ -806,6 +806,18 @@ describe 'The type calculator' do 
     | 
|
| 
       806 
806 
     | 
    
         
             
                    expect(empty_array_t).to be_assignable_to(array_t(string_t))
         
     | 
| 
       807 
807 
     | 
    
         
             
                    expect(empty_array_t).to be_assignable_to(array_t(integer_t))
         
     | 
| 
       808 
808 
     | 
    
         
             
                  end
         
     | 
| 
      
 809 
     | 
    
         
            +
             
     | 
| 
      
 810 
     | 
    
         
            +
                  it 'A Tuple is assignable to an array' do
         
     | 
| 
      
 811 
     | 
    
         
            +
                    expect(tuple_t(String)).to be_assignable_to(array_t(String))
         
     | 
| 
      
 812 
     | 
    
         
            +
                  end
         
     | 
| 
      
 813 
     | 
    
         
            +
             
     | 
| 
      
 814 
     | 
    
         
            +
                  it 'A Tuple with <n> elements is assignable to an array with min size <n>' do
         
     | 
| 
      
 815 
     | 
    
         
            +
                    expect(tuple_t(String,String)).to be_assignable_to(array_t(String, range_t(2, :default)))
         
     | 
| 
      
 816 
     | 
    
         
            +
                  end
         
     | 
| 
      
 817 
     | 
    
         
            +
             
     | 
| 
      
 818 
     | 
    
         
            +
                  it 'A Tuple with <n> elements where the last 2 are optional is assignable to an array with size <n> - 2' do
         
     | 
| 
      
 819 
     | 
    
         
            +
                    expect(constrained_tuple_t(range_t(2, :default), String,String,String,String)).to be_assignable_to(array_t(String, range_t(2, :default)))
         
     | 
| 
      
 820 
     | 
    
         
            +
                  end
         
     | 
| 
       809 
821 
     | 
    
         
             
                end
         
     | 
| 
       810 
822 
     | 
    
         | 
| 
       811 
823 
     | 
    
         
             
                context 'for Hash, such that' do
         
     | 
| 
         @@ -25,7 +25,7 @@ describe 'the type mismatch describer' do 
     | 
|
| 
       25 
25 
     | 
    
         
             
                  }
         
     | 
| 
       26 
26 
     | 
    
         
             
                  f(['a', 23])
         
     | 
| 
       27 
27 
     | 
    
         
             
                CODE
         
     | 
| 
       28 
     | 
    
         
            -
                expect { eval_and_collect_notices(code) }.to raise_error(Puppet::Error, /expects  
     | 
| 
      
 28 
     | 
    
         
            +
                expect { eval_and_collect_notices(code) }.to raise_error(Puppet::Error, /'f' parameter 'h' index 1 expects a String value, got Integer/)
         
     | 
| 
       29 
29 
     | 
    
         
             
              end
         
     | 
| 
       30 
30 
     | 
    
         | 
| 
       31 
31 
     | 
    
         
             
              it 'will not report details for a mismatch between an array and a struct' do
         
     | 
| 
         @@ -48,6 +48,26 @@ describe 'the type mismatch describer' do 
     | 
|
| 
       48 
48 
     | 
    
         
             
                expect { eval_and_collect_notices(code) }.to raise_error(Puppet::Error, /expects a Hash value, got Tuple/)
         
     | 
| 
       49 
49 
     | 
    
         
             
              end
         
     | 
| 
       50 
50 
     | 
    
         | 
| 
      
 51 
     | 
    
         
            +
              it 'will report an array size mismatch' do
         
     | 
| 
      
 52 
     | 
    
         
            +
                code = <<-CODE
         
     | 
| 
      
 53 
     | 
    
         
            +
                  function f(Array[String,1,default] $h) {
         
     | 
| 
      
 54 
     | 
    
         
            +
                    $h[0]
         
     | 
| 
      
 55 
     | 
    
         
            +
                  }
         
     | 
| 
      
 56 
     | 
    
         
            +
                  f([])
         
     | 
| 
      
 57 
     | 
    
         
            +
                CODE
         
     | 
| 
      
 58 
     | 
    
         
            +
                expect { eval_and_collect_notices(code) }.to raise_error(Puppet::Error, /expects size to be at least 1, got 0/)
         
     | 
| 
      
 59 
     | 
    
         
            +
              end
         
     | 
| 
      
 60 
     | 
    
         
            +
             
     | 
| 
      
 61 
     | 
    
         
            +
              it 'will report a hash size mismatch' do
         
     | 
| 
      
 62 
     | 
    
         
            +
                code = <<-CODE
         
     | 
| 
      
 63 
     | 
    
         
            +
                  function f(Hash[String,String,1,default] $h) {
         
     | 
| 
      
 64 
     | 
    
         
            +
                     $h['a']
         
     | 
| 
      
 65 
     | 
    
         
            +
                  }
         
     | 
| 
      
 66 
     | 
    
         
            +
                  f({})
         
     | 
| 
      
 67 
     | 
    
         
            +
                CODE
         
     | 
| 
      
 68 
     | 
    
         
            +
                expect { eval_and_collect_notices(code) }.to raise_error(Puppet::Error, /expects size to be at least 1, got 0/)
         
     | 
| 
      
 69 
     | 
    
         
            +
              end
         
     | 
| 
      
 70 
     | 
    
         
            +
             
     | 
| 
       51 
71 
     | 
    
         
             
              it 'will include the aliased type when reporting a mismatch that involves an alias' do
         
     | 
| 
       52 
72 
     | 
    
         
             
                code = <<-CODE
         
     | 
| 
       53 
73 
     | 
    
         
             
                  type UnprivilegedPort = Integer[1024,65537]
         
     | 
| 
         @@ -153,6 +153,22 @@ describe 'Puppet Type System' do 
     | 
|
| 
       153 
153 
     | 
    
         
             
                end
         
     | 
| 
       154 
154 
     | 
    
         
             
              end
         
     | 
| 
       155 
155 
     | 
    
         | 
| 
      
 156 
     | 
    
         
            +
              context 'Enum type' do
         
     | 
| 
      
 157 
     | 
    
         
            +
                it 'sorts its entries' do
         
     | 
| 
      
 158 
     | 
    
         
            +
                  code = <<-CODE
         
     | 
| 
      
 159 
     | 
    
         
            +
                    Enum[c,b,a].each |$e| { notice $e }
         
     | 
| 
      
 160 
     | 
    
         
            +
                  CODE
         
     | 
| 
      
 161 
     | 
    
         
            +
                  expect(eval_and_collect_notices(code)).to eq(['a', 'b', 'c'])
         
     | 
| 
      
 162 
     | 
    
         
            +
                end
         
     | 
| 
      
 163 
     | 
    
         
            +
             
     | 
| 
      
 164 
     | 
    
         
            +
                it 'makes entries unique' do
         
     | 
| 
      
 165 
     | 
    
         
            +
                  code = <<-CODE
         
     | 
| 
      
 166 
     | 
    
         
            +
                    Enum[a,b,c,b,a].each |$e| { notice $e }
         
     | 
| 
      
 167 
     | 
    
         
            +
                  CODE
         
     | 
| 
      
 168 
     | 
    
         
            +
                  expect(eval_and_collect_notices(code)).to eq(['a', 'b', 'c'])
         
     | 
| 
      
 169 
     | 
    
         
            +
                end
         
     | 
| 
      
 170 
     | 
    
         
            +
              end
         
     | 
| 
      
 171 
     | 
    
         
            +
             
     | 
| 
       156 
172 
     | 
    
         
             
              context 'Iterable type' do
         
     | 
| 
       157 
173 
     | 
    
         
             
                it 'can be parameterized with element type' do
         
     | 
| 
       158 
174 
     | 
    
         
             
                  code = <<-CODE
         
     | 
    
        data/spec/unit/type_spec.rb
    CHANGED
    
    | 
         @@ -393,6 +393,24 @@ describe Puppet::Type, :unless => Puppet.features.microsoft_windows? do 
     | 
|
| 
       393 
393 
     | 
    
         
             
                    expect(relationship_graph.edges_between(src,dst).first.event).to eq(:NONE)
         
     | 
| 
       394 
394 
     | 
    
         
             
                  end
         
     | 
| 
       395 
395 
     | 
    
         | 
| 
      
 396 
     | 
    
         
            +
                  it 'should not fail autorequire contains undef entries' do
         
     | 
| 
      
 397 
     | 
    
         
            +
                    type = Puppet::Type.newtype(:autorelation_two) do
         
     | 
| 
      
 398 
     | 
    
         
            +
                      newparam(:name) { isnamevar }
         
     | 
| 
      
 399 
     | 
    
         
            +
                      autorequire(:autorelation_one) { [nil, 'foo'] }
         
     | 
| 
      
 400 
     | 
    
         
            +
                    end
         
     | 
| 
      
 401 
     | 
    
         
            +
             
     | 
| 
      
 402 
     | 
    
         
            +
                    relationship_graph = compile_to_relationship_graph(<<-MANIFEST)
         
     | 
| 
      
 403 
     | 
    
         
            +
                      autorelation_one { 'foo': }
         
     | 
| 
      
 404 
     | 
    
         
            +
                      autorelation_two { 'bar': }
         
     | 
| 
      
 405 
     | 
    
         
            +
                    MANIFEST
         
     | 
| 
      
 406 
     | 
    
         
            +
             
     | 
| 
      
 407 
     | 
    
         
            +
                    src = relationship_graph.vertices.select{ |x| x.ref.to_s == 'Autorelation_one[foo]' }.first
         
     | 
| 
      
 408 
     | 
    
         
            +
                    dst = relationship_graph.vertices.select{ |x| x.ref.to_s == 'Autorelation_two[bar]' }.first
         
     | 
| 
      
 409 
     | 
    
         
            +
             
     | 
| 
      
 410 
     | 
    
         
            +
                    expect(relationship_graph.edge?(src,dst)).to be_truthy
         
     | 
| 
      
 411 
     | 
    
         
            +
                    expect(relationship_graph.edges_between(src,dst).first.event).to eq(:NONE)
         
     | 
| 
      
 412 
     | 
    
         
            +
                  end
         
     | 
| 
      
 413 
     | 
    
         
            +
             
     | 
| 
       396 
414 
     | 
    
         
             
                  it "should be able to autosubscribe resources" do
         
     | 
| 
       397 
415 
     | 
    
         
             
                    type = Puppet::Type.newtype(:autorelation_two) do
         
     | 
| 
       398 
416 
     | 
    
         
             
                      newparam(:name) { isnamevar }
         
     | 
| 
         @@ -411,6 +429,24 @@ describe Puppet::Type, :unless => Puppet.features.microsoft_windows? do 
     | 
|
| 
       411 
429 
     | 
    
         
             
                    expect(relationship_graph.edges_between(src,dst).first.event).to eq(:ALL_EVENTS)
         
     | 
| 
       412 
430 
     | 
    
         
             
                  end
         
     | 
| 
       413 
431 
     | 
    
         | 
| 
      
 432 
     | 
    
         
            +
                  it 'should not fail if autosubscribe contains undef entries' do
         
     | 
| 
      
 433 
     | 
    
         
            +
                    type = Puppet::Type.newtype(:autorelation_two) do
         
     | 
| 
      
 434 
     | 
    
         
            +
                      newparam(:name) { isnamevar }
         
     | 
| 
      
 435 
     | 
    
         
            +
                      autosubscribe(:autorelation_one) { [nil, 'foo'] }
         
     | 
| 
      
 436 
     | 
    
         
            +
                    end
         
     | 
| 
      
 437 
     | 
    
         
            +
             
     | 
| 
      
 438 
     | 
    
         
            +
                    relationship_graph = compile_to_relationship_graph(<<-MANIFEST)
         
     | 
| 
      
 439 
     | 
    
         
            +
                      autorelation_one { 'foo': }
         
     | 
| 
      
 440 
     | 
    
         
            +
                      autorelation_two { 'bar': }
         
     | 
| 
      
 441 
     | 
    
         
            +
                    MANIFEST
         
     | 
| 
      
 442 
     | 
    
         
            +
             
     | 
| 
      
 443 
     | 
    
         
            +
                    src = relationship_graph.vertices.select{ |x| x.ref.to_s == 'Autorelation_one[foo]' }.first
         
     | 
| 
      
 444 
     | 
    
         
            +
                    dst = relationship_graph.vertices.select{ |x| x.ref.to_s == 'Autorelation_two[bar]' }.first
         
     | 
| 
      
 445 
     | 
    
         
            +
             
     | 
| 
      
 446 
     | 
    
         
            +
                    expect(relationship_graph.edge?(src,dst)).to be_truthy
         
     | 
| 
      
 447 
     | 
    
         
            +
                    expect(relationship_graph.edges_between(src,dst).first.event).to eq(:ALL_EVENTS)
         
     | 
| 
      
 448 
     | 
    
         
            +
                  end
         
     | 
| 
      
 449 
     | 
    
         
            +
             
     | 
| 
       414 
450 
     | 
    
         
             
                  it "should be able to autobefore resources" do
         
     | 
| 
       415 
451 
     | 
    
         
             
                    type = Puppet::Type.newtype(:autorelation_two) do
         
     | 
| 
       416 
452 
     | 
    
         
             
                      newparam(:name) { isnamevar }
         
     | 
| 
         @@ -429,6 +465,24 @@ describe Puppet::Type, :unless => Puppet.features.microsoft_windows? do 
     | 
|
| 
       429 
465 
     | 
    
         
             
                    expect(relationship_graph.edges_between(src,dst).first.event).to eq(:NONE)
         
     | 
| 
       430 
466 
     | 
    
         
             
                  end
         
     | 
| 
       431 
467 
     | 
    
         | 
| 
      
 468 
     | 
    
         
            +
                  it "should not fail when autobefore contains undef entries" do
         
     | 
| 
      
 469 
     | 
    
         
            +
                    type = Puppet::Type.newtype(:autorelation_two) do
         
     | 
| 
      
 470 
     | 
    
         
            +
                      newparam(:name) { isnamevar }
         
     | 
| 
      
 471 
     | 
    
         
            +
                      autobefore(:autorelation_one) { [nil, 'foo'] }
         
     | 
| 
      
 472 
     | 
    
         
            +
                    end
         
     | 
| 
      
 473 
     | 
    
         
            +
             
     | 
| 
      
 474 
     | 
    
         
            +
                    relationship_graph = compile_to_relationship_graph(<<-MANIFEST)
         
     | 
| 
      
 475 
     | 
    
         
            +
                      autorelation_one { 'foo': }
         
     | 
| 
      
 476 
     | 
    
         
            +
                      autorelation_two { 'bar': }
         
     | 
| 
      
 477 
     | 
    
         
            +
                    MANIFEST
         
     | 
| 
      
 478 
     | 
    
         
            +
             
     | 
| 
      
 479 
     | 
    
         
            +
                    src = relationship_graph.vertices.select{ |x| x.ref.to_s == 'Autorelation_two[bar]' }.first
         
     | 
| 
      
 480 
     | 
    
         
            +
                    dst = relationship_graph.vertices.select{ |x| x.ref.to_s == 'Autorelation_one[foo]' }.first
         
     | 
| 
      
 481 
     | 
    
         
            +
             
     | 
| 
      
 482 
     | 
    
         
            +
                    expect(relationship_graph.edge?(src,dst)).to be_truthy
         
     | 
| 
      
 483 
     | 
    
         
            +
                    expect(relationship_graph.edges_between(src,dst).first.event).to eq(:NONE)
         
     | 
| 
      
 484 
     | 
    
         
            +
                  end
         
     | 
| 
      
 485 
     | 
    
         
            +
             
     | 
| 
       432 
486 
     | 
    
         
             
                  it "should be able to autonotify resources" do
         
     | 
| 
       433 
487 
     | 
    
         
             
                    type = Puppet::Type.newtype(:autorelation_two) do
         
     | 
| 
       434 
488 
     | 
    
         
             
                      newparam(:name) { isnamevar }
         
     | 
| 
         @@ -446,6 +500,24 @@ describe Puppet::Type, :unless => Puppet.features.microsoft_windows? do 
     | 
|
| 
       446 
500 
     | 
    
         
             
                    expect(relationship_graph.edge?(src,dst)).to be_truthy
         
     | 
| 
       447 
501 
     | 
    
         
             
                    expect(relationship_graph.edges_between(src,dst).first.event).to eq(:ALL_EVENTS)
         
     | 
| 
       448 
502 
     | 
    
         
             
                  end
         
     | 
| 
      
 503 
     | 
    
         
            +
             
     | 
| 
      
 504 
     | 
    
         
            +
                  it 'should not fail if autonotify contains undef entries' do
         
     | 
| 
      
 505 
     | 
    
         
            +
                    type = Puppet::Type.newtype(:autorelation_two) do
         
     | 
| 
      
 506 
     | 
    
         
            +
                      newparam(:name) { isnamevar }
         
     | 
| 
      
 507 
     | 
    
         
            +
                      autonotify(:autorelation_one) { [nil, 'foo'] }
         
     | 
| 
      
 508 
     | 
    
         
            +
                    end
         
     | 
| 
      
 509 
     | 
    
         
            +
             
     | 
| 
      
 510 
     | 
    
         
            +
                    relationship_graph = compile_to_relationship_graph(<<-MANIFEST)
         
     | 
| 
      
 511 
     | 
    
         
            +
                      autorelation_one { 'foo': }
         
     | 
| 
      
 512 
     | 
    
         
            +
                      autorelation_two { 'bar': }
         
     | 
| 
      
 513 
     | 
    
         
            +
                    MANIFEST
         
     | 
| 
      
 514 
     | 
    
         
            +
             
     | 
| 
      
 515 
     | 
    
         
            +
                    src = relationship_graph.vertices.select{ |x| x.ref.to_s == 'Autorelation_two[bar]' }.first
         
     | 
| 
      
 516 
     | 
    
         
            +
                    dst = relationship_graph.vertices.select{ |x| x.ref.to_s == 'Autorelation_one[foo]' }.first
         
     | 
| 
      
 517 
     | 
    
         
            +
             
     | 
| 
      
 518 
     | 
    
         
            +
                    expect(relationship_graph.edge?(src,dst)).to be_truthy
         
     | 
| 
      
 519 
     | 
    
         
            +
                    expect(relationship_graph.edges_between(src,dst).first.event).to eq(:ALL_EVENTS)
         
     | 
| 
      
 520 
     | 
    
         
            +
                  end
         
     | 
| 
       449 
521 
     | 
    
         
             
                end
         
     | 
| 
       450 
522 
     | 
    
         
             
              end
         
     | 
| 
       451 
523 
     | 
    
         | 
| 
         @@ -9,6 +9,22 @@ describe Symbol do 
     | 
|
| 
       9 
9 
     | 
    
         
             
                $unique_warnings.delete('symbol_comparison') if $unique_warnings
         
     | 
| 
       10 
10 
     | 
    
         
             
              end
         
     | 
| 
       11 
11 
     | 
    
         | 
| 
      
 12 
     | 
    
         
            +
              it 'should have an equal? that is not true for a string with same letters' do
         
     | 
| 
      
 13 
     | 
    
         
            +
                symbol = :undef
         
     | 
| 
      
 14 
     | 
    
         
            +
                expect(symbol).to_not equal('undef')
         
     | 
| 
      
 15 
     | 
    
         
            +
              end
         
     | 
| 
      
 16 
     | 
    
         
            +
             
     | 
| 
      
 17 
     | 
    
         
            +
              it "should have an eql? that is not true for a string with same letters" do
         
     | 
| 
      
 18 
     | 
    
         
            +
                symbol = :undef
         
     | 
| 
      
 19 
     | 
    
         
            +
                expect(symbol).to_not eql('undef')
         
     | 
| 
      
 20 
     | 
    
         
            +
              end
         
     | 
| 
      
 21 
     | 
    
         
            +
             
     | 
| 
      
 22 
     | 
    
         
            +
              it "should have an == that is not true for a string with same letters" do
         
     | 
| 
      
 23 
     | 
    
         
            +
                pending "JRuby is incompatible with MRI - Cannot test this on JRuby" if RUBY_PLATFORM == 'java'
         
     | 
| 
      
 24 
     | 
    
         
            +
                symbol = :undef
         
     | 
| 
      
 25 
     | 
    
         
            +
                expect(symbol == 'undef').to_not be(true)
         
     | 
| 
      
 26 
     | 
    
         
            +
              end
         
     | 
| 
      
 27 
     | 
    
         
            +
             
     | 
| 
       12 
28 
     | 
    
         
             
              it "should return self from #intern" do
         
     | 
| 
       13 
29 
     | 
    
         
             
                symbol = :foo
         
     | 
| 
       14 
30 
     | 
    
         
             
                expect(symbol).to equal symbol.intern
         
     | 
    
        metadata
    CHANGED
    
    | 
         @@ -1,7 +1,7 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            --- !ruby/object:Gem::Specification
         
     | 
| 
       2 
2 
     | 
    
         
             
            name: puppet
         
     | 
| 
       3 
3 
     | 
    
         
             
            version: !ruby/object:Gem::Version
         
     | 
| 
       4 
     | 
    
         
            -
              version: 4.5. 
     | 
| 
      
 4 
     | 
    
         
            +
              version: 4.5.1
         
     | 
| 
       5 
5 
     | 
    
         
             
              prerelease: 
         
     | 
| 
       6 
6 
     | 
    
         
             
            platform: x64-mingw32
         
     | 
| 
       7 
7 
     | 
    
         
             
            authors:
         
     | 
| 
         @@ -9,7 +9,7 @@ authors: 
     | 
|
| 
       9 
9 
     | 
    
         
             
            autorequire: 
         
     | 
| 
       10 
10 
     | 
    
         
             
            bindir: bin
         
     | 
| 
       11 
11 
     | 
    
         
             
            cert_chain: []
         
     | 
| 
       12 
     | 
    
         
            -
            date: 2016- 
     | 
| 
      
 12 
     | 
    
         
            +
            date: 2016-06-01 00:00:00.000000000 Z
         
     | 
| 
       13 
13 
     | 
    
         
             
            dependencies:
         
     | 
| 
       14 
14 
     | 
    
         
             
            - !ruby/object:Gem::Dependency
         
     | 
| 
       15 
15 
     | 
    
         
             
              name: facter
         
     | 
| 
         @@ -1741,6 +1741,8 @@ files: 
     | 
|
| 
       1741 
1741 
     | 
    
         
             
            - spec/fixtures/unit/data_providers/environments/hiera_module_config/modules/one/data1/name.yaml
         
     | 
| 
       1742 
1742 
     | 
    
         
             
            - spec/fixtures/unit/data_providers/environments/hiera_module_config/modules/one/data1/single.yaml
         
     | 
| 
       1743 
1743 
     | 
    
         
             
            - spec/fixtures/unit/data_providers/environments/hiera_module_config/modules/one/data1/second.json
         
     | 
| 
      
 1744 
     | 
    
         
            +
            - spec/fixtures/unit/data_providers/environments/hiera_module_config/modules/one/data1/server2.yaml
         
     | 
| 
      
 1745 
     | 
    
         
            +
            - spec/fixtures/unit/data_providers/environments/hiera_module_config/modules/one/data1/server1.yaml
         
     | 
| 
       1744 
1746 
     | 
    
         
             
            - spec/fixtures/unit/data_providers/environments/hiera_module_config/modules/one/data1/first.json
         
     | 
| 
       1745 
1747 
     | 
    
         
             
            - spec/fixtures/unit/data_providers/environments/hiera_module_config/modules/one/metadata.json
         
     | 
| 
       1746 
1748 
     | 
    
         
             
            - spec/fixtures/unit/data_providers/environments/hiera_module_config/modules/one/hiera.yaml
         
     | 
| 
         @@ -2971,6 +2973,8 @@ test_files: 
     | 
|
| 
       2971 
2973 
     | 
    
         
             
            - spec/fixtures/unit/data_providers/environments/hiera_module_config/modules/one/data1/name.yaml
         
     | 
| 
       2972 
2974 
     | 
    
         
             
            - spec/fixtures/unit/data_providers/environments/hiera_module_config/modules/one/data1/single.yaml
         
     | 
| 
       2973 
2975 
     | 
    
         
             
            - spec/fixtures/unit/data_providers/environments/hiera_module_config/modules/one/data1/second.json
         
     | 
| 
      
 2976 
     | 
    
         
            +
            - spec/fixtures/unit/data_providers/environments/hiera_module_config/modules/one/data1/server2.yaml
         
     | 
| 
      
 2977 
     | 
    
         
            +
            - spec/fixtures/unit/data_providers/environments/hiera_module_config/modules/one/data1/server1.yaml
         
     | 
| 
       2974 
2978 
     | 
    
         
             
            - spec/fixtures/unit/data_providers/environments/hiera_module_config/modules/one/data1/first.json
         
     | 
| 
       2975 
2979 
     | 
    
         
             
            - spec/fixtures/unit/data_providers/environments/hiera_module_config/modules/one/metadata.json
         
     | 
| 
       2976 
2980 
     | 
    
         
             
            - spec/fixtures/unit/data_providers/environments/hiera_module_config/modules/one/hiera.yaml
         
     |