puppet 5.1.0-universal-darwin → 5.2.0-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.

Files changed (108) hide show
  1. data/lib/puppet.rb +6 -53
  2. data/lib/puppet/application.rb +14 -7
  3. data/lib/puppet/application/agent.rb +6 -2
  4. data/lib/puppet/application/apply.rb +6 -2
  5. data/lib/puppet/application/cert.rb +6 -2
  6. data/lib/puppet/application/describe.rb +6 -2
  7. data/lib/puppet/application/device.rb +40 -29
  8. data/lib/puppet/application/doc.rb +6 -2
  9. data/lib/puppet/application/filebucket.rb +6 -2
  10. data/lib/puppet/application/lookup.rb +6 -2
  11. data/lib/puppet/application/master.rb +6 -2
  12. data/lib/puppet/application/resource.rb +6 -2
  13. data/lib/puppet/face/catalog.rb +1 -1
  14. data/lib/puppet/face/certificate_request.rb +1 -1
  15. data/lib/puppet/face/certificate_revocation_list.rb +1 -1
  16. data/lib/puppet/face/help.rb +17 -13
  17. data/lib/puppet/file_serving/configuration.rb +3 -0
  18. data/lib/puppet/file_serving/configuration/parser.rb +2 -0
  19. data/lib/puppet/file_serving/mount/tasks.rb +21 -0
  20. data/lib/puppet/functions/epp.rb +3 -0
  21. data/lib/puppet/functions/lookup.rb +2 -1
  22. data/lib/puppet/generate/models/type/property.rb +1 -1
  23. data/lib/puppet/gettext/config.rb +70 -0
  24. data/lib/puppet/gettext/stubs.rb +11 -0
  25. data/lib/puppet/indirector/request.rb +4 -4
  26. data/lib/puppet/info_service.rb +10 -0
  27. data/lib/puppet/info_service/task_information_service.rb +32 -0
  28. data/lib/puppet/module.rb +43 -12
  29. data/lib/puppet/module/task.rb +90 -0
  30. data/lib/puppet/parser/ast/leaf.rb +1 -1
  31. data/lib/puppet/parser/functions/dig.rb +11 -2
  32. data/lib/puppet/parser/functions/epp.rb +3 -0
  33. data/lib/puppet/parser/functions/new.rb +8 -8
  34. data/lib/puppet/pops/evaluator/evaluator_impl.rb +1 -1
  35. data/lib/puppet/pops/evaluator/runtime3_support.rb +1 -0
  36. data/lib/puppet/pops/issues.rb +11 -5
  37. data/lib/puppet/pops/loader/static_loader.rb +1 -1
  38. data/lib/puppet/pops/model/factory.rb +42 -2
  39. data/lib/puppet/pops/model/model_tree_dumper.rb +1 -1
  40. data/lib/puppet/pops/parser/egrammar.ra +30 -9
  41. data/lib/puppet/pops/parser/eparser.rb +1094 -1043
  42. data/lib/puppet/pops/patterns.rb +1 -1
  43. data/lib/puppet/pops/serialization/from_data_converter.rb +1 -1
  44. data/lib/puppet/pops/serialization/json_path.rb +1 -1
  45. data/lib/puppet/pops/serialization/to_data_converter.rb +12 -3
  46. data/lib/puppet/pops/types/p_object_type.rb +31 -3
  47. data/lib/puppet/pops/types/p_sem_ver_range_type.rb +3 -3
  48. data/lib/puppet/pops/types/p_timespan_type.rb +1 -1
  49. data/lib/puppet/pops/types/p_timestamp_type.rb +1 -1
  50. data/lib/puppet/pops/types/string_converter.rb +15 -12
  51. data/lib/puppet/pops/types/type_calculator.rb +1 -1
  52. data/lib/puppet/pops/types/type_factory.rb +7 -0
  53. data/lib/puppet/pops/types/type_formatter.rb +1 -1
  54. data/lib/puppet/pops/types/type_mismatch_describer.rb +86 -130
  55. data/lib/puppet/pops/types/type_parser.rb +10 -4
  56. data/lib/puppet/pops/types/types.rb +81 -22
  57. data/lib/puppet/provider/package/aix.rb +4 -4
  58. data/lib/puppet/provider/package/yum.rb +1 -0
  59. data/lib/puppet/type.rb +1 -1
  60. data/lib/puppet/type/mount.rb +1 -1
  61. data/lib/puppet/type/sshkey.rb +9 -1
  62. data/lib/puppet/util.rb +1 -1
  63. data/lib/puppet/util/command_line.rb +1 -1
  64. data/lib/puppet/util/log.rb +15 -10
  65. data/lib/puppet/util/windows/api_types.rb +9 -5
  66. data/lib/puppet/util/windows/process.rb +9 -1
  67. data/lib/puppet/vendor/semantic_puppet/lib/semantic_puppet.rb +1 -3
  68. data/lib/puppet/version.rb +1 -1
  69. data/locales/ja/puppet.po +9270 -0
  70. data/locales/puppet.pot +272 -212
  71. data/spec/fixtures/unit/provider/package/yum/yum-check-update-plugin-output.txt +36 -0
  72. data/spec/integration/indirector/file_content/file_server_spec.rb +17 -0
  73. data/spec/integration/indirector/file_metadata/file_server_spec.rb +10 -0
  74. data/spec/integration/util/windows/process_spec.rb +45 -0
  75. data/spec/lib/puppet_spec/modules.rb +10 -0
  76. data/spec/shared_contexts/types_setup.rb +19 -4
  77. data/spec/spec_helper.rb +6 -7
  78. data/spec/unit/face/help_spec.rb +2 -2
  79. data/spec/unit/file_serving/configuration_spec.rb +14 -4
  80. data/spec/unit/file_serving/mount/modules_spec.rb +1 -1
  81. data/spec/unit/file_serving/mount/tasks_spec.rb +72 -0
  82. data/spec/unit/functions/epp_spec.rb +5 -0
  83. data/spec/unit/functions/regsubst_spec.rb +1 -1
  84. data/spec/unit/gettext_config_spec.rb +57 -0
  85. data/spec/unit/indirector/request_spec.rb +41 -0
  86. data/spec/unit/info_service_spec.rb +66 -2
  87. data/spec/unit/module_spec.rb +81 -1
  88. data/spec/unit/parser/ast/leaf_spec.rb +3 -4
  89. data/spec/unit/pops/evaluator/access_ops_spec.rb +5 -0
  90. data/spec/unit/pops/factory_spec.rb +5 -1
  91. data/spec/unit/pops/parser/parser_spec.rb +138 -0
  92. data/spec/unit/pops/serialization/to_from_hr_spec.rb +74 -1
  93. data/spec/unit/pops/types/p_init_type_spec.rb +1 -1
  94. data/spec/unit/pops/types/p_object_type_spec.rb +217 -33
  95. data/spec/unit/pops/types/p_timespan_type_spec.rb +7 -0
  96. data/spec/unit/pops/types/p_timestamp_type_spec.rb +7 -0
  97. data/spec/unit/pops/types/string_converter_spec.rb +48 -11
  98. data/spec/unit/pops/types/type_calculator_spec.rb +37 -5
  99. data/spec/unit/pops/types/type_mismatch_describer_spec.rb +12 -0
  100. data/spec/unit/pops/types/type_parser_spec.rb +25 -0
  101. data/spec/unit/pops/validator/validator_spec.rb +2 -2
  102. data/spec/unit/provider/package/aix_spec.rb +26 -1
  103. data/spec/unit/provider/package/yum_spec.rb +10 -0
  104. data/spec/unit/task_spec.rb +102 -0
  105. data/spec/unit/util/log_spec.rb +32 -3
  106. data/spec/unit/util/windows/api_types_spec.rb +51 -0
  107. metadata +3476 -3450
  108. checksums.yaml +0 -7
