puppet 4.7.1-universal-darwin → 4.8.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 (276) hide show
  1. data/Gemfile +0 -3
  2. data/MAINTAINERS +76 -0
  3. data/README.md +0 -6
  4. data/Rakefile +2 -2
  5. data/lib/puppet/agent.rb +3 -3
  6. data/lib/puppet/application/apply.rb +1 -1
  7. data/lib/puppet/configurer.rb +2 -2
  8. data/lib/puppet/data_providers.rb +1 -0
  9. data/lib/puppet/data_providers/data_adapter.rb +1 -0
  10. data/lib/puppet/data_providers/data_function_support.rb +1 -0
  11. data/lib/puppet/data_providers/function_env_data_provider.rb +1 -0
  12. data/lib/puppet/data_providers/function_module_data_provider.rb +1 -0
  13. data/lib/puppet/data_providers/hiera_config.rb +1 -0
  14. data/lib/puppet/data_providers/hiera_env_data_provider.rb +1 -0
  15. data/lib/puppet/data_providers/hiera_interpolate.rb +1 -0
  16. data/lib/puppet/data_providers/hiera_module_data_provider.rb +1 -0
  17. data/lib/puppet/data_providers/hiera_support.rb +1 -2
  18. data/lib/puppet/data_providers/json_data_provider_factory.rb +2 -0
  19. data/lib/puppet/data_providers/yaml_data_provider_factory.rb +2 -0
  20. data/lib/puppet/defaults.rb +20 -1
  21. data/lib/puppet/environments.rb +5 -2
  22. data/lib/puppet/face/catalog.rb +1 -1
  23. data/lib/puppet/face/epp.rb +57 -11
  24. data/lib/puppet/face/module/install.rb +6 -6
  25. data/lib/puppet/functions.rb +23 -24
  26. data/lib/puppet/functions/alert.rb +14 -0
  27. data/lib/puppet/functions/binary_file.rb +25 -0
  28. data/lib/puppet/functions/break.rb +22 -0
  29. data/lib/puppet/functions/contain.rb +33 -0
  30. data/lib/puppet/functions/crit.rb +14 -0
  31. data/lib/puppet/functions/debug.rb +14 -0
  32. data/lib/puppet/functions/emerg.rb +14 -0
  33. data/lib/puppet/functions/epp.rb +1 -1
  34. data/lib/puppet/functions/err.rb +14 -0
  35. data/lib/puppet/functions/find_file.rb +31 -0
  36. data/lib/puppet/functions/include.rb +21 -0
  37. data/lib/puppet/functions/info.rb +14 -0
  38. data/lib/puppet/functions/new.rb +1 -1
  39. data/lib/puppet/functions/next.rb +23 -0
  40. data/lib/puppet/functions/notice.rb +14 -0
  41. data/lib/puppet/functions/regsubst.rb +12 -16
  42. data/lib/puppet/functions/require.rb +37 -0
  43. data/lib/puppet/functions/return.rb +22 -0
  44. data/lib/puppet/functions/strftime.rb +35 -0
  45. data/lib/puppet/functions/warning.rb +14 -0
  46. data/lib/puppet/generate/models/type/type.rb +4 -0
  47. data/lib/puppet/generate/templates/type/pcore.erb +2 -1
  48. data/lib/puppet/indirector/face.rb +6 -1
  49. data/lib/puppet/network/http/error.rb +2 -2
  50. data/lib/puppet/network/http/handler.rb +2 -2
  51. data/lib/puppet/node/environment.rb +11 -0
  52. data/lib/puppet/parser/ast.rb +5 -0
  53. data/lib/puppet/parser/ast/pops_bridge.rb +17 -4
  54. data/lib/puppet/parser/compiler.rb +29 -1
  55. data/lib/puppet/parser/functions.rb +6 -0
  56. data/lib/puppet/parser/functions/assert_type.rb +1 -1
  57. data/lib/puppet/parser/functions/binary_file.rb +24 -0
  58. data/lib/puppet/parser/functions/break.rb +39 -0
  59. data/lib/puppet/parser/functions/contain.rb +7 -15
  60. data/lib/puppet/parser/functions/defined.rb +2 -2
  61. data/lib/puppet/parser/functions/dig.rb +1 -1
  62. data/lib/puppet/parser/functions/each.rb +1 -1
  63. data/lib/puppet/parser/functions/epp.rb +2 -2
  64. data/lib/puppet/parser/functions/filter.rb +1 -1
  65. data/lib/puppet/parser/functions/find_file.rb +28 -0
  66. data/lib/puppet/parser/functions/hiera.rb +4 -4
  67. data/lib/puppet/parser/functions/hiera_array.rb +1 -1
  68. data/lib/puppet/parser/functions/hiera_hash.rb +1 -1
  69. data/lib/puppet/parser/functions/hiera_include.rb +1 -1
  70. data/lib/puppet/parser/functions/include.rb +4 -8
  71. data/lib/puppet/parser/functions/inline_epp.rb +1 -1
  72. data/lib/puppet/parser/functions/lest.rb +1 -1
  73. data/lib/puppet/parser/functions/lookup.rb +4 -2
  74. data/lib/puppet/parser/functions/map.rb +1 -1
  75. data/lib/puppet/parser/functions/match.rb +1 -1
  76. data/lib/puppet/parser/functions/new.rb +414 -18
  77. data/lib/puppet/parser/functions/next.rb +38 -0
  78. data/lib/puppet/parser/functions/reduce.rb +1 -1
  79. data/lib/puppet/parser/functions/regsubst.rb +4 -2
  80. data/lib/puppet/parser/functions/require.rb +4 -27
  81. data/lib/puppet/parser/functions/return.rb +71 -0
  82. data/lib/puppet/parser/functions/reverse_each.rb +1 -1
  83. data/lib/puppet/parser/functions/scanf.rb +13 -8
  84. data/lib/puppet/parser/functions/slice.rb +1 -1
  85. data/lib/puppet/parser/functions/split.rb +1 -1
  86. data/lib/puppet/parser/functions/step.rb +1 -1
  87. data/lib/puppet/parser/functions/strftime.rb +185 -0
  88. data/lib/puppet/parser/functions/then.rb +1 -1
  89. data/lib/puppet/parser/functions/type.rb +1 -1
  90. data/lib/puppet/parser/functions/with.rb +3 -3
  91. data/lib/puppet/parser/resource.rb +8 -5
  92. data/lib/puppet/parser/scope.rb +1 -1
  93. data/lib/puppet/plugins/configuration.rb +8 -0
  94. data/lib/puppet/plugins/data_providers.rb +1 -0
  95. data/lib/puppet/plugins/data_providers/data_provider.rb +7 -28
  96. data/lib/puppet/plugins/data_providers/registry.rb +1 -0
  97. data/lib/puppet/pops.rb +4 -0
  98. data/lib/puppet/pops/evaluator/access_operator.rb +36 -5
  99. data/lib/puppet/pops/evaluator/closure.rb +81 -12
  100. data/lib/puppet/pops/evaluator/compare_operator.rb +24 -1
  101. data/lib/puppet/pops/evaluator/evaluator_impl.rb +29 -5
  102. data/lib/puppet/pops/evaluator/json_strict_literal_evaluator.rb +1 -1
  103. data/lib/puppet/pops/evaluator/runtime3_converter.rb +53 -62
  104. data/lib/puppet/pops/evaluator/runtime3_support.rb +15 -6
  105. data/lib/puppet/pops/functions/dispatch.rb +9 -2
  106. data/lib/puppet/pops/functions/dispatcher.rb +3 -1
  107. data/lib/puppet/pops/functions/function.rb +19 -2
  108. data/lib/puppet/pops/issues.rb +9 -0
  109. data/lib/puppet/pops/label_provider.rb +2 -2
  110. data/lib/puppet/pops/loader/loader.rb +17 -0
  111. data/lib/puppet/pops/loader/static_loader.rb +0 -41
  112. data/lib/puppet/pops/lookup.rb +12 -0
  113. data/lib/puppet/pops/lookup/context.rb +86 -0
  114. data/lib/puppet/pops/lookup/explainer.rb +46 -6
  115. data/lib/puppet/pops/lookup/invocation.rb +19 -0
  116. data/lib/puppet/pops/lookup/sub_lookup.rb +1 -1
  117. data/lib/puppet/pops/model/factory.rb +20 -8
  118. data/lib/puppet/pops/model/model_label_provider.rb +3 -0
  119. data/lib/puppet/pops/model/model_meta.rb +2 -0
  120. data/lib/puppet/pops/model/model_tree_dumper.rb +14 -0
  121. data/lib/puppet/pops/parser/egrammar.ra +11 -6
  122. data/lib/puppet/pops/parser/eparser.rb +1112 -1086
  123. data/lib/puppet/pops/parser/heredoc_support.rb +1 -2
  124. data/lib/puppet/pops/pcore.rb +1 -0
  125. data/lib/puppet/pops/puppet_stack.rb +3 -3
  126. data/lib/puppet/pops/resource/param.rb +5 -1
  127. data/lib/puppet/pops/resource/resource_type_impl.rb +8 -4
  128. data/lib/puppet/pops/resource/resource_type_set.pcore +1 -0
  129. data/lib/puppet/pops/serialization/abstract_reader.rb +19 -2
  130. data/lib/puppet/pops/serialization/abstract_writer.rb +16 -3
  131. data/lib/puppet/pops/serialization/deserializer.rb +5 -1
  132. data/lib/puppet/pops/serialization/extension.rb +2 -0
  133. data/lib/puppet/pops/serialization/json.rb +76 -26
  134. data/lib/puppet/pops/serialization/serializer.rb +5 -1
  135. data/lib/puppet/pops/serialization/time_factory.rb +2 -1
  136. data/lib/puppet/pops/time/timespan.rb +718 -0
  137. data/lib/puppet/pops/time/timestamp.rb +148 -0
  138. data/lib/puppet/pops/types/p_binary_type.rb +220 -0
  139. data/lib/puppet/pops/types/p_object_type.rb +12 -6
  140. data/lib/puppet/pops/types/p_sensitive_type.rb +5 -1
  141. data/lib/puppet/pops/types/p_timespan_type.rb +141 -0
  142. data/lib/puppet/pops/types/p_timestamp_type.rb +69 -0
  143. data/lib/puppet/pops/types/string_converter.rb +62 -0
  144. data/lib/puppet/pops/types/type_asserter.rb +1 -1
  145. data/lib/puppet/pops/types/type_calculator.rb +17 -3
  146. data/lib/puppet/pops/types/type_factory.rb +35 -1
  147. data/lib/puppet/pops/types/type_formatter.rb +64 -11
  148. data/lib/puppet/pops/types/type_mismatch_describer.rb +110 -61
  149. data/lib/puppet/pops/types/type_parser.rb +18 -4
  150. data/lib/puppet/pops/types/types.rb +98 -63
  151. data/lib/puppet/pops/validation.rb +9 -1
  152. data/lib/puppet/pops/validation/checker4_0.rb +7 -0
  153. data/lib/puppet/property.rb +1 -1
  154. data/lib/puppet/provider.rb +3 -6
  155. data/lib/puppet/provider/mcx/mcxcontent.rb +1 -1
  156. data/lib/puppet/provider/mount/parsed.rb +18 -4
  157. data/lib/puppet/provider/nameservice/directoryservice.rb +15 -7
  158. data/lib/puppet/provider/package/gem.rb +6 -1
  159. data/lib/puppet/provider/package/pip.rb +0 -1
  160. data/lib/puppet/provider/package/pkg.rb +5 -1
  161. data/lib/puppet/provider/package/pkgng.rb +1 -1
  162. data/lib/puppet/provider/package/yum.rb +10 -0
  163. data/lib/puppet/provider/service/launchd.rb +1 -0
  164. data/lib/puppet/provider/user/directoryservice.rb +6 -6
  165. data/lib/puppet/provider/yumrepo/inifile.rb +1 -1
  166. data/lib/puppet/provider/zpool/zpool.rb +1 -1
  167. data/lib/puppet/resource.rb +54 -12
  168. data/lib/puppet/resource/capability_finder.rb +15 -9
  169. data/lib/puppet/resource/catalog.rb +25 -6
  170. data/lib/puppet/resource/type.rb +3 -1
  171. data/lib/puppet/settings.rb +1 -1
  172. data/lib/puppet/settings/environment_conf.rb +12 -4
  173. data/lib/puppet/syntax_checkers/base64.rb +41 -0
  174. data/lib/puppet/syntax_checkers/json.rb +0 -2
  175. data/lib/puppet/transaction.rb +6 -0
  176. data/lib/puppet/transaction/additional_resource_generator.rb +5 -0
  177. data/lib/puppet/transaction/report.rb +7 -2
  178. data/lib/puppet/type.rb +2 -1
  179. data/lib/puppet/type/file/checksum.rb +1 -0
  180. data/lib/puppet/type/file/content.rb +4 -4
  181. data/lib/puppet/type/mount.rb +44 -0
  182. data/lib/puppet/type/ssh_authorized_key.rb +1 -1
  183. data/lib/puppet/type/tidy.rb +3 -0
  184. data/lib/puppet/type/user.rb +12 -6
  185. data/lib/puppet/util/log.rb +25 -0
  186. data/lib/puppet/util/plist.rb +8 -3
  187. data/lib/puppet/version.rb +1 -1
  188. data/lib/puppet_x.rb +7 -1
  189. data/spec/integration/application/apply_spec.rb +118 -0
  190. data/spec/integration/parser/compiler_spec.rb +28 -0
  191. data/spec/integration/parser/pcore_resource_spec.rb +40 -3
  192. data/spec/integration/provider/mount_spec.rb +2 -1
  193. data/spec/integration/util/windows/principal_spec.rb +2 -2
  194. data/spec/integration/util/windows/registry_spec.rb +4 -4
  195. data/spec/lib/puppet_spec/compiler.rb +5 -1
  196. data/spec/lib/puppet_spec/unindent.rb +5 -0
  197. data/spec/shared_contexts/types_setup.rb +6 -0
  198. data/spec/shared_examples/rhel_package_provider.rb +16 -0
  199. data/spec/spec_helper.rb +1 -0
  200. data/spec/unit/agent_spec.rb +11 -0
  201. data/spec/unit/application/lookup_spec.rb +94 -3
  202. data/spec/unit/capability_spec.rb +22 -0
  203. data/spec/unit/configurer_spec.rb +8 -0
  204. data/spec/unit/face/epp_face_spec.rb +22 -3
  205. data/spec/unit/functions/assert_type_spec.rb +3 -3
  206. data/spec/unit/functions/binary_file_spec.rb +46 -0
  207. data/spec/unit/functions/break_spec.rb +89 -0
  208. data/spec/unit/{parser/functions → functions}/contain_spec.rb +68 -3
  209. data/spec/unit/functions/find_file_spec.rb +69 -0
  210. data/spec/unit/functions/include_spec.rb +175 -0
  211. data/spec/unit/functions/logging_spec.rb +54 -0
  212. data/spec/unit/functions/lookup_spec.rb +3 -3
  213. data/spec/unit/functions/new_spec.rb +105 -5
  214. data/spec/unit/functions/next_spec.rb +93 -0
  215. data/spec/unit/functions/require_spec.rb +83 -0
  216. data/spec/unit/functions/return_spec.rb +105 -0
  217. data/spec/unit/{parser/functions → functions}/shared.rb +14 -11
  218. data/spec/unit/functions/strftime_spec.rb +152 -0
  219. data/spec/unit/functions4_spec.rb +22 -0
  220. data/spec/unit/indirector/face_spec.rb +10 -2
  221. data/spec/unit/network/http/error_spec.rb +1 -2
  222. data/spec/unit/network/http/handler_spec.rb +6 -5
  223. data/spec/unit/parser/functions/hiera_array_spec.rb +1 -1
  224. data/spec/unit/parser/functions/hiera_hash_spec.rb +1 -1
  225. data/spec/unit/parser/functions/hiera_include_spec.rb +1 -1
  226. data/spec/unit/parser/functions/hiera_spec.rb +1 -1
  227. data/spec/unit/parser/functions/lookup_spec.rb +1 -1
  228. data/spec/unit/parser/functions/regsubst_spec.rb +1 -1
  229. data/spec/unit/parser/functions/split_spec.rb +1 -1
  230. data/spec/unit/pops/evaluator/access_ops_spec.rb +81 -1
  231. data/spec/unit/pops/evaluator/arithmetic_ops_spec.rb +170 -0
  232. data/spec/unit/pops/evaluator/evaluating_parser_spec.rb +29 -4
  233. data/spec/unit/pops/evaluator/runtime3_converter_spec.rb +112 -4
  234. data/spec/unit/pops/loaders/dependency_loader_spec.rb +12 -0
  235. data/spec/unit/pops/loaders/static_loader_spec.rb +0 -26
  236. data/spec/unit/pops/lookup/context_spec.rb +149 -0
  237. data/spec/unit/pops/parser/parse_functions_spec.rb +19 -0
  238. data/spec/unit/pops/parser/parse_lambda_spec.rb +19 -0
  239. data/spec/unit/pops/puppet_stack_spec.rb +1 -1
  240. data/spec/unit/pops/resource/resource_type_impl_spec.rb +74 -0
  241. data/spec/unit/pops/serialization/packer_spec.rb +34 -14
  242. data/spec/unit/pops/serialization/serialization_spec.rb +67 -5
  243. data/spec/unit/pops/time/timespan_spec.rb +121 -0
  244. data/spec/unit/pops/types/p_binary_type_spec.rb +243 -0
  245. data/spec/unit/pops/types/p_object_type_spec.rb +7 -7
  246. data/spec/unit/pops/types/p_sensitive_type_spec.rb +1 -1
  247. data/spec/unit/pops/types/p_timespan_type_spec.rb +273 -0
  248. data/spec/unit/pops/types/p_timestamp_type_spec.rb +311 -0
  249. data/spec/unit/pops/types/p_type_set_type_spec.rb +13 -13
  250. data/spec/unit/pops/types/ruby_generator_spec.rb +12 -12
  251. data/spec/unit/pops/types/string_converter_spec.rb +89 -0
  252. data/spec/unit/pops/types/type_asserter_spec.rb +3 -3
  253. data/spec/unit/pops/types/type_calculator_spec.rb +113 -5
  254. data/spec/unit/pops/types/type_formatter_spec.rb +40 -0
  255. data/spec/unit/pops/types/type_mismatch_describer_spec.rb +49 -38
  256. data/spec/unit/pops/types/type_parser_spec.rb +87 -4
  257. data/spec/unit/pops/types/types_spec.rb +1 -1
  258. data/spec/unit/pops/validator/validator_spec.rb +23 -0
  259. data/spec/unit/provider/mount/parsed_spec.rb +47 -29
  260. data/spec/unit/provider/package/pkg_spec.rb +109 -99
  261. data/spec/unit/provider/ssh_authorized_key/parsed_spec.rb +1 -0
  262. data/spec/unit/provider/user/aix_spec.rb +1 -1
  263. data/spec/unit/provider/user/directoryservice_spec.rb +101 -30
  264. data/spec/unit/resource/capability_finder_spec.rb +29 -7
  265. data/spec/unit/resource/catalog_spec.rb +127 -0
  266. data/spec/unit/ssl/certificate_request_spec.rb +1 -1
  267. data/spec/unit/transaction/additional_resource_generator_spec.rb +30 -0
  268. data/spec/unit/transaction/persistence_spec.rb +1 -6
  269. data/spec/unit/transaction/report_spec.rb +23 -0
  270. data/spec/unit/transaction_spec.rb +38 -0
  271. data/spec/unit/type/mount_spec.rb +5 -0
  272. data/spec/unit/util/plist_spec.rb +14 -2
  273. metadata +71 -12
  274. data/spec/integration/parser/functions/require_spec.rb +0 -43
  275. data/spec/unit/parser/functions/include_spec.rb +0 -55
  276. data/spec/unit/parser/functions/require_spec.rb +0 -68
