puppet 5.5.18-x64-mingw32 → 5.5.19-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/Gemfile.lock +12 -11
- data/lib/puppet.rb +5 -2
- data/lib/puppet/application/filebucket.rb +13 -0
- data/lib/puppet/defaults.rb +60 -33
- data/lib/puppet/indirector/catalog/compiler.rb +8 -0
- data/lib/puppet/network/http/connection.rb +4 -0
- data/lib/puppet/network/http/pool.rb +5 -1
- data/lib/puppet/pops/evaluator/access_operator.rb +2 -2
- data/lib/puppet/pops/evaluator/evaluator_impl.rb +1 -1
- data/lib/puppet/pops/types/type_calculator.rb +24 -0
- data/lib/puppet/provider/group/groupadd.rb +19 -19
- data/lib/puppet/provider/mailalias/aliases.rb +1 -1
- data/lib/puppet/provider/package/apt.rb +14 -3
- data/lib/puppet/provider/package/dnfmodule.rb +9 -2
- data/lib/puppet/provider/package/dpkg.rb +13 -6
- data/lib/puppet/provider/package/fink.rb +20 -3
- data/lib/puppet/provider/package/openbsd.rb +13 -1
- data/lib/puppet/provider/package/pkg.rb +18 -5
- data/lib/puppet/provider/package/yum.rb +9 -5
- data/lib/puppet/provider/user/directoryservice.rb +30 -5
- data/lib/puppet/provider/user/useradd.rb +5 -6
- data/lib/puppet/ssl/certificate.rb +2 -1
- data/lib/puppet/ssl/certificate_authority.rb +6 -5
- data/lib/puppet/test/test_helper.rb +7 -0
- data/lib/puppet/transaction/resource_harness.rb +1 -1
- data/lib/puppet/type/file.rb +13 -0
- data/lib/puppet/type/package.rb +63 -9
- data/lib/puppet/util/plist.rb +6 -0
- data/lib/puppet/version.rb +1 -1
- data/locales/puppet.pot +100 -92
- data/man/man5/puppet.conf.5 +12 -6
- data/man/man8/puppet-agent.8 +1 -1
- data/man/man8/puppet-apply.8 +1 -1
- data/man/man8/puppet-ca.8 +1 -1
- data/man/man8/puppet-catalog.8 +1 -1
- data/man/man8/puppet-cert.8 +1 -1
- data/man/man8/puppet-certificate.8 +1 -1
- data/man/man8/puppet-certificate_request.8 +1 -1
- data/man/man8/puppet-certificate_revocation_list.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 +1 -1
- data/man/man8/puppet-doc.8 +1 -1
- data/man/man8/puppet-epp.8 +1 -1
- data/man/man8/puppet-facts.8 +1 -1
- data/man/man8/puppet-filebucket.8 +16 -1
- 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-master.8 +1 -1
- data/man/man8/puppet-module.8 +1 -1
- data/man/man8/puppet-node.8 +1 -1
- data/man/man8/puppet-parser.8 +1 -1
- data/man/man8/puppet-plugin.8 +1 -1
- data/man/man8/puppet-report.8 +1 -1
- data/man/man8/puppet-resource.8 +1 -1
- data/man/man8/puppet-script.8 +1 -1
- data/man/man8/puppet-status.8 +1 -1
- data/man/man8/puppet.8 +2 -2
- data/spec/fixtures/integration/provider/mailalias/aliases/test1 +1 -0
- data/spec/integration/indirector/facts/facter_spec.rb +4 -0
- data/spec/unit/application/apply_spec.rb +2 -12
- data/spec/unit/configurer/fact_handler_spec.rb +0 -4
- data/spec/unit/configurer_spec.rb +0 -3
- data/spec/unit/indirector/catalog/compiler_spec.rb +45 -26
- data/spec/unit/network/http/connection_spec.rb +17 -1
- data/spec/unit/network/http/pool_spec.rb +32 -0
- data/spec/unit/node_spec.rb +7 -4
- data/spec/unit/provider/group/groupadd_spec.rb +30 -1
- data/spec/unit/provider/package/apt_spec.rb +13 -2
- data/spec/unit/provider/package/aptitude_spec.rb +1 -0
- data/spec/unit/provider/package/dnfmodule_spec.rb +22 -0
- data/spec/unit/provider/package/dpkg_spec.rb +20 -4
- data/spec/unit/provider/package/openbsd_spec.rb +17 -0
- data/spec/unit/provider/package/pkg_spec.rb +13 -1
- data/spec/unit/provider/package/yum_spec.rb +50 -0
- data/spec/unit/provider/user/directoryservice_spec.rb +41 -0
- data/spec/unit/provider/user/useradd_spec.rb +7 -2
- data/spec/unit/puppet_pal_2pec.rb +3 -0
- data/spec/unit/ssl/certificate_authority_spec.rb +2 -3
- data/spec/unit/ssl/certificate_spec.rb +7 -0
- data/spec/unit/type/package_spec.rb +8 -0
- data/spec/unit/util/plist_spec.rb +20 -0
- metadata +2 -2
| @@ -33,6 +33,7 @@ describe Puppet::Type.type(:package).provider(:aptitude) do | |
| 33 33 | 
             
                expect(pkg.provider).to receive(:aptitude).
         | 
| 34 34 | 
             
                  with('-y', '-o', 'DPkg::Options::=--force-confold', :install, 'faff').
         | 
| 35 35 | 
             
                  and_return(0)
         | 
| 36 | 
            +
                expect(pkg.provider).to receive(:properties).and_return({:mark => :none})
         | 
| 36 37 |  | 
| 37 38 | 
             
                pkg.provider.install
         | 