@@ -0,0 +1,36 @@
1
+ Loaded plugins: fastestmirror
2
+ Loading mirror speeds from cached hostfile
3
+
4
+ NetworkManager.x86_64 1:1.0.0-14.git20150121.b4ea599c.el7 base
5
+ NetworkManager-glib.x86_64 1:1.0.0-14.git20150121.b4ea599c.el7 base
6
+ NetworkManager-tui.x86_64 1:1.0.0-14.git20150121.b4ea599c.el7 base
7
+ alsa-firmware.noarch 1.0.28-2.el7 base
8
+ alsa-lib.x86_64 1.0.28-2.el7 base
9
+ audit.x86_64 2.4.1-5.el7 base
10
+ audit-libs.x86_64 2.4.1-5.el7 base
11
+ authconfig.x86_64 6.2.8-9.el7 base
12
+ avahi.x86_64 0.6.31-14.el7 base
13
+ avahi-autoipd.x86_64 0.6.31-14.el7 base
14
+ avahi-libs.x86_64 0.6.31-14.el7 base
15
+ bash.x86_64 4.2.46-12.el7 base
16
+ bind-libs-lite.x86_64 32:9.9.4-18.el7_1.1 updates
17
+ bind-license.noarch 32:9.9.4-18.el7_1.1 updates
18
+ binutils.x86_64 2.23.52.0.1-30.el7_1.2 updates
19
+ biosdevname.x86_64 0.6.1-2.el7 base
20
+ btrfs-progs.x86_64 3.16.2-1.el7 base
21
+ ca-certificates.noarch 2015.2.4-70.0.el7_1 updates
22
+ centos-logos.noarch 70.0.6-2.el7.centos updates
23
+ centos-release.x86_64 7-1.1503.el7.centos.2.8 base
24
+ cpp.x86_64 4.8.3-9.el7 base
25
+ cronie.x86_64 1.4.11-13.el7 base
26
+ cronie-anacron.x86_64 1.4.11-13.el7 base
27
+ cryptsetup-libs.x86_64 1.6.6-3.el7 base
28
+ dbus.x86_64 1:1.6.12-11.el7 base
29
+ dbus-libs.x86_64 1:1.6.12-11.el7 base
30
+ device-mapper.x86_64 7:1.02.93-3.el7 base
31
+ device-mapper-event.x86_64 7:1.02.93-3.el7 base
32
+ device-mapper-event-libs.x86_64 7:1.02.93-3.el7 base
33
+ device-mapper-libs.x86_64 7:1.02.93-3.el7 base
34
+ Random plugin output
35
+ Loaded plugins: fastestmirror, product-id, fake-plugin
36
+ Random plugin failed, is the mirror available?
@@ -57,6 +57,23 @@ describe Puppet::Indirector::FileContent::FileServer, " when finding files" do
57
57
  expect(result.content).to eq("1\r\n")
