puppet 4.7.1-x64-mingw32 → 4.8.0-x64-mingw32
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.
- data/Gemfile +0 -3
- data/MAINTAINERS +76 -0
- data/README.md +0 -6
- data/Rakefile +2 -2
- data/lib/puppet/agent.rb +3 -3
- data/lib/puppet/application/apply.rb +1 -1
- data/lib/puppet/configurer.rb +2 -2
- data/lib/puppet/data_providers.rb +1 -0
- data/lib/puppet/data_providers/data_adapter.rb +1 -0
- data/lib/puppet/data_providers/data_function_support.rb +1 -0
- data/lib/puppet/data_providers/function_env_data_provider.rb +1 -0
- data/lib/puppet/data_providers/function_module_data_provider.rb +1 -0
- data/lib/puppet/data_providers/hiera_config.rb +1 -0
- data/lib/puppet/data_providers/hiera_env_data_provider.rb +1 -0
- data/lib/puppet/data_providers/hiera_interpolate.rb +1 -0
- data/lib/puppet/data_providers/hiera_module_data_provider.rb +1 -0
- data/lib/puppet/data_providers/hiera_support.rb +1 -2
- data/lib/puppet/data_providers/json_data_provider_factory.rb +2 -0
- data/lib/puppet/data_providers/yaml_data_provider_factory.rb +2 -0
- data/lib/puppet/defaults.rb +20 -1
- data/lib/puppet/environments.rb +5 -2
- data/lib/puppet/face/catalog.rb +1 -1
- data/lib/puppet/face/epp.rb +57 -11
- data/lib/puppet/face/module/install.rb +6 -6
- data/lib/puppet/functions.rb +23 -24
- data/lib/puppet/functions/alert.rb +14 -0
- data/lib/puppet/functions/binary_file.rb +25 -0
- data/lib/puppet/functions/break.rb +22 -0
- data/lib/puppet/functions/contain.rb +33 -0
- data/lib/puppet/functions/crit.rb +14 -0
- data/lib/puppet/functions/debug.rb +14 -0
- data/lib/puppet/functions/emerg.rb +14 -0
- data/lib/puppet/functions/epp.rb +1 -1
- data/lib/puppet/functions/err.rb +14 -0
- data/lib/puppet/functions/find_file.rb +31 -0
- data/lib/puppet/functions/include.rb +21 -0
- data/lib/puppet/functions/info.rb +14 -0
- data/lib/puppet/functions/new.rb +1 -1
- data/lib/puppet/functions/next.rb +23 -0
- data/lib/puppet/functions/notice.rb +14 -0
- data/lib/puppet/functions/regsubst.rb +12 -16
- data/lib/puppet/functions/require.rb +37 -0
- data/lib/puppet/functions/return.rb +22 -0
- data/lib/puppet/functions/strftime.rb +35 -0
- data/lib/puppet/functions/warning.rb +14 -0
- data/lib/puppet/generate/models/type/type.rb +4 -0
- data/lib/puppet/generate/templates/type/pcore.erb +2 -1
- data/lib/puppet/indirector/face.rb +6 -1
- data/lib/puppet/network/http/error.rb +2 -2
- data/lib/puppet/network/http/handler.rb +2 -2
- data/lib/puppet/node/environment.rb +11 -0
- data/lib/puppet/parser/ast.rb +5 -0
- data/lib/puppet/parser/ast/pops_bridge.rb +17 -4
- data/lib/puppet/parser/compiler.rb +29 -1
- data/lib/puppet/parser/functions.rb +6 -0
- data/lib/puppet/parser/functions/assert_type.rb +1 -1
- data/lib/puppet/parser/functions/binary_file.rb +24 -0
- data/lib/puppet/parser/functions/break.rb +39 -0
- data/lib/puppet/parser/functions/contain.rb +7 -15
- data/lib/puppet/parser/functions/defined.rb +2 -2
- data/lib/puppet/parser/functions/dig.rb +1 -1
- data/lib/puppet/parser/functions/each.rb +1 -1
- data/lib/puppet/parser/functions/epp.rb +2 -2
- data/lib/puppet/parser/functions/filter.rb +1 -1
- data/lib/puppet/parser/functions/find_file.rb +28 -0
- data/lib/puppet/parser/functions/hiera.rb +4 -4
- data/lib/puppet/parser/functions/hiera_array.rb +1 -1
- data/lib/puppet/parser/functions/hiera_hash.rb +1 -1
- data/lib/puppet/parser/functions/hiera_include.rb +1 -1
- data/lib/puppet/parser/functions/include.rb +4 -8
- data/lib/puppet/parser/functions/inline_epp.rb +1 -1
- data/lib/puppet/parser/functions/lest.rb +1 -1
- data/lib/puppet/parser/functions/lookup.rb +4 -2
- data/lib/puppet/parser/functions/map.rb +1 -1
- data/lib/puppet/parser/functions/match.rb +1 -1
- data/lib/puppet/parser/functions/new.rb +414 -18
- data/lib/puppet/parser/functions/next.rb +38 -0
- data/lib/puppet/parser/functions/reduce.rb +1 -1
- data/lib/puppet/parser/functions/regsubst.rb +4 -2
- data/lib/puppet/parser/functions/require.rb +4 -27
- data/lib/puppet/parser/functions/return.rb +71 -0
- data/lib/puppet/parser/functions/reverse_each.rb +1 -1
- data/lib/puppet/parser/functions/scanf.rb +13 -8
- data/lib/puppet/parser/functions/slice.rb +1 -1
- data/lib/puppet/parser/functions/split.rb +1 -1
- data/lib/puppet/parser/functions/step.rb +1 -1
- data/lib/puppet/parser/functions/strftime.rb +185 -0
- data/lib/puppet/parser/functions/then.rb +1 -1
- data/lib/puppet/parser/functions/type.rb +1 -1
- data/lib/puppet/parser/functions/with.rb +3 -3
- data/lib/puppet/parser/resource.rb +8 -5
- data/lib/puppet/parser/scope.rb +1 -1
- data/lib/puppet/plugins/configuration.rb +8 -0
- data/lib/puppet/plugins/data_providers.rb +1 -0
- data/lib/puppet/plugins/data_providers/data_provider.rb +7 -28
- data/lib/puppet/plugins/data_providers/registry.rb +1 -0
- data/lib/puppet/pops.rb +4 -0
- data/lib/puppet/pops/evaluator/access_operator.rb +36 -5
- data/lib/puppet/pops/evaluator/closure.rb +81 -12
- data/lib/puppet/pops/evaluator/compare_operator.rb +24 -1
- data/lib/puppet/pops/evaluator/evaluator_impl.rb +29 -5
- data/lib/puppet/pops/evaluator/json_strict_literal_evaluator.rb +1 -1
- data/lib/puppet/pops/evaluator/runtime3_converter.rb +53 -62
- data/lib/puppet/pops/evaluator/runtime3_support.rb +15 -6
- data/lib/puppet/pops/functions/dispatch.rb +9 -2
- data/lib/puppet/pops/functions/dispatcher.rb +3 -1
- data/lib/puppet/pops/functions/function.rb +19 -2
- data/lib/puppet/pops/issues.rb +9 -0
- data/lib/puppet/pops/label_provider.rb +2 -2
- data/lib/puppet/pops/loader/loader.rb +17 -0
- data/lib/puppet/pops/loader/static_loader.rb +0 -41
- data/lib/puppet/pops/lookup.rb +12 -0
- data/lib/puppet/pops/lookup/context.rb +86 -0
- data/lib/puppet/pops/lookup/explainer.rb +46 -6
- data/lib/puppet/pops/lookup/invocation.rb +19 -0
- data/lib/puppet/pops/lookup/sub_lookup.rb +1 -1
- data/lib/puppet/pops/model/factory.rb +20 -8
- data/lib/puppet/pops/model/model_label_provider.rb +3 -0
- data/lib/puppet/pops/model/model_meta.rb +2 -0
- data/lib/puppet/pops/model/model_tree_dumper.rb +14 -0
- data/lib/puppet/pops/parser/egrammar.ra +11 -6
- data/lib/puppet/pops/parser/eparser.rb +1112 -1086
- data/lib/puppet/pops/parser/heredoc_support.rb +1 -2
- data/lib/puppet/pops/pcore.rb +1 -0
- data/lib/puppet/pops/puppet_stack.rb +3 -3
- data/lib/puppet/pops/resource/param.rb +5 -1
- data/lib/puppet/pops/resource/resource_type_impl.rb +8 -4
- data/lib/puppet/pops/resource/resource_type_set.pcore +1 -0
- data/lib/puppet/pops/serialization/abstract_reader.rb +19 -2
- data/lib/puppet/pops/serialization/abstract_writer.rb +16 -3
- data/lib/puppet/pops/serialization/deserializer.rb +5 -1
- data/lib/puppet/pops/serialization/extension.rb +2 -0
- data/lib/puppet/pops/serialization/json.rb +76 -26
- data/lib/puppet/pops/serialization/serializer.rb +5 -1
- data/lib/puppet/pops/serialization/time_factory.rb +2 -1
- data/lib/puppet/pops/time/timespan.rb +718 -0
- data/lib/puppet/pops/time/timestamp.rb +148 -0
- data/lib/puppet/pops/types/p_binary_type.rb +220 -0
- data/lib/puppet/pops/types/p_object_type.rb +12 -6
- data/lib/puppet/pops/types/p_sensitive_type.rb +5 -1
- data/lib/puppet/pops/types/p_timespan_type.rb +141 -0
- data/lib/puppet/pops/types/p_timestamp_type.rb +69 -0
- data/lib/puppet/pops/types/string_converter.rb +62 -0
- data/lib/puppet/pops/types/type_asserter.rb +1 -1
- data/lib/puppet/pops/types/type_calculator.rb +17 -3
- data/lib/puppet/pops/types/type_factory.rb +35 -1
- data/lib/puppet/pops/types/type_formatter.rb +64 -11
- data/lib/puppet/pops/types/type_mismatch_describer.rb +110 -61
- data/lib/puppet/pops/types/type_parser.rb +18 -4
- data/lib/puppet/pops/types/types.rb +98 -63
- data/lib/puppet/pops/validation.rb +9 -1
- data/lib/puppet/pops/validation/checker4_0.rb +7 -0
- data/lib/puppet/property.rb +1 -1
- data/lib/puppet/provider.rb +3 -6
- data/lib/puppet/provider/mcx/mcxcontent.rb +1 -1
- data/lib/puppet/provider/mount/parsed.rb +18 -4
- data/lib/puppet/provider/nameservice/directoryservice.rb +15 -7
- data/lib/puppet/provider/package/gem.rb +6 -1
- data/lib/puppet/provider/package/pip.rb +0 -1
- data/lib/puppet/provider/package/pkg.rb +5 -1
- data/lib/puppet/provider/package/pkgng.rb +1 -1
- data/lib/puppet/provider/package/yum.rb +10 -0
- data/lib/puppet/provider/service/launchd.rb +1 -0
- data/lib/puppet/provider/user/directoryservice.rb +6 -6
- data/lib/puppet/provider/yumrepo/inifile.rb +1 -1
- data/lib/puppet/provider/zpool/zpool.rb +1 -1
- data/lib/puppet/resource.rb +54 -12
- data/lib/puppet/resource/capability_finder.rb +15 -9
- data/lib/puppet/resource/catalog.rb +25 -6
- data/lib/puppet/resource/type.rb +3 -1
- data/lib/puppet/settings.rb +1 -1
- data/lib/puppet/settings/environment_conf.rb +12 -4
- data/lib/puppet/syntax_checkers/base64.rb +41 -0
- data/lib/puppet/syntax_checkers/json.rb +0 -2
- data/lib/puppet/transaction.rb +6 -0
- data/lib/puppet/transaction/additional_resource_generator.rb +5 -0
- data/lib/puppet/transaction/report.rb +7 -2
- data/lib/puppet/type.rb +2 -1
- data/lib/puppet/type/file/checksum.rb +1 -0
- data/lib/puppet/type/file/content.rb +4 -4
- data/lib/puppet/type/mount.rb +44 -0
- data/lib/puppet/type/ssh_authorized_key.rb +1 -1
- data/lib/puppet/type/tidy.rb +3 -0
- data/lib/puppet/type/user.rb +12 -6
- data/lib/puppet/util/log.rb +25 -0
- data/lib/puppet/util/plist.rb +8 -3
- data/lib/puppet/version.rb +1 -1
- data/lib/puppet_x.rb +7 -1
- data/spec/integration/application/apply_spec.rb +118 -0
- data/spec/integration/parser/compiler_spec.rb +28 -0
- data/spec/integration/parser/pcore_resource_spec.rb +40 -3
- data/spec/integration/provider/mount_spec.rb +2 -1
- data/spec/integration/util/windows/principal_spec.rb +2 -2
- data/spec/integration/util/windows/registry_spec.rb +4 -4
- data/spec/lib/puppet_spec/compiler.rb +5 -1
- data/spec/lib/puppet_spec/unindent.rb +5 -0
- data/spec/shared_contexts/types_setup.rb +6 -0
- data/spec/shared_examples/rhel_package_provider.rb +16 -0
- data/spec/spec_helper.rb +1 -0
- data/spec/unit/agent_spec.rb +11 -0
- data/spec/unit/application/lookup_spec.rb +94 -3
- data/spec/unit/capability_spec.rb +22 -0
- data/spec/unit/configurer_spec.rb +8 -0
- data/spec/unit/face/epp_face_spec.rb +22 -3
- data/spec/unit/functions/assert_type_spec.rb +3 -3
- data/spec/unit/functions/binary_file_spec.rb +46 -0
- data/spec/unit/functions/break_spec.rb +89 -0
- data/spec/unit/{parser/functions → functions}/contain_spec.rb +68 -3
- data/spec/unit/functions/find_file_spec.rb +69 -0
- data/spec/unit/functions/include_spec.rb +175 -0
- data/spec/unit/functions/logging_spec.rb +54 -0
- data/spec/unit/functions/lookup_spec.rb +3 -3
- data/spec/unit/functions/new_spec.rb +105 -5
- data/spec/unit/functions/next_spec.rb +93 -0
- data/spec/unit/functions/require_spec.rb +83 -0
- data/spec/unit/functions/return_spec.rb +105 -0
- data/spec/unit/{parser/functions → functions}/shared.rb +14 -11
- data/spec/unit/functions/strftime_spec.rb +152 -0
- data/spec/unit/functions4_spec.rb +22 -0
- data/spec/unit/indirector/face_spec.rb +10 -2
- data/spec/unit/network/http/error_spec.rb +1 -2
- data/spec/unit/network/http/handler_spec.rb +6 -5
- data/spec/unit/parser/functions/hiera_array_spec.rb +1 -1
- data/spec/unit/parser/functions/hiera_hash_spec.rb +1 -1
- data/spec/unit/parser/functions/hiera_include_spec.rb +1 -1
- data/spec/unit/parser/functions/hiera_spec.rb +1 -1
- data/spec/unit/parser/functions/lookup_spec.rb +1 -1
- data/spec/unit/parser/functions/regsubst_spec.rb +1 -1
- data/spec/unit/parser/functions/split_spec.rb +1 -1
- data/spec/unit/pops/evaluator/access_ops_spec.rb +81 -1
- data/spec/unit/pops/evaluator/arithmetic_ops_spec.rb +170 -0
- data/spec/unit/pops/evaluator/evaluating_parser_spec.rb +29 -4
- data/spec/unit/pops/evaluator/runtime3_converter_spec.rb +112 -4
- data/spec/unit/pops/loaders/dependency_loader_spec.rb +12 -0
- data/spec/unit/pops/loaders/static_loader_spec.rb +0 -26
- data/spec/unit/pops/lookup/context_spec.rb +149 -0
- data/spec/unit/pops/parser/parse_functions_spec.rb +19 -0
- data/spec/unit/pops/parser/parse_lambda_spec.rb +19 -0
- data/spec/unit/pops/puppet_stack_spec.rb +1 -1
- data/spec/unit/pops/resource/resource_type_impl_spec.rb +74 -0
- data/spec/unit/pops/serialization/packer_spec.rb +34 -14
- data/spec/unit/pops/serialization/serialization_spec.rb +67 -5
- data/spec/unit/pops/time/timespan_spec.rb +121 -0
- data/spec/unit/pops/types/p_binary_type_spec.rb +243 -0
- data/spec/unit/pops/types/p_object_type_spec.rb +7 -7
- data/spec/unit/pops/types/p_sensitive_type_spec.rb +1 -1
- data/spec/unit/pops/types/p_timespan_type_spec.rb +273 -0
- data/spec/unit/pops/types/p_timestamp_type_spec.rb +311 -0
- data/spec/unit/pops/types/p_type_set_type_spec.rb +13 -13
- data/spec/unit/pops/types/ruby_generator_spec.rb +12 -12
- data/spec/unit/pops/types/string_converter_spec.rb +89 -0
- data/spec/unit/pops/types/type_asserter_spec.rb +3 -3
- data/spec/unit/pops/types/type_calculator_spec.rb +113 -5
- data/spec/unit/pops/types/type_formatter_spec.rb +40 -0
- data/spec/unit/pops/types/type_mismatch_describer_spec.rb +49 -38
- data/spec/unit/pops/types/type_parser_spec.rb +87 -4
- data/spec/unit/pops/types/types_spec.rb +1 -1
- data/spec/unit/pops/validator/validator_spec.rb +23 -0
- data/spec/unit/provider/mount/parsed_spec.rb +47 -29
- data/spec/unit/provider/package/pkg_spec.rb +109 -99
- data/spec/unit/provider/ssh_authorized_key/parsed_spec.rb +1 -0
- data/spec/unit/provider/user/aix_spec.rb +1 -1
- data/spec/unit/provider/user/directoryservice_spec.rb +101 -30
- data/spec/unit/resource/capability_finder_spec.rb +29 -7
- data/spec/unit/resource/catalog_spec.rb +127 -0
- data/spec/unit/ssl/certificate_request_spec.rb +1 -1
- data/spec/unit/transaction/additional_resource_generator_spec.rb +30 -0
- data/spec/unit/transaction/persistence_spec.rb +1 -6
- data/spec/unit/transaction/report_spec.rb +23 -0
- data/spec/unit/transaction_spec.rb +38 -0
- data/spec/unit/type/mount_spec.rb +5 -0
- data/spec/unit/util/plist_spec.rb +14 -2
- metadata +71 -12
- data/spec/integration/parser/functions/require_spec.rb +0 -43
- data/spec/unit/parser/functions/include_spec.rb +0 -55
- data/spec/unit/parser/functions/require_spec.rb +0 -68
@@ -31,7 +31,7 @@ describe 'The Object Type' do
|
|
31
31
|
}
|
32
32
|
OBJECT
|
33
33
|
expect { parse_object('MyObject', obj) }.to raise_error(TypeAssertionError,
|
34
|
-
/attribute MyObject\[a\]
|
34
|
+
/attribute MyObject\[a\] has wrong type, expects a Type value, got Integer/)
|
35
35
|
end
|
36
36
|
|
37
37
|
it 'raises an error if the type is missing' do
|
@@ -41,7 +41,7 @@ describe 'The Object Type' do
|
|
41
41
|
}
|
42
42
|
OBJECT
|
43
43
|
expect { parse_object('MyObject', obj) }.to raise_error(TypeAssertionError,
|
44
|
-
/
|
44
|
+
/expects a value for key 'type'/)
|
45
45
|
end
|
46
46
|
|
47
47
|
it 'raises an error when value is of incompatible type' do
|
@@ -51,7 +51,7 @@ describe 'The Object Type' do
|
|
51
51
|
}
|
52
52
|
OBJECT
|
53
53
|
expect { parse_object('MyObject', obj) }.to raise_error(TypeAssertionError,
|
54
|
-
/attribute MyObject\[a\] value
|
54
|
+
/attribute MyObject\[a\] value has wrong type, expects an Integer value, got String/)
|
55
55
|
end
|
56
56
|
|
57
57
|
it 'raises an error if the kind is invalid' do
|
@@ -61,7 +61,7 @@ describe 'The Object Type' do
|
|
61
61
|
}
|
62
62
|
OBJECT
|
63
63
|
expect { parse_object('MyObject', obj) }.to raise_error(TypeAssertionError,
|
64
|
-
/
|
64
|
+
/expects a match for Enum\['constant', 'derived', 'given_or_derived'\], got 'derivd'/)
|
65
65
|
end
|
66
66
|
|
67
67
|
it 'stores value in attribute' do
|
@@ -155,7 +155,7 @@ describe 'The Object Type' do
|
|
155
155
|
}
|
156
156
|
OBJECT
|
157
157
|
expect { parse_object('MyObject', obj) }.to raise_error(TypeAssertionError,
|
158
|
-
/function MyObject\[a\]
|
158
|
+
/function MyObject\[a\] has wrong type, expects a Type\[Callable\] value, got Type\[String\]/)
|
159
159
|
end
|
160
160
|
|
161
161
|
it 'raises an error when a function has the same name as an attribute' do
|
@@ -494,7 +494,7 @@ describe 'The Object Type' do
|
|
494
494
|
a => Integer
|
495
495
|
}
|
496
496
|
OBJECT
|
497
|
-
expect { parse_object('MyObject', obj) }.to raise_error(TypeAssertionError, /object initializer
|
497
|
+
expect { parse_object('MyObject', obj) }.to raise_error(TypeAssertionError, /object initializer has wrong type, unrecognized key 'attribrutes'/)
|
498
498
|
end
|
499
499
|
|
500
500
|
it 'raises an error when attribute contains invalid keys' do
|
@@ -503,7 +503,7 @@ describe 'The Object Type' do
|
|
503
503
|
a => { type => Integer, knid => constant }
|
504
504
|
}
|
505
505
|
OBJECT
|
506
|
-
expect { parse_object('MyObject', obj) }.to raise_error(TypeAssertionError, /initializer for attribute MyObject\[a\]
|
506
|
+
expect { parse_object('MyObject', obj) }.to raise_error(TypeAssertionError, /initializer for attribute MyObject\[a\] has wrong type, unrecognized key 'knid'/)
|
507
507
|
end
|
508
508
|
|
509
509
|
context 'when inheriting from a another Object type' do
|
@@ -96,7 +96,7 @@ describe 'Sensitive Type' do
|
|
96
96
|
CODE
|
97
97
|
expect {
|
98
98
|
eval_and_collect_notices(code)
|
99
|
-
}.to raise_error(Puppet::Error, /
|
99
|
+
}.to raise_error(Puppet::Error, /expects a Sensitive\[String\[10, 20\]\] value, got Sensitive\[String\[7, 7\]\]/)
|
100
100
|
end
|
101
101
|
|
102
102
|
it 'does not match an inappropriate parameterized type' do
|
@@ -0,0 +1,273 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'puppet/pops'
|
3
|
+
require 'puppet_spec/compiler'
|
4
|
+
|
5
|
+
module Puppet::Pops
|
6
|
+
module Types
|
7
|
+
describe 'Timespan type' do
|
8
|
+
it 'is normalized in a Variant' do
|
9
|
+
t = TypeFactory.variant(TypeFactory.timespan('10:00:00', '15:00:00'), TypeFactory.timespan('14:00:00', '17:00:00')).normalize
|
10
|
+
expect(t).to be_a(PTimespanType)
|
11
|
+
expect(t).to eql(TypeFactory.timespan('10:00:00', '17:00:00'))
|
12
|
+
end
|
13
|
+
|
14
|
+
context 'when used in Puppet expressions' do
|
15
|
+
include PuppetSpec::Compiler
|
16
|
+
it 'is equal to itself only' do
|
17
|
+
code = <<-CODE
|
18
|
+
$t = Timespan
|
19
|
+
notice(Timespan =~ Type[Timespan])
|
20
|
+
notice(Timespan == Timespan)
|
21
|
+
notice(Timespan < Timespan)
|
22
|
+
notice(Timespan > Timespan)
|
23
|
+
CODE
|
24
|
+
expect(eval_and_collect_notices(code)).to eq(%w(true true false false))
|
25
|
+
end
|
26
|
+
|
27
|
+
context "when parameterized" do
|
28
|
+
it 'is equal other types with the same parameterization' do
|
29
|
+
code = <<-CODE
|
30
|
+
notice(Timespan['01:00:00', '13:00:00'] == Timespan['01:00:00', '13:00:00'])
|
31
|
+
notice(Timespan['01:00:00', '13:00:00'] != Timespan['01:12:20', '13:00:00'])
|
32
|
+
CODE
|
33
|
+
expect(eval_and_collect_notices(code)).to eq(%w(true true))
|
34
|
+
end
|
35
|
+
|
36
|
+
it 'using just one parameter is the same as using that parameter twice' do
|
37
|
+
code = <<-CODE
|
38
|
+
notice(Timespan['01:00:00'] == Timespan['01:00:00', '01:00:00'])
|
39
|
+
CODE
|
40
|
+
expect(eval_and_collect_notices(code)).to eq(%w(true))
|
41
|
+
end
|
42
|
+
|
43
|
+
it 'orders parameterized types based on range inclusion' do
|
44
|
+
code = <<-CODE
|
45
|
+
notice(Timespan['01:00:00', '13:00:00'] < Timespan['00:00:00', '14:00:00'])
|
46
|
+
notice(Timespan['01:00:00', '13:00:00'] > Timespan['00:00:00', '14:00:00'])
|
47
|
+
CODE
|
48
|
+
expect(eval_and_collect_notices(code)).to eq(%w(true false))
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
context 'a Timespan instance' do
|
53
|
+
it 'can be created from a string' do
|
54
|
+
code = <<-CODE
|
55
|
+
$o = Timespan('3-11:00')
|
56
|
+
notice($o)
|
57
|
+
notice(type($o))
|
58
|
+
CODE
|
59
|
+
expect(eval_and_collect_notices(code)).to eq(%w(3-11:00:00.0 Timespan['3-11:00:00.0']))
|
60
|
+
end
|
61
|
+
|
62
|
+
it 'can be created from a string and format' do
|
63
|
+
code = <<-CODE
|
64
|
+
$o = Timespan('1d11h23m', '%Dd%Hh%Mm')
|
65
|
+
notice($o)
|
66
|
+
CODE
|
67
|
+
expect(eval_and_collect_notices(code)).to eq(%w(1-11:23:00.0))
|
68
|
+
end
|
69
|
+
|
70
|
+
it 'can be created from a hash with string and format' do
|
71
|
+
code = <<-CODE
|
72
|
+
$o = Timespan({string => '1d11h23m', format => '%Dd%Hh%Mm'})
|
73
|
+
notice($o)
|
74
|
+
CODE
|
75
|
+
expect(eval_and_collect_notices(code)).to eq(%w(1-11:23:00.0))
|
76
|
+
end
|
77
|
+
|
78
|
+
it 'can be created from a string and array of formats' do
|
79
|
+
code = <<-CODE
|
80
|
+
$fmts = ['%Dd%Hh%Mm%Ss', '%Hh%Mm%Ss', '%Dd%Hh%Mm', '%Dd%Hh', '%Hh%Mm', '%Mm%Ss', '%Dd', '%Hh', '%Mm', '%Ss' ]
|
81
|
+
notice(Timespan('1d11h23m13s', $fmts))
|
82
|
+
notice(Timespan('11h23m13s', $fmts))
|
83
|
+
notice(Timespan('1d11h23m', $fmts))
|
84
|
+
notice(Timespan('1d11h', $fmts))
|
85
|
+
notice(Timespan('11h23m', $fmts))
|
86
|
+
notice(Timespan('23m13s', $fmts))
|
87
|
+
notice(Timespan('1d', $fmts))
|
88
|
+
notice(Timespan('11h', $fmts))
|
89
|
+
notice(Timespan('23m', $fmts))
|
90
|
+
notice(Timespan('13s', $fmts))
|
91
|
+
CODE
|
92
|
+
expect(eval_and_collect_notices(code)).to eq(
|
93
|
+
%w(1-11:23:13.0 0-11:23:13.0 1-11:23:00.0 1-11:00:00.0 0-11:23:00.0 0-00:23:13.0 1-00:00:00.0 0-11:00:00.0 0-00:23:00.0 0-00:00:13.0))
|
94
|
+
end
|
95
|
+
|
96
|
+
it 'can be created from a integer that represents seconds since epoch' do
|
97
|
+
code = <<-CODE
|
98
|
+
$o = Timespan(6800)
|
99
|
+
notice(Integer($o) == 6800)
|
100
|
+
notice($o == Timespan('01:53:20'))
|
101
|
+
CODE
|
102
|
+
expect(eval_and_collect_notices(code)).to eq(%w(true true))
|
103
|
+
end
|
104
|
+
|
105
|
+
it 'can be created from a float that represents seconds with fraction since epoch' do
|
106
|
+
code = <<-CODE
|
107
|
+
$o = Timespan(6800.123456789)
|
108
|
+
notice(Float($o) == 6800.123456789)
|
109
|
+
notice($o == Timespan('01:53:20.123456789', '%H:%M:%S.%N'))
|
110
|
+
CODE
|
111
|
+
expect(eval_and_collect_notices(code)).to eq(%w(true true))
|
112
|
+
end
|
113
|
+
|
114
|
+
it 'matches the appropriate parameterized type' do
|
115
|
+
code = <<-CODE
|
116
|
+
$o = Timespan('3-11:12:13')
|
117
|
+
notice(assert_type(Timespan['3-00:00:00', '4-00:00:00'], $o))
|
118
|
+
CODE
|
119
|
+
expect(eval_and_collect_notices(code)).to eq(['3-11:12:13.0'])
|
120
|
+
end
|
121
|
+
|
122
|
+
it 'does not match an inappropriate parameterized type' do
|
123
|
+
code = <<-CODE
|
124
|
+
$o = Timespan('1-03:04:05')
|
125
|
+
notice(assert_type(Timespan['2-00:00:00', '3-00:00:00'], $o) |$e, $a| { 'nope' })
|
126
|
+
CODE
|
127
|
+
expect(eval_and_collect_notices(code)).to eq(['nope'])
|
128
|
+
end
|
129
|
+
|
130
|
+
it 'can be compared to other instances' do
|
131
|
+
code = <<-CODE
|
132
|
+
$o1 = Timespan('00:00:01')
|
133
|
+
$o2 = Timespan('00:00:02')
|
134
|
+
$o3 = Timespan('00:00:02')
|
135
|
+
notice($o1 > $o3)
|
136
|
+
notice($o1 >= $o3)
|
137
|
+
notice($o1 < $o3)
|
138
|
+
notice($o1 <= $o3)
|
139
|
+
notice($o1 == $o3)
|
140
|
+
notice($o1 != $o3)
|
141
|
+
notice($o2 > $o3)
|
142
|
+
notice($o2 < $o3)
|
143
|
+
notice($o2 >= $o3)
|
144
|
+
notice($o2 <= $o3)
|
145
|
+
notice($o2 == $o3)
|
146
|
+
notice($o2 != $o3)
|
147
|
+
CODE
|
148
|
+
expect(eval_and_collect_notices(code)).to eq(%w(false false true true false true false false true true true false))
|
149
|
+
end
|
150
|
+
|
151
|
+
it 'can be compared to integer that represents seconds' do
|
152
|
+
code = <<-CODE
|
153
|
+
$o1 = Timespan('00:00:01')
|
154
|
+
$o2 = Timespan('00:00:02')
|
155
|
+
$o3 = 2
|
156
|
+
notice($o1 > $o3)
|
157
|
+
notice($o1 >= $o3)
|
158
|
+
notice($o1 < $o3)
|
159
|
+
notice($o1 <= $o3)
|
160
|
+
notice($o2 > $o3)
|
161
|
+
notice($o2 < $o3)
|
162
|
+
notice($o2 >= $o3)
|
163
|
+
notice($o2 <= $o3)
|
164
|
+
CODE
|
165
|
+
expect(eval_and_collect_notices(code)).to eq(%w(false false true true false false true true))
|
166
|
+
end
|
167
|
+
|
168
|
+
it 'integer that represents seconds can be compared to it' do
|
169
|
+
code = <<-CODE
|
170
|
+
$o1 = 1
|
171
|
+
$o2 = 2
|
172
|
+
$o3 = Timespan('00:00:02')
|
173
|
+
notice($o1 > $o3)
|
174
|
+
notice($o1 >= $o3)
|
175
|
+
notice($o1 < $o3)
|
176
|
+
notice($o1 <= $o3)
|
177
|
+
notice($o2 > $o3)
|
178
|
+
notice($o2 < $o3)
|
179
|
+
notice($o2 >= $o3)
|
180
|
+
notice($o2 <= $o3)
|
181
|
+
CODE
|
182
|
+
expect(eval_and_collect_notices(code)).to eq(%w(false false true true false false true true))
|
183
|
+
end
|
184
|
+
|
185
|
+
it 'is equal to integer that represents seconds' do
|
186
|
+
code = <<-CODE
|
187
|
+
$o1 = Timespan('02', '%S')
|
188
|
+
$o2 = 2
|
189
|
+
notice($o1 == $o2)
|
190
|
+
notice($o1 != $o2)
|
191
|
+
notice(Integer($o1) == $o2)
|
192
|
+
CODE
|
193
|
+
expect(eval_and_collect_notices(code)).to eq(%w(true false true))
|
194
|
+
end
|
195
|
+
|
196
|
+
it 'integer that represents seconds is equal to it' do
|
197
|
+
code = <<-CODE
|
198
|
+
$o1 = 2
|
199
|
+
$o2 = Timespan('02', '%S')
|
200
|
+
notice($o1 == $o2)
|
201
|
+
notice($o1 != $o2)
|
202
|
+
notice($o1 == Integer($o2))
|
203
|
+
CODE
|
204
|
+
expect(eval_and_collect_notices(code)).to eq(%w(true false true))
|
205
|
+
end
|
206
|
+
|
207
|
+
it 'can be compared to float that represents seconds with fraction' do
|
208
|
+
code = <<-CODE
|
209
|
+
$o1 = Timespan('01.123456789', '%S.%N')
|
210
|
+
$o2 = Timespan('02.123456789', '%S.%N')
|
211
|
+
$o3 = 2.123456789
|
212
|
+
notice($o1 > $o3)
|
213
|
+
notice($o1 >= $o3)
|
214
|
+
notice($o1 < $o3)
|
215
|
+
notice($o1 <= $o3)
|
216
|
+
notice($o2 > $o3)
|
217
|
+
notice($o2 < $o3)
|
218
|
+
notice($o2 >= $o3)
|
219
|
+
notice($o2 <= $o3)
|
220
|
+
CODE
|
221
|
+
expect(eval_and_collect_notices(code)).to eq(%w(false false true true false false true true))
|
222
|
+
end
|
223
|
+
|
224
|
+
it 'float that represents seconds with fraction can be compared to it' do
|
225
|
+
code = <<-CODE
|
226
|
+
$o1 = 1.123456789
|
227
|
+
$o2 = 2.123456789
|
228
|
+
$o3 = Timespan('02.123456789', '%S.%N')
|
229
|
+
notice($o1 > $o3)
|
230
|
+
notice($o1 >= $o3)
|
231
|
+
notice($o1 < $o3)
|
232
|
+
notice($o1 <= $o3)
|
233
|
+
notice($o2 > $o3)
|
234
|
+
notice($o2 < $o3)
|
235
|
+
notice($o2 >= $o3)
|
236
|
+
notice($o2 <= $o3)
|
237
|
+
CODE
|
238
|
+
expect(eval_and_collect_notices(code)).to eq(%w(false false true true false false true true))
|
239
|
+
end
|
240
|
+
|
241
|
+
it 'is equal to float that represents seconds with fraction' do
|
242
|
+
code = <<-CODE
|
243
|
+
$o1 = Timespan('02.123456789', '%S.%N')
|
244
|
+
$o2 = 2.123456789
|
245
|
+
notice($o1 == $o2)
|
246
|
+
notice($o1 != $o2)
|
247
|
+
notice(Float($o1) == $o2)
|
248
|
+
CODE
|
249
|
+
expect(eval_and_collect_notices(code)).to eq(%w(true false true))
|
250
|
+
end
|
251
|
+
|
252
|
+
it 'float that represents seconds with fraction is equal to it' do
|
253
|
+
code = <<-CODE
|
254
|
+
$o1 = 2.123456789
|
255
|
+
$o2 = Timespan('02.123456789', '%S.%N')
|
256
|
+
notice($o1 == $o2)
|
257
|
+
notice($o1 != $o2)
|
258
|
+
notice($o1 == Float($o2))
|
259
|
+
CODE
|
260
|
+
expect(eval_and_collect_notices(code)).to eq(%w(true false true))
|
261
|
+
end
|
262
|
+
|
263
|
+
it 'it cannot be compared to a Timestamp' do
|
264
|
+
code = <<-CODE
|
265
|
+
notice(Timespan(3) < Timestamp())
|
266
|
+
CODE
|
267
|
+
expect { eval_and_collect_notices(code) }.to raise_error(Puppet::Error, /Timespans are only comparable to Timespans, Integers, and Floats/)
|
268
|
+
end
|
269
|
+
end
|
270
|
+
end
|
271
|
+
end
|
272
|
+
end
|
273
|
+
end
|
@@ -0,0 +1,311 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'puppet/pops'
|
3
|
+
require 'puppet_spec/compiler'
|
4
|
+
|
5
|
+
module Puppet::Pops
|
6
|
+
module Types
|
7
|
+
describe 'Timestamp type' do
|
8
|
+
|
9
|
+
it 'is normalized in a Variant' do
|
10
|
+
t = TypeFactory.variant(TypeFactory.timestamp('2015-03-01', '2016-01-01'), TypeFactory.timestamp('2015-11-03', '2016-12-24')).normalize
|
11
|
+
expect(t).to be_a(PTimestampType)
|
12
|
+
expect(t).to eql(TypeFactory.timestamp('2015-03-01', '2016-12-24'))
|
13
|
+
end
|
14
|
+
|
15
|
+
context 'when used in Puppet expressions' do
|
16
|
+
include PuppetSpec::Compiler
|
17
|
+
it 'is equal to itself only' do
|
18
|
+
code = <<-CODE
|
19
|
+
$t = Timestamp
|
20
|
+
notice(Timestamp =~ Type[Timestamp])
|
21
|
+
notice(Timestamp == Timestamp)
|
22
|
+
notice(Timestamp < Timestamp)
|
23
|
+
notice(Timestamp > Timestamp)
|
24
|
+
CODE
|
25
|
+
expect(eval_and_collect_notices(code)).to eq(%w(true true false false))
|
26
|
+
end
|
27
|
+
|
28
|
+
context "when parameterized" do
|
29
|
+
it 'is equal other types with the same parameterization' do
|
30
|
+
code = <<-CODE
|
31
|
+
notice(Timestamp['2015-03-01', '2016-01-01'] == Timestamp['2015-03-01', '2016-01-01'])
|
32
|
+
notice(Timestamp['2015-03-01', '2016-01-01'] != Timestamp['2015-11-03', '2016-12-24'])
|
33
|
+
CODE
|
34
|
+
expect(eval_and_collect_notices(code)).to eq(%w(true true))
|
35
|
+
end
|
36
|
+
|
37
|
+
it 'using just one parameter is the same as using that parameter twice' do
|
38
|
+
code = <<-CODE
|
39
|
+
notice(Timestamp['2015-03-01'] == Timestamp['2015-03-01', '2015-03-01'])
|
40
|
+
CODE
|
41
|
+
expect(eval_and_collect_notices(code)).to eq(%w(true))
|
42
|
+
end
|
43
|
+
|
44
|
+
it 'orders parameterized types based on range inclusion' do
|
45
|
+
code = <<-CODE
|
46
|
+
notice(Timestamp['2015-03-01', '2015-09-30'] < Timestamp['2015-02-01', '2015-10-30'])
|
47
|
+
notice(Timestamp['2015-03-01', '2015-09-30'] > Timestamp['2015-02-01', '2015-10-30'])
|
48
|
+
CODE
|
49
|
+
expect(eval_and_collect_notices(code)).to eq(%w(true false))
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
context 'a Timestamp instance' do
|
54
|
+
it 'can be created from a string' do
|
55
|
+
code = <<-CODE
|
56
|
+
$o = Timestamp('2015-03-01')
|
57
|
+
notice($o)
|
58
|
+
notice(type($o))
|
59
|
+
CODE
|
60
|
+
expect(eval_and_collect_notices(code)).to eq(['2015-03-01T00:00:00.000 UTC', "Timestamp['2015-03-01T00:00:00.000 UTC']"])
|
61
|
+
end
|
62
|
+
|
63
|
+
it 'can be created from a string and format' do
|
64
|
+
code = <<-CODE
|
65
|
+
$o = Timestamp('Sunday, 28 August, 2016', '%A, %d %B, %Y')
|
66
|
+
notice($o)
|
67
|
+
CODE
|
68
|
+
expect(eval_and_collect_notices(code)).to eq(['2016-08-28T00:00:00.000 UTC'])
|
69
|
+
end
|
70
|
+
|
71
|
+
it 'can be created from a string, format, and a timezone' do
|
72
|
+
code = <<-CODE
|
73
|
+
$o = Timestamp('Sunday, 28 August, 2016', '%A, %d %B, %Y', 'EST')
|
74
|
+
notice($o)
|
75
|
+
CODE
|
76
|
+
expect(eval_and_collect_notices(code)).to eq(['2016-08-28T05:00:00.000 UTC'])
|
77
|
+
end
|
78
|
+
|
79
|
+
it 'can be not be created from a string, format with timezone designator, and a timezone' do
|
80
|
+
code = <<-CODE
|
81
|
+
$o = Timestamp('Sunday, 28 August, 2016 UTC', '%A, %d %B, %Y %z', 'EST')
|
82
|
+
notice($o)
|
83
|
+
CODE
|
84
|
+
expect { eval_and_collect_notices(code) }.to raise_error(
|
85
|
+
/Using a Timezone designator in format specification is mutually exclusive to providing an explicit timezone argument/)
|
86
|
+
end
|
87
|
+
|
88
|
+
it 'can be created from a hash with string and format' do
|
89
|
+
code = <<-CODE
|
90
|
+
$o = Timestamp({ string => 'Sunday, 28 August, 2016', format => '%A, %d %B, %Y' })
|
91
|
+
notice($o)
|
92
|
+
CODE
|
93
|
+
expect(eval_and_collect_notices(code)).to eq(['2016-08-28T00:00:00.000 UTC'])
|
94
|
+
end
|
95
|
+
|
96
|
+
it 'can be created from a hash with string, format, and a timezone' do
|
97
|
+
code = <<-CODE
|
98
|
+
$o = Timestamp({ string => 'Sunday, 28 August, 2016', format => '%A, %d %B, %Y', timezone => 'EST' })
|
99
|
+
notice($o)
|
100
|
+
CODE
|
101
|
+
expect(eval_and_collect_notices(code)).to eq(['2016-08-28T05:00:00.000 UTC'])
|
102
|
+
end
|
103
|
+
|
104
|
+
it 'can be created from a string and array of formats' do
|
105
|
+
code = <<-CODE
|
106
|
+
$fmts = [
|
107
|
+
'%A, %d %B, %Y at %r',
|
108
|
+
'%b %d, %Y, %l:%M %P',
|
109
|
+
'%y-%m-%d %H:%M:%S %z'
|
110
|
+
]
|
111
|
+
notice(Timestamp('Sunday, 28 August, 2016 at 12:15:00 PM', $fmts))
|
112
|
+
notice(Timestamp('Jul 24, 2016, 1:20 am', $fmts))
|
113
|
+
notice(Timestamp('16-06-21 18:23:15 UTC', $fmts))
|
114
|
+
CODE
|
115
|
+
expect(eval_and_collect_notices(code)).to eq(
|
116
|
+
['2016-08-28T12:15:00.000 UTC', '2016-07-24T01:20:00.000 UTC', '2016-06-21T18:23:15.000 UTC'])
|
117
|
+
end
|
118
|
+
|
119
|
+
it 'can be created from a string, array of formats, and a timezone' do
|
120
|
+
code = <<-CODE
|
121
|
+
$fmts = [
|
122
|
+
'%A, %d %B, %Y at %r',
|
123
|
+
'%b %d, %Y, %l:%M %P',
|
124
|
+
'%y-%m-%d %H:%M:%S'
|
125
|
+
]
|
126
|
+
notice(Timestamp('Sunday, 28 August, 2016 at 12:15:00 PM', $fmts, 'CET'))
|
127
|
+
notice(Timestamp('Jul 24, 2016, 1:20 am', $fmts, 'CET'))
|
128
|
+
notice(Timestamp('16-06-21 18:23:15', $fmts, 'CET'))
|
129
|
+
CODE
|
130
|
+
expect(eval_and_collect_notices(code)).to eq(
|
131
|
+
['2016-08-28T11:15:00.000 UTC', '2016-07-24T00:20:00.000 UTC', '2016-06-21T17:23:15.000 UTC'])
|
132
|
+
end
|
133
|
+
|
134
|
+
it 'can be created from a integer that represents seconds since epoch' do
|
135
|
+
code = <<-CODE
|
136
|
+
$o = Timestamp(1433116800)
|
137
|
+
notice(Integer($o) == 1433116800)
|
138
|
+
notice($o == Timestamp('2015-06-01T00:00:00 UTC'))
|
139
|
+
CODE
|
140
|
+
expect(eval_and_collect_notices(code)).to eq(%w(true true))
|
141
|
+
end
|
142
|
+
|
143
|
+
it 'can be created from a float that represents seconds with fraction since epoch' do
|
144
|
+
code = <<-CODE
|
145
|
+
$o = Timestamp(1433116800.123456)
|
146
|
+
notice(Float($o) == 1433116800.123456)
|
147
|
+
notice($o == Timestamp('2015-06-01T00:00:00.123456 UTC'))
|
148
|
+
CODE
|
149
|
+
expect(eval_and_collect_notices(code)).to eq(%w(true true))
|
150
|
+
end
|
151
|
+
|
152
|
+
it 'matches the appropriate parameterized type' do
|
153
|
+
code = <<-CODE
|
154
|
+
$o = Timestamp('2015-05-01')
|
155
|
+
notice(assert_type(Timestamp['2015-03-01', '2015-09-30'], $o))
|
156
|
+
CODE
|
157
|
+
expect(eval_and_collect_notices(code)).to eq(['2015-05-01T00:00:00.000 UTC'])
|
158
|
+
end
|
159
|
+
|
160
|
+
it 'does not match an inappropriate parameterized type' do
|
161
|
+
code = <<-CODE
|
162
|
+
$o = Timestamp('2015-05-01')
|
163
|
+
notice(assert_type(Timestamp['2016-03-01', '2016-09-30'], $o) |$e, $a| { 'nope' })
|
164
|
+
CODE
|
165
|
+
expect(eval_and_collect_notices(code)).to eq(['nope'])
|
166
|
+
end
|
167
|
+
|
168
|
+
it 'can be compared to other instances' do
|
169
|
+
code = <<-CODE
|
170
|
+
$o1 = Timestamp('2015-05-01')
|
171
|
+
$o2 = Timestamp('2015-06-01')
|
172
|
+
$o3 = Timestamp('2015-06-01')
|
173
|
+
notice($o1 > $o3)
|
174
|
+
notice($o1 >= $o3)
|
175
|
+
notice($o1 < $o3)
|
176
|
+
notice($o1 <= $o3)
|
177
|
+
notice($o1 == $o3)
|
178
|
+
notice($o1 != $o3)
|
179
|
+
notice($o2 > $o3)
|
180
|
+
notice($o2 < $o3)
|
181
|
+
notice($o2 >= $o3)
|
182
|
+
notice($o2 <= $o3)
|
183
|
+
notice($o2 == $o3)
|
184
|
+
notice($o2 != $o3)
|
185
|
+
CODE
|
186
|
+
expect(eval_and_collect_notices(code)).to eq(%w(false false true true false true false false true true true false))
|
187
|
+
end
|
188
|
+
|
189
|
+
it 'can be compared to integer that represents seconds since epoch' do
|
190
|
+
code = <<-CODE
|
191
|
+
$o1 = Timestamp('2015-05-01')
|
192
|
+
$o2 = Timestamp('2015-06-01')
|
193
|
+
$o3 = 1433116800
|
194
|
+
notice($o1 > $o3)
|
195
|
+
notice($o1 >= $o3)
|
196
|
+
notice($o1 < $o3)
|
197
|
+
notice($o1 <= $o3)
|
198
|
+
notice($o2 > $o3)
|
199
|
+
notice($o2 < $o3)
|
200
|
+
notice($o2 >= $o3)
|
201
|
+
notice($o2 <= $o3)
|
202
|
+
CODE
|
203
|
+
expect(eval_and_collect_notices(code)).to eq(%w(false false true true false false true true))
|
204
|
+
end
|
205
|
+
|
206
|
+
it 'integer that represents seconds since epoch can be compared to it' do
|
207
|
+
code = <<-CODE
|
208
|
+
$o1 = 1430438400
|
209
|
+
$o2 = 1433116800
|
210
|
+
$o3 = Timestamp('2015-06-01')
|
211
|
+
notice($o1 > $o3)
|
212
|
+
notice($o1 >= $o3)
|
213
|
+
notice($o1 < $o3)
|
214
|
+
notice($o1 <= $o3)
|
215
|
+
notice($o2 > $o3)
|
216
|
+
notice($o2 < $o3)
|
217
|
+
notice($o2 >= $o3)
|
218
|
+
notice($o2 <= $o3)
|
219
|
+
CODE
|
220
|
+
expect(eval_and_collect_notices(code)).to eq(%w(false false true true false false true true))
|
221
|
+
end
|
222
|
+
|
223
|
+
it 'is equal to integer that represents seconds since epoch' do
|
224
|
+
code = <<-CODE
|
225
|
+
$o1 = Timestamp('2015-06-01T00:00:00 UTC')
|
226
|
+
$o2 = 1433116800
|
227
|
+
notice($o1 == $o2)
|
228
|
+
notice($o1 != $o2)
|
229
|
+
notice(Integer($o1) == $o2)
|
230
|
+
CODE
|
231
|
+
expect(eval_and_collect_notices(code)).to eq(%w(true false true))
|
232
|
+
end
|
233
|
+
|
234
|
+
it 'integer that represents seconds is equal to it' do
|
235
|
+
code = <<-CODE
|
236
|
+
$o1 = 1433116800
|
237
|
+
$o2 = Timestamp('2015-06-01T00:00:00 UTC')
|
238
|
+
notice($o1 == $o2)
|
239
|
+
notice($o1 != $o2)
|
240
|
+
notice($o1 == Integer($o2))
|
241
|
+
CODE
|
242
|
+
expect(eval_and_collect_notices(code)).to eq(%w(true false true))
|
243
|
+
end
|
244
|
+
|
245
|
+
it 'can be compared to float that represents seconds with fraction since epoch' do
|
246
|
+
code = <<-CODE
|
247
|
+
$o1 = Timestamp('2015-05-01T00:00:00.123456789 UTC')
|
248
|
+
$o2 = Timestamp('2015-06-01T00:00:00.123456789 UTC')
|
249
|
+
$o3 = 1433116800.123456789
|
250
|
+
notice($o1 > $o3)
|
251
|
+
notice($o1 >= $o3)
|
252
|
+
notice($o1 < $o3)
|
253
|
+
notice($o1 <= $o3)
|
254
|
+
notice($o2 > $o3)
|
255
|
+
notice($o2 < $o3)
|
256
|
+
notice($o2 >= $o3)
|
257
|
+
notice($o2 <= $o3)
|
258
|
+
CODE
|
259
|
+
expect(eval_and_collect_notices(code)).to eq(%w(false false true true false false true true))
|
260
|
+
end
|
261
|
+
|
262
|
+
it 'float that represents seconds with fraction since epoch can be compared to it' do
|
263
|
+
code = <<-CODE
|
264
|
+
$o1 = 1430438400.123456789
|
265
|
+
$o2 = 1433116800.123456789
|
266
|
+
$o3 = Timestamp('2015-06-01T00:00:00.123456789 UTC')
|
267
|
+
notice($o1 > $o3)
|
268
|
+
notice($o1 >= $o3)
|
269
|
+
notice($o1 < $o3)
|
270
|
+
notice($o1 <= $o3)
|
271
|
+
notice($o2 > $o3)
|
272
|
+
notice($o2 < $o3)
|
273
|
+
notice($o2 >= $o3)
|
274
|
+
notice($o2 <= $o3)
|
275
|
+
CODE
|
276
|
+
expect(eval_and_collect_notices(code)).to eq(%w(false false true true false false true true))
|
277
|
+
end
|
278
|
+
|
279
|
+
it 'is equal to float that represents seconds with fraction since epoch' do
|
280
|
+
code = <<-CODE
|
281
|
+
$o1 = Timestamp('2015-06-01T00:00:00.123456789 UTC')
|
282
|
+
$o2 = 1433116800.123456789
|
283
|
+
notice($o1 == $o2)
|
284
|
+
notice($o1 != $o2)
|
285
|
+
notice(Float($o1) == $o2)
|
286
|
+
CODE
|
287
|
+
expect(eval_and_collect_notices(code)).to eq(%w(true false true))
|
288
|
+
end
|
289
|
+
|
290
|
+
it 'float that represents seconds with fraction is equal to it' do
|
291
|
+
code = <<-CODE
|
292
|
+
$o1 = 1433116800.123456789
|
293
|
+
$o2 = Timestamp('2015-06-01T00:00:00.123456789 UTC')
|
294
|
+
notice($o1 == $o2)
|
295
|
+
notice($o1 != $o2)
|
296
|
+
notice($o1 == Float($o2))
|
297
|
+
CODE
|
298
|
+
expect(eval_and_collect_notices(code)).to eq(%w(true false true))
|
299
|
+
end
|
300
|
+
|
301
|
+
it 'it cannot be compared to a Timespan' do
|
302
|
+
code = <<-CODE
|
303
|
+
notice(Timestamp() > Timespan(3))
|
304
|
+
CODE
|
305
|
+
expect { eval_and_collect_notices(code) }.to raise_error(Puppet::Error, /Timestamps are only comparable to Timestamps, Integers, and Floats/)
|
306
|
+
end
|
307
|
+
end
|
308
|
+
end
|
309
|
+
end
|
310
|
+
end
|
311
|
+
end
|