puppet 6.0.0 → 6.1.0
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.
- checksums.yaml +4 -4
- data/Gemfile +2 -2
- data/Gemfile.lock +20 -20
- data/Guardfile.example +76 -0
- data/LICENSE +189 -4
- data/README.md +3 -3
- data/Rakefile +5 -2
- data/ext/solaris/smf/svc-puppetd +8 -1
- data/ext/solaris/smf/svc-puppetmasterd +8 -1
- data/lib/puppet/application/apply.rb +100 -59
- data/lib/puppet/application/cert.rb +4 -114
- data/lib/puppet/application/device.rb +48 -32
- data/lib/puppet/application/script.rb +1 -1
- data/lib/puppet/application/ssl.rb +135 -51
- data/lib/puppet/application.rb +5 -0
- data/lib/puppet/configurer.rb +2 -3
- data/lib/puppet/defaults.rb +33 -49
- data/lib/puppet/etc.rb +20 -0
- data/lib/puppet/face/config.rb +3 -3
- data/lib/puppet/face/key.rb +1 -1
- data/lib/puppet/face/node/clean.rb +0 -1
- data/lib/puppet/feature/base.rb +1 -1
- data/lib/puppet/file_bucket/dipper.rb +1 -1
- data/lib/puppet/file_serving/fileset.rb +1 -1
- data/lib/puppet/functions/abs.rb +1 -1
- data/lib/puppet/functions/new.rb +1 -1
- data/lib/puppet/module/task.rb +29 -38
- data/lib/puppet/pal/catalog_compiler.rb +96 -0
- data/lib/puppet/pal/compiler.rb +221 -0
- data/lib/puppet/pal/function_signature.rb +52 -0
- data/lib/puppet/pal/json_catalog_encoder.rb +67 -0
- data/lib/puppet/pal/pal_api.rb +15 -0
- data/lib/puppet/pal/pal_impl.rb +523 -0
- data/lib/puppet/pal/plan_signature.rb +71 -0
- data/lib/puppet/pal/script_compiler.rb +71 -0
- data/lib/puppet/pal/task_signature.rb +58 -0
- data/lib/puppet/parser/catalog_compiler.rb +24 -0
- data/lib/puppet/parser/compiler.rb +3 -1
- data/lib/puppet/parser/functions/generate.rb +7 -6
- data/lib/puppet/plugins/configuration.rb +5 -1
- data/lib/puppet/pops/evaluator/collectors/abstract_collector.rb +3 -1
- data/lib/puppet/pops/evaluator/deferred_resolver.rb +3 -0
- data/lib/puppet/pops/evaluator/evaluator_impl.rb +5 -1
- data/lib/puppet/pops/evaluator/external_syntax_support.rb +3 -3
- data/lib/puppet/pops/evaluator/runtime3_converter.rb +2 -2
- data/lib/puppet/pops/loader/ruby_legacy_function_instantiator.rb +19 -10
- data/lib/puppet/pops/loader/task_instantiator.rb +13 -70
- data/lib/puppet/pops/parser/heredoc_support.rb +1 -2
- data/lib/puppet/pops/parser/lexer2.rb +1 -1
- data/lib/puppet/pops/pcore.rb +10 -33
- data/lib/puppet/pops/serialization/to_data_converter.rb +9 -1
- data/lib/puppet/pops/serialization.rb +1 -0
- data/lib/puppet/pops/types/p_timespan_type.rb +2 -2
- data/lib/puppet/pops/types/string_converter.rb +18 -4
- data/lib/puppet/pops/validation/checker4_0.rb +17 -2
- data/lib/puppet/provider/exec.rb +59 -57
- data/lib/puppet/provider/group/aix.rb +18 -2
- data/lib/puppet/provider/group/windows_adsi.rb +7 -3
- data/lib/puppet/provider/nameservice.rb +1 -25
- data/lib/puppet/provider/package/dnf.rb +2 -0
- data/lib/puppet/provider/package/pkgng.rb +37 -21
- data/lib/puppet/provider/package/portage.rb +2 -2
- data/lib/puppet/provider/package/windows/exe_package.rb +16 -10
- data/lib/puppet/provider/package/windows/msi_package.rb +8 -0
- data/lib/puppet/provider/package/windows/package.rb +9 -1
- data/lib/puppet/provider/package/windows.rb +2 -2
- data/lib/puppet/provider/package/yum.rb +1 -1
- data/lib/puppet/provider/parsedfile.rb +25 -4
- data/lib/puppet/provider/service/launchd.rb +19 -3
- data/lib/puppet/provider/service/smf.rb +54 -0
- data/lib/puppet/provider/service/systemd.rb +19 -0
- data/lib/puppet/provider/service/upstart.rb +1 -0
- data/lib/puppet/provider/service/windows.rb +22 -5
- data/lib/puppet/provider/user/aix.rb +48 -2
- data/lib/puppet/provider/user/useradd.rb +2 -10
- data/lib/puppet/provider/user/windows_adsi.rb +9 -1
- data/lib/puppet/resource/catalog.rb +1 -5
- data/lib/puppet/resource.rb +3 -1
- data/lib/puppet/ssl/host.rb +26 -16
- data/lib/puppet/syntax_checkers/epp.rb +34 -0
- data/lib/puppet/syntax_checkers/pp.rb +34 -0
- data/lib/puppet/transaction/event_manager.rb +13 -1
- data/lib/puppet/transaction/persistence.rb +1 -1
- data/lib/puppet/transaction/resource_harness.rb +3 -1
- data/lib/puppet/type/group.rb +29 -1
- data/lib/puppet/type/package.rb +5 -1
- data/lib/puppet/type/resources.rb +12 -2
- data/lib/puppet/type/schedule.rb +7 -0
- data/lib/puppet/type/service.rb +12 -0
- data/lib/puppet/type/user.rb +5 -2
- data/lib/puppet/type.rb +6 -0
- data/lib/puppet/util/command_line.rb +2 -3
- data/lib/puppet/util/execution.rb +15 -1
- data/lib/puppet/util/filetype.rb +56 -8
- data/lib/puppet/util/log/destinations.rb +3 -2
- data/lib/puppet/util/logging.rb +3 -2
- data/lib/puppet/util/posix.rb +15 -0
- data/lib/puppet/util/selinux.rb +1 -1
- data/lib/puppet/util/storage.rb +12 -0
- data/lib/puppet/util/windows/adsi.rb +79 -2
- data/lib/puppet/util/windows/api_types.rb +1 -1
- data/lib/puppet/util/windows/process.rb +23 -3
- data/lib/puppet/util/windows/registry.rb +29 -5
- data/lib/puppet/util/windows/security.rb +14 -0
- data/lib/puppet/util/windows/service.rb +294 -74
- data/lib/puppet/util/windows/user.rb +3 -5
- data/lib/puppet/util.rb +7 -3
- data/lib/puppet/version.rb +1 -1
- data/lib/puppet.rb +1 -0
- data/lib/puppet_pal.rb +5 -1099
- data/locales/ja/puppet.po +952 -986
- data/locales/puppet.pot +592 -347
- data/man/man5/puppet.conf.5 +26 -31
- data/man/man8/puppet-agent.8 +1 -1
- data/man/man8/puppet-apply.8 +1 -1
- data/man/man8/puppet-catalog.8 +1 -1
- data/man/man8/puppet-config.8 +4 -4
- data/man/man8/puppet-describe.8 +1 -1
- data/man/man8/puppet-device.8 +23 -19
- 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 +1 -1
- data/man/man8/puppet-generate.8 +1 -1
- data/man/man8/puppet-help.8 +1 -1
- data/man/man8/puppet-key.8 +2 -2
- 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 +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-ssl.8 +26 -3
- data/man/man8/puppet-status.8 +1 -1
- data/man/man8/puppet.8 +2 -2
- data/spec/fixtures/unit/pops/loaders/loaders/mix_4x_and_3x_functions/usee/lib/puppet/parser/functions/bad_func_load.rb +11 -0
- data/spec/fixtures/unit/provider/package/pkgng/pkg.query +7 -1
- data/spec/fixtures/unit/provider/package/pkgng/pkg.query.zsh +1 -0
- data/spec/fixtures/unit/provider/service/smf/svcs_fmri.out +6 -0
- data/spec/fixtures/unit/provider/service/smf/svcs_multiple_fmris.out +13 -0
- data/spec/integration/application/apply_spec.rb +4 -1
- data/spec/integration/parser/collection_spec.rb +4 -8
- data/spec/integration/provider/service/windows_spec.rb +5 -5
- data/spec/integration/ssl/key_spec.rb +0 -4
- data/spec/integration/transaction_spec.rb +559 -0
- data/spec/integration/type/file_spec.rb +6 -6
- data/spec/integration/util/windows/registry_spec.rb +39 -0
- data/spec/integration/util/windows/security_spec.rb +10 -7
- data/spec/integration/util/windows/user_spec.rb +37 -17
- data/spec/lib/puppet/test_ca.rb +1 -1
- data/spec/spec_helper.rb +1 -1
- data/spec/unit/agent_spec.rb +2 -2
- data/spec/unit/application/apply_spec.rb +55 -2
- data/spec/unit/application/device_spec.rb +10 -7
- data/spec/unit/application/face_base_spec.rb +1 -1
- data/spec/unit/application/lookup_spec.rb +2 -1
- data/spec/unit/application/ssl_spec.rb +178 -109
- data/spec/unit/application_spec.rb +29 -11
- data/spec/unit/configurer/downloader_spec.rb +1 -1
- data/spec/unit/configurer_spec.rb +16 -5
- data/spec/unit/etc_spec.rb +25 -0
- data/spec/unit/face/node_spec.rb +1 -3
- data/spec/unit/face/parser_spec.rb +15 -0
- data/spec/unit/file_serving/fileset_spec.rb +11 -11
- data/spec/unit/functions/logging_spec.rb +10 -3
- data/spec/unit/indirector/catalog/json_spec.rb +9 -3
- data/spec/unit/indirector/yaml_spec.rb +1 -1
- data/spec/unit/network/http/connection_spec.rb +2 -2
- data/spec/unit/pops/evaluator/evaluating_parser_spec.rb +36 -0
- data/spec/unit/pops/evaluator/runtime3_converter_spec.rb +22 -4
- data/spec/unit/pops/loaders/loader_spec.rb +9 -17
- data/spec/unit/pops/loaders/loaders_spec.rb +48 -0
- data/spec/unit/pops/loaders/module_loaders_spec.rb +7 -7
- data/spec/unit/pops/parser/parse_heredoc_spec.rb +16 -0
- data/spec/unit/pops/serialization/to_from_hr_spec.rb +9 -0
- data/spec/unit/pops/types/p_timespan_type_spec.rb +22 -0
- data/spec/unit/pops/types/p_timestamp_type_spec.rb +19 -0
- data/spec/unit/pops/types/string_converter_spec.rb +25 -1
- data/spec/unit/pops/types/task_spec.rb +42 -116
- data/spec/unit/pops/validator/validator_spec.rb +24 -10
- data/spec/unit/provider/exec/posix_spec.rb +24 -0
- data/spec/unit/provider/group/aix_spec.rb +20 -6
- data/spec/unit/provider/group/ldap_spec.rb +22 -25
- data/spec/unit/provider/group/pw_spec.rb +7 -10
- data/spec/unit/provider/group/windows_adsi_spec.rb +42 -33
- data/spec/unit/provider/nameservice/directoryservice_spec.rb +97 -103
- data/spec/unit/provider/package/aix_spec.rb +5 -8
- data/spec/unit/provider/package/apt_spec.rb +3 -6
- data/spec/unit/provider/package/dnf_spec.rb +38 -25
- data/spec/unit/provider/package/dpkg_spec.rb +18 -21
- data/spec/unit/provider/package/freebsd_spec.rb +4 -7
- data/spec/unit/provider/package/gem_spec.rb +41 -41
- data/spec/unit/provider/package/hpux_spec.rb +7 -10
- data/spec/unit/provider/package/macports_spec.rb +13 -15
- data/spec/unit/provider/package/nim_spec.rb +3 -10
- data/spec/unit/provider/package/openbsd_spec.rb +14 -17
- data/spec/unit/provider/package/pip3_spec.rb +3 -6
- data/spec/unit/provider/package/pip_spec.rb +45 -49
- data/spec/unit/provider/package/pkgin_spec.rb +13 -18
- data/spec/unit/provider/package/pkgng_spec.rb +32 -27
- data/spec/unit/provider/package/puppet_gem_spec.rb +6 -9
- data/spec/unit/provider/package/tdnf_spec.rb +9 -12
- data/spec/unit/provider/package/windows/exe_package_spec.rb +3 -3
- data/spec/unit/provider/package/windows_spec.rb +4 -4
- data/spec/unit/provider/package/yum_spec.rb +30 -16
- data/spec/unit/provider/package/zypper_spec.rb +17 -19
- data/spec/unit/provider/service/bsd_spec.rb +7 -9
- data/spec/unit/provider/service/daemontools_spec.rb +12 -16
- data/spec/unit/provider/service/debian_spec.rb +6 -10
- data/spec/unit/provider/service/freebsd_spec.rb +2 -2
- data/spec/unit/provider/service/launchd_spec.rb +19 -0
- data/spec/unit/provider/service/openbsd_spec.rb +13 -17
- data/spec/unit/provider/service/rcng_spec.rb +2 -4
- data/spec/unit/provider/service/redhat_spec.rb +12 -11
- data/spec/unit/provider/service/runit_spec.rb +7 -14
- data/spec/unit/provider/service/smf_spec.rb +77 -13
- data/spec/unit/provider/service/src_spec.rb +11 -16
- data/spec/unit/provider/service/systemd_spec.rb +39 -1
- data/spec/unit/provider/service/windows_spec.rb +39 -7
- data/spec/unit/provider/user/aix_spec.rb +43 -2
- data/spec/unit/provider/user/hpux_spec.rb +3 -5
- data/spec/unit/provider/user/ldap_spec.rb +29 -32
- data/spec/unit/provider/user/pw_spec.rb +10 -13
- data/spec/unit/provider/user/useradd_spec.rb +2 -2
- data/spec/unit/provider/user/windows_adsi_spec.rb +4 -4
- data/spec/unit/puppet_pal_2pec.rb +6 -6
- data/spec/unit/puppet_pal_catalog_spec.rb +58 -0
- data/spec/unit/resource/catalog_spec.rb +2 -2
- data/spec/unit/resource_spec.rb +31 -0
- data/spec/unit/ssl/host_spec.rb +22 -1
- data/spec/unit/ssl/key_spec.rb +2 -4
- data/spec/unit/task_spec.rb +50 -5
- data/spec/unit/transaction/event_manager_spec.rb +12 -1
- data/spec/unit/transaction/persistence_spec.rb +4 -4
- data/spec/unit/transaction/resource_harness_spec.rb +18 -0
- data/spec/unit/type/group_spec.rb +11 -3
- data/spec/unit/type/resources_spec.rb +18 -0
- data/spec/unit/type/service_spec.rb +27 -1
- data/spec/unit/util/execution_spec.rb +77 -0
- data/spec/unit/util/filetype_spec.rb +13 -5
- data/spec/unit/util/log/destinations_spec.rb +10 -0
- data/spec/unit/util/logging_spec.rb +58 -41
- data/spec/unit/util/monkey_patches_spec.rb +18 -5
- data/spec/unit/util/posix_spec.rb +28 -0
- data/spec/unit/util/selinux_spec.rb +4 -0
- data/spec/unit/util/storage_spec.rb +107 -0
- data/spec/unit/util/suidmanager_spec.rb +1 -3
- data/spec/unit/util/windows/adsi_spec.rb +95 -0
- data/spec/unit/util/windows/service_spec.rb +377 -131
- metadata +24 -11
- data/ext/autotest/Rakefile +0 -8
- data/ext/autotest/config +0 -43
- data/ext/autotest/readme.rst +0 -16
- data/spec/fixtures/unit/provider/package/pkgng/pkg.info +0 -7
- data/spec/fixtures/unit/provider/package/pkgng/pkg.query_absent +0 -1
- data/spec/watchr.rb +0 -137
|
@@ -1,10 +1,8 @@
|
|
|
1
|
-
#!/usr/bin/env ruby
|
|
2
1
|
require 'spec_helper'
|
|
3
2
|
require 'etc'
|
|
4
3
|
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
describe provider_class, :unless => Puppet::Util::Platform.windows? do
|
|
4
|
+
describe Puppet::Type.type(:user).provider(:hpuxuseradd),
|
|
5
|
+
unless: Puppet::Util::Platform.windows? do
|
|
8
6
|
let :resource do
|
|
9
7
|
Puppet::Type.type(:user).new(
|
|
10
8
|
:title => 'testuser',
|
|
@@ -39,7 +37,7 @@ describe provider_class, :unless => Puppet::Util::Platform.windows? do
|
|
|
39
37
|
end
|
|
40
38
|
|
|
41
39
|
it "should have feature manages_passwords" do
|
|
42
|
-
expect(
|
|
40
|
+
expect(described_class).to be_manages_passwords
|
|
43
41
|
end
|
|
44
42
|
|
|
45
43
|
it "should return nil if user does not exist" do
|
|
@@ -1,27 +1,24 @@
|
|
|
1
|
-
#! /usr/bin/env ruby
|
|
2
1
|
require 'spec_helper'
|
|
3
2
|
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
describe provider_class do
|
|
3
|
+
describe Puppet::Type.type(:user).provider(:ldap) do
|
|
7
4
|
it "should have the Ldap provider class as its baseclass" do
|
|
8
|
-
expect(
|
|
5
|
+
expect(described_class.superclass).to equal(Puppet::Provider::Ldap)
|
|
9
6
|
end
|
|
10
7
|
|
|
11
8
|
it "should manage :posixAccount and :person objectclasses" do
|
|
12
|
-
expect(
|
|
9
|
+
expect(described_class.manager.objectclasses).to eq([:posixAccount, :person])
|
|
13
10
|
end
|
|
14
11
|
|
|
15
12
|
it "should use 'ou=People' as its relative base" do
|
|
16
|
-
expect(
|
|
13
|
+
expect(described_class.manager.location).to eq("ou=People")
|
|
17
14
|
end
|
|
18
15
|
|
|
19
16
|
it "should use :uid as its rdn" do
|
|
20
|
-
expect(
|
|
17
|
+
expect(described_class.manager.rdn).to eq(:uid)
|
|
21
18
|
end
|
|
22
19
|
|
|
23
20
|
it "should be able to manage passwords" do
|
|
24
|
-
expect(
|
|
21
|
+
expect(described_class).to be_manages_passwords
|
|
25
22
|
end
|
|
26
23
|
|
|
27
24
|
{:name => "uid",
|
|
@@ -33,15 +30,15 @@ describe provider_class do
|
|
|
33
30
|
:shell => "loginShell"
|
|
34
31
|
}.each do |puppet, ldap|
|
|
35
32
|
it "should map :#{puppet.to_s} to '#{ldap}'" do
|
|
36
|
-
expect(
|
|
33
|
+
expect(described_class.manager.ldap_name(puppet)).to eq(ldap)
|
|
37
34
|
end
|
|
38
35
|
end
|
|
39
36
|
|
|
40
|
-
|
|
37
|
+
context "when being created" do
|
|
41
38
|
before do
|
|
42
39
|
# So we don't try to actually talk to ldap
|
|
43
40
|
@connection = mock 'connection'
|
|
44
|
-
|
|
41
|
+
described_class.manager.stubs(:connect).yields @connection
|
|
45
42
|
end
|
|
46
43
|
|
|
47
44
|
it "should generate the sn as the last field of the cn" do
|
|
@@ -50,7 +47,7 @@ describe provider_class do
|
|
|
50
47
|
resource = stub 'resource', :should => %w{whatever}
|
|
51
48
|
resource.stubs(:should).with(:comment).returns ["Luke Kanies"]
|
|
52
49
|
resource.stubs(:should).with(:ensure).returns :present
|
|
53
|
-
instance =
|
|
50
|
+
instance = described_class.new(:name => "luke", :ensure => :absent)
|
|
54
51
|
|
|
55
52
|
instance.stubs(:resource).returns resource
|
|
56
53
|
|
|
@@ -66,7 +63,7 @@ describe provider_class do
|
|
|
66
63
|
resource = stub 'resource', :should => %w{whatever}
|
|
67
64
|
resource.stubs(:should).with(:gid).returns 'bar'
|
|
68
65
|
resource.stubs(:should).with(:ensure).returns :present
|
|
69
|
-
instance =
|
|
66
|
+
instance = described_class.new(:name => "luke", :ensure => :absent)
|
|
70
67
|
instance.stubs(:resource).returns resource
|
|
71
68
|
|
|
72
69
|
@connection.expects(:add).with { |dn, attrs| attrs["gidNumber"] == ["101"] }
|
|
@@ -75,18 +72,18 @@ describe provider_class do
|
|
|
75
72
|
instance.flush
|
|
76
73
|
end
|
|
77
74
|
|
|
78
|
-
|
|
75
|
+
context "with no uid specified" do
|
|
79
76
|
it "should pick the first available UID after the largest existing UID" do
|
|
80
77
|
Puppet::Type.type(:group).provider(:ldap).expects(:name2id).with(["whatever"]).returns [123]
|
|
81
78
|
|
|
82
79
|
low = {:name=>["luke"], :shell=>:absent, :uid=>["600"], :home=>["/h"], :gid=>["1000"], :password=>["blah"], :comment=>["l k"]}
|
|
83
80
|
high = {:name=>["testing"], :shell=>:absent, :uid=>["640"], :home=>["/h"], :gid=>["1000"], :password=>["blah"], :comment=>["t u"]}
|
|
84
|
-
|
|
81
|
+
described_class.manager.expects(:search).returns([low, high])
|
|
85
82
|
|
|
86
83
|
resource = stub 'resource', :should => %w{whatever}
|
|
87
84
|
resource.stubs(:should).with(:uid).returns nil
|
|
88
85
|
resource.stubs(:should).with(:ensure).returns :present
|
|
89
|
-
instance =
|
|
86
|
+
instance = described_class.new(:name => "luke", :ensure => :absent)
|
|
90
87
|
instance.stubs(:resource).returns resource
|
|
91
88
|
|
|
92
89
|
@connection.expects(:add).with { |dn, attrs| attrs["uidNumber"] == ["641"] }
|
|
@@ -98,12 +95,12 @@ describe provider_class do
|
|
|
98
95
|
it "should pick 501 of no users exist" do
|
|
99
96
|
Puppet::Type.type(:group).provider(:ldap).expects(:name2id).with(["whatever"]).returns [123]
|
|
100
97
|
|
|
101
|
-
|
|
98
|
+
described_class.manager.expects(:search).returns nil
|
|
102
99
|
|
|
103
100
|
resource = stub 'resource', :should => %w{whatever}
|
|
104
101
|
resource.stubs(:should).with(:uid).returns nil
|
|
105
102
|
resource.stubs(:should).with(:ensure).returns :present
|
|
106
|
-
instance =
|
|
103
|
+
instance = described_class.new(:name => "luke", :ensure => :absent)
|
|
107
104
|
instance.stubs(:resource).returns resource
|
|
108
105
|
|
|
109
106
|
@connection.expects(:add).with { |dn, attrs| attrs["uidNumber"] == ["501"] }
|
|
@@ -114,11 +111,11 @@ describe provider_class do
|
|
|
114
111
|
end
|
|
115
112
|
end
|
|
116
113
|
|
|
117
|
-
|
|
114
|
+
context "when flushing" do
|
|
118
115
|
before do
|
|
119
|
-
|
|
116
|
+
described_class.stubs(:suitable?).returns true
|
|
120
117
|
|
|
121
|
-
@instance =
|
|
118
|
+
@instance = described_class.new(:name => "myname", :groups => %w{whatever}, :uid => "400")
|
|
122
119
|
end
|
|
123
120
|
|
|
124
121
|
it "should remove the :groups value before updating" do
|
|
@@ -144,13 +141,13 @@ describe provider_class do
|
|
|
144
141
|
end
|
|
145
142
|
end
|
|
146
143
|
|
|
147
|
-
|
|
144
|
+
context "when checking group membership" do
|
|
148
145
|
before do
|
|
149
146
|
@groups = Puppet::Type.type(:group).provider(:ldap)
|
|
150
147
|
@group_manager = @groups.manager
|
|
151
|
-
|
|
148
|
+
described_class.stubs(:suitable?).returns true
|
|
152
149
|
|
|
153
|
-
@instance =
|
|
150
|
+
@instance = described_class.new(:name => "myname")
|
|
154
151
|
end
|
|
155
152
|
|
|
156
153
|
it "should show its group membership as the sorted list of all groups returned by an ldap query of group memberships" do
|
|
@@ -175,11 +172,11 @@ describe provider_class do
|
|
|
175
172
|
end
|
|
176
173
|
end
|
|
177
174
|
|
|
178
|
-
|
|
175
|
+
context "when modifying group membership" do
|
|
179
176
|
before do
|
|
180
177
|
@groups = Puppet::Type.type(:group).provider(:ldap)
|
|
181
178
|
@group_manager = @groups.manager
|
|
182
|
-
|
|
179
|
+
described_class.stubs(:suitable?).returns true
|
|
183
180
|
|
|
184
181
|
@one = {:name => "one", :gid => "500"}
|
|
185
182
|
@group_manager.stubs(:find).with("one").returns(@one)
|
|
@@ -187,7 +184,7 @@ describe provider_class do
|
|
|
187
184
|
@two = {:name => "one", :gid => "600"}
|
|
188
185
|
@group_manager.stubs(:find).with("two").returns(@two)
|
|
189
186
|
|
|
190
|
-
@instance =
|
|
187
|
+
@instance = described_class.new(:name => "myname")
|
|
191
188
|
|
|
192
189
|
@instance.stubs(:groups).returns :absent
|
|
193
190
|
end
|
|
@@ -231,7 +228,7 @@ describe provider_class do
|
|
|
231
228
|
@instance.groups = "one"
|
|
232
229
|
end
|
|
233
230
|
|
|
234
|
-
|
|
231
|
+
context "for groups that have no members" do
|
|
235
232
|
it "should create a new members attribute with its value being the user's name" do
|
|
236
233
|
@group_manager.expects(:update).with { |name, is, should| should[:members] == %w{myname} }
|
|
237
234
|
|
|
@@ -239,7 +236,7 @@ describe provider_class do
|
|
|
239
236
|
end
|
|
240
237
|
end
|
|
241
238
|
|
|
242
|
-
|
|
239
|
+
context "for groups it is being removed from" do
|
|
243
240
|
it "should replace the group's member list with one missing the user's name" do
|
|
244
241
|
@one[:members] = %w{myname a}
|
|
245
242
|
@two[:members] = %w{myname b}
|
|
@@ -261,7 +258,7 @@ describe provider_class do
|
|
|
261
258
|
end
|
|
262
259
|
end
|
|
263
260
|
|
|
264
|
-
|
|
261
|
+
context "for groups that already have members" do
|
|
265
262
|
it "should replace each group's member list with a new list including the user's name" do
|
|
266
263
|
@one[:members] = %w{a b}
|
|
267
264
|
@group_manager.expects(:update).with { |name, is, should| should[:members] == %w{a b myname} }
|
|
@@ -272,7 +269,7 @@ describe provider_class do
|
|
|
272
269
|
end
|
|
273
270
|
end
|
|
274
271
|
|
|
275
|
-
|
|
272
|
+
context "for groups of which it is a member" do
|
|
276
273
|
it "should do nothing" do
|
|
277
274
|
@one[:members] = %w{a b}
|
|
278
275
|
@group_manager.expects(:update).with { |name, is, should| should[:members] == %w{a b myname} }
|
|
@@ -1,14 +1,11 @@
|
|
|
1
|
-
#! /usr/bin/env ruby
|
|
2
1
|
require 'spec_helper'
|
|
3
2
|
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
describe provider_class do
|
|
3
|
+
describe Puppet::Type.type(:user).provider(:pw) do
|
|
7
4
|
let :resource do
|
|
8
5
|
Puppet::Type.type(:user).new(:name => "testuser", :provider => :pw)
|
|
9
6
|
end
|
|
10
7
|
|
|
11
|
-
|
|
8
|
+
context "when creating users" do
|
|
12
9
|
let :provider do
|
|
13
10
|
prov = resource.provider
|
|
14
11
|
prov.expects(:exists?).returns nil
|
|
@@ -16,8 +13,8 @@ describe provider_class do
|
|
|
16
13
|
end
|
|
17
14
|
|
|
18
15
|
it "should run pw with no additional flags when no properties are given" do
|
|
19
|
-
expect(provider.addcmd).to eq([
|
|
20
|
-
provider.expects(:execute).with([
|
|
16
|
+
expect(provider.addcmd).to eq([described_class.command(:pw), "useradd", "testuser"])
|
|
17
|
+
provider.expects(:execute).with([described_class.command(:pw), "useradd", "testuser"], kind_of(Hash))
|
|
21
18
|
provider.create
|
|
22
19
|
end
|
|
23
20
|
|
|
@@ -104,12 +101,12 @@ describe provider_class do
|
|
|
104
101
|
end
|
|
105
102
|
end
|
|
106
103
|
|
|
107
|
-
|
|
104
|
+
context "when deleting users" do
|
|
108
105
|
it "should run pw with no additional flags" do
|
|
109
106
|
provider = resource.provider
|
|
110
107
|
provider.expects(:exists?).returns true
|
|
111
|
-
expect(provider.deletecmd).to eq([
|
|
112
|
-
provider.expects(:execute).with([
|
|
108
|
+
expect(provider.deletecmd).to eq([described_class.command(:pw), "userdel", "testuser"])
|
|
109
|
+
provider.expects(:execute).with([described_class.command(:pw), "userdel", "testuser"], has_entry(:custom_environment, {}))
|
|
113
110
|
provider.delete
|
|
114
111
|
end
|
|
115
112
|
|
|
@@ -133,14 +130,14 @@ describe provider_class do
|
|
|
133
130
|
end
|
|
134
131
|
end
|
|
135
132
|
|
|
136
|
-
|
|
133
|
+
context "when modifying users" do
|
|
137
134
|
let :provider do
|
|
138
135
|
resource.provider
|
|
139
136
|
end
|
|
140
137
|
|
|
141
138
|
it "should run pw with the correct arguments" do
|
|
142
|
-
expect(provider.modifycmd("uid", 12345)).to eq([
|
|
143
|
-
provider.expects(:execute).with([
|
|
139
|
+
expect(provider.modifycmd("uid", 12345)).to eq([described_class.command(:pw), "usermod", "testuser", "-u", 12345])
|
|
140
|
+
provider.expects(:execute).with([described_class.command(:pw), "usermod", "testuser", "-u", 12345], has_entry(:custom_environment, {}))
|
|
144
141
|
provider.uid = 12345
|
|
145
142
|
end
|
|
146
143
|
|
|
@@ -138,10 +138,10 @@ describe Puppet::Type.type(:user).provider(:useradd) do
|
|
|
138
138
|
provider.create
|
|
139
139
|
end
|
|
140
140
|
|
|
141
|
-
it "should not use -e with luseradd, should call
|
|
141
|
+
it "should not use -e with luseradd, should call usermod with -e after luseradd when expiry is set" do
|
|
142
142
|
resource[:expiry] = '2038-01-24'
|
|
143
143
|
provider.expects(:execute).with(all_of(includes('/usr/sbin/luseradd'), Not(includes('-e'))), has_entry(:custom_environment, has_key('LIBUSER_CONF')))
|
|
144
|
-
provider.expects(:execute).with(all_of(includes('/usr/sbin/
|
|
144
|
+
provider.expects(:execute).with(all_of(includes('/usr/sbin/usermod'), includes('-e')), has_entry(:custom_environment, has_key('LIBUSER_CONF')))
|
|
145
145
|
provider.create
|
|
146
146
|
end
|
|
147
147
|
|
|
@@ -218,6 +218,9 @@ describe Puppet::Type.type(:user).provider(:windows_adsi), :if => Puppet::Util::
|
|
|
218
218
|
end
|
|
219
219
|
|
|
220
220
|
it "should set a user's password" do
|
|
221
|
+
provider.user.expects(:disabled?).returns(false)
|
|
222
|
+
provider.user.expects(:locked_out?).returns(false)
|
|
223
|
+
provider.user.expects(:expired?).returns(false)
|
|
221
224
|
provider.user.expects(:password=).with('plaintextbad')
|
|
222
225
|
|
|
223
226
|
provider.password = "plaintextbad"
|
|
@@ -259,10 +262,7 @@ describe Puppet::Type.type(:user).provider(:windows_adsi), :if => Puppet::Util::
|
|
|
259
262
|
connection.expects(:Put).with('UserFlags', true)
|
|
260
263
|
connection.expects(:SetInfo).raises( WIN32OLERuntimeError.new("(in OLE method `SetInfo': )\n OLE error code:8007089A in Active Directory\n The specified username is invalid.\r\n\n HRESULT error code:0x80020009\n Exception occurred."))
|
|
261
264
|
|
|
262
|
-
expect{ provider.create }.to raise_error(
|
|
263
|
-
Puppet::Error,
|
|
264
|
-
/not able to create\/delete domain users/
|
|
265
|
-
)
|
|
265
|
+
expect{ provider.create }.to raise_error(Puppet::Error)
|
|
266
266
|
end
|
|
267
267
|
end
|
|
268
268
|
|
|
@@ -767,13 +767,13 @@ describe 'Puppet Pal' do
|
|
|
767
767
|
[ signature.runnable_with?('string_param' => 'foo', 'int_param' => 10),
|
|
768
768
|
signature.runnable_with?('anything_goes' => 'foo'),
|
|
769
769
|
signature.task_hash['name'],
|
|
770
|
-
signature.task_hash['parameters']['string_param']['description'],
|
|
771
|
-
signature.
|
|
772
|
-
signature.
|
|
770
|
+
signature.task_hash['metadata']['parameters']['string_param']['description'],
|
|
771
|
+
signature.task_hash['metadata']['description'],
|
|
772
|
+
signature.task_hash['metadata']['parameters']['int_param']['type'],
|
|
773
773
|
]
|
|
774
774
|
end
|
|
775
775
|
end
|
|
776
|
-
expect(result).to eq([true, false, 'b::atask', 'A string parameter', 'test task b::atask',
|
|
776
|
+
expect(result).to eq([true, false, 'b::atask', 'A string parameter', 'test task b::atask', 'Integer'])
|
|
777
777
|
end
|
|
778
778
|
|
|
779
779
|
it '"TaskSignature#runnable_with?" calls a given lambda if there is an error' do
|
|
@@ -802,7 +802,7 @@ describe 'Puppet Pal' do
|
|
|
802
802
|
signature.task_hash
|
|
803
803
|
end
|
|
804
804
|
end
|
|
805
|
-
expect(result['input_method']).to be_nil
|
|
805
|
+
expect(result['metadata']['input_method']).to be_nil
|
|
806
806
|
end
|
|
807
807
|
|
|
808
808
|
it 'task input_method is parsed from task metadata' do
|
|
@@ -812,7 +812,7 @@ describe 'Puppet Pal' do
|
|
|
812
812
|
signature.task_hash
|
|
813
813
|
end
|
|
814
814
|
end
|
|
815
|
-
expect(result['input_method']).to eq('stdin')
|
|
815
|
+
expect(result['metadata']['input_method']).to eq('stdin')
|
|
816
816
|
end
|
|
817
817
|
|
|
818
818
|
it '"list_tasks" returns an array with all tasks that can be loaded' do
|
|
@@ -463,6 +463,64 @@ describe 'Puppet Pal' do
|
|
|
463
463
|
end.to raise_error(/does not represent a literal value/)
|
|
464
464
|
end
|
|
465
465
|
|
|
466
|
+
it 'the "evaluate" method evaluates but does not evaluate lazy constructs' do
|
|
467
|
+
result = Puppet::Pal.in_tmp_environment('pal_env', modulepath: modulepath, facts: node_facts) do | ctx|
|
|
468
|
+
ctx.with_catalog_compiler do |c|
|
|
469
|
+
c.evaluate(c.parse_string('define foo() { notify {nope: }} foo { test: }'))
|
|
470
|
+
c.with_json_encoding() {|encoder| encoder.encode }
|
|
471
|
+
end
|
|
472
|
+
end
|
|
473
|
+
parsed = JSON.parse(result)
|
|
474
|
+
expect(parsed['resources']).to_not include(include('type' => 'Notify'))
|
|
475
|
+
end
|
|
476
|
+
|
|
477
|
+
it 'an "evaluate" followed by "compile_additions" evaluates lazy constructs' do
|
|
478
|
+
result = Puppet::Pal.in_tmp_environment('pal_env', modulepath: modulepath, facts: node_facts) do | ctx|
|
|
479
|
+
ctx.with_catalog_compiler do |c|
|
|
480
|
+
c.evaluate(c.parse_string('define foo() { notify {nope: }} foo { test: }'))
|
|
481
|
+
c.compile_additions
|
|
482
|
+
c.with_json_encoding() {|encoder| encoder.encode }
|
|
483
|
+
end
|
|
484
|
+
end
|
|
485
|
+
parsed = JSON.parse(result)
|
|
486
|
+
expect(parsed['resources']).to include(include('type' => 'Notify'))
|
|
487
|
+
end
|
|
488
|
+
|
|
489
|
+
it 'an "evaluate" followed by "compile_additions" validates the result' do
|
|
490
|
+
expect do
|
|
491
|
+
Puppet::Pal.in_tmp_environment('pal_env', modulepath: modulepath, facts: node_facts) do | ctx|
|
|
492
|
+
ctx.with_catalog_compiler do |c|
|
|
493
|
+
c.evaluate(c.parse_string('define foo() { notify {nope: }} foo { test: before =>"Bar[nope]"}'))
|
|
494
|
+
c.compile_additions
|
|
495
|
+
end
|
|
496
|
+
end
|
|
497
|
+
end.to raise_error(Puppet::Error, /Could not find resource 'Bar\[nope\]'/)
|
|
498
|
+
end
|
|
499
|
+
|
|
500
|
+
it 'an "evaluate" followed by "evaluate_additions" does not validate the result' do
|
|
501
|
+
result = Puppet::Pal.in_tmp_environment('pal_env', modulepath: modulepath, facts: node_facts) do | ctx|
|
|
502
|
+
ctx.with_catalog_compiler do |c|
|
|
503
|
+
c.evaluate(c.parse_string('define foo() { notify {nope: }} foo { test: before =>"Bar[nope]"}'))
|
|
504
|
+
c.evaluate_additions
|
|
505
|
+
c.with_json_encoding() {|encoder| encoder.encode }
|
|
506
|
+
end
|
|
507
|
+
end
|
|
508
|
+
parsed = JSON.parse(result)
|
|
509
|
+
expect(parsed['resources']).to include(include('type' => 'Notify'))
|
|
510
|
+
end
|
|
511
|
+
|
|
512
|
+
it 'an "evaluate" followed by "evaluate_additions" and "validate" validates the result' do
|
|
513
|
+
expect do
|
|
514
|
+
Puppet::Pal.in_tmp_environment('pal_env', modulepath: modulepath, facts: node_facts) do | ctx|
|
|
515
|
+
ctx.with_catalog_compiler do |c|
|
|
516
|
+
c.evaluate(c.parse_string('define foo() { notify {nope: }} foo { test: before =>"Bar[nope]"}'))
|
|
517
|
+
c.compile_additions
|
|
518
|
+
c.validate
|
|
519
|
+
end
|
|
520
|
+
end
|
|
521
|
+
end.to raise_error(Puppet::Error, /Could not find resource 'Bar\[nope\]'/)
|
|
522
|
+
end
|
|
523
|
+
|
|
466
524
|
end
|
|
467
525
|
end
|
|
468
526
|
|
|
@@ -48,8 +48,8 @@ describe Puppet::Resource::Catalog, "when compiling" do
|
|
|
48
48
|
catalog.add_resource(res, res2, res3, res4, comp_res)
|
|
49
49
|
catalog.write_resource_file
|
|
50
50
|
expect(File.readlines(resourcefile).map(&:chomp)).to match_array([
|
|
51
|
-
"file[#{
|
|
52
|
-
"exec[#{
|
|
51
|
+
"file[#{res.title.downcase}]",
|
|
52
|
+
"exec[#{res2.title.downcase}]"
|
|
53
53
|
])
|
|
54
54
|
end
|
|
55
55
|
|
data/spec/unit/resource_spec.rb
CHANGED
|
@@ -1082,6 +1082,18 @@ describe Puppet::Resource do
|
|
|
1082
1082
|
newparam(:admits_to_age)
|
|
1083
1083
|
newparam(:name)
|
|
1084
1084
|
end
|
|
1085
|
+
|
|
1086
|
+
Puppet::Type.newtype('brown') do
|
|
1087
|
+
newproperty(:ensure)
|
|
1088
|
+
newparam(:admits_to_dying_hair)
|
|
1089
|
+
newparam(:admits_to_age)
|
|
1090
|
+
newparam(:hair_length)
|
|
1091
|
+
newparam(:name)
|
|
1092
|
+
|
|
1093
|
+
def self.parameters_to_include
|
|
1094
|
+
[:admits_to_dying_hair, :admits_to_age]
|
|
1095
|
+
end
|
|
1096
|
+
end
|
|
1085
1097
|
end
|
|
1086
1098
|
|
|
1087
1099
|
it "should strip all parameters and strip properties that are nil, empty or absent except for ensure" do
|
|
@@ -1124,5 +1136,24 @@ describe Puppet::Resource do
|
|
|
1124
1136
|
})
|
|
1125
1137
|
)
|
|
1126
1138
|
end
|
|
1139
|
+
|
|
1140
|
+
context "when the resource type has a default set of parameters it wants to include" do
|
|
1141
|
+
it "should leave those parameters alone" do
|
|
1142
|
+
resource = Puppet::Resource.new("brown", "Esmeralda", :parameters => {
|
|
1143
|
+
:admits_to_age => true,
|
|
1144
|
+
:admits_to_dying_hair => false,
|
|
1145
|
+
:hair_length => 10
|
|
1146
|
+
})
|
|
1147
|
+
|
|
1148
|
+
pruned_resource = resource.prune_parameters
|
|
1149
|
+
expected_resource = Puppet::Resource.new(
|
|
1150
|
+
"brown",
|
|
1151
|
+
"Esmeralda",
|
|
1152
|
+
:parameters => { :admits_to_age => true, :admits_to_dying_hair => false }
|
|
1153
|
+
)
|
|
1154
|
+
|
|
1155
|
+
expect(pruned_resource).to eq(expected_resource)
|
|
1156
|
+
end
|
|
1157
|
+
end
|
|
1127
1158
|
end
|
|
1128
1159
|
end
|
data/spec/unit/ssl/host_spec.rb
CHANGED
|
@@ -155,6 +155,27 @@ describe Puppet::SSL::Host, if: !Puppet::Util::Platform.jruby? do
|
|
|
155
155
|
expect{ host.validate_certificate_with_key(certificate) }.not_to raise_error
|
|
156
156
|
end
|
|
157
157
|
|
|
158
|
+
it "should output agent-specific commands when validation fails" do
|
|
159
|
+
host = Puppet::SSL::Host.new("foo")
|
|
160
|
+
key = mock 'key', :content => "private_key"
|
|
161
|
+
sslcert = mock 'sslcert'
|
|
162
|
+
certificate = mock 'cert', {:content => sslcert, :fingerprint => 'DEADBEEF'}
|
|
163
|
+
host.stubs(:key).returns key
|
|
164
|
+
sslcert.expects(:check_private_key).with("private_key").returns false
|
|
165
|
+
expect { host.validate_certificate_with_key(certificate) }.to raise_error(Puppet::Error, /puppet ssl clean \n/)
|
|
166
|
+
end
|
|
167
|
+
|
|
168
|
+
it "should output device-specific commands when validation fails" do
|
|
169
|
+
Puppet[:certname] = "device.example.com"
|
|
170
|
+
host = Puppet::SSL::Host.new("device.example.com", true)
|
|
171
|
+
key = mock 'key', :content => "private_key"
|
|
172
|
+
sslcert = mock 'sslcert'
|
|
173
|
+
certificate = mock 'cert', {:content => sslcert, :fingerprint => 'DEADBEEF'}
|
|
174
|
+
host.stubs(:key).returns key
|
|
175
|
+
sslcert.expects(:check_private_key).with("private_key").returns false
|
|
176
|
+
expect { host.validate_certificate_with_key(certificate) }.to raise_error(Puppet::Error, /puppet ssl clean --target device.example.com/)
|
|
177
|
+
end
|
|
178
|
+
|
|
158
179
|
describe "when initializing" do
|
|
159
180
|
it "should default its name to the :certname setting" do
|
|
160
181
|
Puppet[:certname] = "myname"
|
|
@@ -601,7 +622,7 @@ describe Puppet::SSL::Host, if: !Puppet::Util::Platform.jruby? do
|
|
|
601
622
|
@host.stubs(:generate)
|
|
602
623
|
@host.stubs(:sleep)
|
|
603
624
|
|
|
604
|
-
Puppet.expects(:
|
|
625
|
+
Puppet.expects(:log_exception)
|
|
605
626
|
|
|
606
627
|
@host.wait_for_cert(1)
|
|
607
628
|
end
|
data/spec/unit/ssl/key_spec.rb
CHANGED
|
@@ -114,8 +114,8 @@ describe Puppet::SSL::Key do
|
|
|
114
114
|
end
|
|
115
115
|
|
|
116
116
|
it "should create the private key with the keylength specified in the settings" do
|
|
117
|
-
Puppet[:keylength] =
|
|
118
|
-
OpenSSL::PKey::RSA.expects(:new).with(
|
|
117
|
+
Puppet[:keylength] = 513
|
|
118
|
+
OpenSSL::PKey::RSA.expects(:new).with(513).returns(@key)
|
|
119
119
|
|
|
120
120
|
@instance.generate
|
|
121
121
|
end
|
|
@@ -157,8 +157,6 @@ describe Puppet::SSL::Key do
|
|
|
157
157
|
end
|
|
158
158
|
|
|
159
159
|
it "should export the private key to text using the password" do
|
|
160
|
-
Puppet[:keylength] = "50"
|
|
161
|
-
|
|
162
160
|
@instance.password_file = "/path/to/pass"
|
|
163
161
|
@instance.stubs(:password).returns "my password"
|
|
164
162
|
|
data/spec/unit/task_spec.rb
CHANGED
|
@@ -68,8 +68,7 @@ describe Puppet::Module::Task do
|
|
|
68
68
|
task_files = %w{task1.elf task1.sh task1.json}.map { |bn| "#{tasks_path}/#{bn}" }
|
|
69
69
|
Dir.expects(:glob).with(tasks_glob).returns(task_files)
|
|
70
70
|
tasks = Puppet::Module::Task.tasks_in_module(mymod)
|
|
71
|
-
Puppet::Module::Task.any_instance.stubs(:metadata).returns({'implementations' =>
|
|
72
|
-
[{"name" => "task1.sh"}]})
|
|
71
|
+
Puppet::Module::Task.any_instance.stubs(:metadata).returns({'implementations' => [{"name" => "task1.sh"}]})
|
|
73
72
|
|
|
74
73
|
expect(tasks.count).to eq(1)
|
|
75
74
|
expect(tasks.map{|t| t.name}).to eq(%w{mymod::task1})
|
|
@@ -77,6 +76,52 @@ describe Puppet::Module::Task do
|
|
|
77
76
|
expect(tasks.map{|t| t.files.map{ |f| f["path"] } }).to eq([["#{tasks_path}/task1.sh"]])
|
|
78
77
|
end
|
|
79
78
|
|
|
79
|
+
it "constructs a task as expected when task metadata declares additional files" do
|
|
80
|
+
task_files = %w{task1.sh task1.json}.map { |bn| "#{tasks_path}/#{bn}" }
|
|
81
|
+
Dir.expects(:glob).with(tasks_glob).returns(task_files)
|
|
82
|
+
Puppet::Module::Task.expects(:find_extra_files).returns([{'name' => 'mymod/lib/file0.elf', 'path' => "/path/to/file0.elf"}])
|
|
83
|
+
tasks = Puppet::Module::Task.tasks_in_module(mymod)
|
|
84
|
+
Puppet::Module::Task.any_instance.stubs(:metadata).returns({'files' => ["mymod/lib/file0.elf"]})
|
|
85
|
+
|
|
86
|
+
expect(tasks.count).to eq(1)
|
|
87
|
+
expect(tasks.map{|t| t.name}).to eq(%w{mymod::task1})
|
|
88
|
+
expect(tasks.map{|t| t.metadata_file}).to eq(["#{tasks_path}/task1.json"])
|
|
89
|
+
expect(tasks.map{|t| t.files.map{ |f| f["path"] } }).to eq([["#{tasks_path}/task1.sh", "/path/to/file0.elf"]])
|
|
90
|
+
end
|
|
91
|
+
|
|
92
|
+
it "constructs a task as expected when a task implementation declares additional files" do
|
|
93
|
+
task_files = %w{task1.sh task1.json}.map { |bn| "#{tasks_path}/#{bn}" }
|
|
94
|
+
Dir.expects(:glob).with(tasks_glob).returns(task_files)
|
|
95
|
+
Puppet::Module::Task.expects(:find_extra_files).returns([{'name' => 'mymod/lib/file0.elf', 'path' => "/path/to/file0.elf"}])
|
|
96
|
+
tasks = Puppet::Module::Task.tasks_in_module(mymod)
|
|
97
|
+
Puppet::Module::Task.any_instance.stubs(:metadata).returns({'implementations' => [{"name" => "task1.sh", "files" => ["mymod/lib/file0.elf"]}]})
|
|
98
|
+
|
|
99
|
+
expect(tasks.count).to eq(1)
|
|
100
|
+
expect(tasks.map{|t| t.name}).to eq(%w{mymod::task1})
|
|
101
|
+
expect(tasks.map{|t| t.metadata_file}).to eq(["#{tasks_path}/task1.json"])
|
|
102
|
+
expect(tasks.map{|t| t.files.map{ |f| f["path"] } }).to eq([["#{tasks_path}/task1.sh", "/path/to/file0.elf"]])
|
|
103
|
+
end
|
|
104
|
+
|
|
105
|
+
it "constructs a task as expected when task metadata and a task implementation both declare additional files" do
|
|
106
|
+
task_files = %w{task1.sh task1.json}.map { |bn| "#{tasks_path}/#{bn}" }
|
|
107
|
+
Dir.expects(:glob).with(tasks_glob).returns(task_files)
|
|
108
|
+
Puppet::Module::Task.expects(:find_extra_files).returns([
|
|
109
|
+
{'name' => 'mymod/lib/file0.elf', 'path' => "/path/to/file0.elf"},
|
|
110
|
+
{'name' => 'yourmod/files/file1.txt', 'path' => "/other/path/to/file1.txt"}
|
|
111
|
+
])
|
|
112
|
+
tasks = Puppet::Module::Task.tasks_in_module(mymod)
|
|
113
|
+
Puppet::Module::Task.any_instance.stubs(:metadata).returns({'implementations' => [{"name" => "task1.sh", "files" => ["mymod/lib/file0.elf"]}]})
|
|
114
|
+
|
|
115
|
+
expect(tasks.count).to eq(1)
|
|
116
|
+
expect(tasks.map{|t| t.name}).to eq(%w{mymod::task1})
|
|
117
|
+
expect(tasks.map{|t| t.metadata_file}).to eq(["#{tasks_path}/task1.json"])
|
|
118
|
+
expect(tasks.map{|t| t.files.map{ |f| f["path"] } }).to eq([[
|
|
119
|
+
"#{tasks_path}/task1.sh",
|
|
120
|
+
"/path/to/file0.elf",
|
|
121
|
+
"/other/path/to/file1.txt"
|
|
122
|
+
]])
|
|
123
|
+
end
|
|
124
|
+
|
|
80
125
|
it "constructs a task as expected when a task has files" do
|
|
81
126
|
og_files = %w{task1.sh task1.json}.map { |bn| "#{tasks_path}/#{bn}" }
|
|
82
127
|
Dir.expects(:glob).with(tasks_glob).returns(og_files)
|
|
@@ -136,7 +181,7 @@ describe Puppet::Module::Task do
|
|
|
136
181
|
it "loads metadata for a task" do
|
|
137
182
|
metadata = {'desciption': 'some info'}
|
|
138
183
|
Dir.expects(:glob).with(tasks_glob).returns(%w{task1.exe task1.json})
|
|
139
|
-
Puppet::Module::Task.
|
|
184
|
+
Puppet::Module::Task.stubs(:read_metadata).returns(metadata)
|
|
140
185
|
|
|
141
186
|
tasks = Puppet::Module::Task.tasks_in_module(mymod)
|
|
142
187
|
|
|
@@ -180,7 +225,7 @@ describe Puppet::Module::Task do
|
|
|
180
225
|
metadata = {'desciption' => 'some info',
|
|
181
226
|
'implementations' => [ {"name" => "task1.exe"}, ] }
|
|
182
227
|
Dir.expects(:glob).with(tasks_glob).returns(%w{task1.exe task1.sh task1.json})
|
|
183
|
-
Puppet::Module::Task.
|
|
228
|
+
Puppet::Module::Task.stubs(:read_metadata).returns(metadata)
|
|
184
229
|
|
|
185
230
|
tasks = Puppet::Module::Task.tasks_in_module(mymod)
|
|
186
231
|
|
|
@@ -192,7 +237,7 @@ describe Puppet::Module::Task do
|
|
|
192
237
|
metadata = {'desciption' => 'some info',
|
|
193
238
|
'implementations' => [ {"name" => "task2.sh"}, ] }
|
|
194
239
|
Dir.expects(:glob).with(tasks_glob).returns(%w{task1.exe task2.sh task1.json})
|
|
195
|
-
Puppet::Module::Task.
|
|
240
|
+
Puppet::Module::Task.stubs(:read_metadata).returns(metadata)
|
|
196
241
|
|
|
197
242
|
tasks = Puppet::Module::Task.tasks_in_module(mymod)
|
|
198
243
|
|
|
@@ -174,11 +174,22 @@ describe Puppet::Transaction::EventManager do
|
|
|
174
174
|
expect(@transaction.resource_status(@resource)).to be_restarted
|
|
175
175
|
end
|
|
176
176
|
|
|
177
|
+
it "should have an event on the resource status" do
|
|
178
|
+
@manager.expects(:queued_events).with(@resource).yields(:callback1, [@event])
|
|
179
|
+
|
|
180
|
+
@resource.stubs(:callback1)
|
|
181
|
+
|
|
182
|
+
@manager.process_events(@resource) #x
|
|
183
|
+
|
|
184
|
+
expect(@transaction.resource_status(@resource).events.length).to eq(1)
|
|
185
|
+
end
|
|
186
|
+
|
|
177
187
|
it "should queue a 'restarted' event generated by the resource" do
|
|
178
188
|
@manager.expects(:queued_events).with(@resource).yields(:callback1, [@event])
|
|
179
189
|
|
|
180
190
|
@resource.stubs(:callback1)
|
|
181
191
|
|
|
192
|
+
@resource.expects(:event).with(:message => "Triggered 'callback1' from 1 event", :status => 'success', :name => 'callback1')
|
|
182
193
|
@resource.expects(:event).with(:name => :restarted, :status => "success").returns "myevent"
|
|
183
194
|
@manager.expects(:queue_events).with(@resource, ["myevent"])
|
|
184
195
|
|
|
@@ -295,7 +306,7 @@ describe Puppet::Transaction::EventManager do
|
|
|
295
306
|
it "should record a failed event on the resource status" do
|
|
296
307
|
@manager.process_events(@resource)
|
|
297
308
|
|
|
298
|
-
expect(@transaction.resource_status(@resource).events.length).to eq(
|
|
309
|
+
expect(@transaction.resource_status(@resource).events.length).to eq(2)
|
|
299
310
|
expect(@transaction.resource_status(@resource).events[0].status).to eq('failure')
|
|
300
311
|
end
|
|
301
312
|
|