58
58
  end
59
59
 
60
+ it "should find file content of tasks in modules" do
61
+ path = tmpfile("task_file_content")
62
+ Dir.mkdir(path)
63
+
64
+ modpath = File.join(path, "myothermod")
65
+ FileUtils.mkdir_p(File.join(modpath, "tasks"))
66
+ file = File.join(modpath, "tasks", "mytask")
67
+ File.open(file, "wb") { |f| f.write "I'm a task" }
68
+
69
+ env = Puppet::Node::Environment.create(:foo, [path])
70
+ result = Puppet::FileServing::Content.indirection.find("tasks/myothermod/mytask", :environment => env)
71
+
72
+ expect(result).not_to be_nil
73
+ expect(result).to be_instance_of(Puppet::FileServing::Content)
74
+ expect(result.content).to eq("I'm a task")
75
+ end
76
+
60
77
  it "should find file content in files when node name expansions are used" do
61
78
  Puppet::FileSystem.stubs(:exist?).returns true
62
79
  Puppet::FileSystem.stubs(:exist?).with(Puppet[:fileserverconfig]).returns(true)
@@ -42,6 +42,16 @@ describe Puppet::Indirector::FileMetadata::FileServer, " when finding files" do
42
42
  end
43
43
  end
44
44
 
45
+ describe "that are tasks in modules" do
46
+ with_checksum_types("task_file_content", "mymod/tasks/mytask") do
47
+ it "should return the correct metadata" do
48
+ env = Puppet::Node::Environment.create(:foo, [env_path])
49
+ result = Puppet::FileServing::Metadata.indirection.find("tasks/mymod/mytask", :environment => env, :checksum_type => checksum_type)
50
+ expect_correct_checksum(result, checksum_type, checksum, Puppet::FileServing::Metadata)
51
+ end
52
+ end
53
+ end
54
+
45
55
  describe "when node name expansions are used" do
