puppet 6.19.0-x64-mingw32 → 6.22.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.
- checksums.yaml +4 -4
- data/CODEOWNERS +2 -16
- data/Gemfile +3 -1
- data/Gemfile.lock +50 -39
- data/ext/project_data.yaml +2 -2
- data/lib/puppet/application.rb +10 -6
- data/lib/puppet/application/agent.rb +1 -0
- data/lib/puppet/application/apply.rb +3 -2
- data/lib/puppet/application/device.rb +1 -0
- data/lib/puppet/application/filebucket.rb +2 -2
- data/lib/puppet/application/script.rb +1 -0
- data/lib/puppet/application/ssl.rb +11 -0
- data/lib/puppet/application_support.rb +7 -0
- data/lib/puppet/configurer.rb +28 -18
- data/lib/puppet/defaults.rb +46 -20
- data/lib/puppet/environments.rb +54 -55
- data/lib/puppet/face/config.rb +10 -0
- data/lib/puppet/face/epp.rb +12 -2
- data/lib/puppet/face/facts.rb +158 -0
- data/lib/puppet/ffi/posix.rb +10 -0
- data/lib/puppet/ffi/posix/constants.rb +14 -0
- data/lib/puppet/ffi/posix/functions.rb +24 -0
- data/lib/puppet/file_system/memory_file.rb +8 -1
- data/lib/puppet/file_system/windows.rb +2 -0
- data/lib/puppet/functions/epp.rb +1 -0
- data/lib/puppet/functions/inline_epp.rb +1 -0
- data/lib/puppet/functions/partition.rb +8 -0
- data/lib/puppet/indirector/fact_search.rb +60 -0
- data/lib/puppet/indirector/facts/facter.rb +24 -3
- data/lib/puppet/indirector/facts/json.rb +27 -0
- data/lib/puppet/indirector/facts/yaml.rb +3 -58
- data/lib/puppet/indirector/json.rb +5 -1
- data/lib/puppet/indirector/node/json.rb +8 -0
- data/lib/puppet/indirector/report/json.rb +34 -0
- data/lib/puppet/module_tool/applications/installer.rb +48 -2
- data/lib/puppet/module_tool/errors/shared.rb +17 -2
- data/lib/puppet/network/formats.rb +69 -1
- data/lib/puppet/network/http/factory.rb +4 -0
- data/lib/puppet/pal/pal_impl.rb +70 -17
- data/lib/puppet/parser/ast/leaf.rb +3 -2
- data/lib/puppet/parser/templatewrapper.rb +1 -1
- data/lib/puppet/pops/evaluator/deferred_resolver.rb +5 -3
- data/lib/puppet/pops/evaluator/evaluator_impl.rb +22 -3
- data/lib/puppet/pops/model/ast_transformer.rb +1 -1
- data/lib/puppet/property/list.rb +1 -1
- data/lib/puppet/provider/group/groupadd.rb +13 -8
- data/lib/puppet/provider/package/apt.rb +34 -2
- data/lib/puppet/provider/package/aptitude.rb +6 -0
- data/lib/puppet/provider/package/dnfmodule.rb +1 -1
- data/lib/puppet/provider/service/debian.rb +2 -0
- data/lib/puppet/provider/service/systemd.rb +1 -1
- data/lib/puppet/provider/user/aix.rb +2 -2
- data/lib/puppet/provider/user/useradd.rb +62 -8
- data/lib/puppet/reference/configuration.rb +6 -5
- data/lib/puppet/settings.rb +43 -15
- data/lib/puppet/settings/alias_setting.rb +37 -0
- data/lib/puppet/settings/base_setting.rb +26 -2
- data/lib/puppet/settings/environment_conf.rb +1 -0
- data/lib/puppet/type/package.rb +3 -3
- data/lib/puppet/util/autoload.rb +1 -8
- data/lib/puppet/util/fact_dif.rb +81 -0
- data/lib/puppet/util/monkey_patches.rb +7 -0
- data/lib/puppet/util/posix.rb +54 -5
- data/lib/puppet/util/rubygems.rb +5 -1
- data/lib/puppet/util/windows/adsi.rb +46 -0
- data/lib/puppet/util/windows/api_types.rb +1 -1
- data/lib/puppet/util/windows/principal.rb +9 -2
- data/lib/puppet/util/windows/service.rb +1 -1
- data/lib/puppet/util/windows/sid.rb +4 -2
- data/lib/puppet/version.rb +1 -1
- data/locales/puppet.pot +295 -219
- data/man/man5/puppet.conf.5 +15 -7
- data/man/man8/puppet-agent.8 +2 -2
- data/man/man8/puppet-apply.8 +2 -2
- data/man/man8/puppet-catalog.8 +1 -1
- data/man/man8/puppet-config.8 +1 -1
- data/man/man8/puppet-describe.8 +1 -1
- data/man/man8/puppet-device.8 +2 -2
- data/man/man8/puppet-doc.8 +1 -1
- data/man/man8/puppet-epp.8 +1 -1
- data/man/man8/puppet-facts.8 +90 -1
- data/man/man8/puppet-filebucket.8 +3 -3
- data/man/man8/puppet-generate.8 +1 -1
- data/man/man8/puppet-help.8 +1 -1
- data/man/man8/puppet-key.8 +1 -1
- data/man/man8/puppet-lookup.8 +1 -1
- data/man/man8/puppet-man.8 +1 -1
- data/man/man8/puppet-module.8 +1 -1
- data/man/man8/puppet-node.8 +4 -1
- data/man/man8/puppet-parser.8 +1 -1
- data/man/man8/puppet-plugin.8 +1 -1
- data/man/man8/puppet-report.8 +4 -1
- data/man/man8/puppet-resource.8 +1 -1
- data/man/man8/puppet-script.8 +2 -2
- data/man/man8/puppet-ssl.8 +5 -1
- data/man/man8/puppet-status.8 +1 -1
- data/man/man8/puppet.8 +2 -2
- data/spec/fixtures/integration/application/agent/cached_deferred_catalog.json +91 -0
- data/spec/fixtures/unit/provider/service/systemd/list_unit_files_services_vendor_preset +9 -0
- data/spec/fixtures/unit/provider/user/aix/aix_passwd_file.out +4 -0
- data/spec/integration/application/agent_spec.rb +160 -3
- data/spec/integration/application/apply_spec.rb +19 -0
- data/spec/integration/application/plugin_spec.rb +1 -1
- data/spec/integration/defaults_spec.rb +0 -7
- data/spec/integration/environments/setting_hooks_spec.rb +1 -1
- data/spec/integration/http/client_spec.rb +12 -0
- data/spec/integration/indirector/direct_file_server_spec.rb +1 -3
- data/spec/integration/resource/type_collection_spec.rb +2 -6
- data/spec/integration/transaction_spec.rb +4 -9
- data/spec/integration/util/windows/adsi_spec.rb +21 -1
- data/spec/integration/util/windows/principal_spec.rb +21 -0
- data/spec/integration/util/windows/registry_spec.rb +6 -10
- data/spec/lib/puppet_spec/settings.rb +6 -1
- data/spec/spec_helper.rb +12 -5
- data/spec/unit/agent_spec.rb +8 -6
- data/spec/unit/application/agent_spec.rb +0 -1
- data/spec/unit/application/config_spec.rb +224 -4
- data/spec/unit/application/facts_spec.rb +482 -3
- data/spec/unit/application/filebucket_spec.rb +0 -2
- data/spec/unit/application/ssl_spec.rb +23 -0
- data/spec/unit/application_spec.rb +51 -9
- data/spec/unit/confine/feature_spec.rb +1 -1
- data/spec/unit/confine_spec.rb +8 -2
- data/spec/unit/defaults_spec.rb +36 -1
- data/spec/unit/environments_spec.rb +221 -68
- data/spec/unit/face/config_spec.rb +27 -32
- data/spec/unit/face/facts_spec.rb +4 -0
- data/spec/unit/face/node_spec.rb +0 -11
- data/spec/unit/file_serving/configuration/parser_spec.rb +0 -1
- data/spec/unit/file_serving/metadata_spec.rb +3 -3
- data/spec/unit/file_serving/terminus_helper_spec.rb +11 -4
- data/spec/unit/file_system_spec.rb +9 -0
- data/spec/unit/forge/module_release_spec.rb +2 -7
- data/spec/unit/functions/inline_epp_spec.rb +26 -1
- data/spec/unit/http/service/compiler_spec.rb +49 -0
- data/spec/unit/http/service_spec.rb +1 -1
- data/spec/unit/indirector/face_spec.rb +0 -1
- data/spec/unit/indirector/facts/facter_spec.rb +95 -1
- data/spec/unit/indirector/facts/json_spec.rb +255 -0
- data/spec/unit/indirector/file_bucket_file/selector_spec.rb +26 -8
- data/spec/unit/indirector/indirection_spec.rb +8 -12
- data/spec/unit/indirector/key/file_spec.rb +0 -1
- data/spec/unit/indirector/node/json_spec.rb +33 -0
- data/spec/{integration/indirector/report/yaml.rb → unit/indirector/report/json_spec.rb} +13 -24
- data/spec/unit/indirector/report/yaml_spec.rb +72 -8
- data/spec/unit/indirector_spec.rb +2 -2
- data/spec/unit/module_tool/applications/installer_spec.rb +66 -0
- data/spec/unit/network/authconfig_spec.rb +0 -3
- data/spec/unit/network/formats_spec.rb +41 -0
- data/spec/unit/network/http/api/indirected_routes_spec.rb +0 -9
- data/spec/unit/network/http/factory_spec.rb +19 -0
- data/spec/unit/network/http/handler_spec.rb +0 -5
- data/spec/unit/parser/compiler_spec.rb +3 -19
- data/spec/unit/parser/resource_spec.rb +14 -8
- data/spec/unit/parser/templatewrapper_spec.rb +4 -3
- data/spec/unit/pops/evaluator/deferred_resolver_spec.rb +20 -0
- data/spec/unit/property_spec.rb +1 -0
- data/spec/unit/provider/group/groupadd_spec.rb +5 -2
- data/spec/unit/provider/nameservice_spec.rb +66 -65
- data/spec/unit/provider/package/apt_spec.rb +28 -23
- data/spec/unit/provider/package/aptitude_spec.rb +1 -1
- data/spec/unit/provider/package/base_spec.rb +6 -5
- data/spec/unit/provider/package/dnfmodule_spec.rb +10 -1
- data/spec/unit/provider/package/pacman_spec.rb +18 -12
- data/spec/unit/provider/package/pip_spec.rb +6 -11
- data/spec/unit/provider/package/pkgdmg_spec.rb +0 -4
- data/spec/unit/provider/service/systemd_spec.rb +11 -0
- data/spec/unit/provider/user/aix_spec.rb +5 -0
- data/spec/unit/provider/user/hpux_spec.rb +1 -1
- data/spec/unit/provider/user/pw_spec.rb +2 -0
- data/spec/unit/provider/user/useradd_spec.rb +71 -3
- data/spec/unit/provider_spec.rb +8 -10
- data/spec/unit/puppet_pal_catalog_spec.rb +45 -0
- data/spec/unit/resource/capability_finder_spec.rb +6 -1
- data/spec/unit/resource/catalog_spec.rb +1 -1
- data/spec/unit/resource/type_spec.rb +1 -1
- data/spec/unit/resource_spec.rb +11 -10
- data/spec/unit/settings_spec.rb +543 -228
- data/spec/unit/ssl/base_spec.rb +0 -1
- data/spec/unit/ssl/host_spec.rb +0 -5
- data/spec/unit/ssl/ssl_provider_spec.rb +14 -8
- data/spec/unit/transaction/additional_resource_generator_spec.rb +3 -7
- data/spec/unit/transaction/event_manager_spec.rb +14 -11
- data/spec/unit/transaction_spec.rb +13 -4
- data/spec/unit/type/file/content_spec.rb +0 -1
- data/spec/unit/type/file/selinux_spec.rb +0 -2
- data/spec/unit/type/file_spec.rb +0 -6
- data/spec/unit/type/group_spec.rb +13 -6
- data/spec/unit/type/resources_spec.rb +7 -7
- data/spec/unit/type/service_spec.rb +1 -1
- data/spec/unit/type/tidy_spec.rb +0 -1
- data/spec/unit/type_spec.rb +2 -2
- data/spec/unit/util/at_fork_spec.rb +2 -2
- data/spec/unit/util/autoload_spec.rb +5 -1
- data/spec/unit/util/backups_spec.rb +1 -2
- data/spec/unit/util/execution_spec.rb +15 -11
- data/spec/unit/util/inifile_spec.rb +6 -14
- data/spec/unit/util/log_spec.rb +8 -7
- data/spec/unit/util/logging_spec.rb +3 -3
- data/spec/unit/util/posix_spec.rb +363 -15
- data/spec/unit/util/rubygems_spec.rb +2 -2
- data/spec/unit/util/selinux_spec.rb +76 -52
- data/spec/unit/util/storage_spec.rb +3 -1
- data/spec/unit/util/suidmanager_spec.rb +44 -41
- data/spec/unit/util/windows/sid_spec.rb +6 -0
- data/spec/unit/util_spec.rb +13 -6
- metadata +31 -16
- data/spec/integration/application/config_spec.rb +0 -74
- data/spec/lib/matchers/include.rb +0 -27
- data/spec/lib/matchers/include_spec.rb +0 -32
- data/spec/unit/face/catalog_spec.rb +0 -6
- data/spec/unit/face/module_spec.rb +0 -3
| @@ -0,0 +1,20 @@ | |
| 1 | 
            +
            require 'spec_helper'
         | 