@@ -0,0 +1,19 @@
1
+ require 'spec_helper'
2
+ require 'puppet/pops'
3
+ require_relative 'parser_rspec_helper'
4
+
5
+ describe 'egrammar parsing function definitions' do
6
+ include ParserRspecHelper
7
+
8
+ context 'without return type' do
9
+ it 'function foo() { 1 }' do
10
+ expect(dump(parse('function foo() { 1 }'))).to eq("(function foo (block\n 1\n))")
11
+ end
12
+ end
13
+
14
+ context 'with return type' do
15
+ it 'function foo() >> Integer { 1 }' do
16
+ expect(dump(parse('function foo() >> Integer { 1 }'))).to eq("(function foo (return_type integer) (block\n 1\n))")
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,19 @@
1
+ require 'spec_helper'
2
+ require 'puppet/pops'
3
+ require_relative 'parser_rspec_helper'
4
+
5
+ describe 'egrammar parsing lambda definitions' do
6
+ include ParserRspecHelper
7
+
8
+ context 'without return type' do
9
+ it 'f() |$x| { 1 }' do
10
+ expect(dump(parse('f() |$x| { 1 }'))).to eq("(invoke f (lambda (parameters x) (block\n 1\n)))")
11
+ end
12
+ end
13
+
14
+ context 'with return type' do
15
+ it 'f() |$x| >> Integer { 1 }' do
16
+ expect(dump(parse('f() |$x| >> Integer { 1 }'))).to eq("(invoke f (lambda (parameters x) (return_type integer) (block\n 1\n)))")
17
+ end
18
+ end
19
+ end
@@ -50,7 +50,7 @@ describe 'Puppet::Pops::PuppetStack' do
50
50
  end
