puppet 5.5.20 → 5.5.21
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of puppet might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/Gemfile.lock +19 -19
- data/lib/puppet/agent.rb +3 -3
- data/lib/puppet/application/agent.rb +3 -1
- data/lib/puppet/daemon.rb +1 -1
- data/lib/puppet/defaults.rb +2 -2
- data/lib/puppet/file_system/uniquefile.rb +4 -0
- data/lib/puppet/network/http/api/indirected_routes.rb +1 -1
- data/lib/puppet/network/http/api/master/v3/environment.rb +3 -0
- data/lib/puppet/parser/compiler/catalog_validator/env_relationship_validator.rb +2 -0
- data/lib/puppet/parser/compiler/catalog_validator/site_validator.rb +2 -0
- data/lib/puppet/parser/environment_compiler.rb +3 -0
- data/lib/puppet/parser/resource.rb +3 -2
- data/lib/puppet/parser/resource/param.rb +6 -0
- data/lib/puppet/pops/issues.rb +5 -0
- data/lib/puppet/pops/resource/resource_type_impl.rb +2 -0
- data/lib/puppet/pops/validation/checker4_0.rb +10 -0
- data/lib/puppet/pops/validation/validator_factory_4_0.rb +1 -0
- data/lib/puppet/provider/package/dnfmodule.rb +24 -4
- data/lib/puppet/provider/package/pip.rb +6 -4
- data/lib/puppet/provider/package/zypper.rb +1 -0
- data/lib/puppet/provider/service/systemd.rb +22 -4
- data/lib/puppet/provider/user/useradd.rb +16 -5
- data/lib/puppet/resource/type.rb +8 -0
- data/lib/puppet/test/test_helper.rb +8 -10
- data/lib/puppet/type.rb +6 -0
- data/lib/puppet/type/package.rb +16 -1
- data/lib/puppet/type/service.rb +1 -7
- data/lib/puppet/type/user.rb +1 -7
- data/lib/puppet/util.rb +12 -13
- data/lib/puppet/util/log/destinations.rb +1 -10
- data/lib/puppet/util/windows/api_types.rb +45 -32
- data/lib/puppet/util/windows/eventlog.rb +1 -6
- data/lib/puppet/util/windows/principal.rb +8 -6
- data/lib/puppet/util/windows/registry.rb +11 -11
- data/lib/puppet/version.rb +1 -1
- data/locales/puppet.pot +97 -93
- data/man/man5/puppet.conf.5 +2 -2
- data/man/man8/puppet-agent.8 +2 -2
- 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 +1 -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/unit/provider/package/dnfmodule/{dnf-module-list-enabled.txt → dnf-module-list.txt} +6 -0
- data/spec/fixtures/unit/provider/service/systemd/list_unit_files_services +9 -0
- data/spec/integration/defaults_spec.rb +1 -2
- data/spec/integration/parser/compiler_spec.rb +11 -0
- data/spec/integration/util/windows/adsi_spec.rb +5 -0
- data/spec/integration/util/windows/registry_spec.rb +7 -7
- data/spec/unit/agent_spec.rb +1 -1
- data/spec/unit/daemon_spec.rb +0 -1
- data/spec/unit/file_system/uniquefile_spec.rb +11 -0
- data/spec/unit/network/http/api/indirected_routes_spec.rb +2 -1
- data/spec/unit/parser/environment_compiler_spec.rb +7 -0
- data/spec/unit/provider/package/dnfmodule_spec.rb +25 -5
- data/spec/unit/provider/package/pip_spec.rb +42 -16
- data/spec/unit/provider/package/zypper_spec.rb +13 -0
- data/spec/unit/provider/service/systemd_spec.rb +93 -20
- data/spec/unit/provider/user/openbsd_spec.rb +1 -0
- data/spec/unit/provider/user/useradd_spec.rb +30 -16
- data/spec/unit/test/test_helper_spec.rb +17 -0
- data/spec/unit/type/service_spec.rb +9 -8
- data/spec/unit/type/user_spec.rb +19 -13
- data/spec/unit/util/log/destinations_spec.rb +1 -29
- data/spec/unit/util/windows/api_types_spec.rb +104 -40
- metadata +7 -7
- data/spec/integration/test/test_helper_spec.rb +0 -31
@@ -0,0 +1,17 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe "TestHelper" do
|
4
|
+
context "#after_each_test" do
|
5
|
+
it "restores the original environment" do
|
6
|
+
varname = 'test_helper_spec-test_variable'
|
7
|
+
Puppet::Util.set_env(varname, "\u16A0")
|
8
|
+
|
9
|
+
expect(Puppet::Util.get_env(varname)).to eq("\u16A0")
|
10
|
+
|
11
|
+
# Prematurely trigger the after_each_test method
|
12
|
+
Puppet::Test::TestHelper.after_each_test
|
13
|
+
|
14
|
+
expect(Puppet::Util::get_env(varname)).to be_nil
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -234,20 +234,21 @@ describe Puppet::Type.type(:service), "when changing the host" do
|
|
234
234
|
@service.property(:enable).sync
|
235
235
|
end
|
236
236
|
|
237
|
-
it "should
|
237
|
+
it "should let superclass implementation resolve insyncness when provider does not respond to the 'enabled_insync?' method" do
|
238
238
|
allow(@service.provider.class).to receive(:supports_parameter?).and_return(true)
|
239
|
-
|
240
|
-
@service
|
241
|
-
|
239
|
+
@service[:enable] = true
|
240
|
+
allow(@service.provider).to receive(:respond_to?).with(:enabled_insync?).and_return(false)
|
241
|
+
|
242
242
|
expect(@service.property(:enable).insync?(:true)).to eq(true)
|
243
243
|
end
|
244
244
|
|
245
|
-
it "should
|
245
|
+
it "insyncness should be resolved by provider instead of superclass implementation when provider responds to the 'enabled_insync?' method" do
|
246
246
|
allow(@service.provider.class).to receive(:supports_parameter?).and_return(true)
|
247
|
-
expect(@service.provider).to receive(:cached_enabled?).and_return('true')
|
248
247
|
@service[:enable] = true
|
249
|
-
|
250
|
-
|
248
|
+
allow(@service.provider).to receive(:respond_to?).with(:enabled_insync?).and_return(true)
|
249
|
+
allow(@service.provider).to receive(:enabled_insync?).and_return(false)
|
250
|
+
|
251
|
+
expect(@service.property(:enable).insync?(:true)).to eq(false)
|
251
252
|
end
|
252
253
|
|
253
254
|
it "should sync the service's enable state when changing the state of :ensure if :enable is being managed" do
|
data/spec/unit/type/user_spec.rb
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
# encoding:
|
1
|
+
# encoding: utf-8
|
2
2
|
require 'spec_helper'
|
3
3
|
|
4
4
|
describe Puppet::Type.type(:user) do
|
@@ -484,22 +484,20 @@ describe Puppet::Type.type(:user) do
|
|
484
484
|
end
|
485
485
|
|
486
486
|
context "with no home directory specified" do
|
487
|
-
|
488
|
-
|
489
|
-
described_class.new(:name => "a", :purge_ssh_keys => true)
|
490
|
-
}.to raise_error(Puppet::Error, /purge_ssh_keys can only be true for users with a defined home directory/)
|
487
|
+
before(:each) do
|
488
|
+
allow(Dir).to receive(:home).with('a').and_return('/home/a')
|
491
489
|
end
|
492
490
|
|
493
|
-
it "should
|
494
|
-
|
495
|
-
described_class.new(:name => "a", :purge_ssh_keys => "~/keys")
|
496
|
-
}.to raise_error(Puppet::Error, /meta character ~ or %h only allowed for users with a defined home directory/)
|
491
|
+
it "should accept true" do
|
492
|
+
described_class.new(:name => "a", :purge_ssh_keys => true)
|
497
493
|
end
|
498
494
|
|
499
|
-
it "should
|
500
|
-
|
501
|
-
|
502
|
-
|
495
|
+
it "should accept the ~ wildcard" do
|
496
|
+
described_class.new(:name => "a", :purge_ssh_keys => "~/keys")
|
497
|
+
end
|
498
|
+
|
499
|
+
it "should accept the %h wildcard" do
|
500
|
+
described_class.new(:name => "a", :purge_ssh_keys => "%h/keys")
|
503
501
|
end
|
504
502
|
end
|
505
503
|
|
@@ -508,6 +506,10 @@ describe Puppet::Type.type(:user) do
|
|
508
506
|
[ "/dev/null", "/tmp/keyfile" ].map { |path| File.expand_path(path) }
|
509
507
|
end
|
510
508
|
|
509
|
+
before(:each) do
|
510
|
+
allow(Dir).to receive(:home).with('test').and_return('/home/test')
|
511
|
+
end
|
512
|
+
|
511
513
|
subject do
|
512
514
|
res = described_class.new(:name => "test", :purge_ssh_keys => paths)
|
513
515
|
res.catalog = Puppet::Resource::Catalog.new
|
@@ -534,6 +536,10 @@ describe Puppet::Type.type(:user) do
|
|
534
536
|
res
|
535
537
|
end
|
536
538
|
|
539
|
+
before(:each) do
|
540
|
+
allow(Dir).to receive(:home).with('test_user_name').and_return('/home/test_user_name')
|
541
|
+
end
|
542
|
+
|
537
543
|
context "when purging is disabled" do
|
538
544
|
let(:purge_param) { false }
|
539
545
|
|
@@ -44,41 +44,13 @@ describe Puppet::Util::Log.desttypes[:file] do
|
|
44
44
|
end
|
45
45
|
end
|
46
46
|
|
47
|
-
describe "on POSIX systems", :
|
47
|
+
describe "on POSIX systems", :unless => Puppet::Util::Platform.windows? do
|
48
48
|
describe "with a normal file" do
|
49
49
|
let (:parent) { Pathname.new('/tmp') }
|
50
50
|
let (:abspath) { '/tmp/log' }
|
51
51
|
let (:relpath) { 'log' }
|
52
52
|
|
53
53
|
it_behaves_like "file destination"
|
54
|
-
|
55
|
-
it "logs an error if it can't chown the file owner & group" do
|
56
|
-
allow(File).to receive(:exist?).with(parent).and_return(true)
|
57
|
-
expect(File).to receive(:exist?).with(Pathname.new(abspath)).and_return(false)
|
58
|
-
expect(FileUtils).to receive(:chown).with(Puppet[:user], Puppet[:group], abspath).and_raise(Errno::EPERM)
|
59
|
-
expect(Puppet.features).to receive(:root?).and_return(true)
|
60
|
-
expect(Puppet).to receive(:err).with("Unable to set ownership to #{Puppet[:user]}:#{Puppet[:group]} for log file: #{abspath}")
|
61
|
-
|
62
|
-
@class.new(abspath)
|
63
|
-
end
|
64
|
-
|
65
|
-
it "doesn't attempt to chown when running as non-root" do
|
66
|
-
allow(File).to receive(:exist?).with(parent).and_return(true)
|
67
|
-
expect(File).to receive(:exist?).with(Pathname.new(abspath)).and_return(false)
|
68
|
-
expect(FileUtils).not_to receive(:chown).with(Puppet[:user], Puppet[:group], abspath)
|
69
|
-
expect(Puppet.features).to receive(:root?).and_return(false)
|
70
|
-
|
71
|
-
@class.new(abspath)
|
72
|
-
end
|
73
|
-
|
74
|
-
it "doesn't attempt to chown when file already exists" do
|
75
|
-
allow(File).to receive(:exist?).with(parent).and_return(true)
|
76
|
-
expect(File).to receive(:exist?).with(Pathname.new(abspath)).and_return(true)
|
77
|
-
expect(FileUtils).not_to receive(:chown).with(Puppet[:user], Puppet[:group], abspath)
|
78
|
-
expect(Puppet.features).to receive(:root?).and_return(true)
|
79
|
-
|
80
|
-
@class.new(abspath)
|
81
|
-
end
|
82
54
|
end
|
83
55
|
|
84
56
|
describe "with a JSON file" do
|
@@ -4,62 +4,86 @@ require 'spec_helper'
|
|
4
4
|
|
5
5
|
describe "FFI::MemoryPointer", :if => Puppet.features.microsoft_windows? do
|
6
6
|
# use 2 bad bytes at end so we have even number of bytes / characters
|
7
|
-
let
|
8
|
-
let
|
7
|
+
let(:bad_string) { "hello invalid world".encode(Encoding::UTF_16LE) + "\xDD\xDD".force_encoding(Encoding::UTF_16LE) }
|
8
|
+
let(:bad_string_bytes) { bad_string.bytes.to_a }
|
9
|
+
let(:a_wide_bytes) { "A".encode(Encoding::UTF_16LE).bytes.to_a }
|
10
|
+
let(:b_wide_bytes) { "B".encode(Encoding::UTF_16LE).bytes.to_a }
|
9
11
|
|
10
12
|
context "read_wide_string" do
|
11
13
|
let (:string) { "foo_bar" }
|
12
14
|
|
13
15
|
it "should properly roundtrip a given string" do
|
14
|
-
read_string = nil
|
15
16
|
FFI::MemoryPointer.from_string_to_wide_string(string) do |ptr|
|
16
|
-
|
17
|
+
expect(ptr.read_wide_string(string.length)).to eq(string)
|
17
18
|
end
|
18
|
-
|
19
|
-
expect(read_string).to eq(string)
|
20
19
|
end
|
21
20
|
|
22
21
|
it "should return a given string in UTF-8" do
|
23
|
-
read_string = nil
|
24
22
|
FFI::MemoryPointer.from_string_to_wide_string(string) do |ptr|
|
25
23
|
read_string = ptr.read_wide_string(string.length)
|
24
|
+
expect(read_string.encoding).to eq(Encoding::UTF_8)
|
26
25
|
end
|
27
|
-
|
28
|
-
expect(read_string.encoding).to eq(Encoding::UTF_8)
|
29
26
|
end
|
30
27
|
|
31
28
|
it "should raise an error and emit a debug message when receiving a string containing invalid bytes in the destination encoding" do
|
32
|
-
|
33
|
-
Puppet.debug = true
|
34
|
-
arraydest = []
|
35
|
-
Puppet::Util::Log.newdestination(Puppet::Test::LogCollector.new(arraydest))
|
36
|
-
|
37
|
-
read_string = nil
|
29
|
+
Puppet[:log_level] = 'debug'
|
38
30
|
|
39
31
|
expect {
|
40
32
|
FFI::MemoryPointer.new(:byte, bad_string_bytes.count) do |ptr|
|
41
33
|
# uchar here is synonymous with byte
|
42
34
|
ptr.put_array_of_uchar(0, bad_string_bytes)
|
43
35
|
|
44
|
-
|
36
|
+
ptr.read_wide_string(bad_string.length)
|
45
37
|
end
|
46
38
|
}.to raise_error(Encoding::InvalidByteSequenceError)
|
47
39
|
|
48
|
-
expect(
|
49
|
-
expect(arraydest.last.message).to eq("Unable to convert value #{bad_string.dump} to encoding UTF-8 due to #<Encoding::InvalidByteSequenceError: \"\\xDD\\xDD\" on UTF-16LE>")
|
40
|
+
expect(@logs.last.message).to eq("Unable to convert value #{bad_string.dump} to encoding UTF-8 due to #<Encoding::InvalidByteSequenceError: \"\\xDD\\xDD\" on UTF-16LE>")
|
50
41
|
end
|
51
42
|
|
52
43
|
it "should not raise an error when receiving a string containing invalid bytes in the destination encoding, when specifying :invalid => :replace" do
|
53
|
-
read_string = nil
|
54
|
-
|
55
44
|
FFI::MemoryPointer.new(:byte, bad_string_bytes.count) do |ptr|
|
56
45
|
# uchar here is synonymous with byte
|
57
46
|
ptr.put_array_of_uchar(0, bad_string_bytes)
|
58
47
|
|
59
|
-
read_string = ptr.read_wide_string(bad_string.length, Encoding::UTF_8, :invalid => :replace)
|
48
|
+
read_string = ptr.read_wide_string(bad_string.length, Encoding::UTF_8, false, :invalid => :replace)
|
49
|
+
expect(read_string).to eq("hello invalid world\uFFFD")
|
60
50
|
end
|
51
|
+
end
|
61
52
|
|
62
|
-
|
53
|
+
it "raises an IndexError if asked to read more characters than there are bytes allocated" do
|
54
|
+
expect {
|
55
|
+
FFI::MemoryPointer.new(:byte, 1) do |ptr|
|
56
|
+
ptr.read_wide_string(1) # 1 wchar = 2 bytes
|
57
|
+
end
|
58
|
+
}.to raise_error(IndexError, /out of bounds/)
|
59
|
+
end
|
60
|
+
|
61
|
+
it "raises an IndexError if asked to read a negative number of characters" do
|
62
|
+
expect {
|
63
|
+
FFI::MemoryPointer.new(:byte, 1) do |ptr|
|
64
|
+
ptr.read_wide_string(-1)
|
65
|
+
end
|
66
|
+
}.to raise_error(IndexError, /out of bounds/)
|
67
|
+
end
|
68
|
+
|
69
|
+
it "returns an empty string if asked to read 0 characters" do
|
70
|
+
FFI::MemoryPointer.new(:byte, 1) do |ptr|
|
71
|
+
expect(ptr.read_wide_string(0)).to eq("")
|
72
|
+
end
|
73
|
+
end
|
74
|
+
|
75
|
+
it "returns a substring if asked to read fewer characters than are in the byte array" do
|
76
|
+
FFI::MemoryPointer.new(:byte, 4) do |ptr|
|
77
|
+
ptr.write_array_of_uint8("AB".encode('UTF-16LE').bytes.to_a)
|
78
|
+
expect(ptr.read_wide_string(1)).to eq("A")
|
79
|
+
end
|
80
|
+
end
|
81
|
+
|
82
|
+
it "preserves wide null characters in the string" do
|
83
|
+
FFI::MemoryPointer.new(:byte, 6) do |ptr|
|
84
|
+
ptr.write_array_of_uint8(a_wide_bytes + [0, 0] + b_wide_bytes)
|
85
|
+
expect(ptr.read_wide_string(3)).to eq("A\x00B")
|
86
|
+
end
|
63
87
|
end
|
64
88
|
end
|
65
89
|
|
@@ -69,52 +93,92 @@ describe "FFI::MemoryPointer", :if => Puppet.features.microsoft_windows? do
|
|
69
93
|
let (:double_null_string) { string + "\x00\x00" }
|
70
94
|
|
71
95
|
it "should read a short single null terminated string" do
|
72
|
-
read_string = nil
|
73
96
|
FFI::MemoryPointer.from_string_to_wide_string(single_null_string) do |ptr|
|
74
|
-
|
97
|
+
expect(ptr.read_arbitrary_wide_string_up_to).to eq(string)
|
75
98
|
end
|
76
|
-
|
77
|
-
expect(read_string).to eq(string)
|
78
99
|
end
|
79
100
|
|
80
101
|
it "should read a short double null terminated string" do
|
81
|
-
read_string = nil
|
82
102
|
FFI::MemoryPointer.from_string_to_wide_string(double_null_string) do |ptr|
|
83
|
-
|
103
|
+
expect(ptr.read_arbitrary_wide_string_up_to(512, :double_null)).to eq(string)
|
84
104
|
end
|
105
|
+
end
|
106
|
+
|
107
|
+
it "detects trailing single null wchar" do
|
108
|
+
FFI::MemoryPointer.from_string_to_wide_string(single_null_string) do |ptr|
|
109
|
+
expect(ptr).to receive(:read_wide_string).with(string.length, anything, anything, anything).and_call_original
|
85
110
|
|
86
|
-
|
111
|
+
expect(ptr.read_arbitrary_wide_string_up_to).to eq(string)
|
112
|
+
end
|
87
113
|
end
|
88
114
|
|
89
|
-
it "
|
90
|
-
|
115
|
+
it "detects trailing double null wchar" do
|
116
|
+
FFI::MemoryPointer.from_string_to_wide_string(double_null_string) do |ptr|
|
117
|
+
expect(ptr).to receive(:read_wide_string).with(string.length, anything, anything, anything).and_call_original
|
118
|
+
|
119
|
+
expect(ptr.read_arbitrary_wide_string_up_to(512, :double_null)).to eq(string)
|
120
|
+
end
|
121
|
+
end
|
122
|
+
|
123
|
+
it "should raises an IndexError if max_length is negative" do
|
124
|
+
FFI::MemoryPointer.from_string_to_wide_string(single_null_string) do |ptr|
|
125
|
+
expect {
|
126
|
+
ptr.read_arbitrary_wide_string_up_to(-1)
|
127
|
+
}.to raise_error(IndexError, /out of bounds/)
|
128
|
+
end
|
129
|
+
end
|
130
|
+
|
131
|
+
it "should return an empty string when the max_length is 0" do
|
91
132
|
FFI::MemoryPointer.from_string_to_wide_string(single_null_string) do |ptr|
|
92
|
-
|
133
|
+
expect(ptr.read_arbitrary_wide_string_up_to(0)).to eq("")
|
93
134
|
end
|
135
|
+
end
|
94
136
|
|
95
|
-
|
137
|
+
it "should return a string of max_length characters when specified" do
|
138
|
+
FFI::MemoryPointer.from_string_to_wide_string(single_null_string) do |ptr|
|
139
|
+
expect(ptr.read_arbitrary_wide_string_up_to(3)).to eq(string[0..2])
|
140
|
+
end
|
96
141
|
end
|
97
142
|
|
98
143
|
it "should return wide strings in UTF-8" do
|
99
|
-
read_string = nil
|
100
144
|
FFI::MemoryPointer.from_string_to_wide_string(string) do |ptr|
|
101
|
-
read_string = ptr.read_arbitrary_wide_string_up_to
|
145
|
+
read_string = ptr.read_arbitrary_wide_string_up_to
|
146
|
+
expect(read_string.encoding).to eq(Encoding::UTF_8)
|
102
147
|
end
|
103
|
-
|
104
|
-
expect(read_string.encoding).to eq(Encoding::UTF_8)
|
105
148
|
end
|
106
149
|
|
107
150
|
it "should not raise an error when receiving a string containing invalid bytes in the destination encoding, when specifying :invalid => :replace" do
|
108
|
-
read_string = nil
|
109
|
-
|
110
151
|
FFI::MemoryPointer.new(:byte, bad_string_bytes.count) do |ptr|
|
111
152
|
# uchar here is synonymous with byte
|
112
153
|
ptr.put_array_of_uchar(0, bad_string_bytes)
|
113
154
|
|
114
155
|
read_string = ptr.read_arbitrary_wide_string_up_to(ptr.size / 2, :single_null, :invalid => :replace)
|
156
|
+
expect(read_string).to eq("hello invalid world\uFFFD")
|
157
|
+
end
|
158
|
+
end
|
159
|
+
|
160
|
+
it "should raise an IndexError if there isn't a null terminator" do
|
161
|
+
# This only works when using a memory pointer with a known number of cells
|
162
|
+
# and size per cell, but not arbitrary Pointers
|
163
|
+
FFI::MemoryPointer.new(:wchar, 1) do |ptr|
|
164
|
+
ptr.write_array_of_uint8(a_wide_bytes)
|
165
|
+
|
166
|
+
expect {
|
167
|
+
ptr.read_arbitrary_wide_string_up_to(42)
|
168
|
+
}.to raise_error(IndexError, /out of bounds/)
|
115
169
|
end
|
170
|
+
end
|
171
|
+
|
172
|
+
it "should raise an IndexError if there isn't a double null terminator" do
|
173
|
+
# This only works when using a memory pointer with a known number of cells
|
174
|
+
# and size per cell, but not arbitrary Pointers
|
175
|
+
FFI::MemoryPointer.new(:wchar, 1) do |ptr|
|
176
|
+
ptr.write_array_of_uint8(a_wide_bytes)
|
116
177
|
|
117
|
-
|
178
|
+
expect {
|
179
|
+
ptr.read_arbitrary_wide_string_up_to(42, :double_null)
|
180
|
+
}.to raise_error(IndexError, /out of bounds/)
|
181
|
+
end
|
118
182
|
end
|
119
183
|
end
|
120
184
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: puppet
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 5.5.
|
4
|
+
version: 5.5.21
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Puppet Labs
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-
|
11
|
+
date: 2020-07-03 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: facter
|
@@ -1716,7 +1716,7 @@ files:
|
|
1716
1716
|
- spec/fixtures/unit/provider/mount/parsed/solaris.fstab
|
1717
1717
|
- spec/fixtures/unit/provider/mount/parsed/solaris.mount
|
1718
1718
|
- spec/fixtures/unit/provider/naginator/define_empty_param
|
1719
|
-
- spec/fixtures/unit/provider/package/dnfmodule/dnf-module-list
|
1719
|
+
- spec/fixtures/unit/provider/package/dnfmodule/dnf-module-list.txt
|
1720
1720
|
- spec/fixtures/unit/provider/package/gem/gem-list-single-package
|
1721
1721
|
- spec/fixtures/unit/provider/package/gem/line-with-1.8.5-warning
|
1722
1722
|
- spec/fixtures/unit/provider/package/openbsd/pkginfo.detail
|
@@ -1858,7 +1858,6 @@ files:
|
|
1858
1858
|
- spec/integration/ssl/certificate_revocation_list_spec.rb
|
1859
1859
|
- spec/integration/ssl/host_spec.rb
|
1860
1860
|
- spec/integration/ssl/key_spec.rb
|
1861
|
-
- spec/integration/test/test_helper_spec.rb
|
1862
1861
|
- spec/integration/transaction/report_spec.rb
|
1863
1862
|
- spec/integration/transaction_spec.rb
|
1864
1863
|
- spec/integration/type/exec_spec.rb
|
@@ -2531,6 +2530,7 @@ files:
|
|
2531
2530
|
- spec/unit/ssl/validator_spec.rb
|
2532
2531
|
- spec/unit/status_spec.rb
|
2533
2532
|
- spec/unit/task_spec.rb
|
2533
|
+
- spec/unit/test/test_helper_spec.rb
|
2534
2534
|
- spec/unit/transaction/additional_resource_generator_spec.rb
|
2535
2535
|
- spec/unit/transaction/event_manager_spec.rb
|
2536
2536
|
- spec/unit/transaction/event_spec.rb
|
@@ -2705,7 +2705,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
2705
2705
|
- !ruby/object:Gem::Version
|
2706
2706
|
version: 1.3.1
|
2707
2707
|
requirements: []
|
2708
|
-
rubygems_version: 3.0.
|
2708
|
+
rubygems_version: 3.0.8
|
2709
2709
|
signing_key:
|
2710
2710
|
specification_version: 4
|
2711
2711
|
summary: Puppet, an automated configuration management tool
|
@@ -3035,7 +3035,7 @@ test_files:
|
|
3035
3035
|
- spec/fixtures/unit/provider/mount/parsed/solaris.fstab
|
3036
3036
|
- spec/fixtures/unit/provider/mount/parsed/solaris.mount
|
3037
3037
|
- spec/fixtures/unit/provider/naginator/define_empty_param
|
3038
|
-
- spec/fixtures/unit/provider/package/dnfmodule/dnf-module-list
|
3038
|
+
- spec/fixtures/unit/provider/package/dnfmodule/dnf-module-list.txt
|
3039
3039
|
- spec/fixtures/unit/provider/package/gem/gem-list-single-package
|
3040
3040
|
- spec/fixtures/unit/provider/package/gem/line-with-1.8.5-warning
|
3041
3041
|
- spec/fixtures/unit/provider/package/openbsd/pkginfo.detail
|
@@ -3177,7 +3177,6 @@ test_files:
|
|
3177
3177
|
- spec/integration/ssl/certificate_revocation_list_spec.rb
|
3178
3178
|
- spec/integration/ssl/host_spec.rb
|
3179
3179
|
- spec/integration/ssl/key_spec.rb
|
3180
|
-
- spec/integration/test/test_helper_spec.rb
|
3181
3180
|
- spec/integration/transaction/report_spec.rb
|
3182
3181
|
- spec/integration/transaction_spec.rb
|
3183
3182
|
- spec/integration/type/exec_spec.rb
|
@@ -3850,6 +3849,7 @@ test_files:
|
|
3850
3849
|
- spec/unit/ssl/validator_spec.rb
|
3851
3850
|
- spec/unit/status_spec.rb
|
3852
3851
|
- spec/unit/task_spec.rb
|
3852
|
+
- spec/unit/test/test_helper_spec.rb
|
3853
3853
|
- spec/unit/transaction/additional_resource_generator_spec.rb
|
3854
3854
|
- spec/unit/transaction/event_manager_spec.rb
|
3855
3855
|
- spec/unit/transaction/event_spec.rb
|
@@ -1,31 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
describe "Windows UTF8 environment variables", :if => Puppet.features.microsoft_windows? do
|
4
|
-
# The Puppet::Util::Windows::Process class is used to manipulate environment variables as it is known to handle UTF8 characters. Where as the implementation of ENV in ruby does not.
|
5
|
-
# before and end all are used to inject environment variables before the test helper 'before_each_test' function is called
|
6
|
-
# Do not use before and after hooks in these tests as it may have unintended consequences
|
7
|
-
|
8
|
-
before(:all) {
|
9
|
-
@varname = 'test_helper_spec-test_variable'
|
10
|
-
@rune_utf8 = "\u16A0\u16C7\u16BB\u16EB\u16D2\u16E6\u16A6\u16EB\u16A0\u16B1\u16A9\u16A0\u16A2\u16B1\u16EB\u16A0\u16C1\u16B1\u16AA\u16EB\u16B7\u16D6\u16BB\u16B9\u16E6\u16DA\u16B3\u16A2\u16D7"
|
11
|
-
|
12
|
-
Puppet::Util::Windows::Process.set_environment_variable(@varname, @rune_utf8)
|
13
|
-
}
|
14
|
-
after(:all) {
|
15
|
-
# Need to cleanup this environment variable otherwise it contaminates any subsequent tests
|
16
|
-
Puppet::Util::Windows::Process.set_environment_variable(@varname, nil)
|
17
|
-
}
|
18
|
-
|
19
|
-
it "#after_each_test should preserve UTF8 environment variables" do
|
20
|
-
envhash = Puppet::Util::Windows::Process.get_environment_strings
|
21
|
-
expect(envhash[@varname]).to eq(@rune_utf8)
|
22
|
-
# Change the value in the test to force test_helper to restore the environment
|
23
|
-
ENV[@varname] = 'bad foo'
|
24
|
-
|
25
|
-
# Prematurely trigger the after_each_test method
|
26
|
-
Puppet::Test::TestHelper.after_each_test
|
27
|
-
|
28
|
-
envhash = Puppet::Util::Windows::Process.get_environment_strings
|
29
|
-
expect(envhash[@varname]).to eq(@rune_utf8)
|
30
|
-
end
|
31
|
-
end
|