46
56
  with_checksum_types("file_server_testing", "mynode/myfile") do
47
57
  it "should return the correct metadata" do
@@ -34,6 +34,51 @@ describe "Puppet::Util::Windows::Process", :if => Puppet.features.microsoft_wind
34
34
  end
35
35
  end
36
36
 
37
+ describe "when reading environment variables" do
38
+ after :each do
39
+ # spec\integration\test\test_helper_spec.rb calls set_environment_strings
40
+ # after :all and thus needs access to the real APIs once again
41
+ Puppet::Util::Windows::Process.unstub(:GetEnvironmentStringsW)
42
+ Puppet::Util::Windows::Process.unstub(:FreeEnvironmentStringsW)
43
+ end
44
+
45
+ it "will ignore only keys or values with corrupt byte sequences" do
46
+ arraydest = []
47
+ Puppet::Util::Log.newdestination(Puppet::Test::LogCollector.new(arraydest))
48
+
49
+ env_vars = {}
50
+
51
+ # Create a UTF-16LE version of the below null separated environment string
52
+ # "a=b\x00c=d\x00e=\xDD\xDD\x00f=g\x00\x00"
53
+ env_var_block =
54
+ "a=b\x00".encode(Encoding::UTF_16LE) +
55
+ "c=d\x00".encode(Encoding::UTF_16LE) +
56
+ 'e='.encode(Encoding::UTF_16LE) + "\xDD\xDD".force_encoding(Encoding::UTF_16LE) + "\x00".encode(Encoding::UTF_16LE) +
57
+ "f=g\x00\x00".encode(Encoding::UTF_16LE)
58
+
59
+ env_var_block_bytes = env_var_block.bytes.to_a
60
+
61
+ FFI::MemoryPointer.new(:byte, env_var_block_bytes.count) do |ptr|
62
+ # uchar here is synonymous with byte
63
+ ptr.put_array_of_uchar(0, env_var_block_bytes)
64
+
65
+ # stub the block of memory that the Win32 API would typically return via pointer
66
+ Puppet::Util::Windows::Process.expects(:GetEnvironmentStringsW).returns(ptr)
67
+ # stub out the real API call to free memory, else process crashes
68
+ Puppet::Util::Windows::Process.expects(:FreeEnvironmentStringsW)
69
+
70
+ env_vars = Puppet::Util::Windows::Process.get_environment_strings
71
+ end
72
+
73
+ # based on corrupted memory, the e=\xDD\xDD should have been removed from the set
74
+ expect(env_vars).to eq({'a' => 'b', 'c' => 'd', 'f' => 'g'})
75
+
76
+ # and Puppet should emit a warning about it
77
+ expect(arraydest.last.level).to eq(:warning)
78
+ expect(arraydest.last.message).to eq("Discarding environment variable e=\uFFFD which contains invalid bytes")
79
+ end
80
+ end
81
+
37
82
  describe "when setting environment variables" do