51
51
 
52
52
  it 'returns an array from stacktrace with information about each level with oldest frame last' do
53
- expect(StackTraceTest.new.two_levels).to eql([['two_levels.pp', 1237], ['level2.pp', 1240]])
53
+ expect(StackTraceTest.new.two_levels).to eql([['level2.pp', 1240], ['two_levels.pp', 1237]])
54
54
  end
55
55
 
56
56
  it 'accepts file to be nil' do
@@ -1,6 +1,7 @@
1
1
  #! /usr/bin/env ruby
2
2
  require 'spec_helper'
3
3
  require 'puppet/pops'
4
+ require 'puppet_spec/files'
4
5
  require 'puppet_spec/compiler'
5
6
 
6
7
  module Puppet::Pops
@@ -32,6 +33,79 @@ describe "Puppet::Pops::Resource" do
32
33
  expect(rt.valid_parameter?(:loglevel)).to be_truthy
33
34
  end
34
35
  end
36
+
37
+
38
+ context 'when used with capability resource with producers/consumers' do
39
+ include PuppetSpec::Files
40
+
41
+ let!(:env_name) { 'spec' }
42
+ let!(:env_dir) { tmpdir('environments') }
43
+ let!(:populated_env_dir) do
44
+ dir_contained_in(env_dir, env_name => {
45
+ '.resource_types' => {
46
+ 'capability.pp' => <<-PUPPET
47
+ Puppet::Resource::ResourceType3.new(
48
+ 'capability',
49
+ [],
50
+ [Puppet::Resource::Param(Any, 'name', true)],
51
+ { /(.*)/ => ['name'] },
52
+ true,
53
+ true)
54
+ PUPPET
55
+ },
56
+ 'modules' => {
57
+ 'test' => {
58
+ 'lib' => {
59
+ 'puppet' => {
60
+ 'type' => { 'capability.rb' => <<-RUBY
61
+ Puppet::Type.newtype(:capability, :is_capability => true) do
62
+ newparam :name, :namevar => true
63
+ raise Puppet::Error, 'Ruby resource was loaded'
64
+ end
65
+ RUBY
66
+ }
67
+ }
68
+ }
69
+ }
70
+ }
71
+ })
72
+ end
73
+
74
+ let!(:code) { <<-PUPPET }
75
+ define producer() {
76
+ notify { "producer":}
77
+ }
78
+
79
+ define consumer() {
80
+ notify { $title:}
81
+ }
82
+
83
+ Producer produces Capability {}
84
+
85
+ Consumer consumes Capability {}
86
+
87
+ producer {x: export => Capability[cap]}
88
+ consumer {x: consume => Capability[cap]}
89
+ consumer {y: require => Capability[cap]}
90
+ PUPPET
91
+
92
+ let(:environments) { Puppet::Environments::Directories.new(populated_env_dir, []) }
93
+ let(:env) { Puppet::Node::Environment.create(:'spec', [File.join(env_dir, 'spec', 'modules')]) }
94
+ let(:node) { Puppet::Node.new('test', :environment => env) }
95
+ around(:each) do |example|
96
+ Puppet[:app_management] = true
97
+ Puppet[:environment] = env_name
98
+ Puppet.override(:environments => environments, :current_environment => env) do
99
+ example.run
100
+ end
101
+ Puppet::Type.rmtype(:capability)
102
+ Puppet[:app_management] = false
103
+ end
104
+
105
+ it 'does not load the Ruby resource' do
106
+ expect { compile_to_catalog(code, node) }.not_to raise_error
107
+ end
108
+ end
35
109
  end