| 2 | 
            +
            require 'puppet_spec/compiler'
         | 
| 3 | 
            +
             | 
| 4 | 
            +
            describe Puppet::Pops::Evaluator::DeferredResolver do
         | 
| 5 | 
            +
              include PuppetSpec::Compiler
         | 
| 6 | 
            +
             | 
| 7 | 
            +
              let(:environment) { Puppet::Node::Environment.create(:testing, []) }
         | 
| 8 | 
            +
              let(:facts) { Puppet::Node::Facts.new('node.example.com') }
         | 
| 9 | 
            +
             | 
| 10 | 
            +
              it 'resolves deferred values in a catalog' do
         | 
| 11 | 
            +
                catalog = compile_to_catalog(<<~END)
         | 
| 12 | 
            +
                  notify { "deferred":
         | 
| 13 | 
            +
                    message => Deferred("join", [[1,2,3], ":"])
         | 
| 14 | 
            +
                  }
         | 
| 15 | 
            +
                END
         | 
| 16 | 
            +
                described_class.resolve_and_replace(facts, catalog)
         | 
| 17 | 
            +
             | 
| 18 | 
            +
                expect(catalog.resource(:notify, 'deferred')[:message]).to eq('1:2:3')
         | 
| 19 | 
            +
              end
         | 