38
83
  it "can properly handle env var values with = in them" do
39
84
  begin
@@ -20,6 +20,16 @@ module PuppetSpec::Modules
20
20
  end
21
21
  end
22
22
 
23
+ if tasks = options[:tasks]
24
+ tasks_dir = File.join(module_dir, 'tasks')
25
+ FileUtils.mkdir_p(tasks_dir)
26
+ tasks.each do |task_files|
27
+ task_files.each do |task_file|
28
+ FileUtils.touch(File.join(tasks_dir, task_file))
29
+ end
30
+ end
31
+ end
32
+
23
33
  Puppet::Module.new(name, module_dir, environment)
24
34
  end
25
35
 
@@ -93,6 +93,7 @@ shared_context 'types_setup' do
93
93
  Puppet::Pops::Types::PFloatType,
94
94
  Puppet::Pops::Types::PBooleanType,
95
95
  Puppet::Pops::Types::PEnumType,
96
+ Puppet::Pops::Types::PPatternType,
96
97
  ]
97
98
  end
98
99
  def scalar_data_types
@@ -161,18 +162,32 @@ shared_context 'types_setup' do
161
162
  end
162
163
 
163
164
  def self.data_compatible_types
165
+ tf = Puppet::Pops::Types::TypeFactory
164
166
  result = scalar_data_types
165
- result << Puppet::Pops::Types::PArrayType.new(Puppet::Pops::Types::PScalarDataType::DEFAULT)
166
- result << Puppet::Pops::Types::PHashType.new(Puppet::Pops::Types::PStringType::DEFAULT, Puppet::Pops::Types::PScalarDataType::DEFAULT)
167
+ result << Puppet::Pops::Types::PArrayType.new(tf.data)
168
+ result << Puppet::Pops::Types::PHashType.new(Puppet::Pops::Types::PStringType::DEFAULT, tf.data)
167
169
  result << Puppet::Pops::Types::PUndefType
168
- result << Puppet::Pops::Types::PNotUndefType.new(Puppet::Pops::Types::PScalarDataType::DEFAULT)
169
- result << Puppet::Pops::Types::PTupleType.new([Puppet::Pops::Types::PScalarDataType::DEFAULT])
170
+ result << Puppet::Pops::Types::PTupleType.new([tf.data])
170
171
  result
171
172
  end
172
173
  def data_compatible_types
173
174
  self.class.data_compatible_types
174
175
  end
175
176
 
177
+ def self.rich_data_compatible_types
178
+ tf = Puppet::Pops::Types::TypeFactory
179
+ result = scalar_types
180
+ result << Puppet::Pops::Types::PArrayType.new(tf.rich_data)
181
+ result << Puppet::Pops::Types::PHashType.new(tf.rich_data_key, tf.rich_data)
182
+ result << Puppet::Pops::Types::PUndefType
183
+ result << Puppet::Pops::Types::PDefaultType
184
+ result << Puppet::Pops::Types::PTupleType.new([tf.rich_data])
185
+ result
186
+ end
187
+ def rich_data_compatible_types
188
+ self.class.rich_data_compatible_types
189
+ end
190
+
176
191
  def self.type_from_class(c)
177
192
  c.is_a?(Class) ? c::DEFAULT : c
178
193
  end
@@ -8,19 +8,18 @@ $LOAD_PATH.unshift File.join(dir, 'lib')
8
8
  # Don't want puppet getting the command line arguments for rake or autotest
9
9
  ARGV.clear
10
10
 
11
- # Stub out gettext's `_` method, which attempts to load translations.
12
- # Several of our mocks (mostly around file system interaction) are broken by
13
- # FastGettext's implementation of this method.
14
- def _(msg)
15
- msg
16
- end
17
-
18
11
  begin
19
12
  require 'rubygems'
20
13
  rescue LoadError
21
14
  end
22
15
 
23
16
  require 'puppet'