| 38 39 | 
             
              end
         | 
| @@ -161,6 +161,28 @@ describe Puppet::Type.type(:package).provider(:dnfmodule) do | |
| 161 161 | 
             
                    provider.install
         | 
| 162 162 | 
             
                  end
         | 
| 163 163 | 
             
                end
         | 
| 164 | 
            +
             | 
| 165 | 
            +
                context "with an installed flavor" do
         | 
| 166 | 
            +
                  before do
         | 
| 167 | 
            +
                    provider.instance_variable_get('@property_hash')[:flavor] = 'minimal'
         | 
| 168 | 
            +
                  end
         | 
| 169 | 
            +
             | 
| 170 | 
            +
                  it "should remove existing packages and reset the module stream before installing another flavor" do
         | 
| 171 | 
            +
                    resource[:flavor] = 'common'
         | 
| 172 | 
            +
                    expect(provider).to receive(:execute).thrice.with(array_including(/remove|reset|install/))
         | 
| 173 | 
            +
                    provider.flavor = resource[:flavor]
         | 
| 174 | 
            +
                  end
         | 
| 175 | 
            +
             | 
| 176 | 
            +
                  it "should not do anything if the flavor doesn't change" do
         | 
| 177 | 
            +
                    resource[:flavor] = 'minimal'
         | 
| 178 | 
            +
                    expect(provider).not_to receive(:execute)
         | 
| 179 | 
            +
                    provider.flavor = resource[:flavor]
         | 
| 180 | 
            +
                  end
         | 
| 181 | 
            +
             | 
| 182 | 
            +
                  it "should return the existing flavor" do
         | 
| 183 | 
            +
                    expect(provider.flavor).to eq('minimal')
         | 
| 184 | 
            +
                  end
         | 
| 185 | 
            +
                end
         | 
| 164 186 | 
             
              end
         | 
| 165 187 |  | 
| 166 188 | 
             
              context "parsing the output of module list --installed" do
         | 
| @@ -126,7 +126,10 @@ describe Puppet::Type.type(:package).provider(:dpkg) do | |
| 126 126 |  | 
| 127 127 | 
             
                it "considers the package held if its state is 'hold'" do
         | 
| 128 128 | 
             
                  dpkg_query_execution_returns(bash_installed_output.gsub("install","hold"))
         | 
| 129 | 
            -
                   | 
| 129 | 
            +
                  query=provider.query
         | 
| 130 | 
            +
                  expect(query[:ensure]).to eq("4.2-5ubuntu3")
         | 
| 131 | 
            +
                  expect(query[:mark]).to eq(:hold)
         | 
| 132 | 
            +
             | 
| 130 133 | 
             
                end
         | 
| 131 134 |  | 
| 132 135 | 
             
                context "parsing tests" do
         | 
| @@ -184,14 +187,15 @@ describe Puppet::Type.type(:package).provider(:dpkg) do | |
| 184 187 |  | 
| 185 188 | 
             
                it "uses 'dpkg -i' to install the package" do
         | 
| 186 189 | 
             
                  expect(resource).to receive(:[]).with(:source).and_return("mypackagefile")
         | 
| 190 | 
            +
                  expect(provider).to receive(:properties).and_return({:mark => :hold})
         | 
| 187 191 | 
             
                  expect(provider).to receive(:unhold)
         | 
| 188 192 | 
             
                  expect(provider).to receive(:dpkg).with(any_args, "-i", "mypackagefile")
         | 
| 189 | 
            -
             | 
| 190 193 | 
             
                  provider.install
         | 
| 191 194 | 
             
                end
         | 
| 192 195 |  | 
| 193 196 | 
             
                it "keeps old config files if told to do so" do
         | 
| 194 197 | 
             
                  expect(resource).to receive(:[]).with(:configfiles).and_return(:keep)
         | 
| 198 | 
            +
                  expect(provider).to receive(:properties).and_return({:mark => :hold})
         | 
| 195 199 | 
             
                  expect(provider).to receive(:unhold)
         | 
| 196 200 | 
             
                  expect(provider).to receive(:dpkg).with("--force-confold", any_args)
         | 
| 197 201 |  | 
| @@ -200,6 +204,7 @@ describe Puppet::Type.type(:package).provider(:dpkg) do | |
| 200 204 |  | 
| 201 205 | 
             
                it "replaces old config files if told to do so" do
         | 
| 202 206 | 
             
                  expect(resource).to receive(:[]).with(:configfiles).and_return(:replace)
         | 
| 207 | 
            +
                  expect(provider).to receive(:properties).and_return({:mark => :hold})
         | 
| 203 208 | 
             
                  expect(provider).to receive(:unhold)
         | 
| 204 209 | 
             
                  expect(provider).to receive(:dpkg).with("--force-confnew", any_args)
         | 
| 205 210 |  | 
| @@ -207,6 +212,7 @@ describe Puppet::Type.type(:package).provider(:dpkg) do | |
| 207 212 | 
             
                end
         | 
| 208 213 |  | 
| 209 214 | 
             
                it "ensures any hold is removed" do
         | 
| 215 | 
            +
                  expect(provider).to receive(:properties).and_return({:mark => :hold})
         | 
| 210 216 | 
             
                  expect(provider).to receive(:unhold).once
         | 
| 211 217 | 
             
                  expect(provider).to receive(:dpkg)
         | 
| 212 218 | 
             
                  provider.install
         | 
| @@ -222,18 +228,28 @@ describe Puppet::Type.type(:package).provider(:dpkg) do | |
| 222 228 | 
             
                end
         | 