36
110
  end
37
111
  end
@@ -1,7 +1,8 @@
1
1
  require 'spec_helper'
2
2
  require 'puppet/pops/serialization'
3
3
 
4
- module Puppet::Pops::Serialization
4
+ module Puppet::Pops
5
+ module Serialization
5
6
  [JSON].each do |packer_module|
6
7
  describe "the Puppet::Pops::Serialization when using #{packer_module.name}" do
7
8
  let(:io) { StringIO.new }
@@ -21,7 +22,7 @@ describe "the Puppet::Pops::Serialization when using #{packer_module.name}" do
21
22
  count.nil? ? @deserializer.read : Array.new(count) { @deserializer.read }
22
23
  end
23
24
 
24
- context 'can write and read a Scalar' do
25
+ context 'can write and read a' do
25
26
  it 'String' do
26
27
  val = 'the value'
27
28
  write(val)
@@ -86,11 +87,28 @@ describe "the Puppet::Pops::Serialization when using #{packer_module.name}" do
86
87
  expect(val2).to eql(val)
87
88
  end
88
89
 
89
- it 'Time created by TimeFactory' do
90
- val = TimeFactory.now
90
+ it 'Sensitive' do
91
+ sval = 'the sensitive value'
92
+ val = Types::PSensitiveType::Sensitive.new(sval)
91
93
  write(val)
