puppet 4.3.0 → 4.4.0
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.
- checksums.yaml +7 -0
- data/COMMITTERS.md +2 -2
- data/CONTRIBUTING.md +6 -6
- data/LICENSE +1 -1
- data/README.md +8 -9
- data/conf/auth.conf +2 -2
- data/ext/README.environment +1 -1
- data/ext/build_defaults.yaml +1 -1
- data/ext/debian/README.source +1 -1
- data/ext/debian/control +1 -1
- data/ext/debian/copyright +4 -4
- data/ext/debian/puppetmaster.README.debian +11 -9
- data/ext/emacs/puppet-mode.el +1 -1
- data/ext/envpuppet +2 -2
- data/ext/ips/puppetagent.xml +1 -1
- data/ext/ips/puppetmaster.xml +1 -1
- data/ext/project_data.yaml +8 -0
- data/ext/puppet-test +3 -3
- data/ext/rack/example-passenger-vhost.conf +1 -1
- data/ext/redhat/puppet.spec.erb +2 -2
- data/ext/regexp_nodes/regexp_nodes.rb +1 -1
- data/ext/solaris/pkginfo +1 -1
- data/ext/solaris/smf/puppet.xml +1 -1
- data/ext/suse/puppet.spec +2 -2
- data/ext/upload_facts.rb +1 -1
- data/ext/windows/puppet_interactive.bat +6 -0
- data/ext/windows/puppet_shell.bat +9 -0
- data/ext/windows/run_puppet_interactive.bat +9 -0
- data/ext/yaml_nodes.rb +1 -1
- data/install.rb +30 -20
- data/lib/hiera/scope.rb +1 -1
- data/lib/puppet/agent.rb +1 -1
- data/lib/puppet/application/agent.rb +4 -2
- data/lib/puppet/application/apply.rb +7 -4
- data/lib/puppet/application/cert.rb +1 -1
- data/lib/puppet/application/device.rb +1 -1
- data/lib/puppet/application/filebucket.rb +1 -1
- data/lib/puppet/application/inspect.rb +1 -1
- data/lib/puppet/application/lookup.rb +45 -47
- data/lib/puppet/application/master.rb +2 -2
- data/lib/puppet/application/resource.rb +1 -1
- data/lib/puppet/configurer.rb +100 -22
- data/lib/puppet/data_providers/hiera_config.rb +28 -3
- data/lib/puppet/data_providers/hiera_interpolate.rb +30 -15
- data/lib/puppet/data_providers/hiera_support.rb +1 -1
- data/lib/puppet/data_providers/json_data_provider_factory.rb +2 -2
- data/lib/puppet/data_providers/lookup_adapter.rb +73 -26
- data/lib/puppet/data_providers/yaml_data_provider_factory.rb +2 -2
- data/lib/puppet/defaults.rb +69 -22
- data/lib/puppet/environments.rb +3 -1
- data/lib/puppet/face/config.rb +1 -1
- data/lib/puppet/face/epp.rb +1 -1
- data/lib/puppet/face/help/man.erb +1 -1
- data/lib/puppet/face/module/install.rb +6 -6
- data/lib/puppet/face/parser.rb +12 -9
- data/lib/puppet/face/status.rb +2 -1
- data/lib/puppet/feature/cfpropertylist.rb +3 -0
- data/lib/puppet/feature/telnet.rb +9 -0
- data/lib/puppet/file_serving/http_metadata.rb +46 -0
- data/lib/puppet/file_serving/metadata.rb +18 -2
- data/lib/puppet/file_serving/terminus_selector.rb +2 -0
- data/lib/puppet/file_system/file_impl.rb +2 -2
- data/lib/puppet/file_system/memory_impl.rb +1 -1
- data/lib/puppet/file_system/uniquefile.rb +1 -1
- data/lib/puppet/file_system.rb +2 -2
- data/lib/puppet/forge/repository.rb +1 -31
- data/lib/puppet/forge.rb +1 -1
- data/lib/puppet/functions/assert_type.rb +9 -9
- data/lib/puppet/functions/each.rb +5 -13
- data/lib/puppet/functions/filter.rb +5 -14
- data/lib/puppet/functions/lookup.rb +126 -150
- data/lib/puppet/functions/map.rb +6 -14
- data/lib/puppet/functions/match.rb +1 -0
- data/lib/puppet/functions/reduce.rb +5 -13
- data/lib/puppet/functions/reverse_each.rb +82 -0
- data/lib/puppet/functions/scanf.rb +15 -18
- data/lib/puppet/functions/slice.rb +22 -36
- data/lib/puppet/functions/split.rb +2 -2
- data/lib/puppet/functions/step.rb +88 -0
- data/lib/puppet/functions/type.rb +70 -0
- data/lib/puppet/functions.rb +45 -6
- data/lib/puppet/graph/rb_tree_map.rb +1 -1
- data/lib/puppet/indirector/catalog/compiler.rb +188 -5
- data/lib/puppet/indirector/facts/facter.rb +2 -13
- data/lib/puppet/indirector/file_content/http.rb +15 -0
- data/lib/puppet/indirector/file_metadata/http.rb +27 -0
- data/lib/puppet/indirector/generic_http.rb +16 -0
- data/lib/puppet/indirector/hiera.rb +3 -1
- data/lib/puppet/indirector/indirection.rb +6 -2
- data/lib/puppet/indirector/json.rb +2 -2
- data/lib/puppet/indirector/node/exec.rb +1 -1
- data/lib/puppet/indirector/node/ldap.rb +1 -1
- data/lib/puppet/indirector/rest.rb +2 -1
- data/lib/puppet/info_service/class_information_service.rb +13 -12
- data/lib/puppet/loaders.rb +1 -0
- data/lib/puppet/module.rb +6 -2
- data/lib/puppet/module_tool/skeleton/templates/generator/Gemfile +9 -2
- data/lib/puppet/module_tool/skeleton/templates/generator/spec/classes/init_spec.rb.erb +1 -1
- data/lib/puppet/module_tool/skeleton/templates/generator/tests/init.pp.erb +2 -2
- data/lib/puppet/module_tool/tar/mini.rb +3 -3
- data/lib/puppet/network/http/pool.rb +9 -0
- data/lib/puppet/node/environment.rb +11 -2
- data/lib/puppet/node.rb +11 -2
- data/lib/puppet/parser/ast/pops_bridge.rb +19 -22
- data/lib/puppet/parser/compiler.rb +4 -11
- data/lib/puppet/parser/environment_compiler.rb +0 -1
- data/lib/puppet/parser/functions/fqdn_rand.rb +1 -1
- data/lib/puppet/parser/functions/inline_template.rb +1 -1
- data/lib/puppet/parser/functions/lookup.rb +128 -149
- data/lib/puppet/parser/functions/map.rb +1 -1
- data/lib/puppet/parser/functions/match.rb +1 -0
- data/lib/puppet/parser/functions/scanf.rb +15 -26
- data/lib/puppet/parser/functions/slice.rb +17 -24
- data/lib/puppet/parser/functions/split.rb +1 -1
- data/lib/puppet/parser/functions.rb +28 -16
- data/lib/puppet/parser/resource.rb +19 -17
- data/lib/puppet/parser/scope.rb +176 -5
- data/lib/puppet/plugins/data_providers/data_provider.rb +56 -14
- data/lib/puppet/pops/adaptable.rb +4 -1
- data/lib/puppet/pops/adapters.rb +80 -12
- data/lib/puppet/pops/binder/binder.rb +21 -17
- data/lib/puppet/pops/binder/binder_issues.rb +8 -6
- data/lib/puppet/pops/binder/bindings_checker.rb +12 -8
- data/lib/puppet/pops/binder/bindings_composer.rb +16 -12
- data/lib/puppet/pops/binder/bindings_factory.rb +108 -104
- data/lib/puppet/pops/binder/bindings_model.rb +49 -47
- data/lib/puppet/pops/binder/config/diagnostic_producer.rb +10 -6
- data/lib/puppet/pops/binder/injector.rb +53 -48
- data/lib/puppet/pops/binder/key_factory.rb +10 -6
- data/lib/puppet/pops/binder/producers.rb +67 -62
- data/lib/puppet/pops/evaluator/access_operator.rb +98 -96
- data/lib/puppet/pops/evaluator/closure.rb +122 -106
- data/lib/puppet/pops/evaluator/collector_transformer.rb +34 -14
- data/lib/puppet/pops/evaluator/collectors/exported_collector.rb +0 -1
- data/lib/puppet/pops/evaluator/compare_operator.rb +13 -9
- data/lib/puppet/pops/evaluator/epp_evaluator.rb +9 -8
- data/lib/puppet/pops/evaluator/evaluator_impl.rb +78 -76
- data/lib/puppet/pops/evaluator/json_strict_literal_evaluator.rb +85 -0
- data/lib/puppet/pops/evaluator/relationship_operator.rb +13 -11
- data/lib/puppet/pops/evaluator/runtime3_converter.rb +5 -0
- data/lib/puppet/pops/evaluator/runtime3_support.rb +47 -42
- data/lib/puppet/pops/functions/function.rb +6 -2
- data/lib/puppet/pops/issue_reporter.rb +6 -4
- data/lib/puppet/pops/issues.rb +50 -11
- data/lib/puppet/pops/loader/base_loader.rb +1 -1
- data/lib/puppet/pops/loader/loader.rb +1 -1
- data/lib/puppet/pops/loader/loader_paths.rb +15 -0
- data/lib/puppet/pops/loader/module_loaders.rb +17 -13
- data/lib/puppet/pops/loader/puppet_function_instantiator.rb +18 -13
- data/lib/puppet/pops/loader/ruby_function_instantiator.rb +16 -3
- data/lib/puppet/pops/loader/type_definition_instantiator.rb +55 -0
- data/lib/puppet/pops/loaders.rb +51 -9
- data/lib/puppet/pops/lookup/explainer.rb +73 -3
- data/lib/puppet/pops/lookup/invocation.rb +21 -19
- data/lib/puppet/pops/lookup.rb +17 -12
- data/lib/puppet/pops/merge_strategy.rb +16 -19
- data/lib/puppet/pops/model/factory.rb +179 -157
- data/lib/puppet/pops/model/model.rb +17 -8
- data/lib/puppet/pops/model/model_label_provider.rb +14 -7
- data/lib/puppet/pops/model/model_meta.rb +17 -0
- data/lib/puppet/pops/model/model_tree_dumper.rb +8 -0
- data/lib/puppet/pops/parser/egrammar.ra +38 -14
- data/lib/puppet/pops/parser/eparser.rb +1353 -1276
- data/lib/puppet/pops/parser/epp_support.rb +11 -7
- data/lib/puppet/pops/parser/evaluating_parser.rb +17 -13
- data/lib/puppet/pops/parser/heredoc_support.rb +15 -11
- data/lib/puppet/pops/parser/lexer2.rb +428 -403
- data/lib/puppet/pops/parser/lexer_support.rb +85 -7
- data/lib/puppet/pops/parser/locator.rb +21 -0
- data/lib/puppet/pops/parser/parser_support.rb +19 -16
- data/lib/puppet/pops/parser/slurp_support.rb +16 -8
- data/lib/puppet/pops/types/class_loader.rb +23 -19
- data/lib/puppet/pops/types/enumeration.rb +9 -26
- data/lib/puppet/pops/types/iterable.rb +308 -0
- data/lib/puppet/pops/types/recursion_guard.rb +82 -0
- data/lib/puppet/pops/types/type_acceptor.rb +25 -0
- data/lib/puppet/pops/types/type_asserter.rb +10 -9
- data/lib/puppet/pops/types/type_calculator.rb +140 -387
- data/lib/puppet/pops/types/type_factory.rb +91 -57
- data/lib/puppet/pops/types/type_formatter.rb +334 -0
- data/lib/puppet/pops/types/type_mismatch_describer.rb +226 -59
- data/lib/puppet/pops/types/type_parser.rb +159 -112
- data/lib/puppet/pops/types/types.rb +2057 -1253
- data/lib/puppet/pops/utils.rb +11 -10
- data/lib/puppet/pops/validation/checker4_0.rb +115 -63
- data/lib/puppet/pops/validation/validator_factory_4_0.rb +8 -4
- data/lib/puppet/pops/validation.rb +11 -9
- data/lib/puppet/pops.rb +0 -8
- data/lib/puppet/provider/aixobject.rb +1 -1
- data/lib/puppet/provider/augeas/augeas.rb +1 -1
- data/lib/puppet/provider/cron/crontab.rb +1 -1
- data/lib/puppet/provider/exec/windows.rb +1 -1
- data/lib/puppet/provider/group/windows_adsi.rb +2 -2
- data/lib/puppet/provider/macauthorization/macauthorization.rb +10 -9
- data/lib/puppet/provider/nameservice/directoryservice.rb +35 -50
- data/lib/puppet/provider/package/appdmg.rb +3 -2
- data/lib/puppet/provider/package/dnf.rb +1 -1
- data/lib/puppet/provider/package/pip.rb +16 -9
- data/lib/puppet/provider/package/pip3.rb +1 -1
- data/lib/puppet/provider/package/pkg.rb +1 -1
- data/lib/puppet/provider/package/pkgdmg.rb +3 -2
- data/lib/puppet/provider/package/pkgng.rb +13 -4
- data/lib/puppet/provider/package/rpm.rb +0 -1
- data/lib/puppet/provider/package/windows.rb +1 -1
- data/lib/puppet/provider/package/yum.rb +2 -2
- data/lib/puppet/provider/package/zypper.rb +19 -0
- data/lib/puppet/provider/service/debian.rb +7 -20
- data/lib/puppet/provider/service/init.rb +7 -0
- data/lib/puppet/provider/service/launchd.rb +6 -12
- data/lib/puppet/provider/service/systemd.rb +9 -2
- data/lib/puppet/provider/sshkey/parsed.rb +1 -1
- data/lib/puppet/provider/user/aix.rb +1 -1
- data/lib/puppet/provider/user/directoryservice.rb +33 -58
- data/lib/puppet/provider/user/windows_adsi.rb +2 -2
- data/lib/puppet/provider/yumrepo/inifile.rb +6 -3
- data/lib/puppet/provider/zfs/zfs.rb +1 -1
- data/lib/puppet/provider/zpool/zpool.rb +1 -1
- data/lib/puppet/reference/configuration.rb +1 -1
- data/lib/puppet/reference/providers.rb +1 -1
- data/lib/puppet/resource/capability_finder.rb +20 -13
- data/lib/puppet/resource/catalog.rb +60 -3
- data/lib/puppet/resource/status.rb +11 -2
- data/lib/puppet/resource/type.rb +33 -42
- data/lib/puppet/resource.rb +15 -12
- data/lib/puppet/settings/config_file.rb +1 -1
- data/lib/puppet/settings/environment_conf.rb +13 -5
- data/lib/puppet/settings.rb +1 -1
- data/lib/puppet/ssl/certificate_factory.rb +3 -3
- data/lib/puppet/ssl/certificate_request.rb +4 -4
- data/lib/puppet/ssl/certificate_signer.rb +1 -1
- data/lib/puppet/ssl/validator/default_validator.rb +1 -1
- data/lib/puppet/test/test_helper.rb +16 -4
- data/lib/puppet/transaction/additional_resource_generator.rb +23 -5
- data/lib/puppet/transaction/report.rb +31 -1
- data/lib/puppet/transaction/resource_harness.rb +0 -25
- data/lib/puppet/transaction.rb +15 -2
- data/lib/puppet/type/augeas.rb +1 -1
- data/lib/puppet/type/cron.rb +12 -12
- data/lib/puppet/type/file/checksum_value.rb +53 -0
- data/lib/puppet/type/file/content.rb +26 -111
- data/lib/puppet/type/file/data_sync.rb +84 -0
- data/lib/puppet/type/file/ensure.rb +17 -14
- data/lib/puppet/type/file/selcontext.rb +1 -1
- data/lib/puppet/type/file/source.rb +103 -18
- data/lib/puppet/type/file.rb +91 -39
- data/lib/puppet/type/filebucket.rb +1 -1
- data/lib/puppet/type/group.rb +6 -2
- data/lib/puppet/type/interface.rb +8 -3
- data/lib/puppet/type/macauthorization.rb +1 -1
- data/lib/puppet/type/package.rb +6 -0
- data/lib/puppet/type/schedule.rb +1 -1
- data/lib/puppet/type/stage.rb +1 -1
- data/lib/puppet/type/user.rb +19 -17
- data/lib/puppet/type/yumrepo.rb +20 -0
- data/lib/puppet/type.rb +11 -11
- data/lib/puppet/util/autoload.rb +16 -11
- data/lib/puppet/util/checksums.rb +74 -31
- data/lib/puppet/util/execution.rb +1 -1
- data/lib/puppet/util/http_proxy.rb +72 -0
- data/lib/puppet/util/log.rb +2 -0
- data/lib/puppet/util/logging.rb +43 -1
- data/lib/puppet/util/monkey_patches.rb +2 -2
- data/lib/puppet/util/multi_match.rb +51 -0
- data/lib/puppet/util/network_device/cisco/device.rb +10 -2
- data/lib/puppet/util/network_device/cisco/interface.rb +21 -8
- data/lib/puppet/util/network_device/transport/ssh.rb +7 -3
- data/lib/puppet/util/network_device/transport/telnet.rb +39 -36
- data/lib/puppet/util/plist.rb +130 -0
- data/lib/puppet/util/resource_template.rb +1 -1
- data/lib/puppet/util/run_mode.rb +2 -2
- data/lib/puppet/util/skip_tags.rb +9 -0
- data/lib/puppet/util/windows/access_control_entry.rb +1 -1
- data/lib/puppet/util/windows/access_control_list.rb +3 -3
- data/lib/puppet/util/windows/adsi.rb +65 -28
- data/lib/puppet/util/windows/api_types.rb +24 -18
- data/lib/puppet/util/windows/com.rb +3 -3
- data/lib/puppet/util/windows/error.rb +1 -1
- data/lib/puppet/util/windows/file.rb +8 -8
- data/lib/puppet/util/windows/principal.rb +190 -0
- data/lib/puppet/util/windows/process.rb +78 -11
- data/lib/puppet/util/windows/registry.rb +22 -16
- data/lib/puppet/util/windows/root_certs.rb +5 -5
- data/lib/puppet/util/windows/security.rb +33 -35
- data/lib/puppet/util/windows/security_descriptor.rb +1 -1
- data/lib/puppet/util/windows/sid.rb +84 -15
- data/lib/puppet/util/windows/taskscheduler.rb +15 -15
- data/lib/puppet/util/windows/user.rb +10 -10
- data/lib/puppet/util/windows.rb +4 -0
- data/lib/puppet/util.rb +109 -22
- data/lib/puppet/vendor/deep_merge/deep_merge.gemspec +1 -1
- data/lib/puppet/vendor/pathspec/LICENSE +2 -2
- data/lib/puppet/vendor/pathspec/README.md +1 -1
- data/lib/puppet/vendor/rgen/README.rdoc +1 -1
- data/lib/puppet/vendor/semantic/lib/semantic/dependency/module_release.rb +14 -0
- data/lib/puppet/version.rb +1 -1
- data/lib/puppet.rb +17 -0
- data/lib/semver.rb +17 -1
- data/man/man5/puppet.conf.5 +12 -12
- data/man/man8/extlookup2hiera.8 +1 -1
- data/man/man8/puppet-agent.8 +2 -2
- data/man/man8/puppet-apply.8 +2 -2
- data/man/man8/puppet-ca.8 +2 -2
- data/man/man8/puppet-catalog.8 +2 -2
- data/man/man8/puppet-cert.8 +2 -2
- data/man/man8/puppet-certificate.8 +2 -2
- data/man/man8/puppet-certificate_request.8 +2 -2
- data/man/man8/puppet-certificate_revocation_list.8 +2 -2
- data/man/man8/puppet-config.8 +3 -3
- data/man/man8/puppet-describe.8 +1 -1
- data/man/man8/puppet-device.8 +1 -1
- data/man/man8/puppet-doc.8 +1 -1
- data/man/man8/puppet-epp.8 +2 -2
- data/man/man8/puppet-facts.8 +2 -2
- data/man/man8/puppet-file.8 +2 -2
- data/man/man8/puppet-filebucket.8 +2 -2
- data/man/man8/puppet-help.8 +2 -2
- data/man/man8/puppet-inspect.8 +2 -2
- data/man/man8/puppet-key.8 +2 -2
- data/man/man8/puppet-man.8 +2 -2
- data/man/man8/puppet-master.8 +2 -2
- data/man/man8/puppet-module.8 +9 -9
- data/man/man8/puppet-node.8 +2 -2
- data/man/man8/puppet-parser.8 +2 -2
- data/man/man8/puppet-plugin.8 +2 -2
- data/man/man8/puppet-report.8 +2 -2
- data/man/man8/puppet-resource.8 +2 -2
- data/man/man8/puppet-resource_type.8 +2 -2
- data/man/man8/puppet-status.8 +3 -3
- data/man/man8/puppet.8 +1 -1
- data/spec/fixtures/module.tar.gz +0 -0
- data/spec/fixtures/unit/application/environments/production/data/common.yaml +4 -0
- data/spec/fixtures/unit/application/environments/production/manifests/site.pp +1 -0
- data/spec/fixtures/unit/application/environments/puppet_func_provider/environment.conf +1 -0
- data/spec/fixtures/unit/application/environments/puppet_func_provider/functions/data.pp +10 -0
- data/spec/fixtures/unit/application/environments/puppet_func_provider/manifests/site.pp +1 -0
- data/spec/fixtures/unit/data_providers/environments/hiera_module_config/data/common.yaml +4 -0
- data/spec/fixtures/unit/data_providers/environments/hiera_module_config/data/specific.yaml +4 -0
- data/spec/fixtures/unit/data_providers/environments/hiera_module_config/hiera.yaml +7 -0
- data/spec/fixtures/unit/data_providers/environments/hiera_modules/data/common.yaml +4 -0
- data/spec/fixtures/unit/data_providers/environments/hiera_modules/data/specific.yaml +4 -0
- data/spec/fixtures/unit/data_providers/environments/hiera_modules/environment.conf +2 -0
- data/spec/fixtures/unit/data_providers/environments/hiera_modules/hiera.yaml +7 -0
- data/spec/fixtures/unit/data_providers/environments/hiera_modules/manifests/site.pp +1 -0
- data/spec/fixtures/unit/data_providers/environments/hiera_modules/modules/one/data/common.yaml +6 -0
- data/spec/fixtures/unit/data_providers/environments/hiera_modules/modules/one/hiera.yaml +5 -0
- data/spec/fixtures/unit/data_providers/environments/hiera_modules/modules/one/manifests/init.pp +2 -0
- data/spec/fixtures/unit/data_providers/environments/hiera_modules/modules/one/metadata.json +9 -0
- data/spec/fixtures/unit/data_providers/environments/hiera_modules/modules/two/data/common.yaml +4 -0
- data/spec/fixtures/unit/data_providers/environments/hiera_modules/modules/two/hiera.yaml +5 -0
- data/spec/fixtures/unit/data_providers/environments/hiera_modules/modules/two/manifests/init.pp +3 -0
- data/spec/fixtures/unit/data_providers/environments/hiera_modules/modules/two/metadata.json +9 -0
- data/spec/fixtures/unit/functions/lookup/environments/production/modules/bad_data/lib/puppet/functions/bad_data/data.rb +1 -0
- data/spec/fixtures/unit/functions/lookup/environments/production/modules/bad_data/manifests/init.pp +0 -1
- data/spec/fixtures/unit/functions/lookup/environments/production/modules/empty_json/data/empty.json +0 -0
- data/spec/fixtures/unit/functions/lookup/environments/production/modules/empty_json/hiera.yaml +5 -0
- data/spec/fixtures/unit/functions/lookup/environments/production/modules/empty_json/manifests/init.pp +2 -0
- data/spec/fixtures/unit/functions/lookup/environments/production/modules/empty_json/metadata.json +9 -0
- data/spec/fixtures/unit/functions/lookup/environments/production/modules/empty_yaml/data/empty.yaml +1 -0
- data/spec/fixtures/unit/functions/lookup/environments/production/modules/empty_yaml/hiera.yaml +5 -0
- data/spec/fixtures/unit/functions/lookup/environments/production/modules/empty_yaml/manifests/init.pp +2 -0
- data/spec/fixtures/unit/functions/lookup/environments/production/modules/empty_yaml/metadata.json +9 -0
- data/spec/fixtures/unit/functions/lookup/environments/production/modules/hieraprovider/data/first.json +2 -1
- data/spec/fixtures/unit/module/trailing-comma.json +1 -1
- data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/usee/functions/usee_puppet.pp +3 -0
- data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/usee/lib/puppet/functions/usee/usee_ruby.rb +6 -0
- data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/usee/manifests/init.pp +8 -0
- data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/usee/types/zero.pp +1 -0
- data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/usee2/lib/puppet/functions/usee2/callee.rb +5 -0
- data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/user/functions/puppet_calling_puppet.pp +5 -0
- data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/user/functions/puppet_calling_puppet_init.pp +5 -0
- data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/user/functions/puppet_calling_ruby.pp +5 -0
- data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/user/lib/puppet/functions/user/caller2.rb +5 -0
- data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/user/lib/puppet/functions/user/ruby_calling_puppet.rb +5 -0
- data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/user/lib/puppet/functions/user/ruby_calling_puppet_init.rb +5 -0
- data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/user/lib/puppet/functions/user/ruby_calling_ruby.rb +5 -0
- data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/user/manifests/init.pp +81 -0
- data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/{user → modules/user}/metadata.json +2 -1
- data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/user/types/withuseeone.pp +1 -0
- data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/user/types/withuseezero.pp +1 -0
- data/spec/fixtures/unit/provider/package/yum/yum-check-update-broken-notices.txt +187 -0
- data/spec/fixtures/unit/provider/sshkey/parsed/sample_with_blank_lines +8 -0
- data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_md5/should_fetch_if_not_on_the_local_disk.yml +205 -0
- data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_md5/should_not_update_if_content_on_disk_is_up-to-date.yml +213 -0
- data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_md5/should_update_if_content_differs_on_disk.yml +213 -0
- data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_mtime/should_fetch_if_mtime_is_older_on_disk.yml +205 -0
- data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_mtime/should_fetch_if_no_header_specified.yml +197 -0
- data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_mtime/should_fetch_if_not_on_the_local_disk.yml +205 -0
- data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_mtime/should_not_update_if_mtime_is_newer_on_disk.yml +205 -0
- data/spec/integration/defaults_spec.rb +14 -2
- data/spec/integration/file_system/uniquefile_spec.rb +29 -0
- data/spec/integration/module_tool/tar/mini_spec.rb +28 -0
- data/spec/integration/node/environment_spec.rb +13 -0
- data/spec/integration/parser/collection_spec.rb +8 -0
- data/spec/integration/parser/dynamic_scoping_spec.rb +67 -0
- data/spec/integration/parser/parameter_defaults_spec.rb +336 -0
- data/spec/integration/parser/undef_param_spec.rb +8 -0
- data/spec/integration/provider/yumrepo_spec.rb +1 -1
- data/spec/integration/test/test_helper_spec.rb +28 -0
- data/spec/integration/transaction/report_spec.rb +16 -0
- data/spec/integration/transaction_spec.rb +11 -0
- data/spec/integration/type/file_spec.rb +194 -4
- data/spec/integration/type/package_spec.rb +5 -1
- data/spec/integration/type/tidy_spec.rb +21 -9
- data/spec/integration/util/execution_spec.rb +22 -0
- data/spec/integration/util/windows/principal_spec.rb +201 -0
- data/spec/integration/util/windows/process_spec.rb +31 -0
- data/spec/{unit → integration}/util/windows/registry_spec.rb +91 -1
- data/spec/integration/util/windows/security_spec.rb +8 -8
- data/spec/integration/util/windows/user_spec.rb +1 -1
- data/spec/integration/util_spec.rb +49 -27
- data/spec/lib/puppet_spec/compiler.rb +17 -0
- data/spec/lib/puppet_spec/files.rb +2 -2
- data/spec/lib/puppet_spec/pops.rb +13 -0
- data/spec/shared_behaviours/iterative_functions.rb +1 -1
- data/spec/shared_contexts/types_setup.rb +96 -0
- data/spec/unit/agent_spec.rb +1 -0
- data/spec/unit/application/agent_spec.rb +10 -0
- data/spec/unit/application/apply_spec.rb +9 -0
- data/spec/unit/application/lookup_spec.rb +138 -28
- data/spec/unit/configurer/downloader_spec.rb +5 -5
- data/spec/unit/configurer_spec.rb +271 -39
- data/spec/unit/data_providers/hiera_data_provider_spec.rb +182 -5
- data/spec/unit/data_providers/hiera_interpolation_spec.rb +57 -0
- data/spec/unit/defaults_spec.rb +15 -0
- data/spec/unit/environments_spec.rb +24 -4
- data/spec/unit/face/epp_face_spec.rb +2 -2
- data/spec/unit/face/parser_spec.rb +43 -2
- data/spec/unit/file_serving/http_metadata_spec.rb +85 -0
- data/spec/unit/file_serving/metadata_spec.rb +50 -0
- data/spec/unit/file_serving/terminus_selector_spec.rb +12 -2
- data/spec/unit/file_system_spec.rb +26 -0
- data/spec/unit/functions/assert_type_spec.rb +36 -2
- data/spec/unit/functions/defined_spec.rb +2 -2
- data/spec/unit/functions/epp_spec.rb +17 -9
- data/spec/unit/functions/inline_epp_spec.rb +4 -4
- data/spec/unit/functions/lookup_spec.rb +88 -16
- data/spec/unit/functions/regsubst_spec.rb +1 -1
- data/spec/unit/functions/reverse_each_spec.rb +108 -0
- data/spec/unit/functions/step_spec.rb +113 -0
- data/spec/unit/functions/type_spec.rb +35 -0
- data/spec/unit/functions4_spec.rb +62 -6
- data/spec/unit/hiera/scope_spec.rb +5 -2
- data/spec/unit/indirector/catalog/compiler_spec.rb +705 -4
- data/spec/unit/indirector/file_bucket_file/file_spec.rb +1 -1
- data/spec/unit/indirector/indirection_spec.rb +1 -1
- data/spec/unit/indirector/json_spec.rb +1 -1
- data/spec/unit/info_service_spec.rb +94 -32
- data/spec/unit/module_spec.rb +14 -0
- data/spec/unit/module_tool/applications/builder_spec.rb +4 -4
- data/spec/unit/network/authstore_spec.rb +1 -1
- data/spec/unit/network/http/connection_spec.rb +1 -0
- data/spec/unit/network/http/pool_spec.rb +30 -0
- data/spec/unit/node_spec.rb +8 -0
- data/spec/unit/parser/compiler_spec.rb +16 -18
- data/spec/unit/parser/scope_spec.rb +28 -11
- data/spec/unit/pops/evaluator/access_ops_spec.rb +7 -7
- data/spec/unit/pops/evaluator/comparison_ops_spec.rb +3 -0
- data/spec/unit/pops/evaluator/evaluating_parser_spec.rb +8 -2
- data/spec/unit/pops/evaluator/evaluator_rspec_helper.rb +4 -4
- data/spec/unit/pops/evaluator/json_strict_literal_evaluator_spec.rb +63 -0
- data/spec/unit/pops/evaluator/runtime3_converter_spec.rb +6 -0
- data/spec/unit/pops/loaders/dependency_loader_spec.rb +53 -0
- data/spec/unit/pops/loaders/loaders_spec.rb +127 -2
- data/spec/unit/pops/parser/lexer2_spec.rb +118 -3
- data/spec/unit/pops/parser/parse_calls_spec.rb +8 -0
- data/spec/unit/pops/parser/parser_rspec_helper.rb +5 -0
- data/spec/unit/pops/parser/parser_spec.rb +10 -0
- data/spec/unit/pops/parser/source_pos_adapter_spec.rb +26 -0
- data/spec/unit/pops/types/iterable_spec.rb +262 -0
- data/spec/unit/pops/types/recursion_guard_spec.rb +91 -0
- data/spec/unit/pops/types/type_acceptor_spec.rb +105 -0
- data/spec/unit/pops/types/type_asserter_spec.rb +43 -0
- data/spec/unit/pops/types/type_calculator_spec.rb +275 -390
- data/spec/unit/pops/types/type_formatter_spec.rb +280 -0
- data/spec/unit/pops/types/type_mismatch_describer_spec.rb +152 -0
- data/spec/unit/pops/types/type_parser_spec.rb +58 -13
- data/spec/unit/pops/types/types_spec.rb +241 -0
- data/spec/unit/pops/validator/validator_spec.rb +159 -15
- data/spec/unit/provider/cron/parsed_spec.rb +1 -0
- data/spec/unit/provider/group/windows_adsi_spec.rb +8 -8
- data/spec/unit/provider/macauthorization_spec.rb +5 -2
- data/spec/unit/provider/nameservice/directoryservice_spec.rb +14 -19
- data/spec/unit/provider/package/appdmg_spec.rb +3 -3
- data/spec/unit/provider/package/dnf_spec.rb +16 -0
- data/spec/unit/provider/package/pip3_spec.rb +60 -42
- data/spec/unit/provider/package/pip_spec.rb +88 -47
- data/spec/unit/provider/package/pkgdmg_spec.rb +18 -9
- data/spec/unit/provider/package/pkgng_spec.rb +4 -2
- data/spec/unit/provider/package/rpm_spec.rb +2 -25
- data/spec/unit/provider/package/yum_spec.rb +12 -1
- data/spec/unit/provider/package/zypper_spec.rb +14 -0
- data/spec/unit/provider/service/debian_spec.rb +6 -24
- data/spec/unit/provider/service/init_spec.rb +11 -1
- data/spec/unit/provider/service/launchd_spec.rb +18 -25
- data/spec/unit/provider/service/systemd_spec.rb +25 -12
- data/spec/unit/provider/service/upstart_spec.rb +57 -0
- data/spec/unit/provider/sshkey/parsed_spec.rb +20 -19
- data/spec/unit/provider/user/directoryservice_spec.rb +40 -59
- data/spec/unit/provider/user/windows_adsi_spec.rb +5 -5
- data/spec/unit/provider/yumrepo/inifile_spec.rb +16 -0
- data/spec/unit/resource/capability_finder_spec.rb +28 -15
- data/spec/unit/resource/catalog_spec.rb +33 -1
- data/spec/unit/resource/type_spec.rb +149 -7
- data/spec/unit/resource_spec.rb +99 -50
- data/spec/unit/settings/environment_conf_spec.rb +18 -1
- data/spec/unit/ssl/certificate_revocation_list_spec.rb +3 -3
- data/spec/unit/transaction/report_spec.rb +27 -0
- data/spec/unit/transaction/resource_harness_spec.rb +0 -47
- data/spec/unit/transaction_spec.rb +5 -0
- data/spec/unit/type/file/checksum_spec.rb +6 -0
- data/spec/unit/type/file/checksum_value_spec.rb +286 -0
- data/spec/unit/type/file/content_spec.rb +12 -193
- data/spec/unit/type/file/source_spec.rb +211 -119
- data/spec/unit/type/file_spec.rb +133 -34
- data/spec/unit/type/interface_spec.rb +32 -0
- data/spec/unit/type/macauthorization_spec.rb +4 -1
- data/spec/unit/type/yumrepo_spec.rb +2 -2
- data/spec/unit/util/filetype_spec.rb +1 -1
- data/spec/unit/util/http_proxy_spec.rb +2 -2
- data/spec/unit/util/log/destinations_spec.rb +0 -2
- data/spec/unit/util/logging_spec.rb +69 -0
- data/spec/unit/util/multi_match_spec.rb +39 -0
- data/spec/unit/util/network_device/cisco/device_spec.rb +253 -216
- data/spec/unit/util/network_device/transport/telnet_spec.rb +60 -58
- data/spec/unit/util/plist_spec.rb +110 -0
- data/spec/unit/util/resource_template_spec.rb +2 -2
- data/spec/unit/util/run_mode_spec.rb +27 -3
- data/spec/unit/util/windows/adsi_spec.rb +46 -38
- data/spec/unit/util/windows/api_types_spec.rb +42 -0
- data/spec/unit/util/windows/security_descriptor_spec.rb +3 -3
- data/spec/unit/util/windows/sid_spec.rb +48 -11
- data/spec/unit/util_spec.rb +123 -13
- data/tasks/cfpropertylist.rake +15 -0
- metadata +3342 -3195
- data/lib/puppet/vendor/load_plist.rb +0 -1
- data/lib/puppet/vendor/plist/CHANGELOG +0 -82
- data/lib/puppet/vendor/plist/MIT-LICENSE +0 -21
- data/lib/puppet/vendor/plist/PUPPET_README.md +0 -6
- data/lib/puppet/vendor/plist/README +0 -36
- data/lib/puppet/vendor/plist/Rakefile +0 -144
- data/lib/puppet/vendor/plist/docs/USAGE +0 -104
- data/lib/puppet/vendor/plist/docs/jamis-template.rb +0 -591
- data/lib/puppet/vendor/plist/lib/plist/generator.rb +0 -224
- data/lib/puppet/vendor/plist/lib/plist/parser.rb +0 -225
- data/lib/puppet/vendor/plist/lib/plist.rb +0 -22
- data/lib/puppet/vendor/plist/test/assets/AlbumData.xml +0 -203
- data/lib/puppet/vendor/plist/test/assets/Cookies.plist +0 -104
- data/lib/puppet/vendor/plist/test/assets/commented.plist +0 -9
- data/lib/puppet/vendor/plist/test/assets/example_data.bin +0 -0
- data/lib/puppet/vendor/plist/test/assets/example_data.jpg +0 -0
- data/lib/puppet/vendor/plist/test/assets/example_data.plist +0 -259
- data/lib/puppet/vendor/plist/test/assets/test_data_elements.plist +0 -24
- data/lib/puppet/vendor/plist/test/assets/test_empty_key.plist +0 -13
- data/lib/puppet/vendor/plist/test/test_data_elements.rb +0 -115
- data/lib/puppet/vendor/plist/test/test_generator.rb +0 -59
- data/lib/puppet/vendor/plist/test/test_generator_basic_types.rb +0 -58
- data/lib/puppet/vendor/plist/test/test_generator_collections.rb +0 -82
- data/lib/puppet/vendor/plist/test/test_parser.rb +0 -90
- /data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/{usee → modules/usee}/lib/puppet/functions/usee/callee.rb +0 -0
- /data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/{user → modules/user}/lib/puppet/functions/user/caller.rb +0 -0
|
@@ -1,84 +1,86 @@
|
|
|
1
1
|
#! /usr/bin/env ruby
|
|
2
2
|
require 'spec_helper'
|
|
3
3
|
|
|
4
|
-
|
|
4
|
+
if Puppet.features.telnet?
|
|
5
|
+
require 'puppet/util/network_device/transport/telnet'
|
|
5
6
|
|
|
6
|
-
describe Puppet::Util::NetworkDevice::Transport::Telnet do
|
|
7
|
+
describe Puppet::Util::NetworkDevice::Transport::Telnet do
|
|
7
8
|
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
it "should not handle login through the transport" do
|
|
14
|
-
expect(@transport).not_to be_handles_login
|
|
15
|
-
end
|
|
16
|
-
|
|
17
|
-
it "should not open any files" do
|
|
18
|
-
File.expects(:open).never
|
|
19
|
-
@transport.host = "localhost"
|
|
20
|
-
@transport.port = 23
|
|
21
|
-
|
|
22
|
-
@transport.connect
|
|
23
|
-
end
|
|
9
|
+
before(:each) do
|
|
10
|
+
TCPSocket.stubs(:open).returns stub_everything('tcp')
|
|
11
|
+
@transport = Puppet::Util::NetworkDevice::Transport::Telnet.new()
|
|
12
|
+
end
|
|
24
13
|
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
@transport.port = 23
|
|
14
|
+
it "should not handle login through the transport" do
|
|
15
|
+
expect(@transport).not_to be_handles_login
|
|
16
|
+
end
|
|
29
17
|
|
|
30
|
-
|
|
31
|
-
|
|
18
|
+
it "should not open any files" do
|
|
19
|
+
File.expects(:open).never
|
|
20
|
+
@transport.host = "localhost"
|
|
21
|
+
@transport.port = 23
|
|
32
22
|
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
Net::Telnet.expects(:new).with { |args| args["Prompt"] == "prompt" }.returns stub_everything
|
|
36
|
-
@transport.host = "localhost"
|
|
37
|
-
@transport.port = 23
|
|
23
|
+
@transport.connect
|
|
24
|
+
end
|
|
38
25
|
|
|
39
|
-
|
|
40
|
-
|
|
26
|
+
it "should connect to the given host and port" do
|
|
27
|
+
Net::Telnet.expects(:new).with { |args| args["Host"] == "localhost" && args["Port"] == 23 }.returns stub_everything
|
|
28
|
+
@transport.host = "localhost"
|
|
29
|
+
@transport.port = 23
|
|
41
30
|
|
|
42
|
-
describe "when connected" do
|
|
43
|
-
before(:each) do
|
|
44
|
-
@telnet = stub_everything 'telnet'
|
|
45
|
-
Net::Telnet.stubs(:new).returns(@telnet)
|
|
46
31
|
@transport.connect
|
|
47
32
|
end
|
|
48
33
|
|
|
49
|
-
it "should
|
|
50
|
-
@
|
|
51
|
-
|
|
34
|
+
it "should connect and specify the default prompt" do
|
|
35
|
+
@transport.default_prompt = "prompt"
|
|
36
|
+
Net::Telnet.expects(:new).with { |args| args["Prompt"] == "prompt" }.returns stub_everything
|
|
37
|
+
@transport.host = "localhost"
|
|
38
|
+
@transport.port = 23
|
|
39
|
+
|
|
40
|
+
@transport.connect
|
|
52
41
|
end
|
|
53
42
|
|
|
54
|
-
describe "when
|
|
55
|
-
|
|
56
|
-
@telnet
|
|
57
|
-
|
|
43
|
+
describe "when connected" do
|
|
44
|
+
before(:each) do
|
|
45
|
+
@telnet = stub_everything 'telnet'
|
|
46
|
+
Net::Telnet.stubs(:new).returns(@telnet)
|
|
47
|
+
@transport.connect
|
|
58
48
|
end
|
|
59
49
|
|
|
60
|
-
it "should
|
|
61
|
-
@telnet.expects(:
|
|
62
|
-
|
|
50
|
+
it "should send line to the telnet session" do
|
|
51
|
+
@telnet.expects(:puts).with("line")
|
|
52
|
+
@transport.send("line")
|
|
63
53
|
end
|
|
64
54
|
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
55
|
+
describe "when expecting output" do
|
|
56
|
+
it "should waitfor output on the telnet session" do
|
|
57
|
+
@telnet.expects(:waitfor).with(/regex/)
|
|
58
|
+
@transport.expect(/regex/)
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
it "should return telnet session output" do
|
|
62
|
+
@telnet.expects(:waitfor).returns("output")
|
|
63
|
+
expect(@transport.expect(/regex/)).to eq("output")
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
it "should yield telnet session output to the given block" do
|
|
67
|
+
@telnet.expects(:waitfor).yields("output")
|
|
68
|
+
@transport.expect(/regex/) { |out| expect(out).to eq("output") }
|
|
69
|
+
end
|
|
68
70
|
end
|
|
69
71
|
end
|
|
70
|
-
end
|
|
71
72
|
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
73
|
+
describe "when closing" do
|
|
74
|
+
before(:each) do
|
|
75
|
+
@telnet = stub_everything 'telnet'
|
|
76
|
+
Net::Telnet.stubs(:new).returns(@telnet)
|
|
77
|
+
@transport.connect
|
|
78
|
+
end
|
|
78
79
|
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
80
|
+
it "should close the telnet session" do
|
|
81
|
+
@telnet.expects(:close)
|
|
82
|
+
@transport.close
|
|
83
|
+
end
|
|
82
84
|
end
|
|
83
85
|
end
|
|
84
86
|
end
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
require 'puppet/util/plist' if Puppet.features.cfpropertylist?
|
|
3
|
+
require 'puppet_spec/files'
|
|
4
|
+
|
|
5
|
+
module Puppet::Util::Plist; end
|
|
6
|
+
|
|
7
|
+
describe Puppet::Util::Plist, :if => Puppet.features.cfpropertylist? do
|
|
8
|
+
include PuppetSpec::Files
|
|
9
|
+
|
|
10
|
+
let(:valid_xml_plist) do
|
|
11
|
+
'<?xml version="1.0" encoding="UTF-8"?>
|
|
12
|
+
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
|
13
|
+
<plist version="1.0">
|
|
14
|
+
<dict>
|
|
15
|
+
<key>LastUsedPrinters</key>
|
|
16
|
+
<array>
|
|
17
|
+
<dict>
|
|
18
|
+
<key>Network</key>
|
|
19
|
+
<string>10.85.132.1</string>
|
|
20
|
+
<key>PrinterID</key>
|
|
21
|
+
<string>baskerville_corp_puppetlabs_net</string>
|
|
22
|
+
</dict>
|
|
23
|
+
<dict>
|
|
24
|
+
<key>Network</key>
|
|
25
|
+
<string>10.14.96.1</string>
|
|
26
|
+
<key>PrinterID</key>
|
|
27
|
+
<string>Statler</string>
|
|
28
|
+
</dict>
|
|
29
|
+
</array>
|
|
30
|
+
</dict>
|
|
31
|
+
</plist>'
|
|
32
|
+
end
|
|
33
|
+
let(:invalid_xml_plist) do
|
|
34
|
+
'<?xml version="1.0" encoding="UTF-8"?>
|
|
35
|
+
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
|
36
|
+
<plist version="1.0">
|
|
37
|
+
<dict>
|
|
38
|
+
<key>LastUsedPrinters</key>
|
|
39
|
+
<array>
|
|
40
|
+
<dict>
|
|
41
|
+
<!-- this comment is --terrible -->
|
|
42
|
+
<key>Network</key>
|
|
43
|
+
<string>10.85.132.1</string>
|
|
44
|
+
<key>PrinterID</key>
|
|
45
|
+
<string>baskerville_corp_puppetlabs_net</string>
|
|
46
|
+
</dict>
|
|
47
|
+
<dict>
|
|
48
|
+
<key>Network</key>
|
|
49
|
+
<string>10.14.96.1</string>
|
|
50
|
+
<key>PrinterID</key>
|
|
51
|
+
<string>Statler</string>
|
|
52
|
+
</dict>
|
|
53
|
+
</array>
|
|
54
|
+
</dict>
|
|
55
|
+
</plist>'
|
|
56
|
+
end
|
|
57
|
+
let(:valid_xml_plist_hash) { {"LastUsedPrinters"=>[{"Network"=>"10.85.132.1", "PrinterID"=>"baskerville_corp_puppetlabs_net"}, {"Network"=>"10.14.96.1", "PrinterID"=>"Statler"}]} }
|
|
58
|
+
let(:plist_path) { file_containing('sample.plist', valid_xml_plist) }
|
|
59
|
+
let(:binary_plist_magic_number) { 'bplist00' }
|
|
60
|
+
let(:bad_xml_doctype) { '<!DOCTYPE plist PUBLIC -//Apple Computer' }
|
|
61
|
+
let(:good_xml_doctype) { '<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">' }
|
|
62
|
+
|
|
63
|
+
describe "#read_plist_file" do
|
|
64
|
+
it "calls #convert_cfpropertylist_to_native_types on a plist object when a valid binary plist is read" do
|
|
65
|
+
subject.stubs(:read_file_with_offset).with(plist_path, 8).returns(binary_plist_magic_number)
|
|
66
|
+
subject.stubs(:new_cfpropertylist).with({:file => plist_path}).returns('plist_object')
|
|
67
|
+
subject.expects(:convert_cfpropertylist_to_native_types).with('plist_object').returns('plist_hash')
|
|
68
|
+
expect(subject.read_plist_file(plist_path)).to eq('plist_hash')
|
|
69
|
+
end
|
|
70
|
+
it "returns a valid hash when a valid XML plist is read" do
|
|
71
|
+
subject.stubs(:read_file_with_offset).with(plist_path, 8).returns('notbinary')
|
|
72
|
+
subject.stubs(:open_file_with_args).with(plist_path, 'r:UTF-8').returns(valid_xml_plist)
|
|
73
|
+
expect(subject.read_plist_file(plist_path)).to eq(valid_xml_plist_hash)
|
|
74
|
+
end
|
|
75
|
+
it "raises a debug message and replaces a bad XML plist doctype should one be encountered" do
|
|
76
|
+
subject.stubs(:read_file_with_offset).with(plist_path, 8).returns('notbinary')
|
|
77
|
+
subject.stubs(:open_file_with_args).with(plist_path, 'r:UTF-8').returns(bad_xml_doctype)
|
|
78
|
+
subject.expects(:new_cfpropertylist).with({:data => good_xml_doctype}).returns('plist_object')
|
|
79
|
+
subject.stubs(:convert_cfpropertylist_to_native_types).with('plist_object').returns('plist_hash')
|
|
80
|
+
Puppet.expects(:debug).with("Had to fix plist with incorrect DOCTYPE declaration: #{plist_path}")
|
|
81
|
+
expect(subject.read_plist_file(plist_path)).to eq('plist_hash')
|
|
82
|
+
end
|
|
83
|
+
it "attempts to read pure xml using plutil when reading an improperly formatted service plist" do
|
|
84
|
+
subject.stubs(:read_file_with_offset).with(plist_path, 8).returns('notbinary')
|
|
85
|
+
subject.stubs(:open_file_with_args).with(plist_path, 'r:UTF-8').returns(invalid_xml_plist)
|
|
86
|
+
Puppet.expects(:debug).with(regexp_matches(/^Failed with CFFormatError/))
|
|
87
|
+
Puppet.expects(:debug).with("Plist #{plist_path} ill-formatted, converting with plutil")
|
|
88
|
+
Puppet::Util::Execution.expects(:execute).with(['/usr/bin/plutil', '-convert', 'xml1', '-o', '/dev/stdout', plist_path],
|
|
89
|
+
{:failonfail => true, :combine => true}).returns(valid_xml_plist)
|
|
90
|
+
expect(subject.read_plist_file(plist_path)).to eq(valid_xml_plist_hash)
|
|
91
|
+
end
|
|
92
|
+
end
|
|
93
|
+
|
|
94
|
+
describe "#parse_plist" do
|
|
95
|
+
it "returns a valid hash when a valid XML plist is provided" do
|
|
96
|
+
expect(subject.parse_plist(valid_xml_plist)).to eq(valid_xml_plist_hash)
|
|
97
|
+
end
|
|
98
|
+
it "raises a debug message and replaces a bad XML plist doctype should one be encountered" do
|
|
99
|
+
subject.expects(:new_cfpropertylist).with({:data => good_xml_doctype}).returns('plist_object')
|
|
100
|
+
subject.stubs(:convert_cfpropertylist_to_native_types).with('plist_object')
|
|
101
|
+
Puppet.expects(:debug).with("Had to fix plist with incorrect DOCTYPE declaration: #{plist_path}")
|
|
102
|
+
subject.parse_plist(bad_xml_doctype, plist_path)
|
|
103
|
+
end
|
|
104
|
+
it "raises a debug message with malformed plist" do
|
|
105
|
+
subject.stubs(:convert_cfpropertylist_to_native_types).with('plist_object')
|
|
106
|
+
Puppet.expects(:debug).with(regexp_matches(/^Failed with CFFormatError/))
|
|
107
|
+
subject.parse_plist("<plist><dict><key>Foo</key>")
|
|
108
|
+
end
|
|
109
|
+
end
|
|
110
|
+
end
|
|
@@ -20,7 +20,7 @@ describe Puppet::Util::ResourceTemplate do
|
|
|
20
20
|
describe "when evaluating" do
|
|
21
21
|
before do
|
|
22
22
|
Puppet::FileSystem.stubs(:exist?).returns true
|
|
23
|
-
|
|
23
|
+
Puppet::FileSystem.stubs(:read).returns "eh"
|
|
24
24
|
|
|
25
25
|
@template = stub 'template', :result => nil
|
|
26
26
|
ERB.stubs(:new).returns @template
|
|
@@ -38,7 +38,7 @@ describe Puppet::Util::ResourceTemplate do
|
|
|
38
38
|
end
|
|
39
39
|
|
|
40
40
|
it "should create a template instance with the contents of the file" do
|
|
41
|
-
|
|
41
|
+
Puppet::FileSystem.expects(:read).with("/my/template", :encoding => 'utf-8').returns "yay"
|
|
42
42
|
ERB.expects(:new).with("yay", 0, "-").returns(@template)
|
|
43
43
|
|
|
44
44
|
@wrapper.stubs :set_resource_variables
|
|
@@ -261,6 +261,30 @@ describe Puppet::Util::RunMode do
|
|
|
261
261
|
end
|
|
262
262
|
end
|
|
263
263
|
end
|
|
264
|
+
|
|
265
|
+
describe "#without_env internal helper with UTF8 characters" do
|
|
266
|
+
let(:varname) { "\u16A0\u16C7\u16BB\u16EB\u16D2\u16E6\u16A6\u16EB\u16A0\u16B1\u16A9\u16A0\u16A2\u16B1\u16EB\u16A0\u16C1\u16B1\u16AA\u16EB\u16B7\u16D6\u16BB\u16B9\u16E6\u16DA\u16B3\u16A2\u16D7" }
|
|
267
|
+
let(:rune_utf8) { "\u16A0\u16C7\u16BB\u16EB\u16D2\u16E6\u16A6\u16EB\u16A0\u16B1\u16A9\u16A0\u16A2\u16B1\u16EB\u16A0\u16C1\u16B1\u16AA\u16EB\u16B7\u16D6\u16BB\u16B9\u16E6\u16DA\u16B3\u16A2\u16D7" }
|
|
268
|
+
|
|
269
|
+
before do
|
|
270
|
+
Puppet::Util::Windows::Process.set_environment_variable(varname, rune_utf8)
|
|
271
|
+
end
|
|
272
|
+
|
|
273
|
+
it "removes environment variables within the block with UTF8 name" do
|
|
274
|
+
without_env(varname) do
|
|
275
|
+
expect(ENV[varname]).to be(nil)
|
|
276
|
+
end
|
|
277
|
+
end
|
|
278
|
+
|
|
279
|
+
it "restores UTF8 characters in environment variable values" do
|
|
280
|
+
without_env(varname) do
|
|
281
|
+
Puppet::Util::Windows::Process.set_environment_variable(varname, 'bad value')
|
|
282
|
+
end
|
|
283
|
+
|
|
284
|
+
envhash = Puppet::Util::Windows::Process.get_environment_strings
|
|
285
|
+
expect(envhash[varname]).to eq(rune_utf8)
|
|
286
|
+
end
|
|
287
|
+
end
|
|
264
288
|
end
|
|
265
289
|
|
|
266
290
|
def as_root
|
|
@@ -274,11 +298,11 @@ describe Puppet::Util::RunMode do
|
|
|
274
298
|
end
|
|
275
299
|
|
|
276
300
|
def without_env(name, &block)
|
|
277
|
-
saved =
|
|
278
|
-
|
|
301
|
+
saved = Puppet::Util.get_env(name)
|
|
302
|
+
Puppet::Util.set_env(name, nil)
|
|
279
303
|
yield
|
|
280
304
|
ensure
|
|
281
|
-
|
|
305
|
+
Puppet::Util.set_env(name, saved)
|
|
282
306
|
end
|
|
283
307
|
|
|
284
308
|
def without_home(&block)
|
|
@@ -40,16 +40,16 @@ describe Puppet::Util::Windows::ADSI, :if => Puppet.features.microsoft_windows?
|
|
|
40
40
|
end
|
|
41
41
|
|
|
42
42
|
describe ".sid_uri" do
|
|
43
|
-
it "should raise an error when the input is not a SID
|
|
43
|
+
it "should raise an error when the input is not a SID Principal" do
|
|
44
44
|
[Object.new, {}, 1, :symbol, '', nil].each do |input|
|
|
45
45
|
expect {
|
|
46
46
|
Puppet::Util::Windows::ADSI.sid_uri(input)
|
|
47
|
-
}.to raise_error(Puppet::Error, /Must use a valid SID
|
|
47
|
+
}.to raise_error(Puppet::Error, /Must use a valid SID::Principal/)
|
|
48
48
|
end
|
|
49
49
|
end
|
|
50
50
|
|
|
51
51
|
it "should return a SID uri for a well-known SID (SYSTEM)" do
|
|
52
|
-
sid =
|
|
52
|
+
sid = Puppet::Util::Windows::SID::Principal.lookup_account_name('SYSTEM')
|
|
53
53
|
expect(Puppet::Util::Windows::ADSI.sid_uri(sid)).to eq('WinNT://S-1-5-18')
|
|
54
54
|
end
|
|
55
55
|
end
|
|
@@ -60,12 +60,10 @@ describe Puppet::Util::Windows::ADSI, :if => Puppet.features.microsoft_windows?
|
|
|
60
60
|
let(:domain_username) { "#{domain}\\#{username}"}
|
|
61
61
|
|
|
62
62
|
it "should generate the correct URI" do
|
|
63
|
-
Puppet::Util::Windows::ADSI.stubs(:sid_uri_safe).returns(nil)
|
|
64
63
|
expect(Puppet::Util::Windows::ADSI::User.uri(username)).to eq("WinNT://./#{username},user")
|
|
65
64
|
end
|
|
66
65
|
|
|
67
66
|
it "should generate the correct URI for a user with a domain" do
|
|
68
|
-
Puppet::Util::Windows::ADSI.stubs(:sid_uri_safe).returns(nil)
|
|
69
67
|
expect(Puppet::Util::Windows::ADSI::User.uri(username, domain)).to eq("WinNT://#{domain}/#{username},user")
|
|
70
68
|
end
|
|
71
69
|
|
|
@@ -96,25 +94,33 @@ describe Puppet::Util::Windows::ADSI, :if => Puppet.features.microsoft_windows?
|
|
|
96
94
|
end
|
|
97
95
|
|
|
98
96
|
it "should be able to check the existence of a user" do
|
|
99
|
-
Puppet::Util::Windows::
|
|
97
|
+
Puppet::Util::Windows::SID.expects(:name_to_sid_object).with(username).returns nil
|
|
100
98
|
Puppet::Util::Windows::ADSI.expects(:connect).with("WinNT://./#{username},user").returns connection
|
|
99
|
+
connection.expects(:Class).returns('User')
|
|
101
100
|
expect(Puppet::Util::Windows::ADSI::User.exists?(username)).to be_truthy
|
|
102
101
|
end
|
|
103
102
|
|
|
104
103
|
it "should be able to check the existence of a domain user" do
|
|
105
|
-
Puppet::Util::Windows::
|
|
104
|
+
Puppet::Util::Windows::SID.expects(:name_to_sid_object).with("#{domain}\\#{username}").returns nil
|
|
106
105
|
Puppet::Util::Windows::ADSI.expects(:connect).with("WinNT://#{domain}/#{username},user").returns connection
|
|
106
|
+
connection.expects(:Class).returns('User')
|
|
107
107
|
expect(Puppet::Util::Windows::ADSI::User.exists?(domain_username)).to be_truthy
|
|
108
108
|
end
|
|
109
109
|
|
|
110
110
|
it "should be able to confirm the existence of a user with a well-known SID" do
|
|
111
|
-
|
|
112
|
-
system_user = Win32::Security::SID::LocalSystem
|
|
111
|
+
system_user = Puppet::Util::Windows::SID::LocalSystem
|
|
113
112
|
# ensure that the underlying OS is queried here
|
|
114
113
|
Puppet::Util::Windows::ADSI.unstub(:connect)
|
|
115
114
|
expect(Puppet::Util::Windows::ADSI::User.exists?(system_user)).to be_truthy
|
|
116
115
|
end
|
|
117
116
|
|
|
117
|
+
it "should return false with a well-known Group SID" do
|
|
118
|
+
group = Puppet::Util::Windows::SID::BuiltinAdministrators
|
|
119
|
+
# ensure that the underlying OS is queried here
|
|
120
|
+
Puppet::Util::Windows::ADSI.unstub(:connect)
|
|
121
|
+
expect(Puppet::Util::Windows::ADSI::User.exists?(group)).to be_falsey
|
|
122
|
+
end
|
|
123
|
+
|
|
118
124
|
it "should return nil with an unknown SID" do
|
|
119
125
|
|
|
120
126
|
bogus_sid = 'S-1-2-3-4'
|
|
@@ -130,8 +136,6 @@ describe Puppet::Util::Windows::ADSI, :if => Puppet.features.microsoft_windows?
|
|
|
130
136
|
end
|
|
131
137
|
|
|
132
138
|
it "should return an enumeration of IADsUser wrapped objects" do
|
|
133
|
-
Puppet::Util::Windows::ADSI.stubs(:sid_uri_safe).returns(nil)
|
|
134
|
-
|
|
135
139
|
name = 'Administrator'
|
|
136
140
|
wmi_users = [stub('WMI', :name => name)]
|
|
137
141
|
Puppet::Util::Windows::ADSI.expects(:execquery).with('select name from win32_useraccount where localaccount = "TRUE"').returns(wmi_users)
|
|
@@ -203,20 +207,20 @@ describe Puppet::Util::Windows::ADSI, :if => Puppet.features.microsoft_windows?
|
|
|
203
207
|
|
|
204
208
|
describe "when given a set of groups to which to add the user" do
|
|
205
209
|
let(:existing_groups) { ['group2','group3'] }
|
|
206
|
-
let(:group_sids) { existing_groups.each_with_index.map{|n,i| stub(:Name => n, :objectSID =>
|
|
210
|
+
let(:group_sids) { existing_groups.each_with_index.map{|n,i| stub(:Name => n, :objectSID => stub(:sid => i))} }
|
|
207
211
|
|
|
208
212
|
let(:groups_to_set) { 'group1,group2' }
|
|
209
|
-
let(:desired_sids) { groups_to_set.split(',').each_with_index.map{|n,i| stub(:Name => n, :objectSID =>
|
|
213
|
+
let(:desired_sids) { groups_to_set.split(',').each_with_index.map{|n,i| stub(:Name => n, :objectSID => stub(:sid => i-1))} }
|
|
210
214
|
|
|
211
215
|
before(:each) do
|
|
212
|
-
user.expects(:group_sids).returns(group_sids.map {|s| s.objectSID})
|
|
216
|
+
user.expects(:group_sids).returns(group_sids.map {|s| s.objectSID })
|
|
213
217
|
end
|
|
214
218
|
|
|
215
219
|
describe "if membership is specified as inclusive" do
|
|
216
220
|
it "should add the user to those groups, and remove it from groups not in the list" do
|
|
217
|
-
Puppet::Util::Windows::ADSI::User.expects(:name_sid_hash).returns(Hash[ desired_sids.map { |s| [s.objectSID.
|
|
218
|
-
user.expects(:add_group_sids).with
|
|
219
|
-
user.expects(:remove_group_sids).with
|
|
221
|
+
Puppet::Util::Windows::ADSI::User.expects(:name_sid_hash).returns(Hash[ desired_sids.map { |s| [s.objectSID.sid, s.objectSID] }])
|
|
222
|
+
user.expects(:add_group_sids).with { |value| value.sid == -1 }
|
|
223
|
+
user.expects(:remove_group_sids).with { |value| value.sid == 1 }
|
|
220
224
|
|
|
221
225
|
user.set_groups(groups_to_set, false)
|
|
222
226
|
end
|
|
@@ -224,7 +228,7 @@ describe Puppet::Util::Windows::ADSI, :if => Puppet.features.microsoft_windows?
|
|
|
224
228
|
it "should remove all users from a group if desired is empty" do
|
|
225
229
|
Puppet::Util::Windows::ADSI::User.expects(:name_sid_hash).returns({})
|
|
226
230
|
user.expects(:add_group_sids).never
|
|
227
|
-
user.expects(:remove_group_sids).with
|
|
231
|
+
user.expects(:remove_group_sids).with { |user1, user2| user1.sid == 0 && user2.sid == 1 }
|
|
228
232
|
|
|
229
233
|
user.set_groups('', false)
|
|
230
234
|
end
|
|
@@ -232,8 +236,8 @@ describe Puppet::Util::Windows::ADSI, :if => Puppet.features.microsoft_windows?
|
|
|
232
236
|
|
|
233
237
|
describe "if membership is specified as minimum" do
|
|
234
238
|
it "should add the user to the specified groups without affecting its other memberships" do
|
|
235
|
-
Puppet::Util::Windows::ADSI::User.expects(:name_sid_hash).returns(Hash[ desired_sids.map { |s| [s.objectSID.
|
|
236
|
-
user.expects(:add_group_sids).with
|
|
239
|
+
Puppet::Util::Windows::ADSI::User.expects(:name_sid_hash).returns(Hash[ desired_sids.map { |s| [s.objectSID.sid, s.objectSID] }])
|
|
240
|
+
user.expects(:add_group_sids).with { |value| value.sid == -1 }
|
|
237
241
|
user.expects(:remove_group_sids).never
|
|
238
242
|
|
|
239
243
|
user.set_groups(groups_to_set, true)
|
|
@@ -270,7 +274,7 @@ describe Puppet::Util::Windows::ADSI, :if => Puppet.features.microsoft_windows?
|
|
|
270
274
|
end
|
|
271
275
|
|
|
272
276
|
it "and raise when passed a non-SID object to add" do
|
|
273
|
-
expect{ group.add_member_sids(invalid)}.to raise_error(Puppet::Error, /Must use a valid SID
|
|
277
|
+
expect{ group.add_member_sids(invalid)}.to raise_error(Puppet::Error, /Must use a valid SID::Principal/)
|
|
274
278
|
end
|
|
275
279
|
|
|
276
280
|
it "to remove a member" do
|
|
@@ -280,7 +284,7 @@ describe Puppet::Util::Windows::ADSI, :if => Puppet.features.microsoft_windows?
|
|
|
280
284
|
end
|
|
281
285
|
|
|
282
286
|
it "and raise when passed a non-SID object to remove" do
|
|
283
|
-
expect{ group.remove_member_sids(invalid)}.to raise_error(Puppet::Error, /Must use a valid SID
|
|
287
|
+
expect{ group.remove_member_sids(invalid)}.to raise_error(Puppet::Error, /Must use a valid SID::Principal/)
|
|
284
288
|
end
|
|
285
289
|
end
|
|
286
290
|
|
|
@@ -298,9 +302,9 @@ describe Puppet::Util::Windows::ADSI, :if => Puppet.features.microsoft_windows?
|
|
|
298
302
|
it "should set the members of a group to only desired_members when inclusive" do
|
|
299
303
|
names = ['DOMAIN\user1', 'user2']
|
|
300
304
|
sids = [
|
|
301
|
-
stub(:account => 'user1', :domain => 'DOMAIN'),
|
|
302
|
-
stub(:account => 'user2', :domain => 'testcomputername'),
|
|
303
|
-
stub(:account => 'user3', :domain => 'DOMAIN2'),
|
|
305
|
+
stub(:account => 'user1', :domain => 'DOMAIN', :sid => 1),
|
|
306
|
+
stub(:account => 'user2', :domain => 'testcomputername', :sid => 2),
|
|
307
|
+
stub(:account => 'user3', :domain => 'DOMAIN2', :sid => 3),
|
|
304
308
|
]
|
|
305
309
|
|
|
306
310
|
# use stubbed objectSid on member to return stubbed SID
|
|
@@ -325,9 +329,9 @@ describe Puppet::Util::Windows::ADSI, :if => Puppet.features.microsoft_windows?
|
|
|
325
329
|
it "should add the desired_members to an existing group when not inclusive" do
|
|
326
330
|
names = ['DOMAIN\user1', 'user2']
|
|
327
331
|
sids = [
|
|
328
|
-
stub(:account => 'user1', :domain => 'DOMAIN'),
|
|
329
|
-
stub(:account => 'user2', :domain => 'testcomputername'),
|
|
330
|
-
stub(:account => 'user3', :domain => 'DOMAIN2'),
|
|
332
|
+
stub(:account => 'user1', :domain => 'DOMAIN', :sid => 1),
|
|
333
|
+
stub(:account => 'user2', :domain => 'testcomputername', :sid => 2),
|
|
334
|
+
stub(:account => 'user3', :domain => 'DOMAIN2', :sid => 3),
|
|
331
335
|
]
|
|
332
336
|
|
|
333
337
|
# use stubbed objectSid on member to return stubbed SID
|
|
@@ -361,8 +365,8 @@ describe Puppet::Util::Windows::ADSI, :if => Puppet.features.microsoft_windows?
|
|
|
361
365
|
it "should remove all members when desired_members is empty and inclusive" do
|
|
362
366
|
names = ['DOMAIN\user1', 'user2']
|
|
363
367
|
sids = [
|
|
364
|
-
stub(:account => 'user1', :domain => 'DOMAIN'),
|
|
365
|
-
stub(:account => 'user2', :domain => 'testcomputername')
|
|
368
|
+
stub(:account => 'user1', :domain => 'DOMAIN', :sid => 1 ),
|
|
369
|
+
stub(:account => 'user2', :domain => 'testcomputername', :sid => 2 ),
|
|
366
370
|
]
|
|
367
371
|
|
|
368
372
|
# use stubbed objectSid on member to return stubbed SID
|
|
@@ -384,8 +388,8 @@ describe Puppet::Util::Windows::ADSI, :if => Puppet.features.microsoft_windows?
|
|
|
384
388
|
it "should do nothing when desired_members is empty and not inclusive" do
|
|
385
389
|
names = ['DOMAIN\user1', 'user2']
|
|
386
390
|
sids = [
|
|
387
|
-
stub(:account => 'user1', :domain => 'DOMAIN'),
|
|
388
|
-
stub(:account => 'user2', :domain => 'testcomputername')
|
|
391
|
+
stub(:account => 'user1', :domain => 'DOMAIN', :sid => 1 ),
|
|
392
|
+
stub(:account => 'user2', :domain => 'testcomputername', :sid => 2 ),
|
|
389
393
|
]
|
|
390
394
|
# use stubbed objectSid on member to return stubbed SID
|
|
391
395
|
Puppet::Util::Windows::SID.expects(:octet_string_to_sid_object).with([0]).returns(sids[0])
|
|
@@ -409,7 +413,6 @@ describe Puppet::Util::Windows::ADSI, :if => Puppet.features.microsoft_windows?
|
|
|
409
413
|
end
|
|
410
414
|
|
|
411
415
|
it "should generate the correct URI" do
|
|
412
|
-
Puppet::Util::Windows::ADSI.stubs(:sid_uri_safe).returns(nil)
|
|
413
416
|
adsi_group.expects(:objectSID).returns([0])
|
|
414
417
|
Socket.expects(:gethostname).returns('testcomputername')
|
|
415
418
|
Puppet::Util::Windows::SID.expects(:octet_string_to_sid_object).with([0]).returns(stub(:account => groupname,:domain => 'testcomputername'))
|
|
@@ -418,7 +421,6 @@ describe Puppet::Util::Windows::ADSI, :if => Puppet.features.microsoft_windows?
|
|
|
418
421
|
end
|
|
419
422
|
|
|
420
423
|
it "should generate the correct URI" do
|
|
421
|
-
Puppet::Util::Windows::ADSI.stubs(:sid_uri_safe).returns(nil)
|
|
422
424
|
expect(Puppet::Util::Windows::ADSI::Group.uri("people")).to eq("WinNT://./people,group")
|
|
423
425
|
end
|
|
424
426
|
|
|
@@ -435,20 +437,28 @@ describe Puppet::Util::Windows::ADSI, :if => Puppet.features.microsoft_windows?
|
|
|
435
437
|
end
|
|
436
438
|
|
|
437
439
|
it "should be able to confirm the existence of a group" do
|
|
438
|
-
Puppet::Util::Windows::
|
|
440
|
+
Puppet::Util::Windows::SID.expects(:name_to_sid_object).with(groupname).returns nil
|
|
439
441
|
Puppet::Util::Windows::ADSI.expects(:connect).with("WinNT://./#{groupname},group").returns connection
|
|
442
|
+
connection.expects(:Class).returns('Group')
|
|
440
443
|
|
|
441
444
|
expect(Puppet::Util::Windows::ADSI::Group.exists?(groupname)).to be_truthy
|
|
442
445
|
end
|
|
443
446
|
|
|
444
447
|
it "should be able to confirm the existence of a group with a well-known SID" do
|
|
445
448
|
|
|
446
|
-
service_group =
|
|
449
|
+
service_group = Puppet::Util::Windows::SID::Service
|
|
447
450
|
# ensure that the underlying OS is queried here
|
|
448
451
|
Puppet::Util::Windows::ADSI.unstub(:connect)
|
|
449
452
|
expect(Puppet::Util::Windows::ADSI::Group.exists?(service_group)).to be_truthy
|
|
450
453
|
end
|
|
451
454
|
|
|
455
|
+
it "will return true with a well-known User SID, as there is no way to resolve it with a WinNT:// style moniker" do
|
|
456
|
+
user = Puppet::Util::Windows::SID::NtLocal
|
|
457
|
+
# ensure that the underlying OS is queried here
|
|
458
|
+
Puppet::Util::Windows::ADSI.unstub(:connect)
|
|
459
|
+
expect(Puppet::Util::Windows::ADSI::Group.exists?(user)).to be_truthy
|
|
460
|
+
end
|
|
461
|
+
|
|
452
462
|
it "should return nil with an unknown SID" do
|
|
453
463
|
|
|
454
464
|
bogus_sid = 'S-1-2-3-4'
|
|
@@ -464,8 +474,6 @@ describe Puppet::Util::Windows::ADSI, :if => Puppet.features.microsoft_windows?
|
|
|
464
474
|
end
|
|
465
475
|
|
|
466
476
|
it "should return an enumeration of IADsGroup wrapped objects" do
|
|
467
|
-
Puppet::Util::Windows::ADSI.stubs(:sid_uri_safe).returns(nil)
|
|
468
|
-
|
|
469
477
|
name = 'Administrators'
|
|
470
478
|
wmi_groups = [stub('WMI', :name => name)]
|
|
471
479
|
Puppet::Util::Windows::ADSI.expects(:execquery).with('select name from win32_group where localaccount = "TRUE"').returns(wmi_groups)
|
|
@@ -25,4 +25,46 @@ describe "FFI::MemoryPointer", :if => Puppet.features.microsoft_windows? do
|
|
|
25
25
|
expect(read_string.encoding).to eq(Encoding::UTF_8)
|
|
26
26
|
end
|
|
27
27
|
end
|
|
28
|
+
|
|
29
|
+
context "read_arbitrary_wide_string_up_to" do
|
|
30
|
+
let (:string) { "foo_bar" }
|
|
31
|
+
let (:single_null_string) { string + "\x00" }
|
|
32
|
+
let (:double_null_string) { string + "\x00\x00" }
|
|
33
|
+
|
|
34
|
+
it "should read a short single null terminated string" do
|
|
35
|
+
read_string = nil
|
|
36
|
+
FFI::MemoryPointer.from_string_to_wide_string(single_null_string) do |ptr|
|
|
37
|
+
read_string = ptr.read_arbitrary_wide_string_up_to()
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
expect(read_string).to eq(string)
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
it "should read a short double null terminated string" do
|
|
44
|
+
read_string = nil
|
|
45
|
+
FFI::MemoryPointer.from_string_to_wide_string(double_null_string) do |ptr|
|
|
46
|
+
read_string = ptr.read_arbitrary_wide_string_up_to(512, :double_null)
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
expect(read_string).to eq(string)
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
it "should return a string of max_length characters when specified" do
|
|
53
|
+
read_string = nil
|
|
54
|
+
FFI::MemoryPointer.from_string_to_wide_string(single_null_string) do |ptr|
|
|
55
|
+
read_string = ptr.read_arbitrary_wide_string_up_to(3)
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
expect(read_string).to eq(string[0..2])
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
it "should return wide strings in UTF-8" do
|
|
62
|
+
read_string = nil
|
|
63
|
+
FFI::MemoryPointer.from_string_to_wide_string(string) do |ptr|
|
|
64
|
+
read_string = ptr.read_arbitrary_wide_string_up_to()
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
expect(read_string.encoding).to eq(Encoding::UTF_8)
|
|
68
|
+
end
|
|
69
|
+
end
|
|
28
70
|
end
|
|
@@ -4,9 +4,9 @@ require 'spec_helper'
|
|
|
4
4
|
require 'puppet/util/windows'
|
|
5
5
|
|
|
6
6
|
describe "Puppet::Util::Windows::SecurityDescriptor", :if => Puppet.features.microsoft_windows? do
|
|
7
|
-
let(:system_sid) {
|
|
8
|
-
let(:admins_sid) {
|
|
9
|
-
let(:group_sid) {
|
|
7
|
+
let(:system_sid) { Puppet::Util::Windows::SID::LocalSystem }
|
|
8
|
+
let(:admins_sid) { Puppet::Util::Windows::SID::BuiltinAdministrators }
|
|
9
|
+
let(:group_sid) { Puppet::Util::Windows::SID::Nobody }
|
|
10
10
|
let(:new_sid) { 'S-1-5-32-500-1-2-3' }
|
|
11
11
|
|
|
12
12
|
def empty_dacl
|