| 223 229 |  | 
| 224 230 | 
             
                it "installs first if package is not present and ensure holding" do
         | 
| 231 | 
            +
                  allow(provider).to receive(:execute)
         | 
| 232 | 
            +
                  allow(provider).to receive(:package_not_installed?).and_return(true)
         | 
| 233 | 
            +
                  expect(provider).to receive(:install).once
         | 
| 234 | 
            +
                  expect(provider).to receive(:hold)
         | 
| 235 | 
            +
                  provider.deprecated_hold
         | 
| 236 | 
            +
                end
         | 
| 237 | 
            +
             | 
| 225 238 |  | 
| 239 | 
            +
                it "skips install new package if hold is true" do
         | 
| 226 240 | 
             
                  allow(provider).to receive(:execute)
         | 
| 227 241 | 
             
                  allow(provider).to receive(:package_not_installed?).and_return(true)
         | 
| 228 242 | 
             
                  expect(provider).to receive(:install).once
         | 
| 229 | 
            -
                  provider.hold
         | 
| 243 | 
            +
                  expect(provider).to receive(:hold)
         | 
| 244 | 
            +
                  provider.deprecated_hold
         | 
| 230 245 | 
             
                end
         | 
| 231 246 |  | 
| 232 247 | 
             
                it "skips install new package if package is allready installed" do
         | 
| 233 248 | 
             
                  allow(provider).to receive(:execute)
         | 
| 234 249 | 
             
                  allow(provider).to receive(:package_not_installed?).and_return(false)
         | 
| 235 250 | 
             
                  expect(provider).not_to receive(:install)
         | 
| 236 | 
            -
                  provider.hold
         | 
| 251 | 
            +
                  expect(provider).to receive(:hold)
         | 
| 252 | 
            +
                  provider.deprecated_hold
         | 
| 237 253 | 
             
                end
         | 
| 238 254 |  | 
| 239 255 | 
             
                it "executes dpkg --set-selections when holding" do
         | 
| @@ -395,4 +395,21 @@ describe Puppet::Type.type(:package).provider(:openbsd) do | |
| 395 395 | 
             
                  end
         | 
| 396 396 | 
             
                end
         | 
| 397 397 | 
             
              end
         | 
| 398 | 
            +
             | 
| 399 | 
            +
              context "#flavor" do
         | 
| 400 | 
            +
                before do
         | 
| 401 | 
            +
                  provider.instance_variable_get('@property_hash')[:flavor] = 'no_x11-python'
         | 
| 402 | 
            +
                end
         | 
| 403 | 
            +
             | 
| 404 | 
            +
                it 'should return the existing flavor' do
         | 
| 405 | 
            +
                  expect(provider.flavor).to eq('no_x11-python')
         | 
| 406 | 
            +
                end
         | 
| 407 | 
            +
             | 
| 408 | 
            +
                it 'should remove and install the new flavor if different' do
         | 
| 409 | 
            +
                  provider.resource[:flavor] = 'no_x11-ruby'
         | 
| 410 | 
            +
                  expect(provider).to receive(:uninstall).ordered
         | 
| 411 | 
            +
                  expect(provider).to receive(:install).ordered
         | 
| 412 | 
            +
                  provider.flavor = provider.resource[:flavor]
         | 
| 413 | 
            +
                end
         | 
| 414 | 
            +
              end
         | 
| 398 415 | 
             
            end
         | 