92
94
  val2 = read
93
- expect(val2).to be_a(Time)
95
+ expect(val2).to be_a(Types::PSensitiveType::Sensitive)
96
+ expect(val2.unwrap).to eql(sval)
97
+ end
98
+
99
+ it 'Timespan' do
100
+ val = Time::Timespan.from_fields(false, 3, 12, 40, 31, 123)
101
+ write(val)
102
+ val2 = read
103
+ expect(val2).to be_a(Time::Timespan)
104
+ expect(val2).to eql(val)
105
+ end
106
+
107
+ it 'Timestamp' do
108
+ val = Time::Timestamp.now
109
+ write(val)
110
+ val2 = read
111
+ expect(val2).to be_a(Time::Timestamp)
94
112
  expect(val2).to eql(val)
95
113
  end
96
114
 
@@ -110,21 +128,22 @@ describe "the Puppet::Pops::Serialization when using #{packer_module.name}" do
110
128
  expect(val2).to eql(val)
111
129
  end
112
130
 
113
- it 'will never fail write and read of Time created by TimeFactory' do
114
- val = Time.now
115
- val = TimeFactory.at(val.tv_sec, val.tv_nsec / 1000 + 0.123)
131
+ it 'Binary' do
132
+ val = Types::PBinaryType::Binary.from_base64('w5ZzdGVuIG1lZCByw7ZzdGVuCg==')
116
133
  write(val)
