puppet 6.18.0-x64-mingw32 → 6.21.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 +2 -0
- data/Gemfile.lock +37 -34
- data/README.md +1 -2
- data/Rakefile +4 -12
- data/lib/puppet/agent/locker.rb +0 -7
- data/lib/puppet/application.rb +10 -6
- data/lib/puppet/application/agent.rb +9 -3
- data/lib/puppet/application/apply.rb +3 -2
- data/lib/puppet/application/device.rb +1 -0
- data/lib/puppet/application/doc.rb +1 -1
- data/lib/puppet/application/filebucket.rb +2 -2
- data/lib/puppet/application/lookup.rb +5 -5
- data/lib/puppet/application/script.rb +1 -0
- data/lib/puppet/application_support.rb +7 -0
- data/lib/puppet/configurer.rb +50 -8
- data/lib/puppet/defaults.rb +67 -35
- data/lib/puppet/environments.rb +84 -59
- data/lib/puppet/face/catalog.rb +1 -1
- data/lib/puppet/face/config.rb +56 -16
- data/lib/puppet/face/epp.rb +12 -2
- data/lib/puppet/face/facts.rb +60 -0
- data/lib/puppet/face/node.rb +3 -3
- data/lib/puppet/face/node/clean.rb +2 -2
- data/lib/puppet/face/status.rb +1 -1
- 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_bucket/dipper.rb +1 -1
- data/lib/puppet/functions/epp.rb +1 -0
- data/lib/puppet/functions/inline_epp.rb +1 -0
- data/lib/puppet/functions/new.rb +8 -3
- data/lib/puppet/http.rb +1 -0
- data/lib/puppet/http/client.rb +1 -1
- data/lib/puppet/http/resolver.rb +5 -8
- data/lib/puppet/http/resolver/server_list.rb +18 -36
- data/lib/puppet/http/resolver/settings.rb +4 -4
- data/lib/puppet/http/resolver/srv.rb +5 -5
- data/lib/puppet/http/service.rb +3 -1
- data/lib/puppet/http/service/compiler.rb +1 -1
- data/lib/puppet/http/service/file_server.rb +1 -1
- data/lib/puppet/http/service/puppetserver.rb +39 -0
- data/lib/puppet/http/session.rb +5 -4
- data/lib/puppet/indirector/catalog/compiler.rb +1 -1
- data/lib/puppet/indirector/fact_search.rb +60 -0
- data/lib/puppet/indirector/facts/json.rb +27 -0
- data/lib/puppet/indirector/facts/yaml.rb +4 -59
- data/lib/puppet/indirector/json.rb +5 -1
- data/lib/puppet/indirector/msgpack.rb +1 -1
- data/lib/puppet/indirector/node/json.rb +8 -0
- data/lib/puppet/indirector/report/json.rb +34 -0
- data/lib/puppet/indirector/request.rb +4 -4
- data/lib/puppet/indirector/yaml.rb +1 -1
- 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 +2 -1
- data/lib/puppet/network/http/api/master/v3/environments.rb +0 -1
- data/lib/puppet/node/facts.rb +17 -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/collectors/abstract_collector.rb +1 -3
- data/lib/puppet/pops/evaluator/deferred_resolver.rb +5 -3
- data/lib/puppet/pops/evaluator/evaluator_impl.rb +22 -3
- data/lib/puppet/pops/evaluator/runtime3_converter.rb +2 -2
- data/lib/puppet/pops/model/ast_transformer.rb +1 -1
- data/lib/puppet/pops/types/p_meta_type.rb +1 -1
- data/lib/puppet/pops/types/p_type_set_type.rb +4 -0
- 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/dpkg.rb +1 -1
- data/lib/puppet/provider/package/pip2.rb +17 -0
- data/lib/puppet/provider/package/puppetserver_gem.rb +180 -0
- data/lib/puppet/provider/package/yum.rb +1 -0
- data/lib/puppet/provider/service/debian.rb +2 -0
- 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/resource/type.rb +2 -1
- data/lib/puppet/rest/route.rb +2 -2
- data/lib/puppet/settings.rb +62 -20
- data/lib/puppet/settings/alias_setting.rb +37 -0
- data/lib/puppet/settings/base_setting.rb +26 -2
- data/lib/puppet/transaction/report.rb +11 -7
- data/lib/puppet/type/file/source.rb +1 -1
- data/lib/puppet/type/filebucket.rb +1 -1
- data/lib/puppet/type/package.rb +3 -3
- data/lib/puppet/util/autoload.rb +1 -8
- data/lib/puppet/util/connection.rb +8 -8
- data/lib/puppet/util/fact_dif.rb +62 -0
- data/lib/puppet/util/posix.rb +54 -5
- data/lib/puppet/util/rubygems.rb +5 -1
- data/lib/puppet/util/run_mode.rb +5 -1
- data/lib/puppet/util/windows/service.rb +1 -1
- data/lib/puppet/version.rb +1 -1
- data/locales/puppet.pot +289 -268
- data/man/man5/puppet.conf.5 +33 -17
- data/man/man8/puppet-agent.8 +7 -4
- data/man/man8/puppet-apply.8 +2 -2
- data/man/man8/puppet-catalog.8 +1 -1
- data/man/man8/puppet-config.8 +6 -6
- 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 +32 -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 +7 -4
- 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 +1 -1
- data/man/man8/puppet-status.8 +2 -2
- data/man/man8/puppet.8 +2 -2
- data/spec/fixtures/integration/application/agent/cached_deferred_catalog.json +91 -0
- data/spec/fixtures/unit/provider/package/puppetserver_gem/gem-list-local-packages +30 -0
- data/spec/fixtures/unit/provider/user/aix/aix_passwd_file.out +4 -0
- data/spec/integration/application/agent_spec.rb +183 -22
- data/spec/integration/application/apply_spec.rb +19 -0
- data/spec/integration/application/filebucket_spec.rb +7 -7
- data/spec/integration/application/plugin_spec.rb +3 -3
- data/spec/integration/configurer_spec.rb +14 -0
- data/spec/integration/defaults_spec.rb +19 -1
- data/spec/integration/environments/setting_hooks_spec.rb +1 -1
- 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 +5 -3
- data/spec/integration/util/windows/registry_spec.rb +0 -10
- data/spec/lib/puppet_spec/settings.rb +6 -1
- data/spec/shared_contexts/types_setup.rb +2 -0
- data/spec/spec_helper.rb +1 -4
- 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/doc_spec.rb +2 -2
- data/spec/unit/application/facts_spec.rb +3 -1
- data/spec/unit/application/filebucket_spec.rb +0 -2
- data/spec/unit/application_spec.rb +60 -13
- data/spec/unit/configurer_spec.rb +39 -6
- data/spec/unit/confine/feature_spec.rb +1 -1
- data/spec/unit/confine_spec.rb +8 -2
- data/spec/unit/defaults_spec.rb +20 -1
- data/spec/unit/environments_spec.rb +176 -32
- data/spec/unit/face/config_spec.rb +62 -11
- data/spec/unit/face/node_spec.rb +2 -13
- 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 +1 -2
- data/spec/unit/forge/module_release_spec.rb +2 -7
- data/spec/unit/functions/inline_epp_spec.rb +26 -1
- data/spec/unit/http/resolver_spec.rb +24 -4
- data/spec/unit/http/service/ca_spec.rb +2 -2
- data/spec/unit/http/service/compiler_spec.rb +51 -2
- data/spec/unit/http/service/file_server_spec.rb +2 -2
- data/spec/unit/http/service/puppetserver_spec.rb +82 -0
- data/spec/unit/http/service/report_spec.rb +2 -2
- data/spec/unit/http/service_spec.rb +1 -1
- data/spec/unit/http/session_spec.rb +8 -20
- data/spec/unit/indirector/catalog/json_spec.rb +1 -1
- data/spec/unit/indirector/catalog/rest_spec.rb +1 -1
- data/spec/unit/indirector/face_spec.rb +0 -1
- data/spec/unit/indirector/facts/facter_spec.rb +0 -1
- data/spec/unit/indirector/facts/json_spec.rb +255 -0
- data/spec/unit/indirector/facts/rest_spec.rb +1 -1
- 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/json_spec.rb +8 -8
- data/spec/unit/indirector/key/file_spec.rb +0 -1
- data/spec/unit/indirector/msgpack_spec.rb +8 -8
- data/spec/unit/indirector/node/json_spec.rb +33 -0
- data/spec/unit/indirector/node/rest_spec.rb +1 -1
- 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/request_spec.rb +4 -4
- data/spec/unit/indirector/rest_spec.rb +1 -1
- data/spec/unit/indirector/status/rest_spec.rb +1 -1
- data/spec/unit/indirector/yaml_spec.rb +7 -7
- 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/http/api/indirected_routes_spec.rb +0 -9
- data/spec/unit/network/http/api/master/v3/environments_spec.rb +12 -23
- 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/exec_spec.rb +4 -3
- 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/dpkg_spec.rb +22 -7
- data/spec/unit/provider/package/openbsd_spec.rb +2 -0
- data/spec/unit/provider/package/pacman_spec.rb +18 -12
- data/spec/unit/provider/package/pip2_spec.rb +36 -0
- data/spec/unit/provider/package/pip_spec.rb +6 -11
- data/spec/unit/provider/package/pkgdmg_spec.rb +0 -4
- data/spec/unit/provider/package/puppetserver_gem_spec.rb +137 -0
- data/spec/unit/provider/package/yum_spec.rb +31 -0
- data/spec/unit/provider/service/base_spec.rb +2 -4
- data/spec/unit/provider/service/bsd_spec.rb +5 -1
- data/spec/unit/provider/service/daemontools_spec.rb +1 -1
- data/spec/unit/provider/service/debian_spec.rb +3 -5
- data/spec/unit/provider/service/freebsd_spec.rb +1 -1
- data/spec/unit/provider/service/gentoo_spec.rb +4 -5
- data/spec/unit/provider/service/init_spec.rb +4 -5
- data/spec/unit/provider/service/launchd_spec.rb +5 -6
- data/spec/unit/provider/service/openrc_spec.rb +4 -5
- data/spec/unit/provider/service/openwrt_spec.rb +1 -1
- data/spec/unit/provider/service/redhat_spec.rb +1 -1
- data/spec/unit/provider/service/runit_spec.rb +2 -1
- data/spec/unit/provider/service/smf_spec.rb +1 -1
- data/spec/unit/provider/service/src_spec.rb +3 -5
- data/spec/unit/provider/service/systemd_spec.rb +3 -1
- data/spec/unit/provider/service/upstart_spec.rb +4 -5
- 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 +56 -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/type_spec.rb +1 -1
- data/spec/unit/resource_spec.rb +11 -10
- data/spec/unit/rest/route_spec.rb +4 -4
- data/spec/unit/settings_spec.rb +576 -239
- 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/report_spec.rb +2 -0
- 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/source_spec.rb +1 -1
- data/spec/unit/type/file_spec.rb +0 -6
- data/spec/unit/type/filebucket_spec.rb +1 -1
- 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/run_mode_spec.rb +6 -6
- 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_spec.rb +13 -6
- metadata +32 -10
- data/spec/integration/application/config_spec.rb +0 -74
- data/spec/unit/face/catalog_spec.rb +0 -6
- data/spec/unit/face/module_spec.rb +0 -3
| @@ -11,24 +11,24 @@ describe Puppet::Indirector::JSON do | |
| 11 11 |  | 
| 12 12 | 
             
              context "#path" do
         | 