| @@ -90,7 +90,7 @@ describe Puppet::Type.type(:package).provider(:pkg) do | |
| 90 90 |  | 
| 91 91 | 
             
                  {
         | 
| 92 92 | 
             
                    'pkg://omnios/SUNWcs@0.5.11,5.11-0.151006:20130506T161045Z    i--' => {:name => 'SUNWcs', :ensure => '0.5.11,5.11-0.151006:20130506T161045Z', :status => 'installed', :provider => :pkg, :publisher => 'omnios'},
         | 
| 93 | 
            -
                    'pkg://omnios/incorporation/jeos/illumos-gate@11,5.11-0.151006:20130506T183443Z if-' => {:name => 'incorporation/jeos/illumos-gate', :ensure =>  | 
| 93 | 
            +
                    'pkg://omnios/incorporation/jeos/illumos-gate@11,5.11-0.151006:20130506T183443Z if-' => {:name => 'incorporation/jeos/illumos-gate', :ensure => "11,5.11-0.151006:20130506T183443Z", :mark => :hold, :status => 'installed', :provider => :pkg, :publisher => 'omnios'},
         | 
| 94 94 | 
             
                    'pkg://solaris/SUNWcs@0.5.11,5.11-0.151.0.1:20101105T001108Z      installed  -----' => {:name => 'SUNWcs', :ensure => '0.5.11,5.11-0.151.0.1:20101105T001108Z', :status => 'installed', :provider => :pkg, :publisher => 'solaris'},
         | 
| 95 95 | 
             
                   }.each do |k, v|
         | 
| 96 96 | 
             
                    it "[#{k}] should correctly parse" do
         | 
| @@ -251,6 +251,7 @@ describe Puppet::Type.type(:package).provider(:pkg) do | |
| 251 251 |  | 
| 252 252 | 
             
                      it "should accept all licenses" do
         | 
| 253 253 | 
             
                        expect(provider).to receive(:query).with(no_args).and_return({:ensure => :absent})
         | 
| 254 | 
            +
                        expect(provider).to receive(:properties).and_return({:mark => :hold})
         | 
| 254 255 | 
             
                        expect(Puppet::Util::Execution).to receive(:execute)
         | 
| 255 256 | 
             
                          .with(['/bin/pkg', 'install', *hash[:flags], 'dummy'], {:failonfail => false, :combine => true})
         | 
| 256 257 | 
             
                          .and_return(Puppet::Util::Execution::ProcessOutput.new('', 0))
         | 
| @@ -265,6 +266,7 @@ describe Puppet::Type.type(:package).provider(:pkg) do | |
| 265 266 | 
             
                        # Should install also check if the version installed is the same version we are asked to install? or should we rely on puppet for that?
         | 
| 266 267 | 
             
                        resource[:ensure] = '0.0.7,5.11-0.151006:20131230T130000Z'
         | 
| 267 268 | 
             
                        allow($CHILD_STATUS).to receive(:exitstatus).and_return(0)
         | 
| 269 | 
            +
                        expect(provider).to receive(:properties).and_return({:mark => :hold})
         | 
| 268 270 | 
             
                        expect(Puppet::Util::Execution).to receive(:execute).with(['/bin/pkg', 'unfreeze', 'dummy'], {:failonfail => false, :combine => true})
         | 
| 269 271 | 
             
                        expect(Puppet::Util::Execution).to receive(:execute)
         | 
| 270 272 | 
             
                          .with(['/bin/pkg', 'list', '-Hv', 'dummy'], {:failonfail => false, :combine => true})
         | 
| @@ -277,6 +279,7 @@ describe Puppet::Type.type(:package).provider(:pkg) do | |
| 277 279 |  | 
| 278 280 | 
             
                      it "should install specific version(2)" do
         | 
| 279 281 | 
             
                        resource[:ensure] = '0.0.8'
         | 
| 282 | 
            +
                        expect(provider).to receive(:properties).and_return({:mark => :hold})
         | 
| 280 283 | 
             
                        expect(Puppet::Util::Execution).to receive(:execute).with(['/bin/pkg', 'unfreeze', 'dummy'], {:failonfail => false, :combine => true})
         | 
| 281 284 | 
             
                        expect(Puppet::Util::Execution).to receive(:execute)
         | 
| 282 285 | 
             
                          .with(['/bin/pkg', 'list', '-Hv', 'dummy'], {:failonfail => false, :combine => true})
         | 
| @@ -290,6 +293,7 @@ describe Puppet::Type.type(:package).provider(:pkg) do | |
| 290 293 |  | 
| 291 294 | 
             
                      it "should downgrade to specific version" do
         | 
| 292 295 | 
             
                        resource[:ensure] = '0.0.7'
         | 
| 296 | 
            +
                        expect(provider).to receive(:properties).and_return({:mark => :hold})
         | 
| 293 297 | 
             
                        expect(provider).to receive(:query).with(no_args).and_return({:ensure => '0.0.8,5.11-0.151106:20131230T130000Z'})
         | 
| 294 298 | 
             
                        allow($CHILD_STATUS).to receive(:exitstatus).and_return(0)
         | 
| 295 299 | 
             
                        expect(Puppet::Util::Execution).to receive(:execute).with(['/bin/pkg', 'unfreeze', 'dummy'], {:failonfail => false, :combine => true})
         | 
| @@ -301,6 +305,7 @@ describe Puppet::Type.type(:package).provider(:pkg) do | |
| 301 305 |  | 
| 302 306 | 
             
                      it "should install any if version is not specified" do
         | 
| 303 307 | 
             
                        resource[:ensure] = :present
         | 
| 308 | 
            +
                        expect(provider).to receive(:properties).and_return({:mark => :hold})
         | 
| 304 309 | 
             
                        expect(provider).to receive(:query).with(no_args).and_return({:ensure => :absent})
         | 
| 305 310 | 
             
                        expect(Puppet::Util::Execution).to receive(:execute)
         | 
| 306 311 | 
             
                          .with(['/bin/pkg', 'install', *hash[:flags], 'dummy'], {:failonfail => false, :combine => true})
         | 
| @@ -312,6 +317,7 @@ describe Puppet::Type.type(:package).provider(:pkg) do | |
| 312 317 |  | 
| 313 318 | 
             
                      it "should install if no version was previously installed, and a specific version was requested" do
         | 
| 314 319 | 
             
                        resource[:ensure] = '0.0.7'
         | 
| 320 | 
            +
                        expect(provider).to receive(:properties).and_return({:mark => :hold})
         | 
| 315 321 | 
             
                        expect(provider).to receive(:query).with(no_args).and_return({:ensure => :absent})
         | 
| 316 322 | 
             
                        expect(Puppet::Util::Execution).to receive(:execute).with(['/bin/pkg', 'unfreeze', 'dummy'], {:failonfail => false, :combine => true})
         | 
| 317 323 | 
             
                        expect(Puppet::Util::Execution).to receive(:execute)
         | 
| @@ -325,6 +331,7 @@ describe Puppet::Type.type(:package).provider(:pkg) do | |
| 325 331 | 
             
                        resource[:ensure] = '1.0-0.151006'
         | 
| 326 332 | 
             
                        is = :absent
         | 
| 327 333 | 
             
                        expect(provider).to receive(:query).with(no_args).and_return({:ensure => is})
         | 
| 334 | 
            +
                        expect(provider).to receive(:properties).and_return({:mark => :hold})
         | 
| 328 335 | 
             
                        expect(described_class).to receive(:pkg)
         | 
| 329 336 | 
             
                          .with(:list, '-Hvfa', 'dummy@1.0-0.151006')
         | 
| 330 337 | 
             
                          .and_return(Puppet::Util::Execution::ProcessOutput.new(File.read(my_fixture('dummy_implicit_version')), 0))
         | 
| @@ -340,6 +347,7 @@ describe Puppet::Type.type(:package).provider(:pkg) do | |
| 340 347 | 
             
                        resource[:ensure] = '1.0-0.151006'
         | 
| 341 348 | 
             
                        is = '1.0,5.11-0.151006:20140219T191204Z'
         | 
| 342 349 | 
             
                        expect(provider).to receive(:query).with(no_args).and_return({:ensure => is})
         | 
| 350 | 
            +
                        expect(provider).to receive(:properties).and_return({:mark => :hold})
         | 
| 343 351 | 
             
                        expect(described_class).to receive(:pkg).with(:list, '-Hvfa', 'dummy@1.0-0.151006').and_return(File.read(my_fixture('dummy_implicit_version')))
         | 
| 344 352 | 
             
                        expect(Puppet::Util::Execution).to receive(:execute).with(['/bin/pkg', 'update', '-n', 'dummy@1.0,5.11-0.151006:20140220T084443Z'], {:failonfail => false, :combine => true})
         | 
| 345 353 | 
             
                        expect(provider).to receive(:unhold).with(no_args)
         | 
| @@ -398,12 +406,16 @@ describe Puppet::Type.type(:package).provider(:pkg) do | |
| 398 406 | 
             
                  it "should support current pkg version" do
         | 
| 399 407 | 
             
                    expect(described_class).to receive(:pkg).with(:version).and_return('630e1ffc7a19')
         | 
| 400 408 | 
             
                    expect(described_class).to receive(:pkg).with([:uninstall, resource[:name]])
         | 
| 409 | 
            +
                    expect(provider).to receive(:properties).and_return({:hold => false})
         | 
| 410 | 
            +
             | 
| 401 411 | 
             
                    provider.uninstall
         | 
| 402 412 | 
             
                  end
         | 
| 403 413 |  | 
| 404 414 | 
             
                  it "should support original pkg commands" do
         | 
| 405 415 | 
             
                    expect(described_class).to receive(:pkg).with(:version).and_return('052adf36c3f4')
         | 
| 406 416 | 
             
                    expect(described_class).to receive(:pkg).with([:uninstall, '-r', resource[:name]])
         | 
| 417 | 
            +
                    expect(provider).to receive(:properties).and_return({:hold => false})
         | 
| 418 | 
            +
             | 
| 407 419 | 
             
                    provider.uninstall
         | 
| 408 420 | 
             
                  end
         | 
| 409 421 | 
             
                end
         | 
| @@ -54,6 +54,56 @@ describe Puppet::Type.type(:package).provider(:yum) do | |
| 54 54 | 
             
                    provider.install
         | 
| 55 55 | 
             
                  end
         | 
| 56 56 | 
             
                end
         | 
| 57 | 
            +
             | 
| 58 | 
            +
                describe 'with install_options' do 
         | 
| 59 | 
            +
                  it 'can parse disable-repo with array of strings' do
         | 
| 60 | 
            +
                      resource[:install_options] = ['--disable-repo=dev*', '--disable-repo=prod*']
         | 
| 61 | 
            +
                      expect(provider).to receive(:execute) do | arr|
         | 
| 62 | 
            +
                        expect(arr[-3]).to eq(["--disable-repo=dev*", "--disable-repo=prod*"])
         | 
| 63 | 
            +
                      end
         | 
| 64 | 
            +
                      provider.install
         | 
| 65 | 
            +
                  end
         | 
| 66 | 
            +
             | 
| 67 | 
            +
                  it 'can parse disable-repo with array of hashes' do
         | 
| 68 | 
            +
                    resource[:install_options] = [{'--disable-repo' => 'dev*'}, {'--disable-repo' => 'prod*'}]
         | 
| 69 | 
            +
                    expect(provider).to receive(:execute) do | arr|
         | 
| 70 | 
            +
                      expect(arr[-3]).to eq(["--disable-repo=dev*", "--disable-repo=prod*"])
         | 
| 71 | 
            +
                    end
         | 
| 72 | 
            +
                    provider.install
         | 
| 73 | 
            +
                  end
         | 
| 74 | 
            +
             | 
| 75 | 
            +
                  it 'can parse enable-repo with array of strings' do
         | 
| 76 | 
            +
                      resource[:install_options] = ['--enable-repo=dev*', '--enable-repo=prod*']
         | 
| 77 | 
            +
                      expect(provider).to receive(:execute) do | arr|
         | 
| 78 | 
            +
                        expect(arr[-3]).to eq(["--enable-repo=dev*", "--enable-repo=prod*"])
         | 
| 79 | 
            +
                      end
         | 
| 80 | 
            +
                      provider.install
         | 
| 81 | 
            +
                  end
         | 
| 82 | 
            +
             | 
| 83 | 
            +
                  it 'can parse enable-repo with array of hashes' do
         | 
| 84 | 
            +
                    resource[:install_options] = [{'--enable-repo' => 'dev*'}, {'--disable-repo' => 'prod*'}]
         | 
| 85 | 
            +
                    expect(provider).to receive(:execute) do | arr|
         | 
| 86 | 
            +
                      expect(arr[-3]).to eq(["--enable-repo=dev*", "--disable-repo=prod*"])
         | 
| 87 | 
            +
                    end
         | 
| 88 | 
            +
                    provider.install
         | 
| 89 | 
            +
                  end
         | 
| 90 | 
            +
             | 
| 91 | 
            +
                  it 'can parse enable-repo with single hash' do
         | 
| 92 | 
            +
                    resource[:install_options] = [{'--enable-repo' => 'dev*','--disable-repo' => 'prod*'}]
         | 
| 93 | 
            +
                    expect(provider).to receive(:execute) do | arr|
         | 
| 94 | 
            +
                      expect(arr[-3]).to eq(["--disable-repo=prod*", "--enable-repo=dev*"])
         | 
| 95 | 
            +
                    end
         | 
| 96 | 
            +
                    provider.install
         | 
| 97 | 
            +
                  end
         | 
| 98 | 
            +
             | 
| 99 | 
            +
                  it 'can parse enable-repo with empty array' do
         | 
| 100 | 
            +
                    resource[:install_options] = []
         | 
| 101 | 
            +
                    expect(provider).to receive(:execute) do | arr|
         | 
| 102 | 
            +
                      expect(arr[-3]).to eq([])
         | 
| 103 | 
            +
                    end
         | 
| 104 | 
            +
                    provider.install
         | 
| 105 | 
            +
                  end
         | 
| 106 | 
            +
                end
         | 
| 57 107 | 
             
              end
         | 
| 58 108 |  | 
| 59 109 | 
             
              context "parsing the output of check-update" do
         | 
| @@ -196,6 +196,17 @@ describe Puppet::Type.type(:user).provider(:directoryservice) do | |
| 196 196 | 
             
                }
         | 
