puppet 5.5.20-universal-darwin → 5.5.21-universal-darwin
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: universal-darwin
|
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
|
@@ -1730,7 +1730,7 @@ files:
|
|
1730
1730
|
- spec/fixtures/unit/provider/mount/parsed/solaris.fstab
|
1731
1731
|
- spec/fixtures/unit/provider/mount/parsed/solaris.mount
|
1732
1732
|
- spec/fixtures/unit/provider/naginator/define_empty_param
|
1733
|
-
- spec/fixtures/unit/provider/package/dnfmodule/dnf-module-list
|
1733
|
+
- spec/fixtures/unit/provider/package/dnfmodule/dnf-module-list.txt
|
1734
1734
|
- spec/fixtures/unit/provider/package/gem/gem-list-single-package
|
1735
1735
|
- spec/fixtures/unit/provider/package/gem/line-with-1.8.5-warning
|
1736
1736
|
- spec/fixtures/unit/provider/package/openbsd/pkginfo.detail
|
@@ -1872,7 +1872,6 @@ files:
|
|
1872
1872
|
- spec/integration/ssl/certificate_revocation_list_spec.rb
|
1873
1873
|
- spec/integration/ssl/host_spec.rb
|
1874
1874
|
- spec/integration/ssl/key_spec.rb
|
1875
|
-
- spec/integration/test/test_helper_spec.rb
|
1876
1875
|
- spec/integration/transaction/report_spec.rb
|
1877
1876
|
- spec/integration/transaction_spec.rb
|
1878
1877
|
- spec/integration/type/exec_spec.rb
|
@@ -2545,6 +2544,7 @@ files:
|
|
2545
2544
|
- spec/unit/ssl/validator_spec.rb
|
2546
2545
|
- spec/unit/status_spec.rb
|
2547
2546
|
- spec/unit/task_spec.rb
|
2547
|
+
- spec/unit/test/test_helper_spec.rb
|
2548
2548
|
- spec/unit/transaction/additional_resource_generator_spec.rb
|
2549
2549
|
- spec/unit/transaction/event_manager_spec.rb
|
2550
2550
|
- spec/unit/transaction/event_spec.rb
|
@@ -2719,7 +2719,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
2719
2719
|
- !ruby/object:Gem::Version
|
2720
2720
|
version: 1.3.1
|
2721
2721
|
requirements: []
|
2722
|
-
rubygems_version: 3.0.
|
2722
|
+
rubygems_version: 3.0.8
|
2723
2723
|
signing_key:
|
2724
2724
|
specification_version: 4
|
2725
2725
|
summary: Puppet, an automated configuration management tool
|
@@ -3049,7 +3049,7 @@ test_files:
|
|
3049
3049
|
- spec/fixtures/unit/provider/mount/parsed/solaris.fstab
|
3050
3050
|
- spec/fixtures/unit/provider/mount/parsed/solaris.mount
|
3051
3051
|
- spec/fixtures/unit/provider/naginator/define_empty_param
|
3052
|
-
- spec/fixtures/unit/provider/package/dnfmodule/dnf-module-list
|
3052
|
+
- spec/fixtures/unit/provider/package/dnfmodule/dnf-module-list.txt
|
3053
3053
|
- spec/fixtures/unit/provider/package/gem/gem-list-single-package
|
3054
3054
|
- spec/fixtures/unit/provider/package/gem/line-with-1.8.5-warning
|
3055
3055
|
- spec/fixtures/unit/provider/package/openbsd/pkginfo.detail
|
@@ -3191,7 +3191,6 @@ test_files:
|
|
3191
3191
|
- spec/integration/ssl/certificate_revocation_list_spec.rb
|
3192
3192
|
- spec/integration/ssl/host_spec.rb
|
3193
3193
|
- spec/integration/ssl/key_spec.rb
|
3194
|
-
- spec/integration/test/test_helper_spec.rb
|
3195
3194
|
- spec/integration/transaction/report_spec.rb
|
3196
3195
|
- spec/integration/transaction_spec.rb
|
3197
3196
|
- spec/integration/type/exec_spec.rb
|
@@ -3864,6 +3863,7 @@ test_files:
|
|
3864
3863
|
- spec/unit/ssl/validator_spec.rb
|
3865
3864
|
- spec/unit/status_spec.rb
|
3866
3865
|
- spec/unit/task_spec.rb
|
3866
|
+
- spec/unit/test/test_helper_spec.rb
|
3867
3867
|
- spec/unit/transaction/additional_resource_generator_spec.rb
|
3868
3868
|
- spec/unit/transaction/event_manager_spec.rb
|
3869
3869
|
- 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
|