17
+
18
+ # Stub out gettext's `_` and `n_()` methods, which attempt to load translations.
19
+ # Several of our mocks (mostly around file system interaction) are broken by
20
+ # FastGettext's implementation of these methods.
21
+ require 'puppet/gettext/stubs'
22
+
24
23
  gem 'rspec', '>=3.1.0'
25
24
  require 'rspec/expectations'
26
25
  require 'rspec/its'
@@ -103,13 +103,13 @@ describe Puppet::Face[:help, '0.0.1'] do
103
103
  end
104
104
 
105
105
  it "returns an 'unavailable' summary if the 'agent' application fails to generate help" do
106
- Puppet::Application['agent'].class.any_instance.stubs(:help).raises(ArgumentError, "whoops")
106
+ Puppet::Application['agent'].class.any_instance.stubs(:summary).raises(ArgumentError, "whoops")
107
107
 
108
108
  expect(subject).to match(/agent\s+! Subcommand unavailable due to error\. Check error logs\./)
109
109
  end
110
110
 
111
111
  it "returns an 'unavailable' summary if the legacy application raises a LoadError" do
112
- Puppet::Application['agent'].class.any_instance.stubs(:help).raises(LoadError, "cannot load such file -- yard")
112
+ Puppet::Application['agent'].class.any_instance.stubs(:summary).raises(LoadError, "cannot load such file -- yard")
113
113
 
114
114
  expect(subject).to match(/agent\s+! Subcommand unavailable due to error\. Check error logs\./)
115
115
  end
@@ -83,14 +83,15 @@ describe Puppet::FileServing::Configuration do
83
83
  expect(config.mounted?("one")).to be_truthy
84
84
  end
85
85
 
86
- it "should add modules and plugins mounts even if the file does not exist" do
86
+ it "should add modules, plugins, and tasks mounts even if the file does not exist" do
87
87
  Puppet::FileSystem.expects(:exist?).returns false # the file doesn't exist
88
88
  config = Puppet::FileServing::Configuration.configuration
89
89
  expect(config.mounted?("modules")).to be_truthy
90
90
  expect(config.mounted?("plugins")).to be_truthy
91
+ expect(config.mounted?("tasks")).to be_truthy
91
92
  end
92
93
 
93
- it "should allow all access to modules and plugins if no fileserver.conf exists" do
94
+ it "should allow all access to modules, plugins, and tasks if no fileserver.conf exists" do
94
95
  Puppet::FileSystem.expects(:exist?).returns false # the file doesn't exist
95
96
  modules = stub 'modules', :empty? => true
96
97
  Puppet::FileServing::Mount::Modules.stubs(:new).returns(modules)
@@ -100,10 +101,14 @@ describe Puppet::FileServing::Configuration do
100
101
  Puppet::FileServing::Mount::Plugins.stubs(:new).returns(plugins)
101
102
  plugins.expects(:allow).with('*')
102
103
 
104
+ tasks = stub 'tasks', :empty? => true
105
+ Puppet::FileServing::Mount::Tasks.stubs(:new).returns(tasks)
106
+ tasks.expects(:allow).with('*')
107
+
103
108
  Puppet::FileServing::Configuration.configuration
104
109
  end
105
110
 
106
- it "should not allow access from all to modules and plugins if the fileserver.conf provided some rules" do
111
+ it "should not allow access from all to modules, plugins, and tasks if the fileserver.conf provided some rules" do
107
112
  Puppet::FileSystem.expects(:exist?).returns false # the file doesn't exist
108
113
 
109
114
  modules = stub 'modules', :empty? => false
@@ -114,15 +119,20 @@ describe Puppet::FileServing::Configuration do
114
119
  Puppet::FileServing::Mount::Plugins.stubs(:new).returns(plugins)
115
120
  plugins.expects(:allow).with('*').never
116
121
 