| 197 197 | 
             
              end
         | 
| 198 198 |  | 
| 199 | 
            +
              let (:dsimport_preamble) do
         | 
| 200 | 
            +
                '0x0A 0x5C 0x3A 0x2C dsRecTypeStandard:Users 2 dsAttrTypeStandard:RecordName base64:dsAttrTypeNative:ShadowHashData'
         | 
| 201 | 
            +
              end
         | 
| 202 | 
            +
             | 
| 203 | 
            +
              let (:dsimport_contents) do
         | 
| 204 | 
            +
                <<-DSIMPORT
         | 
| 205 | 
            +
            #{dsimport_preamble}
         | 
| 206 | 
            +
            #{username}:#{Base64.strict_encode64(sha512_embedded_bplist)}
         | 
| 207 | 
            +
                DSIMPORT
         | 
| 208 | 
            +
              end
         | 
| 209 | 
            +
             | 
| 199 210 | 
             
              # The below represents output of 'dscl -plist . readall /Users' converted to
         | 
| 200 211 | 
             
              # a native Ruby hash if only one user were installed on the system.
         | 
| 201 212 | 
             
              # This lets us check the behavior of all the methods necessary to return a
         | 
| @@ -960,6 +971,24 @@ end | |
| 960 971 | 
             
                end
         | 
