puppetmodule-stdlib 4.0.1

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.
Files changed (200) hide show
  1. data/CHANGELOG +253 -0
  2. data/CONTRIBUTING.md +65 -0
  3. data/Gemfile +33 -0
  4. data/LICENSE +19 -0
  5. data/Modulefile +11 -0
  6. data/README.markdown +1173 -0
  7. data/README_DEVELOPER.markdown +35 -0
  8. data/RELEASE_PROCESS.markdown +24 -0
  9. data/Rakefile +2 -0
  10. data/lib/facter/pe_version.rb +53 -0
  11. data/lib/facter/puppet_vardir.rb +26 -0
  12. data/lib/facter/root_home.rb +19 -0
  13. data/lib/facter/util/puppet_settings.rb +21 -0
  14. data/lib/puppet/parser/functions/abs.rb +36 -0
  15. data/lib/puppet/parser/functions/any2array.rb +33 -0
  16. data/lib/puppet/parser/functions/bool2num.rb +49 -0
  17. data/lib/puppet/parser/functions/capitalize.rb +34 -0
  18. data/lib/puppet/parser/functions/chomp.rb +35 -0
  19. data/lib/puppet/parser/functions/chop.rb +37 -0
  20. data/lib/puppet/parser/functions/concat.rb +37 -0
  21. data/lib/puppet/parser/functions/count.rb +22 -0
  22. data/lib/puppet/parser/functions/defined_with_params.rb +35 -0
  23. data/lib/puppet/parser/functions/delete.rb +46 -0
  24. data/lib/puppet/parser/functions/delete_at.rb +49 -0
  25. data/lib/puppet/parser/functions/downcase.rb +33 -0
  26. data/lib/puppet/parser/functions/empty.rb +28 -0
  27. data/lib/puppet/parser/functions/ensure_packages.rb +24 -0
  28. data/lib/puppet/parser/functions/ensure_resource.rb +35 -0
  29. data/lib/puppet/parser/functions/flatten.rb +33 -0
  30. data/lib/puppet/parser/functions/floor.rb +20 -0
  31. data/lib/puppet/parser/functions/fqdn_rotate.rb +46 -0
  32. data/lib/puppet/parser/functions/get_module_path.rb +17 -0
  33. data/lib/puppet/parser/functions/getparam.rb +35 -0
  34. data/lib/puppet/parser/functions/getvar.rb +26 -0
  35. data/lib/puppet/parser/functions/grep.rb +33 -0
  36. data/lib/puppet/parser/functions/has_interface_with.rb +52 -0
  37. data/lib/puppet/parser/functions/has_ip_address.rb +25 -0
  38. data/lib/puppet/parser/functions/has_ip_network.rb +25 -0
  39. data/lib/puppet/parser/functions/has_key.rb +28 -0
  40. data/lib/puppet/parser/functions/hash.rb +41 -0
  41. data/lib/puppet/parser/functions/is_array.rb +22 -0
  42. data/lib/puppet/parser/functions/is_domain_name.rb +47 -0
  43. data/lib/puppet/parser/functions/is_float.rb +27 -0
  44. data/lib/puppet/parser/functions/is_function_available.rb +23 -0
  45. data/lib/puppet/parser/functions/is_hash.rb +22 -0
  46. data/lib/puppet/parser/functions/is_integer.rb +27 -0
  47. data/lib/puppet/parser/functions/is_ip_address.rb +32 -0
  48. data/lib/puppet/parser/functions/is_mac_address.rb +27 -0
  49. data/lib/puppet/parser/functions/is_numeric.rb +27 -0
  50. data/lib/puppet/parser/functions/is_string.rb +26 -0
  51. data/lib/puppet/parser/functions/join.rb +41 -0
  52. data/lib/puppet/parser/functions/join_keys_to_values.rb +47 -0
  53. data/lib/puppet/parser/functions/keys.rb +26 -0
  54. data/lib/puppet/parser/functions/loadyaml.rb +20 -0
  55. data/lib/puppet/parser/functions/lstrip.rb +33 -0
  56. data/lib/puppet/parser/functions/max.rb +21 -0
  57. data/lib/puppet/parser/functions/member.rb +44 -0
  58. data/lib/puppet/parser/functions/merge.rb +33 -0
  59. data/lib/puppet/parser/functions/min.rb +21 -0
  60. data/lib/puppet/parser/functions/num2bool.rb +43 -0
  61. data/lib/puppet/parser/functions/parsejson.rb +24 -0
  62. data/lib/puppet/parser/functions/parseyaml.rb +24 -0
  63. data/lib/puppet/parser/functions/pick.rb +29 -0
  64. data/lib/puppet/parser/functions/prefix.rb +45 -0
  65. data/lib/puppet/parser/functions/range.rb +80 -0
  66. data/lib/puppet/parser/functions/reject.rb +31 -0
  67. data/lib/puppet/parser/functions/reverse.rb +28 -0
  68. data/lib/puppet/parser/functions/rstrip.rb +32 -0
  69. data/lib/puppet/parser/functions/shuffle.rb +46 -0
  70. data/lib/puppet/parser/functions/size.rb +48 -0
  71. data/lib/puppet/parser/functions/sort.rb +27 -0
  72. data/lib/puppet/parser/functions/squeeze.rb +36 -0
  73. data/lib/puppet/parser/functions/str2bool.rb +46 -0
  74. data/lib/puppet/parser/functions/str2saltedsha512.rb +32 -0
  75. data/lib/puppet/parser/functions/strftime.rb +107 -0
  76. data/lib/puppet/parser/functions/strip.rb +39 -0
  77. data/lib/puppet/parser/functions/suffix.rb +45 -0
  78. data/lib/puppet/parser/functions/swapcase.rb +39 -0
  79. data/lib/puppet/parser/functions/time.rb +49 -0
  80. data/lib/puppet/parser/functions/to_bytes.rb +28 -0
  81. data/lib/puppet/parser/functions/type.rb +50 -0
  82. data/lib/puppet/parser/functions/unique.rb +51 -0
  83. data/lib/puppet/parser/functions/upcase.rb +41 -0
  84. data/lib/puppet/parser/functions/uriescape.rb +36 -0
  85. data/lib/puppet/parser/functions/validate_absolute_path.rb +56 -0
  86. data/lib/puppet/parser/functions/validate_array.rb +33 -0
  87. data/lib/puppet/parser/functions/validate_augeas.rb +81 -0
  88. data/lib/puppet/parser/functions/validate_bool.rb +34 -0
  89. data/lib/puppet/parser/functions/validate_cmd.rb +47 -0
  90. data/lib/puppet/parser/functions/validate_hash.rb +33 -0
  91. data/lib/puppet/parser/functions/validate_re.rb +40 -0
  92. data/lib/puppet/parser/functions/validate_slength.rb +52 -0
  93. data/lib/puppet/parser/functions/validate_string.rb +33 -0
  94. data/lib/puppet/parser/functions/values.rb +39 -0
  95. data/lib/puppet/parser/functions/values_at.rb +98 -0
  96. data/lib/puppet/parser/functions/zip.rb +65 -0
  97. data/lib/puppet/provider/file_line/ruby.rb +59 -0
  98. data/lib/puppet/type/anchor.rb +41 -0
  99. data/lib/puppet/type/file_line.rb +70 -0
  100. data/manifests/init.pp +20 -0
  101. data/manifests/stages.pp +43 -0
  102. data/spec/functions/defined_with_params_spec.rb +37 -0
  103. data/spec/functions/ensure_packages_spec.rb +42 -0
  104. data/spec/functions/ensure_resource_spec.rb +40 -0
  105. data/spec/functions/getparam_spec.rb +34 -0
  106. data/spec/monkey_patches/alias_should_to_must.rb +8 -0
  107. data/spec/monkey_patches/publicize_methods.rb +10 -0
  108. data/spec/spec.opts +6 -0
  109. data/spec/spec_helper.rb +28 -0
  110. data/spec/unit/facter/pe_version_spec.rb +76 -0
  111. data/spec/unit/facter/root_home_spec.rb +40 -0
  112. data/spec/unit/facter/util/puppet_settings_spec.rb +35 -0
  113. data/spec/unit/puppet/parser/functions/abs_spec.rb +25 -0
  114. data/spec/unit/puppet/parser/functions/any2array_spec.rb +55 -0
  115. data/spec/unit/puppet/parser/functions/bool2num_spec.rb +24 -0
  116. data/spec/unit/puppet/parser/functions/capitalize_spec.rb +19 -0
  117. data/spec/unit/puppet/parser/functions/chomp_spec.rb +19 -0
  118. data/spec/unit/puppet/parser/functions/chop_spec.rb +19 -0
  119. data/spec/unit/puppet/parser/functions/concat_spec.rb +15 -0
  120. data/spec/unit/puppet/parser/functions/count_spec.rb +31 -0
  121. data/spec/unit/puppet/parser/functions/delete_at_spec.rb +19 -0
  122. data/spec/unit/puppet/parser/functions/delete_spec.rb +38 -0
  123. data/spec/unit/puppet/parser/functions/downcase_spec.rb +24 -0
  124. data/spec/unit/puppet/parser/functions/empty_spec.rb +23 -0
  125. data/spec/unit/puppet/parser/functions/flatten_spec.rb +27 -0
  126. data/spec/unit/puppet/parser/functions/floor_spec.rb +39 -0
  127. data/spec/unit/puppet/parser/functions/fqdn_rotate_spec.rb +33 -0
  128. data/spec/unit/puppet/parser/functions/get_module_path_spec.rb +46 -0
  129. data/spec/unit/puppet/parser/functions/getvar_spec.rb +37 -0
  130. data/spec/unit/puppet/parser/functions/grep_spec.rb +19 -0
  131. data/spec/unit/puppet/parser/functions/has_interface_with_spec.rb +64 -0
  132. data/spec/unit/puppet/parser/functions/has_ip_address_spec.rb +39 -0
  133. data/spec/unit/puppet/parser/functions/has_ip_network_spec.rb +36 -0
  134. data/spec/unit/puppet/parser/functions/has_key_spec.rb +42 -0
  135. data/spec/unit/puppet/parser/functions/hash_spec.rb +19 -0
  136. data/spec/unit/puppet/parser/functions/is_array_spec.rb +29 -0
  137. data/spec/unit/puppet/parser/functions/is_domain_name_spec.rb +64 -0
  138. data/spec/unit/puppet/parser/functions/is_float_spec.rb +33 -0
  139. data/spec/unit/puppet/parser/functions/is_function_available.rb +31 -0
  140. data/spec/unit/puppet/parser/functions/is_hash_spec.rb +29 -0
  141. data/spec/unit/puppet/parser/functions/is_integer_spec.rb +34 -0
  142. data/spec/unit/puppet/parser/functions/is_ip_address_spec.rb +39 -0
  143. data/spec/unit/puppet/parser/functions/is_mac_address_spec.rb +29 -0
  144. data/spec/unit/puppet/parser/functions/is_numeric_spec.rb +39 -0
  145. data/spec/unit/puppet/parser/functions/is_string_spec.rb +34 -0
  146. data/spec/unit/puppet/parser/functions/join_keys_to_values_spec.rb +40 -0
  147. data/spec/unit/puppet/parser/functions/join_spec.rb +19 -0
  148. data/spec/unit/puppet/parser/functions/keys_spec.rb +21 -0
  149. data/spec/unit/puppet/parser/functions/lstrip_spec.rb +19 -0
  150. data/spec/unit/puppet/parser/functions/max_spec.rb +27 -0
  151. data/spec/unit/puppet/parser/functions/member_spec.rb +24 -0
  152. data/spec/unit/puppet/parser/functions/merge_spec.rb +47 -0
  153. data/spec/unit/puppet/parser/functions/min_spec.rb +27 -0
  154. data/spec/unit/puppet/parser/functions/num2bool_spec.rb +67 -0
  155. data/spec/unit/puppet/parser/functions/parsejson_spec.rb +22 -0
  156. data/spec/unit/puppet/parser/functions/parseyaml_spec.rb +24 -0
  157. data/spec/unit/puppet/parser/functions/pick_spec.rb +34 -0
  158. data/spec/unit/puppet/parser/functions/prefix_spec.rb +19 -0
  159. data/spec/unit/puppet/parser/functions/range_spec.rb +34 -0
  160. data/spec/unit/puppet/parser/functions/reject_spec.rb +20 -0
  161. data/spec/unit/puppet/parser/functions/reverse_spec.rb +19 -0
  162. data/spec/unit/puppet/parser/functions/rstrip_spec.rb +24 -0
  163. data/spec/unit/puppet/parser/functions/shuffle_spec.rb +24 -0
  164. data/spec/unit/puppet/parser/functions/size_spec.rb +24 -0
  165. data/spec/unit/puppet/parser/functions/sort_spec.rb +24 -0
  166. data/spec/unit/puppet/parser/functions/squeeze_spec.rb +24 -0
  167. data/spec/unit/puppet/parser/functions/str2bool_spec.rb +31 -0
  168. data/spec/unit/puppet/parser/functions/str2saltedsha512_spec.rb +45 -0
  169. data/spec/unit/puppet/parser/functions/strftime_spec.rb +29 -0
  170. data/spec/unit/puppet/parser/functions/strip_spec.rb +18 -0
  171. data/spec/unit/puppet/parser/functions/suffix_spec.rb +19 -0
  172. data/spec/unit/puppet/parser/functions/swapcase_spec.rb +19 -0
  173. data/spec/unit/puppet/parser/functions/time_spec.rb +29 -0
  174. data/spec/unit/puppet/parser/functions/to_bytes_spec.rb +58 -0
  175. data/spec/unit/puppet/parser/functions/type_spec.rb +43 -0
  176. data/spec/unit/puppet/parser/functions/unique_spec.rb +24 -0
  177. data/spec/unit/puppet/parser/functions/upcase_spec.rb +24 -0
  178. data/spec/unit/puppet/parser/functions/uriescape_spec.rb +24 -0
  179. data/spec/unit/puppet/parser/functions/validate_absolute_path_spec.rb +83 -0
  180. data/spec/unit/puppet/parser/functions/validate_array_spec.rb +38 -0
  181. data/spec/unit/puppet/parser/functions/validate_augeas_spec.rb +102 -0
  182. data/spec/unit/puppet/parser/functions/validate_bool_spec.rb +51 -0
  183. data/spec/unit/puppet/parser/functions/validate_cmd_spec.rb +81 -0
  184. data/spec/unit/puppet/parser/functions/validate_hash_spec.rb +43 -0
  185. data/spec/unit/puppet/parser/functions/validate_re_spec.rb +76 -0
  186. data/spec/unit/puppet/parser/functions/validate_slength_spec.rb +48 -0
  187. data/spec/unit/puppet/parser/functions/validate_string_spec.rb +60 -0
  188. data/spec/unit/puppet/parser/functions/values_at_spec.rb +38 -0
  189. data/spec/unit/puppet/parser/functions/values_spec.rb +31 -0
  190. data/spec/unit/puppet/parser/functions/zip_spec.rb +15 -0
  191. data/spec/unit/puppet/provider/file_line/ruby_spec.rb +127 -0
  192. data/spec/unit/puppet/type/anchor_spec.rb +11 -0
  193. data/spec/unit/puppet/type/file_line_spec.rb +69 -0
  194. data/spec/watchr.rb +86 -0
  195. data/tests/file_line.pp +9 -0
  196. data/tests/has_interface_with.pp +10 -0
  197. data/tests/has_ip_address.pp +3 -0
  198. data/tests/has_ip_network.pp +4 -0
  199. data/tests/init.pp +1 -0
  200. metadata +252 -0