| 20 | 
            +
            end
         | 
    
        data/spec/unit/property_spec.rb
    CHANGED
    
    
| @@ -198,7 +198,10 @@ describe Puppet::Type.type(:group).provider(:groupadd) do | |
| 198 198 | 
             
              end
         | 
| 199 199 |  | 
| 200 200 | 
             
              describe "#findgroup" do
         | 
| 201 | 
            -
                before  | 
| 201 | 
            +
                before do
         | 
| 202 | 
            +
                  allow(Puppet::FileSystem).to receive(:exist?).with('/etc/group').and_return(true)
         | 
| 203 | 
            +
                  allow(Puppet::FileSystem).to receive(:each_line).with('/etc/group').and_yield(content)
         | 
| 204 | 
            +
                end
         | 
| 202 205 |  | 
| 203 206 | 
             
                let(:content) { "sample_group_name:sample_password:sample_gid:sample_user_list" }
         | 
| 204 207 | 
             
                let(:output) do
         | 
| @@ -221,7 +224,7 @@ describe Puppet::Type.type(:group).provider(:groupadd) do | |
| 221 224 | 
             
                end
         | 
| 222 225 |  | 
| 223 226 | 
             
                it "reads the group file only once per resource" do
         | 
| 224 | 
            -
                  expect( | 
| 227 | 
            +
                  expect(Puppet::FileSystem).to receive(:each_line).with('/etc/group').once
         | 
| 225 228 | 
             
                  5.times { provider.send(:findgroup, :group_name, 'sample_group_name') }
         | 
| 226 229 | 
             
                end
         | 
| 227 230 | 
             
              end
         | 
| @@ -3,11 +3,28 @@ require 'puppet/provider/nameservice' | |
| 3 3 | 
             
            require 'puppet/etc'
         | 
| 4 4 | 
             
            require 'puppet_spec/character_encoding'
         | 
| 5 5 |  | 
| 6 | 
            +
            Puppet::Type.newtype(:nameservice_dummytype) do
         | 
| 7 | 
            +
              newparam(:name)
         | 
| 8 | 
            +
              ensurable
         | 
| 9 | 
            +
              newproperty(:foo)
         | 
| 10 | 
            +
              newproperty(:bar)
         | 
| 11 | 
            +
            end
         | 
| 12 | 
            +
             | 
| 13 | 
            +
            Puppet::Type.type(:nameservice_dummytype).provide(:nameservice_dummyprovider, parent: Puppet::Provider::NameService) do
         | 
| 14 | 
            +
              def posixmethod(param)
         | 
| 15 | 
            +
                param
         | 
| 16 | 
            +
              end
         | 
| 17 | 
            +
             | 
| 18 | 
            +
              def modifycmd(param, value)
         | 
| 19 | 
            +
                []
         | 
| 20 | 
            +
              end
         | 
| 21 | 
            +
            end
         | 
| 22 | 
            +
             | 
| 6 23 | 
             
            describe Puppet::Provider::NameService do
         | 
| 7 24 |  | 
| 8 25 | 
             
              before :each do
         | 
| 9 | 
            -
                 | 
| 10 | 
            -
                 | 
| 26 | 
            +
                provider.class.initvars
         | 
| 27 | 
            +
                provider.class.resource_type = faketype
         | 
| 11 28 | 
             
              end
         | 
| 12 29 |  | 
| 13 30 | 
             
              # These are values getpwent might give you
         | 
| @@ -41,16 +58,12 @@ describe Puppet::Provider::NameService do | |
| 41 58 | 
             
              # The provider sometimes relies on @resource for valid properties so let's
         | 
| 42 59 | 
             
              # create a fake type with properties that match our fake struct.
         | 
| 43 60 | 
             
              let :faketype do
         | 
| 44 | 
            -
                Puppet::Type. | 
| 45 | 
            -
                  newparam(:name)
         | 
| 46 | 
            -
                  ensurable
         | 
| 47 | 
            -
                  newproperty(:foo)
         | 
| 48 | 
            -
                  newproperty(:bar)
         | 
| 49 | 
            -
                end
         | 
| 61 | 
            +
                Puppet::Type.type(:nameservice_dummytype)
         | 
| 50 62 | 
             
              end
         | 
| 51 63 |  | 
| 52 64 | 
             
              let :provider do
         | 
| 53 | 
            -
                 | 
| 65 | 
            +
                Puppet::Type.type(:nameservice_dummytype).provider(:nameservice_dummyprovider)
         | 
| 66 | 
            +
                  .new(:name => 'bob', :foo => 'fooval', :bar => 'barval')
         | 
| 54 67 | 
             
              end
         | 
| 55 68 |  | 
| 56 69 | 
             
              let :resource do
         | 
| @@ -91,61 +104,61 @@ describe Puppet::Provider::NameService do | |
| 91 104 |  | 
| 92 105 | 
             
              describe "#options" do
         | 
| 93 106 | 
             
                it "should add options for a valid property" do
         | 
| 94 | 
            -
                   | 
| 95 | 
            -
                   | 
| 96 | 
            -
                  expect( | 
| 97 | 
            -
                  expect( | 
| 98 | 
            -
                  expect( | 
| 107 | 
            +
                  provider.class.options :foo, :key1 => 'val1', :key2 => 'val2'
         | 
| 108 | 
            +
                  provider.class.options :bar, :key3 => 'val3'
         | 
| 109 | 
            +
                  expect(provider.class.option(:foo, :key1)).to eq('val1')
         | 
| 110 | 
            +
                  expect(provider.class.option(:foo, :key2)).to eq('val2')
         | 
| 111 | 
            +
                  expect(provider.class.option(:bar, :key3)).to eq('val3')
         | 
| 99 112 | 
             
                end
         | 
| 100 113 |  | 
| 101 114 | 
             
                it "should raise an error for an invalid property" do
         | 
| 102 | 
            -
                  expect {  | 
| 115 | 
            +
                  expect { provider.class.options :baz, :key1 => 'val1' }.to raise_error(
         | 
| 103 116 | 
             
                    Puppet::Error, 'baz is not a valid attribute for nameservice_dummytype')
         | 
| 104 117 | 
             
                end
         | 
| 105 118 | 
             
              end
         | 
| 106 119 |  | 
| 107 120 | 
             
              describe "#option" do
         | 
| 108 121 | 
             
                it "should return the correct value" do
         | 
| 109 | 
            -
                   | 
| 110 | 
            -
                  expect( | 
| 122 | 
            +
                  provider.class.options :foo, :key1 => 'val1', :key2 => 'val2'
         | 
| 123 | 
            +
                  expect(provider.class.option(:foo, :key2)).to eq('val2')
         | 
| 111 124 | 
             
                end
         | 
| 112 125 |  | 
| 113 126 | 
             
                it "should symbolize the name first" do
         | 
| 114 | 
            -
                   | 
| 115 | 
            -
                  expect( | 
| 127 | 
            +
                  provider.class.options :foo, :key1 => 'val1', :key2 => 'val2'
         | 
| 128 | 
            +
                  expect(provider.class.option('foo', :key2)).to eq('val2')
         | 
| 116 129 | 
             
                end
         | 
| 117 130 |  | 
| 118 131 | 
             
                it "should return nil if no option has been specified earlier" do
         | 
| 119 | 
            -
                  expect( | 
| 132 | 
            +
                  expect(provider.class.option(:foo, :key2)).to be_nil
         | 
| 120 133 | 
             
                end
         | 
| 121 134 |  | 
| 122 135 | 
             
                it "should return nil if no option for that property has been specified earlier" do
         | 
| 123 | 
            -
                   | 
| 124 | 
            -
                  expect( | 
| 136 | 
            +
                  provider.class.options :bar, :key2 => 'val2'
         | 
| 137 | 
            +
                  expect(provider.class.option(:foo, :key2)).to be_nil
         | 
| 125 138 | 
             
                end
         | 
| 126 139 |  | 
| 127 140 | 
             
                it "should return nil if no matching key can be found for that property" do
         | 
| 128 | 
            -
                   | 
| 129 | 
            -
                  expect( | 
| 141 | 
            +
                  provider.class.options :foo, :key3 => 'val2'
         | 
| 142 | 
            +
                  expect(provider.class.option(:foo, :key2)).to be_nil
         | 
| 130 143 | 
             
                end
         | 
| 131 144 | 
             
              end
         | 
| 132 145 |  | 
| 133 146 | 
             
              describe "#section" do
         | 
| 134 147 | 
             
                it "should raise an error if resource_type has not been set" do
         | 
| 135 | 
            -
                  expect( | 
| 136 | 
            -
                  expect {  | 
| 148 | 
            +
                  expect(provider.class).to receive(:resource_type).and_return(nil)
         | 
| 149 | 
            +
                  expect { provider.class.section }.to raise_error Puppet::Error, 'Cannot determine Etc section without a resource type'
         | 
| 137 150 | 
             
                end
         | 
| 138 151 |  | 
| 139 152 | 
             
                # the return values are hard coded so I am using types that actually make
         | 
| 140 153 | 
             
                # use of the nameservice provider
         | 
| 141 154 | 
             
                it "should return pw for users" do
         | 
| 142 | 
            -
                   | 
| 143 | 
            -
                  expect( | 
| 155 | 
            +
                  provider.class.resource_type = Puppet::Type.type(:user)
         | 
| 156 | 
            +
                  expect(provider.class.section).to eq('pw')
         | 
| 144 157 | 
             
                end
         | 
| 145 158 |  | 
| 146 159 | 
             
                it "should return gr for groups" do
         | 
| 147 | 
            -
                   | 
| 148 | 
            -
                  expect( | 
| 160 | 
            +
                  provider.class.resource_type = Puppet::Type.type(:group)
         | 
| 161 | 
            +
                  expect(provider.class.section).to eq('gr')
         | 
| 149 162 | 
             
                end
         | 
| 150 163 | 
             
              end
         | 
| 151 164 |  | 
| @@ -213,7 +226,7 @@ describe Puppet::Provider::NameService do | |
| 213 226 | 
             
                  # encoding
         | 
| 214 227 | 
             
                  allow(Etc).to receive(:getpwent).and_return(*utf_8_mixed_users)
         | 
| 215 228 | 
             
                  result = PuppetSpec::CharacterEncoding.with_external_encoding(Encoding::UTF_8) do
         | 
| 216 | 
            -
                     | 
| 229 | 
            +
                    provider.class.instances
         | 
| 217 230 | 
             
                  end
         | 
| 218 231 | 
             
                  expect(result.map(&:name)).to eq(
         | 
| 219 232 | 
             
                    [
         | 
| @@ -228,7 +241,7 @@ describe Puppet::Provider::NameService do | |
| 228 241 | 
             
                it "should have object names in their original encoding/bytes if they would not be valid UTF-8" do
         | 
| 229 242 | 
             
                  allow(Etc).to receive(:getpwent).and_return(*latin_1_mixed_users)
         | 
| 230 243 | 
             
                  result = PuppetSpec::CharacterEncoding.with_external_encoding(Encoding::ISO_8859_1) do
         | 
| 231 | 
            -
                     | 
| 244 | 
            +
                    provider.class.instances
         | 
| 232 245 | 
             
                  end
         | 
| 233 246 | 
             
                  expect(result.map(&:name)).to eq(
         | 
| 234 247 | 
             
                    [
         | 
| @@ -243,40 +256,40 @@ describe Puppet::Provider::NameService do | |
| 243 256 | 
             
                it "should pass the Puppet::Etc :canonical_name Struct member to the constructor" do
         | 
| 244 257 | 
             
                  users = [ Struct::Passwd.new(invalid_utf_8_jose, invalid_utf_8_jose, 1002, 2000), nil ]
         | 
| 245 258 | 
             
                  allow(Etc).to receive(:getpwent).and_return(*users)
         | 
| 246 | 
            -
                  expect( | 
| 247 | 
            -
                   | 
| 259 | 
            +
                  expect(provider.class).to receive(:new).with(:name => escaped_utf_8_jose, :canonical_name => invalid_utf_8_jose, :ensure => :present)
         | 
| 260 | 
            +
                  provider.class.instances
         | 
| 248 261 | 
             
                end
         | 
| 249 262 | 
             
              end
         | 
| 250 263 |  | 
| 251 264 | 
             
              describe "validate" do
         | 
| 252 265 | 
             
                it "should pass if no check is registered at all" do
         | 
| 253 | 
            -
                  expect {  | 
| 254 | 
            -
                  expect {  | 
| 266 | 
            +
                  expect { provider.class.validate(:foo, 300) }.to_not raise_error
         | 
| 267 | 
            +
                  expect { provider.class.validate('foo', 300) }.to_not raise_error
         | 
| 255 268 | 
             
                end
         | 
| 256 269 |  | 
| 257 270 | 
             
                it "should pass if no check for that property is registered" do
         | 
| 258 | 
            -
                   | 
| 259 | 
            -
                  expect {  | 
| 260 | 
            -
                  expect {  | 
| 271 | 
            +
                  provider.class.verify(:bar, 'Must be 100') { |val| val == 100 }
         | 
| 272 | 
            +
                  expect { provider.class.validate(:foo, 300) }.to_not raise_error
         | 
| 273 | 
            +
                  expect { provider.class.validate('foo', 300) }.to_not raise_error
         | 
| 261 274 | 
             
                end
         | 
| 262 275 |  | 
| 263 276 | 
             
                it "should pass if the value is valid" do
         | 
| 264 | 
            -
                   | 
| 265 | 
            -
                  expect {  | 
| 266 | 
            -
                  expect {  | 
| 277 | 
            +
                  provider.class.verify(:foo, 'Must be 100') { |val| val == 100 }
         | 
| 278 | 
            +
                  expect { provider.class.validate(:foo, 100) }.to_not raise_error
         | 
| 279 | 
            +
                  expect { provider.class.validate('foo', 100) }.to_not raise_error
         | 
| 267 280 | 
             
                end
         | 
| 268 281 |  | 
| 269 282 | 
             
                it "should raise an error if the value is invalid" do
         | 
| 270 | 
            -
                   | 
| 271 | 
            -
                  expect {  | 
| 272 | 
            -
                  expect {  | 
| 283 | 
            +
                  provider.class.verify(:foo, 'Must be 100') { |val| val == 100 }
         | 
| 284 | 
            +
                  expect { provider.class.validate(:foo, 200) }.to raise_error(ArgumentError, 'Invalid value 200: Must be 100')
         | 
| 285 | 
            +
                  expect { provider.class.validate('foo', 200) }.to raise_error(ArgumentError, 'Invalid value 200: Must be 100')
         | 
| 273 286 | 
             
                end
         | 
| 274 287 | 
             
              end
         | 
| 275 288 |  | 
| 276 289 | 
             
              describe "getinfo" do
         | 
| 277 290 | 
             
                before :each do
         | 
| 278 291 | 
             
                  # with section=foo we'll call Etc.getfoonam instead of getpwnam or getgrnam
         | 
| 279 | 
            -
                  allow( | 
| 292 | 
            +
                  allow(provider.class).to receive(:section).and_return('foo')
         | 
| 280 293 | 
             
                  resource # initialize the resource so our provider has a @resource instance variable
         | 
| 281 294 | 
             
                end
         | 
| 282 295 |  | 
| @@ -296,13 +309,13 @@ describe Puppet::Provider::NameService do | |
| 296 309 | 
             
                # overriding to UTF-8, in @canonical_name for querying that state on disk
         | 
| 297 310 | 
             
                # again if needed
         | 
| 298 311 | 
             
                it "should use the instance's @canonical_name to query the system" do
         | 
| 299 | 
            -
                  provider_instance =  | 
| 312 | 
            +
                  provider_instance = provider.class.new(:name => 'foo', :canonical_name => 'original_foo', :ensure => :present)
         | 
| 300 313 | 
             
                  expect(Puppet::Etc).to receive(:send).with(:getfoonam, 'original_foo')
         | 
| 301 314 | 
             
                  provider_instance.getinfo(true)
         | 
| 302 315 | 
             
                end
         | 
| 303 316 |  | 
| 304 317 | 
             
                it "should use the instance's name instead of canonical_name if not supplied during instantiation" do
         | 
| 305 | 
            -
                  provider_instance =  | 
| 318 | 
            +
                  provider_instance = provider.class.new(:name => 'foo', :ensure => :present)
         | 
| 306 319 | 
             
                  expect(Puppet::Etc).to receive(:send).with(:getfoonam, 'foo')
         | 
| 307 320 | 
             
                  provider_instance.getinfo(true)
         | 
| 308 321 | 
             
                end
         | 
| @@ -310,16 +323,6 @@ describe Puppet::Provider::NameService do | |
| 310 323 |  | 
| 311 324 | 
             
              describe "info2hash" do
         | 
| 312 325 | 
             
                it "should return a hash with all properties" do
         | 
| 313 | 
            -
                  # we have to have an implementation of posixmethod which has to
         | 
| 314 | 
            -
                  # convert a propertyname (e.g. comment) into a fieldname of our
         | 
| 315 | 
            -
                  # Struct (e.g. gecos). I do not want to test posixmethod here so
         | 
| 316 | 
            -
                  # let's fake an implementation which does not do any translation. We
         | 
| 317 | 
            -
                  # expect two method invocations because info2hash calls the method
         | 
| 318 | 
            -
                  # twice if the Struct responds to the propertyname (our fake Struct
         | 
| 319 | 
            -
                  # provides values for :foo and :bar) TODO: Fix that
         | 
| 320 | 
            -
                  expect(provider).to receive(:posixmethod).with(:foo).and_return(:foo).twice
         | 
| 321 | 
            -
                  expect(provider).to receive(:posixmethod).with(:bar).and_return(:bar).twice
         | 
| 322 | 
            -
                  expect(provider).to receive(:posixmethod).with(:ensure).and_return(:ensure)
         | 
| 323 326 | 
             
                  expect(provider.info2hash(fakeetcobject)).to eq({ :foo => 'fooval', :bar => 'barval' })
         | 
| 324 327 | 
             
                end
         | 
| 325 328 | 
             
              end
         | 
| @@ -330,7 +333,7 @@ describe Puppet::Provider::NameService do | |
| 330 333 | 
             
                end
         | 
| 331 334 |  | 
| 332 335 | 
             
                it "should return the munged value otherwise" do
         | 
| 333 | 
            -
                   | 
| 336 | 
            +
                  provider.class.options(:foo, :munge => proc { |x| x*2 })
         | 
| 334 337 | 
             
                  expect(provider.munge(:foo, 100)).to eq(200)
         | 
| 335 338 | 
             
                end
         | 
| 336 339 | 
             
              end
         | 
| @@ -341,7 +344,7 @@ describe Puppet::Provider::NameService do | |
| 341 344 | 
             
                end
         | 
| 342 345 |  | 
| 343 346 | 
             
                it "should return the unmunged value otherwise" do
         | 
| 344 | 
            -
                   | 
| 347 | 
            +
                  provider.class.options(:foo, :unmunge => proc { |x| x/2 })
         | 
| 345 348 | 
             
                  expect(provider.unmunge(:foo, 200)).to eq(100)
         | 
| 346 349 | 
             
                end
         | 
| 347 350 | 
             
              end
         | 
| @@ -359,15 +362,13 @@ describe Puppet::Provider::NameService do | |
| 359 362 | 
             
              end
         | 
| 360 363 |  | 
| 361 364 | 
             
              describe "get" do
         | 
| 362 | 
            -
                before(:each) {described_class.resource_type = faketype }
         | 
| 363 | 
            -
             | 
| 364 365 | 
             
                it "should return the correct getinfo value" do
         | 
| 365 366 | 
             
                  expect(provider).to receive(:getinfo).with(false).and_return(:foo => 'fooval', :bar => 'barval')
         | 
| 366 367 | 
             
                  expect(provider.get(:bar)).to eq('barval')
         | 
| 367 368 | 
             
                end
         | 
| 368 369 |  | 
| 369 370 | 
             
                it "should unmunge the value first" do
         | 
| 370 | 
            -
                   | 
| 371 | 
            +
                  provider.class.options(:bar, :munge => proc { |x| x*2}, :unmunge => proc {|x| x/2})
         | 
| 371 372 | 
             
                  expect(provider).to receive(:getinfo).with(false).and_return(:foo => 200, :bar => 500)
         | 
| 372 373 | 
             
                  expect(provider.get(:bar)).to eq(250)
         | 
| 373 374 | 
             
                end
         | 
| @@ -382,7 +383,7 @@ describe Puppet::Provider::NameService do | |
| 382 383 | 
             
              describe "set" do
         | 
| 383 384 | 
             
                before :each do
         | 
| 384 385 | 
             
                  resource # initialize resource so our provider has a @resource object
         | 
| 385 | 
            -
                   | 
| 386 | 
            +
                  provider.class.verify(:foo, 'Must be 100') { |val| val == 100 }
         | 
| 386 387 | 
             
                end
         | 
| 387 388 |  | 
| 388 389 | 
             
                it "should raise an error on invalid values" do
         | 
| @@ -396,7 +397,7 @@ describe Puppet::Provider::NameService do | |
| 396 397 | 
             
                end
         | 
| 397 398 |  | 
| 398 399 | 
             
                it "should munge the value first" do
         | 
| 399 | 
            -
                   | 
| 400 | 
            +
                  provider.class.options(:foo, :munge => proc { |x| x*2}, :unmunge => proc {|x| x/2})
         | 
| 400 401 | 
             
                  expect(provider).to receive(:modifycmd).with(:foo, 200).and_return(['/bin/modify', '-f', '200' ])
         | 
| 401 402 | 
             
                  expect(provider).to receive(:execute).with(['/bin/modify', '-f', '200'], hash_including(custom_environment: {}))
         | 
| 402 403 | 
             
                  provider.set(:foo, 100)
         | 
| @@ -11,9 +11,7 @@ describe Puppet::Type.type(:package).provider(:apt) do | |
| 11 11 | 
             
              end
         | 
| 12 12 |  | 
| 13 13 | 
             
              let(:provider) do
         | 
| 14 | 
            -
                provider | 
| 15 | 
            -
                provider.resource = resource
         | 
| 16 | 
            -
                provider
         | 
| 14 | 
            +
                resource.provider
         | 
| 17 15 | 
             
              end
         | 
| 18 16 |  | 
| 19 17 | 
             
              it "should be the default provider on :osfamily => Debian" do
         | 
| @@ -88,7 +86,7 @@ Version table: | |
| 88 86 |  | 
| 89 87 | 
             
              describe ".instances" do
         | 
| 90 88 | 
             
                before do
         | 
| 91 | 
            -
                  allow(Puppet::Type::Package::ProviderDpkg).to receive(:instances).and_return([ | 
| 89 | 
            +
                  allow(Puppet::Type::Package::ProviderDpkg).to receive(:instances).and_return([provider])
         | 
| 92 90 | 
             
                end
         | 
| 93 91 |  | 
| 94 92 | 
             
                context "when package is manual marked" do
         | 
| @@ -97,8 +95,7 @@ Version table: | |
| 97 95 | 
             
                  end
         | 
| 98 96 |  | 
| 99 97 | 
             
                  it 'sets mark to manual' do
         | 
| 100 | 
            -
                    expect( | 
| 101 | 
            -
                    described_class.instances
         | 
| 98 | 
            +
                    expect(described_class.instances.map(&:mark)).to eq([:manual])
         | 
| 102 99 | 
             
                  end
         | 
| 103 100 | 
             
                end
         | 
| 104 101 |  | 
| @@ -108,8 +105,7 @@ Version table: | |
| 108 105 | 
             
                  end
         | 
| 109 106 |  | 
| 110 107 | 
             
                  it 'does not set mark to manual' do
         | 
| 111 | 
            -
                    expect( | 
| 112 | 
            -
                    described_class.instances
         | 
| 108 | 
            +
                    expect(described_class.instances.map(&:mark)).to eq([nil])
         | 
| 113 109 | 
             
                  end
         | 
| 114 110 | 
             
                end
         | 
| 115 111 | 
             
              end
         | 
| @@ -119,24 +115,12 @@ Version table: | |
| 119 115 | 
             
                  allow(provider).to receive(:dpkgquery).and_return("name: #{resource.name}" )
         | 
| 120 116 | 
             
                end
         | 
| 121 117 |  | 
| 122 | 
            -
                context "when package is manual marked" do
         | 
| 123 | 
            -
                  before do
         | 
| 124 | 
            -
                    allow(described_class).to receive(:aptmark).with('showmanual').and_return("#{resource.name}\n")
         | 
| 125 | 
            -
                  end
         | 
| 126 | 
            -
             | 
| 127 | 
            -
                  it 'sets mark to manual' do
         | 
| 128 | 
            -
                    result = provider.query
         | 
| 129 | 
            -
                    expect(result[:mark]).to eql(:manual)
         | 
| 130 | 
            -
                  end
         | 
| 131 | 
            -
                end
         | 
| 132 | 
            -
             | 
| 133 | 
            -
                context 'when package is not manual marked ' do
         | 
| 134 | 
            -
                  before do
         | 
| 135 | 
            -
                    allow(described_class).to receive(:aptmark).with('showmanual').and_return('')
         | 
| 136 | 
            -
                  end
         | 
| 137 118 |  | 
| 119 | 
            +
                context 'when package is not installed on the system' do
         | 
| 138 120 | 
             
                  it 'does not set mark to manual' do
         | 
| 139 121 | 
             
                    result = provider.query
         | 
| 122 | 
            +
             | 
| 123 | 
            +
                    expect(described_class).not_to receive(:aptmark)
         | 
| 140 124 | 
             
                    expect(result[:mark]).to be_nil
         | 
| 141 125 | 
             
                  end
         | 
| 142 126 | 
             
                end
         | 
| @@ -293,5 +277,26 @@ Version table: | |
| 293 277 |  | 
| 294 278 | 
             
                  provider.install
         | 
| 295 279 | 
             
                end
         | 
| 280 | 
            +
             | 
| 281 | 
            +
                it "should install using the source attribute if present" do
         | 
| 282 | 
            +
                  resource[:ensure] = :installed
         | 
| 283 | 
            +
                  resource[:source] = '/my/local/package/file'
         | 
| 284 | 
            +
             | 
| 285 | 
            +
                  expect(provider).to receive(:aptget).with(any_args, :install, resource[:source])
         | 
| 286 | 
            +
                  expect(provider).to receive(:properties).and_return({:mark => :none})
         | 
| 287 | 
            +
             | 
| 288 | 
            +
                  provider.install
         | 
| 289 | 
            +
                end
         | 
| 290 | 
            +
             | 
| 291 | 
            +
                it "should install specific version using the source attribute if present" do
         | 
| 292 | 
            +
                  resource[:ensure] = '1.2.3'
         | 
| 293 | 
            +
                  resource[:source] = '/my/local/package/file'
         | 
| 294 | 
            +
             | 
| 295 | 
            +
                  expect(provider).to receive(:aptget).with(any_args, :install, resource[:source])
         | 
| 296 | 
            +
                  expect(provider).to receive(:properties).and_return({:mark => :none})
         | 
| 297 | 
            +
                  expect(provider).to receive(:query).and_return({:ensure => '1.2.3'})
         | 
| 298 | 
            +
             | 
| 299 | 
            +
                  provider.install
         | 
| 300 | 
            +
                end
         | 
| 296 301 | 
             
              end
         | 
| 297 302 | 
             
            end
         | 
| @@ -13,7 +13,7 @@ describe Puppet::Type.type(:package).provider(:aptitude) do | |
| 13 13 |  | 
| 14 14 | 
             
                before do
         | 
| 15 15 | 
             
                  allow(Puppet::Util).to receive(:which).with('/usr/bin/dpkg-query').and_return(dpkgquery_path)
         | 
| 16 | 
            -
                  allow(described_class).to receive(:aptmark).with('showmanual').and_return("")
         | 
| 16 | 
            +
                  allow(described_class).to receive(:aptmark).with('showmanual', 'faff').and_return("")
         | 
| 17 17 | 
             
                end
         | 
| 18 18 |  | 
| 19 19 | 
             
                { :absent   => "deinstall ok config-files faff 1.2.3-1\n",
         | 
| @@ -1,17 +1,18 @@ | |
| 1 1 | 
             
            require 'spec_helper'
         | 
| 2 2 | 
             
            require 'puppet/provider/package'
         | 
| 3 3 |  | 
| 4 | 
            +
            Puppet::Type.type(:package).provide(:test_base_provider, parent: Puppet::Provider::Package) do
         | 
| 5 | 
            +
              def query; end
         | 
| 6 | 
            +
            end
         | 
| 7 | 
            +
             | 
| 4 8 | 
             
            describe Puppet::Provider::Package do
         | 
| 9 | 
            +
              let(:provider) {  Puppet::Type.type(:package).provider(:test_base_provider).new }
         | 
| 10 | 
            +
             | 
| 5 11 | 
             
              it 'returns absent for uninstalled packages when not purgeable' do
         | 
| 6 | 
            -
                provider = Puppet::Provider::Package.new
         | 
| 7 | 
            -
                expect(provider).to receive(:query).and_return(nil)
         | 
| 8 | 
            -
                expect(provider.class).to receive(:feature?).with(:purgeable).and_return(false)
         | 
| 9 12 | 
             
                expect(provider.properties[:ensure]).to eq(:absent)
         | 
| 10 13 | 
             
              end
         | 
| 11 14 |  | 
| 12 15 | 
             
              it 'returns purged for uninstalled packages when purgeable' do
         | 
| 13 | 
            -
                provider = Puppet::Provider::Package.new
         | 
| 14 | 
            -
                expect(provider).to receive(:query).and_return(nil)
         | 
| 15 16 | 
             
                expect(provider.class).to receive(:feature?).with(:purgeable).and_return(true)
         | 
| 16 17 | 
             
                expect(provider.properties[:ensure]).to eq(:purged)
         | 
| 17 18 | 
             
              end
         |