122
+ tasks = stub 'tasks', :empty? => false
123
+ Puppet::FileServing::Mount::Tasks.stubs(:new).returns(tasks)
124
+ tasks.expects(:allow).with('*').never
125
+
117
126
  Puppet::FileServing::Configuration.configuration
118
127
  end
119
128
 
120
- it "should add modules and plugins mounts even if they are not returned by the parser" do
129
+ it "should add modules, plugins, and tasks mounts even if they are not returned by the parser" do
121
130
  @parser.expects(:parse).returns("one" => mock("mount"))
122
131
  Puppet::FileSystem.expects(:exist?).returns true # the file doesn't exist
123
132
  config = Puppet::FileServing::Configuration.configuration
124
133
  expect(config.mounted?("modules")).to be_truthy
125
134
  expect(config.mounted?("plugins")).to be_truthy
135
+ expect(config.mounted?("tasks")).to be_truthy
126
136
  end
127
137
  end
128
138
 
@@ -41,7 +41,7 @@ describe Puppet::FileServing::Mount::Modules do
41
41
 
42
42
  describe "when searching for files" do
43
43
  it "should fail if no module is specified" do
44
- expect { @mount.find("", @request) }.to raise_error(/No module specified/)
44
+ expect { @mount.search("", @request) }.to raise_error(/No module specified/)
45
45
  end
46
46
 
47
47
  it "should use the node's environment to search the module" do
@@ -0,0 +1,72 @@
1
+ #! /usr/bin/env ruby
2
+ require 'spec_helper'
3
+ require 'puppet/file_serving/mount/tasks'
4
+
5
+ describe Puppet::FileServing::Mount::Tasks do
6
+ before do
7
+ @mount = Puppet::FileServing::Mount::Tasks.new("tasks")
8
+
9
+ @environment = stub 'environment', :module => nil
10
+ @request = stub 'request', :environment => @environment
11
+ end
12
+
13
+ describe "when finding task files" do
14
+ it "should fail if no task is specified" do
15
+ expect { @mount.find("", @request) }.to raise_error(/No task specified/)
16
+ end
17
+
18
+ it "should use the request's environment to find the module" do
19
+ mod_name = 'foo'
20
+ @environment.expects(:module).with(mod_name)
21
+
22
+ @mount.find(mod_name, @request)
23
+ end
24
+
25
+ it "should use the first segment of the request's path as the module name" do
26
+ @environment.expects(:module).with("foo")
27
+ @mount.find("foo/bartask", @request)
28
+ end
29
+
30
+ it "should return nil if the module in the path doesn't exist" do
31
+ @environment.expects(:module).with("foo").returns(nil)
32
+ expect(@mount.find("foo/bartask", @request)).to be_nil
33
+ end
34
+
35
+ it "should return the file path from the module" do
36
+ mod = mock('module')
37
+ mod.expects(:task_file).with("bartask").returns("mocked")
38
+ @environment.expects(:module).with("foo").returns(mod)
39
+ expect(@mount.find("foo/bartask", @request)).to eq("mocked")
40
+ end
41
+ end
42
+
43
+ describe "when searching for task files" do
44
+ it "should fail if no module is specified" do
45
+ expect { @mount.search("", @request) }.to raise_error(/No task specified/)
46
+ end
47
+
48
+ it "should use the request's environment to find the module" do
49
+ mod_name = 'foo'
50
+ @environment.expects(:module).with(mod_name)
51
+
52
+ @mount.search(mod_name, @request)
53
+ end
54
+
55
+ it "should use the first segment of the request's path as the module name" do
56
+ @environment.expects(:module).with("foo")
57
+ @mount.search("foo/bartask", @request)
58
+ end
59
+
60
+ it "should return nil if the module in the path doesn't exist" do
61
+ @environment.expects(:module).with("foo").returns(nil)
62
+ expect(@mount.search("foo/bartask", @request)).to be_nil
63
+ end
64
+
65
+ it "should return the file path from the module" do
66
+ mod = mock('module')
67
+ mod.expects(:task_file).with("bartask").returns("mocked")
68
+ @environment.expects(:module).with("foo").returns(mod)
69
+ expect(@mount.search("foo/bartask", @request)).to eq(["mocked"])
70
+ end
71
+ end
72
+ end
@@ -17,6 +17,11 @@ describe "the epp function" do
17
17
  expect(eval_template("<%= $kryptonite == undef %>")).to eq("true")