@@ -0,0 +1,24 @@
1
+ #! /usr/bin/env ruby -S rspec
2
+ require 'spec_helper'
3
+
4
+ describe "the bool2num function" do
5
+ let(:scope) { PuppetlabsSpec::PuppetInternals.scope }
6
+
7
+ it "should exist" do
8
+ Puppet::Parser::Functions.function("bool2num").should == "function_bool2num"
9
+ end
10
+
11
+ it "should raise a ParseError if there is less than 1 arguments" do
12
+ lambda { scope.function_bool2num([]) }.should( raise_error(Puppet::ParseError))
13
+ end
14
+
15
+ it "should convert true to 1" do
16
+ result = scope.function_bool2num([true])
17
+ result.should(eq(1))
18
+ end
19
+
20
+ it "should convert false to 0" do
21
+ result = scope.function_bool2num([false])
22
+ result.should(eq(0))
23
+ end
24
+ end
@@ -0,0 +1,19 @@
1
+ #! /usr/bin/env ruby -S rspec
2
+ require 'spec_helper'
3
+
4
+ describe "the capitalize function" do
5
+ let(:scope) { PuppetlabsSpec::PuppetInternals.scope }
6
+
7
+ it "should exist" do
8
+ Puppet::Parser::Functions.function("capitalize").should == "function_capitalize"
9
+ end
10
+
11
+ it "should raise a ParseError if there is less than 1 arguments" do
12
+ lambda { scope.function_capitalize([]) }.should( raise_error(Puppet::ParseError))
13
+ end
14
+
15
+ it "should capitalize the beginning of a string" do
16
+ result = scope.function_capitalize(["abc"])
17
+ result.should(eq("Abc"))
18
+ end
19
+ end
@@ -0,0 +1,19 @@
1
+ #! /usr/bin/env ruby -S rspec
2
+ require 'spec_helper'
3
+
4
+ describe "the chomp function" do
5
+ let(:scope) { PuppetlabsSpec::PuppetInternals.scope }
6
+
7
+ it "should exist" do
8
+ Puppet::Parser::Functions.function("chomp").should == "function_chomp"
9
+ end
10
+
11
+ it "should raise a ParseError if there is less than 1 arguments" do
12
+ lambda { scope.function_chomp([]) }.should( raise_error(Puppet::ParseError))
13
+ end
14
+
15
+ it "should chomp the end of a string" do
16
+ result = scope.function_chomp(["abc\n"])
17
+ result.should(eq("abc"))
18
+ end
19
+ end
@@ -0,0 +1,19 @@
1
+ #! /usr/bin/env ruby -S rspec
2
+ require 'spec_helper'
3
+
4
+ describe "the chop function" do
5
+ let(:scope) { PuppetlabsSpec::PuppetInternals.scope }
6
+
7
+ it "should exist" do
8
+ Puppet::Parser::Functions.function("chop").should == "function_chop"
9
+ end
10
+
11
+ it "should raise a ParseError if there is less than 1 arguments" do
12
+ lambda { scope.function_chop([]) }.should( raise_error(Puppet::ParseError))
13
+ end
14
+
15
+ it "should chop the end of a string" do
16
+ result = scope.function_chop(["asdf\n"])
17
+ result.should(eq("asdf"))
18
+ end
19
+ end
@@ -0,0 +1,15 @@
1
+ #! /usr/bin/env ruby -S rspec
2
+ require 'spec_helper'
3
+
4
+ describe "the concat function" do
5
+ let(:scope) { PuppetlabsSpec::PuppetInternals.scope }
6
+
7
+ it "should raise a ParseError if there is less than 1 arguments" do
8
+ lambda { scope.function_concat([]) }.should( raise_error(Puppet::ParseError))
9
+ end
10
+
11
+ it "should be able to concat an array" do
12
+ result = scope.function_concat([['1','2','3'],['4','5','6']])
13
+ result.should(eq(['1','2','3','4','5','6']))
14
+ end
15
+ end
@@ -0,0 +1,31 @@
1
+ #! /usr/bin/env ruby -S rspec
2
+
3
+ require 'spec_helper'
4
+
5
+ describe "the count function" do
6
+ let(:scope) { PuppetlabsSpec::PuppetInternals.scope }
7
+
8
+ it "should exist" do
9
+ Puppet::Parser::Functions.function("count").should == "function_count"
10
+ end
11
+
12
+ it "should raise a ArgumentError if there is more than 2 arguments" do
13
+ lambda { scope.function_count(['foo', 'bar', 'baz']) }.should( raise_error(ArgumentError))
14
+ end
15
+
16
+ it "should be able to count arrays" do
17
+ scope.function_count([["1","2","3"]]).should(eq(3))
18
+ end
19
+
20
+ it "should be able to count matching elements in arrays" do
21
+ scope.function_count([["1", "2", "2"], "2"]).should(eq(2))
22
+ end
23
+
24
+ it "should not count nil or empty strings" do
25
+ scope.function_count([["foo","bar",nil,""]]).should(eq(2))
26
+ end
27
+
28
+ it 'does not count an undefined hash key or an out of bound array index (which are both :undef)' do
29
+ expect(scope.function_count([["foo",:undef,:undef]])).to eq(1)
30
+ end
31
+ end
@@ -0,0 +1,19 @@
1
+ #! /usr/bin/env ruby -S rspec
2
+ require 'spec_helper'
3
+
4
+ describe "the delete_at function" do
5
+ let(:scope) { PuppetlabsSpec::PuppetInternals.scope }
6
+
7
+ it "should exist" do
8
+ Puppet::Parser::Functions.function("delete_at").should == "function_delete_at"
9
+ end
10
+
11
+ it "should raise a ParseError if there is less than 1 arguments" do
12
+ lambda { scope.function_delete_at([]) }.should( raise_error(Puppet::ParseError))
13
+ end
14
+
15
+ it "should delete an item at specified location from an array" do
16
+ result = scope.function_delete_at([['a','b','c'],1])
17
+ result.should(eq(['a','c']))
18
+ end
19
+ end
@@ -0,0 +1,38 @@
1
+ #! /usr/bin/env ruby -S rspec
2
+ require 'spec_helper'
3
+
4
+ describe "the delete function" do
5
+ let(:scope) { PuppetlabsSpec::PuppetInternals.scope }
6
+
7
+ it "should exist" do
8
+ Puppet::Parser::Functions.function("delete").should == "function_delete"
9
+ end
10
+
11
+ it "should raise a ParseError if there are fewer than 2 arguments" do
12
+ lambda { scope.function_delete([]) }.should( raise_error(Puppet::ParseError))
13
+ end
14
+
15
+ it "should raise a ParseError if there are greater than 2 arguments" do
16
+ lambda { scope.function_delete([[], 'foo', 'bar']) }.should( raise_error(Puppet::ParseError))
17
+ end
18
+
19
+ it "should raise a TypeError if a number is passed as the first argument" do
20
+ lambda { scope.function_delete([1, 'bar']) }.should( raise_error(TypeError))
21
+ end
22
+
23
+ it "should delete all instances of an element from an array" do
24
+ result = scope.function_delete([['a','b','c','b'],'b'])
25
+ result.should(eq(['a','c']))
26
+ end
27
+
28
+ it "should delete all instances of a substring from a string" do
29
+ result = scope.function_delete(['foobarbabarz','bar'])
30
+ result.should(eq('foobaz'))
31
+ end
32
+
33
+ it "should delete a key from a hash" do
34
+ result = scope.function_delete([{ 'a' => 1, 'b' => 2, 'c' => 3 },'b'])
35
+ result.should(eq({ 'a' => 1, 'c' => 3 }))
36
+ end
37
+
38
+ end
@@ -0,0 +1,24 @@
1
+ #! /usr/bin/env ruby -S rspec
2
+ require 'spec_helper'
3
+
4
+ describe "the downcase function" do
5
+ let(:scope) { PuppetlabsSpec::PuppetInternals.scope }
6
+
7
+ it "should exist" do
8
+ Puppet::Parser::Functions.function("downcase").should == "function_downcase"
9
+ end
10
+
11
+ it "should raise a ParseError if there is less than 1 arguments" do
12
+ lambda { scope.function_downcase([]) }.should( raise_error(Puppet::ParseError))
13
+ end
14
+
15
+ it "should downcase a string" do
16
+ result = scope.function_downcase(["ASFD"])
17
+ result.should(eq("asfd"))
18
+ end
19
+
20
+ it "should do nothing to a string that is already downcase" do
21
+ result = scope.function_downcase(["asdf asdf"])
22
+ result.should(eq("asdf asdf"))
23
+ end
24
+ end
@@ -0,0 +1,23 @@
1
+ #! /usr/bin/env ruby -S rspec
2
+ require 'spec_helper'
3
+
4
+ describe "the empty function" do
5
+ let(:scope) { PuppetlabsSpec::PuppetInternals.scope }
6
+ it "should exist" do
7
+ Puppet::Parser::Functions.function("empty").should == "function_empty"
8
+ end
9
+
10
+ it "should raise a ParseError if there is less than 1 arguments" do
11
+ lambda { scope.function_empty([]) }.should( raise_error(Puppet::ParseError))
12
+ end
13
+
14
+ it "should return a true for an empty string" do
15
+ result = scope.function_empty([''])
16
+ result.should(eq(true))
17
+ end
18
+
19
+ it "should return a false for a non-empty string" do
20
+ result = scope.function_empty(['asdf'])
21
+ result.should(eq(false))
22
+ end
23
+ end
@@ -0,0 +1,27 @@
1
+ #! /usr/bin/env ruby -S rspec
2
+ require 'spec_helper'
3
+
4
+ describe "the flatten function" do
5
+ let(:scope) { PuppetlabsSpec::PuppetInternals.scope }
6
+ it "should exist" do
7
+ Puppet::Parser::Functions.function("flatten").should == "function_flatten"
8
+ end
9
+
10
+ it "should raise a ParseError if there is less than 1 arguments" do
11
+ lambda { scope.function_flatten([]) }.should( raise_error(Puppet::ParseError))
12
+ end
13
+
14
+ it "should raise a ParseError if there is more than 1 argument" do
15
+ lambda { scope.function_flatten([[], []]) }.should( raise_error(Puppet::ParseError))
16
+ end
17
+
18
+ it "should flatten a complex data structure" do
19
+ result = scope.function_flatten([["a","b",["c",["d","e"],"f","g"]]])
20
+ result.should(eq(["a","b","c","d","e","f","g"]))
21
+ end
22
+
23
+ it "should do nothing to a structure that is already flat" do
24
+ result = scope.function_flatten([["a","b","c","d"]])
25
+ result.should(eq(["a","b","c","d"]))
26
+ end
27
+ end
@@ -0,0 +1,39 @@
1
+ #! /usr/bin/env ruby -S rspec
2
+
3
+ require 'spec_helper'
4
+
5
+ describe "the floor function" do
6
+ let(:scope) { PuppetlabsSpec::PuppetInternals.scope }
7
+
8
+ it "should exist" do
9
+ Puppet::Parser::Functions.function("floor").should == "function_floor"
10
+ end
11
+
12
+ it "should raise a ParseError if there is less than 1 argument" do
13
+ lambda { scope.function_floor([]) }.should( raise_error(Puppet::ParseError, /Wrong number of arguments/))
14
+ end
15
+
16
+ it "should should raise a ParseError if input isn't numeric (eg. String)" do
17
+ lambda { scope.function_floor(["foo"]) }.should( raise_error(Puppet::ParseError, /Wrong argument type/))
18
+ end
19
+
20
+ it "should should raise a ParseError if input isn't numeric (eg. Boolean)" do
21
+ lambda { scope.function_floor([true]) }.should( raise_error(Puppet::ParseError, /Wrong argument type/))
22
+ end
23
+
24
+ it "should return an integer when a numeric type is passed" do
25
+ result = scope.function_floor([12.4])
26
+ result.is_a?(Integer).should(eq(true))
27
+ end
28
+
29
+ it "should return the input when an integer is passed" do
30
+ result = scope.function_floor([7])
31
+ result.should(eq(7))
32
+ end
33
+
34
+ it "should return the largest integer less than or equal to the input" do
35
+ result = scope.function_floor([3.8])
36
+ result.should(eq(3))
37
+ end
38
+ end
39
+
@@ -0,0 +1,33 @@
1
+ #! /usr/bin/env ruby -S rspec
2
+ require 'spec_helper'
3
+
4
+ describe "the fqdn_rotate function" do
5
+ let(:scope) { PuppetlabsSpec::PuppetInternals.scope }
6
+
7
+ it "should exist" do
8
+ Puppet::Parser::Functions.function("fqdn_rotate").should == "function_fqdn_rotate"
9
+ end
10
+
11
+ it "should raise a ParseError if there is less than 1 arguments" do
12
+ lambda { scope.function_fqdn_rotate([]) }.should( raise_error(Puppet::ParseError))
13
+ end
14
+
15
+ it "should rotate a string and the result should be the same size" do
16
+ scope.expects(:lookupvar).with("::fqdn").returns("127.0.0.1")
17
+ result = scope.function_fqdn_rotate(["asdf"])
18
+ result.size.should(eq(4))
19
+ end
20
+
21
+ it "should rotate a string to give the same results for one host" do
22
+ scope.expects(:lookupvar).with("::fqdn").returns("127.0.0.1").twice
23
+ scope.function_fqdn_rotate(["abcdefg"]).should eql(scope.function_fqdn_rotate(["abcdefg"]))
24
+ end
25
+
26
+ it "should rotate a string to give different values on different hosts" do
27
+ scope.expects(:lookupvar).with("::fqdn").returns("127.0.0.1")
28
+ val1 = scope.function_fqdn_rotate(["abcdefghijklmnopqrstuvwxyz01234567890987654321"])
29
+ scope.expects(:lookupvar).with("::fqdn").returns("127.0.0.2")
30
+ val2 = scope.function_fqdn_rotate(["abcdefghijklmnopqrstuvwxyz01234567890987654321"])
31
+ val1.should_not eql(val2)
32
+ end
33
+ end
@@ -0,0 +1,46 @@
1
+ #! /usr/bin/env ruby -S rspec
2
+ require 'spec_helper'
3
+
4
+ describe Puppet::Parser::Functions.function(:get_module_path) do
5
+ Internals = PuppetlabsSpec::PuppetInternals
6
+ class StubModule
7
+ attr_reader :path
8
+ def initialize(path)
9
+ @path = path
10
+ end
11
+ end
12
+
13
+ def scope(environment = "production")
14
+ Internals.scope(:compiler => Internals.compiler(:node => Internals.node(:environment => environment)))
15
+ end
16
+
17
+ it 'should only allow one argument' do
18
+ expect { scope.function_get_module_path([]) }.to raise_error(Puppet::ParseError, /Wrong number of arguments, expects one/)
19
+ expect { scope.function_get_module_path(['1','2','3']) }.to raise_error(Puppet::ParseError, /Wrong number of arguments, expects one/)
20
+ end
21
+ it 'should raise an exception when the module cannot be found' do
22
+ expect { scope.function_get_module_path(['foo']) }.to raise_error(Puppet::ParseError, /Could not find module/)
23
+ end
24
+ describe 'when locating a module' do
25
+ let(:modulepath) { "/tmp/does_not_exist" }
26
+ let(:path_of_module_foo) { StubModule.new("/tmp/does_not_exist/foo") }
27
+
28
+ before(:each) { Puppet[:modulepath] = modulepath }
29
+
30
+ it 'should be able to find module paths from the modulepath setting' do
31
+ Puppet::Module.expects(:find).with('foo', 'production').returns(path_of_module_foo)
32
+ scope.function_get_module_path(['foo']).should == path_of_module_foo.path
33
+ end
34
+ it 'should be able to find module paths when the modulepath is a list' do
35
+ Puppet[:modulepath] = modulepath + ":/tmp"
36
+ Puppet::Module.expects(:find).with('foo', 'production').returns(path_of_module_foo)
37
+ scope.function_get_module_path(['foo']).should == path_of_module_foo.path
38
+ end
39
+ it 'should respect the environment' do
40
+ pending("Disabled on Puppet 2.6.x") if Puppet.version =~ /^2\.6\b/
41
+ Puppet.settings[:environment] = 'danstestenv'
42
+ Puppet::Module.expects(:find).with('foo', 'danstestenv').returns(path_of_module_foo)
43
+ scope('danstestenv').function_get_module_path(['foo']).should == path_of_module_foo.path
44
+ end
45
+ end
46
+ end
@@ -0,0 +1,37 @@
1
+ #! /usr/bin/env ruby -S rspec
2
+ require 'spec_helper'
3
+
4
+ describe Puppet::Parser::Functions.function(:getvar) do
5
+ let(:scope) { PuppetlabsSpec::PuppetInternals.scope }
6
+ describe 'when calling getvar from puppet' do
7
+
8
+ it "should not compile when no arguments are passed" do
9
+ pending("Fails on 2.6.x, see bug #15912") if Puppet.version =~ /^2\.6\./
10
+ Puppet[:code] = '$foo = getvar()'
11
+ expect {
12
+ scope.compiler.compile
13
+ }.to raise_error(Puppet::ParseError, /wrong number of arguments/)
14
+ end
15
+
16
+ it "should not compile when too many arguments are passed" do
17
+ pending("Fails on 2.6.x, see bug #15912") if Puppet.version =~ /^2\.6\./
18
+ Puppet[:code] = '$foo = getvar("foo::bar", "baz")'
19
+ expect {
20
+ scope.compiler.compile
21
+ }.to raise_error(Puppet::ParseError, /wrong number of arguments/)
22
+ end
23
+
24
+ it "should lookup variables in other namespaces" do
25
+ pending("Fails on 2.6.x, see bug #15912") if Puppet.version =~ /^2\.6\./
26
+ Puppet[:code] = <<-'ENDofPUPPETcode'
27
+ class site::data { $foo = 'baz' }
28
+ include site::data
29
+ $foo = getvar("site::data::foo")
30
+ if $foo != 'baz' {
31
+ fail('getvar did not return what we expect')
32
+ }
33
+ ENDofPUPPETcode
34
+ scope.compiler.compile
35
+ end
36
+ end
37
+ end
@@ -0,0 +1,19 @@
1
+ #! /usr/bin/env ruby -S rspec
2
+ require 'spec_helper'
3
+
4
+ describe "the grep function" do
5
+ let(:scope) { PuppetlabsSpec::PuppetInternals.scope }
6
+
7
+ it "should exist" do
8
+ Puppet::Parser::Functions.function("grep").should == "function_grep"
9
+ end
10
+
11
+ it "should raise a ParseError if there is less than 1 arguments" do
12
+ lambda { scope.function_grep([]) }.should( raise_error(Puppet::ParseError))
13
+ end
14
+
15
+ it "should grep contents from an array" do
16
+ result = scope.function_grep([["aaabbb","bbbccc","dddeee"], "bbb"])
17
+ result.should(eq(["aaabbb","bbbccc"]))
18
+ end
19
+ end