117
134
  val2 = read
118
- expect(val).to eq(val2)
135
+ expect(val2).to be_a(Types::PBinaryType::Binary)
136
+ expect(val2).to eql(val)
119
137
  end
120
138
 
121
- # Windows doesn't seem ot have fine enough granularity to provoke the problem
122
- it 'will fail on Time not created by TimeFactory' do
123
- val = Time.now
124
- val = Time.at(val.tv_sec, val.tv_nsec / 1000 + 0.123)
139
+ it 'Sensitive with rich data' do
140
+ sval = Time::Timestamp.now
141
+ val = Types::PSensitiveType::Sensitive.new(sval)
125
142
  write(val)
126
143
  val2 = read
127
- expect(val).not_to eq(val2)
144
+ expect(val2).to be_a(Types::PSensitiveType::Sensitive)
145
+ expect(val2.unwrap).to be_a(Time::Timestamp)
146
+ expect(val2.unwrap).to eql(sval)
128
147
  end
129
148
  end
130
149
 
@@ -151,3 +170,4 @@ describe "the Puppet::Pops::Serialization when using #{packer_module.name}" do
151
170
  end
152
171
  end
153
172
  end
173
+ end
@@ -37,7 +37,7 @@ module Serialization
37
37
  parser.parse_string(string, '/home/tester/experiments/manifests/init.pp').current