| 961 972 | 
             
              end
         | 
| 962 973 |  | 
| 974 | 
            +
              describe '#set_shadow_hash_data' do
         | 
| 975 | 
            +
                let(:users_plist) { {'ShadowHashData' => ['string_data'] } }
         | 
| 976 | 
            +
             | 
| 977 | 
            +
                it 'should flush the plist data to disk on OS X < 10.15' do
         | 
| 978 | 
            +
                  allow(provider.class).to receive(:get_os_version).and_return('10.12')
         | 
| 979 | 
            +
             | 
| 980 | 
            +
                  expect(provider).to receive(:write_users_plist_to_disk)
         | 
| 981 | 
            +
                  provider.set_shadow_hash_data(users_plist, pbkdf2_embedded_plist)
         | 
| 982 | 
            +
                end
         | 
| 983 | 
            +
             | 
| 984 | 
            +
                it 'should flush the plist data a temporary file on OS X >= 10.15' do
         | 
| 985 | 
            +
                  allow(provider.class).to receive(:get_os_version).and_return('10.15')
         | 
| 986 | 
            +
             | 
| 987 | 
            +
                  expect(provider).to receive(:write_and_import_shadow_hash_data)
         | 
| 988 | 
            +
                  provider.set_shadow_hash_data(users_plist, pbkdf2_embedded_plist)
         | 
| 989 | 
            +
                end
         | 
| 990 | 
            +
              end
         | 
| 991 | 
            +
             | 
| 963 992 | 
             
              describe '#set_salted_pbkdf2' do
         | 
| 964 993 | 
             
                let(:users_plist) { {'ShadowHashData' => ['string_data'] } }
         | 
| 965 994 | 
             
                let(:entropy_shadow_hash_data) do
         | 
| @@ -1011,6 +1040,18 @@ end | |
| 1011 1040 | 
             
                end
         | 
| 1012 1041 | 
             
              end
         | 
| 1013 1042 |  | 
| 1043 | 
            +
              describe '#write_and_import_shadow_hash_data' do
         | 
| 1044 | 
            +
                it 'should save the passed plist to a temporary file and import it' do
         | 
| 1045 | 
            +
                  tmpfile = double('tempfile', :path => "/tmp/dsimport_#{username}", :flush => nil)
         | 
| 1046 | 
            +
                  allow(Tempfile).to receive(:create).and_yield(tmpfile)
         | 
| 1047 | 
            +
                  allow(provider).to receive(:dscl).with('.', 'delete', user_path, 'ShadowHashData')
         | 
| 1048 | 
            +
             | 
| 1049 | 
            +
                  expect(tmpfile).to receive(:write).with(dsimport_contents)
         | 
| 1050 | 
            +
                  expect(provider).to receive(:dsimport).with(tmpfile.path, '/Local/Default', 'M')
         | 
| 1051 | 
            +
                  provider.write_and_import_shadow_hash_data(sha512_embedded_bplist)
         | 
| 1052 | 
            +
                end
         | 
| 1053 | 
            +
              end
         | 
| 1054 | 
            +
             | 
| 1014 1055 | 
             
              describe '#merge_attribute_with_dscl' do
         | 
