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,58 @@
1
+ #! /usr/bin/env ruby -S rspec
2
+
3
+ require 'spec_helper'
4
+
5
+ describe "the to_bytes function" do
6
+ let(:scope) { PuppetlabsSpec::PuppetInternals.scope }
7
+
8
+ it "should exist" do
9
+ Puppet::Parser::Functions.function("to_bytes").should == "function_to_bytes"
10
+ end
11
+
12
+ it "should raise a ParseError if there is less than 1 arguments" do
13
+ lambda { scope.function_to_bytes([]) }.should( raise_error(Puppet::ParseError))
14
+ end
15
+
16
+ it "should convert kB to B" do
17
+ result = scope.function_to_bytes(["4 kB"])
18
+ result.should(eq(4096))
19
+ end
20
+
21
+ it "should work without B in unit" do
22
+ result = scope.function_to_bytes(["4 k"])
23
+ result.should(eq(4096))
24
+ end
25
+
26
+ it "should work without a space before unit" do
27
+ result = scope.function_to_bytes(["4k"])
28
+ result.should(eq(4096))
29
+ end
30
+
31
+ it "should work without a unit" do
32
+ result = scope.function_to_bytes(["5678"])
33
+ result.should(eq(5678))
34
+ end
35
+
36
+ it "should convert fractions" do
37
+ result = scope.function_to_bytes(["1.5 kB"])
38
+ result.should(eq(1536))
39
+ end
40
+
41
+ it "should convert scientific notation" do
42
+ result = scope.function_to_bytes(["1.5e2 B"])
43
+ result.should(eq(150))
44
+ end
45
+
46
+ it "should do nothing with a positive number" do
47
+ result = scope.function_to_bytes([5678])
48
+ result.should(eq(5678))
49
+ end
50
+
51
+ it "should should raise a ParseError if input isn't a number" do
52
+ lambda { scope.function_to_bytes(["foo"]) }.should( raise_error(Puppet::ParseError))
53
+ end
54
+
55
+ it "should should raise a ParseError if prefix is unknown" do
56
+ lambda { scope.function_to_bytes(["5 uB"]) }.should( raise_error(Puppet::ParseError))
57
+ end
58
+ end
@@ -0,0 +1,43 @@
1
+ #! /usr/bin/env ruby -S rspec
2
+ require 'spec_helper'
3
+
4
+ describe "the type function" do
5
+ let(:scope) { PuppetlabsSpec::PuppetInternals.scope }
6
+ it "should exist" do
7
+ Puppet::Parser::Functions.function("type").should == "function_type"
8
+ end
9
+
10
+ it "should raise a ParseError if there is less than 1 arguments" do
11
+ lambda { scope.function_type([]) }.should( raise_error(Puppet::ParseError))
12
+ end
13
+
14
+ it "should return string when given a string" do
15
+ result = scope.function_type(["aaabbbbcccc"])
16
+ result.should(eq('string'))
17
+ end
18
+
19
+ it "should return array when given an array" do
20
+ result = scope.function_type([["aaabbbbcccc","asdf"]])
21
+ result.should(eq('array'))
22
+ end
23
+
24
+ it "should return hash when given a hash" do
25
+ result = scope.function_type([{"a"=>1,"b"=>2}])
26
+ result.should(eq('hash'))
27
+ end
28
+
29
+ it "should return integer when given an integer" do
30
+ result = scope.function_type(["1"])
31
+ result.should(eq('integer'))
32
+ end
33
+
34
+ it "should return float when given a float" do
35
+ result = scope.function_type(["1.34"])
36
+ result.should(eq('float'))
37
+ end
38
+
39
+ it "should return boolean when given a boolean" do
40
+ result = scope.function_type([true])
41
+ result.should(eq('boolean'))
42
+ end
43
+ end
@@ -0,0 +1,24 @@
1
+ #! /usr/bin/env ruby -S rspec
2
+ require 'spec_helper'
3
+
4
+ describe "the unique function" do
5
+ let(:scope) { PuppetlabsSpec::PuppetInternals.scope }
6
+
7
+ it "should exist" do
8
+ Puppet::Parser::Functions.function("unique").should == "function_unique"
9
+ end
10
+
11
+ it "should raise a ParseError if there is less than 1 arguments" do
12
+ lambda { scope.function_unique([]) }.should( raise_error(Puppet::ParseError))
13
+ end
14
+
15
+ it "should remove duplicate elements in a string" do
16
+ result = scope.function_unique(["aabbc"])
17
+ result.should(eq('abc'))
18
+ end
19
+
20
+ it "should remove duplicate elements in an array" do
21
+ result = scope.function_unique([["a","a","b","b","c"]])
22
+ result.should(eq(['a','b','c']))
23
+ end
24
+ end
@@ -0,0 +1,24 @@
1
+ #! /usr/bin/env ruby -S rspec
2
+ require 'spec_helper'
3
+
4
+ describe "the upcase function" do
5
+ let(:scope) { PuppetlabsSpec::PuppetInternals.scope }
6
+
7
+ it "should exist" do
8
+ Puppet::Parser::Functions.function("upcase").should == "function_upcase"
9
+ end
10
+
11
+ it "should raise a ParseError if there is less than 1 arguments" do
12
+ lambda { scope.function_upcase([]) }.should( raise_error(Puppet::ParseError))
13
+ end
14
+
15
+ it "should upcase a string" do
16
+ result = scope.function_upcase(["abc"])
17
+ result.should(eq('ABC'))
18
+ end
19
+
20
+ it "should do nothing if a string is already upcase" do
21
+ result = scope.function_upcase(["ABC"])
22
+ result.should(eq('ABC'))
23
+ end
24
+ end
@@ -0,0 +1,24 @@
1
+ #! /usr/bin/env ruby -S rspec
2
+ require 'spec_helper'
3
+
4
+ describe "the uriescape function" do
5
+ let(:scope) { PuppetlabsSpec::PuppetInternals.scope }
6
+
7
+ it "should exist" do
8
+ Puppet::Parser::Functions.function("uriescape").should == "function_uriescape"
9
+ end
10
+
11
+ it "should raise a ParseError if there is less than 1 arguments" do
12
+ lambda { scope.function_uriescape([]) }.should( raise_error(Puppet::ParseError))
13
+ end
14
+
15
+ it "should uriescape a string" do
16
+ result = scope.function_uriescape([":/?#[]@!$&'()*+,;= "])
17
+ result.should(eq('%3A%2F%3F%23%5B%5D%40%21%24%26%27%28%29%2A%2B%2C%3B%3D%20'))
18
+ end
19
+
20
+ it "should do nothing if a string is already safe" do
21
+ result = scope.function_uriescape(["ABCdef"])
22
+ result.should(eq('ABCdef'))
23
+ end
24
+ end
@@ -0,0 +1,83 @@
1
+ require 'spec_helper'
2
+
3
+ describe Puppet::Parser::Functions.function(:validate_absolute_path) do
4
+ let(:scope) { PuppetlabsSpec::PuppetInternals.scope }
5
+
6
+ # The subject of these examples is the method itself.
7
+ subject do
8
+ # This makes sure the function is loaded within each test
9
+ function_name = Puppet::Parser::Functions.function(:validate_absolute_path)
10
+ scope.method(function_name)
11
+ end
12
+
13
+ describe "Valid Paths" do
14
+ def self.valid_paths
15
+ %w{
16
+ C:/
17
+ C:\\
18
+ C:\\WINDOWS\\System32
19
+ C:/windows/system32
20
+ X:/foo/bar
21
+ X:\\foo\\bar
22
+ /var/tmp
23
+ /var/lib/puppet
24
+ /var/opt/../lib/puppet
25
+ }
26
+ end
27
+
28
+ context "Without Puppet::Util.absolute_path? (e.g. Puppet <= 2.6)" do
29
+ before :each do
30
+ # The intent here is to mock Puppet to behave like Puppet 2.6 does.
31
+ # Puppet 2.6 does not have the absolute_path? method. This is only a
32
+ # convenience test, stdlib should be run with the Puppet 2.6.x in the
33
+ # $LOAD_PATH in addition to 2.7.x and master.
34
+ Puppet::Util.expects(:respond_to?).with(:absolute_path?).returns(false)
35
+ end
36
+ valid_paths.each do |path|
37
+ it "validate_absolute_path(#{path.inspect}) should not fail" do
38
+ expect { subject.call [path] }.not_to raise_error Puppet::ParseError
39
+ end
40
+ end
41
+ end
42
+
43
+ context "Puppet without mocking" do
44
+ valid_paths.each do |path|
45
+ it "validate_absolute_path(#{path.inspect}) should not fail" do
46
+ expect { subject.call [path] }.not_to raise_error Puppet::ParseError
47
+ end
48
+ end
49
+ end
50
+ end
51
+
52
+ describe 'Invalid paths' do
53
+ context 'Garbage inputs' do
54
+ [
55
+ nil,
56
+ [ nil ],
57
+ { 'foo' => 'bar' },
58
+ { },
59
+ '',
60
+ ].each do |path|
61
+ it "validate_absolute_path(#{path.inspect}) should fail" do
62
+ expect { subject.call [path] }.to raise_error Puppet::ParseError
63
+ end
64
+ end
65
+ end
66
+
67
+ context 'Relative paths' do
68
+ %w{
69
+ relative1
70
+ .
71
+ ..
72
+ ./foo
73
+ ../foo
74
+ etc/puppetlabs/puppet
75
+ opt/puppet/bin
76
+ }.each do |path|
77
+ it "validate_absolute_path(#{path.inspect}) should fail" do
78
+ expect { subject.call [path] }.to raise_error Puppet::ParseError
79
+ end
80
+ end
81
+ end
82
+ end
83
+ end
@@ -0,0 +1,38 @@
1
+ #! /usr/bin/env ruby -S rspec
2
+
3
+ require 'spec_helper'
4
+
5
+ describe Puppet::Parser::Functions.function(:validate_array) do
6
+ let(:scope) { PuppetlabsSpec::PuppetInternals.scope }
7
+ describe 'when calling validate_array from puppet' do
8
+
9
+ %w{ true false }.each do |the_string|
10
+ it "should not compile when #{the_string} is a string" do
11
+ Puppet[:code] = "validate_array('#{the_string}')"
12
+ expect { scope.compiler.compile }.to raise_error(Puppet::ParseError, /is not an Array/)
13
+ end
14
+
15
+ it "should not compile when #{the_string} is a bare word" do
16
+ Puppet[:code] = "validate_array(#{the_string})"
17
+ expect { scope.compiler.compile }.to raise_error(Puppet::ParseError, /is not an Array/)
18
+ end
19
+ end
20
+
21
+ it "should compile when multiple array arguments are passed" do
22
+ Puppet[:code] = <<-'ENDofPUPPETcode'
23
+ $foo = [ ]
24
+ $bar = [ 'one', 'two' ]
25
+ validate_array($foo, $bar)
26
+ ENDofPUPPETcode
27
+ scope.compiler.compile
28
+ end
29
+
30
+ it "should not compile when an undef variable is passed" do
31
+ Puppet[:code] = <<-'ENDofPUPPETcode'
32
+ $foo = undef
33
+ validate_array($foo)
34
+ ENDofPUPPETcode
35
+ expect { scope.compiler.compile }.to raise_error(Puppet::ParseError, /is not an Array/)
36
+ end
37
+ end
38
+ end
@@ -0,0 +1,102 @@
1
+ require 'spec_helper'
2
+
3
+ describe Puppet::Parser::Functions.function(:validate_augeas), :if => Puppet.features.augeas? do
4
+ let(:scope) { PuppetlabsSpec::PuppetInternals.scope }
5
+
6
+ # The subject of these examplres is the method itself.
7
+ subject do
8
+ # This makes sure the function is loaded within each test
9
+ function_name = Puppet::Parser::Functions.function(:validate_augeas)
10
+ scope.method(function_name)
11
+ end
12
+
13
+ context 'Using Puppet::Parser::Scope.new' do
14
+
15
+ describe 'Garbage inputs' do
16
+ inputs = [
17
+ [ nil ],
18
+ [ [ nil ] ],
19
+ [ { 'foo' => 'bar' } ],
20
+ [ { } ],
21
+ [ '' ],
22
+ [ "one", "one", "MSG to User", "4th arg" ],
23
+ ]
24
+
25
+ inputs.each do |input|
26
+ it "validate_augeas(#{input.inspect}) should fail" do
27
+ expect { subject.call [input] }.to raise_error Puppet::ParseError
28
+ end
29
+ end
30
+ end
31
+
32
+ describe 'Valid inputs' do
33
+ inputs = [
34
+ [ "root:x:0:0:root:/root:/bin/bash\n", 'Passwd.lns' ],
35
+ [ "proc /proc proc nodev,noexec,nosuid 0 0\n", 'Fstab.lns'],
36
+ ]
37
+
38
+ inputs.each do |input|
39
+ it "validate_augeas(#{input.inspect}) should not fail" do
40
+ expect { subject.call input }.not_to raise_error
41
+ end
42
+ end
43
+ end
44
+
45
+ describe "Valid inputs which should raise an exception without a message" do
46
+ # The intent here is to make sure valid inputs raise exceptions when they
47
+ # don't specify an error message to display. This is the behvior in
48
+ # 2.2.x and prior.
49
+ inputs = [
50
+ [ "root:x:0:0:root\n", 'Passwd.lns' ],
51
+ [ "127.0.1.1\n", 'Hosts.lns' ],
52
+ ]
53
+
54
+ inputs.each do |input|
55
+ it "validate_augeas(#{input.inspect}) should fail" do
56
+ expect { subject.call input }.to raise_error /validate_augeas.*?matched less than it should/
57
+ end
58
+ end
59
+ end
60
+
61
+ describe "Nicer Error Messages" do
62
+ # The intent here is to make sure the function returns the 3rd argument
63
+ # in the exception thrown
64
+ inputs = [
65
+ [ "root:x:0:0:root\n", 'Passwd.lns', [], 'Failed to validate passwd content' ],
66
+ [ "127.0.1.1\n", 'Hosts.lns', [], 'Wrong hosts content' ],
67
+ ]
68
+
69
+ inputs.each do |input|
70
+ it "validate_augeas(#{input.inspect}) should fail" do
71
+ expect { subject.call input }.to raise_error /#{input[2]}/
72
+ end
73
+ end
74
+ end
75
+
76
+ describe "Passing simple unit tests" do
77
+ inputs = [
78
+ [ "root:x:0:0:root:/root:/bin/bash\n", 'Passwd.lns', ['$file/foobar']],
79
+ [ "root:x:0:0:root:/root:/bin/bash\n", 'Passwd.lns', ['$file/root/shell[.="/bin/sh"]', 'foobar']],
80
+ ]
81
+
82
+ inputs.each do |input|
83
+ it "validate_augeas(#{input.inspect}) should fail" do
84
+ expect { subject.call input }.not_to raise_error
85
+ end
86
+ end
87
+ end
88
+
89
+ describe "Failing simple unit tests" do
90
+ inputs = [
91
+ [ "foobar:x:0:0:root:/root:/bin/bash\n", 'Passwd.lns', ['$file/foobar']],
92
+ [ "root:x:0:0:root:/root:/bin/sh\n", 'Passwd.lns', ['$file/root/shell[.="/bin/sh"]', 'foobar']],
93
+ ]
94
+
95
+ inputs.each do |input|
96
+ it "validate_augeas(#{input.inspect}) should fail" do
97
+ expect { subject.call input }.to raise_error /testing path/
98
+ end
99
+ end
100
+ end
101
+ end
102
+ end
@@ -0,0 +1,51 @@
1
+ #! /usr/bin/env/ruby -S rspec
2
+
3
+ require 'spec_helper'
4
+
5
+ describe Puppet::Parser::Functions.function(:validate_bool) do
6
+ let(:scope) { PuppetlabsSpec::PuppetInternals.scope }
7
+ describe 'when calling validate_bool from puppet' do
8
+
9
+ %w{ true false }.each do |the_string|
10
+
11
+ it "should not compile when #{the_string} is a string" do
12
+ Puppet[:code] = "validate_bool('#{the_string}')"
13
+ expect { scope.compiler.compile }.to raise_error(Puppet::ParseError, /is not a boolean/)
14
+ end
15
+
16
+ it "should compile when #{the_string} is a bare word" do
17
+ Puppet[:code] = "validate_bool(#{the_string})"
18
+ scope.compiler.compile
19
+ end
20
+
21
+ end
22
+
23
+ it "should not compile when an arbitrary string is passed" do
24
+ Puppet[:code] = 'validate_bool("jeff and dan are awesome")'
25
+ expect { scope.compiler.compile }.to raise_error(Puppet::ParseError, /is not a boolean/)
26
+ end
27
+
28
+ it "should not compile when no arguments are passed" do
29
+ Puppet[:code] = 'validate_bool()'
30
+ expect { scope.compiler.compile }.to raise_error(Puppet::ParseError, /wrong number of arguments/)
31
+ end
32
+
33
+ it "should compile when multiple boolean arguments are passed" do
34
+ Puppet[:code] = <<-'ENDofPUPPETcode'
35
+ $foo = true
36
+ $bar = false
37
+ validate_bool($foo, $bar, true, false)
38
+ ENDofPUPPETcode
39
+ scope.compiler.compile
40
+ end
41
+
42
+ it "should compile when multiple boolean arguments are passed" do
43
+ Puppet[:code] = <<-'ENDofPUPPETcode'
44
+ $foo = true
45
+ $bar = false
46
+ validate_bool($foo, $bar, true, false, 'jeff')
47
+ ENDofPUPPETcode
48
+ expect { scope.compiler.compile }.to raise_error(Puppet::ParseError, /is not a boolean/)
49
+ end
50
+ end
51
+ end