38
38
  end
39
39
 
40
- context 'can write and read a Scalar' do
40
+ context 'can write and read a' do
41
41
  it 'String' do
42
42
  val = 'the value'
43
43
  write(val)
@@ -94,12 +94,28 @@ module Serialization
94
94
  expect(val2).to eql(val)
95
95
  end
96
96
 
97
- it 'Time created by TimeFactory' do
98
- # It does succeed on rare occasions, so we need to repeat
99
- val = TimeFactory.now
97
+ it 'Sensitive' do
98
+ sval = 'the sensitive value'
99
+ val = Types::PSensitiveType::Sensitive.new(sval)
100
+ write(val)
101
+ val2 = read
102
+ expect(val2).to be_a(Types::PSensitiveType::Sensitive)
103
+ expect(val2.unwrap).to eql(sval)
104
+ end
105
+
106
+ it 'Timespan' do
107
+ val = Time::Timespan.from_fields(false, 3, 12, 40, 31, 123)
100
108
  write(val)
101
109
  val2 = read
102
- expect(val2).to be_a(Time)
110
+ expect(val2).to be_a(Time::Timespan)
111
+ expect(val2).to eql(val)
112
+ end
113
+
114
+ it 'Timestamp' do
115
+ val = Time::Timestamp.now
116
+ write(val)
117
+ val2 = read
118
+ expect(val2).to be_a(Time::Timestamp)
103
119
  expect(val2).to eql(val)
104
120
  end
105
121
 
@@ -120,6 +136,24 @@ module Serialization
120
136
  expect(val2).to be_a(Semantic::VersionRange)
121
137
  expect(val2).to eql(val)
122
138
  end
139
+
140
+ it 'Binary' do
141
+ val = Types::PBinaryType::Binary.from_base64('w5ZzdGVuIG1lZCByw7ZzdGVuCg==')
142
+ write(val)
143
+ val2 = read
144
+ expect(val2).to be_a(Types::PBinaryType::Binary)
145
+ expect(val2).to eql(val)
146
+ end
147
+
148
+ it 'Sensitive with rich data' do
149
+ sval = Time::Timestamp.now
150
+ val = Types::PSensitiveType::Sensitive.new(sval)
151
+ write(val)
152
+ val2 = read
153
+ expect(val2).to be_a(Types::PSensitiveType::Sensitive)
154
+ expect(val2.unwrap).to be_a(Time::Timestamp)
155
+ expect(val2.unwrap).to eql(sval)
156
+ end
123
157
  end
124
158
 
125
159
  context 'can write and read' do
@@ -169,6 +203,34 @@ module Serialization
169
203
  end
170
204
  end
171
205
 
206
+ it 'Array of rich data' do
207
+ # Sensitive omitted because it doesn't respond to ==
208
+ val = [
209
+ Time::Timespan.from_fields(false, 3, 12, 40, 31, 123),
210
+ Time::Timestamp.now,
211
+ Semantic::Version.parse('1.2.3-alpha2'),
212
+ Semantic::VersionRange.parse('>=1.2.3-alpha2 <1.2.4'),
213
+ Types::PBinaryType::Binary.from_base64('w5ZzdGVuIG1lZCByw7ZzdGVuCg==')
214
+ ]
215
+ write(val)
216
+ val2 = read
217
+ expect(val2).to eql(val)
218
+ end
219
+
220
+ it 'Hash of rich data' do
221
+ # Sensitive omitted because it doesn't respond to ==
222
+ val = {
223
+ 'duration' => Time::Timespan.from_fields(false, 3, 12, 40, 31, 123),
224
+ 'time' => Time::Timestamp.now,
225
+ 'version' => Semantic::Version.parse('1.2.3-alpha2'),
226
+ 'range' => Semantic::VersionRange.parse('>=1.2.3-alpha2 <1.2.4'),
227
+ 'binary' => Types::PBinaryType::Binary.from_base64('w5ZzdGVuIG1lZCByw7ZzdGVuCg==')
228
+ }
229
+ write(val)
230
+ val2 = read
231
+ expect(val2).to eql(val)
232
+ end
233
+
172
234
  context 'an AST model' do
173
235
  it "Locator" do
174
236
  val = Parser::Locator::Locator19.new('here is some text', '/tmp/foo', [5])