| 1015 1056 | 
             
                it 'should raise an error if a dscl command raises an error' do
         | 
| 1016 1057 | 
             
                  expect(provider).to receive(:dscl).with('.', '-merge', user_path, 'GeneratedUID', 'GUID').and_raise(Puppet::ExecutionFailure, 'boom')
         | 
| @@ -324,7 +324,7 @@ describe Puppet::Type.type(:user).provider(:useradd) do | |
| 324 324 |  | 
| 325 325 | 
             
                it "should return the local comment string when forcelocal is true" do
         | 
| 326 326 | 
             
                  resource[:forcelocal] = true
         | 
| 327 | 
            -
                  allow(File).to receive(: | 
| 327 | 
            +
                  allow(File).to receive(:read).with('/etc/passwd').and_return(content)
         | 
| 328 328 | 
             
                  expect(provider.comment).to eq('local comment')
         | 
| 329 329 | 
             
                end
         | 
| 330 330 |  | 
| @@ -337,7 +337,7 @@ describe Puppet::Type.type(:user).provider(:useradd) do | |
| 337 337 | 
             
              end
         | 
| 338 338 |  | 
| 339 339 | 
             
              describe "#finduser" do
         | 
| 340 | 
            -
                before { allow(File).to receive(: | 
| 340 | 
            +
                before { allow(File).to receive(:read).with('/etc/passwd').and_return(content) }
         | 
| 341 341 |  | 
| 342 342 | 
             
                let(:content) { "sample_account:sample_password:sample_uid:sample_gid:sample_gecos:sample_directory:sample_shell" }
         | 
| 343 343 | 
             
                let(:output) do
         | 
| @@ -361,6 +361,11 @@ describe Puppet::Type.type(:user).provider(:useradd) do | |
| 361 361 | 
             
                it "returns false when specified key/value pair is not found" do
         | 
| 362 362 | 
             
                  expect(provider.finduser(:account, 'invalid_account')).to eq(false)
         | 
| 363 363 | 
             
                end
         | 
| 364 | 
            +
             | 
| 365 | 
            +
                it "reads the user file only once per resource" do
         | 
| 366 | 
            +
                  expect(File).to receive(:read).with('/etc/passwd').once
         | 
| 367 | 
            +
                  5.times { provider.finduser(:account, 'sample_account') }
         | 
| 368 | 
            +
                end
         | 
| 364 369 | 
             
              end
         | 
| 365 370 |  | 
| 366 371 | 
             
              describe "#check_allow_dup" do
         | 
| @@ -714,6 +714,9 @@ describe 'Puppet Pal' do | |
| 714 714 |  | 
| 715 715 | 
             
                  context 'facts are supported such that' do
         | 
| 716 716 | 
             
                    it 'they are obtained if they are not given' do
         | 
| 717 | 
            +
                      facts = Puppet::Node::Facts.new(Puppet[:certname], 'puppetversion' => Puppet.version)
         | 
| 718 | 
            +
                      Puppet::Node::Facts.indirection.save(facts)
         | 
| 719 | 
            +
             | 
| 717 720 | 
             
                      testing_env_dir # creates the structure
         | 
| 718 721 | 
             
                      result = Puppet::Pal.in_tmp_environment('pal_env', modulepath: modulepath ) do |ctx|
         | 
| 719 722 | 
             
                        ctx.with_script_compiler {|c| c.evaluate_string("$facts =~ Hash and $facts[puppetversion] == '#{Puppet.version}'") }
         | 
| @@ -876,9 +876,8 @@ describe Puppet::SSL::CertificateAuthority do | |
| 876 876 | 
             
                    @ca.verify("me")
         | 
| 877 877 | 
             
                  end
         | 
| 878 878 |  | 
| 879 | 
            -
                  it "should set the store purpose to OpenSSL::X509:: | 
| 880 | 
            -
                     | 
| 881 | 
            -
                    expect(@store).to receive(:add_file).with(cacert)
         | 
| 879 | 
            +
                  it "should set the store purpose to OpenSSL::X509::PURPOSE_ANY" do
         | 
| 880 | 
            +
                    expect(@store).to receive(:purpose=).with OpenSSL::X509::PURPOSE_ANY
         | 
| 882 881 |  | 
| 883 882 | 
             
                    @ca.verify("me")
         | 
| 884 883 | 
             
                  end
         | 
| @@ -138,6 +138,13 @@ describe Puppet::SSL::Certificate do | |
| 138 138 | 
             
                    expect(cert.custom_extensions).to include('oid' => '1.3.6.1.4.1.34380.1.2.1', 'value' => 'x509 :(')
         | 
| 139 139 | 
             
                  end
         | 
| 140 140 |  | 
| 141 | 
            +
                  it "returns extensions under the ppAuthCertExt" do
         | 
| 142 | 
            +
                    exts = {'pp_auth_role' => 'taketwo'}
         | 
| 143 | 
            +
                    cert = build_cert(:extension_requests => exts)
         | 
| 144 | 
            +
                    sign_wrapped_cert(cert)
         | 
| 145 | 
            +
                    expect(cert.custom_extensions).to include('oid' => 'pp_auth_role', 'value' => 'taketwo')
         | 
| 146 | 
            +
                  end
         | 
| 147 | 
            +
             | 
| 141 148 | 
             
                  it "doesn't return standard extensions" do
         | 
| 142 149 | 
             
                    cert = build_cert(:dns_alt_names => 'foo')
         | 
| 143 150 | 
             
                    expect(cert.custom_extensions).to be_empty
         | 
| @@ -30,6 +30,10 @@ describe Puppet::Type.type(:package) do | |
| 30 30 | 
             
                expect(Puppet::Type.type(:package).provider_feature(:versionable)).not_to be_nil
         | 
| 31 31 | 
             
              end
         | 
| 32 32 |  | 
| 33 | 
            +
              it "should have a :supports_flavors feature" do
         | 
| 34 | 
            +
                expect(Puppet::Type.type(:package).provider_feature(:supports_flavors)).not_to be_nil
         | 
| 35 | 
            +
              end
         | 
| 36 | 
            +
             | 
| 33 37 | 
             
              it "should have a :package_settings feature that requires :package_settings_insync?, :package_settings and :package_settings=" do
         | 
| 34 38 | 
             
                expect(Puppet::Type.type(:package).provider_feature(:package_settings).methods).to eq([:package_settings_insync?, :package_settings, :package_settings=])
         | 
| 35 39 | 
             
              end
         | 
| @@ -53,6 +57,10 @@ describe Puppet::Type.type(:package) do | |
| 53 57 | 
             
                it "should have a package_settings property" do
         | 
| 54 58 | 
             
                  expect(Puppet::Type.type(:package).attrtype(:package_settings)).to eq(:property)
         | 
| 55 59 | 
             
                end
         | 
| 60 | 
            +
             | 
| 61 | 
            +
                it "should have a flavor property" do
         | 
| 62 | 
            +
                  expect(Puppet::Type.type(:package).attrtype(:flavor)).to eq(:property)
         | 
| 63 | 
            +
                end
         | 
| 56 64 | 
             
              end
         | 
| 57 65 |  | 
| 58 66 | 
             
              describe "when validating attribute values" do
         | 
| @@ -1,3 +1,5 @@ | |
| 1 | 
            +
            # coding: utf-8
         | 
| 2 | 
            +
             | 
| 1 3 | 
             
            require 'spec_helper'
         | 
| 2 4 | 
             
            require 'puppet/util/plist'
         | 
| 3 5 | 
             
            require 'puppet_spec/files'
         | 
| @@ -52,6 +54,19 @@ describe Puppet::Util::Plist, :if => Puppet.features.cfpropertylist? do | |
| 52 54 | 
             
                </dict>
         | 
| 53 55 | 
             
                </plist>'
         | 
| 54 56 | 
             
              end
         | 
| 57 | 
            +
              let(:ascii_xml_plist) do
         | 
| 58 | 
            +
                '<?xml version="1.0" encoding="UTF-8"?>
         | 
| 59 | 
            +
                 <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
         | 
| 60 | 
            +
                 <plist version="1.0">
         | 
| 61 | 
            +
                 <dict>
         | 
| 62 | 
            +
                   <key>RecordName</key>
         | 
| 63 | 
            +
                     <array>
         | 
| 64 | 
            +
                       <string>Timișoara</string>
         | 
| 65 | 
            +
                       <string>Tōkyō</string>
         | 
| 66 | 
            +
                     </array>
         | 
| 67 | 
            +
                 </dict>
         | 
| 68 | 
            +
                 </plist>'.force_encoding(Encoding::US_ASCII)
         | 
| 69 | 
            +
              end
         | 
| 55 70 | 
             
              let(:non_plist_data) do
         | 
| 56 71 | 
             
                "Take my love, take my land
         | 
| 57 72 | 
             
                 Take me where I cannot stand
         | 
| @@ -62,6 +77,7 @@ describe Puppet::Util::Plist, :if => Puppet.features.cfpropertylist? do | |
| 62 77 | 
             
                "\xCF\xFA\xED\xFE\a\u0000\u0000\u0001\u0003\u0000\u0000\x80\u0002\u0000\u0000\u0000\u0012\u0000\u0000\u0000\b"
         | 
| 63 78 | 
             
              end
         | 
| 64 79 | 
             
              let(:valid_xml_plist_hash) { {"LastUsedPrinters"=>[{"Network"=>"10.85.132.1", "PrinterID"=>"baskerville_corp_puppetlabs_net"}, {"Network"=>"10.14.96.1", "PrinterID"=>"Statler"}]} }
         | 
| 80 | 
            +
              let(:ascii_xml_plist_hash) { {"RecordName"=>["Timișoara", "Tōkyō"]} }
         | 
| 65 81 | 
             
              let(:plist_path) { file_containing('sample.plist', valid_xml_plist) }
         | 
| 66 82 | 
             
              let(:binary_plist_magic_number) { 'bplist00' }
         | 
| 67 83 | 
             
              let(:bad_xml_doctype) { '<!DOCTYPE plist PUBLIC -//Apple Computer' }
         | 
| @@ -132,6 +148,10 @@ describe Puppet::Util::Plist, :if => Puppet.features.cfpropertylist? do | |
| 132 148 | 
             
                  expect(subject.parse_plist(valid_xml_plist)).to eq(valid_xml_plist_hash)
         | 
| 133 149 | 
             
                end
         | 
| 134 150 |  | 
| 151 | 
            +
                it "returns a valid hash when an ASCII XML plist is provided" do
         | 
| 152 | 
            +
                  expect(subject.parse_plist(ascii_xml_plist)).to eq(ascii_xml_plist_hash)
         | 
| 153 | 
            +
                end
         | 
| 154 | 
            +
             | 
| 135 155 | 
             
                it "raises a debug message and replaces a bad XML plist doctype should one be encountered" do
         | 
| 136 156 | 
             
                  expect(subject).to receive(:new_cfpropertylist).with({:data => good_xml_doctype}).and_return('plist_object')
         | 
| 137 157 | 
             
                  allow(subject).to receive(:convert_cfpropertylist_to_native_types).with('plist_object')
         |