| 13 13 | 
             
                before :each do
         | 
| 14 | 
            -
                  Puppet[:server_datadir] = '/sample/datadir/ | 
| 14 | 
            +
                  Puppet[:server_datadir] = '/sample/datadir/server'
         | 
| 15 15 | 
             
                  Puppet[:client_datadir] = '/sample/datadir/client'
         | 
| 16 16 | 
             
                end
         | 
| 17 17 |  | 
| 18 | 
            -
                it "uses the :server_datadir setting if this is the  | 
| 19 | 
            -
                  allow(Puppet.run_mode).to receive(: | 
| 18 | 
            +
                it "uses the :server_datadir setting if this is the server" do
         | 
| 19 | 
            +
                  allow(Puppet.run_mode).to receive(:server?).and_return(true)
         | 
| 20 20 | 
             
                  expected = File.join(Puppet[:server_datadir], 'indirector_testing', 'testing.json')
         | 
| 21 21 | 
             
                  expect(subject.path('testing')).to eq(expected)
         | 
| 22 22 | 
             
                end
         | 
| 23 23 |  | 
| 24 | 
            -
                it "uses the :client_datadir setting if this is not the  | 
| 25 | 
            -
                  allow(Puppet.run_mode).to receive(: | 
| 24 | 
            +
                it "uses the :client_datadir setting if this is not the server" do
         | 
| 25 | 
            +
                  allow(Puppet.run_mode).to receive(:server?).and_return(false)
         | 
| 26 26 | 
             
                  expected = File.join(Puppet[:client_datadir], 'indirector_testing', 'testing.json')
         | 
| 27 27 | 
             
                  expect(subject.path('testing')).to eq(expected)
         | 
| 28 28 | 
             
                end
         | 
| 29 29 |  | 
| 30 30 | 
             
                it "overrides the default extension with a supplied value" do
         | 
| 31 | 
            -
                  allow(Puppet.run_mode).to receive(: | 
| 31 | 
            +
                  allow(Puppet.run_mode).to receive(:server?).and_return(true)
         | 
| 32 32 | 
             
                  expected = File.join(Puppet[:server_datadir], 'indirector_testing', 'testing.not-json')
         | 
| 33 33 | 
             
                  expect(subject.path('testing', '.not-json')).to eq(expected)
         | 
| 34 34 | 
             
                end
         | 
| @@ -50,7 +50,7 @@ describe Puppet::Indirector::JSON do | |
| 50 50 |  | 
| 51 51 | 
             
              context "handling requests" do
         | 
| 52 52 | 
             
                before :each do
         | 
| 53 | 
            -
                  allow(Puppet.run_mode).to receive(: | 
| 53 | 
            +
                  allow(Puppet.run_mode).to receive(:server?).and_return(true)
         | 
| 54 54 | 
             
                  Puppet[:server_datadir] = tmpdir('jsondir')
         | 
| 55 55 | 
             
                  FileUtils.mkdir_p(File.join(Puppet[:server_datadir], 'indirector_testing'))
         | 
| 56 56 | 
             
                end
         | 
| @@ -158,7 +158,7 @@ describe Puppet::Indirector::JSON do | |
| 158 158 |  | 
| 159 159 | 
             
              context "#search" do
         | 
| 160 160 | 
             
                before :each do
         | 
| 161 | 
            -
                  allow(Puppet.run_mode).to receive(: | 
| 161 | 
            +
                  allow(Puppet.run_mode).to receive(:server?).and_return(true)
         | 
| 162 162 | 
             
                  Puppet[:server_datadir] = tmpdir('jsondir')
         | 
| 163 163 | 
             
                  FileUtils.mkdir_p(File.join(Puppet[:server_datadir], 'indirector_testing'))
         | 
| 164 164 | 
             
                end
         | 
| @@ -19,7 +19,6 @@ describe Puppet::SSL::Key::File do | |
| 19 19 | 
             
                  allow(Puppet.settings).to receive(:use)
         | 
| 20 20 |  | 
| 21 21 | 
             
                  @searcher = Puppet::SSL::Key::File.new
         | 
| 22 | 
            -
                  allow(@searcher).to receive(:ca?).and_return(false)
         | 
| 23 22 | 
             
                  expect(@searcher.public_key_path("whatever")).to eq(File.expand_path("/public/key/dir/whatever.pem"))
         | 
| 24 23 | 
             
                end
         | 
| 25 24 | 
             
              end
         | 
| @@ -11,24 +11,24 @@ describe Puppet::Indirector::Msgpack, :if => Puppet.features.msgpack? do | |
| 11 11 |  | 
| 12 12 | 
             
              context "#path" do
         | 
| 13 13 | 
             
                before :each do
         | 
| 14 | 
            -
                  Puppet[:server_datadir] = '/sample/datadir/ | 
| 14 | 
            +
                  Puppet[:server_datadir] = '/sample/datadir/server'
         | 
| 15 15 | 
             
                  Puppet[:client_datadir] = '/sample/datadir/client'
         | 
| 16 16 | 
             
                end
         | 
| 17 17 |  | 
| 18 | 
            -
                it "uses the :server_datadir setting if this is the  | 
| 19 | 
            -
                  allow(Puppet.run_mode).to receive(: | 
| 18 | 
            +
                it "uses the :server_datadir setting if this is the server" do
         | 
| 19 | 
            +
                  allow(Puppet.run_mode).to receive(:server?).and_return(true)
         | 
| 20 20 | 
             
                  expected = File.join(Puppet[:server_datadir], 'indirector_testing', 'testing.msgpack')
         | 
| 21 21 | 
             
                  expect(subject.path('testing')).to eq(expected)
         | 
| 22 22 | 
             
                end
         | 
| 23 23 |  | 
| 24 | 
            -
                it "uses the :client_datadir setting if this is not the  | 
| 25 | 
            -
                  allow(Puppet.run_mode).to receive(: | 
| 24 | 
            +
                it "uses the :client_datadir setting if this is not the server" do
         | 
| 25 | 
            +
                  allow(Puppet.run_mode).to receive(:server?).and_return(false)
         | 
| 26 26 | 
             
                  expected = File.join(Puppet[:client_datadir], 'indirector_testing', 'testing.msgpack')
         | 
| 27 27 | 
             
                  expect(subject.path('testing')).to eq(expected)
         | 
| 28 28 | 
             
                end
         | 
| 29 29 |  | 
| 30 30 | 
             
                it "overrides the default extension with a supplied value" do
         | 
| 31 | 
            -
                  allow(Puppet.run_mode).to receive(: | 
| 31 | 
            +
                  allow(Puppet.run_mode).to receive(:server?).and_return(true)
         | 
| 32 32 | 
             
                  expected = File.join(Puppet[:server_datadir], 'indirector_testing', 'testing.not-msgpack')
         | 
| 33 33 | 
             
                  expect(subject.path('testing', '.not-msgpack')).to eq(expected)
         | 
| 34 34 | 
             
                end
         | 
| @@ -50,7 +50,7 @@ describe Puppet::Indirector::Msgpack, :if => Puppet.features.msgpack? do | |
| 50 50 |  | 
| 51 51 | 
             
              context "handling requests" do
         | 
| 52 52 | 
             
                before :each do
         | 
| 53 | 
            -
                  allow(Puppet.run_mode).to receive(: | 
| 53 | 
            +
                  allow(Puppet.run_mode).to receive(:server?).and_return(true)
         | 
| 54 54 | 
             
                  Puppet[:server_datadir] = tmpdir('msgpackdir')
         | 
| 55 55 | 
             
                  FileUtils.mkdir_p(File.join(Puppet[:server_datadir], 'indirector_testing'))
         | 
| 56 56 | 
             
                end
         | 
| @@ -158,7 +158,7 @@ describe Puppet::Indirector::Msgpack, :if => Puppet.features.msgpack? do | |
| 158 158 |  | 
| 159 159 | 
             
              context "#search" do
         | 
| 160 160 | 
             
                before :each do
         | 
| 161 | 
            -
                  allow(Puppet.run_mode).to receive(: | 
| 161 | 
            +
                  allow(Puppet.run_mode).to receive(:server?).and_return(true)
         | 
| 162 162 | 
             
                  Puppet[:server_datadir] = tmpdir('msgpackdir')
         | 
| 163 163 | 
             
                  FileUtils.mkdir_p(File.join(Puppet[:server_datadir], 'indirector_testing'))
         | 
| 164 164 | 
             
                end
         | 
| @@ -0,0 +1,33 @@ | |
| 1 | 
            +
            require 'spec_helper'
         | 
| 2 | 
            +
            require 'puppet/node'
         | 
| 3 | 
            +
            require 'puppet/indirector/node/json'
         | 
| 4 | 
            +
             | 
| 5 | 
            +
            describe Puppet::Node::Json do
         | 
| 6 | 
            +
              describe '#save' do
         | 
| 7 | 
            +
                subject(:indirection) { described_class.indirection }
         | 
| 8 | 
            +
             | 
| 9 | 
            +
                let(:env) { Puppet::Node::Environment.create(:testing, []) }
         | 
| 10 | 
            +
                let(:node) { Puppet::Node.new('node_name', :environment => env) }
         | 
| 11 | 
            +
                let(:file) { File.join(Puppet[:client_datadir], "node", "node_name.json") }
         | 
| 12 | 
            +
             | 
| 13 | 
            +
                before do
         | 
| 14 | 
            +
                  indirection.terminus_class = :json
         | 
| 15 | 
            +
                end
         | 
| 16 | 
            +
             | 
| 17 | 
            +
                it 'saves the instance of the node as JSON to disk' do
         | 
| 18 | 
            +
                  indirection.save(node)
         | 
| 19 | 
            +
                  json = Puppet::FileSystem.read(file, :encoding => 'bom|utf-8')
         | 
| 20 | 
            +
                  content = Puppet::Util::Json.load(json)
         | 
| 21 | 
            +
                  expect(content["name"]).to eq('node_name')
         | 
| 22 | 
            +
                end
         | 
| 23 | 
            +
             | 
| 24 | 
            +
                context 'when node cannot be saved' do
         | 
| 25 | 
            +
                  it 'raises Errno::EISDIR' do
         | 
| 26 | 
            +
                    FileUtils.mkdir_p(file)
         | 
| 27 | 
            +
                    expect {
         | 
| 28 | 
            +
                      indirection.save(node)
         | 
| 29 | 
            +
                     }.to raise_error(Errno::EISDIR, /node_name.json/)
         | 
| 30 | 
            +
                  end
         | 
| 31 | 
            +
                end
         | 
| 32 | 
            +
              end
         | 
| 33 | 
            +
            end
         | 
| @@ -1,9 +1,10 @@ | |
| 1 1 | 
             
            require 'spec_helper'
         | 
| 2 2 |  | 
| 3 3 | 
             
            require 'puppet/transaction/report'
         | 
| 4 | 
            -
            require 'puppet/indirector/report/ | 
| 4 | 
            +
            require 'puppet/indirector/report/json'
         | 
| 5 5 |  | 
| 6 | 
            -
            describe Puppet::Transaction::Report:: | 
| 6 | 
            +
            describe Puppet::Transaction::Report::Json do
         | 
| 7 | 
            +
              include PuppetSpec::Files
         | 
| 7 8 | 
             
              describe '#save' do
         | 
| 8 9 | 
             
                subject(:indirection) { described_class.indirection }
         | 
| 9 10 |  | 
| @@ -17,19 +18,17 @@ describe Puppet::Transaction::Report::Yaml do | |
| 17 18 | 
             
                let(:file) { request.path(:me) }
         | 
| 18 19 |  | 
| 19 20 | 
             
                before do
         | 
| 20 | 
            -
                   | 
| 21 | 
            -
                end
         | 
| 21 | 
            +
                  Puppet[:lastrunreport] = File.join(Puppet[:statedir], "last_run_report.json")
         | 
| 22 22 |  | 
| 23 | 
            -
             | 
| 24 | 
            -
                  indirection.save(report)
         | 
| 23 | 
            +
                  indirection.terminus_class = :json
         | 
| 25 24 | 
             
                end
         | 
| 26 25 |  | 
| 27 | 
            -
                it 'saves the instance of the report as  | 
| 26 | 
            +
                it 'saves the instance of the report as JSON to disk' do
         | 
| 27 | 
            +
             | 
| 28 28 | 
             
                  indirection.save(report)
         | 
| 29 | 
            -
                   | 
| 30 | 
            -
             | 
| 31 | 
            -
                  )
         | 
| 32 | 
            -
                  expect(content.host).to eq(certname)
         | 
| 29 | 
            +
                  json = Puppet::FileSystem.read(Puppet[:lastrunreport], :encoding => 'bom|utf-8')
         | 
| 30 | 
            +
                  content = Puppet::Util::Json.load(json)
         | 
| 31 | 
            +
                  expect(content["host"]).to eq(certname)
         | 
| 33 32 | 
             
                end
         | 
| 34 33 |  | 
| 35 34 | 
             
                it 'allows mode overwrite' do
         | 
| @@ -37,8 +36,7 @@ describe Puppet::Transaction::Report::Yaml do | |
| 37 36 | 
             
                  indirection.save(report)
         | 
| 38 37 |  | 
| 39 38 | 
             
                  if Puppet::Util::Platform.windows?
         | 
| 40 | 
            -
                     | 
| 41 | 
            -
                    mode = Puppet::Util::Windows::Security.get_mode(file)
         | 
| 39 | 
            +
                    mode = File.stat(file).mode
         | 
| 42 40 | 
             
                  else
         | 
| 43 41 | 
             
                    mode = Puppet::FileSystem.stat(file).mode
         | 
| 44 42 | 
             
                  end
         | 
| @@ -62,21 +60,12 @@ describe Puppet::Transaction::Report::Yaml do | |
| 62 60 | 
             
                  end
         | 
| 63 61 | 
             
                end
         | 
| 64 62 |  | 
| 65 | 
            -
                context 'when repport is invalid' do
         | 
| 66 | 
            -
                  it 'logs error' do
         | 
| 67 | 
            -
                    expect(Puppet).to receive(:send_log).with(:err, /Could not save yaml ziggy: can't dump anonymous class/)
         | 
| 68 | 
            -
             | 
| 69 | 
            -
                    report.configuration_version = Class.new
         | 
| 70 | 
            -
                    indirection.save(report)
         | 
| 71 | 
            -
                  end
         | 
| 72 | 
            -
                end
         | 
| 73 | 
            -
             | 
| 74 63 | 
             
                context 'when report cannot be saved' do
         | 
| 75 | 
            -
                  it 'raises  | 
| 64 | 
            +
                  it 'raises Error' do
         | 
| 76 65 | 
             
                    FileUtils.mkdir_p(file)
         | 
| 77 66 | 
             
                    expect {
         | 
| 78 67 | 
             
                      indirection.save(report)
         | 
| 79 | 
            -
                     }.to raise_error(Errno::EISDIR, /last_run_report. | 
| 68 | 
            +
                     }.to raise_error(Errno::EISDIR, /last_run_report.json/)
         | 
| 80 69 | 
             
                  end
         | 
| 81 70 | 
             
                end
         | 
| 82 71 | 
             
              end
         | 
| @@ -4,14 +4,6 @@ require 'puppet/transaction/report' | |
| 4 4 | 
             
            require 'puppet/indirector/report/yaml'
         | 
| 5 5 |  | 
| 6 6 | 
             
            describe Puppet::Transaction::Report::Yaml do
         | 
| 7 | 
            -
              it "should be a subclass of the Yaml terminus" do
         | 
| 8 | 
            -
                expect(Puppet::Transaction::Report::Yaml.superclass).to equal(Puppet::Indirector::Yaml)
         | 
| 9 | 
            -
              end
         | 
| 10 | 
            -
             | 
| 11 | 
            -
              it "should have documentation" do
         | 
| 12 | 
            -
                expect(Puppet::Transaction::Report::Yaml.doc).not_to be_nil
         | 
| 13 | 
            -
              end
         | 
| 14 | 
            -
             | 
| 15 7 | 
             
              it "should be registered with the report indirection" do
         | 
| 16 8 | 
             
                indirection = Puppet::Indirector::Indirection.instance(:report)
         | 
| 17 9 | 
             
                expect(Puppet::Transaction::Report::Yaml.indirection).to equal(indirection)
         | 
| @@ -24,4 +16,76 @@ describe Puppet::Transaction::Report::Yaml do | |
| 24 16 | 
             
              it "should unconditionally save/load from the --lastrunreport setting" do
         | 
| 25 17 | 
             
                expect(subject.path(:me)).to eq(Puppet[:lastrunreport])
         | 
| 26 18 | 
             
              end
         | 
| 19 | 
            +
             | 
| 20 | 
            +
              describe '#save' do
         | 
| 21 | 
            +
                subject(:indirection) { described_class.indirection }
         | 
| 22 | 
            +
             | 
| 23 | 
            +
                let(:request) { described_class.new }
         | 
| 24 | 
            +
                let(:certname) { 'ziggy' }
         | 
| 25 | 
            +
                let(:report) do
         | 
| 26 | 
            +
                  report = Puppet::Transaction::Report.new
         | 
| 27 | 
            +
                  report.host = certname
         | 
| 28 | 
            +
                  report
         | 
| 29 | 
            +
                end
         | 
| 30 | 
            +
                let(:file) { request.path(:me) }
         | 
| 31 | 
            +
             | 
| 32 | 
            +
                before do
         | 
| 33 | 
            +
                  indirection.terminus_class = :yaml
         | 
| 34 | 
            +
                end
         | 
| 35 | 
            +
             | 
| 36 | 
            +
                it 'saves the instance of the report as YAML to disk' do
         | 
| 37 | 
            +
                  indirection.save(report)
         | 
| 38 | 
            +
                  content = Puppet::Util::Yaml.safe_load_file(
         | 
| 39 | 
            +
                    Puppet[:lastrunreport], [Puppet::Transaction::Report]
         | 
| 40 | 
            +
                  )
         | 
| 41 | 
            +
                  expect(content.host).to eq(certname)
         | 
| 42 | 
            +
                end
         | 
| 43 | 
            +
             | 
| 44 | 
            +
                it 'allows mode overwrite' do
         | 
| 45 | 
            +
                  Puppet.settings.setting(:lastrunreport).mode = '0644'
         | 
| 46 | 
            +
                  indirection.save(report)
         | 
| 47 | 
            +
             | 
| 48 | 
            +
                  if Puppet::Util::Platform.windows?
         | 
| 49 | 
            +
                    mode = File.stat(file).mode
         | 
| 50 | 
            +
                  else
         | 
| 51 | 
            +
                    mode = Puppet::FileSystem.stat(file).mode
         | 
| 52 | 
            +
                  end
         | 
| 53 | 
            +
             | 
| 54 | 
            +
                  expect(mode & 07777).to eq(0644)
         | 
| 55 | 
            +
                end
         | 
| 56 | 
            +
             | 
| 57 | 
            +
                context 'when mode is invalid' do
         | 
| 58 | 
            +
                  before do
         | 
| 59 | 
            +
                    Puppet.settings.setting(:lastrunreport).mode = '9999'
         | 
| 60 | 
            +
                  end
         | 
| 61 | 
            +
             | 
| 62 | 
            +
                  after do
         | 
| 63 | 
            +
                    Puppet.settings.setting(:lastrunreport).mode = '0644'
         | 
| 64 | 
            +
                  end
         | 
| 65 | 
            +
             | 
| 66 | 
            +
                  it 'raises Puppet::DevError ' do
         | 
| 67 | 
            +
                    expect{
         | 
| 68 | 
            +
                      indirection.save(report)
         | 
| 69 | 
            +
                    }.to raise_error(Puppet::DevError, "replace_file mode: 9999 is invalid")
         | 
| 70 | 
            +
                  end
         | 
| 71 | 
            +
                end
         | 
| 72 | 
            +
             | 
| 73 | 
            +
                context 'when repport is invalid' do
         | 
| 74 | 
            +
                  it 'logs error' do
         | 
| 75 | 
            +
                    expect(Puppet).to receive(:send_log).with(:err, /Could not save yaml ziggy: can't dump anonymous class/)
         | 
| 76 | 
            +
             | 
| 77 | 
            +
                    report.configuration_version = Class.new
         | 
| 78 | 
            +
                    indirection.save(report)
         | 
| 79 | 
            +
                  end
         | 
| 80 | 
            +
                end
         | 
| 81 | 
            +
             | 
| 82 | 
            +
                context 'when report cannot be saved' do
         | 
| 83 | 
            +
                  it 'raises Error' do
         | 
| 84 | 
            +
                    FileUtils.mkdir_p(file)
         | 
| 85 | 
            +
                    expect {
         | 
| 86 | 
            +
                      indirection.save(report)
         | 
| 87 | 
            +
                    }.to raise_error(Errno::EISDIR, /last_run_report.yaml/)
         | 
| 88 | 
            +
                  end
         | 
| 89 | 
            +
                end
         | 
| 90 | 
            +
              end
         | 
| 27 91 | 
             
            end
         | 
| @@ -126,8 +126,8 @@ describe Puppet::Indirector::Request do | |
| 126 126 | 
             
                    expect(Puppet::Indirector::Request.new(:ind, :method, "http://host:543/", nil).port).to eq(543)
         | 
| 127 127 | 
             
                  end
         | 
| 128 128 |  | 
| 129 | 
            -
                  it "should default to the  | 
| 130 | 
            -
                    Puppet[: | 
| 129 | 
            +
                  it "should default to the serverport if the URI scheme is 'puppet'" do
         | 
| 130 | 
            +
                    Puppet[:serverport] = "321"
         | 
| 131 131 | 
             
                    expect(Puppet::Indirector::Request.new(:ind, :method, "puppet://host/", nil).port).to eq(321)
         | 
| 132 132 | 
             
                  end
         | 
| 133 133 |  | 
| @@ -534,7 +534,7 @@ describe Puppet::Indirector::Request do | |
| 534 534 | 
             
                      expect(request.server).to be_nil
         | 
| 535 535 | 
             
                      expect(request.port).to be_nil
         | 
| 536 536 | 
             
                      expect(Puppet.settings[:server]).not_to be_nil
         | 
| 537 | 
            -
                      expect(Puppet.settings[: | 
| 537 | 
            +
                      expect(Puppet.settings[:serverport]).not_to be_nil
         | 
| 538 538 | 
             
                    end
         | 
| 539 539 | 
             
                  end
         | 
| 540 540 | 
             
                end
         | 
| @@ -552,7 +552,7 @@ describe Puppet::Indirector::Request do | |
| 552 552 | 
             
                  req = Puppet::Indirector::Request.new('node', 'find', 'localhost', nil)
         | 
| 553 553 | 
             
                  req.do_request() do |request|
         | 
| 554 554 | 
             
                    expect(request.server).to eq(Puppet.settings[:server])
         | 
| 555 | 
            -
                    expect(request.port).to eq(Puppet.settings[: | 
| 555 | 
            +
                    expect(request.port).to eq(Puppet.settings[:serverport])
         | 
| 556 556 | 
             
                  end
         | 
| 557 557 | 
             
                end
         | 
| 558 558 | 
             
              end
         | 
| @@ -249,7 +249,7 @@ describe Puppet::Indirector::REST do | |
| 249 249 |  | 
| 250 250 | 
             
              it "should default to :port for the port setting" do
         | 
| 251 251 | 
             
                expect(terminus_class).to receive(:port_setting).and_return(nil)
         | 
| 252 | 
            -
                Puppet[: | 
| 252 | 
            +
                Puppet[:serverport] = "543"
         | 
| 253 253 | 
             
                expect(terminus_class.port).to eq(543)
         | 
| 254 254 | 
             
              end
         | 
| 255 255 |  | 
| @@ -38,30 +38,30 @@ describe Puppet::Indirector::Yaml do | |
| 38 38 |  | 
| 39 39 | 
             
              before :each do
         | 
| 40 40 | 
             
                Puppet[:clientyamldir] = dir
         | 
| 41 | 
            -
                allow(Puppet.run_mode).to receive(: | 
| 41 | 
            +
                allow(Puppet.run_mode).to receive(:server?).and_return(false)
         | 
| 42 42 | 
             
              end
         | 
| 43 43 |  | 
| 44 44 | 
             
              describe "when choosing file location" do
         | 
| 45 | 
            -
                it "should use the server_datadir if the run_mode is  | 
| 46 | 
            -
                  allow(Puppet.run_mode).to receive(: | 
| 45 | 
            +
                it "should use the server_datadir if the run_mode is server" do
         | 
| 46 | 
            +
                  allow(Puppet.run_mode).to receive(:server?).and_return(true)
         | 
| 47 47 | 
             
                  Puppet[:yamldir] = serverdir
         | 
| 48 48 | 
             
                  expect(terminus.path(:me)).to match(/^#{serverdir}/)
         | 
| 49 49 | 
             
                end
         | 
| 50 50 |  | 
| 51 | 
            -
                it "should use the client yamldir if the run_mode is not  | 
| 52 | 
            -
                  allow(Puppet.run_mode).to receive(: | 
| 51 | 
            +
                it "should use the client yamldir if the run_mode is not server" do
         | 
| 52 | 
            +
                  allow(Puppet.run_mode).to receive(:server?).and_return(false)
         | 
| 53 53 | 
             
                  Puppet[:clientyamldir] = clientdir
         | 
| 54 54 | 
             
                  expect(terminus.path(:me)).to match(/^#{clientdir}/)
         | 
| 55 55 | 
             
                end
         | 
| 56 56 |  | 
| 57 57 | 
             
                it "should use the extension if one is specified" do
         | 
| 58 | 
            -
                  allow(Puppet.run_mode).to receive(: | 
| 58 | 
            +
                  allow(Puppet.run_mode).to receive(:server?).and_return(true)
         | 
| 59 59 | 
             
                  Puppet[:yamldir] = serverdir
         | 
| 60 60 | 
             
                  expect(terminus.path(:me,'.farfignewton')).to match(%r{\.farfignewton$})
         | 
| 61 61 | 
             
                end
         | 
| 62 62 |  | 
| 63 63 | 
             
                it "should assume an extension of .yaml if none is specified" do
         | 
| 64 | 
            -
                  allow(Puppet.run_mode).to receive(: | 
| 64 | 
            +
                  allow(Puppet.run_mode).to receive(:server?).and_return(true)
         | 
| 65 65 | 
             
                  Puppet[:yamldir] = serverdir
         | 
| 66 66 | 
             
                  expect(terminus.path(:me)).to match(%r{\.yaml$})
         | 
| 67 67 | 
             
                end
         | 
| @@ -112,8 +112,8 @@ describe Puppet::Indirector, "when registering an indirection" do | |
| 112 112 | 
             
              end
         | 
| 113 113 |  | 
| 114 114 | 
             
              it "should pass any provided options to the indirection during initialization" do
         | 
| 115 | 
            -
                expect(Puppet::Indirector::Indirection).to receive(:new).with(@thingie, :first, {: | 
| 116 | 
            -
                @indirection = @thingie.indirects :first, : | 
| 115 | 
            +
                expect(Puppet::Indirector::Indirection).to receive(:new).with(@thingie, :first, {:doc => 'some docs', :indirected_class => 'Thingie'})
         | 
| 116 | 
            +
                @indirection = @thingie.indirects :first, :doc => 'some docs'
         | 
| 117 117 | 
             
              end
         | 
| 118 118 |  | 
| 119 119 | 
             
              it "should extend the class to handle serialization" do
         | 
| @@ -247,6 +247,21 @@ describe Puppet::ModuleTool::Applications::Installer, :unless => RUBY_PLATFORM = | |
| 247 247 | 
             
                      expect(subject).to include :result => :success
         | 
| 248 248 | 
             
                      graph_should_include 'pmtacceptance-mysql', nil => v('0.8.0')
         | 
| 249 249 | 
             
                    end
         | 
| 250 | 
            +
             | 
| 251 | 
            +
                    context 'with an already installed dependency' do
         | 
| 252 | 
            +
                      before { preinstall('pmtacceptance-stdlib', '2.6.0') }
         | 
| 253 | 
            +
             | 
| 254 | 
            +
                      def options
         | 
| 255 | 
            +
                        super.merge(:version => '0.7.0')
         | 
| 256 | 
            +
                      end
         | 
| 257 | 
            +
             | 
| 258 | 
            +
                      it 'installs given version without errors and does not change version of dependency' do
         | 
| 259 | 
            +
                        expect(subject).to include :result => :success
         | 
| 260 | 
            +
                        graph_should_include 'pmtacceptance-mysql', nil => v('0.7.0')
         | 
| 261 | 
            +
                        expect(subject[:error]).to be_nil
         | 
| 262 | 
            +
                        graph_should_include 'pmtacceptance-stdlib', v('2.6.0') => v('2.6.0')
         | 
| 263 | 
            +
                      end
         | 
| 264 | 
            +
                    end
         | 
| 250 265 | 
             
                  end
         | 
| 251 266 |  | 
| 252 267 | 
             
                  context 'with a --version that cannot satisfy' do
         | 
| @@ -258,6 +273,20 @@ describe Puppet::ModuleTool::Applications::Installer, :unless => RUBY_PLATFORM = | |
| 258 273 | 
             
                      expect(subject).to include :result => :failure
         | 
| 259 274 | 
             
                    end
         | 
| 260 275 |  | 
| 276 | 
            +
                    it 'prints a detailed error containing the modules that would not be satisfied' do
         | 
| 277 | 
            +
                      graph = double(SemanticPuppet::Dependency::Graph, :modules => ['pmtacceptance-mysql'])
         | 
| 278 | 
            +
                      exception = SemanticPuppet::Dependency::UnsatisfiableGraph.new(graph)
         | 
| 279 | 
            +
                      allow(exception).to receive(:respond_to?).and_return(true)
         | 
| 280 | 
            +
                      allow(exception).to receive(:unsatisfied).and_return('pmtacceptance-mysql')
         | 
| 281 | 
            +
                      allow(SemanticPuppet::Dependency).to receive(:resolve).and_raise(exception)
         | 
| 282 | 
            +
             | 
| 283 | 
            +
                      expect(subject[:error]).to include(:multiline)
         | 
| 284 | 
            +
                      expect(subject[:error][:multiline]).to include("Could not install module 'pmtacceptance-mysql' (> 1.0.0)")
         | 
| 285 | 
            +
                      expect(subject[:error][:multiline]).to include("The requested version cannot satisfy one or more of the following installed modules:")
         | 
| 286 | 
            +
                      expect(subject[:error][:multiline]).to include("pmtacceptance-keystone, expects 'pmtacceptance-mysql': >=0.6.1 <1.0.0")
         | 
| 287 | 
            +
                      expect(subject[:error][:multiline]).to include("Use `puppet module install 'pmtacceptance-mysql' --ignore-dependencies` to install only this module")
         | 
| 288 | 
            +
                    end
         | 
| 289 | 
            +
             | 
| 261 290 | 
             
                    context 'with --ignore-dependencies' do
         | 
| 262 291 | 
             
                      def options
         | 
| 263 292 | 
             
                        super.merge(:ignore_dependencies => true)
         | 
| @@ -278,6 +307,43 @@ describe Puppet::ModuleTool::Applications::Installer, :unless => RUBY_PLATFORM = | |
| 278 307 | 
             
                        graph_should_include 'pmtacceptance-mysql', nil => v('2.1.0')
         | 
| 279 308 | 
             
                      end
         | 
| 280 309 | 
             
                    end
         | 
| 310 | 
            +
             | 
| 311 | 
            +
                    context 'with an already installed dependency' do
         | 
| 312 | 
            +
                      let(:graph) {
         | 
| 313 | 
            +
                        double(SemanticPuppet::Dependency::Graph,
         | 
| 314 | 
            +
                          :dependencies => {
         | 
| 315 | 
            +
                            'pmtacceptance-mysql' => {
         | 
| 316 | 
            +
                              :version => '2.1.0'
         | 
| 317 | 
            +
                            }
         | 
| 318 | 
            +
                          },
         | 
| 319 | 
            +
                          :modules => ['pmtacceptance-mysql'],
         | 
| 320 | 
            +
                          :unsatisfied => 'pmtacceptance-stdlib'
         | 
| 321 | 
            +
                        )
         | 
| 322 | 
            +
                      }
         | 
| 323 | 
            +
             | 
| 324 | 
            +
                      let(:unsatisfiable_graph_exception) { SemanticPuppet::Dependency::UnsatisfiableGraph.new(graph) }
         | 
| 325 | 
            +
             | 
| 326 | 
            +
                      before do
         | 
| 327 | 
            +
                        allow(SemanticPuppet::Dependency).to receive(:resolve).and_raise(unsatisfiable_graph_exception)
         | 
| 328 | 
            +
                        allow(unsatisfiable_graph_exception).to receive(:respond_to?).and_return(true)
         | 
| 329 | 
            +
                        allow(unsatisfiable_graph_exception).to receive(:unsatisfied).and_return(graph.unsatisfied)
         | 
| 330 | 
            +
             | 
| 331 | 
            +
                        preinstall('pmtacceptance-stdlib', '2.6.0')
         | 
| 332 | 
            +
                      end
         | 
| 333 | 
            +
             | 
| 334 | 
            +
                      def options
         | 
| 335 | 
            +
                        super.merge(:version => '2.1.0')
         | 
| 336 | 
            +
                      end
         | 
| 337 | 
            +
             | 
| 338 | 
            +
                      it 'fails to install and outputs a multiline error containing the versions, expectations and workaround' do
         | 
| 339 | 
            +
                        expect(subject).to include :result => :failure
         | 
| 340 | 
            +
                        expect(subject[:error]).to include(:multiline)
         | 
| 341 | 
            +
                        expect(subject[:error][:multiline]).to include("Could not install module 'pmtacceptance-mysql' (v2.1.0)")
         | 
| 342 | 
            +
                        expect(subject[:error][:multiline]).to include("The requested version cannot satisfy one or more of the following installed modules:")
         | 
| 343 | 
            +
                        expect(subject[:error][:multiline]).to include("pmtacceptance-stdlib, installed: 2.6.0, expected: >= 2.2.1")
         | 
| 344 | 
            +
                        expect(subject[:error][:multiline]).to include("Use `puppet module install 'pmtacceptance-mysql' --ignore-dependencies` to install only this module")
         | 
| 345 | 
            +
                      end
         | 
| 346 | 
            +
                    end
         | 
| 281 347 | 
             
                  end
         | 
| 282 348 | 
             
                end
         | 
| 283 349 |  |