@@ -0,0 +1,121 @@
1
+ require 'spec_helper'
2
+ require 'puppet/pops'
3
+ require 'puppet_spec/compiler'
4
+
5
+ module Puppet::Pops
6
+ module Time
7
+ describe 'Timespan' do
8
+ include PuppetSpec::Compiler
9
+
10
+ let! (:simple) { Timespan.from_fields(false, 1, 3, 10, 11) }
11
+ let! (:all_fields_hash) { {'days' => 1, 'hours' => 7, 'minutes' => 10, 'seconds' => 11, 'milliseconds' => 123, 'microseconds' => 456, 'nanoseconds' => 789} }
12
+ let! (:complex) { Timespan.from_fields_hash(all_fields_hash) }
13
+
14
+ context 'can be created from a String' do
15
+ it 'using default format' do
16
+ expect(Timespan.parse('1-03:10:11')).to eql(simple)
17
+ end
18
+
19
+ it 'using explicit format' do
20
+ expect(Timespan.parse('1-7:10:11.123456789', '%D-%H:%M:%S.%N')).to eql(complex)
21
+ end
22
+
23
+ it 'using leading minus and explicit format' do
24
+ expect(Timespan.parse('-1-7:10:11.123456789', '%D-%H:%M:%S.%N')).to eql(-complex)
25
+ end
26
+
27
+ it 'using %H as the biggest quantity' do
28
+ expect(Timespan.parse('27:10:11', '%H:%M:%S')).to eql(simple)
29
+ end
30
+
31
+ it 'using %M as the biggest quantity' do
32
+ expect(Timespan.parse('1630:11', '%M:%S')).to eql(simple)
33
+ end
34
+
35
+ it 'using %S as the biggest quantity' do
36
+ expect(Timespan.parse('97811', '%S')).to eql(simple)
37
+ end
38
+
39
+ it 'where biggest quantity is not frist' do
40
+ expect(Timespan.parse('11:1630', '%S:%M')).to eql(simple)
41
+ end
42
+
43
+ it 'raises an error when using %L as the biggest quantity' do
44
+ expect { Timespan.parse('123', '%L') }.to raise_error(ArgumentError, /denotes fractions and must be used together with a specifier of higher magnitude/)
45
+ end
46
+
47
+ it 'raises an error when using %N as the biggest quantity' do
48
+ expect { Timespan.parse('123', '%N') }.to raise_error(ArgumentError, /denotes fractions and must be used together with a specifier of higher magnitude/)
49
+ end
50
+
51
+ it 'where %L is treated as fractions of a second' do
52
+ expect(Timespan.parse('0.4', '%S.%L')).to eql(Timespan.from_fields(false, 0, 0, 0, 0, 400))
53
+ end
54
+
55
+ it 'where %N is treated as fractions of a second' do
56
+ expect(Timespan.parse('0.4', '%S.%N')).to eql(Timespan.from_fields(false, 0, 0, 0, 0, 400))
57
+ end
58
+ end
59
+
60
+ context 'when presented as a String' do
61
+ it 'uses default format for #to_s' do
62
+ expect(simple.to_s).to eql('1-03:10:11.0')
63
+ end
64
+
65
+ context 'using a format' do
66
+ it 'produces a string containing all components' do
67
+ expect(complex.format('%D-%H:%M:%S.%N')).to eql('1-07:10:11.123456789')
68
+ end
69
+
70
+ it 'produces a literal % for %%' do
71
+ expect(complex.format('%D%%%H:%M:%S')).to eql('1%07:10:11')
72
+ end
73
+
74
+ it 'produces a leading dash for negative instance' do
75
+ expect((-complex).format('%D-%H:%M:%S')).to eql('-1-07:10:11')
76
+ end
77
+
78
+ it 'produces a string without trailing zeros for %-N' do
79
+ expect(Timespan.parse('2.345', '%S.%N').format('%-S.%-N')).to eql('2.345')
80
+ end
81
+
82
+ it 'produces a string with trailing zeros for %N' do
83
+ expect(Timespan.parse('2.345', '%S.%N').format('%-S.%N')).to eql('2.345000000')
84
+ end
85
+
86
+ it 'produces a string with trailing zeros for %0N' do
87
+ expect(Timespan.parse('2.345', '%S.%N').format('%-S.%0N')).to eql('2.345000000')
88
+ end
89
+
90
+ it 'produces a string with trailing spaces for %_N' do
91
+ expect(Timespan.parse('2.345', '%S.%N').format('%-S.%_N')).to eql('2.345 ')
92
+ end
93
+ end
94
+ end
95
+
96
+ context 'when converted to a hash' do
97
+ it 'produces a hash with all numeric keys' do
98
+ hash = complex.to_hash
99
+ expect(hash).to eql(all_fields_hash)
100
+ end
101
+
102
+ it 'produces a compact hash with seconds and nanoseconds for #to_hash(true)' do
103
+ hash = complex.to_hash(true)
104
+ expect(hash).to eql({'seconds' => 112211, 'nanoseconds' => 123456789})
105
+ end
106
+
107
+ context 'from a negative value' do
108
+ it 'produces a hash with all numeric keys and negative = true' do
109
+ hash = (-complex).to_hash
110
+ expect(hash).to eql(all_fields_hash.merge('negative' => true))
111
+ end
112
+
113
+ it 'produces a compact hash with negative seconds and negative nanoseconds for #to_hash(true)' do
114
+ hash = (-complex).to_hash(true)
115
+ expect(hash).to eql({'seconds' => -112211, 'nanoseconds' => -123456789})
116
+ end
117
+ end
118
+ end
119
+ end
120
+ end
121
+ end