18
18
  end
19
19
 
20
+ it "gets error accessing a variable that is malformed" do
21
+ expect { eval_template("<%= $kryptonite::USER %>")}.to raise_error(
22
+ /Illegal variable name, The given name 'kryptonite::USER' does not conform to the naming rule/)
23
+ end
24
+
20
25
  it "get nil accessing a variable that is undef" do
21
26
  scope['undef_var'] = nil
22
27
  expect(eval_template("<%= $undef_var == undef %>")).to eq("true")
@@ -30,7 +30,7 @@ describe 'the regsubst function' do
30
30
  end
31
31
 
32
32
  it 'should raise an Error if given a bad flag' do
33
- expect { regsubst('foo', 'bar', 'gazonk', 'X') }.to raise_error(/parameter 'flags' expects a match for Pattern\[\/\^\[GEIM\]\*\$\/\], got 'X'/)
33
+ expect { regsubst('foo', 'bar', 'gazonk', 'X') }.to raise_error(/parameter 'flags' expects an undef value or a match for Pattern\[\/\^\[GEIM\]\*\$\/\], got 'X'/)
34
34
  end
35
35
 
36
36
  it 'should raise an Error if given a bad encoding' do
@@ -0,0 +1,57 @@
1
+ require 'puppet/gettext/config'
2
+ require 'spec_helper'
3
+
4
+ describe Puppet::GettextConfig do
5
+ require 'puppet_spec/files'
6
+ include PuppetSpec::Files
7
+
8
+ let(:local_path) do
9
+ local_path ||= Puppet::GettextConfig::LOCAL_PATH
10
+ end
11
+
12
+ let(:windows_path) do
13
+ windows_path ||= Puppet::GettextConfig::WINDOWS_PATH
14
+ end
15
+
16
+ let(:posix_path) do
17
+ windows_path ||= Puppet::GettextConfig::POSIX_PATH
18
+ end
19
+
20
+ describe 'translation mode selection' do
21
+ it 'should select PO mode when given a local config path' do
22
+ expect(Puppet::GettextConfig.translation_mode(local_path)).to eq(:po)
23
+ end
24
+
25
+ it 'should select PO mode when given a non-package config path' do
26
+ expect(Puppet::GettextConfig.translation_mode('../fake/path')).to eq(:po)
27
+ end
28
+
29
+ it 'should select MO mode when given a Windows package config path' do
30
+ expect(Puppet::GettextConfig.translation_mode(windows_path)).to eq(:mo)
31
+ end
32
+
33
+ it 'should select MO mode when given a POSIX package config path' do
34
+ expect(Puppet::GettextConfig.translation_mode(posix_path)).to eq(:mo)
35
+ end
36
+ end
37
+
38
+ describe 'initialization' do
39
+ context 'when given a nil config path' do
40
+ it 'should return false' do
41
+ expect(Puppet::GettextConfig.initialize(nil, :po)).to be false
42
+ end
43
+ end
44
+
45
+ context 'when given a valid config file location' do
46
+ it 'should return true' do
47
+ expect(Puppet::GettextConfig.initialize(local_path, :po)).to be true
48
+ end
49
+ end
50
+
51
+ context 'when given a bad file format' do
52
+ it 'should raise an exception' do
53
+ expect { Puppet::GettextConfig.initialize(local_path, :bad_format) }.to raise_error(Puppet::Error)
54
+ end
55
+ end
56
+ end
57
+ end