summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDominic Cleal <dcleal@redhat.com>2011-02-19 21:21:13 +0000
committerDominic Cleal <dcleal@redhat.com>2011-02-19 21:21:13 +0000
commitc87ec2598700c4e5236452a016f0497ec848cb90 (patch)
tree47a2435ef019bfcac2ec2aa388935173bc5c6b52
parent3eace859f20d9ac7366382826028af44c3ab62d6 (diff)
parentea348761df0b5297dbac50c7f1c48d22746524fa (diff)
downloadpuppet-c87ec2598700c4e5236452a016f0497ec848cb90.tar.gz
puppet-c87ec2598700c4e5236452a016f0497ec848cb90.tar.xz
puppet-c87ec2598700c4e5236452a016f0497ec848cb90.zip
Merge branch 'master' into tickets/master/4258-dev
-rw-r--r--.gitignore3
-rw-r--r--CHANGELOG9
-rw-r--r--LICENSE4
-rw-r--r--Rakefile7
-rwxr-xr-xext/nagios/naggen2
-rwxr-xr-xext/puppet-test2
-rwxr-xr-xinstall.rb45
-rw-r--r--lib/puppet.rb2
-rw-r--r--lib/puppet/application.rb11
-rw-r--r--lib/puppet/application/agent.rb7
-rw-r--r--lib/puppet/application/apply.rb8
-rw-r--r--lib/puppet/application/doc.rb5
-rw-r--r--lib/puppet/application/inspect.rb123
-rw-r--r--lib/puppet/application/kick.rb6
-rw-r--r--lib/puppet/application/master.rb4
-rw-r--r--lib/puppet/application/queue.rb8
-rw-r--r--lib/puppet/application/resource.rb6
-rw-r--r--lib/puppet/configurer.rb18
-rw-r--r--lib/puppet/configurer/fact_handler.rb2
-rw-r--r--lib/puppet/configurer/plugin_handler.rb2
-rw-r--r--lib/puppet/defaults.rb19
-rw-r--r--lib/puppet/file_bucket/dipper.rb11
-rw-r--r--lib/puppet/file_bucket/file.rb108
-rw-r--r--lib/puppet/indirector.rb32
-rw-r--r--lib/puppet/indirector/catalog/active_record.rb4
-rw-r--r--lib/puppet/indirector/catalog/compiler.rb4
-rw-r--r--lib/puppet/indirector/file_bucket_file/file.rb120
-rw-r--r--lib/puppet/indirector/indirection.rb28
-rw-r--r--lib/puppet/indirector/resource/ral.rb9
-rw-r--r--lib/puppet/indirector/rest.rb21
-rwxr-xr-xlib/puppet/network/handler/filebucket.rb4
-rwxr-xr-xlib/puppet/network/handler/fileserver.rb2
-rw-r--r--lib/puppet/network/handler/master.rb4
-rw-r--r--lib/puppet/network/http/api/v1.rb3
-rw-r--r--lib/puppet/network/http/handler.rb25
-rw-r--r--lib/puppet/network/http/webrick.rb2
-rw-r--r--lib/puppet/network/rest_authconfig.rb17
-rwxr-xr-xlib/puppet/network/rights.rb37
-rw-r--r--lib/puppet/node.rb2
-rwxr-xr-xlib/puppet/node/facts.rb4
-rw-r--r--lib/puppet/parser/ast.rb4
-rw-r--r--lib/puppet/parser/compiler.rb21
-rw-r--r--lib/puppet/parser/functions/defined.rb34
-rw-r--r--lib/puppet/parser/functions/fqdn_rand.rb9
-rw-r--r--lib/puppet/property.rb17
-rw-r--r--lib/puppet/property/keyvalue.rb2
-rw-r--r--lib/puppet/property/list.rb2
-rw-r--r--lib/puppet/provider/augeas/augeas.rb7
-rw-r--r--lib/puppet/provider/file/posix.rb4
-rw-r--r--lib/puppet/provider/file/win32.rb4
-rw-r--r--lib/puppet/provider/host/parsed.rb8
-rwxr-xr-xlib/puppet/provider/maillist/mailman.rb11
-rw-r--r--lib/puppet/provider/mount.rb2
-rw-r--r--lib/puppet/provider/nameservice/directoryservice.rb4
-rwxr-xr-xlib/puppet/provider/package/freebsd.rb4
-rw-r--r--lib/puppet/provider/zfs/solaris.rb2
-rw-r--r--lib/puppet/provider/zone/solaris.rb5
-rw-r--r--lib/puppet/reference/configuration.rb4
-rw-r--r--lib/puppet/reference/function.rb4
-rw-r--r--lib/puppet/relationship.rb4
-rw-r--r--lib/puppet/reports/store.rb20
-rw-r--r--lib/puppet/resource.rb13
-rw-r--r--lib/puppet/resource/status.rb27
-rw-r--r--lib/puppet/resource/type.rb40
-rw-r--r--lib/puppet/resource/type_collection.rb4
-rw-r--r--lib/puppet/simple_graph.rb4
-rw-r--r--lib/puppet/ssl/certificate_authority.rb26
-rw-r--r--lib/puppet/ssl/certificate_request.rb24
-rw-r--r--lib/puppet/ssl/certificate_revocation_list.rb2
-rw-r--r--lib/puppet/ssl/host.rb40
-rw-r--r--lib/puppet/ssl/inventory.rb2
-rw-r--r--lib/puppet/sslcertificates/monkey_patch.rb6
-rw-r--r--lib/puppet/transaction.rb29
-rw-r--r--lib/puppet/transaction/change.rb87
-rw-r--r--lib/puppet/transaction/event.rb13
-rw-r--r--lib/puppet/transaction/report.rb63
-rw-r--r--lib/puppet/transaction/resource_harness.rb170
-rw-r--r--lib/puppet/type.rb6
-rwxr-xr-xlib/puppet/type/cron.rb6
-rwxr-xr-xlib/puppet/type/exec.rb38
-rw-r--r--lib/puppet/type/file.rb47
-rwxr-xr-xlib/puppet/type/file/checksum.rb2
-rwxr-xr-xlib/puppet/type/file/content.rb3
-rw-r--r--lib/puppet/type/file/ctime.rb18
-rwxr-xr-xlib/puppet/type/file/ensure.rb2
-rwxr-xr-xlib/puppet/type/file/mode.rb54
-rw-r--r--lib/puppet/type/file/mtime.rb17
-rwxr-xr-xlib/puppet/type/file/owner.rb2
-rwxr-xr-xlib/puppet/type/file/source.rb5
-rw-r--r--lib/puppet/type/file/target.rb2
-rwxr-xr-xlib/puppet/type/file/type.rb17
-rwxr-xr-xlib/puppet/type/host.rb35
-rwxr-xr-xlib/puppet/type/mount.rb4
-rw-r--r--lib/puppet/type/package.rb2
-rw-r--r--lib/puppet/type/service.rb16
-rwxr-xr-xlib/puppet/type/sshkey.rb7
-rwxr-xr-xlib/puppet/type/user.rb16
-rw-r--r--lib/puppet/type/yumrepo.rb4
-rwxr-xr-xlib/puppet/type/zfs.rb20
-rw-r--r--lib/puppet/type/zone.rb27
-rwxr-xr-xlib/puppet/type/zpool.rb4
-rw-r--r--lib/puppet/util/checksums.rb25
-rwxr-xr-xlib/puppet/util/command_line/filebucket2
-rwxr-xr-xlib/puppet/util/command_line/pi2
-rwxr-xr-xlib/puppet/util/command_line/puppet2
-rwxr-xr-xlib/puppet/util/command_line/puppetca6
-rwxr-xr-xlib/puppet/util/command_line/puppetd16
-rwxr-xr-xlib/puppet/util/command_line/puppetdoc8
-rwxr-xr-xlib/puppet/util/command_line/puppetmasterd11
-rwxr-xr-xlib/puppet/util/command_line/puppetqd2
-rwxr-xr-xlib/puppet/util/command_line/puppetrun2
-rwxr-xr-xlib/puppet/util/command_line/ralsh2
-rw-r--r--lib/puppet/util/log.rb17
-rw-r--r--lib/puppet/util/log_paths.rb2
-rw-r--r--lib/puppet/util/logging.rb2
-rw-r--r--lib/puppet/util/metric.rb1
-rw-r--r--lib/puppet/util/reference.rb11
-rw-r--r--lib/puppet/util/settings.rb2
-rw-r--r--man/man8/filebucket.82
-rw-r--r--man/man8/pi.82
-rw-r--r--man/man8/puppetca.82
-rw-r--r--man/man8/puppetd.82
-rw-r--r--man/man8/puppetdoc.84
-rw-r--r--man/man8/puppetmasterd.82
-rw-r--r--man/man8/puppetqd.82
-rw-r--r--man/man8/puppetrun.82
-rw-r--r--man/man8/ralsh.82
-rw-r--r--spec/Rakefile91
-rw-r--r--spec/fixtures/unit/provider/mount/mount-output.aix.txt7
-rwxr-xr-xspec/integration/application/apply_spec.rb5
-rw-r--r--spec/integration/application/doc_spec.rb2
-rwxr-xr-xspec/integration/configurer_spec.rb8
-rwxr-xr-xspec/integration/defaults_spec.rb34
-rwxr-xr-xspec/integration/file_serving/content_spec.rb2
-rwxr-xr-xspec/integration/file_serving/fileset_spec.rb2
-rwxr-xr-xspec/integration/file_serving/metadata_spec.rb2
-rwxr-xr-xspec/integration/file_serving/terminus_helper_spec.rb2
-rwxr-xr-xspec/integration/indirector/catalog/compiler_spec.rb6
-rwxr-xr-xspec/integration/indirector/catalog/queue_spec.rb5
-rwxr-xr-xspec/integration/indirector/direct_file_server_spec.rb2
-rwxr-xr-xspec/integration/indirector/file_content/file_server_spec.rb8
-rwxr-xr-xspec/integration/indirector/file_metadata/file_server_spec.rb2
-rwxr-xr-xspec/integration/indirector/node/ldap_spec.rb4
-rwxr-xr-xspec/integration/network/client_spec.rb2
-rwxr-xr-xspec/integration/network/formats_spec.rb9
-rwxr-xr-xspec/integration/network/handler_spec.rb2
-rwxr-xr-xspec/integration/network/server/mongrel_spec.rb5
-rwxr-xr-xspec/integration/network/server/webrick_spec.rb5
-rwxr-xr-xspec/integration/node/environment_spec.rb2
-rwxr-xr-xspec/integration/node/facts_spec.rb10
-rwxr-xr-xspec/integration/node_spec.rb28
-rwxr-xr-xspec/integration/parser/collector_spec.rb2
-rwxr-xr-xspec/integration/parser/compiler_spec.rb2
-rwxr-xr-xspec/integration/parser/functions/require_spec.rb2
-rw-r--r--spec/integration/parser/functions_spec.rb2
-rwxr-xr-xspec/integration/parser/parser_spec.rb2
-rw-r--r--spec/integration/parser/ruby_manifest_spec.rb2
-rwxr-xr-xspec/integration/provider/mailalias/aliases_spec.rb3
-rwxr-xr-xspec/integration/provider/package_spec.rb4
-rwxr-xr-xspec/integration/provider/service/init_spec.rb12
-rwxr-xr-xspec/integration/reference/providers_spec.rb4
-rwxr-xr-xspec/integration/reports_spec.rb2
-rwxr-xr-xspec/integration/resource/catalog_spec.rb13
-rwxr-xr-xspec/integration/resource/type_collection_spec.rb2
-rwxr-xr-xspec/integration/ssl/certificate_authority_spec.rb12
-rwxr-xr-xspec/integration/ssl/certificate_request_spec.rb12
-rwxr-xr-xspec/integration/ssl/certificate_revocation_list_spec.rb2
-rwxr-xr-xspec/integration/ssl/host_spec.rb6
-rwxr-xr-xspec/integration/transaction/report_spec.rb6
-rwxr-xr-xspec/integration/transaction_spec.rb2
-rwxr-xr-xspec/integration/type/file_spec.rb2
-rwxr-xr-xspec/integration/type/package_spec.rb2
-rwxr-xr-xspec/integration/type/tidy_spec.rb2
-rwxr-xr-xspec/integration/type_spec.rb2
-rwxr-xr-xspec/integration/util/settings_spec.rb2
-rw-r--r--spec/monkey_patches/add_confine_and_runnable_to_rspec_dsl.rb46
-rw-r--r--spec/monkey_patches/alias_should_to_must.rb2
-rw-r--r--spec/shared_behaviours/file_server_terminus.rb2
-rw-r--r--spec/shared_behaviours/file_serving.rb16
-rw-r--r--spec/shared_behaviours/memory_terminus.rb2
-rw-r--r--spec/spec_helper.rb14
-rw-r--r--spec/spec_specs/runnable_spec.rb95
-rwxr-xr-xspec/unit/agent/locker_spec.rb2
-rwxr-xr-xspec/unit/agent_spec.rb2
-rwxr-xr-xspec/unit/application/agent_spec.rb24
-rwxr-xr-xspec/unit/application/apply_spec.rb26
-rwxr-xr-xspec/unit/application/cert_spec.rb2
-rwxr-xr-xspec/unit/application/describe_spec.rb2
-rwxr-xr-xspec/unit/application/doc_spec.rb6
-rw-r--r--spec/unit/application/filebucket_spec.rb2
-rw-r--r--spec/unit/application/inspect_spec.rb278
-rwxr-xr-xspec/unit/application/kick_spec.rb14
-rw-r--r--spec/unit/application/master_spec.rb29
-rwxr-xr-xspec/unit/application/queue_spec.rb12
-rwxr-xr-xspec/unit/application/resource_spec.rb26
-rwxr-xr-xspec/unit/application_spec.rb28
-rwxr-xr-xspec/unit/configurer/downloader_spec.rb2
-rwxr-xr-xspec/unit/configurer/fact_handler_spec.rb8
-rwxr-xr-xspec/unit/configurer/plugin_handler_spec.rb8
-rwxr-xr-xspec/unit/configurer_spec.rb127
-rwxr-xr-xspec/unit/daemon_spec.rb2
-rwxr-xr-xspec/unit/dsl/resource_api_spec.rb2
-rwxr-xr-xspec/unit/dsl/resource_type_api_spec.rb2
-rwxr-xr-xspec/unit/file_bucket/dipper_spec.rb148
-rw-r--r--spec/unit/file_bucket/file_spec.rb128
-rwxr-xr-xspec/unit/file_collection/lookup_spec.rb2
-rwxr-xr-xspec/unit/file_collection_spec.rb2
-rwxr-xr-xspec/unit/file_serving/base_spec.rb2
-rwxr-xr-xspec/unit/file_serving/configuration/parser_spec.rb2
-rwxr-xr-xspec/unit/file_serving/configuration_spec.rb2
-rwxr-xr-xspec/unit/file_serving/content_spec.rb2
-rwxr-xr-xspec/unit/file_serving/fileset_spec.rb3
-rwxr-xr-xspec/unit/file_serving/indirection_hooks_spec.rb2
-rwxr-xr-xspec/unit/file_serving/metadata_spec.rb10
-rwxr-xr-xspec/unit/file_serving/mount/file_spec.rb2
-rwxr-xr-xspec/unit/file_serving/mount/modules_spec.rb2
-rwxr-xr-xspec/unit/file_serving/mount/plugins_spec.rb2
-rwxr-xr-xspec/unit/file_serving/mount_spec.rb2
-rwxr-xr-xspec/unit/file_serving/terminus_helper_spec.rb2
-rwxr-xr-xspec/unit/indirector/active_record_spec.rb2
-rwxr-xr-xspec/unit/indirector/catalog/active_record_spec.rb44
-rwxr-xr-xspec/unit/indirector/catalog/compiler_spec.rb38
-rwxr-xr-xspec/unit/indirector/catalog/queue_spec.rb2
-rwxr-xr-xspec/unit/indirector/catalog/rest_spec.rb2
-rwxr-xr-xspec/unit/indirector/catalog/yaml_spec.rb2
-rwxr-xr-xspec/unit/indirector/certificate/ca_spec.rb2
-rwxr-xr-xspec/unit/indirector/certificate/file_spec.rb2
-rwxr-xr-xspec/unit/indirector/certificate/rest_spec.rb2
-rwxr-xr-xspec/unit/indirector/certificate_request/ca_spec.rb2
-rwxr-xr-xspec/unit/indirector/certificate_request/file_spec.rb2
-rwxr-xr-xspec/unit/indirector/certificate_request/rest_spec.rb2
-rwxr-xr-xspec/unit/indirector/certificate_revocation_list/ca_spec.rb2
-rwxr-xr-xspec/unit/indirector/certificate_revocation_list/file_spec.rb2
-rwxr-xr-xspec/unit/indirector/certificate_revocation_list/rest_spec.rb2
-rwxr-xr-xspec/unit/indirector/code_spec.rb2
-rwxr-xr-xspec/unit/indirector/direct_file_server_spec.rb2
-rwxr-xr-xspec/unit/indirector/envelope_spec.rb2
-rwxr-xr-xspec/unit/indirector/exec_spec.rb2
-rwxr-xr-xspec/unit/indirector/facts/active_record_spec.rb6
-rw-r--r--spec/unit/indirector/facts/couch_spec.rb5
-rwxr-xr-xspec/unit/indirector/facts/facter_spec.rb2
-rwxr-xr-xspec/unit/indirector/facts/rest_spec.rb2
-rwxr-xr-xspec/unit/indirector/facts/yaml_spec.rb2
-rwxr-xr-xspec/unit/indirector/file_bucket_file/file_spec.rb345
-rwxr-xr-xspec/unit/indirector/file_content/file_server_spec.rb2
-rwxr-xr-xspec/unit/indirector/file_content/file_spec.rb2
-rwxr-xr-xspec/unit/indirector/file_content/rest_spec.rb2
-rwxr-xr-xspec/unit/indirector/file_metadata/file_server_spec.rb2
-rwxr-xr-xspec/unit/indirector/file_metadata/file_spec.rb2
-rwxr-xr-xspec/unit/indirector/file_metadata/rest_spec.rb2
-rwxr-xr-xspec/unit/indirector/file_server_spec.rb15
-rwxr-xr-xspec/unit/indirector/file_spec.rb2
-rwxr-xr-xspec/unit/indirector/indirection_spec.rb76
-rw-r--r--spec/unit/indirector/inventory/yaml_spec.rb2
-rwxr-xr-xspec/unit/indirector/key/ca_spec.rb2
-rwxr-xr-xspec/unit/indirector/key/file_spec.rb2
-rwxr-xr-xspec/unit/indirector/ldap_spec.rb10
-rwxr-xr-xspec/unit/indirector/memory_spec.rb2
-rwxr-xr-xspec/unit/indirector/node/active_record_spec.rb6
-rwxr-xr-xspec/unit/indirector/node/exec_spec.rb2
-rwxr-xr-xspec/unit/indirector/node/ldap_spec.rb4
-rwxr-xr-xspec/unit/indirector/node/memory_spec.rb2
-rwxr-xr-xspec/unit/indirector/node/plain_spec.rb2
-rwxr-xr-xspec/unit/indirector/node/rest_spec.rb2
-rwxr-xr-xspec/unit/indirector/node/yaml_spec.rb2
-rwxr-xr-xspec/unit/indirector/plain_spec.rb2
-rwxr-xr-xspec/unit/indirector/queue_spec.rb6
-rwxr-xr-xspec/unit/indirector/report/processor_spec.rb2
-rwxr-xr-xspec/unit/indirector/report/rest_spec.rb2
-rw-r--r--spec/unit/indirector/report/yaml_spec.rb2
-rwxr-xr-xspec/unit/indirector/request_spec.rb2
-rw-r--r--spec/unit/indirector/resource/ral_spec.rb2
-rwxr-xr-xspec/unit/indirector/resource_type/parser_spec.rb2
-rwxr-xr-xspec/unit/indirector/resource_type/rest_spec.rb2
-rwxr-xr-xspec/unit/indirector/rest_spec.rb40
-rw-r--r--spec/unit/indirector/run/local_spec.rb2
-rwxr-xr-xspec/unit/indirector/run/rest_spec.rb2
-rwxr-xr-xspec/unit/indirector/ssl_file_spec.rb12
-rwxr-xr-xspec/unit/indirector/terminus_spec.rb2
-rwxr-xr-xspec/unit/indirector/yaml_spec.rb2
-rwxr-xr-xspec/unit/indirector_spec.rb73
-rwxr-xr-xspec/unit/module_spec.rb6
-rwxr-xr-xspec/unit/network/authconfig_spec.rb2
-rw-r--r--spec/unit/network/authstore_spec.rb2
-rwxr-xr-xspec/unit/network/client_spec.rb2
-rwxr-xr-xspec/unit/network/format_handler_spec.rb2
-rwxr-xr-xspec/unit/network/format_spec.rb2
-rwxr-xr-xspec/unit/network/formats_spec.rb9
-rw-r--r--spec/unit/network/handler/fileserver_spec.rb2
-rw-r--r--spec/unit/network/http/api/v1_spec.rb4
-rw-r--r--spec/unit/network/http/compression_spec.rb6
-rwxr-xr-xspec/unit/network/http/handler_spec.rb84
-rwxr-xr-xspec/unit/network/http/mongrel/rest_spec.rb5
-rwxr-xr-xspec/unit/network/http/mongrel_spec.rb14
-rwxr-xr-xspec/unit/network/http/rack/rest_spec.rb6
-rwxr-xr-xspec/unit/network/http/rack/xmlrpc_spec.rb6
-rwxr-xr-xspec/unit/network/http/rack_spec.rb6
-rwxr-xr-xspec/unit/network/http/webrick/rest_spec.rb2
-rwxr-xr-xspec/unit/network/http/webrick_spec.rb6
-rwxr-xr-xspec/unit/network/http_pool_spec.rb2
-rwxr-xr-xspec/unit/network/http_spec.rb2
-rwxr-xr-xspec/unit/network/rest_authconfig_spec.rb8
-rwxr-xr-xspec/unit/network/rights_spec.rb68
-rwxr-xr-xspec/unit/network/server_spec.rb2
-rwxr-xr-xspec/unit/node/environment_spec.rb2
-rwxr-xr-xspec/unit/node/facts_spec.rb10
-rwxr-xr-xspec/unit/node_spec.rb13
-rw-r--r--spec/unit/other/selinux_spec.rb2
-rwxr-xr-xspec/unit/other/transbucket_spec.rb2
-rwxr-xr-xspec/unit/other/transobject_spec.rb2
-rwxr-xr-xspec/unit/parameter/value_collection_spec.rb2
-rwxr-xr-xspec/unit/parameter/value_spec.rb2
-rwxr-xr-xspec/unit/parameter_spec.rb5
-rwxr-xr-xspec/unit/parser/ast/arithmetic_operator_spec.rb2
-rwxr-xr-xspec/unit/parser/ast/astarray_spec.rb2
-rw-r--r--spec/unit/parser/ast/asthash_spec.rb2
-rwxr-xr-xspec/unit/parser/ast/boolean_operator_spec.rb2
-rwxr-xr-xspec/unit/parser/ast/casestatement_spec.rb2
-rwxr-xr-xspec/unit/parser/ast/collection_spec.rb2
-rwxr-xr-xspec/unit/parser/ast/collexpr_spec.rb2
-rwxr-xr-xspec/unit/parser/ast/comparison_operator_spec.rb2
-rw-r--r--spec/unit/parser/ast/definition_spec.rb2
-rw-r--r--spec/unit/parser/ast/function_spec.rb2
-rw-r--r--spec/unit/parser/ast/hostclass_spec.rb2
-rwxr-xr-xspec/unit/parser/ast/ifstatement_spec.rb2
-rw-r--r--spec/unit/parser/ast/in_operator_spec.rb2
-rwxr-xr-xspec/unit/parser/ast/leaf_spec.rb2
-rwxr-xr-xspec/unit/parser/ast/match_operator_spec.rb2
-rwxr-xr-xspec/unit/parser/ast/minus_spec.rb2
-rw-r--r--spec/unit/parser/ast/node_spec.rb2
-rwxr-xr-xspec/unit/parser/ast/nop_spec.rb2
-rwxr-xr-xspec/unit/parser/ast/not_spec.rb2
-rw-r--r--spec/unit/parser/ast/relationship_spec.rb2
-rwxr-xr-xspec/unit/parser/ast/resource_defaults_spec.rb2
-rwxr-xr-xspec/unit/parser/ast/resource_override_spec.rb2
-rwxr-xr-xspec/unit/parser/ast/resource_reference_spec.rb2
-rwxr-xr-xspec/unit/parser/ast/resource_spec.rb2
-rwxr-xr-xspec/unit/parser/ast/selector_spec.rb2
-rwxr-xr-xspec/unit/parser/ast/vardef_spec.rb2
-rw-r--r--spec/unit/parser/ast_spec.rb2
-rwxr-xr-xspec/unit/parser/collector_spec.rb10
-rwxr-xr-xspec/unit/parser/compiler_spec.rb97
-rw-r--r--spec/unit/parser/files_spec.rb2
-rwxr-xr-xspec/unit/parser/functions/defined_spec.rb2
-rwxr-xr-xspec/unit/parser/functions/extlookup_spec.rb2
-rw-r--r--spec/unit/parser/functions/fqdn_rand_spec.rb2
-rwxr-xr-xspec/unit/parser/functions/generate_spec.rb2
-rw-r--r--spec/unit/parser/functions/include_spec.rb2
-rwxr-xr-xspec/unit/parser/functions/inline_template_spec.rb2
-rwxr-xr-xspec/unit/parser/functions/realize_spec.rb2
-rwxr-xr-xspec/unit/parser/functions/regsubst_spec.rb2
-rwxr-xr-xspec/unit/parser/functions/require_spec.rb2
-rwxr-xr-xspec/unit/parser/functions/shellquote_spec.rb2
-rwxr-xr-xspec/unit/parser/functions/split_spec.rb2
-rwxr-xr-xspec/unit/parser/functions/sprintf_spec.rb2
-rwxr-xr-xspec/unit/parser/functions/tag_spec.rb2
-rwxr-xr-xspec/unit/parser/functions/template_spec.rb2
-rwxr-xr-xspec/unit/parser/functions/versioncmp_spec.rb2
-rw-r--r--spec/unit/parser/functions_spec.rb2
-rwxr-xr-xspec/unit/parser/lexer_spec.rb7
-rwxr-xr-xspec/unit/parser/parser_spec.rb2
-rw-r--r--spec/unit/parser/relationship_spec.rb2
-rwxr-xr-xspec/unit/parser/resource_spec.rb2
-rwxr-xr-xspec/unit/parser/scope_spec.rb2
-rwxr-xr-xspec/unit/parser/templatewrapper_spec.rb2
-rw-r--r--spec/unit/parser/type_loader_spec.rb2
-rw-r--r--spec/unit/property/keyvalue_spec.rb10
-rw-r--r--spec/unit/property/list_spec.rb14
-rwxr-xr-xspec/unit/property_spec.rb2
-rw-r--r--spec/unit/provider/augeas/augeas_spec.rb26
-rwxr-xr-xspec/unit/provider/confine/exists_spec.rb2
-rwxr-xr-xspec/unit/provider/confine/false_spec.rb2
-rwxr-xr-xspec/unit/provider/confine/feature_spec.rb2
-rwxr-xr-xspec/unit/provider/confine/true_spec.rb2
-rwxr-xr-xspec/unit/provider/confine/variable_spec.rb2
-rwxr-xr-xspec/unit/provider/confine_collection_spec.rb2
-rwxr-xr-xspec/unit/provider/confine_spec.rb2
-rwxr-xr-xspec/unit/provider/confiner_spec.rb2
-rwxr-xr-xspec/unit/provider/group/groupadd_spec.rb2
-rwxr-xr-xspec/unit/provider/group/ldap_spec.rb2
-rw-r--r--spec/unit/provider/host/parsed_spec.rb30
-rwxr-xr-xspec/unit/provider/ldap_spec.rb2
-rwxr-xr-xspec/unit/provider/macauthorization_spec.rb2
-rwxr-xr-xspec/unit/provider/mcx/mcxcontent_spec.rb2
-rwxr-xr-xspec/unit/provider/mount/parsed_spec.rb5
-rwxr-xr-xspec/unit/provider/mount_spec.rb10
-rwxr-xr-xspec/unit/provider/naginator_spec.rb2
-rwxr-xr-xspec/unit/provider/nameservice/directoryservice_spec.rb38
-rwxr-xr-xspec/unit/provider/package/aix_spec.rb2
-rwxr-xr-xspec/unit/provider/package/freebsd_spec.rb55
-rw-r--r--spec/unit/provider/package/gem_spec.rb2
-rw-r--r--spec/unit/provider/package/hpux_spec.rb2
-rwxr-xr-xspec/unit/provider/package/nim_spec.rb2
-rw-r--r--spec/unit/provider/package/yum_spec.rb2
-rw-r--r--spec/unit/provider/package/zypper_spec.rb2
-rwxr-xr-xspec/unit/provider/parsedfile_spec.rb2
-rwxr-xr-xspec/unit/provider/service/daemontools_spec.rb2
-rwxr-xr-xspec/unit/provider/service/debian_spec.rb2
-rw-r--r--spec/unit/provider/service/freebsd_spec.rb2
-rwxr-xr-xspec/unit/provider/service/init_spec.rb4
-rwxr-xr-xspec/unit/provider/service/launchd_spec.rb2
-rwxr-xr-xspec/unit/provider/service/redhat_spec.rb2
-rwxr-xr-xspec/unit/provider/service/runit_spec.rb2
-rwxr-xr-xspec/unit/provider/service/src_spec.rb2
-rw-r--r--spec/unit/provider/service/upstart.rb2
-rwxr-xr-xspec/unit/provider/ssh_authorized_key/parsed_spec.rb2
-rwxr-xr-xspec/unit/provider/sshkey/parsed_spec.rb2
-rwxr-xr-xspec/unit/provider/user/hpux_spec.rb2
-rwxr-xr-xspec/unit/provider/user/ldap_spec.rb2
-rw-r--r--spec/unit/provider/user/user_role_add_spec.rb2
-rwxr-xr-xspec/unit/provider/user/useradd_spec.rb2
-rwxr-xr-xspec/unit/provider/zfs/solaris_spec.rb4
-rwxr-xr-xspec/unit/provider/zone/solaris_spec.rb2
-rwxr-xr-xspec/unit/provider/zpool/solaris_spec.rb2
-rwxr-xr-xspec/unit/provider_spec.rb2
-rwxr-xr-xspec/unit/puppet_spec.rb2
-rwxr-xr-xspec/unit/rails/host_spec.rb6
-rwxr-xr-xspec/unit/rails/param_value_spec.rb6
-rwxr-xr-xspec/unit/rails/resource_spec.rb6
-rwxr-xr-xspec/unit/rails_spec.rb22
-rwxr-xr-xspec/unit/relationship_spec.rb10
-rw-r--r--spec/unit/reports/http_spec.rb2
-rw-r--r--spec/unit/reports/store_spec.rb31
-rwxr-xr-xspec/unit/reports/tagmail_spec.rb2
-rwxr-xr-xspec/unit/reports_spec.rb2
-rwxr-xr-xspec/unit/resource/catalog_spec.rb16
-rwxr-xr-xspec/unit/resource/status_spec.rb58
-rw-r--r--spec/unit/resource/type_collection_helper_spec.rb2
-rw-r--r--spec/unit/resource/type_collection_spec.rb2
-rwxr-xr-xspec/unit/resource/type_spec.rb56
-rwxr-xr-xspec/unit/resource_spec.rb18
-rwxr-xr-xspec/unit/run_spec.rb2
-rwxr-xr-xspec/unit/simple_graph_spec.rb2
-rwxr-xr-xspec/unit/ssl/base_spec.rb2
-rwxr-xr-xspec/unit/ssl/certificate_authority/interface_spec.rb4
-rwxr-xr-xspec/unit/ssl/certificate_authority_spec.rb89
-rwxr-xr-xspec/unit/ssl/certificate_factory_spec.rb2
-rwxr-xr-xspec/unit/ssl/certificate_request_spec.rb21
-rwxr-xr-xspec/unit/ssl/certificate_revocation_list_spec.rb6
-rwxr-xr-xspec/unit/ssl/certificate_spec.rb2
-rwxr-xr-xspec/unit/ssl/host_spec.rb165
-rwxr-xr-xspec/unit/ssl/inventory_spec.rb6
-rwxr-xr-xspec/unit/ssl/key_spec.rb2
-rw-r--r--spec/unit/sslcertificates/ca_spec.rb2
-rw-r--r--spec/unit/status_spec.rb6
-rwxr-xr-xspec/unit/transaction/change_spec.rb193
-rwxr-xr-xspec/unit/transaction/event_manager_spec.rb2
-rwxr-xr-xspec/unit/transaction/event_spec.rb25
-rwxr-xr-xspec/unit/transaction/report_spec.rb137
-rwxr-xr-xspec/unit/transaction/resource_harness_spec.rb498
-rwxr-xr-xspec/unit/transaction_spec.rb9
-rw-r--r--spec/unit/type/augeas_spec.rb6
-rwxr-xr-xspec/unit/type/component_spec.rb2
-rwxr-xr-xspec/unit/type/computer_spec.rb2
-rwxr-xr-xspec/unit/type/exec_spec.rb2
-rwxr-xr-xspec/unit/type/file/content_spec.rb73
-rw-r--r--spec/unit/type/file/ctime.rb35
-rwxr-xr-xspec/unit/type/file/ensure_spec.rb15
-rwxr-xr-xspec/unit/type/file/group_spec.rb10
-rw-r--r--spec/unit/type/file/mtime.rb35
-rwxr-xr-xspec/unit/type/file/owner_spec.rb14
-rw-r--r--spec/unit/type/file/selinux_spec.rb4
-rwxr-xr-xspec/unit/type/file/source_spec.rb20
-rw-r--r--spec/unit/type/file/type.rb20
-rwxr-xr-xspec/unit/type/file_spec.rb159
-rw-r--r--spec/unit/type/filebucket_spec.rb2
-rwxr-xr-xspec/unit/type/group_spec.rb2
-rwxr-xr-xspec/unit/type/host_spec.rb55
-rwxr-xr-xspec/unit/type/macauthorization_spec.rb2
-rwxr-xr-xspec/unit/type/mcx_spec.rb2
-rwxr-xr-xspec/unit/type/mount_spec.rb10
-rwxr-xr-xspec/unit/type/nagios_spec.rb2
-rwxr-xr-xspec/unit/type/noop_metaparam_spec.rb2
-rwxr-xr-xspec/unit/type/package_spec.rb8
-rw-r--r--spec/unit/type/resources_spec.rb2
-rwxr-xr-xspec/unit/type/schedule_spec.rb2
-rwxr-xr-xspec/unit/type/service_spec.rb2
-rwxr-xr-xspec/unit/type/ssh_authorized_key_spec.rb4
-rw-r--r--spec/unit/type/sshkey_spec.rb71
-rw-r--r--spec/unit/type/stage_spec.rb2
-rwxr-xr-xspec/unit/type/tidy_spec.rb2
-rwxr-xr-xspec/unit/type/user_spec.rb36
-rw-r--r--spec/unit/type/whit_spec.rb2
-rwxr-xr-xspec/unit/type/zpool_spec.rb24
-rwxr-xr-xspec/unit/type_spec.rb6
-rwxr-xr-xspec/unit/util/autoload/file_cache_spec.rb2
-rwxr-xr-xspec/unit/util/backups_spec.rb2
-rw-r--r--spec/unit/util/cache_accumulator_spec.rb2
-rwxr-xr-xspec/unit/util/cacher_spec.rb2
-rwxr-xr-xspec/unit/util/checksums_spec.rb12
-rwxr-xr-xspec/unit/util/constant_inflector_spec.rb2
-rwxr-xr-xspec/unit/util/ldap/connection_spec.rb2
-rwxr-xr-xspec/unit/util/ldap/generator_spec.rb2
-rwxr-xr-xspec/unit/util/ldap/manager_spec.rb2
-rwxr-xr-xspec/unit/util/loadedfile_spec.rb2
-rwxr-xr-xspec/unit/util/log/destinations_spec.rb2
-rwxr-xr-xspec/unit/util/log_spec.rb31
-rwxr-xr-xspec/unit/util/logging_spec.rb2
-rwxr-xr-xspec/unit/util/metric_spec.rb14
-rwxr-xr-xspec/unit/util/nagios_maker_spec.rb2
-rw-r--r--spec/unit/util/package_spec.rb2
-rwxr-xr-xspec/unit/util/queue/stomp_spec.rb10
-rwxr-xr-xspec/unit/util/queue_spec.rb2
-rw-r--r--spec/unit/util/reference_serializer_spec.rb2
-rwxr-xr-xspec/unit/util/resource_template_spec.rb2
-rw-r--r--spec/unit/util/run_mode_spec.rb2
-rwxr-xr-xspec/unit/util/selinux_spec.rb2
-rwxr-xr-xspec/unit/util/settings/file_setting_spec.rb6
-rwxr-xr-xspec/unit/util/settings_spec.rb2
-rwxr-xr-xspec/unit/util/storage_spec.rb2
-rwxr-xr-xspec/unit/util/tagging_spec.rb2
-rwxr-xr-xspec/unit/util/warnings_spec.rb2
-rwxr-xr-xtest/certmgr/certmgr.rb2
-rwxr-xr-xtest/certmgr/inventory.rb2
-rwxr-xr-xtest/certmgr/support.rb2
-rwxr-xr-xtest/language/ast.rb2
-rwxr-xr-xtest/language/ast/variable.rb2
-rwxr-xr-xtest/language/functions.rb2
-rwxr-xr-xtest/language/parser.rb14
-rwxr-xr-xtest/language/scope.rb8
-rwxr-xr-xtest/language/snippets.rb7
-rwxr-xr-xtest/language/transportable.rb2
-rw-r--r--test/lib/puppettest/fileparsing.rb2
-rw-r--r--test/lib/puppettest/reporttesting.rb2
-rw-r--r--test/lib/puppettest/support/utils.rb2
-rwxr-xr-xtest/network/authconfig.rb2
-rwxr-xr-xtest/network/authorization.rb2
-rwxr-xr-xtest/network/authstore.rb2
-rwxr-xr-xtest/network/client/ca.rb2
-rwxr-xr-xtest/network/client/dipper.rb2
-rwxr-xr-xtest/network/client_request.rb2
-rwxr-xr-xtest/network/handler/ca.rb2
-rwxr-xr-xtest/network/handler/fileserver.rb2
-rwxr-xr-xtest/network/handler/master.rb22
-rwxr-xr-xtest/network/handler/report.rb2
-rwxr-xr-xtest/network/handler/runner.rb2
-rwxr-xr-xtest/network/rights.rb2
-rwxr-xr-xtest/network/server/mongrel_test.rb8
-rwxr-xr-xtest/network/server/webrick.rb2
-rwxr-xr-xtest/network/xmlrpc/client.rb2
-rwxr-xr-xtest/network/xmlrpc/processor.rb2
-rwxr-xr-xtest/network/xmlrpc/server.rb2
-rwxr-xr-xtest/network/xmlrpc/webrick_servlet.rb2
-rwxr-xr-xtest/other/provider.rb2
-rwxr-xr-xtest/other/puppet.rb2
-rwxr-xr-xtest/other/relationships.rb2
-rwxr-xr-xtest/other/report.rb4
-rwxr-xr-xtest/other/transactions.rb2
-rwxr-xr-xtest/puppet/defaults.rb2
-rwxr-xr-xtest/puppet/errortest.rb2
-rwxr-xr-xtest/puppet/tc_suidmanager.rb2
-rwxr-xr-xtest/rails/rails.rb2
-rwxr-xr-xtest/rails/railsparameter.rb2
-rwxr-xr-xtest/ral/manager/attributes.rb2
-rwxr-xr-xtest/ral/manager/instances.rb2
-rwxr-xr-xtest/ral/manager/manager.rb2
-rwxr-xr-xtest/ral/manager/provider.rb2
-rwxr-xr-xtest/ral/manager/type.rb2
-rwxr-xr-xtest/ral/providers/cron/crontab.rb2
-rwxr-xr-xtest/ral/providers/group.rb2
-rwxr-xr-xtest/ral/providers/host/parsed.rb207
-rwxr-xr-xtest/ral/providers/mailalias/aliases.rb2
-rwxr-xr-xtest/ral/providers/nameservice.rb2
-rwxr-xr-xtest/ral/providers/package.rb2
-rwxr-xr-xtest/ral/providers/package/aptitude.rb2
-rwxr-xr-xtest/ral/providers/package/aptrpm.rb2
-rwxr-xr-xtest/ral/providers/parsedfile.rb2
-rwxr-xr-xtest/ral/providers/port/parsed.rb2
-rwxr-xr-xtest/ral/providers/provider.rb2
-rwxr-xr-xtest/ral/providers/service/base.rb2
-rwxr-xr-xtest/ral/providers/sshkey/parsed.rb2
-rwxr-xr-xtest/ral/providers/user.rb2
-rwxr-xr-xtest/ral/providers/user/useradd.rb2
-rwxr-xr-xtest/ral/type/cron.rb2
-rwxr-xr-xtest/ral/type/exec.rb2
-rwxr-xr-xtest/ral/type/file.rb4
-rwxr-xr-xtest/ral/type/file/target.rb2
-rwxr-xr-xtest/ral/type/fileignoresource.rb2
-rwxr-xr-xtest/ral/type/filesources.rb7
-rwxr-xr-xtest/ral/type/host.rb2
-rwxr-xr-xtest/ral/type/mailalias.rb2
-rwxr-xr-xtest/ral/type/port.rb2
-rwxr-xr-xtest/ral/type/resources.rb2
-rwxr-xr-xtest/ral/type/service.rb2
-rwxr-xr-xtest/ral/type/sshkey.rb2
-rwxr-xr-xtest/ral/type/user.rb2
-rwxr-xr-xtest/ral/type/yumrepo.rb2
-rwxr-xr-xtest/ral/type/zone.rb2
-rwxr-xr-xtest/test2
-rwxr-xr-xtest/util/classgen.rb2
-rwxr-xr-xtest/util/execution.rb2
-rwxr-xr-xtest/util/fileparsing.rb2
-rwxr-xr-xtest/util/inifile.rb2
-rwxr-xr-xtest/util/instance_loader.rb2
-rwxr-xr-xtest/util/log.rb2
-rwxr-xr-xtest/util/metrics.rb2
-rwxr-xr-xtest/util/package.rb2
-rwxr-xr-xtest/util/pidlock.rb2
-rwxr-xr-xtest/util/settings.rb2
-rwxr-xr-xtest/util/storage.rb2
-rwxr-xr-xtest/util/subclass_loader.rb2
-rwxr-xr-xtest/util/utiltest.rb2
602 files changed, 4029 insertions, 3514 deletions
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 000000000..a2082370b
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,3 @@
+.rspec
+results
+.*.sw[op]
diff --git a/CHANGELOG b/CHANGELOG
index 78483351c..c3135031b 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -1,5 +1,14 @@
+2.6.4
+=====
+76890a5 Revert "(#5304) Use internal_name rather than real_name for maillist provider"
+19f3879 Disable remote ralsh by default
+eee1a9c (#5424) Ship auth.conf as part of installing from source
+779fea8 (#5304) Use internal_name rather than real_name for maillist provider
+83f878e Renamed Reductive to Puppet
+
2.6.3
=====
+53bb805 Incremented CHANGELOG for 2.6.3
184733c [#5322] (#5322) Remove spec file that adds little value and causes failures
178c2a6 Fix test failures that fixing #4726 exposed.
74b6c09 (#4726) Fix RRD legacy support
diff --git a/LICENSE b/LICENSE
index a43a24352..6bfcc22a1 100644
--- a/LICENSE
+++ b/LICENSE
@@ -4,8 +4,8 @@ Puppet Labs can be contacted at: info@puppetlabs.com
This program and entire repository is free software; you can
redistribute it and/or modify it under the terms of the GNU
-General Public License as published by the Free Software
-Foundation; either version 2 of the License, or any later version.
+General Public License Version 2 as published by the Free Software
+Foundation.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
diff --git a/Rakefile b/Rakefile
index 22d4a9aeb..38cfec6ce 100644
--- a/Rakefile
+++ b/Rakefile
@@ -5,8 +5,8 @@ $LOAD_PATH << File.join(File.dirname(__FILE__), 'tasks')
require 'rake'
require 'rake/packagetask'
require 'rake/gempackagetask'
-require 'spec'
-require 'spec/rake/spectask'
+require 'rspec'
+require "rspec/core/rake_task"
module Puppet
PUPPETVERSION = File.read('lib/puppet.rb')[/PUPPETVERSION *= *'(.*)'/,1] or fail "Couldn't find PUPPETVERSION"
@@ -42,8 +42,7 @@ end
desc "Create the tarball and the gem - use when releasing"
task :puppetpackages => [:create_gem, :package]
-Spec::Rake::SpecTask.new do |t|
- t.spec_opts = ['--format','s', '--loadby','mtime','--color', '--backtrace']
+RSpec::Core::RakeTask.new do |t|
t.pattern ='spec/{unit,integration}/**/*.rb'
t.fail_on_error = false
end
diff --git a/ext/nagios/naggen b/ext/nagios/naggen
index a9e04c47a..c6ca15a55 100755
--- a/ext/nagios/naggen
+++ b/ext/nagios/naggen
@@ -63,7 +63,7 @@
#
# = Copyright
#
-# Copyright (c) 2009 Reductive Labs, LLC
+# Copyright (c) 2009 Puppet Labs, LLC
# Licensed under the GPL 2
require 'puppet'
diff --git a/ext/puppet-test b/ext/puppet-test
index 61397e74b..f2648c9ee 100755
--- a/ext/puppet-test
+++ b/ext/puppet-test
@@ -90,7 +90,7 @@
#
# = Copyright
#
-# Copyright (c) 2005, 2006 Reductive Labs, LLC
+# Copyright (c) 2005, 2006 Puppet Labs, LLC
# Licensed under the GNU Public License
# Do an initial trap, so that cancels don't get a stack trace.
diff --git a/install.rb b/install.rb
index f7541c854..7627a8d11 100755
--- a/install.rb
+++ b/install.rb
@@ -79,6 +79,7 @@ def glob(list)
end
# Set these values to what you want installed.
+configs = glob(%w{conf/auth.conf})
sbins = glob(%w{sbin/*})
bins = glob(%w{bin/*})
rdoc = glob(%w{bin/* sbin/* lib/**/*.rb README README-library CHANGELOG TODO Install}).reject { |e| e=~ /\.(bat|cmd)$/ }
@@ -87,6 +88,14 @@ man = glob(%w{man/man[0-9]/*})
libs = glob(%w{lib/**/*.rb lib/**/*.py lib/puppet/util/command_line/*})
tests = glob(%w{test/**/*.rb})
+def do_configs(configs, target, strip = 'conf/')
+ Dir.mkdir(target) unless File.directory? target
+ configs.each do |cf|
+ ocf = File.join(InstallOptions.config_dir, cf.gsub(/#{strip}/, ''))
+ File.install(cf, ocf, 0644, true)
+ end
+end
+
def do_bins(bins, target, strip = 's?bin/')
Dir.mkdir(target) unless File.directory? target
bins.each do |bf|
@@ -157,6 +166,8 @@ end
def prepare_installation
$operatingsystem = Facter["operatingsystem"].value
+ InstallOptions.configs = true
+
# Only try to do docs if we're sure they have rdoc
if $haverdoc
InstallOptions.rdoc = true
@@ -193,9 +204,15 @@ def prepare_installation
opts.on('--[no-]tests', 'Prevents the execution of unit tests.', 'Default on.') do |ontest|
InstallOptions.tests = ontest
end
+ opts.on('--[no-]configs', 'Prevents the installation of config files', 'Default off.') do |ontest|
+ InstallOptions.configs = ontest
+ end
opts.on('--destdir[=OPTIONAL]', 'Installation prefix for all targets', 'Default essentially /') do |destdir|
InstallOptions.destdir = destdir
end
+ opts.on('--configdir[=OPTIONAL]', 'Installation directory for config files', 'Default /etc/puppet') do |configdir|
+ InstallOptions.configdir = configdir
+ end
opts.on('--bindir[=OPTIONAL]', 'Installation directory for binaries', 'overrides Config::CONFIG["bindir"]') do |bindir|
InstallOptions.bindir = bindir
end
@@ -209,15 +226,17 @@ def prepare_installation
InstallOptions.mandir = mandir
end
opts.on('--quick', 'Performs a quick installation. Only the', 'installation is done.') do |quick|
- InstallOptions.rdoc = false
- InstallOptions.ri = false
- InstallOptions.tests = false
+ InstallOptions.rdoc = false
+ InstallOptions.ri = false
+ InstallOptions.tests = false
+ InstallOptions.configs = true
end
opts.on('--full', 'Performs a full installation. All', 'optional installation steps are run.') do |full|
- InstallOptions.rdoc = true
- InstallOptions.man = true
- InstallOptions.ri = true
- InstallOptions.tests = true
+ InstallOptions.rdoc = true
+ InstallOptions.man = true
+ InstallOptions.ri = true
+ InstallOptions.tests = true
+ InstallOptions.configs = true
end
opts.separator("")
opts.on_tail('--help', "Shows this help text.") do
@@ -243,6 +262,12 @@ def prepare_installation
Config::CONFIG['sbindir'] = "/usr/sbin"
end
+ if not InstallOptions.configdir.nil?
+ configdir = InstallOptions.configdir
+ else
+ configdir = "/etc/puppet"
+ end
+
if not InstallOptions.bindir.nil?
bindir = InstallOptions.bindir
else
@@ -277,22 +302,26 @@ def prepare_installation
# To be deprecated once people move over to using --destdir option
if (destdir = ENV['DESTDIR'])
+ configdir = "#{destdir}#{configdir}"
bindir = "#{destdir}#{bindir}"
sbindir = "#{destdir}#{sbindir}"
mandir = "#{destdir}#{mandir}"
sitelibdir = "#{destdir}#{sitelibdir}"
+ FileUtils.makedirs(configdir) if InstallOptions.configs
FileUtils.makedirs(bindir)
FileUtils.makedirs(sbindir)
FileUtils.makedirs(mandir)
FileUtils.makedirs(sitelibdir)
# This is the new way forward
elsif (destdir = InstallOptions.destdir)
+ configdir = "#{destdir}#{configdir}"
bindir = "#{destdir}#{bindir}"
sbindir = "#{destdir}#{sbindir}"
mandir = "#{destdir}#{mandir}"
sitelibdir = "#{destdir}#{sitelibdir}"
+ FileUtils.makedirs(configdir) if InstallOptions.configs
FileUtils.makedirs(bindir)
FileUtils.makedirs(sbindir)
FileUtils.makedirs(mandir)
@@ -303,6 +332,7 @@ def prepare_installation
InstallOptions.tmp_dirs = tmpdirs.compact
InstallOptions.site_dir = sitelibdir
+ InstallOptions.config_dir = configdir
InstallOptions.bin_dir = bindir
InstallOptions.sbin_dir = sbindir
InstallOptions.lib_dir = libdir
@@ -459,6 +489,7 @@ prepare_installation
#build_rdoc(rdoc) if InstallOptions.rdoc
#build_ri(ri) if InstallOptions.ri
#build_man(bins, sbins) if InstallOptions.man
+do_configs(configs, InstallOptions.config_dir) if InstallOptions.configs
do_bins(sbins, InstallOptions.sbin_dir)
do_bins(bins, InstallOptions.bin_dir)
do_libs(libs)
diff --git a/lib/puppet.rb b/lib/puppet.rb
index 78fb5138b..a58d3c801 100644
--- a/lib/puppet.rb
+++ b/lib/puppet.rb
@@ -24,7 +24,7 @@ require 'puppet/util/run_mode'
# it's also a place to find top-level commands like 'debug'
module Puppet
- PUPPETVERSION = '2.6.3'
+ PUPPETVERSION = '2.6.4'
def Puppet.version
PUPPETVERSION
diff --git a/lib/puppet/application.rb b/lib/puppet/application.rb
index f0159a65d..17ad69cee 100644
--- a/lib/puppet/application.rb
+++ b/lib/puppet/application.rb
@@ -212,10 +212,17 @@ class Application
end
def find(name)
- self.const_get(name.to_s.capitalize)
- rescue
+ klass = name.to_s.capitalize
+
+ # const_defined? is used before const_get since const_defined? will only
+ # check within our namespace, whereas const_get will check ancestor
+ # trees as well, resulting in unexpected behaviour.
+ if !self.const_defined?(klass)
puts "Unable to find application '#{name.to_s}'."
Kernel::exit(1)
+ end
+
+ self.const_get(klass)
end
def [](name)
diff --git a/lib/puppet/application/agent.rb b/lib/puppet/application/agent.rb
index c5ad72068..96f33296f 100644
--- a/lib/puppet/application/agent.rb
+++ b/lib/puppet/application/agent.rb
@@ -228,9 +228,9 @@ class Puppet::Application::Agent < Puppet::Application
# access to the local files and we don't need a ca.
Puppet::SSL::Host.ca_location = options[:fingerprint] ? :none : :remote
- Puppet::Transaction::Report.terminus_class = :rest
+ Puppet::Transaction::Report.indirection.terminus_class = :rest
# we want the last report to be persisted locally
- Puppet::Transaction::Report.cache_class = :yaml
+ Puppet::Transaction::Report.indirection.cache_class = :yaml
# Override the default; puppetd needs this, usually.
# You can still override this on the command-line with, e.g., :compiler.
@@ -239,8 +239,7 @@ class Puppet::Application::Agent < Puppet::Application
# Override the default.
Puppet[:facts_terminus] = :facter
- Puppet::Resource::Catalog.cache_class = :yaml
-
+ Puppet::Resource::Catalog.indirection.cache_class = :yaml
# We need tomake the client either way, we just don't start it
# if --no-client is set.
diff --git a/lib/puppet/application/apply.rb b/lib/puppet/application/apply.rb
index 8ec3fab6b..e5b4bb5b7 100644
--- a/lib/puppet/application/apply.rb
+++ b/lib/puppet/application/apply.rb
@@ -85,12 +85,12 @@ class Puppet::Application::Apply < Puppet::Application
end
# Collect our facts.
- unless facts = Puppet::Node::Facts.find(Puppet[:certname])
+ unless facts = Puppet::Node::Facts.indirection.find(Puppet[:certname])
raise "Could not find facts for #{Puppet[:certname]}"
end
# Find our Node
- unless node = Puppet::Node.find(Puppet[:certname])
+ unless node = Puppet::Node.indirection.find(Puppet[:certname])
raise "Could not find node #{Puppet[:certname]}"
end
@@ -112,7 +112,7 @@ class Puppet::Application::Apply < Puppet::Application
begin
# Compile our catalog
starttime = Time.now
- catalog = Puppet::Resource::Catalog.find(node.name, :use_node => node)
+ catalog = Puppet::Resource::Catalog.indirection.find(node.name, :use_node => node)
# Translate it to a RAL catalog
catalog = catalog.to_ral
@@ -149,7 +149,7 @@ class Puppet::Application::Apply < Puppet::Application
end
# we want the last report to be persisted locally
- Puppet::Transaction::Report.cache_class = :yaml
+ Puppet::Transaction::Report.indirection.cache_class = :yaml
if options[:debug]
Puppet::Util::Log.level = :debug
diff --git a/lib/puppet/application/doc.rb b/lib/puppet/application/doc.rb
index 1f6c63286..aaefd6e75 100644
--- a/lib/puppet/application/doc.rb
+++ b/lib/puppet/application/doc.rb
@@ -8,7 +8,7 @@ class Puppet::Application::Doc < Puppet::Application
attr_accessor :unknown_args, :manifest
def preinit
- {:references => [], :mode => :text, :format => :to_rest }.each do |name,value|
+ {:references => [], :mode => :text, :format => :to_markdown }.each do |name,value|
options[name] = value
end
@unknown_args = []
@@ -113,9 +113,6 @@ class Puppet::Application::Doc < Puppet::Application
text += Puppet::Util::Reference.footer unless with_contents # We've only got one reference
- # Replace the trac links, since they're invalid everywhere else
- text.gsub!(/`\w+\s+([^`]+)`:trac:/) { |m| $1 }
-
if options[:mode] == :pdf
Puppet::Util::Reference.pdf(text)
else
diff --git a/lib/puppet/application/inspect.rb b/lib/puppet/application/inspect.rb
new file mode 100644
index 000000000..19324e285
--- /dev/null
+++ b/lib/puppet/application/inspect.rb
@@ -0,0 +1,123 @@
+require 'puppet'
+require 'puppet/application'
+require 'puppet/file_bucket/dipper'
+
+class Puppet::Application::Inspect < Puppet::Application
+
+ should_parse_config
+ run_mode :agent
+
+ option("--debug","-d")
+ option("--verbose","-v")
+
+ option("--logdest LOGDEST", "-l") do |arg|
+ begin
+ Puppet::Util::Log.newdestination(arg)
+ options[:logset] = true
+ rescue => detail
+ $stderr.puts detail.to_s
+ end
+ end
+
+ def setup
+ exit(Puppet.settings.print_configs ? 0 : 1) if Puppet.settings.print_configs?
+
+ raise "Inspect requires reporting to be enabled. Set report=true in puppet.conf to enable reporting." unless Puppet[:report]
+
+ @report = Puppet::Transaction::Report.new("inspect")
+
+ Puppet::Util::Log.newdestination(@report)
+ Puppet::Util::Log.newdestination(:console) unless options[:logset]
+
+ trap(:INT) do
+ $stderr.puts "Exiting"
+ exit(1)
+ end
+
+ if options[:debug]
+ Puppet::Util::Log.level = :debug
+ elsif options[:verbose]
+ Puppet::Util::Log.level = :info
+ end
+
+ Puppet::Transaction::Report.indirection.terminus_class = :rest
+ Puppet::Resource::Catalog.indirection.terminus_class = :yaml
+ end
+
+ def run_command
+ retrieval_starttime = Time.now
+
+ unless catalog = Puppet::Resource::Catalog.indirection.find(Puppet[:certname])
+ raise "Could not find catalog for #{Puppet[:certname]}"
+ end
+
+ @report.configuration_version = catalog.version
+
+ inspect_starttime = Time.now
+ @report.add_times("config_retrieval", inspect_starttime - retrieval_starttime)
+
+ if Puppet[:archive_files]
+ dipper = Puppet::FileBucket::Dipper.new(:Server => Puppet[:archive_file_server])
+ end
+
+ catalog.to_ral.resources.each do |ral_resource|
+ audited_attributes = ral_resource[:audit]
+ next unless audited_attributes
+
+ status = Puppet::Resource::Status.new(ral_resource)
+
+ begin
+ audited_resource = ral_resource.to_resource
+ rescue StandardError => detail
+ puts detail.backtrace if Puppet[:trace]
+ ral_resource.err "Could not inspect #{ral_resource}; skipping: #{detail}"
+ audited_attributes.each do |name|
+ event = ral_resource.event(
+ :property => name,
+ :status => "failure",
+ :audited => true,
+ :message => "failed to inspect #{name}"
+ )
+ status.add_event(event)
+ end
+ else
+ audited_attributes.each do |name|
+ next if audited_resource[name].nil?
+ # Skip :absent properties of :absent resources. Really, it would be nicer if the RAL returned nil for those, but it doesn't. ~JW
+ if name == :ensure or audited_resource[:ensure] != :absent or audited_resource[name] != :absent
+ event = ral_resource.event(
+ :previous_value => audited_resource[name],
+ :property => name,
+ :status => "audit",
+ :audited => true,
+ :message => "inspected value is #{audited_resource[name].inspect}"
+ )
+ status.add_event(event)
+ end
+ end
+ end
+ if Puppet[:archive_files] and ral_resource.type == :file and audited_attributes.include?(:content)
+ path = ral_resource[:path]
+ if File.readable?(path)
+ begin
+ dipper.backup(path)
+ rescue StandardError => detail
+ Puppet.warning detail
+ end
+ end
+ end
+ @report.add_resource_status(status)
+ end
+
+ finishtime = Time.now
+ @report.add_times("inspect", finishtime - inspect_starttime)
+ @report.finalize_report
+
+ begin
+ Puppet::Transaction::Report.indirection.save(@report)
+ rescue => detail
+ puts detail.backtrace if Puppet[:trace]
+ Puppet.err "Could not send report: #{detail}"
+ end
+ end
+end
diff --git a/lib/puppet/application/kick.rb b/lib/puppet/application/kick.rb
index 37aeb1ef2..12dad653a 100644
--- a/lib/puppet/application/kick.rb
+++ b/lib/puppet/application/kick.rb
@@ -120,7 +120,7 @@ class Puppet::Application::Kick < Puppet::Application
:background => ! options[:foreground],
:ignoreschedules => options[:ignoreschedules]
}
- run = Puppet::Run.new( run_options ).save( url )
+ run = Puppet::Run.indirection.save(Puppet::Run.new( run_options ), url)
puts "Getting status"
result = run.status
puts "status is #{result}"
@@ -175,12 +175,12 @@ class Puppet::Application::Kick < Puppet::Application
if Puppet[:node_terminus] == "ldap" and (options[:all] or @classes)
if options[:all]
- @hosts = Puppet::Node.search("whatever", :fqdn => options[:fqdn]).collect { |node| node.name }
+ @hosts = Puppet::Node.indirection.search("whatever", :fqdn => options[:fqdn]).collect { |node| node.name }
puts "all: #{@hosts.join(", ")}"
else
@hosts = []
@classes.each do |klass|
- list = Puppet::Node.search("whatever", :fqdn => options[:fqdn], :class => klass).collect { |node| node.name }
+ list = Puppet::Node.indirection.search("whatever", :fqdn => options[:fqdn], :class => klass).collect { |node| node.name }
puts "#{klass}: #{list.join(", ")}"
@hosts += list
diff --git a/lib/puppet/application/master.rb b/lib/puppet/application/master.rb
index fde474907..879b66c67 100644
--- a/lib/puppet/application/master.rb
+++ b/lib/puppet/application/master.rb
@@ -51,7 +51,7 @@ class Puppet::Application::Master < Puppet::Application
Puppet::Util::Log.newdestination :console
raise ArgumentError, "Cannot render compiled catalogs without pson support" unless Puppet.features.pson?
begin
- unless catalog = Puppet::Resource::Catalog.find(options[:node])
+ unless catalog = Puppet::Resource::Catalog.indirection.find(options[:node])
raise "Could not compile catalog for #{options[:node]}"
end
@@ -139,7 +139,7 @@ class Puppet::Application::Master < Puppet::Application
Puppet.settings.use :main, :master, :ssl
# Cache our nodes in yaml. Currently not configurable.
- Puppet::Node.cache_class = :yaml
+ Puppet::Node.indirection.cache_class = :yaml
# Configure all of the SSL stuff.
if Puppet::SSL::CertificateAuthority.ca?
diff --git a/lib/puppet/application/queue.rb b/lib/puppet/application/queue.rb
index 239f6b2ad..b9e8ca4ca 100644
--- a/lib/puppet/application/queue.rb
+++ b/lib/puppet/application/queue.rb
@@ -41,12 +41,12 @@ class Puppet::Application::Queue < Puppet::Application
require 'puppet/indirector/catalog/queue' # provides Puppet::Indirector::Queue.subscribe
Puppet.notice "Starting puppetqd #{Puppet.version}"
Puppet::Resource::Catalog::Queue.subscribe do |catalog|
- # Once you have a Puppet::Resource::Catalog instance, calling save on it should suffice
+ # Once you have a Puppet::Resource::Catalog instance, passing it to save should suffice
# to put it through to the database via its active_record indirector (which is determined
# by the terminus_class = :active_record setting above)
Puppet::Util.benchmark(:notice, "Processing queued catalog for #{catalog.name}") do
begin
- catalog.save
+ Puppet::Resource::Catalog.indirection.save(catalog)
rescue => detail
puts detail.backtrace if Puppet[:trace]
Puppet.err "Could not save queued catalog for #{catalog.name}: #{detail}"
@@ -79,7 +79,7 @@ class Puppet::Application::Queue < Puppet::Application
exit(Puppet.settings.print_configs ? 0 : 1) if Puppet.settings.print_configs?
require 'puppet/resource/catalog'
- Puppet::Resource::Catalog.terminus_class = :active_record
+ Puppet::Resource::Catalog.indirection.terminus_class = :active_record
daemon.daemonize if Puppet[:daemonize]
@@ -87,6 +87,6 @@ class Puppet::Application::Queue < Puppet::Application
# class set up, because if storeconfigs is enabled,
# we'll get a loop of continually caching the catalog
# for storage again.
- Puppet::Resource::Catalog.cache_class = nil
+ Puppet::Resource::Catalog.indirection.cache_class = nil
end
end
diff --git a/lib/puppet/application/resource.rb b/lib/puppet/application/resource.rb
index f55caa58a..c7c1c28be 100644
--- a/lib/puppet/application/resource.rb
+++ b/lib/puppet/application/resource.rb
@@ -76,12 +76,12 @@ class Puppet::Application::Resource < Puppet::Application
text = if name
if params.empty?
- [ Puppet::Resource.find( key ) ]
+ [ Puppet::Resource.indirection.find( key ) ]
else
- [ Puppet::Resource.new( type, name, :parameters => params ).save( key ) ]
+ [ Puppet::Resource.indirection.save(Puppet::Resource.new( type, name, :parameters => params ), key) ]
end
else
- Puppet::Resource.search( key, {} )
+ Puppet::Resource.indirection.search( key, {} )
end.map(&format).join("\n")
if options[:edit]
diff --git a/lib/puppet/configurer.rb b/lib/puppet/configurer.rb
index 1c0639029..72e387c64 100644
--- a/lib/puppet/configurer.rb
+++ b/lib/puppet/configurer.rb
@@ -72,10 +72,6 @@ class Puppet::Configurer
@splayed = false
end
- def initialize_report
- Puppet::Transaction::Report.new
- end
-
# Prepare for catalog retrieval. Downloads everything necessary, etc.
def prepare(options)
dostorage
@@ -134,7 +130,7 @@ class Puppet::Configurer
Puppet.err "Failed to prepare catalog: #{detail}"
end
- options[:report] ||= initialize_report
+ options[:report] ||= Puppet::Transaction::Report.new("apply")
report = options[:report]
Puppet::Util::Log.newdestination(report)
@@ -145,6 +141,8 @@ class Puppet::Configurer
return
end
+ report.configuration_version = catalog.version
+
transaction = nil
begin
@@ -171,12 +169,12 @@ class Puppet::Configurer
send_report(report, transaction)
end
- def send_report(report, trans = nil)
- trans.generate_report if trans
+ def send_report(report, trans)
+ report.finalize_report if trans
puts report.summary if Puppet[:summarize]
save_last_run_summary(report)
if Puppet[:report]
- report.save
+ Puppet::Transaction::Report.indirection.save(report)
end
rescue => detail
puts detail.backtrace if Puppet[:trace]
@@ -224,7 +222,7 @@ class Puppet::Configurer
def retrieve_catalog_from_cache(fact_options)
result = nil
@duration = thinmark do
- result = Puppet::Resource::Catalog.find(Puppet[:certname], fact_options.merge(:ignore_terminus => true))
+ result = Puppet::Resource::Catalog.indirection.find(Puppet[:certname], fact_options.merge(:ignore_terminus => true))
end
Puppet.notice "Using cached catalog"
result
@@ -237,7 +235,7 @@ class Puppet::Configurer
def retrieve_new_catalog(fact_options)
result = nil
@duration = thinmark do
- result = Puppet::Resource::Catalog.find(Puppet[:certname], fact_options.merge(:ignore_cache => true))
+ result = Puppet::Resource::Catalog.indirection.find(Puppet[:certname], fact_options.merge(:ignore_cache => true))
end
result
rescue SystemExit,NoMemoryError
diff --git a/lib/puppet/configurer/fact_handler.rb b/lib/puppet/configurer/fact_handler.rb
index 075a59458..abe032010 100644
--- a/lib/puppet/configurer/fact_handler.rb
+++ b/lib/puppet/configurer/fact_handler.rb
@@ -16,7 +16,7 @@ module Puppet::Configurer::FactHandler
# compile them and then "cache" them on the server.
begin
reload_facter
- Puppet::Node::Facts.find(Puppet[:certname])
+ Puppet::Node::Facts.indirection.find(Puppet[:certname])
rescue SystemExit,NoMemoryError
raise
rescue Exception => detail
diff --git a/lib/puppet/configurer/plugin_handler.rb b/lib/puppet/configurer/plugin_handler.rb
index 539441e75..cfc6b5a0b 100644
--- a/lib/puppet/configurer/plugin_handler.rb
+++ b/lib/puppet/configurer/plugin_handler.rb
@@ -19,8 +19,6 @@ module Puppet::Configurer::PluginHandler
begin
Puppet.info "Loading downloaded plugin #{file}"
load file
- rescue SystemExit,NoMemoryError
- raise
rescue Exception => detail
Puppet.err "Could not load downloaded file #{file}: #{detail}"
end
diff --git a/lib/puppet/defaults.rb b/lib/puppet/defaults.rb
index 8bf1cd84d..e3b86bca4 100644
--- a/lib/puppet/defaults.rb
+++ b/lib/puppet/defaults.rb
@@ -2,8 +2,8 @@
module Puppet
setdefaults(:main,
:confdir => [Puppet.run_mode.conf_dir, "The main Puppet configuration directory. The default for this parameter is calculated based on the user. If the process
- is running as root or the user that `puppet master` is supposed to run as, it defaults to a system directory, but if it's running as any other user,
- it defaults to being in `~`."],
+ is running as root or the user that Puppet is supposed to run as, it defaults to a system directory, but if it's running as any other user,
+ it defaults to being in the user's home directory."],
:vardir => [Puppet.run_mode.var_dir, "Where Puppet stores dynamic and growing data. The default for this parameter is calculated specially, like `confdir`_."],
:name => [Puppet.application_name.to_s, "The name of the application, if we are running as one. The
default is essentially $0 without the path or `.rb`."],
@@ -121,7 +121,7 @@ module Puppet
:hook => proc do |value|
require 'puppet/node/facts'
if value.to_s == "rest"
- Puppet::Node::Facts.cache_class = :yaml
+ Puppet::Node::Facts.indirection.cache_class = :yaml
end
end
},
@@ -152,7 +152,7 @@ module Puppet
Puppet.settings[:storeconfigs] = true
# But then we modify the configuration
- Puppet::Resource::Catalog.cache_class = :queue
+ Puppet::Resource::Catalog.indirection.cache_class = :queue
else
raise "Cannot disable asynchronous storeconfigs in a running process"
end
@@ -622,6 +622,11 @@ module Puppet
compression, but if it supports it, this setting might reduce performance on high-speed LANs."]
)
+ setdefaults(:inspect,
+ :archive_files => [false, "During an inspect run, whether to archive files whose contents are audited to a file bucket."],
+ :archive_file_server => ["$server", "During an inspect run, the file bucket server to archive files to if archive_files is set."]
+ )
+
# Plugin information.
setdefaults(
@@ -794,9 +799,9 @@ module Puppet
if value
require 'puppet/rails'
raise "StoreConfigs not supported without ActiveRecord 2.1 or higher" unless Puppet.features.rails?
- Puppet::Resource::Catalog.cache_class = :active_record unless Puppet.settings[:async_storeconfigs]
- Puppet::Node::Facts.cache_class = :active_record
- Puppet::Node.cache_class = :active_record
+ Puppet::Resource::Catalog.indirection.cache_class = :active_record unless Puppet.settings[:async_storeconfigs]
+ Puppet::Node::Facts.indirection.cache_class = :active_record
+ Puppet::Node.indirection.cache_class = :active_record
end
end
}
diff --git a/lib/puppet/file_bucket/dipper.rb b/lib/puppet/file_bucket/dipper.rb
index dbfcdcd43..be487d83f 100644
--- a/lib/puppet/file_bucket/dipper.rb
+++ b/lib/puppet/file_bucket/dipper.rb
@@ -33,10 +33,15 @@ class Puppet::FileBucket::Dipper
raise(ArgumentError, "File #{file} does not exist") unless ::File.exist?(file)
contents = ::File.read(file)
begin
- file_bucket_file = Puppet::FileBucket::File.new(contents, :bucket_path => @local_path, :path => absolutize_path(file) )
+ file_bucket_file = Puppet::FileBucket::File.new(contents, :bucket_path => @local_path)
dest_path = "#{@rest_path}#{file_bucket_file.name}"
- file_bucket_file.save(dest_path)
+ # Make a HEAD request for the file so that we don't waste time
+ # uploading it if it already exists in the bucket.
+ unless Puppet::FileBucket::File.indirection.head("#{@rest_path}#{file_bucket_file.checksum_type}/#{file_bucket_file.checksum_data}")
+ Puppet::FileBucket::File.indirection.save(file_bucket_file, dest_path)
+ end
+
return file_bucket_file.checksum_data
rescue => detail
puts detail.backtrace if Puppet[:trace]
@@ -47,7 +52,7 @@ class Puppet::FileBucket::Dipper
# Retrieve a file by sum.
def getfile(sum)
source_path = "#{@rest_path}md5/#{sum}"
- file_bucket_file = Puppet::FileBucket::File.find(source_path, :bucket_path => @local_path)
+ file_bucket_file = Puppet::FileBucket::File.indirection.find(source_path, :bucket_path => @local_path)
raise Puppet::Error, "File not found" unless file_bucket_file
file_bucket_file.to_s
diff --git a/lib/puppet/file_bucket/file.rb b/lib/puppet/file_bucket/file.rb
index 96fd8e225..08c0329f1 100644
--- a/lib/puppet/file_bucket/file.rb
+++ b/lib/puppet/file_bucket/file.rb
@@ -1,10 +1,9 @@
require 'puppet/file_bucket'
require 'puppet/indirector'
require 'puppet/util/checksums'
+require 'digest/md5'
class Puppet::FileBucket::File
- include Puppet::Util::Checksums
-
# This class handles the abstract notion of a file in a filebucket.
# There are mechanisms to save and load this file locally and remotely in puppet/indirector/filebucketfile/*
# There is a compatibility class that emulates pre-indirector filebuckets in Puppet::FileBucket::Dipper
@@ -12,71 +11,27 @@ class Puppet::FileBucket::File
require 'puppet/file_bucket/file/indirection_hooks'
indirects :file_bucket_file, :terminus_class => :file, :extend => Puppet::FileBucket::File::IndirectionHooks
- attr :path, true
- attr :paths, true
- attr :contents, true
- attr :checksum_type
- attr :bucket_path, true
-
- def self.default_checksum_type
- "md5"
- end
+ attr :contents
+ attr :bucket_path
def initialize( contents, options = {} )
- @bucket_path = options[:bucket_path]
- @path = options[:path]
- @paths = options[:paths] || []
-
- @checksum = options[:checksum]
- @checksum_type = options[:checksum_type]
-
- self.contents = contents
-
- yield(self) if block_given?
-
- validate!
- end
+ raise ArgumentError if !contents.is_a?(String)
+ @contents = contents
- def validate!
- validate_checksum_type!(checksum_type)
- validate_checksum!(checksum) if checksum
+ @bucket_path = options.delete(:bucket_path)
+ raise ArgumentError if options != {}
end
- def contents=(str)
- raise "You may not change the contents of a FileBucket File" if @contents
- validate_content!(str)
- @contents = str
+ def checksum_type
+ 'md5'
end
def checksum
- return @checksum if @checksum
- @checksum = calculate_checksum if contents
- @checksum
- end
-
- def checksum=(checksum)
- validate_checksum!(checksum)
- @checksum = checksum
- end
-
- def checksum_type=( new_checksum_type )
- @checksum = nil
- @checksum_type = new_checksum_type
- end
-
- def checksum_type
- unless @checksum_type
- if @checksum
- @checksum_type = sumtype(checksum)
- else
- @checksum_type = self.class.default_checksum_type
- end
- end
- @checksum_type
+ "{#{checksum_type}}#{checksum_data}"
end
def checksum_data
- sumdata(checksum)
+ @checksum_data ||= Digest::MD5.hexdigest(contents)
end
def to_s
@@ -84,18 +39,7 @@ class Puppet::FileBucket::File
end
def name
- [checksum_type, checksum_data, path].compact.join('/')
- end
-
- def name=(name)
- data = name.split('/',3)
- self.path = data.pop
- @checksum_type = nil
- self.checksum = "{#{data[0]}}#{data[1]}"
- end
-
- def conflict_check?
- true
+ "#{checksum_type}/#{checksum_data}"
end
def self.from_s( contents )
@@ -103,34 +47,10 @@ class Puppet::FileBucket::File
end
def to_pson
- hash = { "contents" => contents }
- hash["path"] = @path if @path
- hash.to_pson
+ { "contents" => contents }.to_pson
end
def self.from_pson( pson )
- self.new( pson["contents"], :path => pson["path"] )
- end
-
- private
-
- def calculate_checksum
- "{#{checksum_type}}" + send(checksum_type, contents)
- end
-
- def validate_content!(content)
- raise ArgumentError, "Contents must be a string" if content and ! content.is_a?(String)
- end
-
- def validate_checksum!(new_checksum)
- newtype = sumtype(new_checksum)
-
- unless sumdata(new_checksum) == (calc_sum = send(newtype, contents))
- raise Puppet::Error, "Checksum #{new_checksum} does not match contents #{calc_sum}"
- end
- end
-
- def validate_checksum_type!(type)
- raise ArgumentError, "Invalid checksum type #{type}" unless respond_to?(type)
+ self.new( pson["contents"] )
end
end
diff --git a/lib/puppet/indirector.rb b/lib/puppet/indirector.rb
index 5b737578b..9effc5cdd 100644
--- a/lib/puppet/indirector.rb
+++ b/lib/puppet/indirector.rb
@@ -21,7 +21,6 @@ module Puppet::Indirector
raise(ArgumentError, "Already handling indirection for #{@indirection.name}; cannot also handle #{indirection}") if @indirection
# populate this class with the various new methods
extend ClassMethods
- include InstanceMethods
include Puppet::Indirector::Envelope
extend Puppet::Network::FormatHandler
@@ -32,36 +31,5 @@ module Puppet::Indirector
module ClassMethods
attr_reader :indirection
-
- def cache_class=(klass)
- indirection.cache_class = klass
- end
-
- def terminus_class=(klass)
- indirection.terminus_class = klass
- end
-
- # Expire any cached instance.
- def expire(*args)
- indirection.expire(*args)
- end
-
- def find(*args)
- indirection.find(*args)
- end
-
- def destroy(*args)
- indirection.destroy(*args)
- end
-
- def search(*args)
- indirection.search(*args)
- end
- end
-
- module InstanceMethods
- def save(key = nil)
- self.class.indirection.save key, self
- end
end
end
diff --git a/lib/puppet/indirector/catalog/active_record.rb b/lib/puppet/indirector/catalog/active_record.rb
index fabb08eb9..365cdfefe 100644
--- a/lib/puppet/indirector/catalog/active_record.rb
+++ b/lib/puppet/indirector/catalog/active_record.rb
@@ -30,9 +30,9 @@ class Puppet::Resource::Catalog::ActiveRecord < Puppet::Indirector::ActiveRecord
host.merge_resources(catalog.vertices)
host.last_compile = Time.now
- if node = Puppet::Node.find(catalog.name)
+ if node = Puppet::Node.indirection.find(catalog.name)
host.ip = node.parameters["ipaddress"]
- host.environment = node.environment
+ host.environment = node.environment.to_s
end
host.save
diff --git a/lib/puppet/indirector/catalog/compiler.rb b/lib/puppet/indirector/catalog/compiler.rb
index 78be4caf7..f4c40812d 100644
--- a/lib/puppet/indirector/catalog/compiler.rb
+++ b/lib/puppet/indirector/catalog/compiler.rb
@@ -23,7 +23,7 @@ class Puppet::Resource::Catalog::Compiler < Puppet::Indirector::Code
facts = Puppet::Node::Facts.convert_from(format, text_facts)
end
facts.add_timestamp
- facts.save
+ Puppet::Node::Facts.indirection.save(facts)
end
# Compile a node's catalog.
@@ -88,7 +88,7 @@ class Puppet::Resource::Catalog::Compiler < Puppet::Indirector::Code
# Turn our host name into a node object.
def find_node(name)
begin
- return nil unless node = Puppet::Node.find(name)
+ return nil unless node = Puppet::Node.indirection.find(name)
rescue => detail
puts detail.backtrace if Puppet[:trace]
raise Puppet::Error, "Failed when searching for node #{name}: #{detail}"
diff --git a/lib/puppet/indirector/file_bucket_file/file.rb b/lib/puppet/indirector/file_bucket_file/file.rb
index 318858aaf..8bea2d767 100644
--- a/lib/puppet/indirector/file_bucket_file/file.rb
+++ b/lib/puppet/indirector/file_bucket_file/file.rb
@@ -14,16 +14,31 @@ module Puppet::FileBucketFile
end
def find( request )
- checksum, path = request_to_checksum_and_path( request )
- find_by_checksum( checksum, request.options )
+ checksum = request_to_checksum( request )
+ file_path = path_for(request.options[:bucket_path], checksum, 'contents')
+
+ return nil unless ::File.exists?(file_path)
+
+ if request.options[:diff_with]
+ hash_protocol = sumtype(checksum)
+ file2_path = path_for(request.options[:bucket_path], request.options[:diff_with], 'contents')
+ raise "could not find diff_with #{request.options[:diff_with]}" unless ::File.exists?(file2_path)
+ return `diff #{file_path.inspect} #{file2_path.inspect}`
+ else
+ contents = ::File.read file_path
+ Puppet.info "FileBucket read #{checksum}"
+ model.new(contents)
+ end
end
- def save( request )
- checksum, path = request_to_checksum_and_path( request )
+ def head(request)
+ checksum = request_to_checksum(request)
+ file_path = path_for(request.options[:bucket_path], checksum, 'contents')
+ ::File.exists?(file_path)
+ end
+ def save( request )
instance = request.instance
- instance.checksum = checksum if checksum
- instance.path = path if path
save_to_disk(instance)
instance.to_s
@@ -31,66 +46,41 @@ module Puppet::FileBucketFile
private
- def find_by_checksum( checksum, options )
- model.new( nil, :checksum => checksum ) do |bucket_file|
- bucket_file.bucket_path = options[:bucket_path]
- filename = contents_path_for( bucket_file )
-
- return nil if ! ::File.exist? filename
-
- begin
- contents = ::File.read filename
- Puppet.info "FileBucket read #{bucket_file.checksum}"
- rescue RuntimeError => e
- raise Puppet::Error, "file could not be read: #{e.message}"
- end
-
- if ::File.exist?(paths_path_for( bucket_file) )
- ::File.open(paths_path_for( bucket_file) ) do |f|
- bucket_file.paths = f.readlines.map { |l| l.chomp }
- end
- end
-
- bucket_file.contents = contents
- end
- end
-
def save_to_disk( bucket_file )
- # If the file already exists, just return the md5 sum.
- if ::File.exist?(contents_path_for( bucket_file) )
+ filename = path_for(bucket_file.bucket_path, bucket_file.checksum_data, 'contents')
+ dirname = path_for(bucket_file.bucket_path, bucket_file.checksum_data)
+
+ # If the file already exists, do nothing.
+ if ::File.exist?(filename)
verify_identical_file!(bucket_file)
else
# Make the directories if necessary.
- unless ::File.directory?( path_for( bucket_file) )
+ unless ::File.directory?(dirname)
Puppet::Util.withumask(0007) do
- ::FileUtils.mkdir_p( path_for( bucket_file) )
+ ::FileUtils.mkdir_p(dirname)
end
end
- Puppet.info "FileBucket adding #{bucket_file.path} as #{bucket_file.checksum}"
+ Puppet.info "FileBucket adding #{bucket_file.checksum}"
# Write the file to disk.
Puppet::Util.withumask(0007) do
- ::File.open(contents_path_for(bucket_file), ::File::WRONLY|::File::CREAT, 0440) do |of|
+ ::File.open(filename, ::File::WRONLY|::File::CREAT, 0440) do |of|
of.print bucket_file.contents
end
end
end
-
- save_path_to_paths_file(bucket_file)
- bucket_file.checksum_data
end
- def request_to_checksum_and_path( request )
- return [request.key, nil] if checksum?(request.key)
-
- checksum_type, checksum, path = request.key.split(/\//, 3)
- return(checksum_type.to_s == "" ? nil : [ "{#{checksum_type}}#{checksum}", path ])
+ def request_to_checksum( request )
+ checksum_type, checksum, path = request.key.split(/\//, 3) # Note: we ignore path if present.
+ raise "Unsupported checksum type #{checksum_type.inspect}" if checksum_type != 'md5'
+ raise "Invalid checksum #{checksum.inspect}" if checksum !~ /^[0-9a-f]{32}$/
+ checksum
end
- def path_for(bucket_file, subfile = nil)
- bucket_path = bucket_file.bucket_path || Puppet[:bucketdir]
- digest = bucket_file.checksum_data
+ def path_for(bucket_path, digest, subfile = nil)
+ bucket_path ||= Puppet[:bucketdir]
dir = ::File.join(digest[0..7].split(""))
basedir = ::File.join(bucket_path, dir, digest)
@@ -99,48 +89,18 @@ module Puppet::FileBucketFile
::File.join(basedir, subfile)
end
- def contents_path_for(bucket_file)
- path_for(bucket_file, "contents")
- end
-
- def paths_path_for(bucket_file)
- path_for(bucket_file, "paths")
- end
-
- def content_check?
- true
- end
-
# If conflict_check is enabled, verify that the passed text is
# the same as the text in our file.
def verify_identical_file!(bucket_file)
- return unless content_check?
- disk_contents = ::File.read(contents_path_for(bucket_file))
+ disk_contents = ::File.read(path_for(bucket_file.bucket_path, bucket_file.checksum_data, 'contents'))
# If the contents don't match, then we've found a conflict.
# Unlikely, but quite bad.
if disk_contents != bucket_file.contents
- raise Puppet::FileBucket::BucketError, "Got passed new contents for sum #{bucket_file.checksum}", caller
+ raise Puppet::FileBucket::BucketError, "Got passed new contents for sum #{bucket_file.checksum}"
else
- Puppet.info "FileBucket got a duplicate file #{bucket_file.path} (#{bucket_file.checksum})"
+ Puppet.info "FileBucket got a duplicate file #{bucket_file.checksum}"
end
end
-
- def save_path_to_paths_file(bucket_file)
- return unless bucket_file.path
-
- # check for dupes
- if ::File.exist?(paths_path_for( bucket_file) )
- ::File.open(paths_path_for( bucket_file) ) do |f|
- return if f.readlines.collect { |l| l.chomp }.include?(bucket_file.path)
- end
- end
-
- # if it's a new file, or if our path isn't in the file yet, add it
- ::File.open(paths_path_for(bucket_file), ::File::WRONLY|::File::CREAT|::File::APPEND) do |of|
- of.puts bucket_file.path
- end
- end
-
end
end
diff --git a/lib/puppet/indirector/indirection.rb b/lib/puppet/indirector/indirection.rb
index 9095e48f8..d958a82ac 100644
--- a/lib/puppet/indirector/indirection.rb
+++ b/lib/puppet/indirector/indirection.rb
@@ -180,18 +180,13 @@ class Puppet::Indirector::Indirection
request = request(:find, key, *args)
terminus = prepare(request)
- begin
- if result = find_in_cache(request)
- return result
- end
- rescue => detail
- puts detail.backtrace if Puppet[:trace]
- Puppet.err "Cached #{self.name} for #{request.key} failed: #{detail}"
+ if result = find_in_cache(request)
+ return result
end
# Otherwise, return the result from the terminus, caching if appropriate.
if ! request.ignore_terminus? and result = terminus.find(request)
- result.expiration ||= self.expiration
+ result.expiration ||= self.expiration if result.respond_to?(:expiration)
if cache? and request.use_cache?
Puppet.info "Caching #{self.name} for #{request.key}"
cache.save request(:save, result, *args)
@@ -203,6 +198,17 @@ class Puppet::Indirector::Indirection
nil
end
+ # Search for an instance in the appropriate terminus, and return a
+ # boolean indicating whether the instance was found.
+ def head(key, *args)
+ request = request(:head, key, *args)
+ terminus = prepare(request)
+
+ # Look in the cache first, then in the terminus. Force the result
+ # to be a boolean.
+ !!(find_in_cache(request) || terminus.head(request))
+ end
+
def find_in_cache(request)
# See if our instance is in the cache and up to date.
return nil unless cache? and ! request.ignore_cache? and cached = cache.find(request)
@@ -213,6 +219,10 @@ class Puppet::Indirector::Indirection
Puppet.debug "Using cached #{self.name} for #{request.key}"
cached
+ rescue => detail
+ puts detail.backtrace if Puppet[:trace]
+ Puppet.err "Cached #{self.name} for #{request.key} failed: #{detail}"
+ nil
end
# Remove something via the terminus.
@@ -247,7 +257,7 @@ class Puppet::Indirector::Indirection
# Save the instance in the appropriate terminus. This method is
# normally an instance method on the indirected class.
- def save(key, instance = nil)
+ def save(instance, key = nil)
request = request(:save, key, instance)
terminus = prepare(request)
diff --git a/lib/puppet/indirector/resource/ral.rb b/lib/puppet/indirector/resource/ral.rb
index 1c2ab14ae..bc41d14ae 100644
--- a/lib/puppet/indirector/resource/ral.rb
+++ b/lib/puppet/indirector/resource/ral.rb
@@ -34,12 +34,17 @@ class Puppet::Resource::Ral < Puppet::Indirector::Code
private
+ # {type,resource}_name: the resource name may contain slashes:
+ # File["/etc/hosts"]. To handle, assume the type name does
+ # _not_ have any slashes in it, and split only on the first.
+
def type_name( request )
- request.key.split('/')[0]
+ request.key.split('/', 2)[0]
end
def resource_name( request )
- request.key.split('/')[1]
+ name = request.key.split('/', 2)[1]
+ name unless name == ""
end
def type( request )
diff --git a/lib/puppet/indirector/rest.rb b/lib/puppet/indirector/rest.rb
index eb41ff3b1..e50dc68ae 100644
--- a/lib/puppet/indirector/rest.rb
+++ b/lib/puppet/indirector/rest.rb
@@ -53,11 +53,15 @@ class Puppet::Indirector::REST < Puppet::Indirector::Terminus
end
else
# Raise the http error if we didn't get a 'success' of some kind.
- message = "Error #{response.code} on SERVER: #{(response.body||'').empty? ? response.message : uncompress_body(response)}"
- raise Net::HTTPError.new(message, response)
+ raise convert_to_http_error(response)
end
end
+ def convert_to_http_error(response)
+ message = "Error #{response.code} on SERVER: #{(response.body||'').empty? ? response.message : uncompress_body(response)}"
+ Net::HTTPError.new(message, response)
+ end
+
# Provide appropriate headers.
def headers
add_accept_encoding({"Accept" => model.supported_formats.join(", ")})
@@ -73,6 +77,19 @@ class Puppet::Indirector::REST < Puppet::Indirector::Terminus
result
end
+ def head(request)
+ response = network(request).head(indirection2uri(request), headers)
+ case response.code
+ when "404"
+ return false
+ when /^2/
+ return true
+ else
+ # Raise the http error if we didn't get a 'success' of some kind.
+ raise convert_to_http_error(response)
+ end
+ end
+
def search(request)
unless result = deserialize(network(request).get(indirection2uri(request), headers), true)
return []
diff --git a/lib/puppet/network/handler/filebucket.rb b/lib/puppet/network/handler/filebucket.rb
index 6aaa2df1c..55028ee64 100755
--- a/lib/puppet/network/handler/filebucket.rb
+++ b/lib/puppet/network/handler/filebucket.rb
@@ -28,12 +28,12 @@ class Puppet::Network::Handler # :nodoc:
def addfile(contents, path, client = nil, clientip = nil)
contents = Base64.decode64(contents) if client
bucket = Puppet::FileBucket::File.new(contents)
- bucket.save
+ Puppet::FileBucket::File.indirection.save(bucket)
end
# Return the contents associated with a given md5 sum.
def getfile(md5, client = nil, clientip = nil)
- bucket = Puppet::FileBucket::File.find("md5:#{md5}")
+ bucket = Puppet::FileBucket::File.indirection.find("md5:#{md5}")
contents = bucket.contents
if client
diff --git a/lib/puppet/network/handler/fileserver.rb b/lib/puppet/network/handler/fileserver.rb
index 9abc7ee1a..5b4b17a32 100755
--- a/lib/puppet/network/handler/fileserver.rb
+++ b/lib/puppet/network/handler/fileserver.rb
@@ -236,7 +236,7 @@ class Puppet::Network::Handler
unless hostname = (client || Facter.value("hostname"))
raise ArgumentError, "Could not find hostname"
end
- env = (node = Puppet::Node.find(hostname)) ? node.environment : nil
+ env = (node = Puppet::Node.indirection.find(hostname)) ? node.environment : nil
# And use the environment to look up the module.
(mod = Puppet::Node::Environment.new(env).module(module_name) and mod.files?) ? @mounts[MODULES].copy(mod.name, mod.file_directory) : nil
diff --git a/lib/puppet/network/handler/master.rb b/lib/puppet/network/handler/master.rb
index c21aafafc..62aab539e 100644
--- a/lib/puppet/network/handler/master.rb
+++ b/lib/puppet/network/handler/master.rb
@@ -47,9 +47,9 @@ class Puppet::Network::Handler
client ||= facts["hostname"]
# Pass the facts to the fact handler
- Puppet::Node::Facts.new(client, facts).save unless local?
+ Puppet::Node::Facts.indirection.save(Puppet::Node::Facts.new(client, facts)) unless local?
- catalog = Puppet::Resource::Catalog.find(client)
+ catalog = Puppet::Resource::Catalog.indirection.find(client)
case format
when "yaml"
diff --git a/lib/puppet/network/http/api/v1.rb b/lib/puppet/network/http/api/v1.rb
index abbb2dfa9..4b7c15a36 100644
--- a/lib/puppet/network/http/api/v1.rb
+++ b/lib/puppet/network/http/api/v1.rb
@@ -13,6 +13,9 @@ module Puppet::Network::HTTP::API::V1
},
"DELETE" => {
:singular => :destroy
+ },
+ "HEAD" => {
+ :singular => :head
}
}
diff --git a/lib/puppet/network/http/handler.rb b/lib/puppet/network/http/handler.rb
index 82238aa0a..2b9e81b61 100644
--- a/lib/puppet/network/http/handler.rb
+++ b/lib/puppet/network/http/handler.rb
@@ -103,7 +103,7 @@ module Puppet::Network::HTTP::Handler
# Execute our find.
def do_find(indirection_name, key, params, request, response)
- unless result = model(indirection_name).find(key, params)
+ unless result = model(indirection_name).indirection.find(key, params)
Puppet.info("Could not find #{indirection_name} for '#{key}'")
return do_exception(response, "Could not find #{indirection_name} #{key}", 404)
end
@@ -114,13 +114,28 @@ module Puppet::Network::HTTP::Handler
format = format_to_use(request)
set_content_type(response, format)
- set_response(response, result.render(format))
+ if result.respond_to?(:render)
+ set_response(response, result.render(format))
+ else
+ set_response(response, result)
+ end
+ end
+
+ # Execute our head.
+ def do_head(indirection_request, request, response)
+ unless indirection_request.model.head(indirection_request.key, indirection_request.to_hash)
+ Puppet.info("Could not find #{indirection_request.indirection_name} for '#{indirection_request.key}'")
+ return do_exception(response, "Could not find #{indirection_request.indirection_name} #{indirection_request.key}", 404)
+ end
+
+ # No need to set a response because no response is expected from a
+ # HEAD request. All we need to do is not die.
end
# Execute our search.
def do_search(indirection_name, key, params, request, response)
model = self.model(indirection_name)
- result = model.search(key, params)
+ result = model.indirection.search(key, params)
if result.nil?
return do_exception(response, "Could not find instances in #{indirection_name} with '#{key}'", 404)
@@ -134,7 +149,7 @@ module Puppet::Network::HTTP::Handler
# Execute our destroy.
def do_destroy(indirection_name, key, params, request, response)
- result = model(indirection_name).destroy(key, params)
+ result = model(indirection_name).indirection.destroy(key, params)
return_yaml_response(response, result)
end
@@ -146,7 +161,7 @@ module Puppet::Network::HTTP::Handler
format = request_format(request)
obj = model(indirection_name).convert_from(format, data)
- result = obj.save(key)
+ result = model(indirection_name).indirection.save(obj, key)
return_yaml_response(response, result)
end
diff --git a/lib/puppet/network/http/webrick.rb b/lib/puppet/network/http/webrick.rb
index 8ed0b28ca..54bcf30c2 100644
--- a/lib/puppet/network/http/webrick.rb
+++ b/lib/puppet/network/http/webrick.rb
@@ -105,7 +105,7 @@ class Puppet::Network::HTTP::WEBrick
results[:SSLStartImmediately] = true
results[:SSLEnable] = true
- raise Puppet::Error, "Could not find CA certificate" unless Puppet::SSL::Certificate.find(Puppet::SSL::CA_NAME)
+ raise Puppet::Error, "Could not find CA certificate" unless Puppet::SSL::Certificate.indirection.find(Puppet::SSL::CA_NAME)
results[:SSLCACertificateFile] = Puppet[:localcacert]
results[:SSLVerifyClient] = OpenSSL::SSL::VERIFY_PEER
diff --git a/lib/puppet/network/rest_authconfig.rb b/lib/puppet/network/rest_authconfig.rb
index b6a163316..9e3632499 100644
--- a/lib/puppet/network/rest_authconfig.rb
+++ b/lib/puppet/network/rest_authconfig.rb
@@ -17,7 +17,6 @@ module Puppet
{ :acl => "/certificate/", :method => :find, :authenticated => false },
{ :acl => "/certificate_request", :method => [:find, :save], :authenticated => false },
{ :acl => "/status", :method => [:find], :authenticated => true },
- { :acl => "/resource", :method => [:find, :save, :search], :authenticated => true },
]
def self.main
@@ -39,14 +38,10 @@ module Puppet
# fail_on_deny could as well be called in the XMLRPC context
# with a ClientRequest.
- @rights.fail_on_deny(
- build_uri(indirection, key),
- :node => params[:node],
- :ip => params[:ip],
- :method => method,
- :environment => params[:environment],
- :authenticated => params[:authenticated]
- )
+ if authorization_failure_exception = @rights.is_request_forbidden_and_why?(indirection, method, key, params)
+ Puppet.warning("Denying access: #{authorization_failure_exception}")
+ raise authorization_failure_exception
+ end
end
def initialize(file = nil, parsenow = true)
@@ -89,9 +84,5 @@ module Puppet
end
@rights.restrict_authenticated(acl[:acl], acl[:authenticated]) unless acl[:authenticated].nil?
end
-
- def build_uri(indirection_name, key)
- "/#{indirection_name}/#{key}"
- end
end
end
diff --git a/lib/puppet/network/rights.rb b/lib/puppet/network/rights.rb
index e3cd3179a..56af53983 100755
--- a/lib/puppet/network/rights.rb
+++ b/lib/puppet/network/rights.rb
@@ -26,19 +26,29 @@ class Rights
# Check that name is allowed or not
def allowed?(name, *args)
- begin
- fail_on_deny(name, :node => args[0], :ip => args[1])
- rescue AuthorizationError
- return false
- rescue ArgumentError
- # the namespace contract says we should raise this error
- # if we didn't find the right acl
- raise
+ !is_forbidden_and_why?(name, :node => args[0], :ip => args[1])
+ end
+
+ def is_request_forbidden_and_why?(indirection, method, key, params)
+ methods_to_check = if method == :head
+ # :head is ok if either :find or :save is ok.
+ [:find, :save]
+ else
+ [method]
+ end
+ authorization_failure_exceptions = methods_to_check.map do |method|
+ is_forbidden_and_why?("/#{indirection}/#{key}", params.merge({:method => method}))
+ end
+ if authorization_failure_exceptions.include? nil
+ # One of the methods we checked is ok, therefore this request is ok.
+ nil
+ else
+ # Just need to return any of the failure exceptions.
+ authorization_failure_exceptions.first
end
- true
end
- def fail_on_deny(name, args = {})
+ def is_forbidden_and_why?(name, args = {})
res = :nomatch
right = @rights.find do |acl|
found = false
@@ -49,7 +59,7 @@ class Rights
args[:match] = match
if (res = acl.allowed?(args[:node], args[:ip], args)) != :dunno
# return early if we're allowed
- return if res
+ return nil if res
# we matched, select this acl
found = true
end
@@ -70,13 +80,12 @@ class Rights
error.file = right.file
error.line = right.line
end
- Puppet.warning("Denying access: #{error}")
else
# there were no rights allowing/denying name
# if name is not a path, let's throw
- error = ArgumentError.new "Unknown namespace right '#{name}'"
+ raise ArgumentError.new "Unknown namespace right '#{name}'"
end
- raise error
+ error
end
def initialize
diff --git a/lib/puppet/node.rb b/lib/puppet/node.rb
index e8d58e6be..5b0a98615 100644
--- a/lib/puppet/node.rb
+++ b/lib/puppet/node.rb
@@ -57,7 +57,7 @@ class Puppet::Node
# Merge the node facts with parameters from the node source.
def fact_merge
- if facts = Puppet::Node::Facts.find(name)
+ if facts = Puppet::Node::Facts.indirection.find(name)
merge(facts.values)
end
rescue => detail
diff --git a/lib/puppet/node/facts.rb b/lib/puppet/node/facts.rb
index d84d54113..451813f7d 100755
--- a/lib/puppet/node/facts.rb
+++ b/lib/puppet/node/facts.rb
@@ -15,8 +15,8 @@ class Puppet::Node::Facts
# We want to expire any cached nodes if the facts are saved.
module NodeExpirer
- def save(key, instance)
- Puppet::Node.expire(instance.name)
+ def save(instance, key = nil)
+ Puppet::Node.indirection.expire(instance.name)
super
end
end
diff --git a/lib/puppet/parser/ast.rb b/lib/puppet/parser/ast.rb
index 03891160b..122b4dd7a 100644
--- a/lib/puppet/parser/ast.rb
+++ b/lib/puppet/parser/ast.rb
@@ -19,6 +19,10 @@ class Puppet::Parser::AST
attr_accessor :parent, :scope
+ def inspect
+ "( #{self.class} #{self.to_s} #{@children.inspect} )"
+ end
+
# don't fetch lexer comment by default
def use_docs
self.class.use_docs
diff --git a/lib/puppet/parser/compiler.rb b/lib/puppet/parser/compiler.rb
index c60e1d4fb..fdabd05c9 100644
--- a/lib/puppet/parser/compiler.rb
+++ b/lib/puppet/parser/compiler.rb
@@ -139,12 +139,23 @@ class Puppet::Parser::Compiler
def evaluate_classes(classes, scope, lazy_evaluate = true)
raise Puppet::DevError, "No source for scope passed to evaluate_classes" unless scope.source
found = []
+ param_classes = nil
+ # if we are a param class, save the classes hash
+ # and transform classes to be the keys
+ if classes.class == Hash
+ param_classes = classes
+ classes = classes.keys
+ end
classes.each do |name|
# If we can find the class, then make a resource that will evaluate it.
if klass = scope.find_hostclass(name)
- found << name and next if scope.class_scope(klass)
- resource = klass.ensure_in_catalog(scope)
+ if param_classes
+ resource = klass.ensure_in_catalog(scope, param_classes[name] || {})
+ else
+ found << name and next if scope.class_scope(klass)
+ resource = klass.ensure_in_catalog(scope)
+ end
# If they've disabled lazy evaluation (which the :include function does),
# then evaluate our resource immediately.
@@ -432,7 +443,11 @@ class Puppet::Parser::Compiler
@resources = []
# Make sure any external node classes are in our class list
- @catalog.add_class(*@node.classes)
+ if @node.classes.class == Hash
+ @catalog.add_class(*@node.classes.keys)
+ else
+ @catalog.add_class(*@node.classes)
+ end
end
# Set the node's parameters into the top-scope as variables.
diff --git a/lib/puppet/parser/functions/defined.rb b/lib/puppet/parser/functions/defined.rb
index 90632af2f..2aeaa9ba0 100644
--- a/lib/puppet/parser/functions/defined.rb
+++ b/lib/puppet/parser/functions/defined.rb
@@ -1,10 +1,32 @@
# Test whether a given class or definition is defined
-Puppet::Parser::Functions::newfunction(:defined, :type => :rvalue, :doc => "Determine whether a given
- type is defined, either as a native type or a defined type, or whether a class is defined.
- This is useful for checking whether a class is defined and only including it if it is.
- This function can also test whether a resource has been defined, using resource references
- (e.g., `if defined(File['/tmp/myfile']) { ... }`). This function is unfortunately
- dependent on the parse order of the configuration when testing whether a resource is defined.") do |vals|
+Puppet::Parser::Functions::newfunction(:defined, :type => :rvalue, :doc => "Determine whether
+ a given class or resource type is defined. This function can also determine whether a
+ specific resource has been declared. Returns true or false. Accepts class names,
+ type names, and resource references.
+
+ The `defined` function checks both native and defined types, including types
+ provided as plugins via modules. Types and classes are both checked using their names:
+
+ defined(\"file\")
+ defined(\"customtype\")
+ defined(\"foo\")
+ defined(\"foo::bar\")
+
+ Resource declarations are checked using resource references, e.g.
+ `defined( File['/tmp/myfile'] )`. Checking whether a given resource
+ has been declared is, unfortunately, dependent on the parse order of
+ the configuration, and the following code will not work:
+
+ if defined(File['/tmp/foo']) {
+ notify(\"This configuration includes the /tmp/foo file.\")
+ }
+ file {\"/tmp/foo\":
+ ensure => present,
+ }
+
+ However, this order requirement refers to parse order only, and ordering of
+ resources in the configuration graph (e.g. with `before` or `require`) does not
+ affect the behavior of `defined`.") do |vals|
result = false
vals = [vals] unless vals.is_a?(Array)
vals.each do |val|
diff --git a/lib/puppet/parser/functions/fqdn_rand.rb b/lib/puppet/parser/functions/fqdn_rand.rb
index 3e7018ac4..52946f2c1 100644
--- a/lib/puppet/parser/functions/fqdn_rand.rb
+++ b/lib/puppet/parser/functions/fqdn_rand.rb
@@ -1,7 +1,10 @@
Puppet::Parser::Functions::newfunction(:fqdn_rand, :type => :rvalue, :doc =>
- "Generates random numbers based on the node's fqdn. The first argument
- sets the range. Additional (optional) arguments may be used to further
- distinguish the seed.") do |args|
+ "Generates random numbers based on the node's fqdn. Generated random values
+ will be a range from 0 up to and excluding n, where n is the first parameter.
+ The second argument specifies a number to add to the seed and is optional, for example:
+
+ $random_number = fqdn_rand(30)
+ $random_number_seed = fqdn_rand(30,30)") do |args|
require 'md5'
max = args.shift
srand MD5.new([lookupvar('fqdn'),args].join(':')).to_s.hex
diff --git a/lib/puppet/property.rb b/lib/puppet/property.rb
index 84e1a0360..12f496a6e 100644
--- a/lib/puppet/property.rb
+++ b/lib/puppet/property.rb
@@ -152,9 +152,24 @@ class Puppet::Property < Puppet::Parameter
# since we cannot fix it. Otherwise, we expect our should value
# to be an array, and if @is matches any of those values, then
# we consider it to be in-sync.
- def insync?(is)
+ #
+ # Don't override this method.
+ def safe_insync?(is)
+ # If there is no @should value, consider the property to be in sync.
return true unless @should
+ # Otherwise delegate to the (possibly derived) insync? method.
+ insync?(is)
+ end
+
+ def self.method_added(sym)
+ raise "Puppet::Property#safe_insync? shouldn't be overridden; please override insync? instead" if sym == :safe_insync?
+ end
+
+ # This method should be overridden by derived classes if necessary
+ # to provide extra logic to determine whether the property is in
+ # sync.
+ def insync?(is)
self.devfail "#{self.class.name}'s should is not array" unless @should.is_a?(Array)
# an empty array is analogous to no should values
diff --git a/lib/puppet/property/keyvalue.rb b/lib/puppet/property/keyvalue.rb
index 0181708f9..57d0ea2d9 100644
--- a/lib/puppet/property/keyvalue.rb
+++ b/lib/puppet/property/keyvalue.rb
@@ -77,8 +77,6 @@ module Puppet
end
def insync?(is)
- return true unless @should
-
return true unless is
(is == self.should)
diff --git a/lib/puppet/property/list.rb b/lib/puppet/property/list.rb
index dcee85db7..b86dc87f2 100644
--- a/lib/puppet/property/list.rb
+++ b/lib/puppet/property/list.rb
@@ -66,8 +66,6 @@ module Puppet
end
def insync?(is)
- return true unless @should
-
return true unless is
(prepare_is_for_comparison(is) == self.should)
diff --git a/lib/puppet/provider/augeas/augeas.rb b/lib/puppet/provider/augeas/augeas.rb
index 7dbd06240..461968245 100644
--- a/lib/puppet/provider/augeas/augeas.rb
+++ b/lib/puppet/provider/augeas/augeas.rb
@@ -213,7 +213,12 @@ Puppet::Type.type(:augeas).provide(:augeas) do
fail("Invalid command: #{cmd_array.join(" ")}") if clause_array.length != 2
comparator = clause_array.shift
arg = clause_array.shift
- return_value = (result.size.send(comparator, arg))
+ case comparator
+ when "!="
+ return_value = !(result.size.send(:==, arg))
+ else
+ return_value = (result.size.send(comparator, arg))
+ end
when "include"
arg = clause_array.shift
return_value = result.include?(arg)
diff --git a/lib/puppet/provider/file/posix.rb b/lib/puppet/provider/file/posix.rb
index 6cbf98e9a..f7b8c9797 100644
--- a/lib/puppet/provider/file/posix.rb
+++ b/lib/puppet/provider/file/posix.rb
@@ -27,9 +27,7 @@ Puppet::Type.type(:file).provide :posix do
end
end
- def insync?(current, should)
- return true unless should
-
+ def is_owner_insync?(current, should)
should.each do |value|
if value =~ /^\d+$/
uid = Integer(value)
diff --git a/lib/puppet/provider/file/win32.rb b/lib/puppet/provider/file/win32.rb
index 8ead69a89..21e7ca974 100644
--- a/lib/puppet/provider/file/win32.rb
+++ b/lib/puppet/provider/file/win32.rb
@@ -14,9 +14,7 @@ Puppet::Type.type(:file).provide :microsoft_windows do
id
end
- def insync?(current, should)
- return true unless should
-
+ def is_owner_insync?(current, should)
should.each do |value|
if value =~ /^\d+$/
uid = Integer(value)
diff --git a/lib/puppet/provider/host/parsed.rb b/lib/puppet/provider/host/parsed.rb
index a303c4bcf..2ba01a41c 100644
--- a/lib/puppet/provider/host/parsed.rb
+++ b/lib/puppet/provider/host/parsed.rb
@@ -22,9 +22,7 @@ Puppet::Type.type(:host).provide(:parsed,:parent => Puppet::Provider::ParsedFile
# An absent comment should match "comment => ''"
hash[:comment] = '' if hash[:comment].nil? or hash[:comment] == :absent
unless hash[:host_aliases].nil? or hash[:host_aliases] == :absent
- hash[:host_aliases] = hash[:host_aliases].split(/\s+/)
- else
- hash[:host_aliases] = []
+ hash[:host_aliases].gsub!(/\s+/,' ') # Change delimiter
end
},
:to_line => proc { |hash|
@@ -32,8 +30,8 @@ Puppet::Type.type(:host).provide(:parsed,:parent => Puppet::Provider::ParsedFile
raise ArgumentError, "#{n} is a required attribute for hosts" unless hash[n] and hash[n] != :absent
end
str = "#{hash[:ip]}\t#{hash[:name]}"
- if hash.include? :host_aliases and !hash[:host_aliases].empty?
- str += "\t#{hash[:host_aliases].join("\t")}"
+ if hash.include? :host_aliases and !hash[:host_aliases].nil? and hash[:host_aliases] != :absent
+ str += "\t#{hash[:host_aliases]}"
end
if hash.include? :comment and !hash[:comment].empty?
str += "\t# #{hash[:comment]}"
diff --git a/lib/puppet/provider/maillist/mailman.rb b/lib/puppet/provider/maillist/mailman.rb
index 633642af7..e070a25dd 100755
--- a/lib/puppet/provider/maillist/mailman.rb
+++ b/lib/puppet/provider/maillist/mailman.rb
@@ -2,11 +2,11 @@ require 'puppet/provider/parsedfile'
Puppet::Type.type(:maillist).provide(:mailman) do
if [ "CentOS", "RedHat", "Fedora" ].any? { |os| Facter.value(:operatingsystem) == os }
- commands :list_lists => "/usr/lib/mailman/bin/list_lists --bare", :rmlist => "/usr/lib/mailman/bin/rmlist", :newlist => "/usr/lib/mailman/bin/newlist"
+ commands :list_lists => "/usr/lib/mailman/bin/list_lists", :rmlist => "/usr/lib/mailman/bin/rmlist", :newlist => "/usr/lib/mailman/bin/newlist"
commands :mailman => "/usr/lib/mailman/mail/mailman"
else
# This probably won't work for non-Debian installs, but this path is sure not to be in the PATH.
- commands :list_lists => "list_lists --bare", :rmlist => "rmlist", :newlist => "newlist"
+ commands :list_lists => "list_lists", :rmlist => "rmlist", :newlist => "newlist"
commands :mailman => "/var/lib/mailman/mail/mailman"
end
@@ -14,10 +14,9 @@ Puppet::Type.type(:maillist).provide(:mailman) do
# Return a list of existing mailman instances.
def self.instances
- list_lists.split("\n").collect do |line|
- name = line.strip
- new(:ensure => :present, :name => name)
- end
+ list_lists('--bare').
+ split("\n").
+ collect { |line| new(:ensure => :present, :name => line.strip) }
end
# Prefetch our list list, yo.
diff --git a/lib/puppet/provider/mount.rb b/lib/puppet/provider/mount.rb
index 8c7b24bd4..c979f742f 100644
--- a/lib/puppet/provider/mount.rb
+++ b/lib/puppet/provider/mount.rb
@@ -43,6 +43,8 @@ module Puppet::Provider::Mount
line =~ / on #{name} / or line =~ %r{ on /private/var/automount#{name}}
when "Solaris", "HP-UX"
line =~ /^#{name} on /
+ when "AIX"
+ line.split(/\s+/)[1] == name
else
line =~ / on #{name} /
end
diff --git a/lib/puppet/provider/nameservice/directoryservice.rb b/lib/puppet/provider/nameservice/directoryservice.rb
index 106d99eb3..2e3480985 100644
--- a/lib/puppet/provider/nameservice/directoryservice.rb
+++ b/lib/puppet/provider/nameservice/directoryservice.rb
@@ -474,7 +474,7 @@ class DirectoryService < Puppet::Provider::NameService
def remove_unwanted_members(current_members, new_members)
current_members.each do |member|
- if not new_members.include?(member)
+ if not new_members.flatten.include?(member)
cmd = [:dseditgroup, "-o", "edit", "-n", ".", "-d", member, @resource[:name]]
begin
execute(cmd)
@@ -486,7 +486,7 @@ class DirectoryService < Puppet::Provider::NameService
end
def add_members(current_members, new_members)
- new_members.each do |new_member|
+ new_members.flatten.each do |new_member|
if current_members.nil? or not current_members.include?(new_member)
cmd = [:dseditgroup, "-o", "edit", "-n", ".", "-a", new_member, @resource[:name]]
begin
diff --git a/lib/puppet/provider/package/freebsd.rb b/lib/puppet/provider/package/freebsd.rb
index 2f012a4ed..e10a20b04 100755
--- a/lib/puppet/provider/package/freebsd.rb
+++ b/lib/puppet/provider/package/freebsd.rb
@@ -20,11 +20,11 @@ Puppet::Type.type(:package).provide :freebsd, :parent => :openbsd do
if @resource[:source] =~ /\/$/
if @resource[:source] =~ /^(ftp|https?):/
- withenv :PACKAGESITE => @resource[:source] do
+ Puppet::Util::Execution::withenv :PACKAGESITE => @resource[:source] do
pkgadd "-r", @resource[:name]
end
else
- withenv :PKG_PATH => @resource[:source] do
+ Puppet::Util::Execution::withenv :PKG_PATH => @resource[:source] do
pkgadd @resource[:name]
end
end
diff --git a/lib/puppet/provider/zfs/solaris.rb b/lib/puppet/provider/zfs/solaris.rb
index 85d054f86..9aec9d801 100644
--- a/lib/puppet/provider/zfs/solaris.rb
+++ b/lib/puppet/provider/zfs/solaris.rb
@@ -31,7 +31,7 @@ Puppet::Type.type(:zfs).provide(:solaris) do
end
end
- [:mountpoint, :compression, :copies, :quota, :reservation, :sharenfs, :snapdir].each do |field|
+ [:mountpoint, :recordsize, :aclmode, :aclinherit, :primarycache, :secondarycache, :compression, :copies, :quota, :reservation, :sharenfs, :snapdir].each do |field|
define_method(field) do
zfs(:get, "-H", "-o", "value", field, @resource[:name]).strip
end
diff --git a/lib/puppet/provider/zone/solaris.rb b/lib/puppet/provider/zone/solaris.rb
index c11444993..194af5049 100644
--- a/lib/puppet/provider/zone/solaris.rb
+++ b/lib/puppet/provider/zone/solaris.rb
@@ -40,7 +40,7 @@ Puppet::Type.type(:zone).provide(:solaris) do
# Then perform all of our configuration steps. It's annoying
# that we need this much internal info on the resource.
@resource.send(:properties).each do |property|
- str += property.configtext + "\n" if property.is_a? ZoneConfigProperty and ! property.insync?(properties[property.name])
+ str += property.configtext + "\n" if property.is_a? ZoneConfigProperty and ! property.safe_insync?(properties[property.name])
end
str += "commit\n"
@@ -221,6 +221,9 @@ Puppet::Type.type(:zone).provide(:solaris) do
if dir = config["inherit-pkg-dir"]
result[:inherit] = dir.collect { |dirs| dirs[:dir] }
end
+ if datasets = config["dataset"]
+ result[:dataset] = datasets.collect { |dataset| dataset[:name] }
+ end
result[:iptype] = config[:"ip-type"]
if net = config["net"]
result[:ip] = net.collect do |params|
diff --git a/lib/puppet/reference/configuration.rb b/lib/puppet/reference/configuration.rb
index e6a8dc20f..c8ff145ba 100644
--- a/lib/puppet/reference/configuration.rb
+++ b/lib/puppet/reference/configuration.rb
@@ -94,11 +94,11 @@ The file follows INI-style formatting. Here is an example of a very simple
Note that boolean parameters must be explicitly specified as `true` or
`false` as seen above.
-If you need to change file parameters (e.g., reset the mode or owner), do
+If you need to change file or directory parameters (e.g., reset the mode or owner), do
so within curly braces on the same line:
[main]
- myfile = /tmp/whatever {owner = root, mode = 644}
+ vardir = /new/vardir {owner = root, mode = 644}
If you're starting out with a fresh configuration, you may wish to let
the executable generate a template configuration file for you by invoking
diff --git a/lib/puppet/reference/function.rb b/lib/puppet/reference/function.rb
index 1333e0d26..7d39bebd5 100644
--- a/lib/puppet/reference/function.rb
+++ b/lib/puppet/reference/function.rb
@@ -8,6 +8,10 @@ performing stand-alone work like importing. Rvalues return values and can
only be used in a statement requiring a value, such as an assignment or a case
statement.
+Functions execute on the Puppet master. They do not execute on the Puppet agent.
+Hence they only have access to the commands and data available on the Puppet master
+host.
+
Here are the functions available in Puppet:
"
diff --git a/lib/puppet/relationship.rb b/lib/puppet/relationship.rb
index 7079fb44b..08d7d042b 100644
--- a/lib/puppet/relationship.rb
+++ b/lib/puppet/relationship.rb
@@ -71,6 +71,10 @@ class Puppet::Relationship
"#{source} => #{target}"
end
+ def inspect
+ "{ #{source} => #{target} }"
+ end
+
def to_pson_data_hash
data = {
'source' => source.to_s,
diff --git a/lib/puppet/reports/store.rb b/lib/puppet/reports/store.rb
index 30f24591c..99a9fc177 100644
--- a/lib/puppet/reports/store.rb
+++ b/lib/puppet/reports/store.rb
@@ -8,24 +8,6 @@ Puppet::Reports.register_report(:store) do
to perform some maintenance on them if you use this report (it's the only
default report)."
- def mkclientdir(client, dir)
- config = Puppet::Util::Settings.new
-
- config.setdefaults(
- "reportclient-#{client}".to_sym,
- "client-#{client}-dir" => { :default => dir,
- :mode => 0750,
- :desc => "Client dir for #{client}",
- :owner => 'service',
- :group => 'service'
- },
-
- :noop => [false, "Used by settings internally."]
- )
-
- config.use("reportclient-#{client}".to_sym)
- end
-
def process
# We don't want any tracking back in the fs. Unlikely, but there
# you go.
@@ -33,7 +15,7 @@ Puppet::Reports.register_report(:store) do
dir = File.join(Puppet[:reportdir], client)
- mkclientdir(client, dir) unless FileTest.exists?(dir)
+ Dir.mkdir(dir, 0750) unless FileTest.exists?(dir)
# Now store the report.
now = Time.now.gmtime
diff --git a/lib/puppet/resource.rb b/lib/puppet/resource.rb
index 4f0d50750..e832804f5 100644
--- a/lib/puppet/resource.rb
+++ b/lib/puppet/resource.rb
@@ -46,6 +46,10 @@ class Puppet::Resource
resource
end
+ def inspect
+ "#{@type}[#{@title}]#{to_hash.inspect}"
+ end
+
def to_pson_data_hash
data = ([:type, :title, :tags] + ATTRIBUTES).inject({}) do |hash, param|
next hash unless value = self.send(param)
@@ -201,8 +205,13 @@ class Puppet::Resource
tag(self.title) if valid_tag?(self.title)
@reference = Reference.new(@type,@title) # for serialization compatibility with 0.25.x
-
- raise ArgumentError, "Invalid resource type #{type}" if strict? and ! resource_type
+ if strict? and ! resource_type
+ if @type == 'Class'
+ raise ArgumentError, "Could not find declared class #{title}"
+ else
+ raise ArgumentError, "Invalid resource type #{type}"
+ end
+ end
end
def ref
diff --git a/lib/puppet/resource/status.rb b/lib/puppet/resource/status.rb
index 2bdfbbfef..dea8c105d 100644
--- a/lib/puppet/resource/status.rb
+++ b/lib/puppet/resource/status.rb
@@ -4,13 +4,15 @@ module Puppet
include Puppet::Util::Tagging
include Puppet::Util::Logging
- ATTRIBUTES = [:resource, :node, :version, :file, :line, :current_values, :skipped_reason, :status, :evaluation_time, :change_count]
- attr_accessor *ATTRIBUTES
+ attr_accessor :resource, :node, :file, :line, :current_values, :status, :evaluation_time
STATES = [:skipped, :failed, :failed_to_restart, :restarted, :changed, :out_of_sync, :scheduled]
attr_accessor *STATES
attr_reader :source_description, :default_log_level, :time, :resource
+ attr_reader :change_count, :out_of_sync_count, :resource_type, :title
+
+ YAML_ATTRIBUTES = %w{@resource @file @line @evaluation_time @change_count @out_of_sync_count @tags @time @events @out_of_sync @changed @resource_type @title @skipped @failed}
# Provide a boolean method for each of the states.
STATES.each do |attr|
@@ -28,6 +30,13 @@ module Puppet
@events << event
if event.status == 'failure'
self.failed = true
+ elsif event.status == 'success'
+ @change_count += 1
+ @changed = true
+ end
+ if event.status != 'audit'
+ @out_of_sync_count += 1
+ @out_of_sync = true
end
end
@@ -38,14 +47,26 @@ module Puppet
def initialize(resource)
@source_description = resource.path
@resource = resource.to_s
+ @change_count = 0
+ @out_of_sync_count = 0
+ @changed = false
+ @out_of_sync = false
+ @skipped = false
+ @failed = false
- [:file, :line, :version].each do |attr|
+ [:file, :line].each do |attr|
send(attr.to_s + "=", resource.send(attr))
end
tag(*resource.tags)
@time = Time.now
@events = []
+ @resource_type = resource.type.to_s.capitalize
+ @title = resource.title
+ end
+
+ def to_yaml_properties
+ (YAML_ATTRIBUTES & instance_variables).sort
end
private
diff --git a/lib/puppet/resource/type.rb b/lib/puppet/resource/type.rb
index 77824845d..b9cf6991a 100644
--- a/lib/puppet/resource/type.rb
+++ b/lib/puppet/resource/type.rb
@@ -145,18 +145,26 @@ class Puppet::Resource::Type
# classes and nodes. No parameters are be supplied--if this is a
# parameterized class, then all parameters take on their default
# values.
- def ensure_in_catalog(scope)
+ def ensure_in_catalog(scope, parameters=nil)
type == :definition and raise ArgumentError, "Cannot create resources for defined resource types"
resource_type = type == :hostclass ? :class : :node
# Do nothing if the resource already exists; this makes sure we don't
# get multiple copies of the class resource, which helps provide the
# singleton nature of classes.
- if resource = scope.catalog.resource(resource_type, name)
+ # we should not do this for classes with parameters
+ # if parameters are passed, we should still try to create the resource
+ # even if it exists so that we can fail
+ # this prevents us from being able to combine param classes with include
+ if resource = scope.catalog.resource(resource_type, name) and !parameters
return resource
end
-
resource = Puppet::Parser::Resource.new(resource_type, name, :scope => scope, :source => self)
+ if parameters
+ parameters.each do |k,v|
+ resource.set_parameter(k,v)
+ end
+ end
instantiate_resource(scope, resource)
scope.compiler.add_resource(scope, resource)
resource
@@ -224,6 +232,19 @@ class Puppet::Resource::Type
set[param] = true
end
+ if @type == :hostclass
+ scope.setvar("title", resource.title.to_s.downcase) unless set.include? :title
+ scope.setvar("name", resource.name.to_s.downcase ) unless set.include? :name
+ else
+ scope.setvar("title", resource.title ) unless set.include? :title
+ scope.setvar("name", resource.name ) unless set.include? :name
+ end
+ scope.setvar("module_name", module_name) if module_name and ! set.include? :module_name
+
+ if caller_name = scope.parent_module_name and ! set.include?(:caller_module_name)
+ scope.setvar("caller_module_name", caller_name)
+ end
+ scope.class_set(self.name,scope) if hostclass? or node?
# Verify that all required arguments are either present or
# have been provided with defaults.
arguments.each do |param, default|
@@ -240,19 +261,6 @@ class Puppet::Resource::Type
resource[param] = value
end
- if @type == :hostclass
- scope.setvar("title", resource.title.to_s.downcase) unless set.include? :title
- scope.setvar("name", resource.name.to_s.downcase ) unless set.include? :name
- else
- scope.setvar("title", resource.title ) unless set.include? :title
- scope.setvar("name", resource.name ) unless set.include? :name
- end
- scope.setvar("module_name", module_name) if module_name and ! set.include? :module_name
-
- if caller_name = scope.parent_module_name and ! set.include?(:caller_module_name)
- scope.setvar("caller_module_name", caller_name)
- end
- scope.class_set(self.name,scope) if hostclass? or node?
end
# Create a new subscope in which to evaluate our code.
diff --git a/lib/puppet/resource/type_collection.rb b/lib/puppet/resource/type_collection.rb
index a96927613..6ab978f7c 100644
--- a/lib/puppet/resource/type_collection.rb
+++ b/lib/puppet/resource/type_collection.rb
@@ -25,6 +25,10 @@ class Puppet::Resource::TypeCollection
end
end
+ def inspect
+ "TypeCollection" + { :hostclasses => @hostclasses.keys, :definitions => @definitions.keys, :nodes => @nodes.keys }.inspect
+ end
+
def <<(thing)
add(thing)
self
diff --git a/lib/puppet/simple_graph.rb b/lib/puppet/simple_graph.rb
index 6d153b46d..9d7f218a6 100644
--- a/lib/puppet/simple_graph.rb
+++ b/lib/puppet/simple_graph.rb
@@ -395,6 +395,10 @@ class Puppet::SimpleGraph
@vertex = vertex
@adjacencies = adjacencies
end
+
+ def inspect
+ { :@adjacencies => @adjacencies, :@vertex => @vertex.to_s }.inspect
+ end
end
# instance_variable_get is used by Object.to_zaml to get instance
diff --git a/lib/puppet/ssl/certificate_authority.rb b/lib/puppet/ssl/certificate_authority.rb
index 0c226ca6a..d65067c70 100644
--- a/lib/puppet/ssl/certificate_authority.rb
+++ b/lib/puppet/ssl/certificate_authority.rb
@@ -63,7 +63,7 @@ class Puppet::SSL::CertificateAuthority
store = nil
store = autosign_store(auto) if auto != true
- Puppet::SSL::CertificateRequest.search("*").each do |csr|
+ Puppet::SSL::CertificateRequest.indirection.search("*").each do |csr|
sign(csr.name) if auto == true or store.allowed?(csr.name, "127.1.1.1")
end
end
@@ -93,10 +93,10 @@ class Puppet::SSL::CertificateAuthority
# Retrieve (or create, if necessary) the certificate revocation list.
def crl
unless defined?(@crl)
- unless @crl = Puppet::SSL::CertificateRevocationList.find(Puppet::SSL::CA_NAME)
+ unless @crl = Puppet::SSL::CertificateRevocationList.indirection.find(Puppet::SSL::CA_NAME)
@crl = Puppet::SSL::CertificateRevocationList.new(Puppet::SSL::CA_NAME)
@crl.generate(host.certificate.content, host.key.content)
- @crl.save
+ Puppet::SSL::CertificateRevocationList.indirection.save(@crl)
end
end
@crl
@@ -109,7 +109,7 @@ class Puppet::SSL::CertificateAuthority
# Generate a new certificate.
def generate(name)
- raise ArgumentError, "A Certificate already exists for #{name}" if Puppet::SSL::Certificate.find(name)
+ raise ArgumentError, "A Certificate already exists for #{name}" if Puppet::SSL::Certificate.indirection.find(name)
host = Puppet::SSL::Host.new(name)
host.generate_certificate_request
@@ -169,7 +169,7 @@ class Puppet::SSL::CertificateAuthority
# List all signed certificates.
def list
- Puppet::SSL::Certificate.search("*").collect { |c| c.name }
+ Puppet::SSL::Certificate.indirection.search("*").collect { |c| c.name }
end
# Read the next serial from the serial file, and increment the
@@ -199,14 +199,14 @@ class Puppet::SSL::CertificateAuthority
# Print a given host's certificate as text.
def print(name)
- (cert = Puppet::SSL::Certificate.find(name)) ? cert.to_text : nil
+ (cert = Puppet::SSL::Certificate.indirection.find(name)) ? cert.to_text : nil
end
# Revoke a given certificate.
def revoke(name)
raise ArgumentError, "Cannot revoke certificates when the CRL is disabled" unless crl
- if cert = Puppet::SSL::Certificate.find(name)
+ if cert = Puppet::SSL::Certificate.indirection.find(name)
serial = cert.content.serial
elsif ! serial = inventory.serial(name)
raise ArgumentError, "Could not find a serial number for #{name}"
@@ -229,7 +229,7 @@ class Puppet::SSL::CertificateAuthority
csr = self_signing_csr
issuer = csr.content
else
- unless csr = Puppet::SSL::CertificateRequest.find(hostname)
+ unless csr = Puppet::SSL::CertificateRequest.indirection.find(hostname)
raise ArgumentError, "Could not find certificate request for #{hostname}"
end
issuer = host.certificate.content
@@ -248,17 +248,17 @@ class Puppet::SSL::CertificateAuthority
# Save the now-signed cert. This should get routed correctly depending
# on the certificate type.
- cert.save
+ Puppet::SSL::Certificate.indirection.save(cert)
# And remove the CSR if this wasn't self signed.
- Puppet::SSL::CertificateRequest.destroy(csr.name) unless self_signing_csr
+ Puppet::SSL::CertificateRequest.indirection.destroy(csr.name) unless self_signing_csr
cert
end
# Verify a given host's certificate.
def verify(name)
- unless cert = Puppet::SSL::Certificate.find(name)
+ unless cert = Puppet::SSL::Certificate.indirection.find(name)
raise ArgumentError, "Could not find a certificate for #{name}"
end
store = OpenSSL::X509::Store.new
@@ -271,7 +271,7 @@ class Puppet::SSL::CertificateAuthority
end
def fingerprint(name, md = :MD5)
- unless cert = Puppet::SSL::Certificate.find(name) || Puppet::SSL::CertificateRequest.find(name)
+ unless cert = Puppet::SSL::Certificate.indirection.find(name) || Puppet::SSL::CertificateRequest.indirection.find(name)
raise ArgumentError, "Could not find a certificate or csr for #{name}"
end
cert.fingerprint(md)
@@ -279,6 +279,6 @@ class Puppet::SSL::CertificateAuthority
# List the waiting certificate requests.
def waiting?
- Puppet::SSL::CertificateRequest.search("*").collect { |r| r.name }
+ Puppet::SSL::CertificateRequest.indirection.search("*").collect { |r| r.name }
end
end
diff --git a/lib/puppet/ssl/certificate_request.rb b/lib/puppet/ssl/certificate_request.rb
index 2f6cae3f5..8c83339a1 100644
--- a/lib/puppet/ssl/certificate_request.rb
+++ b/lib/puppet/ssl/certificate_request.rb
@@ -5,7 +5,20 @@ class Puppet::SSL::CertificateRequest < Puppet::SSL::Base
wraps OpenSSL::X509::Request
extend Puppet::Indirector
- indirects :certificate_request, :terminus_class => :file
+
+ # If auto-signing is on, sign any certificate requests as they are saved.
+ module AutoSigner
+ def save(instance, key = nil)
+ super
+
+ # Try to autosign the CSR.
+ if ca = Puppet::SSL::CertificateAuthority.instance
+ ca.autosign
+ end
+ end
+ end
+
+ indirects :certificate_request, :terminus_class => :file, :extend => AutoSigner
# Convert a string into an instance.
def self.from_s(string)
@@ -46,13 +59,4 @@ class Puppet::SSL::CertificateRequest < Puppet::SSL::Base
Puppet.info "Certificate Request fingerprint (md5): #{fingerprint}"
@content
end
-
- def save(args = {})
- super()
-
- # Try to autosign the CSR.
- if ca = Puppet::SSL::CertificateAuthority.instance
- ca.autosign
- end
- end
end
diff --git a/lib/puppet/ssl/certificate_revocation_list.rb b/lib/puppet/ssl/certificate_revocation_list.rb
index 44e0a9e22..293f4b8c0 100644
--- a/lib/puppet/ssl/certificate_revocation_list.rb
+++ b/lib/puppet/ssl/certificate_revocation_list.rb
@@ -79,6 +79,6 @@ class Puppet::SSL::CertificateRevocationList < Puppet::SSL::Base
@content.sign(cakey, OpenSSL::Digest::SHA1.new)
- save
+ Puppet::SSL::CertificateRevocationList.indirection.save(self)
end
end
diff --git a/lib/puppet/ssl/host.rb b/lib/puppet/ssl/host.rb
index 8a6f0aa6d..7f71ced99 100644
--- a/lib/puppet/ssl/host.rb
+++ b/lib/puppet/ssl/host.rb
@@ -43,31 +43,31 @@ class Puppet::SSL::Host
# Configure how our various classes interact with their various terminuses.
def self.configure_indirection(terminus, cache = nil)
- Certificate.terminus_class = terminus
- CertificateRequest.terminus_class = terminus
- CertificateRevocationList.terminus_class = terminus
+ Certificate.indirection.terminus_class = terminus
+ CertificateRequest.indirection.terminus_class = terminus
+ CertificateRevocationList.indirection.terminus_class = terminus
if cache
# This is weird; we don't actually cache our keys, we
# use what would otherwise be the cache as our normal
# terminus.
- Key.terminus_class = cache
+ Key.indirection.terminus_class = cache
else
- Key.terminus_class = terminus
+ Key.indirection.terminus_class = terminus
end
if cache
- Certificate.cache_class = cache
- CertificateRequest.cache_class = cache
- CertificateRevocationList.cache_class = cache
+ Certificate.indirection.cache_class = cache
+ CertificateRequest.indirection.cache_class = cache
+ CertificateRevocationList.indirection.cache_class = cache
else
# Make sure we have no cache configured. puppet master
# switches the configurations around a bit, so it's important
# that we specify the configs for absolutely everything, every
# time.
- Certificate.cache_class = nil
- CertificateRequest.cache_class = nil
- CertificateRevocationList.cache_class = nil
+ Certificate.indirection.cache_class = nil
+ CertificateRequest.indirection.cache_class = nil
+ CertificateRevocationList.indirection.cache_class = nil
end
end
@@ -94,7 +94,7 @@ class Puppet::SSL::Host
# Remove all traces of a given host
def self.destroy(name)
- [Key, Certificate, CertificateRequest].collect { |part| part.destroy(name) }.any? { |x| x }
+ [Key, Certificate, CertificateRequest].collect { |part| part.indirection.destroy(name) }.any? { |x| x }
end
# Search for more than one host, optionally only specifying
@@ -106,7 +106,7 @@ class Puppet::SSL::Host
# Collect the results from each class, flatten them, collect all of the names, make the name list unique,
# then create a Host instance for each one.
- classlist.collect { |klass| klass.search }.flatten.collect { |r| r.name }.uniq.collect do |name|
+ classlist.collect { |klass| klass.indirection.search }.flatten.collect { |r| r.name }.uniq.collect do |name|
new(name)
end
end
@@ -117,7 +117,7 @@ class Puppet::SSL::Host
end
def key
- @key ||= Key.find(name)
+ @key ||= Key.indirection.find(name)
end
# This is the private key; we can create it from scratch
@@ -126,7 +126,7 @@ class Puppet::SSL::Host
@key = Key.new(name)
@key.generate
begin
- @key.save
+ Key.indirection.save(@key)
rescue
@key = nil
raise
@@ -135,7 +135,7 @@ class Puppet::SSL::Host
end
def certificate_request
- @certificate_request ||= CertificateRequest.find(name)
+ @certificate_request ||= CertificateRequest.indirection.find(name)
end
# Our certificate request requires the key but that's all.
@@ -144,7 +144,7 @@ class Puppet::SSL::Host
@certificate_request = CertificateRequest.new(name)
@certificate_request.generate(key.content)
begin
- @certificate_request.save
+ CertificateRequest.indirection.save(@certificate_request)
rescue
@certificate_request = nil
raise
@@ -159,8 +159,8 @@ class Puppet::SSL::Host
# get the CA cert first, since it's required for the normal cert
# to be of any use.
- return nil unless Certificate.find("ca") unless ca?
- return nil unless @certificate = Certificate.find(name)
+ return nil unless Certificate.indirection.find("ca") unless ca?
+ return nil unless @certificate = Certificate.indirection.find(name)
unless certificate_matches_key?
raise Puppet::Error, "Retrieved certificate does not match private key; please remove certificate from server and regenerate it with the current key"
@@ -212,7 +212,7 @@ class Puppet::SSL::Host
@ssl_store.add_file(Puppet[:localcacert])
# If there's a CRL, add it to our store.
- if crl = Puppet::SSL::CertificateRevocationList.find(CA_NAME)
+ if crl = Puppet::SSL::CertificateRevocationList.indirection.find(CA_NAME)
@ssl_store.flags = OpenSSL::X509::V_FLAG_CRL_CHECK_ALL|OpenSSL::X509::V_FLAG_CRL_CHECK if Puppet.settings[:certificate_revocation]
@ssl_store.add_crl(crl.content)
end
diff --git a/lib/puppet/ssl/inventory.rb b/lib/puppet/ssl/inventory.rb
index b2b402a53..e094da100 100644
--- a/lib/puppet/ssl/inventory.rb
+++ b/lib/puppet/ssl/inventory.rb
@@ -36,7 +36,7 @@ class Puppet::SSL::Inventory
f.print "# Inventory of signed certificates\n# SERIAL NOT_BEFORE NOT_AFTER SUBJECT\n"
end
- Puppet::SSL::Certificate.search("*").each { |cert| add(cert) }
+ Puppet::SSL::Certificate.indirection.search("*").each { |cert| add(cert) }
end
# Find the serial number for a given certificate.
diff --git a/lib/puppet/sslcertificates/monkey_patch.rb b/lib/puppet/sslcertificates/monkey_patch.rb
deleted file mode 100644
index 663b944c1..000000000
--- a/lib/puppet/sslcertificates/monkey_patch.rb
+++ /dev/null
@@ -1,6 +0,0 @@
-# This is the file that we use to add indirection to all the SSL Certificate classes.
-
-require 'puppet/indirector'
-
-OpenSSL::PKey::RSA.extend Puppet::Indirector
-OpenSSL::PKey::RSA.indirects :ssl_rsa, :terminus_class => :file
diff --git a/lib/puppet/transaction.rb b/lib/puppet/transaction.rb
index dcd9aad0a..eba601cfe 100644
--- a/lib/puppet/transaction.rb
+++ b/lib/puppet/transaction.rb
@@ -6,7 +6,6 @@ require 'puppet/util/tagging'
require 'puppet/application'
class Puppet::Transaction
- require 'puppet/transaction/change'
require 'puppet/transaction/event'
require 'puppet/transaction/event_manager'
require 'puppet/transaction/resource_harness'
@@ -222,12 +221,6 @@ class Puppet::Transaction
end
end
- # Generate a transaction report.
- def generate_report
- @report.calculate_metrics
- @report
- end
-
# Should we ignore tags?
def ignore_tags?
! (@catalog.host_config? or Puppet[:name] == "puppet")
@@ -238,7 +231,7 @@ class Puppet::Transaction
def initialize(catalog)
@catalog = catalog
- @report = Report.new
+ @report = Puppet::Transaction::Report.new("apply")
@event_manager = Puppet::Transaction::EventManager.new(self)
@@ -285,26 +278,6 @@ class Puppet::Transaction
catalog.relationship_graph
end
- # Send off the transaction report.
- def send_report
- begin
- report = generate_report
- rescue => detail
- Puppet.err "Could not generate report: #{detail}"
- return
- end
-
- puts report.summary if Puppet[:summarize]
-
- if Puppet[:report]
- begin
- report.save
- rescue => detail
- Puppet.err "Reporting failed: #{detail}"
- end
- end
- end
-
def add_resource_status(status)
report.add_resource_status status
end
diff --git a/lib/puppet/transaction/change.rb b/lib/puppet/transaction/change.rb
deleted file mode 100644
index ecc3b5a5f..000000000
--- a/lib/puppet/transaction/change.rb
+++ /dev/null
@@ -1,87 +0,0 @@
-require 'puppet/transaction'
-require 'puppet/transaction/event'
-
-# Handle all of the work around performing an actual change,
-# including calling 'sync' on the properties and producing events.
-class Puppet::Transaction::Change
- attr_accessor :is, :should, :property, :proxy, :auditing
-
- def auditing?
- auditing
- end
-
- # Create our event object.
- def event
- result = property.event
- result.previous_value = is
- result.desired_value = should
- result
- end
-
- def initialize(property, currentvalue)
- @property = property
- @is = currentvalue
-
- @should = property.should
-
- @changed = false
- end
-
- def apply
- return audit_event if auditing?
- return noop_event if noop?
-
- property.sync
-
- result = event
- result.message = property.change_to_s(is, should)
- result.status = "success"
- result.send_log
- result
- rescue => detail
- puts detail.backtrace if Puppet[:trace]
- result = event
- result.status = "failure"
-
- result.message = "change from #{property.is_to_s(is)} to #{property.should_to_s(should)} failed: #{detail}"
- result.send_log
- result
- end
-
- # Is our property noop? This is used for generating special events.
- def noop?
- @property.noop
- end
-
- # The resource that generated this change. This is used for handling events,
- # and the proxy resource is used for generated resources, since we can't
- # send an event to a resource we don't have a direct relationship with. If we
- # have a proxy resource, then the events will be considered to be from
- # that resource, rather than us, so the graph resolution will still work.
- def resource
- self.proxy || @property.resource
- end
-
- def to_s
- "change #{@property.change_to_s(@is, @should)}"
- end
-
- private
-
- def audit_event
- # This needs to store the appropriate value, and then produce a new event
- result = event
- result.message = "audit change: previously recorded value #{property.should_to_s(should)} has been changed to #{property.is_to_s(is)}"
- result.status = "audit"
- result.send_log
- result
- end
-
- def noop_event
- result = event
- result.message = "is #{property.is_to_s(is)}, should be #{property.should_to_s(should)} (noop)"
- result.status = "noop"
- result.send_log
- result
- end
-end
diff --git a/lib/puppet/transaction/event.rb b/lib/puppet/transaction/event.rb
index e5e5793da..cd695cff8 100644
--- a/lib/puppet/transaction/event.rb
+++ b/lib/puppet/transaction/event.rb
@@ -7,7 +7,8 @@ class Puppet::Transaction::Event
include Puppet::Util::Tagging
include Puppet::Util::Logging
- ATTRIBUTES = [:name, :resource, :property, :previous_value, :desired_value, :status, :message, :node, :version, :file, :line, :source_description]
+ ATTRIBUTES = [:name, :resource, :property, :previous_value, :desired_value, :historical_value, :status, :message, :file, :line, :source_description, :audited]
+ YAML_ATTRIBUTES = %w{@audited @property @previous_value @desired_value @historical_value @message @name @status @time}
attr_accessor *ATTRIBUTES
attr_writer :tags
attr_accessor :time
@@ -15,9 +16,9 @@ class Puppet::Transaction::Event
EVENT_STATUSES = %w{noop success failure audit}
- def initialize(*args)
- options = args.last.is_a?(Hash) ? args.pop : ATTRIBUTES.inject({}) { |hash, attr| hash[attr] = args.pop; hash }
- options.each { |attr, value| send(attr.to_s + "=", value) unless value.nil? }
+ def initialize(options = {})
+ @audited = false
+ options.each { |attr, value| send(attr.to_s + "=", value) }
@time = Time.now
end
@@ -46,6 +47,10 @@ class Puppet::Transaction::Event
message
end
+ def to_yaml_properties
+ (YAML_ATTRIBUTES & instance_variables).sort
+ end
+
private
# If it's a failure, use 'err', else use either the resource's log level (if available)
diff --git a/lib/puppet/transaction/report.rb b/lib/puppet/transaction/report.rb
index 1d3091428..16fee42ae 100644
--- a/lib/puppet/transaction/report.rb
+++ b/lib/puppet/transaction/report.rb
@@ -10,7 +10,8 @@ class Puppet::Transaction::Report
indirects :report, :terminus_class => :processor
- attr_reader :resource_statuses, :logs, :metrics, :host, :time
+ attr_accessor :configuration_version
+ attr_reader :resource_statuses, :logs, :metrics, :host, :time, :kind, :status
# This is necessary since Marshall doesn't know how to
# dump hash with default proc (see below @records)
@@ -42,20 +43,37 @@ class Puppet::Transaction::Report
@resource_statuses[status.resource] = status
end
- def calculate_metrics
- calculate_resource_metrics
- calculate_time_metrics
- calculate_change_metrics
- calculate_event_metrics
+ def compute_status(resource_metrics, change_metric)
+ if (resource_metrics["failed"] || 0) > 0
+ 'failed'
+ elsif change_metric > 0
+ 'changed'
+ else
+ 'unchanged'
+ end
+ end
+
+ def finalize_report
+ resource_metrics = add_metric(:resources, calculate_resource_metrics)
+ add_metric(:time, calculate_time_metrics)
+ change_metric = calculate_change_metric
+ add_metric(:changes, {"total" => change_metric})
+ add_metric(:events, calculate_event_metrics)
+ @status = compute_status(resource_metrics, change_metric)
end
- def initialize
+ def initialize(kind, configuration_version=nil)
@metrics = {}
@logs = []
@resource_statuses = {}
@external_times ||= {}
@host = Puppet[:certname]
@time = Time.now
+ @kind = kind
+ @report_format = 2
+ @puppet_version = Puppet.version
+ @configuration_version = configuration_version
+ @status = 'failed' # assume failed until the report is finalized
end
def name
@@ -110,44 +128,45 @@ class Puppet::Transaction::Report
# individual bits represent the presence of different metrics.
def exit_status
status = 0
- status |= 2 if @metrics["changes"][:total] > 0
- status |= 4 if @metrics["resources"][:failed] > 0
+ status |= 2 if @metrics["changes"]["total"] > 0
+ status |= 4 if @metrics["resources"]["failed"] > 0
status
end
+ def to_yaml_properties
+ (instance_variables - ["@external_times"]).sort
+ end
+
private
- def calculate_change_metrics
- metrics = Hash.new(0)
- resource_statuses.each do |name, status|
- metrics[:total] += status.change_count if status.change_count
- end
- add_metric(:changes, metrics)
+ def calculate_change_metric
+ resource_statuses.map { |name, status| status.change_count || 0 }.inject(0) { |a,b| a+b }
end
def calculate_event_metrics
metrics = Hash.new(0)
+ metrics["total"] = 0
resource_statuses.each do |name, status|
- metrics[:total] += status.events.length
+ metrics["total"] += status.events.length
status.events.each do |event|
metrics[event.status] += 1
end
end
- add_metric(:events, metrics)
+ metrics
end
def calculate_resource_metrics
metrics = Hash.new(0)
- metrics[:total] = resource_statuses.length
+ metrics["total"] = resource_statuses.length
resource_statuses.each do |name, status|
Puppet::Resource::Status::STATES.each do |state|
- metrics[state] += 1 if status.send(state)
+ metrics[state.to_s] += 1 if status.send(state)
end
end
- add_metric(:resources, metrics)
+ metrics
end
def calculate_time_metrics
@@ -161,6 +180,8 @@ class Puppet::Transaction::Report
metrics[name.to_s.downcase] = value
end
- add_metric(:time, metrics)
+ metrics["total"] = metrics.values.inject(0) { |a,b| a+b }
+
+ metrics
end
end
diff --git a/lib/puppet/transaction/resource_harness.rb b/lib/puppet/transaction/resource_harness.rb
index 29ec9a539..4a3d35e0d 100644
--- a/lib/puppet/transaction/resource_harness.rb
+++ b/lib/puppet/transaction/resource_harness.rb
@@ -7,92 +7,138 @@ class Puppet::Transaction::ResourceHarness
attr_reader :transaction
def allow_changes?(resource)
- return true unless resource.purging? and resource.deleting?
- return true unless deps = relationship_graph.dependents(resource) and ! deps.empty? and deps.detect { |d| ! d.deleting? }
-
- deplabel = deps.collect { |r| r.ref }.join(",")
- plurality = deps.length > 1 ? "":"s"
- resource.warning "#{deplabel} still depend#{plurality} on me -- not purging"
- false
- end
-
- def apply_changes(status, changes)
- changes.each do |change|
- status << change.apply
-
- cache(change.property.resource, change.property.name, change.is) if change.auditing?
+ if resource.purging? and resource.deleting? and deps = relationship_graph.dependents(resource) \
+ and ! deps.empty? and deps.detect { |d| ! d.deleting? }
+ deplabel = deps.collect { |r| r.ref }.join(",")
+ plurality = deps.length > 1 ? "":"s"
+ resource.warning "#{deplabel} still depend#{plurality} on me -- not purging"
+ false
+ else
+ true
end
- status.changed = true
end
- # Used mostly for scheduling at this point.
+ # Used mostly for scheduling and auditing at this point.
def cached(resource, name)
Puppet::Util::Storage.cache(resource)[name]
end
- # Used mostly for scheduling at this point.
+ # Used mostly for scheduling and auditing at this point.
def cache(resource, name, value)
Puppet::Util::Storage.cache(resource)[name] = value
end
- def changes_to_perform(status, resource)
+ def perform_changes(resource)
current = resource.retrieve_resource
cache resource, :checked, Time.now
return [] if ! allow_changes?(resource)
- audited = copy_audited_parameters(resource, current)
-
- if param = resource.parameter(:ensure)
- return [] if absent_and_not_being_created?(current, param)
- return [Puppet::Transaction::Change.new(param, current[:ensure])] unless ensure_is_insync?(current, param)
- return [] if ensure_should_be_absent?(current, param)
+ current_values = current.to_hash
+ historical_values = Puppet::Util::Storage.cache(resource).dup
+ desired_values = {}
+ resource.properties.each do |property|
+ desired_values[property.name] = property.should
end
+ audited_params = (resource[:audit] || []).map { |p| p.to_sym }
+ synced_params = []
- resource.properties.reject { |p| p.name == :ensure }.reject do |param|
- param.should.nil?
- end.reject do |param|
- param_is_insync?(current, param)
- end.collect do |param|
- change = Puppet::Transaction::Change.new(param, current[param.name])
- change.auditing = true if audited.include?(param.name)
- change
+ # Record the current state in state.yml.
+ audited_params.each do |param|
+ cache(resource, param, current_values[param])
end
- end
- def copy_audited_parameters(resource, current)
- return [] unless audit = resource[:audit]
- audit = Array(audit).collect { |p| p.to_sym }
- audited = []
- audit.find_all do |param|
- next if resource[param]
+ # Update the machine state & create logs/events
+ events = []
+ ensure_param = resource.parameter(:ensure)
+ if desired_values[:ensure] && !ensure_param.safe_insync?(current_values[:ensure])
+ events << apply_parameter(ensure_param, current_values[:ensure], audited_params.include?(:ensure), historical_values[:ensure])
+ synced_params << :ensure
+ elsif current_values[:ensure] != :absent
+ work_order = resource.properties # Note: only the resource knows what order to apply changes in
+ work_order.each do |param|
+ if desired_values[param.name] && !param.safe_insync?(current_values[param.name])
+ events << apply_parameter(param, current_values[param.name], audited_params.include?(param.name), historical_values[param.name])
+ synced_params << param.name
+ end
+ end
+ end
- if value = cached(resource, param)
- resource[param] = value
- audited << param
+ # Add more events to capture audit results
+ audited_params.each do |param_name|
+ if historical_values.include?(param_name)
+ if historical_values[param_name] != current_values[param_name] && !synced_params.include?(param_name)
+ event = create_change_event(resource.parameter(param_name), current_values[param_name], true, historical_values[param_name])
+ event.send_log
+ events << event
+ end
else
- resource.debug "Storing newly-audited value #{current[param]} for #{param}"
- cache(resource, param, current[param])
+ resource.property(param_name).notice "audit change: newly-recorded value #{current_values[param_name]}"
+ end
+ end
+
+ events
+ end
+
+ def create_change_event(property, current_value, do_audit, historical_value)
+ event = property.event
+ event.previous_value = current_value
+ event.desired_value = property.should
+ event.historical_value = historical_value
+
+ if do_audit
+ event.audited = true
+ event.status = "audit"
+ if historical_value != current_value
+ event.message = "audit change: previously recorded value #{property.is_to_s(historical_value)} has been changed to #{property.is_to_s(current_value)}"
end
end
- audited
+ event
+ end
+
+ def apply_parameter(property, current_value, do_audit, historical_value)
+ event = create_change_event(property, current_value, do_audit, historical_value)
+
+ if do_audit && historical_value && historical_value != current_value
+ brief_audit_message = " (previously recorded value was #{property.is_to_s(historical_value)})"
+ else
+ brief_audit_message = ""
+ end
+
+ if property.noop
+ event.message = "current_value #{property.is_to_s(current_value)}, should be #{property.should_to_s(property.should)} (noop)#{brief_audit_message}"
+ event.status = "noop"
+ else
+ property.sync
+ event.message = [ property.change_to_s(current_value, property.should), brief_audit_message ].join
+ event.status = "success"
+ end
+ event
+ rescue => detail
+ puts detail.backtrace if Puppet[:trace]
+ event.status = "failure"
+
+ event.message = "change from #{property.is_to_s(current_value)} to #{property.should_to_s(property.should)} failed: #{detail}"
+ event
+ ensure
+ event.send_log
end
def evaluate(resource)
start = Time.now
status = Puppet::Resource::Status.new(resource)
- if changes = changes_to_perform(status, resource) and ! changes.empty?
- status.out_of_sync = true
- status.change_count = changes.length
- apply_changes(status, changes)
- if ! resource.noop?
- cache(resource, :synced, Time.now)
- resource.flush if resource.respond_to?(:flush)
- end
+ perform_changes(resource).each do |event|
+ status << event
+ end
+
+ if status.changed? && ! resource.noop?
+ cache(resource, :synced, Time.now)
+ resource.flush if resource.respond_to?(:flush)
end
+
return status
rescue => detail
resource.fail "Could not create resource status: #{detail}" unless status
@@ -129,22 +175,4 @@ class Puppet::Transaction::ResourceHarness
return nil unless name = resource[:schedule]
resource.catalog.resource(:schedule, name) || resource.fail("Could not find schedule #{name}")
end
-
- private
-
- def absent_and_not_being_created?(current, param)
- current[:ensure] == :absent and param.should.nil?
- end
-
- def ensure_is_insync?(current, param)
- param.insync?(current[:ensure])
- end
-
- def ensure_should_be_absent?(current, param)
- param.should == :absent
- end
-
- def param_is_insync?(current, param)
- param.insync?(current[param.name])
- end
end
diff --git a/lib/puppet/type.rb b/lib/puppet/type.rb
index 1b6e7dcd7..e03650b54 100644
--- a/lib/puppet/type.rb
+++ b/lib/puppet/type.rb
@@ -446,7 +446,7 @@ class Type
# Create a transaction event. Called by Transaction or by
# a property.
def event(options = {})
- Puppet::Transaction::Event.new({:resource => self, :file => file, :line => line, :tags => tags, :version => version}.merge(options))
+ Puppet::Transaction::Event.new({:resource => self, :file => file, :line => line, :tags => tags}.merge(options))
end
# Let the catalog determine whether a given cached value is
@@ -648,7 +648,7 @@ class Type
"The is value is not in the is array for '#{property.name}'"
end
ensureis = is[property]
- if property.insync?(ensureis) and property.should == :absent
+ if property.safe_insync?(ensureis) and property.should == :absent
return true
end
end
@@ -660,7 +660,7 @@ class Type
end
propis = is[property]
- unless property.insync?(propis)
+ unless property.safe_insync?(propis)
property.debug("Not in sync: #{propis.inspect} vs #{property.should.inspect}")
insync = false
#else
diff --git a/lib/puppet/type/cron.rb b/lib/puppet/type/cron.rb
index 76399d693..4b18e71f9 100755
--- a/lib/puppet/type/cron.rb
+++ b/lib/puppet/type/cron.rb
@@ -54,11 +54,7 @@ Puppet::Type.newtype(:cron) do
# We have to override the parent method, because we consume the entire
# "should" array
def insync?(is)
- if @should
- self.is_to_s(is) == self.should_to_s
- else
- true
- end
+ self.is_to_s(is) == self.should_to_s
end
# A method used to do parameter input handling. Converts integers
diff --git a/lib/puppet/type/exec.rb b/lib/puppet/type/exec.rb
index 606888c75..daa49e223 100755
--- a/lib/puppet/type/exec.rb
+++ b/lib/puppet/type/exec.rb
@@ -9,41 +9,11 @@ module Puppet
commands is to use the checks like `creates` to avoid running the
command unless some condition is met.
- Note also that you can restrict an `exec` to only run when it receives
+ Note that you can restrict an `exec` to only run when it receives
events by using the `refreshonly` parameter; this is a useful way to
have your configuration respond to events with arbitrary commands.
- It is worth noting that `exec` is special, in that it is not
- currently considered an error to have multiple `exec` instances
- with the same name. This was done purely because it had to be this
- way in order to get certain functionality, but it complicates things.
- In particular, you will not be able to use `exec` instances that
- share their commands with other instances as a dependency, since
- Puppet has no way of knowing which instance you mean.
-
- For example:
-
- # defined in the production class
- exec { \"make\":
- cwd => \"/prod/build/dir\",
- path => \"/usr/bin:/usr/sbin:/bin\"
- }
-
- . etc. .
-
- # defined in the test class
- exec { \"make\":
- cwd => \"/test/build/dir\",
- path => \"/usr/bin:/usr/sbin:/bin\"
- }
-
- Any other type would throw an error, complaining that you had
- the same instance being managed in multiple places, but these are
- obviously different images, so `exec` had to be treated specially.
-
- It is recommended to avoid duplicate names whenever possible.
-
- Note that if an `exec` receives an event from another resource,
+ Note also that if an `exec` receives an event from another resource,
it will get executed again (or execute the command specified in `refresh`, if there is one).
There is a strong tendency to use `exec` to do whatever work Puppet
@@ -335,7 +305,7 @@ module Puppet
# Pull down the main aliases file
file { \"/etc/aliases\":
source => \"puppet://server/module/aliases\"
- }
+ }
# Rebuild the database, but only when the file changes
exec { newaliases:
@@ -664,7 +634,7 @@ module Puppet
def validatecmd(cmd)
exe = extractexe(cmd)
# if we're not fully qualified, require a path
- self.fail "'#{cmd}' is both unqualifed and specified no search path" if File.expand_path(exe) != exe and self[:path].nil?
+ self.fail "'#{cmd}' is not qualified and no path was specified. Please qualify the command or specify a path." if File.expand_path(exe) != exe and self[:path].nil?
end
def extractexe(cmd)
diff --git a/lib/puppet/type/file.rb b/lib/puppet/type/file.rb
index f35a26408..963b9e5dd 100644
--- a/lib/puppet/type/file.rb
+++ b/lib/puppet/type/file.rb
@@ -34,7 +34,7 @@ Puppet::Type.newtype(:file) do
validate do |value|
# accept various path syntaxes: lone slash, posix, win32, unc
- unless (Puppet.features.posix? and (value =~ /^\/$/ or value =~ /^\/[^\/]/)) or (Puppet.features.microsoft_windows? and (value =~ /^.:\// or value =~ /^\/\/[^\/]+\/[^\/]+/))
+ unless (Puppet.features.posix? and value =~ /^\//) or (Puppet.features.microsoft_windows? and (value =~ /^.:\// or value =~ /^\/\/[^\/]+\/[^\/]+/))
fail Puppet::Error, "File paths must be fully qualified, not '#{value}'"
end
end
@@ -271,17 +271,24 @@ Puppet::Type.newtype(:file) do
end
CREATORS = [:content, :source, :target]
+ SOURCE_ONLY_CHECKSUMS = [:none, :ctime, :mtime]
validate do
- count = 0
+ creator_count = 0
CREATORS.each do |param|
- count += 1 if self.should(param)
+ creator_count += 1 if self.should(param)
end
- count += 1 if @parameters.include?(:source)
- self.fail "You cannot specify more than one of #{CREATORS.collect { |p| p.to_s}.join(", ")}" if count > 1
+ creator_count += 1 if @parameters.include?(:source)
+ self.fail "You cannot specify more than one of #{CREATORS.collect { |p| p.to_s}.join(", ")}" if creator_count > 1
self.fail "You cannot specify a remote recursion without a source" if !self[:source] and self[:recurse] == :remote
+ self.fail "You cannot specify source when using checksum 'none'" if self[:checksum] == :none && !self[:source].nil?
+
+ SOURCE_ONLY_CHECKSUMS.each do |checksum_type|
+ self.fail "You cannot specify content when using checksum '#{checksum_type}'" if self[:checksum] == checksum_type && !self[:content].nil?
+ end
+
self.warning "Possible error: recurselimit is set but not recurse, no recursion will happen" if !self[:recurse] and self[:recurselimit]
end
@@ -290,25 +297,8 @@ Puppet::Type.newtype(:file) do
super(path.gsub(/\/+/, '/').sub(/\/$/, ''))
end
- # List files, but only one level deep.
- def self.instances(base = "/")
- return [] unless FileTest.directory?(base)
-
- files = []
- Dir.entries(base).reject { |e|
- e == "." or e == ".."
- }.each do |name|
- path = File.join(base, name)
- if obj = self[path]
- obj[:audit] = :all
- files << obj
- else
- files << self.new(
- :name => path, :audit => :all
- )
- end
- end
- files
+ def self.instances(base = '/')
+ return self.new(:name => base, :recurse => true, :recurselimit => 1, :audit => :all).recurse_local.values
end
@depthfirst = false
@@ -587,7 +577,7 @@ Puppet::Type.newtype(:file) do
def perform_recursion(path)
- Puppet::FileServing::Metadata.search(
+ Puppet::FileServing::Metadata.indirection.search(
path,
:links => self[:links],
@@ -718,8 +708,9 @@ Puppet::Type.newtype(:file) do
mode = self.should(:mode) # might be nil
umask = mode ? 000 : 022
+ mode_int = mode ? mode.to_i(8) : nil
- content_checksum = Puppet::Util.withumask(umask) { File.open(path, 'w', mode) { |f| write_content(f) } }
+ content_checksum = Puppet::Util.withumask(umask) { File.open(path, 'w', mode_int ) { |f| write_content(f) } }
# And put our new file in place
if use_temporary_file # This is only not true when our file is empty.
@@ -778,7 +769,7 @@ Puppet::Type.newtype(:file) do
# Make sure we get a new stat objct
expire
currentvalue = thing.retrieve
- thing.sync unless thing.insync?(currentvalue)
+ thing.sync unless thing.safe_insync?(currentvalue)
end
end
end
@@ -796,3 +787,5 @@ require 'puppet/type/file/group'
require 'puppet/type/file/mode'
require 'puppet/type/file/type'
require 'puppet/type/file/selcontext' # SELinux file context
+require 'puppet/type/file/ctime'
+require 'puppet/type/file/mtime'
diff --git a/lib/puppet/type/file/checksum.rb b/lib/puppet/type/file/checksum.rb
index 732460738..5586b1383 100755
--- a/lib/puppet/type/file/checksum.rb
+++ b/lib/puppet/type/file/checksum.rb
@@ -9,7 +9,7 @@ Puppet::Type.type(:file).newparam(:checksum) do
The default checksum parameter, if checksums are enabled, is md5."
- newvalues "md5", "md5lite", "timestamp", "mtime", "time", "none"
+ newvalues "md5", "md5lite", "mtime", "ctime", "none"
defaultto :md5
diff --git a/lib/puppet/type/file/content.rb b/lib/puppet/type/file/content.rb
index b8f30a9c7..cf924f371 100755
--- a/lib/puppet/type/file/content.rb
+++ b/lib/puppet/type/file/content.rb
@@ -96,7 +96,6 @@ module Puppet
end
return true if ! @resource.replace?
- return true unless self.should
result = super
@@ -168,6 +167,8 @@ module Puppet
def each_chunk_from(source_or_content)
if source_or_content.is_a?(String)
yield source_or_content
+ elsif source_or_content.nil? && resource.parameter(:ensure) && [:present, :file].include?(resource.parameter(:ensure).value)
+ yield ''
elsif source_or_content.nil?
yield read_file_from_filebucket
elsif self.class.standalone?
diff --git a/lib/puppet/type/file/ctime.rb b/lib/puppet/type/file/ctime.rb
new file mode 100644
index 000000000..24b098703
--- /dev/null
+++ b/lib/puppet/type/file/ctime.rb
@@ -0,0 +1,18 @@
+module Puppet
+ Puppet::Type.type(:file).newproperty(:ctime) do
+ desc "A read-only state to check the file ctime."
+
+ def retrieve
+ current_value = :absent
+ if stat = @resource.stat(false)
+ current_value = stat.ctime
+ end
+ current_value
+ end
+
+ validate do
+ fail "ctime is read-only"
+ end
+ end
+end
+
diff --git a/lib/puppet/type/file/ensure.rb b/lib/puppet/type/file/ensure.rb
index 967e06aee..4a68551ee 100755
--- a/lib/puppet/type/file/ensure.rb
+++ b/lib/puppet/type/file/ensure.rb
@@ -66,7 +66,7 @@ module Puppet
end
if mode
Puppet::Util.withumask(000) do
- Dir.mkdir(@resource[:path],mode)
+ Dir.mkdir(@resource[:path], mode.to_i(8))
end
else
Dir.mkdir(@resource[:path])
diff --git a/lib/puppet/type/file/mode.rb b/lib/puppet/type/file/mode.rb
index 1ce56c843..2acd8b359 100755
--- a/lib/puppet/type/file/mode.rb
+++ b/lib/puppet/type/file/mode.rb
@@ -25,60 +25,26 @@ module Puppet
@event = :file_changed
- # Our modes are octal, so make sure they print correctly. Other
- # valid values are symbols, basically
- def is_to_s(currentvalue)
- case currentvalue
- when Integer
- return "%o" % currentvalue
- when Symbol
- return currentvalue
- else
- raise Puppet::DevError, "Invalid current value for mode: #{currentvalue.inspect}"
- end
- end
-
- def should_to_s(newvalue = @should)
- case newvalue
- when Integer
- return "%o" % newvalue
- when Symbol
- return newvalue
- else
- raise Puppet::DevError, "Invalid 'should' value for mode: #{newvalue.inspect}"
- end
- end
-
munge do |should|
- # this is pretty hackish, but i need to make sure the number is in
- # octal, yet the number can only be specified as a string right now
- value = should
- if value.is_a?(String)
- unless value =~ /^\d+$/
- raise Puppet::Error, "File modes can only be numbers, not #{value.inspect}"
- end
- # Make sure our number looks like octal.
- unless value =~ /^0/
- value = "0#{value}"
- end
- old = value
- begin
- value = Integer(value)
- rescue ArgumentError => detail
- raise Puppet::DevError, "Could not convert #{old.inspect} to integer"
+ if should.is_a?(String)
+ unless should =~ /^[0-7]+$/
+ raise Puppet::Error, "File modes can only be octal numbers, not #{should.inspect}"
end
+ should.to_i(8).to_s(8)
+ else
+ should.to_s(8)
end
-
- return value
end
# If we're a directory, we need to be executable for all cases
# that are readable. This should probably be selectable, but eh.
def dirmask(value)
if FileTest.directory?(@resource[:path])
+ value = value.to_i(8)
value |= 0100 if value & 0400 != 0
value |= 010 if value & 040 != 0
value |= 01 if value & 04 != 0
+ value = value.to_s(8)
end
value
@@ -101,7 +67,7 @@ module Puppet
unless defined?(@fixed)
@should &&= @should.collect { |s| self.dirmask(s) }
end
- return stat.mode & 007777
+ return (stat.mode & 007777).to_s(8)
else
return :absent
end
@@ -111,7 +77,7 @@ module Puppet
mode = self.should
begin
- File.chmod(mode, @resource[:path])
+ File.chmod(mode.to_i(8), @resource[:path])
rescue => detail
error = Puppet::Error.new("failed to chmod #{@resource[:path]}: #{detail.message}")
error.set_backtrace detail.backtrace
diff --git a/lib/puppet/type/file/mtime.rb b/lib/puppet/type/file/mtime.rb
new file mode 100644
index 000000000..8ca7ed0d6
--- /dev/null
+++ b/lib/puppet/type/file/mtime.rb
@@ -0,0 +1,17 @@
+module Puppet
+ Puppet::Type.type(:file).newproperty(:mtime) do
+ desc "A read-only state to check the file mtime."
+
+ def retrieve
+ current_value = :absent
+ if stat = @resource.stat(false)
+ current_value = stat.mtime
+ end
+ current_value
+ end
+
+ validate do
+ fail "mtime is read-only"
+ end
+ end
+end
diff --git a/lib/puppet/type/file/owner.rb b/lib/puppet/type/file/owner.rb
index d473da20e..483cc7fce 100755
--- a/lib/puppet/type/file/owner.rb
+++ b/lib/puppet/type/file/owner.rb
@@ -6,7 +6,7 @@ module Puppet
@event = :file_changed
def insync?(current)
- provider.insync?(current, @should)
+ provider.is_owner_insync?(current, @should)
end
# We want to print names, not numbers
diff --git a/lib/puppet/type/file/source.rb b/lib/puppet/type/file/source.rb
index 7d03de2b0..ac06a26a1 100755
--- a/lib/puppet/type/file/source.rb
+++ b/lib/puppet/type/file/source.rb
@@ -98,7 +98,7 @@ module Puppet
cached_attr(:content) do
raise Puppet::DevError, "No source for content was stored with the metadata" unless metadata.source
- unless tmp = Puppet::FileServing::Content.find(metadata.source)
+ unless tmp = Puppet::FileServing::Content.indirection.find(metadata.source)
fail "Could not find any content at %s" % metadata.source
end
tmp.content
@@ -148,7 +148,7 @@ module Puppet
result = nil
value.each do |source|
begin
- if data = Puppet::FileServing::Metadata.find(source)
+ if data = Puppet::FileServing::Metadata.indirection.find(source)
result = data
result.source = source
break
@@ -169,7 +169,6 @@ module Puppet
checks.delete(:checksum)
resource[:audit] = checks
- resource[:checksum] = :md5 unless resource.property(:checksum)
end
def local?
diff --git a/lib/puppet/type/file/target.rb b/lib/puppet/type/file/target.rb
index 9e7229dda..b9fe9213b 100644
--- a/lib/puppet/type/file/target.rb
+++ b/lib/puppet/type/file/target.rb
@@ -14,7 +14,7 @@ module Puppet
# Only call mklink if ensure didn't call us in the first place.
currentensure = @resource.property(:ensure).retrieve
- mklink if @resource.property(:ensure).insync?(currentensure)
+ mklink if @resource.property(:ensure).safe_insync?(currentensure)
end
# Create our link.
diff --git a/lib/puppet/type/file/type.rb b/lib/puppet/type/file/type.rb
index eb50b81f9..4da54e2cb 100755
--- a/lib/puppet/type/file/type.rb
+++ b/lib/puppet/type/file/type.rb
@@ -3,23 +3,16 @@ module Puppet
require 'etc'
desc "A read-only state to check the file type."
- #munge do |value|
- # raise Puppet::Error, ":type is read-only"
- #end
-
def retrieve
- currentvalue = :absent
+ current_value = :absent
if stat = @resource.stat(false)
- currentvalue = stat.ftype
+ current_value = stat.ftype
end
- # so this state is never marked out of sync
- @should = [currentvalue]
- currentvalue
+ current_value
end
-
- def sync
- raise Puppet::Error, ":type is read-only"
+ validate do
+ fail "type is read-only"
end
end
end
diff --git a/lib/puppet/type/host.rb b/lib/puppet/type/host.rb
index 1af74d886..a770edab9 100755
--- a/lib/puppet/type/host.rb
+++ b/lib/puppet/type/host.rb
@@ -1,3 +1,5 @@
+require 'puppet/property/ordered_list'
+
module Puppet
newtype(:host) do
ensurable
@@ -13,41 +15,24 @@ module Puppet
end
- newproperty(:host_aliases) do
+ # for now we use OrderedList to indicate that the order does matter.
+ newproperty(:host_aliases, :parent => Puppet::Property::OrderedList) do
desc "Any aliases the host might have. Multiple values must be
specified as an array."
- def insync?(is)
- is == @should
+ def delimiter
+ " "
end
- def is_to_s(currentvalue = @is)
- currentvalue = [currentvalue] unless currentvalue.is_a? Array
- currentvalue.join(" ")
- end
-
- # We actually want to return the whole array here, not just the first
- # value.
- def should
- if defined?(@should)
- if @should == [:absent]
- return :absent
- else
- return @should
- end
- else
- return nil
- end
- end
-
- def should_to_s(newvalue = @should)
- newvalue.join(" ")
+ def inclusive?
+ true
end
validate do |value|
raise Puppet::Error, "Host aliases cannot include whitespace" if value =~ /\s/
raise Puppet::Error, "Host alias cannot be an empty string. Use an empty array to delete all host_aliases " if value =~ /^\s*$/
end
+
end
newproperty(:comment) do
@@ -56,7 +41,7 @@ module Puppet
newproperty(:target) do
desc "The file in which to store service information. Only used by
- those providers that write to disk."
+ those providers that write to disk. On most systems this defaults to `/etc/hosts`."
defaultto { if @resource.class.defaultprovider.ancestors.include?(Puppet::Provider::ParsedFile)
@resource.class.defaultprovider.default_target
diff --git a/lib/puppet/type/mount.rb b/lib/puppet/type/mount.rb
index e8c6b3290..915bb8e6c 100755
--- a/lib/puppet/type/mount.rb
+++ b/lib/puppet/type/mount.rb
@@ -89,7 +89,7 @@ module Puppet
if prop.name == :ensure
false
else
- ! prop.insync?(currentvalues[prop])
+ ! prop.safe_insync?(currentvalues[prop])
end
end.each { |prop| prop.sync }.length
@resource.flush if oos > 0
@@ -200,7 +200,7 @@ module Puppet
newvalues(:true, :false)
defaultto do
case Facter.value(:operatingsystem)
- when "FreeBSD", "Darwin"
+ when "FreeBSD", "Darwin", "AIX"
false
else
true
diff --git a/lib/puppet/type/package.rb b/lib/puppet/type/package.rb
index 51a866332..d73d90dff 100644
--- a/lib/puppet/type/package.rb
+++ b/lib/puppet/type/package.rb
@@ -109,8 +109,6 @@ module Puppet
# Override the parent method, because we've got all kinds of
# funky definitions of 'in sync'.
def insync?(is)
- @should ||= []
-
@latest ||= nil
@lateststamp ||= (Time.now.to_i - 1000)
# Iterate across all of the should values, and see how they
diff --git a/lib/puppet/type/service.rb b/lib/puppet/type/service.rb
index 786a50448..3ef044932 100644
--- a/lib/puppet/type/service.rb
+++ b/lib/puppet/type/service.rb
@@ -73,7 +73,7 @@ module Puppet
if property = @resource.property(:enable)
val = property.retrieve
- property.sync unless property.insync?(val)
+ property.sync unless property.safe_insync?(val)
end
event
@@ -146,10 +146,16 @@ module Puppet
specified."
end
newparam(:status) do
- desc "Specify a *status* command manually. If left
- unspecified, the status method will be determined
- automatically, usually by looking for the service in the
- process table."
+ desc "Specify a *status* command manually. This command must
+ return 0 if the service is running and a nonzero value otherwise.
+ Ideally, these return codes should conform to
+ [the LSB's specification for init script status actions](http://refspecs.freestandards.org/LSB_3.1.1/LSB-Core-generic/LSB-Core-generic/iniscrptact.html),
+ but puppet only considers the difference between 0 and nonzero
+ to be relevant.
+
+ If left unspecified, the status method will be determined
+ automatically, usually by looking for the service in the process
+ table."
end
newparam(:stop) do
diff --git a/lib/puppet/type/sshkey.rb b/lib/puppet/type/sshkey.rb
index b7a1b8a8d..59a1a12f8 100755
--- a/lib/puppet/type/sshkey.rb
+++ b/lib/puppet/type/sshkey.rb
@@ -41,7 +41,7 @@ module Puppet
raise Puppet::Error, "Aliases cannot include whitespace"
end
if value =~ /,/
- raise Puppet::Error, "Aliases cannot include whitespace"
+ raise Puppet::Error, "Aliases must be provided as an array, not a comma-separated list"
end
end
end
@@ -50,6 +50,11 @@ module Puppet
desc "The host name that the key is associated with."
isnamevar
+
+ validate do |value|
+ raise Puppet::Error, "Resourcename cannot include whitespaces" if value =~ /\s/
+ raise Puppet::Error, "No comma in resourcename allowed. If you want to specify aliases use the host_aliases property" if value.include?(',')
+ end
end
newproperty(:target) do
diff --git a/lib/puppet/type/user.rb b/lib/puppet/type/user.rb
index c8110bb69..e7389a0d1 100755
--- a/lib/puppet/type/user.rb
+++ b/lib/puppet/type/user.rb
@@ -72,6 +72,11 @@ module Puppet
end
end
+ newproperty(:home) do
+ desc "The home directory of the user. The directory must be created
+ separately and is not currently checked for existence."
+ end
+
newproperty(:uid) do
desc "The user ID. Must be specified numerically. For new users
being created, if no user ID is specified then one will be
@@ -107,8 +112,6 @@ module Puppet
end
def insync?(is)
- return true unless self.should
-
# We know the 'is' is a number, so we need to convert the 'should' to a number,
# too.
@should.each do |value|
@@ -138,11 +141,6 @@ module Puppet
desc "A description of the user. Generally is a user's full name."
end
- newproperty(:home) do
- desc "The home directory of the user. The directory must be created
- separately and is not currently checked for existence."
- end
-
newproperty(:shell) do
desc "The user's login shell. The shell must exist and be
executable."
@@ -177,7 +175,7 @@ module Puppet
end
validate do |value|
- if value.to_s !~ /^\d+$/
+ if value.to_s !~ /^-?\d+$/
raise ArgumentError, "Password minimum age must be provided as a number"
end
end
@@ -196,7 +194,7 @@ module Puppet
end
validate do |value|
- if value.to_s !~ /^\d+$/
+ if value.to_s !~ /^-?\d+$/
raise ArgumentError, "Password maximum age must be provided as a number"
end
end
diff --git a/lib/puppet/type/yumrepo.rb b/lib/puppet/type/yumrepo.rb
index 160b2164d..9b4c79428 100644
--- a/lib/puppet/type/yumrepo.rb
+++ b/lib/puppet/type/yumrepo.rb
@@ -7,14 +7,14 @@ module Puppet
class IniProperty < Puppet::Property
def insync?(is)
# A should property of :absent is the same as nil
- if is.nil? && (should.nil? || should == :absent)
+ if is.nil? && should == :absent
return true
end
super(is)
end
def sync
- if insync?(retrieve)
+ if safe_insync?(retrieve)
result = nil
else
result = set(self.should)
diff --git a/lib/puppet/type/zfs.rb b/lib/puppet/type/zfs.rb
index 1757931f8..be18ab5aa 100755
--- a/lib/puppet/type/zfs.rb
+++ b/lib/puppet/type/zfs.rb
@@ -12,6 +12,26 @@ module Puppet
desc "The mountpoint property."
end
+ newproperty(:recordsize) do
+ desc "The recordsize property."
+ end
+
+ newproperty(:aclmode) do
+ desc "The aclmode property."
+ end
+
+ newproperty(:aclinherit) do
+ desc "The aclinherit property."
+ end
+
+ newproperty(:primarycache) do
+ desc "The primarycache property."
+ end
+
+ newproperty(:secondarycache) do
+ desc "The secondarycache property."
+ end
+
newproperty(:compression) do
desc "The compression property."
end
diff --git a/lib/puppet/type/zone.rb b/lib/puppet/type/zone.rb
index 408d6f5dd..fc524a541 100644
--- a/lib/puppet/type/zone.rb
+++ b/lib/puppet/type/zone.rb
@@ -282,6 +282,33 @@ Puppet::Type.newtype(:zone) do
end
end
+ newproperty(:dataset, :parent => ZoneMultiConfigProperty) do
+ desc "The list of datasets delegated to the non global zone from the
+ global zone. All datasets must be zfs filesystem names which is
+ different than the mountpoint."
+
+ validate do |value|
+ unless value !~ /^\//
+ raise ArgumentError, "Datasets must be the name of a zfs filesystem"
+ end
+ end
+
+ # Add a zfs filesystem to our list of datasets.
+ def add(dataset)
+ "add dataset\nset name=#{dataset}\nend"
+ end
+
+ # Remove a zfs filesystem from our list of datasets.
+ def rm(dataset)
+ "remove dataset name=#{dataset}"
+ end
+
+ def should
+ @should
+ end
+ end
+
+
newproperty(:inherit, :parent => ZoneMultiConfigProperty) do
desc "The list of directories that the zone inherits from the global
zone. All directories must be fully qualified."
diff --git a/lib/puppet/type/zpool.rb b/lib/puppet/type/zpool.rb
index 49cce552a..df06522e8 100755
--- a/lib/puppet/type/zpool.rb
+++ b/lib/puppet/type/zpool.rb
@@ -8,8 +8,6 @@ module Puppet
end
def insync?(is)
- return true unless self.should
-
return @should == [:absent] if is == :absent
flatten_and_sort(is) == flatten_and_sort(@should)
@@ -18,8 +16,6 @@ module Puppet
class MultiVDev < VDev
def insync?(is)
- return true unless self.should
-
return @should == [:absent] if is == :absent
return false unless is.length == @should.length
diff --git a/lib/puppet/util/checksums.rb b/lib/puppet/util/checksums.rb
index 5aebd8392..e129301e6 100644
--- a/lib/puppet/util/checksums.rb
+++ b/lib/puppet/util/checksums.rb
@@ -1,6 +1,12 @@
# A stand-alone module for calculating checksums
# in a generic way.
module Puppet::Util::Checksums
+ class FakeChecksum
+ def <<(*args)
+ self
+ end
+ end
+
# Is the provided string a checksum?
def checksum?(string)
string =~ /^\{(\w{3,5})\}\S+/
@@ -55,11 +61,16 @@ module Puppet::Util::Checksums
end
# by definition this doesn't exist
+ # but we still need to execute the block given
def mtime_stream
+ noop_digest = FakeChecksum.new
+ yield noop_digest
nil
end
- alias :ctime_stream :mtime_stream
+ def mtime(content)
+ ""
+ end
# Calculate a checksum using Digest::SHA1.
def sha1(content)
@@ -99,12 +110,24 @@ module Puppet::Util::Checksums
File.stat(filename).send(:ctime)
end
+ alias :ctime_stream :mtime_stream
+
+ def ctime(content)
+ ""
+ end
+
# Return a "no checksum"
def none_file(filename)
""
end
def none_stream
+ noop_digest = FakeChecksum.new
+ yield noop_digest
+ ""
+ end
+
+ def none(content)
""
end
diff --git a/lib/puppet/util/command_line/filebucket b/lib/puppet/util/command_line/filebucket
index 8302d7b12..34b01508e 100755
--- a/lib/puppet/util/command_line/filebucket
+++ b/lib/puppet/util/command_line/filebucket
@@ -91,7 +91,7 @@
#
# = Copyright
#
-# Copyright (c) 2005 Reductive Labs, LLC
+# Copyright (c) 2005 Puppet Labs, LLC
# Licensed under the GNU Public License
#Puppet::Application[:filebucket].run
diff --git a/lib/puppet/util/command_line/pi b/lib/puppet/util/command_line/pi
index ae3c46e9a..3d80eea8f 100755
--- a/lib/puppet/util/command_line/pi
+++ b/lib/puppet/util/command_line/pi
@@ -42,7 +42,7 @@
#
# = Copyright
#
-# Copyright (c) 2005 Reductive Labs, LLC
+# Copyright (c) 2005 Puppet Labs, LLC
# Licensed under the GNU Public License
#Puppet::Application[:describe].run
diff --git a/lib/puppet/util/command_line/puppet b/lib/puppet/util/command_line/puppet
index 7b6c0ae7f..e75b92af8 100755
--- a/lib/puppet/util/command_line/puppet
+++ b/lib/puppet/util/command_line/puppet
@@ -63,7 +63,7 @@
#
# = Copyright
#
-# Copyright (c) 2005 Reductive Labs, LLC
+# Copyright (c) 2005 Puppet Labs, LLC
# Licensed under the GNU Public License
#Puppet::Application[:apply].run
diff --git a/lib/puppet/util/command_line/puppetca b/lib/puppet/util/command_line/puppetca
index 4f1a88da5..317d99881 100755
--- a/lib/puppet/util/command_line/puppetca
+++ b/lib/puppet/util/command_line/puppetca
@@ -27,7 +27,7 @@
# parameter, so you can specify '--ssldir <directory>' as an argument.
#
# See the configuration file documentation at
-# http://reductivelabs.com/projects/puppet/reference/configref.html for
+# http://docs.puppetlabs.com/references/stable/configuration.html for
# the full list of acceptable parameters. A commented list of all
# configuration options can also be generated by running puppet cert with
# '--genconfig'.
@@ -45,7 +45,7 @@
# Remove all files related to a host from puppet cert's storage. This is
# useful when rebuilding hosts, since new certificate signing requests
# will only be honored if puppet cert does not have a copy of a signed
-# certificate for that host. The certificate of the host remains valid.
+# certificate for that host. The certificate of the host is also revoked.
# If '--all' is specified then all host certificates, both signed and
# unsigned, will be removed.
#
@@ -104,7 +104,7 @@
#
# = Copyright
#
-# Copyright (c) 2005 Reductive Labs, LLC
+# Copyright (c) 2005 Puppet Labs, LLC
# Licensed under the GNU Public License
#Puppet::Application[:cert].run
diff --git a/lib/puppet/util/command_line/puppetd b/lib/puppet/util/command_line/puppetd
index 571b15486..71b28429b 100755
--- a/lib/puppet/util/command_line/puppetd
+++ b/lib/puppet/util/command_line/puppetd
@@ -11,7 +11,7 @@
#
# puppet agent [-D|--daemonize|--no-daemonize] [-d|--debug]
# [--detailed-exitcodes] [--disable] [--enable]
-# [-h|--help] [--fqdn <host name>] [-l|--logdest syslog|<file>|console]
+# [-h|--help] [--certname <host name>] [-l|--logdest syslog|<file>|console]
# [-o|--onetime] [--serve <handler>] [-t|--test] [--noop]
# [--digest <digest>] [--fingerprint] [-V|--version]
# [-v|--verbose] [-w|--waitforcert <seconds>]
@@ -113,10 +113,11 @@
#
# +puppet agent+ exits after executing this.
#
-# fqdn::
-# Set the fully-qualified domain name of the client. This is only used for
-# certificate purposes, but can be used to override the discovered hostname.
-# If you need to use this flag, it is generally an indication of a setup problem.
+# certname::
+# Set the certname (unique ID) of the client. The master reads this unique
+# identifying string, which is usually set to the node's fully-qualified domain
+# name, to determine which configurations the node will receive. Use this option
+# to debug setup problems or implement unusual node identification schemes.
#
# help::
# Print this help message
@@ -150,7 +151,8 @@
#
# test::
# Enable the most common options used for testing. These are +onetime+,
-# +verbose+, +ignorecache, +no-daemonize+, and +no-usecacheonfailure+.
+# +verbose+, +ignorecache, +no-daemonize+, +no-usecacheonfailure+,
+# +detailed-exit-codes+, +no-splay+, and +show_diff+.
#
# noop::
# Use +noop+ mode where the daemon runs in a no-op or dry-run mode. This is useful
@@ -180,7 +182,7 @@
#
# = Copyright
#
-# Copyright (c) 2005, 2006 Reductive Labs, LLC
+# Copyright (c) 2005, 2006 Puppet Labs, LLC
# Licensed under the GNU Public License
#Puppet::Application[:agent].run
diff --git a/lib/puppet/util/command_line/puppetdoc b/lib/puppet/util/command_line/puppetdoc
index 0fa1830d6..45a9c6518 100755
--- a/lib/puppet/util/command_line/puppetdoc
+++ b/lib/puppet/util/command_line/puppetdoc
@@ -3,7 +3,7 @@
#
# = Synopsis
#
-# Generate a reference for all Puppet types. Largely meant for internal Reductive
+# Generate a reference for all Puppet types. Largely meant for internal Puppet
# Labs use.
#
# = Usage
@@ -37,7 +37,7 @@
# Specifies the directory where to output the rdoc documentation in 'rdoc' mode.
#
# mode::
-# Determine the output mode. Valid modes are 'text', 'trac', 'pdf' and 'rdoc'. The 'pdf' mode creates PDF formatted files in the /tmp directory. The default mode is 'text'. In 'rdoc' mode you must provide 'manifests-path'
+# Determine the output mode. Valid modes are 'text', 'pdf' and 'rdoc'. The 'pdf' mode creates PDF formatted files in the /tmp directory. The default mode is 'text'. In 'rdoc' mode you must provide 'manifests-path'
#
# reference::
# Build a particular reference. Get a list of references by running +puppet doc --list+.
@@ -47,7 +47,7 @@
#
# = Example
#
-# $ puppet doc -r type > /tmp/type_reference.rst
+# $ puppet doc -r type > /tmp/type_reference.markdown
# or
# $ puppet doc --outputdir /tmp/rdoc --mode rdoc /path/to/manifests
# or
@@ -61,7 +61,7 @@
#
# = Copyright
#
-# Copyright (c) 2005-2007 Reductive Labs, LLC
+# Copyright (c) 2005-2007 Puppet Labs, LLC
# Licensed under the GNU Public License
#Puppet::Application[:doc].run
diff --git a/lib/puppet/util/command_line/puppetmasterd b/lib/puppet/util/command_line/puppetmasterd
index 74efb3818..445169820 100755
--- a/lib/puppet/util/command_line/puppetmasterd
+++ b/lib/puppet/util/command_line/puppetmasterd
@@ -9,6 +9,7 @@
#
# puppet master [-D|--daemonize|--no-daemonize] [-d|--debug] [-h|--help]
# [-l|--logdest <file>|console|syslog] [-v|--verbose] [-V|--version]
+# [--compile <nodename>] [--apply <catalog>]
#
# = Description
#
@@ -49,6 +50,14 @@
# version::
# Print the puppet version number and exit.
#
+# compile::
+# Capability to compile a catalogue and output it in JSON from the Puppet master. Uses
+# facts contained in the $vardir/yaml/ directory to compile the catalog.
+#
+# apply::
+# Capability to apply JSON catalog (such as one generated with --compile). You can either specify
+# a JSON file or pipe in JSON from standard input.
+#
# = Example
#
# puppet master
@@ -59,7 +68,7 @@
#
# = Copyright
#
-# Copyright (c) 2005 Reductive Labs, LLC
+# Copyright (c) 2005 Puppet Labs, LLC
# Licensed under the GNU Public License
#Puppet::Application[:master].run
diff --git a/lib/puppet/util/command_line/puppetqd b/lib/puppet/util/command_line/puppetqd
index 48fc952bd..81963d537 100755
--- a/lib/puppet/util/command_line/puppetqd
+++ b/lib/puppet/util/command_line/puppetqd
@@ -47,7 +47,7 @@
#
# = Copyright
#
-# Copyright (c) 2009 Reductive Labs, LLC
+# Copyright (c) 2009 Puppet Labs, LLC
# Licensed under the GNU Public License
#Puppet::Application[:queue].run
diff --git a/lib/puppet/util/command_line/puppetrun b/lib/puppet/util/command_line/puppetrun
index 27cd775b9..7eba3b2c4 100755
--- a/lib/puppet/util/command_line/puppetrun
+++ b/lib/puppet/util/command_line/puppetrun
@@ -120,7 +120,7 @@
#
# = Copyright
#
-# Copyright (c) 2005 Reductive Labs, LLC
+# Copyright (c) 2005 Puppet Labs, LLC
# Licensed under the GNU Public License
#Puppet::Application[:kick].run
diff --git a/lib/puppet/util/command_line/ralsh b/lib/puppet/util/command_line/ralsh
index 83338fcbc..5c1f719e2 100755
--- a/lib/puppet/util/command_line/ralsh
+++ b/lib/puppet/util/command_line/ralsh
@@ -83,7 +83,7 @@
#
# = Copyright
#
-# Copyright (c) 2005-2007 Reductive Labs, LLC
+# Copyright (c) 2005-2007 Puppet Labs, LLC
# Licensed under the GNU Public License
#Puppet::Application[:resource].run
diff --git a/lib/puppet/util/log.rb b/lib/puppet/util/log.rb
index a5aacc265..2f9f356bb 100644
--- a/lib/puppet/util/log.rb
+++ b/lib/puppet/util/log.rb
@@ -17,11 +17,12 @@ class Puppet::Util::Log
# Create a new destination type.
def self.newdesttype(name, options = {}, &block)
- dest = genclass(
- name, :parent => Puppet::Util::Log::Destination, :prefix => "Dest",
- :block => block,
- :hash => @desttypes,
-
+ dest = genclass(
+ name,
+ :parent => Puppet::Util::Log::Destination,
+ :prefix => "Dest",
+ :block => block,
+ :hash => @desttypes,
:attributes => options
)
dest.match(dest.name)
@@ -189,7 +190,7 @@ class Puppet::Util::Log
@levels.include?(level)
end
- attr_accessor :time, :remote, :file, :line, :version, :source
+ attr_accessor :time, :remote, :file, :line, :source
attr_reader :level, :message
def initialize(args)
@@ -203,7 +204,7 @@ class Puppet::Util::Log
tags.each { |t| self.tag(t) }
end
- [:file, :line, :version].each do |attr|
+ [:file, :line].each do |attr|
next unless value = args[attr]
send(attr.to_s + "=", value)
end
@@ -234,7 +235,7 @@ class Puppet::Util::Log
descriptors[:tags].each { |t| tag(t) }
- [:file, :line, :version].each do |param|
+ [:file, :line].each do |param|
next unless descriptors[param]
send(param.to_s + "=", descriptors[param])
end
diff --git a/lib/puppet/util/log_paths.rb b/lib/puppet/util/log_paths.rb
index f59197ed1..2fefd4505 100644
--- a/lib/puppet/util/log_paths.rb
+++ b/lib/puppet/util/log_paths.rb
@@ -15,7 +15,7 @@ module Puppet::Util::LogPaths
descriptors[:tags] = tags
- [:path, :file, :line, :version].each do |param|
+ [:path, :file, :line].each do |param|
next unless value = send(param)
descriptors[param] = value
end
diff --git a/lib/puppet/util/logging.rb b/lib/puppet/util/logging.rb
index f20444a3b..bc52b17f0 100644
--- a/lib/puppet/util/logging.rb
+++ b/lib/puppet/util/logging.rb
@@ -26,7 +26,7 @@ module Puppet::Util::Logging
end
def log_metadata
- [:file, :line, :version, :tags].inject({}) do |result, attr|
+ [:file, :line, :tags].inject({}) do |result, attr|
result[attr] = send(attr) if respond_to?(attr)
result
end
diff --git a/lib/puppet/util/metric.rb b/lib/puppet/util/metric.rb
index 7fdc6951f..835e1d610 100644
--- a/lib/puppet/util/metric.rb
+++ b/lib/puppet/util/metric.rb
@@ -132,6 +132,7 @@ class Puppet::Util::Metric
end
def newvalue(name,value,label = nil)
+ raise ArgumentError.new("metric name #{name.inspect} is not a string") unless name.is_a? String
label ||= self.class.labelize(name)
@values.push [name,label,value]
end
diff --git a/lib/puppet/util/reference.rb b/lib/puppet/util/reference.rb
index 95efeb1c1..a4921ed2a 100644
--- a/lib/puppet/util/reference.rb
+++ b/lib/puppet/util/reference.rb
@@ -120,16 +120,11 @@ class Puppet::Util::Reference
str += "\n\n"
end
- # Remove all trac links.
- def strip_trac(text)
- text.gsub(/`\w+\s+([^`]+)`:trac:/) { |m| $1 }
- end
-
def text
puts output
end
- def to_rest(withcontents = true)
+ def to_markdown(withcontents = true)
# First the header
text = h(@title, 1)
text += "\n\n**This page is autogenerated; any changes will get overwritten** *(last generated on #{Time.now.to_s})*\n\n"
@@ -142,8 +137,4 @@ class Puppet::Util::Reference
text
end
-
- def to_text(withcontents = true)
- strip_trac(to_rest(withcontents))
- end
end
diff --git a/lib/puppet/util/settings.rb b/lib/puppet/util/settings.rb
index ca4ecda35..626ed20eb 100644
--- a/lib/puppet/util/settings.rb
+++ b/lib/puppet/util/settings.rb
@@ -593,7 +593,7 @@ if @config.include?(:run_mode)
end
eachsection do |section|
persection(section) do |obj|
- str += obj.to_config + "\n" unless ReadOnly.include? obj.name
+ str += obj.to_config + "\n" unless ReadOnly.include? obj.name or obj.name == :genconfig
end
end
diff --git a/man/man8/filebucket.8 b/man/man8/filebucket.8
index 60a6eb28e..59afc2ed3 100644
--- a/man/man8/filebucket.8
+++ b/man/man8/filebucket.8
@@ -102,4 +102,4 @@ server: The server to send the file to, instead of locally\.
verbose: Print extra information\.
.
.P
-version: Print version information\.puppet filebucket \-b /tmp/filebucket /my/fileLuke KaniesCopyright (c) 2005 Reductive Labs, LLC Licensed under the GNU Public License
+version: Print version information\.puppet filebucket \-b /tmp/filebucket /my/fileLuke KaniesCopyright (c) 2005 Puppet Labs, LLC Licensed under the GNU Public License
diff --git a/man/man8/pi.8 b/man/man8/pi.8
index e8f5ab531..b70a128e7 100644
--- a/man/man8/pi.8
+++ b/man/man8/pi.8
@@ -14,4 +14,4 @@ list: List all types
meta: List all metaparameters
.
.P
-short: List only parameters without detailpuppet describe \-\-list puppet describe file \-\-providers puppet describe user \-s \-mDavid LutterkortCopyright (c) 2005 Reductive Labs, LLC Licensed under the GNU Public License
+short: List only parameters without detailpuppet describe \-\-list puppet describe file \-\-providers puppet describe user \-s \-mDavid LutterkortCopyright (c) 2005 Puppet Labs, LLC Licensed under the GNU Public License
diff --git a/man/man8/puppetca.8 b/man/man8/puppetca.8
index 17369aa20..62fa7a5bf 100644
--- a/man/man8/puppetca.8
+++ b/man/man8/puppetca.8
@@ -166,4 +166,4 @@ verify: Verify the named certificate against the local CA
.fi
.
.IP "" 0
-$ puppet cert \-l culain\.madstop\.com $ puppet cert \-s culain\.madstop\.comLuke KaniesCopyright (c) 2005 Reductive Labs, LLC Licensed under the GNU Public License
+$ puppet cert \-l culain\.madstop\.com $ puppet cert \-s culain\.madstop\.comLuke KaniesCopyright (c) 2005 Puppet Labs, LLC Licensed under the GNU Public License
diff --git a/man/man8/puppetd.8 b/man/man8/puppetd.8
index 32aede791..861137553 100644
--- a/man/man8/puppetd.8
+++ b/man/man8/puppetd.8
@@ -280,4 +280,4 @@ waitforcert: This option only matters for daemons that do not yet
.fi
.
.IP "" 0
-puppet agent \-\-server puppet\.domain\.comLuke KaniesCopyright (c) 2005, 2006 Reductive Labs, LLC Licensed under the GNU Public License
+puppet agent \-\-server puppet\.domain\.comLuke KaniesCopyright (c) 2005, 2006 Puppet Labs, LLC Licensed under the GNU Public License
diff --git a/man/man8/puppetdoc.8 b/man/man8/puppetdoc.8
index 5fc01c2ba..47df0e764 100644
--- a/man/man8/puppetdoc.8
+++ b/man/man8/puppetdoc.8
@@ -2,7 +2,7 @@
.\" http://github.com/rtomayko/ronn/tree/0.7.3
.
.TH "PUPPETDOC" "8" "August 2010" "" ""
-Generate a reference for all Puppet types\. Largely meant for internal Reductive Labs use\.puppet doc [\-a|\-\-all] [\-h|\-\-help] [\-o|\-\-outputdir \fIrdoc outputdir\fR] [\-m|\-\-mode \fItext|pdf|rdoc\fR]
+Generate a reference for all Puppet types\. Largely meant for internal Puppet Labs use\.puppet doc [\-a|\-\-all] [\-h|\-\-help] [\-o|\-\-outputdir \fIrdoc outputdir\fR] [\-m|\-\-mode \fItext|pdf|rdoc\fR]
.
.IP "" 4
.
@@ -105,4 +105,4 @@ $ puppet doc /etc/puppet/manifests/site\.pp
or
.
.P
-$ puppet doc \-m pdf \-r configurationLuke KaniesCopyright (c) 2005\-2007 Reductive Labs, LLC Licensed under the GNU Public License
+$ puppet doc \-m pdf \-r configurationLuke KaniesCopyright (c) 2005\-2007 Puppet Labs, LLC Licensed under the GNU Public License
diff --git a/man/man8/puppetmasterd.8 b/man/man8/puppetmasterd.8
index 3ae567a69..dde93a3d6 100644
--- a/man/man8/puppetmasterd.8
+++ b/man/man8/puppetmasterd.8
@@ -49,4 +49,4 @@ logdest: Where to send messages\. Choose between syslog, the
verbose: Enable verbosity\.
.
.P
-version: Print the puppet version number and exit\.puppet masterLuke KaniesCopyright (c) 2005 Reductive Labs, LLC Licensed under the GNU Public License
+version: Print the puppet version number and exit\.puppet masterLuke KaniesCopyright (c) 2005 Puppet Labs, LLC Licensed under the GNU Public License
diff --git a/man/man8/puppetqd.8 b/man/man8/puppetqd.8
index 137a13af3..f630c74a5 100644
--- a/man/man8/puppetqd.8
+++ b/man/man8/puppetqd.8
@@ -17,4 +17,4 @@ help: Print this help message
verbose: Turn on verbose reporting\.
.
.P
-version: Print the puppet version number and exit\.puppet queueLuke KaniesCopyright (c) 2009 Reductive Labs, LLC Licensed under the GNU Public License
+version: Print the puppet version number and exit\.puppet queueLuke KaniesCopyright (c) 2009 Puppet Labs, LLC Licensed under the GNU Public License
diff --git a/man/man8/puppetrun.8 b/man/man8/puppetrun.8
index b3c27c3a7..09fa31b15 100644
--- a/man/man8/puppetrun.8
+++ b/man/man8/puppetrun.8
@@ -170,4 +170,4 @@ test: Print the hosts you would connect to but do not
ping::
.
.P
-Do a ICMP echo against the target host\. Skip hosts that don\'t respond to ping\.sudo puppet kick \-p 10 \-t remotefile \-t webserver host1 host2Luke KaniesCopyright (c) 2005 Reductive Labs, LLC Licensed under the GNU Public License
+Do a ICMP echo against the target host\. Skip hosts that don\'t respond to ping\.sudo puppet kick \-p 10 \-t remotefile \-t webserver host1 host2Luke KaniesCopyright (c) 2005 Puppet Labs, LLC Licensed under the GNU Public License
diff --git a/man/man8/ralsh.8 b/man/man8/ralsh.8
index e387e2324..bdc81e90a 100644
--- a/man/man8/ralsh.8
+++ b/man/man8/ralsh.8
@@ -82,4 +82,4 @@ Print extra information\.This example uses \fBpuppet resource\fR to return Puppe
.fi
.
.IP "" 0
-Luke KaniesCopyright (c) 2005\-2007 Reductive Labs, LLC Licensed under the GNU Public License
+Luke KaniesCopyright (c) 2005\-2007 Puppet Labs, LLC Licensed under the GNU Public License
diff --git a/spec/Rakefile b/spec/Rakefile
deleted file mode 100644
index 28e1d8e79..000000000
--- a/spec/Rakefile
+++ /dev/null
@@ -1,91 +0,0 @@
-require File.join(File.dirname(__FILE__), "spec_helper.rb")
-require 'rake'
-require 'spec/rake/spectask'
-
-basedir = File.dirname(__FILE__)
-puppetlibdir = File.join(basedir, "../lib")
-puppettestlibdir = File.join(basedir, "../test/lib")
-speclibdir = File.join(basedir, "lib")
-
-require 'find'
-
-include Find
-include FileTest
-
-$exclusions = %W(lib)
-
-filemap = Hash.new { |hash, key| hash[key] = [] }
-
-allfiles = []
-
-# First collect the entire file list.
-find(".") do |f|
- # Get rid of the leading ./
- f = f.sub(/^\.\//, '')
-
- file = File.basename(f)
- dir = File.dirname(f)
-
- # Prune . directories and excluded dirs
- if (file =~ /^\./ and f != ".") or $exclusions.include?(File.basename(file))
- prune
- next
- end
- next if f == "."
- next if dir == "."
-
- # If we're a ruby script, then add it to the list of files for that dir
- if file =~ /\.rb$/
- allfiles << f
- # Add it to all of the parent dirs, not just our own
- parts = File.split(dir)
- if parts[0] == "."
- parts.shift
- end
- parts.each_with_index { |part, i|
- path = File.join(parts[0..i])
- filemap[path] << f
- }
- end
-end
-
-
-libs = [puppetlibdir, puppettestlibdir, speclibdir]
-desc "Run all specs"
-Spec::Rake::SpecTask.new('all') do |t|
- t.spec_files = FileList['integration/**/*.rb', 'unit/**/*.rb']
- t.libs = libs
- t.spec_opts = ['--options', 'spec.opts']
-end
-
-task :default => [:all]
-
-# Now create a task for every directory
-filemap.each do |dir, files|
- ns = dir.gsub "/", ":"
-
- # First create a separate task for each file in the namespace.
- namespace ns do
- files.each do |file|
- Spec::Rake::SpecTask.new(File.basename(file, '.rb').to_sym) do |t|
- t.spec_files = [ file ]
- t.libs = libs
- t.spec_opts = ['--options', 'spec.opts']
- end
- end
- end
-
- # Then create a task that matches the directory itself.
- Spec::Rake::SpecTask.new(dir) do |t|
- if ENV["TESTFILES"]
- t.spec_files = ENV["TESTFILES"].split(/\s+/)
- else
- t.spec_files = files.sort
- end
- t.libs = libs
- t.spec_opts = ['--options', 'spec.opts']
- end
-
- # And alias it with a slash on the end
- task(dir + "/" => dir)
-end
diff --git a/spec/fixtures/unit/provider/mount/mount-output.aix.txt b/spec/fixtures/unit/provider/mount/mount-output.aix.txt
new file mode 100644
index 000000000..54edb9c1c
--- /dev/null
+++ b/spec/fixtures/unit/provider/mount/mount-output.aix.txt
@@ -0,0 +1,7 @@
+/dev/hd4 / jfs2 Nov 11 12:11 rw,log=/dev/hd8
+/dev/hd2 /usr jfs2 Nov 11 12:11 rw,log=/dev/hd8
+/dev/hd9var /var jfs2 Nov 11 12:11 rw,log=/dev/hd8
+/dev/hd3 /tmp jfs2 Nov 11 12:11 rw,log=/dev/hd8
+/dev/hd1 /home jfs2 Nov 11 12:11 rw,log=/dev/hd8
+/proc /proc procfs Nov 11 12:11 rw
+/dev/hd10opt /opt jfs2 Nov 11 12:11 rw,log=/dev/hd8
diff --git a/spec/integration/application/apply_spec.rb b/spec/integration/application/apply_spec.rb
index 840917eff..876f55568 100755
--- a/spec/integration/application/apply_spec.rb
+++ b/spec/integration/application/apply_spec.rb
@@ -1,6 +1,6 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
require 'puppet_spec/files'
@@ -9,8 +9,7 @@ require 'puppet/application/apply'
describe "apply" do
include PuppetSpec::Files
- describe "when applying provided catalogs" do
- confine "PSON library is missing; cannot test applying catalogs" => Puppet.features.pson?
+ describe "when applying provided catalogs", :if => Puppet.features.pson? do
it "should be able to apply catalogs provided in a file in pson" do
file_to_create = tmpfile("pson_catalog")
catalog = Puppet::Resource::Catalog.new
diff --git a/spec/integration/application/doc_spec.rb b/spec/integration/application/doc_spec.rb
index eaf5442a0..f0b9d7db0 100644
--- a/spec/integration/application/doc_spec.rb
+++ b/spec/integration/application/doc_spec.rb
@@ -1,6 +1,6 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
require 'puppet_spec/files'
describe Puppet::Application::Doc do
diff --git a/spec/integration/configurer_spec.rb b/spec/integration/configurer_spec.rb
index cb7d3d779..825b6322e 100755
--- a/spec/integration/configurer_spec.rb
+++ b/spec/integration/configurer_spec.rb
@@ -1,6 +1,6 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
require 'puppet/configurer'
@@ -34,7 +34,7 @@ describe Puppet::Configurer do
it "should send a transaction report with valid data" do
@configurer.stubs(:save_last_run_summary)
- Puppet::Transaction::Report.indirection.expects(:save).with do |x, report|
+ Puppet::Transaction::Report.indirection.expects(:save).with do |report, x|
report.time.class == Time and report.logs.length > 0
end
@@ -44,8 +44,8 @@ describe Puppet::Configurer do
end
it "should save a correct last run summary" do
- report = Puppet::Transaction::Report.new
- report.stubs(:save)
+ report = Puppet::Transaction::Report.new("apply")
+ Puppet::Transaction::Report.indirection.stubs(:save)
Puppet[:lastrunfile] = tmpfile("lastrunfile")
Puppet[:report] = true
diff --git a/spec/integration/defaults_spec.rb b/spec/integration/defaults_spec.rb
index 2f30014e8..ee0a43d07 100755
--- a/spec/integration/defaults_spec.rb
+++ b/spec/integration/defaults_spec.rb
@@ -1,6 +1,6 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
require 'puppet/defaults'
require 'puppet/rails'
@@ -116,31 +116,31 @@ describe "Puppet defaults" do
describe "when enabling storeconfigs" do
before do
- Puppet::Resource::Catalog.stubs(:cache_class=)
- Puppet::Node::Facts.stubs(:cache_class=)
- Puppet::Node.stubs(:cache_class=)
+ Puppet::Resource::Catalog.indirection.stubs(:cache_class=)
+ Puppet::Node::Facts.indirection.stubs(:cache_class=)
+ Puppet::Node.indirection.stubs(:cache_class=)
Puppet.features.stubs(:rails?).returns true
end
it "should set the Catalog cache class to :active_record" do
- Puppet::Resource::Catalog.expects(:cache_class=).with(:active_record)
+ Puppet::Resource::Catalog.indirection.expects(:cache_class=).with(:active_record)
Puppet.settings[:storeconfigs] = true
end
it "should not set the Catalog cache class to :active_record if asynchronous storeconfigs is enabled" do
- Puppet::Resource::Catalog.expects(:cache_class=).with(:active_record).never
+ Puppet::Resource::Catalog.indirection.expects(:cache_class=).with(:active_record).never
Puppet.settings.expects(:value).with(:async_storeconfigs).returns true
Puppet.settings[:storeconfigs] = true
end
it "should set the Facts cache class to :active_record" do
- Puppet::Node::Facts.expects(:cache_class=).with(:active_record)
+ Puppet::Node::Facts.indirection.expects(:cache_class=).with(:active_record)
Puppet.settings[:storeconfigs] = true
end
it "should set the Node cache class to :active_record" do
- Puppet::Node.expects(:cache_class=).with(:active_record)
+ Puppet::Node.indirection.expects(:cache_class=).with(:active_record)
Puppet.settings[:storeconfigs] = true
end
@@ -152,9 +152,9 @@ describe "Puppet defaults" do
describe "when enabling asynchronous storeconfigs" do
before do
- Puppet::Resource::Catalog.stubs(:cache_class=)
- Puppet::Node::Facts.stubs(:cache_class=)
- Puppet::Node.stubs(:cache_class=)
+ Puppet::Resource::Catalog.indirection.stubs(:cache_class=)
+ Puppet::Node::Facts.indirection.stubs(:cache_class=)
+ Puppet::Node.indirection.stubs(:cache_class=)
Puppet.features.stubs(:rails?).returns true
end
@@ -164,26 +164,26 @@ describe "Puppet defaults" do
end
it "should set the Catalog cache class to :queue" do
- Puppet::Resource::Catalog.expects(:cache_class=).with(:queue)
+ Puppet::Resource::Catalog.indirection.expects(:cache_class=).with(:queue)
Puppet.settings[:async_storeconfigs] = true
end
it "should set the Facts cache class to :active_record" do
- Puppet::Node::Facts.expects(:cache_class=).with(:active_record)
+ Puppet::Node::Facts.indirection.expects(:cache_class=).with(:active_record)
Puppet.settings[:storeconfigs] = true
end
it "should set the Node cache class to :active_record" do
- Puppet::Node.expects(:cache_class=).with(:active_record)
+ Puppet::Node.indirection.expects(:cache_class=).with(:active_record)
Puppet.settings[:storeconfigs] = true
end
end
describe "when enabling thin storeconfigs" do
before do
- Puppet::Resource::Catalog.stubs(:cache_class=)
- Puppet::Node::Facts.stubs(:cache_class=)
- Puppet::Node.stubs(:cache_class=)
+ Puppet::Resource::Catalog.indirection.stubs(:cache_class=)
+ Puppet::Node::Facts.indirection.stubs(:cache_class=)
+ Puppet::Node.indirection.stubs(:cache_class=)
Puppet.features.stubs(:rails?).returns true
end
diff --git a/spec/integration/file_serving/content_spec.rb b/spec/integration/file_serving/content_spec.rb
index 1443b9592..207720d56 100755
--- a/spec/integration/file_serving/content_spec.rb
+++ b/spec/integration/file_serving/content_spec.rb
@@ -3,7 +3,7 @@
# Created by Luke Kanies on 2007-10-18.
# Copyright (c) 2007. All rights reserved.
-require File.dirname(__FILE__) + '/../../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
require 'puppet/file_serving/content'
require 'shared_behaviours/file_serving'
diff --git a/spec/integration/file_serving/fileset_spec.rb b/spec/integration/file_serving/fileset_spec.rb
index e5afe8f70..f607aa203 100755
--- a/spec/integration/file_serving/fileset_spec.rb
+++ b/spec/integration/file_serving/fileset_spec.rb
@@ -1,6 +1,6 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
require 'puppet/file_serving/fileset'
diff --git a/spec/integration/file_serving/metadata_spec.rb b/spec/integration/file_serving/metadata_spec.rb
index 1e67309e5..627369ff8 100755
--- a/spec/integration/file_serving/metadata_spec.rb
+++ b/spec/integration/file_serving/metadata_spec.rb
@@ -3,7 +3,7 @@
# Created by Luke Kanies on 2007-10-18.
# Copyright (c) 2007. All rights reserved.
-require File.dirname(__FILE__) + '/../../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
require 'puppet/file_serving/metadata'
require 'shared_behaviours/file_serving'
diff --git a/spec/integration/file_serving/terminus_helper_spec.rb b/spec/integration/file_serving/terminus_helper_spec.rb
index 5fd47c954..615b24c87 100755
--- a/spec/integration/file_serving/terminus_helper_spec.rb
+++ b/spec/integration/file_serving/terminus_helper_spec.rb
@@ -1,6 +1,6 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
require 'puppet/file_serving/terminus_helper'
diff --git a/spec/integration/indirector/catalog/compiler_spec.rb b/spec/integration/indirector/catalog/compiler_spec.rb
index ede502e3c..dcb7eb425 100755
--- a/spec/integration/indirector/catalog/compiler_spec.rb
+++ b/spec/integration/indirector/catalog/compiler_spec.rb
@@ -42,7 +42,7 @@ describe Puppet::Resource::Catalog::Compiler do
Puppet::Resource::Catalog.indirection.terminus.stubs(:node_from_request)
Puppet::Resource::Catalog.indirection.terminus.stubs(:compile).returns(@catalog)
- Puppet::Resource::Catalog.find(request).resource_refs.should == [ @two.ref ]
+ Puppet::Resource::Catalog.indirection.find(request).resource_refs.should == [ @two.ref ]
end
it "should not filter out exported resources when finding a catalog" do
@@ -52,7 +52,7 @@ describe Puppet::Resource::Catalog::Compiler do
Puppet::Resource::Catalog.indirection.terminus.stubs(:node_from_request)
Puppet::Resource::Catalog.indirection.terminus.stubs(:compile).returns(@catalog)
- Puppet::Resource::Catalog.find(request).resource_refs.sort.should == [ @one.ref, @two.ref ]
+ Puppet::Resource::Catalog.indirection.find(request).resource_refs.sort.should == [ @one.ref, @two.ref ]
end
it "should filter out virtual exported resources when finding a catalog" do
@@ -63,6 +63,6 @@ describe Puppet::Resource::Catalog::Compiler do
Puppet::Resource::Catalog.indirection.terminus.stubs(:node_from_request)
Puppet::Resource::Catalog.indirection.terminus.stubs(:compile).returns(@catalog)
- Puppet::Resource::Catalog.find(request).resource_refs.should == [ @two.ref ]
+ Puppet::Resource::Catalog.indirection.find(request).resource_refs.should == [ @two.ref ]
end
end
diff --git a/spec/integration/indirector/catalog/queue_spec.rb b/spec/integration/indirector/catalog/queue_spec.rb
index 0f8bd41fb..4581e3062 100755
--- a/spec/integration/indirector/catalog/queue_spec.rb
+++ b/spec/integration/indirector/catalog/queue_spec.rb
@@ -4,10 +4,7 @@ Dir.chdir(File.dirname(__FILE__)) { (s = lambda { |f| File.exist?(f) ? require(f
require 'puppet/resource/catalog'
-
-describe "Puppet::Resource::Catalog::Queue" do
- confine "Missing pson support; cannot test queue" => Puppet.features.pson?
-
+describe "Puppet::Resource::Catalog::Queue", :if => Puppet.features.pson? do
before do
Puppet::Resource::Catalog.indirection.terminus(:queue)
@catalog = Puppet::Resource::Catalog.new
diff --git a/spec/integration/indirector/direct_file_server_spec.rb b/spec/integration/indirector/direct_file_server_spec.rb
index 24a55a34f..627733b09 100755
--- a/spec/integration/indirector/direct_file_server_spec.rb
+++ b/spec/integration/indirector/direct_file_server_spec.rb
@@ -3,7 +3,7 @@
# Created by Luke Kanies on 2007-10-19.
# Copyright (c) 2007. All rights reserved.
-require File.dirname(__FILE__) + '/../../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
require 'puppet/indirector/file_content/file'
diff --git a/spec/integration/indirector/file_content/file_server_spec.rb b/spec/integration/indirector/file_content/file_server_spec.rb
index 5de7f1de0..9268ef067 100755
--- a/spec/integration/indirector/file_content/file_server_spec.rb
+++ b/spec/integration/indirector/file_content/file_server_spec.rb
@@ -3,7 +3,7 @@
# Created by Luke Kanies on 2007-10-18.
# Copyright (c) 2007. All rights reserved.
-require File.dirname(__FILE__) + '/../../../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../../../spec_helper')
require 'puppet/indirector/file_content/file_server'
require 'shared_behaviours/file_server_terminus'
@@ -34,7 +34,7 @@ describe Puppet::Indirector::FileContent::FileServer, " when finding files" do
env = Puppet::Node::Environment.new("foo")
env.stubs(:modulepath).returns [path]
- result = Puppet::FileServing::Content.search("plugins", :environment => "foo", :recurse => true)
+ result = Puppet::FileServing::Content.indirection.search("plugins", :environment => "foo", :recurse => true)
result.should_not be_nil
result.length.should == 2
@@ -54,7 +54,7 @@ describe Puppet::Indirector::FileContent::FileServer, " when finding files" do
Puppet.settings[:modulepath] = path
- result = Puppet::FileServing::Content.find("modules/mymod/myfile")
+ result = Puppet::FileServing::Content.indirection.find("modules/mymod/myfile")
result.should_not be_nil
result.should be_instance_of(Puppet::FileServing::Content)
@@ -85,7 +85,7 @@ describe Puppet::Indirector::FileContent::FileServer, " when finding files" do
path = File.join(@path, "myfile")
- result = Puppet::FileServing::Content.find("one/myfile", :environment => "foo", :node => "mynode")
+ result = Puppet::FileServing::Content.indirection.find("one/myfile", :environment => "foo", :node => "mynode")
result.should_not be_nil
result.should be_instance_of(Puppet::FileServing::Content)
diff --git a/spec/integration/indirector/file_metadata/file_server_spec.rb b/spec/integration/indirector/file_metadata/file_server_spec.rb
index d60012192..069e7af08 100755
--- a/spec/integration/indirector/file_metadata/file_server_spec.rb
+++ b/spec/integration/indirector/file_metadata/file_server_spec.rb
@@ -3,7 +3,7 @@
# Created by Luke Kanies on 2007-10-18.
# Copyright (c) 2007. All rights reserved.
-require File.dirname(__FILE__) + '/../../../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../../../spec_helper')
require 'puppet/indirector/file_metadata/file_server'
require 'shared_behaviours/file_server_terminus'
diff --git a/spec/integration/indirector/node/ldap_spec.rb b/spec/integration/indirector/node/ldap_spec.rb
index e4c0867ad..3da6d0e73 100755
--- a/spec/integration/indirector/node/ldap_spec.rb
+++ b/spec/integration/indirector/node/ldap_spec.rb
@@ -1,6 +1,6 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../../../spec_helper')
require 'puppet/indirector/node/ldap'
@@ -10,6 +10,6 @@ describe Puppet::Node::Ldap do
Puppet::Node.indirection.stubs(:terminus).returns ldap
ldap.expects(:ldapsearch).with("(&(objectclass=puppetClient)(puppetclass=foo))")
- Puppet::Node.search "eh", :class => "foo"
+ Puppet::Node.indirection.search "eh", :class => "foo"
end
end
diff --git a/spec/integration/network/client_spec.rb b/spec/integration/network/client_spec.rb
index 4bf3ad82b..07a491b1b 100755
--- a/spec/integration/network/client_spec.rb
+++ b/spec/integration/network/client_spec.rb
@@ -1,6 +1,6 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
require 'puppet/network/client'
diff --git a/spec/integration/network/formats_spec.rb b/spec/integration/network/formats_spec.rb
index e6cf28abb..8eb963e19 100755
--- a/spec/integration/network/formats_spec.rb
+++ b/spec/integration/network/formats_spec.rb
@@ -1,6 +1,6 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
require 'puppet/network/formats'
@@ -46,8 +46,7 @@ describe Puppet::Network::FormatHandler.format(:s) do
end
describe Puppet::Network::FormatHandler.format(:pson) do
- describe "when pson is absent" do
- confine "'pson' library is present" => (! Puppet.features.pson?)
+ describe "when pson is absent", :if => (! Puppet.features.pson?) do
before do
@pson = Puppet::Network::FormatHandler.format(:pson)
@@ -58,9 +57,7 @@ describe Puppet::Network::FormatHandler.format(:pson) do
end
end
- describe "when pson is available" do
- confine "Missing 'pson' library" => Puppet.features.pson?
-
+ describe "when pson is available", :if => Puppet.features.pson? do
before do
@pson = Puppet::Network::FormatHandler.format(:pson)
end
diff --git a/spec/integration/network/handler_spec.rb b/spec/integration/network/handler_spec.rb
index 021f1cedb..a3095c125 100755
--- a/spec/integration/network/handler_spec.rb
+++ b/spec/integration/network/handler_spec.rb
@@ -1,6 +1,6 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
require 'puppet/network/client'
diff --git a/spec/integration/network/server/mongrel_spec.rb b/spec/integration/network/server/mongrel_spec.rb
index cc90773e6..aeaaad6ae 100755
--- a/spec/integration/network/server/mongrel_spec.rb
+++ b/spec/integration/network/server/mongrel_spec.rb
@@ -1,12 +1,11 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../../../spec_helper')
require 'puppet/network/server'
require 'socket'
describe Puppet::Network::Server do
- describe "when using mongrel" do
- confine "Mongrel is not available" => Puppet.features.mongrel?
+ describe "when using mongrel", :if => Puppet.features.mongrel? do
before :each do
Puppet[:servertype] = 'mongrel'
diff --git a/spec/integration/network/server/webrick_spec.rb b/spec/integration/network/server/webrick_spec.rb
index 2b14dfb37..0e1bb4580 100755
--- a/spec/integration/network/server/webrick_spec.rb
+++ b/spec/integration/network/server/webrick_spec.rb
@@ -1,6 +1,6 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../../../spec_helper')
require 'puppet/network/server'
require 'puppet/ssl/certificate_authority'
require 'socket'
@@ -23,7 +23,7 @@ describe Puppet::Network::Server do
Puppet::SSL::Host.ca_location = :local
ca = Puppet::SSL::CertificateAuthority.new
- ca.generate(Puppet[:certname]) unless Puppet::SSL::Certificate.find(Puppet[:certname])
+ ca.generate(Puppet[:certname]) unless Puppet::SSL::Certificate.indirection.find(Puppet[:certname])
end
after do
@@ -32,6 +32,7 @@ describe Puppet::Network::Server do
system("rm -rf #{@dir}")
+ Puppet::SSL::Host.ca_location = :none
Puppet::Util::Cacher.expire
end
diff --git a/spec/integration/node/environment_spec.rb b/spec/integration/node/environment_spec.rb
index 8c5153749..abf0108fa 100755
--- a/spec/integration/node/environment_spec.rb
+++ b/spec/integration/node/environment_spec.rb
@@ -1,6 +1,6 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
require 'puppet_spec/files'
diff --git a/spec/integration/node/facts_spec.rb b/spec/integration/node/facts_spec.rb
index 4cc2f4c1f..ee956a6b1 100755
--- a/spec/integration/node/facts_spec.rb
+++ b/spec/integration/node/facts_spec.rb
@@ -3,7 +3,7 @@
# Created by Luke Kanies on 2008-4-8.
# Copyright (c) 2008. All rights reserved.
-require File.dirname(__FILE__) + '/../../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
describe Puppet::Node::Facts do
describe "when using the indirector" do
@@ -16,10 +16,10 @@ describe Puppet::Node::Facts do
terminus = Puppet::Node::Facts.indirection.terminus(:yaml)
terminus.stubs :save
- Puppet::Node.expects(:expire).with("me")
+ Puppet::Node.indirection.expects(:expire).with("me")
facts = Puppet::Node::Facts.new("me")
- facts.save
+ Puppet::Node::Facts.indirection.save(facts)
end
it "should be able to delegate to the :yaml terminus" do
@@ -31,7 +31,7 @@ describe Puppet::Node::Facts do
terminus.expects(:path).with("me").returns "/my/yaml/file"
FileTest.expects(:exist?).with("/my/yaml/file").returns false
- Puppet::Node::Facts.find("me").should be_nil
+ Puppet::Node::Facts.indirection.find("me").should be_nil
end
it "should be able to delegate to the :facter terminus" do
@@ -41,7 +41,7 @@ describe Puppet::Node::Facts do
facts = Puppet::Node::Facts.new("me")
Puppet::Node::Facts.expects(:new).with("me", "facter_hash").returns facts
- Puppet::Node::Facts.find("me").should equal(facts)
+ Puppet::Node::Facts.indirection.find("me").should equal(facts)
end
end
end
diff --git a/spec/integration/node_spec.rb b/spec/integration/node_spec.rb
index c635e7f32..4c8a2c2b1 100755
--- a/spec/integration/node_spec.rb
+++ b/spec/integration/node_spec.rb
@@ -3,7 +3,7 @@
# Created by Luke Kanies on 2007-9-23.
# Copyright (c) 2007. All rights reserved.
-require File.dirname(__FILE__) + '/../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
require 'puppet/node'
@@ -24,7 +24,7 @@ describe Puppet::Node do
terminus.expects(:translate).with(@name, "myresults").returns "translated_results"
terminus.expects(:create_node).with(@name, "translated_results").returns @node
- Puppet::Node.find(@name).should equal(@node)
+ Puppet::Node.indirection.find(@name).should equal(@node)
end
it "should be able to use the yaml terminus" do
@@ -36,7 +36,7 @@ describe Puppet::Node do
terminus.expects(:path).with(@name).returns "/my/yaml/file"
FileTest.expects(:exist?).with("/my/yaml/file").returns false
- Puppet::Node.find(@name).should be_nil
+ Puppet::Node.indirection.find(@name).should be_nil
end
it "should have an ldap terminus" do
@@ -51,7 +51,7 @@ describe Puppet::Node do
Puppet::Node.expects(:new).with(@name).returns @node
- Puppet::Node.find(@name).should equal(@node)
+ Puppet::Node.indirection.find(@name).should equal(@node)
end
describe "and using the memory terminus" do
@@ -64,29 +64,29 @@ describe Puppet::Node do
end
it "should find no nodes by default" do
- Puppet::Node.find(@name).should be_nil
+ Puppet::Node.indirection.find(@name).should be_nil
end
it "should be able to find nodes that were previously saved" do
- @node.save
- Puppet::Node.find(@name).should equal(@node)
+ Puppet::Node.indirection.save(@node)
+ Puppet::Node.indirection.find(@name).should equal(@node)
end
it "should replace existing saved nodes when a new node with the same name is saved" do
- @node.save
+ Puppet::Node.indirection.save(@node)
two = Puppet::Node.new(@name)
- two.save
- Puppet::Node.find(@name).should equal(two)
+ Puppet::Node.indirection.save(two)
+ Puppet::Node.indirection.find(@name).should equal(two)
end
it "should be able to remove previously saved nodes" do
- @node.save
- Puppet::Node.destroy(@node.name)
- Puppet::Node.find(@name).should be_nil
+ Puppet::Node.indirection.save(@node)
+ Puppet::Node.indirection.destroy(@node.name)
+ Puppet::Node.indirection.find(@name).should be_nil
end
it "should fail when asked to destroy a node that does not exist" do
- proc { Puppet::Node.destroy(@node) }.should raise_error(ArgumentError)
+ proc { Puppet::Node.indirection.destroy(@node) }.should raise_error(ArgumentError)
end
end
end
diff --git a/spec/integration/parser/collector_spec.rb b/spec/integration/parser/collector_spec.rb
index b1cfc51c7..c72e605cf 100755
--- a/spec/integration/parser/collector_spec.rb
+++ b/spec/integration/parser/collector_spec.rb
@@ -1,6 +1,6 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
require 'puppet/parser/collector'
diff --git a/spec/integration/parser/compiler_spec.rb b/spec/integration/parser/compiler_spec.rb
index f731692b3..097e8b03a 100755
--- a/spec/integration/parser/compiler_spec.rb
+++ b/spec/integration/parser/compiler_spec.rb
@@ -1,6 +1,6 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
describe Puppet::Parser::Compiler do
before :each do
diff --git a/spec/integration/parser/functions/require_spec.rb b/spec/integration/parser/functions/require_spec.rb
index 8b3beefe9..737efcce8 100755
--- a/spec/integration/parser/functions/require_spec.rb
+++ b/spec/integration/parser/functions/require_spec.rb
@@ -1,6 +1,6 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../../../spec_helper')
describe "The require function" do
before :each do
diff --git a/spec/integration/parser/functions_spec.rb b/spec/integration/parser/functions_spec.rb
index cbfb4ac88..504d1fe5e 100644
--- a/spec/integration/parser/functions_spec.rb
+++ b/spec/integration/parser/functions_spec.rb
@@ -1,6 +1,6 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
describe Puppet::Parser::Functions do
before :each do
diff --git a/spec/integration/parser/parser_spec.rb b/spec/integration/parser/parser_spec.rb
index 0d9aa51e1..ec084b441 100755
--- a/spec/integration/parser/parser_spec.rb
+++ b/spec/integration/parser/parser_spec.rb
@@ -1,6 +1,6 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
describe Puppet::Parser::Parser do
module ParseMatcher
diff --git a/spec/integration/parser/ruby_manifest_spec.rb b/spec/integration/parser/ruby_manifest_spec.rb
index de6f4628c..110898206 100644
--- a/spec/integration/parser/ruby_manifest_spec.rb
+++ b/spec/integration/parser/ruby_manifest_spec.rb
@@ -1,6 +1,6 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
require 'tempfile'
require 'puppet_spec/files'
diff --git a/spec/integration/provider/mailalias/aliases_spec.rb b/spec/integration/provider/mailalias/aliases_spec.rb
index 0511205f2..bce9374c1 100755
--- a/spec/integration/provider/mailalias/aliases_spec.rb
+++ b/spec/integration/provider/mailalias/aliases_spec.rb
@@ -1,6 +1,6 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../../../spec_helper')
require 'puppettest/support/utils'
require 'puppettest/fileparsing'
@@ -8,7 +8,6 @@ require 'puppettest/fileparsing'
provider_class = Puppet::Type.type(:mailalias).provider(:aliases)
describe provider_class do
- include PuppetTest
include PuppetTest::FileParsing
include PuppetTest::Support::Utils
diff --git a/spec/integration/provider/package_spec.rb b/spec/integration/provider/package_spec.rb
index 736a34e68..472662d6b 100755
--- a/spec/integration/provider/package_spec.rb
+++ b/spec/integration/provider/package_spec.rb
@@ -6,9 +6,7 @@ describe "Package Provider" do
Puppet::Type.type(:package).providers.each do |name|
provider = Puppet::Type.type(:package).provider(name)
- describe name do
- confine "Provider #{name} is not suitable" => provider.suitable?
-
+ describe name, :if => provider.suitable? do
it "should fail when asked to install an invalid package" do
pending("This test hangs forever with recent versions of RubyGems") if provider.name == :gem
pkg = Puppet::Type.newpackage :name => "nosuch#{provider.name}", :provider => provider.name
diff --git a/spec/integration/provider/service/init_spec.rb b/spec/integration/provider/service/init_spec.rb
index d916ab32a..2e2505bd4 100755
--- a/spec/integration/provider/service/init_spec.rb
+++ b/spec/integration/provider/service/init_spec.rb
@@ -6,25 +6,19 @@ Dir.chdir(File.dirname(__FILE__)) { (s = lambda { |f| File.exist?(f) ? require(f
provider = Puppet::Type.type(:service).provider(:init)
describe provider do
- describe "when running on FreeBSD" do
- confine "Not running on FreeBSD" => (Facter.value(:operatingsystem) == "FreeBSD")
-
+ describe "when running on FreeBSD", :if => (Facter.value(:operatingsystem) == "FreeBSD") do
it "should set its default path to include /etc/init.d and /usr/local/etc/init.d" do
provider.defpath.should == ["/etc/rc.d", "/usr/local/etc/rc.d"]
end
end
- describe "when running on HP-UX" do
- confine "Not running on HP-UX" => (Facter.value(:operatingsystem) == "HP-UX")
-
+ describe "when running on HP-UX", :if => (Facter.value(:operatingsystem) == "HP-UX")do
it "should set its default path to include /sbin/init.d" do
provider.defpath.should == "/sbin/init.d"
end
end
- describe "when not running on FreeBSD or HP-UX" do
- confine "Running on HP-UX or FreeBSD" => (! %w{HP-UX FreeBSD}.include?(Facter.value(:operatingsystem)))
-
+ describe "when not running on FreeBSD or HP-UX", :if => (! %w{HP-UX FreeBSD}.include?(Facter.value(:operatingsystem))) do
it "should set its default path to include /etc/init.d" do
provider.defpath.should == "/etc/init.d"
end
diff --git a/spec/integration/reference/providers_spec.rb b/spec/integration/reference/providers_spec.rb
index 8b95ca118..c2b1e17c5 100755
--- a/spec/integration/reference/providers_spec.rb
+++ b/spec/integration/reference/providers_spec.rb
@@ -11,7 +11,7 @@ describe reference do
reference.should_not be_nil
end
- it "should be able to be rendered as text" do
- lambda { reference.to_text }.should_not raise_error
+ it "should be able to be rendered as markdown" do
+ lambda { reference.to_markdown }.should_not raise_error
end
end
diff --git a/spec/integration/reports_spec.rb b/spec/integration/reports_spec.rb
index 40e5284e1..a721d75d8 100755
--- a/spec/integration/reports_spec.rb
+++ b/spec/integration/reports_spec.rb
@@ -3,7 +3,7 @@
# Created by Luke Kanies on 2007-10-12.
# Copyright (c) 2007. All rights reserved.
-require File.dirname(__FILE__) + '/../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
require 'puppet/reports'
diff --git a/spec/integration/resource/catalog_spec.rb b/spec/integration/resource/catalog_spec.rb
index 0a3d47a80..21162655e 100755
--- a/spec/integration/resource/catalog_spec.rb
+++ b/spec/integration/resource/catalog_spec.rb
@@ -3,11 +3,10 @@
# Created by Luke Kanies on 2007-4-8.
# Copyright (c) 2008. All rights reserved.
-require File.dirname(__FILE__) + '/../../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
describe Puppet::Resource::Catalog do
- describe "when pson is available" do
- confine "PSON library is missing" => Puppet.features.pson?
+ describe "when pson is available", :if => Puppet.features.pson? do
it "should support pson" do
Puppet::Resource::Catalog.supported_formats.should be_include(:pson)
end
@@ -30,7 +29,7 @@ describe Puppet::Resource::Catalog do
terminus.expects(:path).with("me").returns "/my/yaml/file"
FileTest.expects(:exist?).with("/my/yaml/file").returns false
- Puppet::Resource::Catalog.find("me").should be_nil
+ Puppet::Resource::Catalog.indirection.find("me").should be_nil
end
it "should be able to delegate to the :compiler terminus" do
@@ -42,10 +41,10 @@ describe Puppet::Resource::Catalog do
node = mock 'node'
node.stub_everything
- Puppet::Node.expects(:find).returns(node)
+ Puppet::Node.indirection.expects(:find).returns(node)
compiler.expects(:compile).with(node).returns nil
- Puppet::Resource::Catalog.find("me").should be_nil
+ Puppet::Resource::Catalog.indirection.find("me").should be_nil
end
it "should pass provided node information directly to the terminus" do
@@ -55,7 +54,7 @@ describe Puppet::Resource::Catalog do
node = mock 'node'
terminus.expects(:find).with { |request| request.options[:use_node] == node }
- Puppet::Resource::Catalog.find("me", :use_node => node)
+ Puppet::Resource::Catalog.indirection.find("me", :use_node => node)
end
end
end
diff --git a/spec/integration/resource/type_collection_spec.rb b/spec/integration/resource/type_collection_spec.rb
index 318dd4dd7..f6ba9c7af 100755
--- a/spec/integration/resource/type_collection_spec.rb
+++ b/spec/integration/resource/type_collection_spec.rb
@@ -1,6 +1,6 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
require 'puppet_spec/files'
require 'puppet/resource/type_collection'
diff --git a/spec/integration/ssl/certificate_authority_spec.rb b/spec/integration/ssl/certificate_authority_spec.rb
index 67ff6f215..17b56ea98 100755
--- a/spec/integration/ssl/certificate_authority_spec.rb
+++ b/spec/integration/ssl/certificate_authority_spec.rb
@@ -3,7 +3,7 @@
# Created by Luke Kanies on 2008-4-17.
# Copyright (c) 2008. All rights reserved.
-require File.dirname(__FILE__) + '/../../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
require 'puppet/ssl/certificate_authority'
require 'tempfile'
@@ -47,7 +47,7 @@ describe Puppet::SSL::CertificateAuthority do
it "should be able to generate a new host certificate" do
@ca.generate("newhost")
- Puppet::SSL::Certificate.find("newhost").should be_instance_of(Puppet::SSL::Certificate)
+ Puppet::SSL::Certificate.indirection.find("newhost").should be_instance_of(Puppet::SSL::Certificate)
end
it "should be able to revoke a host certificate" do
@@ -94,7 +94,7 @@ describe Puppet::SSL::CertificateAuthority do
it "should save the signed certificate" do
@ca.sign("luke.madstop.com")
- Puppet::SSL::Certificate.find("luke.madstop.com").should be_instance_of(Puppet::SSL::Certificate)
+ Puppet::SSL::Certificate.indirection.find("luke.madstop.com").should be_instance_of(Puppet::SSL::Certificate)
end
it "should be able to sign multiple certificates" do
@@ -107,15 +107,15 @@ describe Puppet::SSL::CertificateAuthority do
@ca.sign("luke.madstop.com")
@ca.sign("other.madstop.com")
- Puppet::SSL::Certificate.find("other.madstop.com").should be_instance_of(Puppet::SSL::Certificate)
- Puppet::SSL::Certificate.find("luke.madstop.com").should be_instance_of(Puppet::SSL::Certificate)
+ Puppet::SSL::Certificate.indirection.find("other.madstop.com").should be_instance_of(Puppet::SSL::Certificate)
+ Puppet::SSL::Certificate.indirection.find("luke.madstop.com").should be_instance_of(Puppet::SSL::Certificate)
end
it "should save the signed certificate to the :signeddir" do
@ca.sign("luke.madstop.com")
client_cert = File.join(Puppet[:signeddir], "luke.madstop.com.pem")
- File.read(client_cert).should == Puppet::SSL::Certificate.find("luke.madstop.com").content.to_s
+ File.read(client_cert).should == Puppet::SSL::Certificate.indirection.find("luke.madstop.com").content.to_s
end
it "should save valid certificates" do
diff --git a/spec/integration/ssl/certificate_request_spec.rb b/spec/integration/ssl/certificate_request_spec.rb
index 8426b9dc5..f1040055b 100755
--- a/spec/integration/ssl/certificate_request_spec.rb
+++ b/spec/integration/ssl/certificate_request_spec.rb
@@ -3,7 +3,7 @@
# Created by Luke Kanies on 2008-4-17.
# Copyright (c) 2008. All rights reserved.
-require File.dirname(__FILE__) + '/../../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
require 'puppet/ssl/certificate_request'
require 'tempfile'
@@ -43,20 +43,20 @@ describe Puppet::SSL::CertificateRequest do
end
it "should be able to save CSRs" do
- @csr.save
+ Puppet::SSL::CertificateRequest.indirection.save(@csr)
end
it "should be able to find saved certificate requests via the Indirector" do
@csr.generate(@key)
- @csr.save
+ Puppet::SSL::CertificateRequest.indirection.save(@csr)
- Puppet::SSL::CertificateRequest.find("luke.madstop.com").should be_instance_of(Puppet::SSL::CertificateRequest)
+ Puppet::SSL::CertificateRequest.indirection.find("luke.madstop.com").should be_instance_of(Puppet::SSL::CertificateRequest)
end
it "should save the completely CSR when saving" do
@csr.generate(@key)
- @csr.save
+ Puppet::SSL::CertificateRequest.indirection.save(@csr)
- Puppet::SSL::CertificateRequest.find("luke.madstop.com").content.to_s.should == @csr.content.to_s
+ Puppet::SSL::CertificateRequest.indirection.find("luke.madstop.com").content.to_s.should == @csr.content.to_s
end
end
diff --git a/spec/integration/ssl/certificate_revocation_list_spec.rb b/spec/integration/ssl/certificate_revocation_list_spec.rb
index 44eee363d..ddf7952f3 100755
--- a/spec/integration/ssl/certificate_revocation_list_spec.rb
+++ b/spec/integration/ssl/certificate_revocation_list_spec.rb
@@ -3,7 +3,7 @@
# Created by Luke Kanies on 2008-5-5.
# Copyright (c) 2008. All rights reserved.
-require File.dirname(__FILE__) + '/../../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
require 'puppet/ssl/certificate_revocation_list'
require 'tempfile'
diff --git a/spec/integration/ssl/host_spec.rb b/spec/integration/ssl/host_spec.rb
index 05862dfc4..84160b019 100755
--- a/spec/integration/ssl/host_spec.rb
+++ b/spec/integration/ssl/host_spec.rb
@@ -3,7 +3,7 @@
# Created by Luke Kanies on 2008-4-17.
# Copyright (c) 2008. All rights reserved.
-require File.dirname(__FILE__) + '/../../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
require 'puppet/ssl/host'
require 'tempfile'
@@ -45,7 +45,7 @@ describe Puppet::SSL::Host do
it "should save the key such that the Indirector can find it" do
@host.generate_key
- Puppet::SSL::Key.find(@host.name).content.to_s.should == @host.key.to_s
+ Puppet::SSL::Key.indirection.find(@host.name).content.to_s.should == @host.key.to_s
end
it "should save the private key into the :privatekeydir" do
@@ -62,7 +62,7 @@ describe Puppet::SSL::Host do
it "should save the certificate request such that the Indirector can find it" do
@host.generate_certificate_request
- Puppet::SSL::CertificateRequest.find(@host.name).content.to_s.should == @host.certificate_request.to_s
+ Puppet::SSL::CertificateRequest.indirection.find(@host.name).content.to_s.should == @host.certificate_request.to_s
end
it "should save the private certificate request into the :privatekeydir" do
diff --git a/spec/integration/transaction/report_spec.rb b/spec/integration/transaction/report_spec.rb
index eed7acaa9..c38f31081 100755
--- a/spec/integration/transaction/report_spec.rb
+++ b/spec/integration/transaction/report_spec.rb
@@ -3,7 +3,7 @@
# Created by Luke Kanies on 2008-4-8.
# Copyright (c) 2008. All rights reserved.
-require File.dirname(__FILE__) + '/../../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
describe Puppet::Transaction::Report do
describe "when using the indirector" do
@@ -19,11 +19,11 @@ describe Puppet::Transaction::Report do
Facter.stubs(:value).returns "host.domain.com"
- report = Puppet::Transaction::Report.new
+ report = Puppet::Transaction::Report.new("apply")
terminus.expects(:process).with(report)
- report.save
+ Puppet::Transaction::Report.indirection.save(report)
end
end
end
diff --git a/spec/integration/transaction_spec.rb b/spec/integration/transaction_spec.rb
index d5478d7a7..b5080b5c6 100755
--- a/spec/integration/transaction_spec.rb
+++ b/spec/integration/transaction_spec.rb
@@ -1,6 +1,6 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
require 'puppet_spec/files'
require 'puppet/transaction'
diff --git a/spec/integration/type/file_spec.rb b/spec/integration/type/file_spec.rb
index 4b91e5ef9..c2702ee7a 100755
--- a/spec/integration/type/file_spec.rb
+++ b/spec/integration/type/file_spec.rb
@@ -1,6 +1,6 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
require 'puppet_spec/files'
diff --git a/spec/integration/type/package_spec.rb b/spec/integration/type/package_spec.rb
index c89c18ba1..8e852f261 100755
--- a/spec/integration/type/package_spec.rb
+++ b/spec/integration/type/package_spec.rb
@@ -1,6 +1,6 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
describe Puppet::Type.type(:package), "when choosing a default package provider" do
before do
diff --git a/spec/integration/type/tidy_spec.rb b/spec/integration/type/tidy_spec.rb
index 429ba4c57..084ebac6d 100755
--- a/spec/integration/type/tidy_spec.rb
+++ b/spec/integration/type/tidy_spec.rb
@@ -1,6 +1,6 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
require 'puppet_spec/files'
require 'puppet/file_bucket/dipper'
diff --git a/spec/integration/type_spec.rb b/spec/integration/type_spec.rb
index 957dfe344..62f8fb7d2 100755
--- a/spec/integration/type_spec.rb
+++ b/spec/integration/type_spec.rb
@@ -1,6 +1,6 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
require 'puppet/type'
diff --git a/spec/integration/util/settings_spec.rb b/spec/integration/util/settings_spec.rb
index 27acd90ee..d3b5ec594 100755
--- a/spec/integration/util/settings_spec.rb
+++ b/spec/integration/util/settings_spec.rb
@@ -1,6 +1,6 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
require 'puppet_spec/files'
diff --git a/spec/monkey_patches/add_confine_and_runnable_to_rspec_dsl.rb b/spec/monkey_patches/add_confine_and_runnable_to_rspec_dsl.rb
deleted file mode 100644
index 3762b7033..000000000
--- a/spec/monkey_patches/add_confine_and_runnable_to_rspec_dsl.rb
+++ /dev/null
@@ -1,46 +0,0 @@
-dir = File.expand_path(File.dirname(__FILE__))
-[ "#{dir}/../../lib", "#{dir}/../../test/lib"].each do |dir|
- fulldir = File.expand_path(dir)
- $LOAD_PATH.unshift(fulldir) unless $LOAD_PATH.include?(fulldir)
-end
-
-require 'spec'
-require 'puppettest/runnable_test'
-
-module Spec
- module Runner
- class ExampleGroupRunner
- def run
- prepare
- success = true
- example_groups.each do |example_group|
- unless example_group.runnable?
- warn "Skipping unsuitable example group #{example_group.description}: #{example_group.messages.join(", ")}"
- next
- end
- success = success & example_group.run(@options)
- Puppet.settings.clear
- end
- return success
- ensure
- finish
- end
- end
- end
-end
-
-module Spec
- module Example
- class ExampleGroup
- extend PuppetTest::RunnableTest
- end
- end
-end
-
-module Test
- module Unit
- class TestCase
- extend PuppetTest::RunnableTest
- end
- end
-end
diff --git a/spec/monkey_patches/alias_should_to_must.rb b/spec/monkey_patches/alias_should_to_must.rb
index c8744136a..1a1111799 100644
--- a/spec/monkey_patches/alias_should_to_must.rb
+++ b/spec/monkey_patches/alias_should_to_must.rb
@@ -1,3 +1,5 @@
+require 'rspec'
+
class Object
# This is necessary because the RAL has a 'should'
# method.
diff --git a/spec/shared_behaviours/file_server_terminus.rb b/spec/shared_behaviours/file_server_terminus.rb
index 665b46cd5..94a044d2e 100644
--- a/spec/shared_behaviours/file_server_terminus.rb
+++ b/spec/shared_behaviours/file_server_terminus.rb
@@ -3,7 +3,7 @@
# Created by Luke Kanies on 2007-10-18.
# Copyright (c) 2007. All rights reserved.
-describe "Puppet::Indirector::FileServerTerminus", :shared => true do
+shared_examples_for "Puppet::Indirector::FileServerTerminus" do
# This only works if the shared behaviour is included before
# the 'before' block in the including context.
before do
diff --git a/spec/shared_behaviours/file_serving.rb b/spec/shared_behaviours/file_serving.rb
index 5f5b2b0af..84173448a 100644
--- a/spec/shared_behaviours/file_serving.rb
+++ b/spec/shared_behaviours/file_serving.rb
@@ -3,7 +3,7 @@
# Created by Luke Kanies on 2007-10-18.
# Copyright (c) 2007. All rights reserved.
-describe "Puppet::FileServing::Files", :shared => true do
+shared_examples_for "Puppet::FileServing::Files" do
it "should use the rest terminus when the 'puppet' URI scheme is used and a host name is present" do
uri = "puppet://myhost/fakemod/my/file"
@@ -12,7 +12,7 @@ describe "Puppet::FileServing::Files", :shared => true do
term = @indirection.terminus(:rest)
@indirection.stubs(:terminus).with(:rest).returns term
term.expects(:find)
- @test_class.find(uri)
+ @indirection.find(uri)
end
it "should use the rest terminus when the 'puppet' URI scheme is used, no host name is present, and the process name is not 'puppet' or 'apply'" do
@@ -21,7 +21,7 @@ describe "Puppet::FileServing::Files", :shared => true do
Puppet.settings.stubs(:value).with(:name).returns("puppetd")
Puppet.settings.stubs(:value).with(:modulepath).returns("")
@indirection.terminus(:rest).expects(:find)
- @test_class.find(uri)
+ @indirection.find(uri)
end
it "should use the file_server terminus when the 'puppet' URI scheme is used, no host name is present, and the process name is 'puppet'" do
@@ -32,7 +32,7 @@ describe "Puppet::FileServing::Files", :shared => true do
Puppet.settings.stubs(:value).with(:fileserverconfig).returns("/whatever")
@indirection.terminus(:file_server).expects(:find)
@indirection.terminus(:file_server).stubs(:authorized?).returns(true)
- @test_class.find(uri)
+ @indirection.find(uri)
end
it "should use the file_server terminus when the 'puppet' URI scheme is used, no host name is present, and the process name is 'apply'" do
@@ -43,19 +43,19 @@ describe "Puppet::FileServing::Files", :shared => true do
Puppet.settings.stubs(:value).with(:fileserverconfig).returns("/whatever")
@indirection.terminus(:file_server).expects(:find)
@indirection.terminus(:file_server).stubs(:authorized?).returns(true)
- @test_class.find(uri)
+ @indirection.find(uri)
end
it "should use the file terminus when the 'file' URI scheme is used" do
uri = "file:///fakemod/my/file"
@indirection.terminus(:file).expects(:find)
- @test_class.find(uri)
+ @indirection.find(uri)
end
it "should use the file terminus when a fully qualified path is provided" do
uri = "/fakemod/my/file"
@indirection.terminus(:file).expects(:find)
- @test_class.find(uri)
+ @indirection.find(uri)
end
it "should use the configuration to test whether the request is allowed" do
@@ -66,6 +66,6 @@ describe "Puppet::FileServing::Files", :shared => true do
@indirection.terminus(:file_server).expects(:find)
mount.expects(:allowed?).returns(true)
- @test_class.find(uri, :node => "foo", :ip => "bar")
+ @indirection.find(uri, :node => "foo", :ip => "bar")
end
end
diff --git a/spec/shared_behaviours/memory_terminus.rb b/spec/shared_behaviours/memory_terminus.rb
index 5c9f35cca..f9325a969 100644
--- a/spec/shared_behaviours/memory_terminus.rb
+++ b/spec/shared_behaviours/memory_terminus.rb
@@ -2,7 +2,7 @@
# Created by Luke Kanies on 2008-4-8.
# Copyright (c) 2008. All rights reserved.
-describe "A Memory Terminus", :shared => true do
+shared_examples_for "A Memory Terminus" do
it "should find no instances by default" do
@searcher.find(@request).should be_nil
end
diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb
index 0c4b076f4..84ef3f279 100644
--- a/spec/spec_helper.rb
+++ b/spec/spec_helper.rb
@@ -6,29 +6,31 @@ dir = File.expand_path(File.dirname(__FILE__))
$LOAD_PATH.unshift("#{dir}/")
$LOAD_PATH.unshift("#{dir}/lib") # a spec-specific test lib dir
$LOAD_PATH.unshift("#{dir}/../lib")
+$LOAD_PATH.unshift("#{dir}/../test/lib")
# Don't want puppet getting the command line arguments for rake or autotest
ARGV.clear
require 'puppet'
require 'mocha'
-gem 'rspec', '>=1.2.9'
-require 'spec/autorun'
+gem 'rspec', '>=2.0.0'
# So everyone else doesn't have to include this base constant.
module PuppetSpec
FIXTURE_DIR = File.join(dir = File.expand_path(File.dirname(__FILE__)), "fixtures") unless defined?(FIXTURE_DIR)
end
+module PuppetTest
+end
+
require 'lib/puppet_spec/files'
require 'monkey_patches/alias_should_to_must'
-require 'monkey_patches/add_confine_and_runnable_to_rspec_dsl'
require 'monkey_patches/publicize_methods'
-Spec::Runner.configure do |config|
+RSpec.configure do |config|
config.mock_with :mocha
- config.prepend_after :each do
+ config.after :each do
Puppet.settings.clear
Puppet::Node::Environment.clear
Puppet::Util::Storage.clear
@@ -58,7 +60,7 @@ Spec::Runner.configure do |config|
Puppet::Util::Log.close_all
end
- config.prepend_before :each do
+ config.before :each do
# these globals are set by Application
$puppet_application_mode = nil
$puppet_application_name = nil
diff --git a/spec/spec_specs/runnable_spec.rb b/spec/spec_specs/runnable_spec.rb
deleted file mode 100644
index da4faca4e..000000000
--- a/spec/spec_specs/runnable_spec.rb
+++ /dev/null
@@ -1,95 +0,0 @@
-require File.dirname(__FILE__) + '/../spec_helper'
-
-describe PuppetTest::RunnableTest do
- before do
- @runnable_test = Class.new.extend(PuppetTest::RunnableTest)
- end
-
- describe "#confine" do
- subject { @runnable_test }
-
- it "should accept a hash" do
- subject.confine({}).should_not raise_error(ArgumentError)
- end
-
- it "should accept a message and a block" do
- subject.confine(""){}.should_not raise_error(ArgumentError)
- end
-
- end
-
- describe "#runnable?" do
- describe "when the superclass is not runnable" do
- before { @runnable_test.stubs(:superclass).returns(stub("unrunnable superclass", :runnable? => false)) }
- subject { @runnable_test.runnable? }
-
- it { should be_false }
- end
-
- describe "when a confine is false" do
- before { @runnable_test.confine(:message => false) }
- subject { @runnable_test.runnable? }
-
- it { should be_false }
- end
-
- describe "when a confine has a block that returns false" do
- before { @runnable_test.confine(:message){ false } }
- subject { @runnable_test.runnable? }
-
- it { should be_false }
- end
-
- describe "when a confine is true and no false confines" do
- before { @runnable_test.confine(:message => true) }
- subject { @runnable_test.runnable? }
-
- it { should be_true }
- end
-
- describe "when a confine has block that returns true and no false confines" do
- before { @runnable_test.confine(:message){ true } }
- subject { @runnable_test.runnable? }
-
- it { should be_true }
- end
-
- end
-
- describe "#messages" do
- describe "before runnable? is called" do
- subject { @runnable_test.messages }
-
- it { should == [] }
- end
-
- describe "when runnable? is called and returns false" do
- before do
- @runnable_test.confine(:message => false)
- @runnable_test.runnable?
- end
-
- subject { @runnable_test.messages }
-
- it "should include the failed confine's message" do
- should include(:message)
- end
-
- end
-
- describe "when runnable? is called whose block returns false" do
- before do
- @runnable_test.confine(:message){ false }
- @runnable_test.runnable?
- end
-
- subject { @runnable_test.messages }
-
- it "should include the failed confine's message" do
- should include(:message)
- end
-
- end
-
- end
-end
diff --git a/spec/unit/agent/locker_spec.rb b/spec/unit/agent/locker_spec.rb
index ad54c765a..e7c8929c7 100755
--- a/spec/unit/agent/locker_spec.rb
+++ b/spec/unit/agent/locker_spec.rb
@@ -1,6 +1,6 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
require 'puppet/agent'
require 'puppet/agent/locker'
diff --git a/spec/unit/agent_spec.rb b/spec/unit/agent_spec.rb
index 2b3ee8ca0..a3a54bf7d 100755
--- a/spec/unit/agent_spec.rb
+++ b/spec/unit/agent_spec.rb
@@ -3,7 +3,7 @@
# Created by Luke Kanies on 2007-11-12.
# Copyright (c) 2007. All rights reserved.
-require File.dirname(__FILE__) + '/../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
require 'puppet/agent'
class AgentTestClient
diff --git a/spec/unit/application/agent_spec.rb b/spec/unit/application/agent_spec.rb
index 50ef00c57..cee6a0d1a 100755
--- a/spec/unit/application/agent_spec.rb
+++ b/spec/unit/application/agent_spec.rb
@@ -1,6 +1,6 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
require 'puppet/agent'
require 'puppet/application/agent'
@@ -21,9 +21,9 @@ describe Puppet::Application::Agent do
Puppet::Util::Log.stubs(:newdestination)
Puppet::Util::Log.stubs(:level=)
- Puppet::Node.stubs(:terminus_class=)
- Puppet::Node.stubs(:cache_class=)
- Puppet::Node::Facts.stubs(:terminus_class=)
+ Puppet::Node.indirection.stubs(:terminus_class=)
+ Puppet::Node.indirection.stubs(:cache_class=)
+ Puppet::Node::Facts.indirection.stubs(:terminus_class=)
end
it "should operate in agent run_mode" do
@@ -179,11 +179,11 @@ describe Puppet::Application::Agent do
FileTest.stubs(:exists?).returns(true)
Puppet[:libdir] = "/dev/null/lib"
Puppet::SSL::Host.stubs(:ca_location=)
- Puppet::Transaction::Report.stubs(:terminus_class=)
- Puppet::Transaction::Report.stubs(:cache_class=)
- Puppet::Resource::Catalog.stubs(:terminus_class=)
- Puppet::Resource::Catalog.stubs(:cache_class=)
- Puppet::Node::Facts.stubs(:terminus_class=)
+ Puppet::Transaction::Report.indirection.stubs(:terminus_class=)
+ Puppet::Transaction::Report.indirection.stubs(:cache_class=)
+ Puppet::Resource::Catalog.indirection.stubs(:terminus_class=)
+ Puppet::Resource::Catalog.indirection.stubs(:cache_class=)
+ Puppet::Node::Facts.indirection.stubs(:terminus_class=)
@host = stub_everything 'host'
Puppet::SSL::Host.stubs(:new).returns(@host)
Puppet.stubs(:settraps)
@@ -307,13 +307,13 @@ describe Puppet::Application::Agent do
end
it "should tell the report handler to use REST" do
- Puppet::Transaction::Report.expects(:terminus_class=).with(:rest)
+ Puppet::Transaction::Report.indirection.expects(:terminus_class=).with(:rest)
@puppetd.setup
end
it "should tell the report handler to cache locally as yaml" do
- Puppet::Transaction::Report.expects(:cache_class=).with(:yaml)
+ Puppet::Transaction::Report.indirection.expects(:cache_class=).with(:yaml)
@puppetd.setup
end
@@ -325,7 +325,7 @@ describe Puppet::Application::Agent do
end
it "should tell the catalog handler to use cache" do
- Puppet::Resource::Catalog.expects(:cache_class=).with(:yaml)
+ Puppet::Resource::Catalog.indirection.expects(:cache_class=).with(:yaml)
@puppetd.setup
end
diff --git a/spec/unit/application/apply_spec.rb b/spec/unit/application/apply_spec.rb
index f07416378..8aaa5d8f9 100755
--- a/spec/unit/application/apply_spec.rb
+++ b/spec/unit/application/apply_spec.rb
@@ -1,6 +1,6 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
require 'puppet/application/apply'
require 'puppet/file_bucket/dipper'
@@ -57,7 +57,7 @@ describe Puppet::Application::Apply do
Puppet.stubs(:parse_config)
Puppet::FileBucket::Dipper.stubs(:new)
STDIN.stubs(:read)
- Puppet::Transaction::Report.stubs(:cache_class=)
+ Puppet::Transaction::Report.indirection.stubs(:cache_class=)
@apply.options.stubs(:[]).with(any_parameters)
end
@@ -116,7 +116,7 @@ describe Puppet::Application::Apply do
end
it "should tell the report handler to cache locally as yaml" do
- Puppet::Transaction::Report.expects(:cache_class=).with(:yaml)
+ Puppet::Transaction::Report.indirection.expects(:cache_class=).with(:yaml)
@apply.setup
end
@@ -185,14 +185,14 @@ describe Puppet::Application::Apply do
@apply.options.stubs(:[])
@facts = stub_everything 'facts'
- Puppet::Node::Facts.stubs(:find).returns(@facts)
+ Puppet::Node::Facts.indirection.stubs(:find).returns(@facts)
@node = stub_everything 'node'
- Puppet::Node.stubs(:find).returns(@node)
+ Puppet::Node.indirection.stubs(:find).returns(@node)
@catalog = stub_everything 'catalog'
@catalog.stubs(:to_ral).returns(@catalog)
- Puppet::Resource::Catalog.stubs(:find).returns(@catalog)
+ Puppet::Resource::Catalog.indirection.stubs(:find).returns(@catalog)
STDIN.stubs(:read)
@@ -248,25 +248,25 @@ describe Puppet::Application::Apply do
end
it "should collect the node facts" do
- Puppet::Node::Facts.expects(:find).returns(@facts)
+ Puppet::Node::Facts.indirection.expects(:find).returns(@facts)
@apply.main
end
it "should raise an error if we can't find the node" do
- Puppet::Node::Facts.expects(:find).returns(nil)
+ Puppet::Node::Facts.indirection.expects(:find).returns(nil)
lambda { @apply.main }.should raise_error
end
it "should look for the node" do
- Puppet::Node.expects(:find).returns(@node)
+ Puppet::Node.indirection.expects(:find).returns(@node)
@apply.main
end
it "should raise an error if we can't find the node" do
- Puppet::Node.expects(:find).returns(nil)
+ Puppet::Node.indirection.expects(:find).returns(nil)
lambda { @apply.main }.should raise_error
end
@@ -292,7 +292,7 @@ describe Puppet::Application::Apply do
end
it "should compile the catalog" do
- Puppet::Resource::Catalog.expects(:find).returns(@catalog)
+ Puppet::Resource::Catalog.indirection.expects(:find).returns(@catalog)
@apply.main
end
@@ -325,8 +325,8 @@ describe Puppet::Application::Apply do
it "should save the last run summary" do
Puppet.stubs(:[]).with(:noop).returns(false)
- report = stub 'report'
- Puppet::Configurer.any_instance.stubs(:initialize_report).returns(report)
+ report = Puppet::Transaction::Report.new("apply")
+ Puppet::Transaction::Report.stubs(:new).returns(report)
Puppet::Configurer.any_instance.expects(:save_last_run_summary).with(report)
@apply.main
diff --git a/spec/unit/application/cert_spec.rb b/spec/unit/application/cert_spec.rb
index 4663fc938..c7f463ea2 100755
--- a/spec/unit/application/cert_spec.rb
+++ b/spec/unit/application/cert_spec.rb
@@ -1,6 +1,6 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
require 'puppet/application/cert'
diff --git a/spec/unit/application/describe_spec.rb b/spec/unit/application/describe_spec.rb
index 7c64ff86d..47b98a17b 100755
--- a/spec/unit/application/describe_spec.rb
+++ b/spec/unit/application/describe_spec.rb
@@ -1,6 +1,6 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
require 'puppet/application/describe'
diff --git a/spec/unit/application/doc_spec.rb b/spec/unit/application/doc_spec.rb
index 55da5e39a..f432184d3 100755
--- a/spec/unit/application/doc_spec.rb
+++ b/spec/unit/application/doc_spec.rb
@@ -1,6 +1,6 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
require 'puppet/application/doc'
require 'puppet/util/reference'
@@ -48,10 +48,10 @@ describe Puppet::Application::Doc do
@doc.options[:mode].should == :text
end
- it "should init format to to_rest" do
+ it "should init format to to_markdown" do
@doc.preinit
- @doc.options[:format].should == :to_rest
+ @doc.options[:format].should == :to_markdown
end
end
diff --git a/spec/unit/application/filebucket_spec.rb b/spec/unit/application/filebucket_spec.rb
index e6272f179..8b811d7c5 100644
--- a/spec/unit/application/filebucket_spec.rb
+++ b/spec/unit/application/filebucket_spec.rb
@@ -1,6 +1,6 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
require 'puppet/application/filebucket'
require 'puppet/file_bucket/dipper'
diff --git a/spec/unit/application/inspect_spec.rb b/spec/unit/application/inspect_spec.rb
new file mode 100644
index 000000000..1d99c6ca9
--- /dev/null
+++ b/spec/unit/application/inspect_spec.rb
@@ -0,0 +1,278 @@
+#!/usr/bin/env ruby
+
+require File.dirname(__FILE__) + '/../../spec_helper'
+
+require 'puppet/application/inspect'
+require 'puppet/resource/catalog'
+require 'puppet/indirector/catalog/yaml'
+require 'puppet/indirector/report/rest'
+require 'puppet/indirector/file_bucket_file/rest'
+
+describe Puppet::Application::Inspect do
+ include PuppetSpec::Files
+
+ before :each do
+ @inspect = Puppet::Application[:inspect]
+ end
+
+ describe "during setup" do
+ it "should print its configuration if asked" do
+ Puppet[:configprint] = "all"
+
+ Puppet.settings.expects(:print_configs).returns(true)
+ lambda { @inspect.setup }.should raise_error(SystemExit)
+ end
+
+ it "should fail if reporting is turned off" do
+ Puppet[:report] = false
+ lambda { @inspect.setup }.should raise_error(/report=true/)
+ end
+ end
+
+ describe "when executing" do
+ before :each do
+ Puppet[:report] = true
+ @inspect.options[:logset] = true
+ Puppet::Transaction::Report::Rest.any_instance.stubs(:save)
+ @inspect.setup
+ end
+
+ it "should retrieve the local catalog" do
+ Puppet::Resource::Catalog::Yaml.any_instance.expects(:find).with {|request| request.key == Puppet[:certname] }.returns(Puppet::Resource::Catalog.new)
+
+ @inspect.run_command
+ end
+
+ it "should save the report to REST" do
+ Puppet::Resource::Catalog::Yaml.any_instance.stubs(:find).returns(Puppet::Resource::Catalog.new)
+ Puppet::Transaction::Report::Rest.any_instance.expects(:save).with {|request| request.instance.host == Puppet[:certname] }
+
+ @inspect.run_command
+ end
+
+ it "should audit the specified properties" do
+ catalog = Puppet::Resource::Catalog.new
+ file = Tempfile.new("foo")
+ file.puts("file contents")
+ file.close
+ resource = Puppet::Resource.new(:file, file.path, :parameters => {:audit => "all"})
+ catalog.add_resource(resource)
+ Puppet::Resource::Catalog::Yaml.any_instance.stubs(:find).returns(catalog)
+
+ events = nil
+
+ Puppet::Transaction::Report::Rest.any_instance.expects(:save).with do |request|
+ events = request.instance.resource_statuses.values.first.events
+ end
+
+ @inspect.run_command
+
+ properties = events.inject({}) do |property_values, event|
+ property_values.merge(event.property => event.previous_value)
+ end
+ properties["ensure"].should == :file
+ properties["content"].should == "{md5}#{Digest::MD5.hexdigest("file contents\n")}"
+ properties.has_key?("target").should == false
+ end
+
+ it "should set audited to true for all events" do
+ catalog = Puppet::Resource::Catalog.new
+ file = Tempfile.new("foo")
+ resource = Puppet::Resource.new(:file, file.path, :parameters => {:audit => "all"})
+ catalog.add_resource(resource)
+ Puppet::Resource::Catalog::Yaml.any_instance.stubs(:find).returns(catalog)
+
+ events = nil
+
+ Puppet::Transaction::Report::Rest.any_instance.expects(:save).with do |request|
+ events = request.instance.resource_statuses.values.first.events
+ end
+
+ @inspect.run_command
+
+ events.each do |event|
+ event.audited.should == true
+ end
+ end
+
+ it "should not report irrelevent attributes if the resource is absent" do
+ catalog = Puppet::Resource::Catalog.new
+ file = Tempfile.new("foo")
+ resource = Puppet::Resource.new(:file, file.path, :parameters => {:audit => "all"})
+ file.delete
+ catalog.add_resource(resource)
+ Puppet::Resource::Catalog::Yaml.any_instance.stubs(:find).returns(catalog)
+
+ events = nil
+
+ Puppet::Transaction::Report::Rest.any_instance.expects(:save).with do |request|
+ events = request.instance.resource_statuses.values.first.events
+ end
+
+ @inspect.run_command
+
+ properties = events.inject({}) do |property_values, event|
+ property_values.merge(event.property => event.previous_value)
+ end
+ properties.should == {"ensure" => :absent}
+ end
+
+ describe "when archiving to a bucket" do
+ before :each do
+ Puppet[:archive_files] = true
+ Puppet[:archive_file_server] = "filebucketserver"
+ @catalog = Puppet::Resource::Catalog.new
+ Puppet::Resource::Catalog::Yaml.any_instance.stubs(:find).returns(@catalog)
+ end
+
+ describe "when auditing files" do
+ before :each do
+ @file = tmpfile("foo")
+ @resource = Puppet::Resource.new(:file, @file, :parameters => {:audit => "content"})
+ @catalog.add_resource(@resource)
+ end
+
+ it "should send an existing file to the file bucket" do
+ File.open(@file, 'w') { |f| f.write('stuff') }
+ Puppet::FileBucketFile::Rest.any_instance.expects(:head).with do |request|
+ request.server == Puppet[:archive_file_server]
+ end.returns(false)
+ Puppet::FileBucketFile::Rest.any_instance.expects(:save).with do |request|
+ request.server == Puppet[:archive_file_server] and request.instance.contents == 'stuff'
+ end
+ @inspect.run_command
+ end
+
+ it "should not send unreadable files" do
+ File.open(@file, 'w') { |f| f.write('stuff') }
+ File.chmod(0, @file)
+ Puppet::FileBucketFile::Rest.any_instance.expects(:head).never
+ Puppet::FileBucketFile::Rest.any_instance.expects(:save).never
+ @inspect.run_command
+ end
+
+ it "should not try to send non-existent files" do
+ Puppet::FileBucketFile::Rest.any_instance.expects(:head).never
+ Puppet::FileBucketFile::Rest.any_instance.expects(:save).never
+ @inspect.run_command
+ end
+
+ it "should not try to send files whose content we are not auditing" do
+ @resource[:audit] = "group"
+ Puppet::FileBucketFile::Rest.any_instance.expects(:head).never
+ Puppet::FileBucketFile::Rest.any_instance.expects(:save).never
+ @inspect.run_command
+ end
+
+ it "should continue if bucketing a file fails" do
+ File.open(@file, 'w') { |f| f.write('stuff') }
+ Puppet::FileBucketFile::Rest.any_instance.stubs(:head).returns false
+ Puppet::FileBucketFile::Rest.any_instance.stubs(:save).raises "failure"
+ Puppet::Transaction::Report::Rest.any_instance.expects(:save).with do |request|
+ @report = request.instance
+ end
+
+ @inspect.run_command
+
+ @report.logs.count.should == 1
+ @report.logs.first.message.should =~ /Could not back up/
+ end
+ end
+
+ describe "when auditing non-files" do
+ before :each do
+ Puppet::Type.newtype(:stub_type) do
+ newparam(:name) do
+ desc "The name var"
+ isnamevar
+ end
+
+ newproperty(:content) do
+ desc "content"
+ def retrieve
+ :whatever
+ end
+ end
+ end
+
+ @resource = Puppet::Resource.new(:stub_type, 'foo', :parameters => {:audit => "all"})
+ @catalog.add_resource(@resource)
+ end
+
+ after :each do
+ Puppet::Type.rmtype(:stub_type)
+ end
+
+ it "should not try to send non-files" do
+ Puppet::FileBucketFile::Rest.any_instance.expects(:head).never
+ Puppet::FileBucketFile::Rest.any_instance.expects(:save).never
+ @inspect.run_command
+ end
+ end
+ end
+
+ describe "when there are failures" do
+ before :each do
+ Puppet::Type.newtype(:stub_type) do
+ newparam(:name) do
+ desc "The name var"
+ isnamevar
+ end
+
+ newproperty(:content) do
+ desc "content"
+ def retrieve
+ raise "failed"
+ end
+ end
+ end
+
+ @catalog = Puppet::Resource::Catalog.new
+ Puppet::Resource::Catalog::Yaml.any_instance.stubs(:find).returns(@catalog)
+
+ Puppet::Transaction::Report::Rest.any_instance.expects(:save).with do |request|
+ @report = request.instance
+ end
+ end
+
+ after :each do
+ Puppet::Type.rmtype(:stub_type)
+ end
+
+ it "should mark the report failed and create failed events for each property" do
+ @resource = Puppet::Resource.new(:stub_type, 'foo', :parameters => {:audit => "all"})
+ @catalog.add_resource(@resource)
+
+ @inspect.run_command
+
+ @report.status.should == "failed"
+ @report.logs.select{|log| log.message =~ /Could not inspect/}.count.should == 1
+ @report.resource_statuses.count.should == 1
+ @report.resource_statuses['Stub_type[foo]'].events.count.should == 1
+
+ event = @report.resource_statuses['Stub_type[foo]'].events.first
+ event.property.should == "content"
+ event.status.should == "failure"
+ event.audited.should == true
+ event.instance_variables.should_not include("@previous_value")
+ end
+
+ it "should continue to the next resource" do
+ @resource = Puppet::Resource.new(:stub_type, 'foo', :parameters => {:audit => "all"})
+ @other_resource = Puppet::Resource.new(:stub_type, 'bar', :parameters => {:audit => "all"})
+ @catalog.add_resource(@resource)
+ @catalog.add_resource(@other_resource)
+
+ @inspect.run_command
+
+ @report.resource_statuses.count.should == 2
+ @report.resource_statuses.keys.should =~ ['Stub_type[foo]', 'Stub_type[bar]']
+ end
+ end
+ end
+
+ after :all do
+ Puppet::Resource::Catalog.indirection.reset_terminus_class
+ Puppet::Transaction::Report.indirection.terminus_class = :processor
+ end
+end
diff --git a/spec/unit/application/kick_spec.rb b/spec/unit/application/kick_spec.rb
index dea7ec147..ce0e0c7d0 100755
--- a/spec/unit/application/kick_spec.rb
+++ b/spec/unit/application/kick_spec.rb
@@ -1,12 +1,10 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
require 'puppet/application/kick'
-describe Puppet::Application::Kick do
-
- confine "Kick's eventloops can only start on POSIX" => Puppet.features.posix?
+describe Puppet::Application::Kick, :if => Puppet.features.posix? do
before :each do
require 'puppet/util/ldap/connection'
@@ -163,7 +161,7 @@ describe Puppet::Application::Kick do
@kick.options.stubs(:[]).with(:all).returns(true)
@kick.stubs(:puts)
- Puppet::Node.expects(:search).with("whatever",:fqdn => :something).returns([])
+ Puppet::Node.indirection.expects(:search).with("whatever",:fqdn => :something).returns([])
@kick.setup
end
@@ -172,7 +170,7 @@ describe Puppet::Application::Kick do
@kick.options.stubs(:[]).with(:all).returns(true)
@kick.stubs(:puts)
- Puppet::Node.expects(:search).with("whatever",:fqdn => nil).returns([])
+ Puppet::Node.indirection.expects(:search).with("whatever",:fqdn => nil).returns([])
@kick.setup
end
@@ -182,7 +180,7 @@ describe Puppet::Application::Kick do
@kick.stubs(:puts)
@kick.classes = ['class']
- Puppet::Node.expects(:search).with("whatever", :class => "class", :fqdn => nil).returns([])
+ Puppet::Node.indirection.expects(:search).with("whatever", :class => "class", :fqdn => nil).returns([])
@kick.setup
end
@@ -279,7 +277,7 @@ describe Puppet::Application::Kick do
end
it "should call run on a Puppet::Run for the given host" do
- @agent_run.expects(:save).with('https://host:8139/production/run/host').returns(@agent_run)
+ Puppet::Run.indirection.expects(:save).with(@agent_run, 'https://host:8139/production/run/host').returns(@agent_run)
@kick.run_for_host('host')
end
diff --git a/spec/unit/application/master_spec.rb b/spec/unit/application/master_spec.rb
index e657445a4..1173752d9 100644
--- a/spec/unit/application/master_spec.rb
+++ b/spec/unit/application/master_spec.rb
@@ -1,6 +1,6 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
require 'puppet/application/master'
require 'puppet/daemon'
@@ -14,12 +14,13 @@ describe Puppet::Application::Master do
Puppet::Util::Log.stubs(:newdestination)
Puppet::Util::Log.stubs(:level=)
- Puppet::Node.stubs(:terminus_class=)
- Puppet::Node.stubs(:cache_class=)
- Puppet::Node::Facts.stubs(:terminus_class=)
- Puppet::Node::Facts.stubs(:cache_class=)
- Puppet::Transaction::Report.stubs(:terminus_class=)
- Puppet::Resource::Catalog.stubs(:terminus_class=)
+ Puppet::Node.indirection.stubs(:terminus_class=)
+ Puppet::Node.indirection.stubs(:cache_class=)
+ Puppet::Node::Facts.indirection.stubs(:terminus_class=)
+ Puppet::Node::Facts.indirection.stubs(:cache_class=)
+ Puppet::Transaction::Report.indirection.stubs(:terminus_class=)
+ Puppet::Resource::Catalog.indirection.stubs(:terminus_class=)
+ Puppet::SSL::Host.stubs(:ca_location=)
end
it "should operate in master run_mode" do
@@ -183,7 +184,7 @@ describe Puppet::Application::Master do
end
it "should cache class in yaml" do
- Puppet::Node.expects(:cache_class=).with(:yaml)
+ Puppet::Node.indirection.expects(:cache_class=).with(:yaml)
@master.setup
end
@@ -298,7 +299,7 @@ describe Puppet::Application::Master do
it "should compile a catalog for the specified node" do
@master.options[:node] = "foo"
- Puppet::Resource::Catalog.expects(:find).with("foo").returns Puppet::Resource::Catalog.new
+ Puppet::Resource::Catalog.indirection.expects(:find).with("foo").returns Puppet::Resource::Catalog.new
$stdout.stubs(:puts)
@master.compile
@@ -306,7 +307,7 @@ describe Puppet::Application::Master do
it "should convert the catalog to a pure-resource catalog and use 'jj' to pretty-print the catalog" do
catalog = Puppet::Resource::Catalog.new
- Puppet::Resource::Catalog.expects(:find).returns catalog
+ Puppet::Resource::Catalog.indirection.expects(:find).returns catalog
catalog.expects(:to_resource).returns("rescat")
@@ -318,7 +319,7 @@ describe Puppet::Application::Master do
it "should exit with error code 30 if no catalog can be found" do
@master.options[:node] = "foo"
- Puppet::Resource::Catalog.expects(:find).returns nil
+ Puppet::Resource::Catalog.indirection.expects(:find).returns nil
@master.expects(:exit).with(30)
$stderr.expects(:puts)
@@ -327,7 +328,7 @@ describe Puppet::Application::Master do
it "should exit with error code 30 if there's a failure" do
@master.options[:node] = "foo"
- Puppet::Resource::Catalog.expects(:find).raises ArgumentError
+ Puppet::Resource::Catalog.indirection.expects(:find).raises ArgumentError
@master.expects(:exit).with(30)
$stderr.expects(:puts)
@@ -411,9 +412,7 @@ describe Puppet::Application::Master do
@master.main
end
- describe "with --rack" do
- confine "Rack is not available" => Puppet.features.rack?
-
+ describe "with --rack", :if => Puppet.features.rack? do
before do
require 'puppet/network/http/rack'
Puppet::Network::HTTP::Rack.stubs(:new).returns(@app)
diff --git a/spec/unit/application/queue_spec.rb b/spec/unit/application/queue_spec.rb
index bd0d53ab1..2ff9001af 100755
--- a/spec/unit/application/queue_spec.rb
+++ b/spec/unit/application/queue_spec.rb
@@ -1,6 +1,6 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
require 'puppet/application/queue'
require 'puppet/indirector/catalog/queue'
@@ -13,7 +13,7 @@ describe Puppet::Application::Queue do
Puppet::Util::Log.stubs(:newdestination)
Puppet::Util::Log.stubs(:level=)
- Puppet::Resource::Catalog.stubs(:terminus_class=)
+ Puppet::Resource::Catalog.indirection.stubs(:terminus_class=)
end
it "should ask Puppet::Application to parse Puppet configuration file" do
@@ -80,7 +80,7 @@ describe Puppet::Application::Queue do
@queue.daemon.stubs(:daemonize)
Puppet.stubs(:info)
Puppet.features.stubs(:stomp?).returns true
- Puppet::Resource::Catalog.stubs(:terminus_class=)
+ Puppet::Resource::Catalog.indirection.stubs(:terminus_class=)
Puppet.stubs(:settraps)
Puppet.settings.stubs(:print_config?)
Puppet.settings.stubs(:print_config)
@@ -144,7 +144,7 @@ describe Puppet::Application::Queue do
end
it "should configure the Catalog class to use ActiveRecord" do
- Puppet::Resource::Catalog.expects(:terminus_class=).with(:active_record)
+ Puppet::Resource::Catalog.indirection.expects(:terminus_class=).with(:active_record)
@queue.setup
end
@@ -171,8 +171,8 @@ describe Puppet::Application::Queue do
end
it "should log and save each catalog passed by the queue" do
- catalog = mock 'catalog', :name => 'eh'
- catalog.expects(:save)
+ catalog = Puppet::Resource::Catalog.new('eh')
+ Puppet::Resource::Catalog.indirection.expects(:save).with(catalog)
Puppet::Resource::Catalog::Queue.expects(:subscribe).yields(catalog)
Puppet.expects(:notice).times(2)
diff --git a/spec/unit/application/resource_spec.rb b/spec/unit/application/resource_spec.rb
index b6c52b11e..3e3f8296b 100755
--- a/spec/unit/application/resource_spec.rb
+++ b/spec/unit/application/resource_spec.rb
@@ -1,6 +1,6 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
require 'puppet/application/resource'
@@ -162,21 +162,21 @@ describe Puppet::Application::Resource do
@resource.stubs(:puts)
@resource.host = 'host'
- Puppet::Resource.stubs(:find ).never
- Puppet::Resource.stubs(:search).never
- Puppet::Resource.stubs(:save ).never
+ Puppet::Resource.indirection.stubs(:find ).never
+ Puppet::Resource.indirection.stubs(:search).never
+ Puppet::Resource.indirection.stubs(:save ).never
end
it "should search for resources" do
@resource.command_line.stubs(:args).returns(['type'])
- Puppet::Resource.expects(:search).with('https://host:8139/production/resources/type/', {}).returns([])
+ Puppet::Resource.indirection.expects(:search).with('https://host:8139/production/resources/type/', {}).returns([])
@resource.main
end
it "should describe the given resource" do
@resource.command_line.stubs(:args).returns(['type', 'name'])
x = stub_everything 'resource'
- Puppet::Resource.expects(:find).with('https://host:8139/production/resources/type/name').returns(x)
+ Puppet::Resource.indirection.expects(:find).with('https://host:8139/production/resources/type/name').returns(x)
@resource.main
end
@@ -184,7 +184,7 @@ describe Puppet::Application::Resource do
@resource.command_line.stubs(:args).returns(['type','name','param=temp'])
res = stub "resource"
- res.expects(:save).with('https://host:8139/production/resources/type/name').returns(res)
+ Puppet::Resource.indirection.expects(:save).with(res, 'https://host:8139/production/resources/type/name').returns(res)
res.expects(:collect)
res.expects(:to_manifest)
Puppet::Resource.expects(:new).with('type', 'name', :parameters => {'param' => 'temp'}).returns(res)
@@ -199,20 +199,20 @@ describe Puppet::Application::Resource do
@resource.stubs(:puts)
@resource.host = nil
- Puppet::Resource.stubs(:find ).never
- Puppet::Resource.stubs(:search).never
- Puppet::Resource.stubs(:save ).never
+ Puppet::Resource.indirection.stubs(:find ).never
+ Puppet::Resource.indirection.stubs(:search).never
+ Puppet::Resource.indirection.stubs(:save ).never
end
it "should search for resources" do
- Puppet::Resource.expects(:search).with('type/', {}).returns([])
+ Puppet::Resource.indirection.expects(:search).with('type/', {}).returns([])
@resource.main
end
it "should describe the given resource" do
@resource.command_line.stubs(:args).returns(['type','name'])
x = stub_everything 'resource'
- Puppet::Resource.expects(:find).with('type/name').returns(x)
+ Puppet::Resource.indirection.expects(:find).with('type/name').returns(x)
@resource.main
end
@@ -220,7 +220,7 @@ describe Puppet::Application::Resource do
@resource.command_line.stubs(:args).returns(['type','name','param=temp'])
res = stub "resource"
- res.expects(:save).with('type/name').returns(res)
+ Puppet::Resource.indirection.expects(:save).with(res, 'type/name').returns(res)
res.expects(:collect)
res.expects(:to_manifest)
Puppet::Resource.expects(:new).with('type', 'name', :parameters => {'param' => 'temp'}).returns(res)
diff --git a/spec/unit/application_spec.rb b/spec/unit/application_spec.rb
index be7cda340..65f06169c 100755
--- a/spec/unit/application_spec.rb
+++ b/spec/unit/application_spec.rb
@@ -1,6 +1,6 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
require 'puppet/application'
require 'puppet'
@@ -16,6 +16,25 @@ describe Puppet::Application do
Puppet.settings.stubs(:parse)
end
+ describe "finding" do
+ before do
+ @klass = Puppet::Application
+ @klass.stubs(:puts)
+ end
+
+ it "should find classes in the namespace" do
+ @klass.find("Agent").should == @klass::Agent
+ end
+
+ it "should not find classes outside the namespace" do
+ lambda { @klass.find("String") }.should raise_error(SystemExit)
+ end
+
+ it "should exit if it can't find a class" do
+ lambda { @klass.find("ThisShallNeverEverEverExistAsdf") }.should raise_error(SystemExit)
+ end
+ end
+
describe ".run_mode" do
it "should default to user" do
@appclass.run_mode.name.should == :user
@@ -160,9 +179,7 @@ describe Puppet::Application do
end
end
- describe 'on POSIX systems' do
- confine "HUP works only on POSIX systems" => Puppet.features.posix?
-
+ describe 'on POSIX systems', :if => Puppet.features.posix? do
it 'should signal process with HUP after block if restart requested during block execution' do
Puppet::Application.run_status = nil
target = mock 'target'
@@ -224,8 +241,7 @@ describe Puppet::Application do
@app.parse_options
end
- describe "when using --help" do
- confine "rdoc" => Puppet.features.usage?
+ describe "when using --help", :if => Puppet.features.usage? do
it "should call RDoc::usage and exit" do
@app.expects(:exit)
diff --git a/spec/unit/configurer/downloader_spec.rb b/spec/unit/configurer/downloader_spec.rb
index c57f39fb5..b2485ccc8 100755
--- a/spec/unit/configurer/downloader_spec.rb
+++ b/spec/unit/configurer/downloader_spec.rb
@@ -1,6 +1,6 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
require 'puppet/configurer/downloader'
diff --git a/spec/unit/configurer/fact_handler_spec.rb b/spec/unit/configurer/fact_handler_spec.rb
index 051270144..71645225f 100755
--- a/spec/unit/configurer/fact_handler_spec.rb
+++ b/spec/unit/configurer/fact_handler_spec.rb
@@ -1,6 +1,6 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
require 'puppet/configurer'
require 'puppet/configurer/fact_handler'
@@ -66,7 +66,7 @@ describe Puppet::Configurer::FactHandler do
it "should use the Facts class with the :certname to find the facts" do
Puppet.settings.expects(:value).with(:certname).returns "foo"
- Puppet::Node::Facts.expects(:find).with("foo").returns "myfacts"
+ Puppet::Node::Facts.indirection.expects(:find).with("foo").returns "myfacts"
@facthandler.stubs(:reload_facter)
@facthandler.find_facts.should == "myfacts"
end
@@ -75,7 +75,7 @@ describe Puppet::Configurer::FactHandler do
@facthandler.expects(:reload_facter)
Puppet.settings.expects(:value).with(:certname).returns "myhost"
- Puppet::Node::Facts.expects(:find).with("myhost")
+ Puppet::Node::Facts.indirection.expects(:find).with("myhost")
@facthandler.find_facts
end
@@ -85,7 +85,7 @@ describe Puppet::Configurer::FactHandler do
Puppet.settings.stubs(:value).with(:trace).returns false
Puppet.settings.stubs(:value).with(:certname).returns "myhost"
- Puppet::Node::Facts.expects(:find).raises RuntimeError
+ Puppet::Node::Facts.indirection.expects(:find).raises RuntimeError
lambda { @facthandler.find_facts }.should raise_error(Puppet::Error)
end
diff --git a/spec/unit/configurer/plugin_handler_spec.rb b/spec/unit/configurer/plugin_handler_spec.rb
index 25d2d47af..04a479665 100755
--- a/spec/unit/configurer/plugin_handler_spec.rb
+++ b/spec/unit/configurer/plugin_handler_spec.rb
@@ -1,6 +1,6 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
require 'puppet/configurer'
require 'puppet/configurer/plugin_handler'
@@ -11,6 +11,10 @@ end
describe Puppet::Configurer::PluginHandler do
before do
@pluginhandler = PluginHandlerTester.new
+
+ # PluginHandler#load_plugin has an extra-strong rescue clause
+ # this mock is to make sure that we don't silently ignore errors
+ Puppet.expects(:err).never
end
it "should have a method for downloading plugins" do
@@ -80,7 +84,7 @@ describe Puppet::Configurer::PluginHandler do
end
it "should not try to load files that don't exist" do
- FileTest.expects(:exist?).with("foo").returns true
+ FileTest.expects(:exist?).with("foo").returns false
@pluginhandler.expects(:load).never
@pluginhandler.load_plugin("foo")
diff --git a/spec/unit/configurer_spec.rb b/spec/unit/configurer_spec.rb
index e34e6fffb..f8acdd002 100755
--- a/spec/unit/configurer_spec.rb
+++ b/spec/unit/configurer_spec.rb
@@ -3,7 +3,7 @@
# Created by Luke Kanies on 2007-11-12.
# Copyright (c) 2007. All rights reserved.
-require File.dirname(__FILE__) + '/../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
require 'puppet/configurer'
describe Puppet::Configurer do
@@ -72,14 +72,6 @@ describe Puppet::Configurer do
end
end
-describe Puppet::Configurer, "when initializing a report" do
- it "should return an instance of a transaction report" do
- Puppet.settings.stubs(:use).returns(true)
- @agent = Puppet::Configurer.new
- @agent.initialize_report.should be_instance_of(Puppet::Transaction::Report)
- end
-end
-
describe Puppet::Configurer, "when executing a catalog run" do
before do
Puppet.settings.stubs(:use).returns(true)
@@ -90,6 +82,7 @@ describe Puppet::Configurer, "when executing a catalog run" do
@catalog.stubs(:apply)
@agent.stubs(:retrieve_catalog).returns @catalog
@agent.stubs(:save_last_run_summary)
+ Puppet::Transaction::Report.indirection.stubs(:save)
end
it "should prepare for the run" do
@@ -99,32 +92,33 @@ describe Puppet::Configurer, "when executing a catalog run" do
end
it "should initialize a transaction report if one is not provided" do
- report = Puppet::Transaction::Report.new
- @agent.expects(:initialize_report).returns report
+ report = Puppet::Transaction::Report.new("apply")
+ Puppet::Transaction::Report.expects(:new).at_least_once.returns report
@agent.run
end
it "should pass the new report to the catalog" do
- report = Puppet::Transaction::Report.new
- @agent.stubs(:initialize_report).returns report
+ report = Puppet::Transaction::Report.new("apply")
+ Puppet::Transaction::Report.stubs(:new).returns report
@catalog.expects(:apply).with{|options| options[:report] == report}
@agent.run
end
it "should use the provided report if it was passed one" do
- report = Puppet::Transaction::Report.new
- @agent.expects(:initialize_report).never
+ report = Puppet::Transaction::Report.new("apply")
+ Puppet::Transaction::Report.expects(:new).never
@catalog.expects(:apply).with{|options| options[:report] == report}
@agent.run(:report => report)
end
it "should set the report as a log destination" do
- report = stub 'report'
- @agent.expects(:initialize_report).returns report
+ report = Puppet::Transaction::Report.new("apply")
+ Puppet::Transaction::Report.expects(:new).returns report
+ @agent.stubs(:send_report)
Puppet::Util::Log.expects(:newdestination).with(report)
@agent.run
@@ -174,16 +168,16 @@ describe Puppet::Configurer, "when executing a catalog run" do
end
it "should send the report" do
- report = Puppet::Transaction::Report.new
- @agent.expects(:initialize_report).returns report
+ report = Puppet::Transaction::Report.new("apply")
+ Puppet::Transaction::Report.expects(:new).returns(report)
@agent.expects(:send_report).with { |r, trans| r == report }
@agent.run
end
it "should send the transaction report with a reference to the transaction if a run was actually made" do
- report = Puppet::Transaction::Report.new
- @agent.expects(:initialize_report).returns report
+ report = Puppet::Transaction::Report.new("apply")
+ Puppet::Transaction::Report.expects(:new).returns(report)
trans = stub 'transaction'
@catalog.expects(:apply).returns trans
@@ -196,8 +190,8 @@ describe Puppet::Configurer, "when executing a catalog run" do
it "should send the transaction report even if the catalog could not be retrieved" do
@agent.expects(:retrieve_catalog).returns nil
- report = Puppet::Transaction::Report.new
- @agent.expects(:initialize_report).returns report
+ report = Puppet::Transaction::Report.new("apply")
+ Puppet::Transaction::Report.expects(:new).returns(report)
@agent.expects(:send_report)
@agent.run
@@ -206,16 +200,17 @@ describe Puppet::Configurer, "when executing a catalog run" do
it "should send the transaction report even if there is a failure" do
@agent.expects(:retrieve_catalog).raises "whatever"
- report = Puppet::Transaction::Report.new
- @agent.expects(:initialize_report).returns report
+ report = Puppet::Transaction::Report.new("apply")
+ Puppet::Transaction::Report.expects(:new).returns(report)
@agent.expects(:send_report)
lambda { @agent.run }.should raise_error
end
it "should remove the report as a log destination when the run is finished" do
- report = Puppet::Transaction::Report.new
- @agent.expects(:initialize_report).returns report
+ report = Puppet::Transaction::Report.new("apply")
+ Puppet::Transaction::Report.expects(:new).returns(report)
+
report.expects(:<<).at_least_once
@agent.run
@@ -223,8 +218,8 @@ describe Puppet::Configurer, "when executing a catalog run" do
end
it "should return the report as the result of the run" do
- report = Puppet::Transaction::Report.new
- @agent.expects(:initialize_report).returns report
+ report = Puppet::Transaction::Report.new("apply")
+ Puppet::Transaction::Report.expects(:new).returns(report)
@agent.run.should equal(report)
end
@@ -236,20 +231,12 @@ describe Puppet::Configurer, "when sending a report" do
@configurer = Puppet::Configurer.new
@configurer.stubs(:save_last_run_summary)
- @report = stub 'report'
+ @report = Puppet::Transaction::Report.new("apply")
@trans = stub 'transaction'
end
- it "should require a report" do
- lambda { @configurer.send_report }.should raise_error(ArgumentError)
- end
-
- it "should allow specification of a transaction" do
- lambda { @configurer.send_report(@report, @trans) }.should_not raise_error(ArgumentError)
- end
-
- it "should use any provided transaction to add metrics to the report" do
- @trans.expects(:generate_report)
+ it "should finalize the report" do
+ @report.expects(:finalize_report)
@configurer.send_report(@report, @trans)
end
@@ -259,51 +246,51 @@ describe Puppet::Configurer, "when sending a report" do
@report.expects(:summary).returns "stuff"
@configurer.expects(:puts).with("stuff")
- @configurer.send_report(@report)
+ @configurer.send_report(@report, nil)
end
it "should not print a report summary if not configured to do so" do
Puppet.settings[:summarize] = false
@configurer.expects(:puts).never
- @configurer.send_report(@report)
+ @configurer.send_report(@report, nil)
end
it "should save the report if reporting is enabled" do
Puppet.settings[:report] = true
- @report.expects(:save)
- @configurer.send_report(@report)
+ Puppet::Transaction::Report.indirection.expects(:save).with(@report)
+ @configurer.send_report(@report, nil)
end
it "should not save the report if reporting is disabled" do
Puppet.settings[:report] = false
- @report.expects(:save).never
- @configurer.send_report(@report)
+ Puppet::Transaction::Report.indirection.expects(:save).never
+ @configurer.send_report(@report, nil)
end
it "should save the last run summary if reporting is enabled" do
Puppet.settings[:report] = true
@configurer.expects(:save_last_run_summary).with(@report)
- @configurer.send_report(@report)
+ @configurer.send_report(@report, nil)
end
it "should not save the last run summary if reporting is disabled" do
Puppet.settings[:report] = false
@configurer.expects(:save_last_run_summary).never
- @configurer.send_report(@report)
+ @configurer.send_report(@report, nil)
end
it "should log but not fail if saving the report fails" do
Puppet.settings[:report] = true
- @report.expects(:save).raises "whatever"
+ Puppet::Transaction::Report.indirection.expects(:save).with(@report).raises "whatever"
Puppet.expects(:err)
- lambda { @configurer.send_report(@report) }.should_not raise_error
+ lambda { @configurer.send_report(@report, nil) }.should_not raise_error
end
end
@@ -357,15 +344,15 @@ describe Puppet::Configurer, "when retrieving a catalog" do
end
it "should first look in the cache for a catalog" do
- Puppet::Resource::Catalog.expects(:find).with { |name, options| options[:ignore_terminus] == true }.returns @catalog
- Puppet::Resource::Catalog.expects(:find).with { |name, options| options[:ignore_cache] == true }.never
+ Puppet::Resource::Catalog.indirection.expects(:find).with { |name, options| options[:ignore_terminus] == true }.returns @catalog
+ Puppet::Resource::Catalog.indirection.expects(:find).with { |name, options| options[:ignore_cache] == true }.never
@agent.retrieve_catalog.should == @catalog
end
it "should compile a new catalog if none is found in the cache" do
- Puppet::Resource::Catalog.expects(:find).with { |name, options| options[:ignore_terminus] == true }.returns nil
- Puppet::Resource::Catalog.expects(:find).with { |name, options| options[:ignore_cache] == true }.returns @catalog
+ Puppet::Resource::Catalog.indirection.expects(:find).with { |name, options| options[:ignore_terminus] == true }.returns nil
+ Puppet::Resource::Catalog.indirection.expects(:find).with { |name, options| options[:ignore_cache] == true }.returns @catalog
@agent.retrieve_catalog.should == @catalog
end
@@ -374,7 +361,7 @@ describe Puppet::Configurer, "when retrieving a catalog" do
describe "when not using a REST terminus for catalogs" do
it "should not pass any facts when retrieving the catalog" do
@agent.expects(:facts_for_uploading).never
- Puppet::Resource::Catalog.expects(:find).with { |name, options|
+ Puppet::Resource::Catalog.indirection.expects(:find).with { |name, options|
options[:facts].nil?
}.returns @catalog
@@ -385,7 +372,7 @@ describe Puppet::Configurer, "when retrieving a catalog" do
describe "when using a REST terminus for catalogs" do
it "should pass the prepared facts and the facts format as arguments when retrieving the catalog" do
@agent.expects(:facts_for_uploading).returns(:facts => "myfacts", :facts_format => :foo)
- Puppet::Resource::Catalog.expects(:find).with { |name, options|
+ Puppet::Resource::Catalog.indirection.expects(:find).with { |name, options|
options[:facts] == "myfacts" and options[:facts_format] == :foo
}.returns @catalog
@@ -394,7 +381,7 @@ describe Puppet::Configurer, "when retrieving a catalog" do
end
it "should use the Catalog class to get its catalog" do
- Puppet::Resource::Catalog.expects(:find).returns @catalog
+ Puppet::Resource::Catalog.indirection.expects(:find).returns @catalog
@agent.retrieve_catalog
end
@@ -402,20 +389,20 @@ describe Puppet::Configurer, "when retrieving a catalog" do
it "should use its certname to retrieve the catalog" do
Facter.stubs(:value).returns "eh"
Puppet.settings[:certname] = "myhost.domain.com"
- Puppet::Resource::Catalog.expects(:find).with { |name, options| name == "myhost.domain.com" }.returns @catalog
+ Puppet::Resource::Catalog.indirection.expects(:find).with { |name, options| name == "myhost.domain.com" }.returns @catalog
@agent.retrieve_catalog
end
it "should default to returning a catalog retrieved directly from the server, skipping the cache" do
- Puppet::Resource::Catalog.expects(:find).with { |name, options| options[:ignore_cache] == true }.returns @catalog
+ Puppet::Resource::Catalog.indirection.expects(:find).with { |name, options| options[:ignore_cache] == true }.returns @catalog
@agent.retrieve_catalog.should == @catalog
end
it "should log and return the cached catalog when no catalog can be retrieved from the server" do
- Puppet::Resource::Catalog.expects(:find).with { |name, options| options[:ignore_cache] == true }.returns nil
- Puppet::Resource::Catalog.expects(:find).with { |name, options| options[:ignore_terminus] == true }.returns @catalog
+ Puppet::Resource::Catalog.indirection.expects(:find).with { |name, options| options[:ignore_cache] == true }.returns nil
+ Puppet::Resource::Catalog.indirection.expects(:find).with { |name, options| options[:ignore_terminus] == true }.returns @catalog
Puppet.expects(:notice)
@@ -423,15 +410,15 @@ describe Puppet::Configurer, "when retrieving a catalog" do
end
it "should not look in the cache for a catalog if one is returned from the server" do
- Puppet::Resource::Catalog.expects(:find).with { |name, options| options[:ignore_cache] == true }.returns @catalog
- Puppet::Resource::Catalog.expects(:find).with { |name, options| options[:ignore_terminus] == true }.never
+ Puppet::Resource::Catalog.indirection.expects(:find).with { |name, options| options[:ignore_cache] == true }.returns @catalog
+ Puppet::Resource::Catalog.indirection.expects(:find).with { |name, options| options[:ignore_terminus] == true }.never
@agent.retrieve_catalog.should == @catalog
end
it "should return the cached catalog when retrieving the remote catalog throws an exception" do
- Puppet::Resource::Catalog.expects(:find).with { |name, options| options[:ignore_cache] == true }.raises "eh"
- Puppet::Resource::Catalog.expects(:find).with { |name, options| options[:ignore_terminus] == true }.returns @catalog
+ Puppet::Resource::Catalog.indirection.expects(:find).with { |name, options| options[:ignore_cache] == true }.raises "eh"
+ Puppet::Resource::Catalog.indirection.expects(:find).with { |name, options| options[:ignore_terminus] == true }.returns @catalog
@agent.retrieve_catalog.should == @catalog
end
@@ -439,7 +426,7 @@ describe Puppet::Configurer, "when retrieving a catalog" do
it "should log and return nil if no catalog can be retrieved from the server and :usecacheonfailure is disabled" do
Puppet.stubs(:[])
Puppet.expects(:[]).with(:usecacheonfailure).returns false
- Puppet::Resource::Catalog.expects(:find).with { |name, options| options[:ignore_cache] == true }.returns nil
+ Puppet::Resource::Catalog.indirection.expects(:find).with { |name, options| options[:ignore_cache] == true }.returns nil
Puppet.expects(:warning)
@@ -447,21 +434,21 @@ describe Puppet::Configurer, "when retrieving a catalog" do
end
it "should return nil if no cached catalog is available and no catalog can be retrieved from the server" do
- Puppet::Resource::Catalog.expects(:find).with { |name, options| options[:ignore_cache] == true }.returns nil
- Puppet::Resource::Catalog.expects(:find).with { |name, options| options[:ignore_terminus] == true }.returns nil
+ Puppet::Resource::Catalog.indirection.expects(:find).with { |name, options| options[:ignore_cache] == true }.returns nil
+ Puppet::Resource::Catalog.indirection.expects(:find).with { |name, options| options[:ignore_terminus] == true }.returns nil
@agent.retrieve_catalog.should be_nil
end
it "should convert the catalog before returning" do
- Puppet::Resource::Catalog.stubs(:find).returns @catalog
+ Puppet::Resource::Catalog.indirection.stubs(:find).returns @catalog
@agent.expects(:convert_catalog).with { |cat, dur| cat == @catalog }.returns "converted catalog"
@agent.retrieve_catalog.should == "converted catalog"
end
it "should return nil if there is an error while retrieving the catalog" do
- Puppet::Resource::Catalog.expects(:find).raises "eh"
+ Puppet::Resource::Catalog.indirection.expects(:find).at_least_once.raises "eh"
@agent.retrieve_catalog.should be_nil
end
diff --git a/spec/unit/daemon_spec.rb b/spec/unit/daemon_spec.rb
index e24db7881..282a2bcbf 100755
--- a/spec/unit/daemon_spec.rb
+++ b/spec/unit/daemon_spec.rb
@@ -1,6 +1,6 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
require 'puppet/daemon'
def without_warnings
diff --git a/spec/unit/dsl/resource_api_spec.rb b/spec/unit/dsl/resource_api_spec.rb
index b36a67f30..13aa6a437 100755
--- a/spec/unit/dsl/resource_api_spec.rb
+++ b/spec/unit/dsl/resource_api_spec.rb
@@ -1,6 +1,6 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
require 'puppet/dsl/resource_api'
diff --git a/spec/unit/dsl/resource_type_api_spec.rb b/spec/unit/dsl/resource_type_api_spec.rb
index c9a5d272f..795ce2868 100755
--- a/spec/unit/dsl/resource_type_api_spec.rb
+++ b/spec/unit/dsl/resource_type_api_spec.rb
@@ -1,6 +1,6 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
require 'puppet/dsl/resource_type_api'
diff --git a/spec/unit/file_bucket/dipper_spec.rb b/spec/unit/file_bucket/dipper_spec.rb
index 799e899e7..189a3d870 100755
--- a/spec/unit/file_bucket/dipper_spec.rb
+++ b/spec/unit/file_bucket/dipper_spec.rb
@@ -1,122 +1,114 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
+
+require 'pathname'
require 'puppet/file_bucket/dipper'
+require 'puppet/indirector/file_bucket_file/rest'
+
describe Puppet::FileBucket::Dipper do
- before do
- ['/my/file'].each do |x|
- Puppet::FileBucket::Dipper.any_instance.stubs(:absolutize_path).with(x).returns(x)
- end
+ include PuppetSpec::Files
+
+ def make_tmp_file(contents)
+ file = tmpfile("file_bucket_file")
+ File.open(file, 'w') { |f| f.write(contents) }
+ file
end
- it "should fail in an informative way when there are failures backing up to the server" do
- File.stubs(:exist?).returns true
- File.stubs(:read).returns "content"
+ it "should fail in an informative way when there are failures checking for the file on the server" do
+ @dipper = Puppet::FileBucket::Dipper.new(:Path => "/my/bucket")
+
+ file = make_tmp_file('contents')
+ Puppet::FileBucket::File.indirection.expects(:head).raises ArgumentError
+ lambda { @dipper.backup(file) }.should raise_error(Puppet::Error)
+ end
+
+ it "should fail in an informative way when there are failures backing up to the server" do
@dipper = Puppet::FileBucket::Dipper.new(:Path => "/my/bucket")
- filemock = stub "bucketfile"
- Puppet::FileBucket::File.stubs(:new).returns(filemock)
- filemock.expects(:name).returns "name"
- filemock.expects(:save).raises ArgumentError
+ file = make_tmp_file('contents')
+ Puppet::FileBucket::File.indirection.expects(:head).returns false
+ Puppet::FileBucket::File.indirection.expects(:save).raises ArgumentError
- lambda { @dipper.backup("/my/file") }.should raise_error(Puppet::Error)
+ lambda { @dipper.backup(file) }.should raise_error(Puppet::Error)
end
it "should backup files to a local bucket" do
- @dipper = Puppet::FileBucket::Dipper.new(
- :Path => "/my/bucket"
- )
+ Puppet[:bucketdir] = "/non/existent/directory"
+ file_bucket = tmpdir("bucket")
- File.stubs(:exist?).returns true
- File.stubs(:read).with("/my/file").returns "my contents"
+ @dipper = Puppet::FileBucket::Dipper.new(:Path => file_bucket)
- bucketfile = stub "bucketfile"
- bucketfile.stubs(:name).returns('md5/DIGEST123')
- bucketfile.stubs(:checksum_data).returns("DIGEST123")
- bucketfile.expects(:save).with('md5/DIGEST123')
+ file = make_tmp_file('my contents')
+ checksum = "2975f560750e71c478b8e3b39a956adb"
+ Digest::MD5.hexdigest('my contents').should == checksum
+ @dipper.backup(file).should == checksum
+ File.exists?("#{file_bucket}/2/9/7/5/f/5/6/0/2975f560750e71c478b8e3b39a956adb/contents").should == true
+ end
+
+ it "should not backup a file that is already in the bucket" do
+ @dipper = Puppet::FileBucket::Dipper.new(:Path => "/my/bucket")
- Puppet::FileBucket::File.stubs(:new).with(
-
- "my contents",
- :bucket_path => '/my/bucket',
-
- :path => '/my/file'
- ).returns(bucketfile)
+ file = make_tmp_file('my contents')
+ checksum = Digest::MD5.hexdigest('my contents')
- @dipper.backup("/my/file").should == "DIGEST123"
+ Puppet::FileBucket::File.indirection.expects(:head).returns true
+ Puppet::FileBucket::File.indirection.expects(:save).never
+ @dipper.backup(file).should == checksum
end
it "should retrieve files from a local bucket" do
- @dipper = Puppet::FileBucket::Dipper.new(
- :Path => "/my/bucket"
- )
+ @dipper = Puppet::FileBucket::Dipper.new(:Path => "/my/bucket")
+
+ checksum = Digest::MD5.hexdigest('my contents')
- File.stubs(:exist?).returns true
- File.stubs(:read).with("/my/file").returns "my contents"
+ request = nil
- bucketfile = stub "bucketfile"
- bucketfile.stubs(:to_s).returns "Content"
+ Puppet::FileBucketFile::File.any_instance.expects(:find).with{ |r| request = r }.once.returns(Puppet::FileBucket::File.new('my contents'))
- Puppet::FileBucket::File.expects(:find).with{|x,opts|
- x == 'md5/DIGEST123'
- }.returns(bucketfile)
+ @dipper.getfile(checksum).should == 'my contents'
- @dipper.getfile("DIGEST123").should == "Content"
+ request.key.should == "md5/#{checksum}"
end
it "should backup files to a remote server" do
+ @dipper = Puppet::FileBucket::Dipper.new(:Server => "puppetmaster", :Port => "31337")
- @dipper = Puppet::FileBucket::Dipper.new(
-
- :Server => "puppetmaster",
-
- :Port => "31337"
- )
+ file = make_tmp_file('my contents')
+ checksum = Digest::MD5.hexdigest('my contents')
- File.stubs(:exist?).returns true
- File.stubs(:read).with("/my/file").returns "my contents"
+ real_path = Pathname.new(file).realpath
- bucketfile = stub "bucketfile"
- bucketfile.stubs(:name).returns('md5/DIGEST123')
- bucketfile.stubs(:checksum_data).returns("DIGEST123")
- bucketfile.expects(:save).with('https://puppetmaster:31337/production/file_bucket_file/md5/DIGEST123')
+ request1 = nil
+ request2 = nil
+ Puppet::FileBucketFile::Rest.any_instance.expects(:head).with { |r| request1 = r }.once.returns(nil)
+ Puppet::FileBucketFile::Rest.any_instance.expects(:save).with { |r| request2 = r }.once
- Puppet::FileBucket::File.stubs(:new).with(
-
- "my contents",
- :bucket_path => nil,
-
- :path => '/my/file'
- ).returns(bucketfile)
-
- @dipper.backup("/my/file").should == "DIGEST123"
+ @dipper.backup(file).should == checksum
+ [request1, request2].each do |r|
+ r.server.should == 'puppetmaster'
+ r.port.should == 31337
+ r.key.should == "md5/#{checksum}"
+ end
end
it "should retrieve files from a remote server" do
+ @dipper = Puppet::FileBucket::Dipper.new(:Server => "puppetmaster", :Port => "31337")
- @dipper = Puppet::FileBucket::Dipper.new(
-
- :Server => "puppetmaster",
-
- :Port => "31337"
- )
+ checksum = Digest::MD5.hexdigest('my contents')
- File.stubs(:exist?).returns true
- File.stubs(:read).with("/my/file").returns "my contents"
+ request = nil
- bucketfile = stub "bucketfile"
- bucketfile.stubs(:to_s).returns "Content"
+ Puppet::FileBucketFile::Rest.any_instance.expects(:find).with { |r| request = r }.returns(Puppet::FileBucket::File.new('my contents'))
- Puppet::FileBucket::File.expects(:find).with{|x,opts|
- x == 'https://puppetmaster:31337/production/file_bucket_file/md5/DIGEST123'
- }.returns(bucketfile)
+ @dipper.getfile(checksum).should == "my contents"
- @dipper.getfile("DIGEST123").should == "Content"
+ request.server.should == 'puppetmaster'
+ request.port.should == 31337
+ request.key.should == "md5/#{checksum}"
end
-
-
end
diff --git a/spec/unit/file_bucket/file_spec.rb b/spec/unit/file_bucket/file_spec.rb
index 3ad70c203..6873264df 100644
--- a/spec/unit/file_bucket/file_spec.rb
+++ b/spec/unit/file_bucket/file_spec.rb
@@ -7,13 +7,16 @@ require 'digest/md5'
require 'digest/sha1'
describe Puppet::FileBucket::File do
+ include PuppetSpec::Files
+
before do
# this is the default from spec_helper, but it keeps getting reset at odd times
- Puppet[:bucketdir] = "/dev/null/bucket"
+ @bucketdir = tmpdir('bucket')
+ Puppet[:bucketdir] = @bucketdir
@digest = "4a8ec4fa5f01b4ab1a0ab8cbccb709f0"
@checksum = "{md5}4a8ec4fa5f01b4ab1a0ab8cbccb709f0"
- @dir = '/dev/null/bucket/4/a/8/e/c/4/f/a/4a8ec4fa5f01b4ab1a0ab8cbccb709f0'
+ @dir = File.join(@bucketdir, '4/a/8/e/c/4/f/a/4a8ec4fa5f01b4ab1a0ab8cbccb709f0')
@contents = "file contents"
end
@@ -22,17 +25,6 @@ describe Puppet::FileBucket::File do
Puppet::FileBucket::File.new(@contents).to_s.should == @contents
end
- it "should calculate the checksum type from the passed in checksum" do
- Puppet::FileBucket::File.new(@contents, :checksum => @checksum).checksum_type.should == "md5"
- end
-
- it "should allow contents to be specified in a block" do
- bucket = Puppet::FileBucket::File.new(nil) do |fb|
- fb.contents = "content"
- end
- bucket.contents.should == "content"
- end
-
it "should raise an error if changing content" do
x = Puppet::FileBucket::File.new("first")
proc { x.contents = "new" }.should raise_error
@@ -42,14 +34,6 @@ describe Puppet::FileBucket::File do
proc { Puppet::FileBucket::File.new(5) }.should raise_error(ArgumentError)
end
- it "should raise an error if setting contents to a non-string" do
- proc do
- Puppet::FileBucket::File.new(nil) do |x|
- x.contents = 5
- end
- end.should raise_error(ArgumentError)
- end
-
it "should set the contents appropriately" do
Puppet::FileBucket::File.new(@contents).contents.should == @contents
end
@@ -62,48 +46,13 @@ describe Puppet::FileBucket::File do
Puppet::FileBucket::File.new(@contents).checksum.should == @checksum
end
- it "should remove the old checksum value if the algorithm is changed" do
- sum = Puppet::FileBucket::File.new(@contents)
- sum.checksum.should_not be_nil
-
- newsum = Digest::SHA1.hexdigest(@contents).to_s
- sum.checksum_type = :sha1
- sum.checksum.should == "{sha1}#{newsum}"
- end
-
- it "should support specifying the checksum_type during initialization" do
- sum = Puppet::FileBucket::File.new(@contents, :checksum_type => :sha1)
- sum.checksum_type.should == :sha1
- end
-
- it "should fail when an unsupported checksum_type is used" do
- proc { Puppet::FileBucket::File.new(@contents, :checksum_type => :nope) }.should raise_error(ArgumentError)
- end
-
- it "should fail if given an checksum at initialization that does not match the contents" do
- proc { Puppet::FileBucket::File.new(@contents, :checksum => "{md5}00000000000000000000000000000000") }.should raise_error(RuntimeError)
- end
-
- it "should fail if assigned a checksum that does not match the contents" do
- bucket = Puppet::FileBucket::File.new(@contents)
- proc { bucket.checksum = "{md5}00000000000000000000000000000000" }.should raise_error(RuntimeError)
- end
-
describe "when using back-ends" do
it "should redirect using Puppet::Indirector" do
Puppet::Indirector::Indirection.instance(:file_bucket_file).model.should equal(Puppet::FileBucket::File)
end
it "should have a :save instance method" do
- Puppet::FileBucket::File.new("mysum").should respond_to(:save)
- end
-
- it "should respond to :find" do
- Puppet::FileBucket::File.should respond_to(:find)
- end
-
- it "should respond to :destroy" do
- Puppet::FileBucket::File.should respond_to(:destroy)
+ Puppet::FileBucket::File.indirection.should respond_to(:save)
end
end
@@ -116,7 +65,7 @@ describe Puppet::FileBucket::File do
mockfile.expects(:print).with(@contents)
::File.expects(:open).with("#{@dir}/contents", ::File::WRONLY|::File::CREAT, 0440).yields(mockfile)
- Puppet::FileBucket::File.new(@contents).save
+ Puppet::FileBucket::File.indirection.save(Puppet::FileBucket::File.new(@contents))
end
it "should make any directories necessary for storage" do
@@ -127,30 +76,10 @@ describe Puppet::FileBucket::File do
::File.expects(:open).with("#{@dir}/contents", ::File::WRONLY|::File::CREAT, 0440)
::File.expects(:exist?).with("#{@dir}/contents").returns false
- Puppet::FileBucket::File.new(@contents).save
- end
-
- it "should append the path to the paths file" do
- remote_path = '/path/on/the/remote/box'
-
- ::File.expects(:directory?).with(@dir).returns(true)
- ::File.expects(:open).with("#{@dir}/contents", ::File::WRONLY|::File::CREAT, 0440)
- ::File.expects(:exist?).with("#{@dir}/contents").returns false
-
- mockfile = mock "file"
- mockfile.expects(:puts).with('/path/on/the/remote/box')
- ::File.expects(:exist?).with("#{@dir}/paths").returns false
- ::File.expects(:open).with("#{@dir}/paths", ::File::WRONLY|::File::CREAT|::File::APPEND).yields mockfile
- Puppet::FileBucket::File.new(@contents, :path => remote_path).save
-
+ Puppet::FileBucket::File.indirection.save(Puppet::FileBucket::File.new(@contents))
end
end
- it "should accept a path" do
- remote_path = '/path/on/the/remote/box'
- Puppet::FileBucket::File.new(@contents, :path => remote_path).path.should == remote_path
- end
-
it "should return a url-ish name" do
Puppet::FileBucket::File.new(@contents).name.should == "md5/4a8ec4fa5f01b4ab1a0ab8cbccb709f0"
end
@@ -160,18 +89,6 @@ describe Puppet::FileBucket::File do
lambda { bucket.name = "sha1/4a8ec4fa5f01b4ab1a0ab8cbccb709f0/new/path" }.should raise_error
end
- it "should accept a url-ish name" do
- bucket = Puppet::FileBucket::File.new(@contents)
- lambda { bucket.name = "sha1/034fa2ed8e211e4d20f20e792d777f4a30af1a93/new/path" }.should_not raise_error
- bucket.checksum_type.should == "sha1"
- bucket.checksum_data.should == '034fa2ed8e211e4d20f20e792d777f4a30af1a93'
- bucket.path.should == "new/path"
- end
-
- it "should return a url-ish name with a path" do
- Puppet::FileBucket::File.new(@contents, :path => 'my/path').name.should == "md5/4a8ec4fa5f01b4ab1a0ab8cbccb709f0/my/path"
- end
-
it "should convert the contents to PSON" do
Puppet::FileBucket::File.new(@contents).to_pson.should == '{"contents":"file contents"}'
end
@@ -187,41 +104,36 @@ describe Puppet::FileBucket::File do
::File.expects(:open).with("#{@dir}/contents", ::File::WRONLY|::File::CREAT, 0440)
bucketfile = Puppet::FileBucket::File.new(@contents)
- bucketfile.save
+ Puppet::FileBucket::File.indirection.save(bucketfile)
+
+ end
+ def make_bucketed_file
+ FileUtils.mkdir_p(@dir)
+ File.open("#{@dir}/contents", 'w') { |f| f.write @contents }
end
describe "using the indirector's find method" do
it "should return nil if a file doesn't exist" do
- ::File.expects(:exist?).with("#{@dir}/contents").returns false
-
- bucketfile = Puppet::FileBucket::File.find("{md5}#{@digest}")
+ bucketfile = Puppet::FileBucket::File.indirection.find("md5/#{@digest}")
bucketfile.should == nil
end
it "should find a filebucket if the file exists" do
- ::File.expects(:exist?).with("#{@dir}/contents").returns true
- ::File.expects(:exist?).with("#{@dir}/paths").returns false
- ::File.expects(:read).with("#{@dir}/contents").returns @contents
-
- bucketfile = Puppet::FileBucket::File.find("{md5}#{@digest}")
+ make_bucketed_file
+ bucketfile = Puppet::FileBucket::File.indirection.find("md5/#{@digest}")
bucketfile.should_not == nil
end
describe "using RESTish digest notation" do
it "should return nil if a file doesn't exist" do
- ::File.expects(:exist?).with("#{@dir}/contents").returns false
-
- bucketfile = Puppet::FileBucket::File.find("md5/#{@digest}")
+ bucketfile = Puppet::FileBucket::File.indirection.find("md5/#{@digest}")
bucketfile.should == nil
end
it "should find a filebucket if the file exists" do
- ::File.expects(:exist?).with("#{@dir}/contents").returns true
- ::File.expects(:exist?).with("#{@dir}/paths").returns false
- ::File.expects(:read).with("#{@dir}/contents").returns @contents
-
- bucketfile = Puppet::FileBucket::File.find("md5/#{@digest}")
+ make_bucketed_file
+ bucketfile = Puppet::FileBucket::File.indirection.find("md5/#{@digest}")
bucketfile.should_not == nil
end
diff --git a/spec/unit/file_collection/lookup_spec.rb b/spec/unit/file_collection/lookup_spec.rb
index 2454cc833..138949a96 100755
--- a/spec/unit/file_collection/lookup_spec.rb
+++ b/spec/unit/file_collection/lookup_spec.rb
@@ -1,6 +1,6 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
require 'puppet/file_collection/lookup'
class LookupTester
diff --git a/spec/unit/file_collection_spec.rb b/spec/unit/file_collection_spec.rb
index 08621ccac..09888f425 100755
--- a/spec/unit/file_collection_spec.rb
+++ b/spec/unit/file_collection_spec.rb
@@ -1,6 +1,6 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
require 'puppet/file_collection'
diff --git a/spec/unit/file_serving/base_spec.rb b/spec/unit/file_serving/base_spec.rb
index b939bcaa3..3449c8d0e 100755
--- a/spec/unit/file_serving/base_spec.rb
+++ b/spec/unit/file_serving/base_spec.rb
@@ -1,6 +1,6 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
require 'puppet/file_serving/base'
diff --git a/spec/unit/file_serving/configuration/parser_spec.rb b/spec/unit/file_serving/configuration/parser_spec.rb
index 36e721885..46cdc1c45 100755
--- a/spec/unit/file_serving/configuration/parser_spec.rb
+++ b/spec/unit/file_serving/configuration/parser_spec.rb
@@ -1,6 +1,6 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../../../spec_helper')
require 'puppet/file_serving/configuration/parser'
diff --git a/spec/unit/file_serving/configuration_spec.rb b/spec/unit/file_serving/configuration_spec.rb
index 3e11caa08..3c6113165 100755
--- a/spec/unit/file_serving/configuration_spec.rb
+++ b/spec/unit/file_serving/configuration_spec.rb
@@ -1,6 +1,6 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
require 'puppet/file_serving/configuration'
diff --git a/spec/unit/file_serving/content_spec.rb b/spec/unit/file_serving/content_spec.rb
index 92b747448..576cbde1f 100755
--- a/spec/unit/file_serving/content_spec.rb
+++ b/spec/unit/file_serving/content_spec.rb
@@ -1,6 +1,6 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
require 'puppet/file_serving/content'
diff --git a/spec/unit/file_serving/fileset_spec.rb b/spec/unit/file_serving/fileset_spec.rb
index 9a90cff15..1ef9cdc50 100755
--- a/spec/unit/file_serving/fileset_spec.rb
+++ b/spec/unit/file_serving/fileset_spec.rb
@@ -1,6 +1,6 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
require 'puppet/file_serving/fileset'
@@ -306,6 +306,7 @@ end
describe Puppet::FileServing::Fileset, "when merging other filesets" do
before do
@paths = %w{/first/path /second/path /third/path}
+ File.stubs(:lstat).returns stub("stat", :directory? => false)
@filesets = @paths.collect do |path|
File.stubs(:lstat).with(path).returns stub("stat", :directory? => true)
diff --git a/spec/unit/file_serving/indirection_hooks_spec.rb b/spec/unit/file_serving/indirection_hooks_spec.rb
index 683efa7c1..1c7f55da8 100755
--- a/spec/unit/file_serving/indirection_hooks_spec.rb
+++ b/spec/unit/file_serving/indirection_hooks_spec.rb
@@ -3,7 +3,7 @@
# Created by Luke Kanies on 2007-10-18.
# Copyright (c) 2007. All rights reserved.
-require File.dirname(__FILE__) + '/../../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
require 'puppet/file_serving/indirection_hooks'
diff --git a/spec/unit/file_serving/metadata_spec.rb b/spec/unit/file_serving/metadata_spec.rb
index aa0dcd511..34794cca9 100755
--- a/spec/unit/file_serving/metadata_spec.rb
+++ b/spec/unit/file_serving/metadata_spec.rb
@@ -1,6 +1,6 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
require 'puppet/file_serving/metadata'
@@ -230,8 +230,8 @@ describe Puppet::FileServing::Metadata, " when collecting attributes" do
@metadata.destination.should == "/path/to/link"
end
- it "should produce tab-separated mode, type, owner, group, and destination for xmlrpc" do
- pending "We'd like this to be true, but we need to always collect the checksum because in the server/client/server round trip we lose the distintion between manage and follow."
+ pending "should produce tab-separated mode, type, owner, group, and destination for xmlrpc" do
+ # "We'd like this to be true, but we need to always collect the checksum because in the server/client/server round trip we lose the distintion between manage and follow."
@metadata.attributes_with_tabs.should == "#{0755}\tlink\t10\t20\t/path/to/link"
end
@@ -255,8 +255,8 @@ describe Puppet::FileServing::Metadata, " when pointing to a link" do
@file.collect
@file.destination.should == "/some/other/path"
end
- it "should not collect the checksum if links are :manage" do
- pending "We'd like this to be true, but we need to always collect the checksum because in the server/client/server round trip we lose the distintion between manage and follow."
+ pending "should not collect the checksum if links are :manage" do
+ # We'd like this to be true, but we need to always collect the checksum because in the server/client/server round trip we lose the distintion between manage and follow.
@file.collect
@file.checksum.should be_nil
end
diff --git a/spec/unit/file_serving/mount/file_spec.rb b/spec/unit/file_serving/mount/file_spec.rb
index 56b4f54f1..792ce951c 100755
--- a/spec/unit/file_serving/mount/file_spec.rb
+++ b/spec/unit/file_serving/mount/file_spec.rb
@@ -1,6 +1,6 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../../../spec_helper')
require 'puppet/file_serving/mount/file'
module FileServingMountTesting
diff --git a/spec/unit/file_serving/mount/modules_spec.rb b/spec/unit/file_serving/mount/modules_spec.rb
index 5450b85ad..1213f4fa5 100755
--- a/spec/unit/file_serving/mount/modules_spec.rb
+++ b/spec/unit/file_serving/mount/modules_spec.rb
@@ -1,6 +1,6 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../../../spec_helper')
require 'puppet/file_serving/mount/modules'
describe Puppet::FileServing::Mount::Modules do
diff --git a/spec/unit/file_serving/mount/plugins_spec.rb b/spec/unit/file_serving/mount/plugins_spec.rb
index b48b52509..6aa9ae927 100755
--- a/spec/unit/file_serving/mount/plugins_spec.rb
+++ b/spec/unit/file_serving/mount/plugins_spec.rb
@@ -1,6 +1,6 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../../../spec_helper')
require 'puppet/file_serving/mount/plugins'
describe Puppet::FileServing::Mount::Plugins do
diff --git a/spec/unit/file_serving/mount_spec.rb b/spec/unit/file_serving/mount_spec.rb
index 6eb0d4d9f..2bfe643f6 100755
--- a/spec/unit/file_serving/mount_spec.rb
+++ b/spec/unit/file_serving/mount_spec.rb
@@ -1,6 +1,6 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
require 'puppet/file_serving/mount'
describe Puppet::FileServing::Mount do
diff --git a/spec/unit/file_serving/terminus_helper_spec.rb b/spec/unit/file_serving/terminus_helper_spec.rb
index f46da1e1f..36cf0daf3 100755
--- a/spec/unit/file_serving/terminus_helper_spec.rb
+++ b/spec/unit/file_serving/terminus_helper_spec.rb
@@ -3,7 +3,7 @@
# Created by Luke Kanies on 2007-10-22.
# Copyright (c) 2007. All rights reserved.
-require File.dirname(__FILE__) + '/../../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
require 'puppet/file_serving/terminus_helper'
diff --git a/spec/unit/indirector/active_record_spec.rb b/spec/unit/indirector/active_record_spec.rb
index 40af146c8..4765cc5ea 100755
--- a/spec/unit/indirector/active_record_spec.rb
+++ b/spec/unit/indirector/active_record_spec.rb
@@ -1,6 +1,6 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
require 'puppet/rails'
require 'puppet/indirector/active_record'
diff --git a/spec/unit/indirector/catalog/active_record_spec.rb b/spec/unit/indirector/catalog/active_record_spec.rb
index 4e9d049a1..da1d77582 100755
--- a/spec/unit/indirector/catalog/active_record_spec.rb
+++ b/spec/unit/indirector/catalog/active_record_spec.rb
@@ -1,10 +1,28 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../../../spec_helper')
-describe "Puppet::Resource::Catalog::ActiveRecord" do
- confine "Missing Rails" => Puppet.features.rails?
+describe "Puppet::Resource::Catalog::ActiveRecord", :if => Puppet.features.rails? do
+ require 'puppet/rails'
+
+ before :all do
+ class Tableless < ActiveRecord::Base
+ def self.columns
+ @columns ||= []
+ end
+ def self.column(name, sql_type=nil, default=nil, null=true)
+ columns << ActiveRecord::ConnectionAdapters::Column.new(name.to_s, default, sql_type.to_s, null)
+ end
+ end
+
+ class Host < Tableless
+ column :name, :string, :null => false
+ column :ip, :string
+ column :environment, :string
+ column :last_compile, :datetime
+ end
+ end
before do
require 'puppet/indirector/catalog/active_record'
@@ -76,15 +94,17 @@ describe "Puppet::Resource::Catalog::ActiveRecord" do
describe "when saving an instance" do
before do
- @host = stub 'host', :name => "foo", :save => nil, :merge_resources => nil, :last_compile= => nil, :ip= => nil, :environment= => nil
+ @host = Host.new(:name => "foo")
+ @host.stubs(:merge_resources)
+ @host.stubs(:save)
@host.stubs(:railsmark).yields
- @node = stub_everything 'node', :parameters => {}
- Puppet::Node.stubs(:find).returns(@node)
+ @node = Puppet::Node.new("foo", :environment => "environment")
+ Puppet::Node.indirection.stubs(:find).with("foo").returns(@node)
Puppet::Rails::Host.stubs(:find_by_name).returns @host
@catalog = Puppet::Resource::Catalog.new("foo")
- @request = stub 'request', :key => "foo", :instance => @catalog
+ @request = Puppet::Indirector::Request.new(:active_record, :save, @catalog)
end
it "should find the Rails host with the same name" do
@@ -111,25 +131,21 @@ describe "Puppet::Resource::Catalog::ActiveRecord" do
it "should set host ip if we could find a matching node" do
@node.stubs(:parameters).returns({"ipaddress" => "192.168.0.1"})
- @host.expects(:ip=).with '192.168.0.1'
-
@terminus.save(@request)
+ @host.ip.should == '192.168.0.1'
end
it "should set host environment if we could find a matching node" do
- @node.stubs(:environment).returns("myenv")
-
- @host.expects(:environment=).with 'myenv'
-
@terminus.save(@request)
+ @host.environment.should == "environment"
end
it "should set the last compile time on the host" do
now = Time.now
Time.expects(:now).returns now
- @host.expects(:last_compile=).with now
@terminus.save(@request)
+ @host.last_compile.should == now
end
it "should save the Rails host instance" do
diff --git a/spec/unit/indirector/catalog/compiler_spec.rb b/spec/unit/indirector/catalog/compiler_spec.rb
index 49b8986eb..a2ab0c6f4 100755
--- a/spec/unit/indirector/catalog/compiler_spec.rb
+++ b/spec/unit/indirector/catalog/compiler_spec.rb
@@ -3,7 +3,7 @@
# Created by Luke Kanies on 2007-9-23.
# Copyright (c) 2007. All rights reserved.
-require File.dirname(__FILE__) + '/../../../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../../../spec_helper')
require 'puppet/indirector/catalog/compiler'
require 'puppet/rails'
@@ -32,8 +32,8 @@ describe Puppet::Resource::Catalog::Compiler do
node1 = stub 'node1', :merge => nil
node2 = stub 'node2', :merge => nil
compiler.stubs(:compile)
- Puppet::Node.stubs(:find).with('node1').returns(node1)
- Puppet::Node.stubs(:find).with('node2').returns(node2)
+ Puppet::Node.indirection.stubs(:find).with('node1').returns(node1)
+ Puppet::Node.indirection.stubs(:find).with('node2').returns(node2)
compiler.find(stub('request', :key => 'node1', :node => 'node1', :options => {}))
compiler.find(stub('node2request', :key => 'node2', :node => 'node2', :options => {}))
@@ -71,12 +71,12 @@ describe Puppet::Resource::Catalog::Compiler do
@name = "me"
@node = Puppet::Node.new @name
@node.stubs(:merge)
- Puppet::Node.stubs(:find).returns @node
+ Puppet::Node.indirection.stubs(:find).returns @node
@request = stub 'request', :key => @name, :node => @name, :options => {}
end
it "should directly use provided nodes" do
- Puppet::Node.expects(:find).never
+ Puppet::Node.indirection.expects(:find).never
@compiler.expects(:compile).with(@node)
@request.stubs(:options).returns(:use_node => @node)
@compiler.find(@request)
@@ -84,7 +84,7 @@ describe Puppet::Resource::Catalog::Compiler do
it "should use the authenticated node name if no request key is provided" do
@request.stubs(:key).returns(nil)
- Puppet::Node.expects(:find).with(@name).returns(@node)
+ Puppet::Node.indirection.expects(:find).with(@name).returns(@node)
@compiler.expects(:compile).with(@node)
@compiler.find(@request)
end
@@ -92,37 +92,37 @@ describe Puppet::Resource::Catalog::Compiler do
it "should use the provided node name by default" do
@request.expects(:key).returns "my_node"
- Puppet::Node.expects(:find).with("my_node").returns @node
+ Puppet::Node.indirection.expects(:find).with("my_node").returns @node
@compiler.expects(:compile).with(@node)
@compiler.find(@request)
end
it "should fail if no node is passed and none can be found" do
- Puppet::Node.stubs(:find).with(@name).returns(nil)
+ Puppet::Node.indirection.stubs(:find).with(@name).returns(nil)
proc { @compiler.find(@request) }.should raise_error(ArgumentError)
end
it "should fail intelligently when searching for a node raises an exception" do
- Puppet::Node.stubs(:find).with(@name).raises "eh"
+ Puppet::Node.indirection.stubs(:find).with(@name).raises "eh"
proc { @compiler.find(@request) }.should raise_error(Puppet::Error)
end
it "should pass the found node to the compiler for compiling" do
- Puppet::Node.expects(:find).with(@name).returns(@node)
+ Puppet::Node.indirection.expects(:find).with(@name).returns(@node)
config = mock 'config'
Puppet::Parser::Compiler.expects(:compile).with(@node)
@compiler.find(@request)
end
it "should extract and save any facts from the request" do
- Puppet::Node.expects(:find).with(@name).returns @node
+ Puppet::Node.indirection.expects(:find).with(@name).returns @node
@compiler.expects(:extract_facts_from_request).with(@request)
Puppet::Parser::Compiler.stubs(:compile)
@compiler.find(@request)
end
it "should return the results of compiling as the catalog" do
- Puppet::Node.stubs(:find).returns(@node)
+ Puppet::Node.indirection.stubs(:find).returns(@node)
config = mock 'config'
result = mock 'result'
@@ -131,7 +131,7 @@ describe Puppet::Resource::Catalog::Compiler do
end
it "should benchmark the compile process" do
- Puppet::Node.stubs(:find).returns(@node)
+ Puppet::Node.indirection.stubs(:find).returns(@node)
@compiler.stubs(:networked?).returns(true)
@compiler.expects(:benchmark).with do |level, message|
level == :notice and message =~ /^Compiled catalog/
@@ -141,7 +141,7 @@ describe Puppet::Resource::Catalog::Compiler do
end
it "should log the benchmark result" do
- Puppet::Node.stubs(:find).returns(@node)
+ Puppet::Node.indirection.stubs(:find).returns(@node)
@compiler.stubs(:networked?).returns(true)
Puppet::Parser::Compiler.stubs(:compile)
@@ -158,11 +158,11 @@ describe Puppet::Resource::Catalog::Compiler do
@request = stub 'request', :options => {}
@facts = Puppet::Node::Facts.new('hostname', "fact" => "value", "architecture" => "i386")
- @facts.stubs(:save).returns(nil)
+ Puppet::Node::Facts.indirection.stubs(:save).returns(nil)
end
it "should do nothing if no facts are provided" do
- Puppet::Node::Facts.expects(:convert_from).never
+ Puppet::Node::Facts.indirection.expects(:convert_from).never
@request.options[:facts] = nil
@compiler.extract_facts_from_request(@request)
@@ -194,7 +194,7 @@ describe Puppet::Resource::Catalog::Compiler do
@request.options[:facts] = "bar"
Puppet::Node::Facts.expects(:convert_from).returns @facts
- @facts.expects(:save)
+ Puppet::Node::Facts.indirection.expects(:save).with(@facts)
@compiler.extract_facts_from_request(@request)
end
@@ -212,7 +212,7 @@ describe Puppet::Resource::Catalog::Compiler do
it "should look node information up via the Node class with the provided key" do
@node.stubs :merge
- Puppet::Node.expects(:find).with(@name).returns(@node)
+ Puppet::Node.indirection.expects(:find).with(@name).returns(@node)
@compiler.find(@request)
end
end
@@ -227,7 +227,7 @@ describe Puppet::Resource::Catalog::Compiler do
@node = mock 'node'
@request = stub 'request', :key => @name, :options => {}
@compiler.stubs(:compile)
- Puppet::Node.stubs(:find).with(@name).returns(@node)
+ Puppet::Node.indirection.stubs(:find).with(@name).returns(@node)
end
it "should add the server's Puppet version to the node's parameters as 'serverversion'" do
diff --git a/spec/unit/indirector/catalog/queue_spec.rb b/spec/unit/indirector/catalog/queue_spec.rb
index 38d40c94a..866113631 100755
--- a/spec/unit/indirector/catalog/queue_spec.rb
+++ b/spec/unit/indirector/catalog/queue_spec.rb
@@ -1,6 +1,6 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../../../spec_helper')
require 'puppet/indirector/catalog/queue'
diff --git a/spec/unit/indirector/catalog/rest_spec.rb b/spec/unit/indirector/catalog/rest_spec.rb
index d61054e16..c887504a2 100755
--- a/spec/unit/indirector/catalog/rest_spec.rb
+++ b/spec/unit/indirector/catalog/rest_spec.rb
@@ -1,6 +1,6 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../../../spec_helper')
require 'puppet/indirector/catalog/rest'
diff --git a/spec/unit/indirector/catalog/yaml_spec.rb b/spec/unit/indirector/catalog/yaml_spec.rb
index 5a30b8268..3bf5b4640 100755
--- a/spec/unit/indirector/catalog/yaml_spec.rb
+++ b/spec/unit/indirector/catalog/yaml_spec.rb
@@ -1,6 +1,6 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../../../spec_helper')
require 'puppet/resource/catalog'
require 'puppet/indirector/catalog/yaml'
diff --git a/spec/unit/indirector/certificate/ca_spec.rb b/spec/unit/indirector/certificate/ca_spec.rb
index 6bf3e26ee..77384ddb8 100755
--- a/spec/unit/indirector/certificate/ca_spec.rb
+++ b/spec/unit/indirector/certificate/ca_spec.rb
@@ -3,7 +3,7 @@
# Created by Luke Kanies on 2008-3-7.
# Copyright (c) 2007. All rights reserved.
-require File.dirname(__FILE__) + '/../../../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../../../spec_helper')
require 'puppet/indirector/certificate/ca'
diff --git a/spec/unit/indirector/certificate/file_spec.rb b/spec/unit/indirector/certificate/file_spec.rb
index 6a8e7d8f4..45dd95cb5 100755
--- a/spec/unit/indirector/certificate/file_spec.rb
+++ b/spec/unit/indirector/certificate/file_spec.rb
@@ -3,7 +3,7 @@
# Created by Luke Kanies on 2008-3-7.
# Copyright (c) 2007. All rights reserved.
-require File.dirname(__FILE__) + '/../../../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../../../spec_helper')
require 'puppet/indirector/certificate/file'
diff --git a/spec/unit/indirector/certificate/rest_spec.rb b/spec/unit/indirector/certificate/rest_spec.rb
index 77b2a67bd..8fd6bff9a 100755
--- a/spec/unit/indirector/certificate/rest_spec.rb
+++ b/spec/unit/indirector/certificate/rest_spec.rb
@@ -1,6 +1,6 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../../../spec_helper')
require 'puppet/indirector/certificate/rest'
diff --git a/spec/unit/indirector/certificate_request/ca_spec.rb b/spec/unit/indirector/certificate_request/ca_spec.rb
index 1bcbc46df..8c25e40f7 100755
--- a/spec/unit/indirector/certificate_request/ca_spec.rb
+++ b/spec/unit/indirector/certificate_request/ca_spec.rb
@@ -3,7 +3,7 @@
# Created by Luke Kanies on 2008-3-7.
# Copyright (c) 2007. All rights reserved.
-require File.dirname(__FILE__) + '/../../../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../../../spec_helper')
require 'puppet/indirector/certificate_request/ca'
diff --git a/spec/unit/indirector/certificate_request/file_spec.rb b/spec/unit/indirector/certificate_request/file_spec.rb
index f18ba2ca8..465d55d3c 100755
--- a/spec/unit/indirector/certificate_request/file_spec.rb
+++ b/spec/unit/indirector/certificate_request/file_spec.rb
@@ -3,7 +3,7 @@
# Created by Luke Kanies on 2008-3-7.
# Copyright (c) 2007. All rights reserved.
-require File.dirname(__FILE__) + '/../../../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../../../spec_helper')
require 'puppet/indirector/certificate_request/file'
diff --git a/spec/unit/indirector/certificate_request/rest_spec.rb b/spec/unit/indirector/certificate_request/rest_spec.rb
index 8b90b46a9..9a8b87439 100755
--- a/spec/unit/indirector/certificate_request/rest_spec.rb
+++ b/spec/unit/indirector/certificate_request/rest_spec.rb
@@ -1,6 +1,6 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../../../spec_helper')
require 'puppet/indirector/certificate_request/rest'
diff --git a/spec/unit/indirector/certificate_revocation_list/ca_spec.rb b/spec/unit/indirector/certificate_revocation_list/ca_spec.rb
index 756185da9..d72a3bb10 100755
--- a/spec/unit/indirector/certificate_revocation_list/ca_spec.rb
+++ b/spec/unit/indirector/certificate_revocation_list/ca_spec.rb
@@ -3,7 +3,7 @@
# Created by Luke Kanies on 2008-3-7.
# Copyright (c) 2007. All rights reserved.
-require File.dirname(__FILE__) + '/../../../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../../../spec_helper')
require 'puppet/indirector/certificate_revocation_list/ca'
diff --git a/spec/unit/indirector/certificate_revocation_list/file_spec.rb b/spec/unit/indirector/certificate_revocation_list/file_spec.rb
index 507942a6a..3284bee35 100755
--- a/spec/unit/indirector/certificate_revocation_list/file_spec.rb
+++ b/spec/unit/indirector/certificate_revocation_list/file_spec.rb
@@ -3,7 +3,7 @@
# Created by Luke Kanies on 2008-3-7.
# Copyright (c) 2007. All rights reserved.
-require File.dirname(__FILE__) + '/../../../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../../../spec_helper')
require 'puppet/indirector/certificate_revocation_list/file'
diff --git a/spec/unit/indirector/certificate_revocation_list/rest_spec.rb b/spec/unit/indirector/certificate_revocation_list/rest_spec.rb
index 8cb32632e..e47a0848c 100755
--- a/spec/unit/indirector/certificate_revocation_list/rest_spec.rb
+++ b/spec/unit/indirector/certificate_revocation_list/rest_spec.rb
@@ -1,6 +1,6 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../../../spec_helper')
require 'puppet/indirector/certificate_revocation_list/rest'
diff --git a/spec/unit/indirector/code_spec.rb b/spec/unit/indirector/code_spec.rb
index 916469a14..452d009f8 100755
--- a/spec/unit/indirector/code_spec.rb
+++ b/spec/unit/indirector/code_spec.rb
@@ -1,6 +1,6 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
require 'puppet/indirector/code'
describe Puppet::Indirector::Code do
diff --git a/spec/unit/indirector/direct_file_server_spec.rb b/spec/unit/indirector/direct_file_server_spec.rb
index 0111b5445..8eab4ad76 100755
--- a/spec/unit/indirector/direct_file_server_spec.rb
+++ b/spec/unit/indirector/direct_file_server_spec.rb
@@ -3,7 +3,7 @@
# Created by Luke Kanies on 2007-10-24.
# Copyright (c) 2007. All rights reserved.
-require File.dirname(__FILE__) + '/../../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
require 'puppet/indirector/direct_file_server'
diff --git a/spec/unit/indirector/envelope_spec.rb b/spec/unit/indirector/envelope_spec.rb
index fb80824c9..2715a2671 100755
--- a/spec/unit/indirector/envelope_spec.rb
+++ b/spec/unit/indirector/envelope_spec.rb
@@ -1,6 +1,6 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
require 'puppet/indirector/envelope'
describe Puppet::Indirector::Envelope do
diff --git a/spec/unit/indirector/exec_spec.rb b/spec/unit/indirector/exec_spec.rb
index acad1ea93..c6726d4b9 100755
--- a/spec/unit/indirector/exec_spec.rb
+++ b/spec/unit/indirector/exec_spec.rb
@@ -1,6 +1,6 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
require 'puppet/indirector/exec'
diff --git a/spec/unit/indirector/facts/active_record_spec.rb b/spec/unit/indirector/facts/active_record_spec.rb
index 0bdcfcb77..71e19e3ca 100755
--- a/spec/unit/indirector/facts/active_record_spec.rb
+++ b/spec/unit/indirector/facts/active_record_spec.rb
@@ -1,13 +1,11 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../../../spec_helper')
require 'puppet/rails'
require 'puppet/node/facts'
-describe "Puppet::Node::Facts::ActiveRecord" do
- confine "Missing Rails" => Puppet.features.rails?
-
+describe "Puppet::Node::Facts::ActiveRecord", :if => Puppet.features.rails? do
before do
require 'puppet/indirector/facts/active_record'
Puppet.features.stubs(:rails?).returns true
diff --git a/spec/unit/indirector/facts/couch_spec.rb b/spec/unit/indirector/facts/couch_spec.rb
index c0dd54b8a..1f86b56f2 100644
--- a/spec/unit/indirector/facts/couch_spec.rb
+++ b/spec/unit/indirector/facts/couch_spec.rb
@@ -1,11 +1,10 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../../../spec_helper')
require 'puppet/node/facts'
-describe "Puppet::Node::Facts::Couch" do
- confine "couchrest gem is missing; cannot test couch terminus" => Puppet.features.couchdb?
+describe "Puppet::Node::Facts::Couch", :if => Puppet.features.couchdb? do
require 'puppet/indirector/facts/couch' if Puppet.features.couchdb?
before do
diff --git a/spec/unit/indirector/facts/facter_spec.rb b/spec/unit/indirector/facts/facter_spec.rb
index 169440915..3129f5ebf 100755
--- a/spec/unit/indirector/facts/facter_spec.rb
+++ b/spec/unit/indirector/facts/facter_spec.rb
@@ -3,7 +3,7 @@
# Created by Luke Kanies on 2007-9-23.
# Copyright (c) 2007. All rights reserved.
-require File.dirname(__FILE__) + '/../../../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../../../spec_helper')
require 'puppet/indirector/facts/facter'
diff --git a/spec/unit/indirector/facts/rest_spec.rb b/spec/unit/indirector/facts/rest_spec.rb
index 19a56921f..03bef4578 100755
--- a/spec/unit/indirector/facts/rest_spec.rb
+++ b/spec/unit/indirector/facts/rest_spec.rb
@@ -1,6 +1,6 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../../../spec_helper')
require 'puppet/indirector/facts/rest'
diff --git a/spec/unit/indirector/facts/yaml_spec.rb b/spec/unit/indirector/facts/yaml_spec.rb
index 37a1bcae0..ae1e97812 100755
--- a/spec/unit/indirector/facts/yaml_spec.rb
+++ b/spec/unit/indirector/facts/yaml_spec.rb
@@ -1,6 +1,6 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../../../spec_helper')
require 'puppet/node/facts'
require 'puppet/indirector/facts/yaml'
diff --git a/spec/unit/indirector/file_bucket_file/file_spec.rb b/spec/unit/indirector/file_bucket_file/file_spec.rb
index aa3ade6b6..edf537a43 100755
--- a/spec/unit/indirector/file_bucket_file/file_spec.rb
+++ b/spec/unit/indirector/file_bucket_file/file_spec.rb
@@ -5,6 +5,8 @@ require ::File.dirname(__FILE__) + '/../../../spec_helper'
require 'puppet/indirector/file_bucket_file/file'
describe Puppet::FileBucketFile::File do
+ include PuppetSpec::Files
+
it "should be a subclass of the Code terminus class" do
Puppet::FileBucketFile::File.superclass.should equal(Puppet::Indirector::Code)
end
@@ -13,194 +15,143 @@ describe Puppet::FileBucketFile::File do
Puppet::FileBucketFile::File.doc.should be_instance_of(String)
end
- describe "when initializing" do
- it "should use the filebucket settings section" do
- Puppet.settings.expects(:use).with(:filebucket)
- Puppet::FileBucketFile::File.new
- end
- end
-
+ describe "non-stubbing tests" do
+ include PuppetSpec::Files
- describe "the find_by_checksum method" do
before do
- # this is the default from spec_helper, but it keeps getting reset at odd times
- Puppet[:bucketdir] = "/dev/null/bucket"
-
- @digest = "4a8ec4fa5f01b4ab1a0ab8cbccb709f0"
- @checksum = "{md5}4a8ec4fa5f01b4ab1a0ab8cbccb709f0"
- @dir = '/dev/null/bucket/4/a/8/e/c/4/f/a/4a8ec4fa5f01b4ab1a0ab8cbccb709f0'
-
- @contents = "file contents"
- end
-
- it "should return nil if a file doesn't exist" do
- ::File.expects(:exist?).with("#{@dir}/contents").returns false
-
- bucketfile = Puppet::FileBucketFile::File.new.send(:find_by_checksum, "{md5}#{@digest}", {})
- bucketfile.should == nil
- end
-
- it "should find a filebucket if the file exists" do
- ::File.expects(:exist?).with("#{@dir}/contents").returns true
- ::File.expects(:exist?).with("#{@dir}/paths").returns false
- ::File.expects(:read).with("#{@dir}/contents").returns @contents
-
- bucketfile = Puppet::FileBucketFile::File.new.send(:find_by_checksum, "{md5}#{@digest}", {})
- bucketfile.should_not == nil
- end
-
- it "should load the paths" do
- paths = ["path1", "path2"]
- ::File.expects(:exist?).with("#{@dir}/contents").returns true
- ::File.expects(:exist?).with("#{@dir}/paths").returns true
- ::File.expects(:read).with("#{@dir}/contents").returns @contents
-
- mockfile = mock "file"
- mockfile.expects(:readlines).returns( paths )
- ::File.expects(:open).with("#{@dir}/paths").yields mockfile
-
- Puppet::FileBucketFile::File.new.send(:find_by_checksum, "{md5}#{@digest}", {}).paths.should == paths
- end
-
- end
-
- describe "when retrieving files" do
- before :each do
- Puppet.settings.stubs(:use)
- @store = Puppet::FileBucketFile::File.new
-
- @digest = "70924d6fa4b2d745185fa4660703a5c0"
- @sum = stub 'sum', :name => @digest
-
- @dir = "/what/ever"
-
- Puppet.stubs(:[]).with(:bucketdir).returns(@dir)
-
- @contents_path = '/what/ever/7/0/9/2/4/d/6/f/70924d6fa4b2d745185fa4660703a5c0/contents'
- @paths_path = '/what/ever/7/0/9/2/4/d/6/f/70924d6fa4b2d745185fa4660703a5c0/paths'
-
- @request = stub 'request', :key => "md5/#{@digest}/remote/path", :options => {}
- end
-
- it "should call find_by_checksum" do
- @store.expects(:find_by_checksum).with{|x,opts| x == "{md5}#{@digest}"}.returns(false)
- @store.find(@request)
+ Puppet[:bucketdir] = tmpdir('bucketdir')
end
- it "should look for the calculated path" do
- ::File.expects(:exist?).with(@contents_path).returns(false)
- @store.find(@request)
- end
-
- it "should return an instance of Puppet::FileBucket::File created with the content if the file exists" do
- content = "my content"
- bucketfile = stub 'bucketfile'
- bucketfile.stubs(:bucket_path)
- bucketfile.stubs(:bucket_path=)
- bucketfile.stubs(:checksum_data).returns(@digest)
- bucketfile.stubs(:checksum).returns(@checksum)
-
- bucketfile.expects(:contents=).with(content)
- Puppet::FileBucket::File.expects(:new).with(nil, {:checksum => "{md5}#{@digest}"}).yields(bucketfile).returns(bucketfile)
+ describe "when diffing files" do
+ def save_bucket_file(contents)
+ bucket_file = Puppet::FileBucket::File.new(contents)
+ Puppet::FileBucket::File.indirection.save(bucket_file)
+ bucket_file.checksum_data
+ end
- ::File.expects(:exist?).with(@contents_path).returns(true)
- ::File.expects(:exist?).with(@paths_path).returns(false)
- ::File.expects(:read).with(@contents_path).returns(content)
+ it "should generate an empty string if there is no diff" do
+ checksum = save_bucket_file("I'm the contents of a file")
+ Puppet::FileBucket::File.indirection.find("md5/#{checksum}", :diff_with => checksum).should == ''
+ end
- @store.find(@request).should equal(bucketfile)
- end
+ it "should generate a proper diff if there is a diff" do
+ checksum1 = save_bucket_file("foo\nbar\nbaz")
+ checksum2 = save_bucket_file("foo\nbiz\nbaz")
+ diff = Puppet::FileBucket::File.indirection.find("md5/#{checksum1}", :diff_with => checksum2)
+ diff.should == <<HERE
+2c2
+< bar
+---
+> biz
+HERE
+ end
- it "should return nil if no file is found" do
- ::File.expects(:exist?).with(@contents_path).returns(false)
- @store.find(@request).should be_nil
- end
+ it "should raise an exception if the hash to diff against isn't found" do
+ checksum = save_bucket_file("whatever")
+ bogus_checksum = "d1bf072d0e2c6e20e3fbd23f022089a1"
+ lambda { Puppet::FileBucket::File.indirection.find("md5/#{checksum}", :diff_with => bogus_checksum) }.should raise_error "could not find diff_with #{bogus_checksum}"
+ end
- it "should fail intelligently if a found file cannot be read" do
- ::File.expects(:exist?).with(@contents_path).returns(true)
- ::File.expects(:read).with(@contents_path).raises(RuntimeError)
- proc { @store.find(@request) }.should raise_error(Puppet::Error)
+ it "should return nil if the hash to diff from isn't found" do
+ checksum = save_bucket_file("whatever")
+ bogus_checksum = "d1bf072d0e2c6e20e3fbd23f022089a1"
+ Puppet::FileBucket::File.indirection.find("md5/#{bogus_checksum}", :diff_with => checksum).should == nil
+ end
end
-
end
- describe "when determining file paths" do
- before do
- Puppet[:bucketdir] = '/dev/null/bucketdir'
- @digest = 'DEADBEEFC0FFEE'
- @bucket = stub_everything "bucket"
- @bucket.expects(:checksum_data).returns(@digest)
- end
-
- it "should use the value of the :bucketdir setting as the root directory" do
- path = Puppet::FileBucketFile::File.new.send(:contents_path_for, @bucket)
- path.should =~ %r{^/dev/null/bucketdir}
- end
-
- it "should choose a path 8 directories deep with each directory name being the respective character in the filebucket" do
- path = Puppet::FileBucketFile::File.new.send(:contents_path_for, @bucket)
- dirs = @digest[0..7].split("").join(File::SEPARATOR)
- path.should be_include(dirs)
- end
-
- it "should use the full filebucket as the final directory name" do
- path = Puppet::FileBucketFile::File.new.send(:contents_path_for, @bucket)
- ::File.basename(::File.dirname(path)).should == @digest
- end
-
- it "should use 'contents' as the actual file name" do
- path = Puppet::FileBucketFile::File.new.send(:contents_path_for, @bucket)
- ::File.basename(path).should == "contents"
- end
-
- it "should use the bucketdir, the 8 sum character directories, the full filebucket, and 'contents' as the full file name" do
- path = Puppet::FileBucketFile::File.new.send(:contents_path_for, @bucket)
- path.should == ['/dev/null/bucketdir', @digest[0..7].split(""), @digest, "contents"].flatten.join(::File::SEPARATOR)
+ describe "when initializing" do
+ it "should use the filebucket settings section" do
+ Puppet.settings.expects(:use).with(:filebucket)
+ Puppet::FileBucketFile::File.new
end
end
- describe "when saving files" do
- before do
- # this is the default from spec_helper, but it keeps getting reset at odd times
- Puppet[:bucketdir] = "/dev/null/bucket"
-
- @digest = "4a8ec4fa5f01b4ab1a0ab8cbccb709f0"
- @checksum = "{md5}4a8ec4fa5f01b4ab1a0ab8cbccb709f0"
- @dir = '/dev/null/bucket/4/a/8/e/c/4/f/a/4a8ec4fa5f01b4ab1a0ab8cbccb709f0'
-
- @contents = "file contents"
-
- @bucket = stub "bucket file"
- @bucket.stubs(:bucket_path)
- @bucket.stubs(:checksum_data).returns(@digest)
- @bucket.stubs(:path).returns(nil)
- @bucket.stubs(:checksum).returns(nil)
- @bucket.stubs(:contents).returns("file contents")
- end
-
- it "should save the contents to the calculated path" do
- ::File.stubs(:directory?).with(@dir).returns(true)
- ::File.expects(:exist?).with("#{@dir}/contents").returns false
-
- mockfile = mock "file"
- mockfile.expects(:print).with(@contents)
- ::File.expects(:open).with("#{@dir}/contents", ::File::WRONLY|::File::CREAT, 0440).yields(mockfile)
- Puppet::FileBucketFile::File.new.send(:save_to_disk, @bucket)
- end
-
- it "should make any directories necessary for storage" do
- FileUtils.expects(:mkdir_p).with do |arg|
- ::File.umask == 0007 and arg == @dir
+ [true, false].each do |override_bucket_path|
+ describe "when bucket path #{if override_bucket_path then 'is' else 'is not' end} overridden" do
+ [true, false].each do |supply_path|
+ describe "when #{supply_path ? 'supplying' : 'not supplying'} a path" do
+ before :each do
+ Puppet.settings.stubs(:use)
+ @store = Puppet::FileBucketFile::File.new
+ @contents = "my content"
+
+ @digest = "f2bfa7fc155c4f42cb91404198dda01f"
+ @digest.should == Digest::MD5.hexdigest(@contents)
+
+ @bucket_dir = tmpdir("bucket")
+
+ if override_bucket_path
+ Puppet[:bucketdir] = "/bogus/path" # should not be used
+ else
+ Puppet[:bucketdir] = @bucket_dir
+ end
+
+ @dir = "#{@bucket_dir}/f/2/b/f/a/7/f/c/f2bfa7fc155c4f42cb91404198dda01f"
+ @contents_path = "#{@dir}/contents"
+ end
+
+ describe "when retrieving files" do
+ before :each do
+
+ request_options = {}
+ if override_bucket_path
+ request_options[:bucket_path] = @bucket_dir
+ end
+
+ key = "md5/#{@digest}"
+ if supply_path
+ key += "//path/to/file"
+ end
+
+ @request = Puppet::Indirector::Request.new(:indirection_name, :find, key, request_options)
+ end
+
+ def make_bucketed_file
+ FileUtils.mkdir_p(@dir)
+ File.open(@contents_path, 'w') { |f| f.write @contents }
+ end
+
+ it "should return an instance of Puppet::FileBucket::File created with the content if the file exists" do
+ make_bucketed_file
+
+ bucketfile = @store.find(@request)
+ bucketfile.should be_a(Puppet::FileBucket::File)
+ bucketfile.contents.should == @contents
+ @store.head(@request).should == true
+ end
+
+ it "should return nil if no file is found" do
+ @store.find(@request).should be_nil
+ @store.head(@request).should == false
+ end
+ end
+
+ describe "when saving files" do
+ it "should save the contents to the calculated path" do
+ options = {}
+ if override_bucket_path
+ options[:bucket_path] = @bucket_dir
+ end
+
+ key = "md5/#{@digest}"
+ if supply_path
+ key += "//path/to/file"
+ end
+
+ file_instance = Puppet::FileBucket::File.new(@contents, options)
+ request = Puppet::Indirector::Request.new(:indirection_name, :save, key, file_instance)
+
+ @store.save(request)
+ File.read("#{@dir}/contents").should == @contents
+ end
+ end
+ end
end
- ::File.expects(:directory?).with(@dir).returns(false)
- ::File.expects(:open).with("#{@dir}/contents", ::File::WRONLY|::File::CREAT, 0440)
- ::File.expects(:exist?).with("#{@dir}/contents").returns false
-
- Puppet::FileBucketFile::File.new.send(:save_to_disk, @bucket)
end
end
-
describe "when verifying identical files" do
before do
# this is the default from spec_helper, but it keeps getting reset at odd times
@@ -231,60 +182,4 @@ describe Puppet::FileBucketFile::File do
end
end
-
-
- describe "when writing to the paths file" do
- before do
- Puppet[:bucketdir] = '/dev/null/bucketdir'
- @digest = '70924d6fa4b2d745185fa4660703a5c0'
- @bucket = stub_everything "bucket"
-
- @paths_path = '/dev/null/bucketdir/7/0/9/2/4/d/6/f/70924d6fa4b2d745185fa4660703a5c0/paths'
-
- @paths = []
- @bucket.stubs(:paths).returns(@paths)
- @bucket.stubs(:checksum_data).returns(@digest)
- end
-
- it "should create a file if it doesn't exist" do
- @bucket.expects(:path).returns('path/to/save').at_least_once
- File.expects(:exist?).with(@paths_path).returns(false)
- file = stub "file"
- file.expects(:puts).with('path/to/save')
- File.expects(:open).with(@paths_path, ::File::WRONLY|::File::CREAT|::File::APPEND).yields(file)
-
- Puppet::FileBucketFile::File.new.send(:save_path_to_paths_file, @bucket)
- end
-
- it "should append to a file if it exists" do
- @bucket.expects(:path).returns('path/to/save').at_least_once
- File.expects(:exist?).with(@paths_path).returns(true)
- old_file = stub "file"
- old_file.stubs(:readlines).returns []
- File.expects(:open).with(@paths_path).yields(old_file)
-
- file = stub "file"
- file.expects(:puts).with('path/to/save')
- File.expects(:open).with(@paths_path, ::File::WRONLY|::File::CREAT|::File::APPEND).yields(file)
-
- Puppet::FileBucketFile::File.new.send(:save_path_to_paths_file, @bucket)
- end
-
- it "should not alter a file if it already contains the path" do
- @bucket.expects(:path).returns('path/to/save').at_least_once
- File.expects(:exist?).with(@paths_path).returns(true)
- old_file = stub "file"
- old_file.stubs(:readlines).returns ["path/to/save\n"]
- File.expects(:open).with(@paths_path).yields(old_file)
-
- Puppet::FileBucketFile::File.new.send(:save_path_to_paths_file, @bucket)
- end
-
- it "should do nothing if there is no path" do
- @bucket.expects(:path).returns(nil).at_least_once
-
- Puppet::FileBucketFile::File.new.send(:save_path_to_paths_file, @bucket)
- end
- end
-
end
diff --git a/spec/unit/indirector/file_content/file_server_spec.rb b/spec/unit/indirector/file_content/file_server_spec.rb
index 326a8c863..5bd88132c 100755
--- a/spec/unit/indirector/file_content/file_server_spec.rb
+++ b/spec/unit/indirector/file_content/file_server_spec.rb
@@ -3,7 +3,7 @@
# Created by Luke Kanies on 2007-10-18.
# Copyright (c) 2007. All rights reserved.
-require File.dirname(__FILE__) + '/../../../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../../../spec_helper')
require 'puppet/indirector/file_content/file_server'
diff --git a/spec/unit/indirector/file_content/file_spec.rb b/spec/unit/indirector/file_content/file_spec.rb
index 62c28632e..edead1c70 100755
--- a/spec/unit/indirector/file_content/file_spec.rb
+++ b/spec/unit/indirector/file_content/file_spec.rb
@@ -3,7 +3,7 @@
# Created by Luke Kanies on 2007-10-18.
# Copyright (c) 2007. All rights reserved.
-require File.dirname(__FILE__) + '/../../../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../../../spec_helper')
require 'puppet/indirector/file_content/file'
diff --git a/spec/unit/indirector/file_content/rest_spec.rb b/spec/unit/indirector/file_content/rest_spec.rb
index 3b2f43f13..cf94d2ffd 100755
--- a/spec/unit/indirector/file_content/rest_spec.rb
+++ b/spec/unit/indirector/file_content/rest_spec.rb
@@ -1,6 +1,6 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../../../spec_helper')
require 'puppet/indirector/file_content'
diff --git a/spec/unit/indirector/file_metadata/file_server_spec.rb b/spec/unit/indirector/file_metadata/file_server_spec.rb
index 98f89c57d..99eb83d7f 100755
--- a/spec/unit/indirector/file_metadata/file_server_spec.rb
+++ b/spec/unit/indirector/file_metadata/file_server_spec.rb
@@ -3,7 +3,7 @@
# Created by Luke Kanies on 2007-10-18.
# Copyright (c) 2007. All rights reserved.
-require File.dirname(__FILE__) + '/../../../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../../../spec_helper')
require 'puppet/indirector/file_metadata/file_server'
diff --git a/spec/unit/indirector/file_metadata/file_spec.rb b/spec/unit/indirector/file_metadata/file_spec.rb
index 906b24b3e..74eff5b66 100755
--- a/spec/unit/indirector/file_metadata/file_spec.rb
+++ b/spec/unit/indirector/file_metadata/file_spec.rb
@@ -3,7 +3,7 @@
# Created by Luke Kanies on 2007-10-18.
# Copyright (c) 2007. All rights reserved.
-require File.dirname(__FILE__) + '/../../../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../../../spec_helper')
require 'puppet/indirector/file_metadata/file'
diff --git a/spec/unit/indirector/file_metadata/rest_spec.rb b/spec/unit/indirector/file_metadata/rest_spec.rb
index f6e998300..132d90d4f 100755
--- a/spec/unit/indirector/file_metadata/rest_spec.rb
+++ b/spec/unit/indirector/file_metadata/rest_spec.rb
@@ -1,6 +1,6 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../../../spec_helper')
require 'puppet/indirector/file_metadata'
diff --git a/spec/unit/indirector/file_server_spec.rb b/spec/unit/indirector/file_server_spec.rb
index 686f79a24..a81d50487 100755
--- a/spec/unit/indirector/file_server_spec.rb
+++ b/spec/unit/indirector/file_server_spec.rb
@@ -3,7 +3,7 @@
# Created by Luke Kanies on 2007-10-19.
# Copyright (c) 2007. All rights reserved.
-require File.dirname(__FILE__) + '/../../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
require 'puppet/indirector/file_server'
require 'puppet/file_serving/configuration'
@@ -229,6 +229,12 @@ describe Puppet::Indirector::FileServer do
describe "when checking authorization" do
before do
@request.method = :find
+
+ @mount = stub 'mount'
+ @configuration.stubs(:split_path).with(@request).returns([@mount, "rel/path"])
+ @request.stubs(:node).returns("mynode")
+ @request.stubs(:ip).returns("myip")
+ @mount.stubs(:allowed?).with("mynode", "myip").returns "something"
end
it "should return false when destroying" do
@@ -254,13 +260,6 @@ describe Puppet::Indirector::FileServer do
end
it "should return the results of asking the mount whether the node and IP are authorized" do
- @mount = stub 'mount'
- @configuration.expects(:split_path).with(@request).returns([@mount, "rel/path"])
-
- @request.stubs(:node).returns("mynode")
- @request.stubs(:ip).returns("myip")
- @mount.expects(:allowed?).with("mynode", "myip").returns "something"
-
@file_server.authorized?(@request).should == "something"
end
end
diff --git a/spec/unit/indirector/file_spec.rb b/spec/unit/indirector/file_spec.rb
index 86673f0e2..8fd197eac 100755
--- a/spec/unit/indirector/file_spec.rb
+++ b/spec/unit/indirector/file_spec.rb
@@ -1,6 +1,6 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
require 'puppet/indirector/file'
diff --git a/spec/unit/indirector/indirection_spec.rb b/spec/unit/indirector/indirection_spec.rb
index b0e0f019c..8795ae795 100755
--- a/spec/unit/indirector/indirection_spec.rb
+++ b/spec/unit/indirector/indirection_spec.rb
@@ -1,10 +1,10 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
require 'puppet/indirector/indirection'
-describe "Indirection Delegator", :shared => true do
+shared_examples_for "Indirection Delegator" do
it "should create a request object with the appropriate method name and all of the passed arguments" do
request = Puppet::Indirector::Request.new(:indirection, :find, "me")
@@ -64,7 +64,7 @@ describe "Indirection Delegator", :shared => true do
end
end
-describe "Delegation Authorizer", :shared => true do
+shared_examples_for "Delegation Authorizer" do
before do
# So the :respond_to? turns out correctly.
class << @terminus
@@ -383,12 +383,78 @@ describe Puppet::Indirector::Indirection do
end
end
- describe "and storing a model instance" do
- before { @method = :save }
+ describe "and doing a head operation" do
+ before { @method = :head }
it_should_behave_like "Indirection Delegator"
it_should_behave_like "Delegation Authorizer"
+ it "should return true if the head method returned true" do
+ @terminus.expects(:head).returns(true)
+ @indirection.head("me").should == true
+ end
+
+ it "should return false if the head method returned false" do
+ @terminus.expects(:head).returns(false)
+ @indirection.head("me").should == false
+ end
+
+ describe "when caching is enabled" do
+ before do
+ @indirection.cache_class = :cache_terminus
+ @cache_class.stubs(:new).returns(@cache)
+
+ @instance.stubs(:expired?).returns false
+ end
+
+ it "should first look in the cache for an instance" do
+ @terminus.stubs(:find).never
+ @terminus.stubs(:head).never
+ @cache.expects(:find).returns @instance
+
+ @indirection.head("/my/key").should == true
+ end
+
+ it "should not save to the cache" do
+ @cache.expects(:find).returns nil
+ @cache.expects(:save).never
+ @terminus.expects(:head).returns true
+ @indirection.head("/my/key").should == true
+ end
+
+ it "should not fail if the cache fails" do
+ @terminus.stubs(:head).returns true
+
+ @cache.expects(:find).raises ArgumentError
+ lambda { @indirection.head("/my/key") }.should_not raise_error
+ end
+
+ it "should look in the main terminus if the cache fails" do
+ @terminus.expects(:head).returns true
+ @cache.expects(:find).raises ArgumentError
+ @indirection.head("/my/key").should == true
+ end
+
+ it "should send a debug log if it is using the cached object" do
+ Puppet.expects(:debug)
+ @cache.stubs(:find).returns @instance
+
+ @indirection.head("/my/key")
+ end
+
+ it "should not accept the cached object if it is expired" do
+ @instance.stubs(:expired?).returns true
+
+ @cache.stubs(:find).returns @instance
+ @terminus.stubs(:head).returns false
+ @indirection.head("/my/key").should == false
+ end
+ end
+ end
+
+ describe "and storing a model instance" do
+ before { @method = :save }
+
it "should return the result of the save" do
@terminus.stubs(:save).returns "foo"
@indirection.save(@instance).should == "foo"
diff --git a/spec/unit/indirector/inventory/yaml_spec.rb b/spec/unit/indirector/inventory/yaml_spec.rb
index 9f0c54353..a4eb2ab7a 100644
--- a/spec/unit/indirector/inventory/yaml_spec.rb
+++ b/spec/unit/indirector/inventory/yaml_spec.rb
@@ -1,6 +1,6 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../../../spec_helper')
require 'puppet/node/inventory'
require 'puppet/indirector/inventory/yaml'
diff --git a/spec/unit/indirector/key/ca_spec.rb b/spec/unit/indirector/key/ca_spec.rb
index 9ed5df67b..53bd380a6 100755
--- a/spec/unit/indirector/key/ca_spec.rb
+++ b/spec/unit/indirector/key/ca_spec.rb
@@ -3,7 +3,7 @@
# Created by Luke Kanies on 2008-3-7.
# Copyright (c) 2007. All rights reserved.
-require File.dirname(__FILE__) + '/../../../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../../../spec_helper')
require 'puppet/indirector/key/ca'
diff --git a/spec/unit/indirector/key/file_spec.rb b/spec/unit/indirector/key/file_spec.rb
index 5037c7f0e..715ceacda 100755
--- a/spec/unit/indirector/key/file_spec.rb
+++ b/spec/unit/indirector/key/file_spec.rb
@@ -3,7 +3,7 @@
# Created by Luke Kanies on 2008-3-7.
# Copyright (c) 2007. All rights reserved.
-require File.dirname(__FILE__) + '/../../../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../../../spec_helper')
require 'puppet/indirector/key/file'
diff --git a/spec/unit/indirector/ldap_spec.rb b/spec/unit/indirector/ldap_spec.rb
index 31a3406e9..2178a8709 100755
--- a/spec/unit/indirector/ldap_spec.rb
+++ b/spec/unit/indirector/ldap_spec.rb
@@ -1,6 +1,6 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
require 'puppet/indirector/ldap'
@@ -110,9 +110,7 @@ describe Puppet::Indirector::Ldap do
end
end
- describe "when connecting to ldap" do
- confine "LDAP is not available" => Puppet.features.ldap?
-
+ describe "when connecting to ldap", :if => Puppet.features.ldap? do
it "should create and start a Util::Ldap::Connection instance" do
conn = mock 'connection', :connection => "myconn", :start => nil
Puppet::Util::Ldap::Connection.expects(:instance).returns conn
@@ -135,9 +133,7 @@ describe Puppet::Indirector::Ldap do
end
end
- describe "when reconnecting to ldap" do
- confine "Not running on culain as root" => (Puppet.features.root? and Facter.value("hostname") == "culain")
-
+ describe "when reconnecting to ldap", :if => (Puppet.features.root? and Facter.value("hostname") == "culain") do
it "should reconnect to ldap when connections are lost"
end
end
diff --git a/spec/unit/indirector/memory_spec.rb b/spec/unit/indirector/memory_spec.rb
index 160b4f91d..f9010326f 100755
--- a/spec/unit/indirector/memory_spec.rb
+++ b/spec/unit/indirector/memory_spec.rb
@@ -1,6 +1,6 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
require 'puppet/indirector/memory'
require 'shared_behaviours/memory_terminus'
diff --git a/spec/unit/indirector/node/active_record_spec.rb b/spec/unit/indirector/node/active_record_spec.rb
index 3540ef738..65b0e1fc9 100755
--- a/spec/unit/indirector/node/active_record_spec.rb
+++ b/spec/unit/indirector/node/active_record_spec.rb
@@ -1,14 +1,12 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../../../spec_helper')
require 'puppet/node'
-describe "Puppet::Node::ActiveRecord" do
+describe "Puppet::Node::ActiveRecord", :if => Puppet.features.rails? && Puppet.features.sqlite? do
include PuppetSpec::Files
- confine "Missing Rails" => Puppet.features.rails?
- confine "Missing sqlite" => Puppet.features.sqlite?
before do
require 'puppet/indirector/node/active_record'
end
diff --git a/spec/unit/indirector/node/exec_spec.rb b/spec/unit/indirector/node/exec_spec.rb
index d214a5ef6..e6d6ccb93 100755
--- a/spec/unit/indirector/node/exec_spec.rb
+++ b/spec/unit/indirector/node/exec_spec.rb
@@ -1,6 +1,6 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../../../spec_helper')
require 'puppet/indirector/node/exec'
diff --git a/spec/unit/indirector/node/ldap_spec.rb b/spec/unit/indirector/node/ldap_spec.rb
index 042e7bd54..5d4086a1a 100755
--- a/spec/unit/indirector/node/ldap_spec.rb
+++ b/spec/unit/indirector/node/ldap_spec.rb
@@ -1,6 +1,6 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../../../spec_helper')
require 'puppet/indirector/node/ldap'
@@ -311,7 +311,7 @@ describe Puppet::Node::Ldap do
@options = {}
@request = stub 'request', :key => "foo", :options => @options
- Puppet::Node::Facts.stubs(:terminus_class).returns :yaml
+ Puppet::Node::Facts.indirection.stubs(:terminus_class).returns :yaml
end
it "should find all nodes if no arguments are provided" do
diff --git a/spec/unit/indirector/node/memory_spec.rb b/spec/unit/indirector/node/memory_spec.rb
index 3f1fdb9f0..904ee1259 100755
--- a/spec/unit/indirector/node/memory_spec.rb
+++ b/spec/unit/indirector/node/memory_spec.rb
@@ -1,6 +1,6 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../../../spec_helper')
require 'puppet/indirector/node/memory'
diff --git a/spec/unit/indirector/node/plain_spec.rb b/spec/unit/indirector/node/plain_spec.rb
index 730086296..40d5211db 100755
--- a/spec/unit/indirector/node/plain_spec.rb
+++ b/spec/unit/indirector/node/plain_spec.rb
@@ -1,6 +1,6 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../../../spec_helper')
require 'puppet/indirector/node/plain'
diff --git a/spec/unit/indirector/node/rest_spec.rb b/spec/unit/indirector/node/rest_spec.rb
index 0b20752e5..cb3012efa 100755
--- a/spec/unit/indirector/node/rest_spec.rb
+++ b/spec/unit/indirector/node/rest_spec.rb
@@ -1,6 +1,6 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../../../spec_helper')
require 'puppet/indirector/node/rest'
diff --git a/spec/unit/indirector/node/yaml_spec.rb b/spec/unit/indirector/node/yaml_spec.rb
index 8e19a1230..649bde06d 100755
--- a/spec/unit/indirector/node/yaml_spec.rb
+++ b/spec/unit/indirector/node/yaml_spec.rb
@@ -1,6 +1,6 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../../../spec_helper')
require 'puppet/node'
require 'puppet/indirector/node/yaml'
diff --git a/spec/unit/indirector/plain_spec.rb b/spec/unit/indirector/plain_spec.rb
index 2fb9e4dd3..54c0233f8 100755
--- a/spec/unit/indirector/plain_spec.rb
+++ b/spec/unit/indirector/plain_spec.rb
@@ -1,6 +1,6 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
require 'puppet/indirector/plain'
describe Puppet::Indirector::Plain do
diff --git a/spec/unit/indirector/queue_spec.rb b/spec/unit/indirector/queue_spec.rb
index 83e9c771d..7732e411a 100755
--- a/spec/unit/indirector/queue_spec.rb
+++ b/spec/unit/indirector/queue_spec.rb
@@ -1,6 +1,6 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
require 'puppet/indirector/queue'
class Puppet::Indirector::Queue::TestClient
@@ -26,9 +26,7 @@ class FooExampleData
end
end
-describe Puppet::Indirector::Queue do
- confine "PSON library is missing; cannot test queueing" => Puppet.features.pson?
-
+describe Puppet::Indirector::Queue, :if => Puppet.features.pson? do
before :each do
@model = mock 'model'
@indirection = stub 'indirection', :name => :my_queue, :register_terminus_type => nil, :model => @model
diff --git a/spec/unit/indirector/report/processor_spec.rb b/spec/unit/indirector/report/processor_spec.rb
index 5602a271f..adc2638fc 100755
--- a/spec/unit/indirector/report/processor_spec.rb
+++ b/spec/unit/indirector/report/processor_spec.rb
@@ -3,7 +3,7 @@
# Created by Luke Kanies on 2007-9-23.
# Copyright (c) 2007. All rights reserved.
-require File.dirname(__FILE__) + '/../../../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../../../spec_helper')
require 'puppet/indirector/report/processor'
diff --git a/spec/unit/indirector/report/rest_spec.rb b/spec/unit/indirector/report/rest_spec.rb
index d0d29f862..67a98e334 100755
--- a/spec/unit/indirector/report/rest_spec.rb
+++ b/spec/unit/indirector/report/rest_spec.rb
@@ -1,6 +1,6 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../../../spec_helper')
require 'puppet/indirector/report/rest'
diff --git a/spec/unit/indirector/report/yaml_spec.rb b/spec/unit/indirector/report/yaml_spec.rb
index 610c9ae43..e75fafe5e 100644
--- a/spec/unit/indirector/report/yaml_spec.rb
+++ b/spec/unit/indirector/report/yaml_spec.rb
@@ -1,6 +1,6 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../../../spec_helper')
require 'puppet/transaction/report'
require 'puppet/indirector/report/yaml'
diff --git a/spec/unit/indirector/request_spec.rb b/spec/unit/indirector/request_spec.rb
index 0b3c2c266..bef56b1e1 100755
--- a/spec/unit/indirector/request_spec.rb
+++ b/spec/unit/indirector/request_spec.rb
@@ -1,6 +1,6 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
require 'puppet/indirector/request'
describe Puppet::Indirector::Request do
diff --git a/spec/unit/indirector/resource/ral_spec.rb b/spec/unit/indirector/resource/ral_spec.rb
index a5baef367..43deaa8eb 100644
--- a/spec/unit/indirector/resource/ral_spec.rb
+++ b/spec/unit/indirector/resource/ral_spec.rb
@@ -1,6 +1,6 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../../../spec_helper')
describe "Puppet::Resource::Ral" do
describe "find" do
diff --git a/spec/unit/indirector/resource_type/parser_spec.rb b/spec/unit/indirector/resource_type/parser_spec.rb
index 5c0d9e04c..739e58b35 100755
--- a/spec/unit/indirector/resource_type/parser_spec.rb
+++ b/spec/unit/indirector/resource_type/parser_spec.rb
@@ -1,6 +1,6 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../../../spec_helper')
require 'puppet/indirector/resource_type/parser'
diff --git a/spec/unit/indirector/resource_type/rest_spec.rb b/spec/unit/indirector/resource_type/rest_spec.rb
index 2486502bc..dceb109b2 100755
--- a/spec/unit/indirector/resource_type/rest_spec.rb
+++ b/spec/unit/indirector/resource_type/rest_spec.rb
@@ -1,6 +1,6 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../../../spec_helper')
require 'puppet/indirector/resource_type/rest'
diff --git a/spec/unit/indirector/rest_spec.rb b/spec/unit/indirector/rest_spec.rb
index 3efbfce97..547e68dd3 100755
--- a/spec/unit/indirector/rest_spec.rb
+++ b/spec/unit/indirector/rest_spec.rb
@@ -1,9 +1,9 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
require 'puppet/indirector/rest'
-describe "a REST http call", :shared => true do
+shared_examples_for "a REST http call" do
it "should accept a path" do
lambda { @search.send(@method, *@arguments) }.should_not raise_error(ArgumentError)
end
@@ -282,6 +282,42 @@ describe Puppet::Indirector::REST do
end
end
+ describe "when doing a head" do
+ before :each do
+ @connection = stub('mock http connection', :head => @response)
+ @searcher.stubs(:network).returns(@connection)
+
+ # Use a key with spaces, so we can test escaping
+ @request = Puppet::Indirector::Request.new(:foo, :head, "foo bar")
+ end
+
+ it "should call the HEAD http method on a network connection" do
+ @searcher.expects(:network).returns @connection
+ @connection.expects(:head).returns @response
+ @searcher.head(@request)
+ end
+
+ it "should return true if there was a successful http response" do
+ @connection.expects(:head).returns @response
+ @response.stubs(:code).returns "200"
+
+ @searcher.head(@request).should == true
+ end
+
+ it "should return false if there was a successful http response" do
+ @connection.expects(:head).returns @response
+ @response.stubs(:code).returns "404"
+
+ @searcher.head(@request).should == false
+ end
+
+ it "should use the URI generated by the Handler module" do
+ @searcher.expects(:indirection2uri).with(@request).returns "/my/uri"
+ @connection.expects(:head).with { |path, args| path == "/my/uri" }.returns(@response)
+ @searcher.head(@request)
+ end
+ end
+
describe "when doing a search" do
before :each do
@connection = stub('mock http connection', :get => @response)
diff --git a/spec/unit/indirector/run/local_spec.rb b/spec/unit/indirector/run/local_spec.rb
index 2684096d5..cb012a0b0 100644
--- a/spec/unit/indirector/run/local_spec.rb
+++ b/spec/unit/indirector/run/local_spec.rb
@@ -1,6 +1,6 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../../../spec_helper')
require 'puppet/indirector/run/local'
diff --git a/spec/unit/indirector/run/rest_spec.rb b/spec/unit/indirector/run/rest_spec.rb
index 2b2415ab6..cf90caa5b 100755
--- a/spec/unit/indirector/run/rest_spec.rb
+++ b/spec/unit/indirector/run/rest_spec.rb
@@ -1,6 +1,6 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../../../spec_helper')
require 'puppet/indirector/run/rest'
diff --git a/spec/unit/indirector/ssl_file_spec.rb b/spec/unit/indirector/ssl_file_spec.rb
index 83145cffc..4549127f9 100755
--- a/spec/unit/indirector/ssl_file_spec.rb
+++ b/spec/unit/indirector/ssl_file_spec.rb
@@ -3,7 +3,7 @@
# Created by Luke Kanies on 2008-3-10.
# Copyright (c) 2007. All rights reserved.
-require File.dirname(__FILE__) + '/../../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
require 'puppet/indirector/ssl_file'
@@ -18,12 +18,12 @@ describe Puppet::Indirector::SslFile do
end
end
- @setting = :mydir
+ @setting = :certdir
@file_class.store_in @setting
- @path = "/my/directory"
- Puppet.settings.stubs(:value).with(:noop).returns(false)
- Puppet.settings.stubs(:value).with(@setting).returns(@path)
- Puppet.settings.stubs(:value).with(:trace).returns(false)
+ @path = "/tmp/my_directory"
+ Puppet[:noop] = false
+ Puppet[@setting] = @path
+ Puppet[:trace] = false
end
it "should use :main and :ssl upon initialization" do
diff --git a/spec/unit/indirector/terminus_spec.rb b/spec/unit/indirector/terminus_spec.rb
index 826b9347a..bc255aa5b 100755
--- a/spec/unit/indirector/terminus_spec.rb
+++ b/spec/unit/indirector/terminus_spec.rb
@@ -1,6 +1,6 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
require 'puppet/defaults'
require 'puppet/indirector'
require 'puppet/indirector/file'
diff --git a/spec/unit/indirector/yaml_spec.rb b/spec/unit/indirector/yaml_spec.rb
index 86c13c5a0..35017991b 100755
--- a/spec/unit/indirector/yaml_spec.rb
+++ b/spec/unit/indirector/yaml_spec.rb
@@ -1,6 +1,6 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
require 'puppet/indirector/yaml'
diff --git a/spec/unit/indirector_spec.rb b/spec/unit/indirector_spec.rb
index fb21532ba..7bab426c0 100755
--- a/spec/unit/indirector_spec.rb
+++ b/spec/unit/indirector_spec.rb
@@ -1,6 +1,6 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
require 'puppet/defaults'
require 'puppet/indirector'
@@ -64,24 +64,6 @@ describe Puppet::Indirector, "when registering an indirection" do
end
end
-describe "Delegated Indirection Method", :shared => true do
- it "should delegate to the indirection" do
- @indirection.expects(@method)
- @thingie.send(@method, "me")
- end
-
- it "should pass all of the passed arguments directly to the indirection instance" do
- @indirection.expects(@method).with("me", :one => :two)
- @thingie.send(@method, "me", :one => :two)
- end
-
- it "should return the results of the delegation as its result" do
- request = mock 'request'
- @indirection.expects(@method).returns "yay"
- @thingie.send(@method, "me").should == "yay"
- end
-end
-
describe Puppet::Indirector, "when redirecting a model" do
before do
@thingie = Class.new do
@@ -98,59 +80,6 @@ describe Puppet::Indirector, "when redirecting a model" do
@thingie.ancestors.should be_include(Puppet::Indirector::Envelope)
end
- describe "when finding instances via the model" do
- before { @method = :find }
- it_should_behave_like "Delegated Indirection Method"
- end
-
- describe "when destroying instances via the model" do
- before { @method = :destroy }
- it_should_behave_like "Delegated Indirection Method"
- end
-
- describe "when searching for instances via the model" do
- before { @method = :search }
- it_should_behave_like "Delegated Indirection Method"
- end
-
- describe "when expiring instances via the model" do
- before { @method = :expire }
- it_should_behave_like "Delegated Indirection Method"
- end
-
- # This is an instance method, so it behaves a bit differently.
- describe "when saving instances via the model" do
- before do
- @instance = @thingie.new("me")
- end
-
- it "should delegate to the indirection" do
- @indirection.expects(:save)
- @instance.save
- end
-
- it "should pass the instance and an optional key to the indirection's :save method" do
- @indirection.expects(:save).with("key", @instance)
- @instance.save "key"
- end
-
- it "should return the results of the delegation as its result" do
- request = mock 'request'
- @indirection.expects(:save).returns "yay"
- @instance.save.should == "yay"
- end
- end
-
- it "should give the model the ability to set the indirection terminus class" do
- @indirection.expects(:terminus_class=).with(:myterm)
- @thingie.terminus_class = :myterm
- end
-
- it "should give the model the ability to set the indirection cache class" do
- @indirection.expects(:cache_class=).with(:mycache)
- @thingie.cache_class = :mycache
- end
-
after do
@indirection.delete
end
diff --git a/spec/unit/module_spec.rb b/spec/unit/module_spec.rb
index c3436dfdd..8f1c794b2 100755
--- a/spec/unit/module_spec.rb
+++ b/spec/unit/module_spec.rb
@@ -1,6 +1,6 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
describe Puppet::Module do
before do
@@ -504,9 +504,7 @@ describe Puppet::Module do
Puppet::Module.new("yay")
end
- describe "when loading the medatada file" do
- confine "Cannot test module metadata without json" => Puppet.features.json?
-
+ describe "when loading the medatada file", :if => Puppet.features.json? do
before do
@data = {
:license => "GPL2",
diff --git a/spec/unit/network/authconfig_spec.rb b/spec/unit/network/authconfig_spec.rb
index e10458b1a..4367e25e6 100755
--- a/spec/unit/network/authconfig_spec.rb
+++ b/spec/unit/network/authconfig_spec.rb
@@ -1,6 +1,6 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
require 'puppet/network/authconfig'
diff --git a/spec/unit/network/authstore_spec.rb b/spec/unit/network/authstore_spec.rb
index 094352c63..0b4dd21de 100644
--- a/spec/unit/network/authstore_spec.rb
+++ b/spec/unit/network/authstore_spec.rb
@@ -1,6 +1,6 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
require 'puppet/network/authconfig'
diff --git a/spec/unit/network/client_spec.rb b/spec/unit/network/client_spec.rb
index f42bd78b9..820f10f12 100755
--- a/spec/unit/network/client_spec.rb
+++ b/spec/unit/network/client_spec.rb
@@ -3,7 +3,7 @@
# Created by Luke Kanies on 2008-3-24.
# Copyright (c) 2008. All rights reserved.
-require File.dirname(__FILE__) + '/../../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
require 'puppet/network/client'
diff --git a/spec/unit/network/format_handler_spec.rb b/spec/unit/network/format_handler_spec.rb
index 64cca8239..556fada80 100755
--- a/spec/unit/network/format_handler_spec.rb
+++ b/spec/unit/network/format_handler_spec.rb
@@ -1,6 +1,6 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
require 'puppet/network/format_handler'
diff --git a/spec/unit/network/format_spec.rb b/spec/unit/network/format_spec.rb
index bcb084156..658729e4c 100755
--- a/spec/unit/network/format_spec.rb
+++ b/spec/unit/network/format_spec.rb
@@ -1,6 +1,6 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
require 'puppet/network/format'
diff --git a/spec/unit/network/formats_spec.rb b/spec/unit/network/formats_spec.rb
index 7c8e7b1f4..30e88c578 100755
--- a/spec/unit/network/formats_spec.rb
+++ b/spec/unit/network/formats_spec.rb
@@ -1,6 +1,6 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
require 'puppet/network/formats'
@@ -69,9 +69,8 @@ describe "Puppet Network Format" do
end
end
- describe "base64 compressed yaml" do
+ describe "base64 compressed yaml", :if => Puppet.features.zlib? do
yaml = Puppet::Network::FormatHandler.format(:b64_zlib_yaml)
- confine "We must have zlib" => Puppet.features.zlib?
before do
@yaml = Puppet::Network::FormatHandler.format(:b64_zlib_yaml)
@@ -265,9 +264,7 @@ describe "Puppet Network Format" do
Puppet::Network::FormatHandler.format(:pson).should_not be_nil
end
- describe "pson" do
- confine "Missing 'pson' library" => Puppet.features.pson?
-
+ describe "pson", :if => Puppet.features.pson? do
before do
@pson = Puppet::Network::FormatHandler.format(:pson)
end
diff --git a/spec/unit/network/handler/fileserver_spec.rb b/spec/unit/network/handler/fileserver_spec.rb
index b37d4f551..b1306c69e 100644
--- a/spec/unit/network/handler/fileserver_spec.rb
+++ b/spec/unit/network/handler/fileserver_spec.rb
@@ -1,6 +1,6 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../../../spec_helper')
require 'puppet/network/handler/fileserver'
diff --git a/spec/unit/network/http/api/v1_spec.rb b/spec/unit/network/http/api/v1_spec.rb
index 84b98ddaf..a1cb75841 100644
--- a/spec/unit/network/http/api/v1_spec.rb
+++ b/spec/unit/network/http/api/v1_spec.rb
@@ -68,6 +68,10 @@ describe Puppet::Network::HTTP::API::V1 do
@tester.uri2indirection("GET", "/env/foo/bar", {})[1].should == :find
end
+ it "should choose 'head' as the indirection method if the http method is a HEAD and the indirection name is singular" do
+ @tester.uri2indirection("HEAD", "/env/foo/bar", {})[1].should == :head
+ end
+
it "should choose 'search' as the indirection method if the http method is a GET and the indirection name is plural" do
@tester.uri2indirection("GET", "/env/foos/bar", {})[1].should == :search
end
diff --git a/spec/unit/network/http/compression_spec.rb b/spec/unit/network/http/compression_spec.rb
index b46941f46..d44c5f1bb 100644
--- a/spec/unit/network/http/compression_spec.rb
+++ b/spec/unit/network/http/compression_spec.rb
@@ -1,6 +1,6 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../../../spec_helper')
describe "http compression" do
@@ -37,9 +37,7 @@ describe "http compression" do
end
end
- describe "when zlib is available" do
- confine "Zlib is missing" => Puppet.features.zlib?
-
+ describe "when zlib is available", :if => Puppet.features.zlib? do
before(:each) do
Puppet.features.stubs(:zlib?).returns true
diff --git a/spec/unit/network/http/handler_spec.rb b/spec/unit/network/http/handler_spec.rb
index 16f1b5349..97d17fcf8 100755
--- a/spec/unit/network/http/handler_spec.rb
+++ b/spec/unit/network/http/handler_spec.rb
@@ -1,6 +1,6 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../../../spec_helper')
require 'puppet/network/http/handler'
require 'puppet/network/rest_authorization'
@@ -46,6 +46,8 @@ describe Puppet::Network::HTTP::Handler do
@request.stubs(:[]).returns "foo"
@response = stub('http response')
@model_class = stub('indirected model class')
+ @indirection = stub('indirection')
+ @model_class.stubs(:indirection).returns(@indirection)
@result = stub 'result', :render => "mytext"
@@ -126,7 +128,7 @@ describe Puppet::Network::HTTP::Handler do
describe "when finding a model instance" do
before do
- @model_class.stubs(:find).returns @result
+ @indirection.stubs(:find).returns @result
Puppet::Indirector::Indirection.expects(:instance).with(:my_handler).returns( stub "indirection", :model => @model_class )
@format = stub 'format', :suitable? => true, :mime => "text/format", :name => "format"
@@ -141,14 +143,14 @@ describe Puppet::Network::HTTP::Handler do
end
it "should use the escaped request key" do
- @model_class.expects(:find).with do |key, args|
+ @indirection.expects(:find).with do |key, args|
key == "my_result"
end.returns @result
@handler.do_find("my_handler", "my_result", {}, @request, @response)
end
it "should use a common method for determining the request parameters" do
- @model_class.expects(:find).with do |key, args|
+ @indirection.expects(:find).with do |key, args|
args[:foo] == :baz and args[:bar] == :xyzzy
end.returns @result
@handler.do_find("my_handler", "my_result", {:foo => :baz, :bar => :xyzzy}, @request, @response)
@@ -190,6 +192,12 @@ describe Puppet::Network::HTTP::Handler do
@handler.do_find("my_handler", "my_result", {}, @request, @response)
end
+ it "should pass the result through without rendering it if the result is a string" do
+ @indirection.stubs(:find).returns "foo"
+ @handler.expects(:set_response).with(@response, "foo")
+ @handler.do_find("my_handler", "my_result", {}, @request, @response)
+ end
+
it "should use the default status when a model find call succeeds" do
@handler.expects(:set_response).with { |response, body, status| status.nil? }
@handler.do_find("my_handler", "my_result", {}, @request, @response)
@@ -200,20 +208,20 @@ describe Puppet::Network::HTTP::Handler do
@model_instance.expects(:render).returns "my_rendered_object"
@handler.expects(:set_response).with { |response, body, status| body == "my_rendered_object" }
- @model_class.stubs(:find).returns(@model_instance)
+ @indirection.stubs(:find).returns(@model_instance)
@handler.do_find("my_handler", "my_result", {}, @request, @response)
end
it "should return a 404 when no model instance can be found" do
@model_class.stubs(:name).returns "my name"
@handler.expects(:set_response).with { |response, body, status| status == 404 }
- @model_class.stubs(:find).returns(nil)
+ @indirection.stubs(:find).returns(nil)
@handler.do_find("my_handler", "my_result", {}, @request, @response)
end
it "should write a log message when no model instance can be found" do
@model_class.stubs(:name).returns "my name"
- @model_class.stubs(:find).returns(nil)
+ @indirection.stubs(:find).returns(nil)
Puppet.expects(:info).with("Could not find my_handler for 'my_result'")
@@ -226,11 +234,44 @@ describe Puppet::Network::HTTP::Handler do
@handler.expects(:format_to_use).returns(@oneformat)
@model_instance.expects(:render).with(@oneformat).returns "my_rendered_object"
- @model_class.stubs(:find).returns(@model_instance)
+ @indirection.stubs(:find).returns(@model_instance)
@handler.do_find("my_handler", "my_result", {}, @request, @response)
end
end
+ describe "when performing head operation" do
+ before do
+ @irequest = stub 'indirection_request', :method => :head, :indirection_name => "my_handler", :to_hash => {}, :key => "my_result", :model => @model_class
+
+ @model_class.stubs(:head).returns true
+ end
+
+ it "should use the indirection request to find the model class" do
+ @irequest.expects(:model).returns @model_class
+
+ @handler.do_head(@irequest, @request, @response)
+ end
+
+ it "should use the escaped request key" do
+ @model_class.expects(:head).with do |key, args|
+ key == "my_result"
+ end.returns true
+ @handler.do_head(@irequest, @request, @response)
+ end
+
+ it "should not generate a response when a model head call succeeds" do
+ @handler.expects(:set_response).never
+ @handler.do_head(@irequest, @request, @response)
+ end
+
+ it "should return a 404 when the model head call returns false" do
+ @model_class.stubs(:name).returns "my name"
+ @handler.expects(:set_response).with { |response, body, status| status == 404 }
+ @model_class.stubs(:head).returns(false)
+ @handler.do_head(@irequest, @request, @response)
+ end
+ end
+
describe "when searching for model instances" do
before do
Puppet::Indirector::Indirection.expects(:instance).with(:my_handler).returns( stub "indirection", :model => @model_class )
@@ -240,7 +281,7 @@ describe Puppet::Network::HTTP::Handler do
@result = [@result1, @result2]
@model_class.stubs(:render_multiple).returns "my rendered instances"
- @model_class.stubs(:search).returns(@result)
+ @indirection.stubs(:search).returns(@result)
@format = stub 'format', :suitable? => true, :mime => "text/format", :name => "format"
Puppet::Network::FormatHandler.stubs(:format).returns @format
@@ -254,14 +295,14 @@ describe Puppet::Network::HTTP::Handler do
end
it "should use a common method for determining the request parameters" do
- @model_class.expects(:search).with do |key, args|
+ @indirection.expects(:search).with do |key, args|
args[:foo] == :baz and args[:bar] == :xyzzy
end.returns @result
@handler.do_search("my_handler", "my_result", {:foo => :baz, :bar => :xyzzy}, @request, @response)
end
it "should use the default status when a model search call succeeds" do
- @model_class.stubs(:search).returns(@result)
+ @indirection.stubs(:search).returns(@result)
@handler.do_search("my_handler", "my_result", {}, @request, @response)
end
@@ -275,7 +316,7 @@ describe Puppet::Network::HTTP::Handler do
it "should return a list of serialized objects when a model search call succeeds" do
@handler.expects(:accept_header).with(@request).returns "one,two"
- @model_class.stubs(:search).returns(@result)
+ @indirection.stubs(:search).returns(@result)
@model_class.expects(:render_multiple).with(@oneformat, @result).returns "my rendered instances"
@@ -285,7 +326,7 @@ describe Puppet::Network::HTTP::Handler do
it "should return [] when searching returns an empty array" do
@handler.expects(:accept_header).with(@request).returns "one,two"
- @model_class.stubs(:search).returns([])
+ @indirection.stubs(:search).returns([])
@model_class.expects(:render_multiple).with(@oneformat, []).returns "[]"
@@ -296,7 +337,7 @@ describe Puppet::Network::HTTP::Handler do
it "should return a 404 when searching returns nil" do
@model_class.stubs(:name).returns "my name"
@handler.expects(:set_response).with { |response, body, status| status == 404 }
- @model_class.stubs(:search).returns(nil)
+ @indirection.stubs(:search).returns(nil)
@handler.do_search("my_handler", "my_result", {}, @request, @response)
end
end
@@ -306,7 +347,7 @@ describe Puppet::Network::HTTP::Handler do
Puppet::Indirector::Indirection.expects(:instance).with(:my_handler).returns( stub "indirection", :model => @model_class )
@result = stub 'result', :render => "the result"
- @model_class.stubs(:destroy).returns @result
+ @indirection.stubs(:destroy).returns @result
end
it "should use the indirection request to find the model" do
@@ -314,14 +355,14 @@ describe Puppet::Network::HTTP::Handler do
end
it "should use the escaped request key to destroy the instance in the model" do
- @model_class.expects(:destroy).with do |key, args|
+ @indirection.expects(:destroy).with do |key, args|
key == "foo bar"
end
@handler.do_destroy("my_handler", "foo bar", {}, @request, @response)
end
it "should use a common method for determining the request parameters" do
- @model_class.expects(:destroy).with do |key, args|
+ @indirection.expects(:destroy).with do |key, args|
args[:foo] == :baz and args[:bar] == :xyzzy
end
@handler.do_destroy("my_handler", "my_result", {:foo => :baz, :bar => :xyzzy}, @request, @response)
@@ -334,7 +375,7 @@ describe Puppet::Network::HTTP::Handler do
it "should return a yaml-encoded result when a model destroy call succeeds" do
@result = stub 'result', :to_yaml => "the result"
- @model_class.expects(:destroy).returns(@result)
+ @indirection.expects(:destroy).returns(@result)
@handler.expects(:set_response).with { |response, body, status| body == "the result" }
@@ -350,8 +391,9 @@ describe Puppet::Network::HTTP::Handler do
@result = stub 'result', :render => "the result"
- @model_instance = stub('indirected model instance', :save => true)
+ @model_instance = stub('indirected model instance')
@model_class.stubs(:convert_from).returns(@model_instance)
+ @indirection.stubs(:save)
@format = stub 'format', :suitable? => true, :name => "format", :mime => "text/format"
Puppet::Network::FormatHandler.stubs(:format).returns @format
@@ -377,7 +419,7 @@ describe Puppet::Network::HTTP::Handler do
end
it "should use a common method for determining the request parameters" do
- @model_instance.expects(:save).with('key').once
+ @indirection.expects(:save).with(@model_instance, 'key').once
@handler.do_save("my_handler", "key", {}, @request, @response)
end
@@ -387,7 +429,7 @@ describe Puppet::Network::HTTP::Handler do
end
it "should return the yaml-serialized result when a model save call succeeds" do
- @model_instance.stubs(:save).returns(@model_instance)
+ @indirection.stubs(:save).returns(@model_instance)
@model_instance.expects(:to_yaml).returns('foo')
@handler.do_save("my_handler", "my_result", {}, @request, @response)
end
diff --git a/spec/unit/network/http/mongrel/rest_spec.rb b/spec/unit/network/http/mongrel/rest_spec.rb
index 92a81a10b..086fec522 100755
--- a/spec/unit/network/http/mongrel/rest_spec.rb
+++ b/spec/unit/network/http/mongrel/rest_spec.rb
@@ -1,11 +1,10 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../../../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../../../../spec_helper')
require 'puppet/network/http'
-describe "Puppet::Network::HTTP::MongrelREST" do
- confine "Mongrel is not available" => Puppet.features.mongrel?
+describe "Puppet::Network::HTTP::MongrelREST", :if => Puppet.features.mongrel? do
before do
require 'puppet/network/http/mongrel/rest'
end
diff --git a/spec/unit/network/http/mongrel_spec.rb b/spec/unit/network/http/mongrel_spec.rb
index ac3d72bae..5a67a3fae 100755
--- a/spec/unit/network/http/mongrel_spec.rb
+++ b/spec/unit/network/http/mongrel_spec.rb
@@ -3,12 +3,10 @@
# Created by Rick Bradley on 2007-10-15.
# Copyright (c) 2007. All rights reserved.
-require File.dirname(__FILE__) + '/../../../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../../../spec_helper')
require 'puppet/network/http'
-describe "Puppet::Network::HTTP::Mongrel", "after initializing" do
- confine "Mongrel is not available" => Puppet.features.mongrel?
-
+describe "Puppet::Network::HTTP::Mongrel", "after initializing", :if => Puppet.features.mongrel? do
it "should not be listening" do
require 'puppet/network/http/mongrel'
@@ -16,9 +14,7 @@ describe "Puppet::Network::HTTP::Mongrel", "after initializing" do
end
end
-describe "Puppet::Network::HTTP::Mongrel", "when turning on listening" do
- confine "Mongrel is not available" => Puppet.features.mongrel?
-
+describe "Puppet::Network::HTTP::Mongrel", "when turning on listening", :if => Puppet.features.mongrel? do
before do
require 'puppet/network/http/mongrel'
@@ -100,9 +96,7 @@ describe "Puppet::Network::HTTP::Mongrel", "when turning on listening" do
end
end
-describe "Puppet::Network::HTTP::Mongrel", "when turning off listening" do
- confine "Mongrel is not available" => Puppet.features.mongrel?
-
+describe "Puppet::Network::HTTP::Mongrel", "when turning off listening", :if => Puppet.features.mongrel? do
before do
@mock_mongrel = mock('mongrel httpserver')
@mock_mongrel.stubs(:run)
diff --git a/spec/unit/network/http/rack/rest_spec.rb b/spec/unit/network/http/rack/rest_spec.rb
index 96cf84c37..dd49fa057 100755
--- a/spec/unit/network/http/rack/rest_spec.rb
+++ b/spec/unit/network/http/rack/rest_spec.rb
@@ -1,12 +1,10 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../../../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../../../../spec_helper')
require 'puppet/network/http/rack' if Puppet.features.rack?
require 'puppet/network/http/rack/rest'
-describe "Puppet::Network::HTTP::RackREST" do
- confine "Rack is not available" => Puppet.features.rack?
-
+describe "Puppet::Network::HTTP::RackREST", :if => Puppet.features.rack? do
it "should include the Puppet::Network::HTTP::Handler module" do
Puppet::Network::HTTP::RackREST.ancestors.should be_include(Puppet::Network::HTTP::Handler)
end
diff --git a/spec/unit/network/http/rack/xmlrpc_spec.rb b/spec/unit/network/http/rack/xmlrpc_spec.rb
index 870438f2c..e8ae47bf7 100755
--- a/spec/unit/network/http/rack/xmlrpc_spec.rb
+++ b/spec/unit/network/http/rack/xmlrpc_spec.rb
@@ -1,13 +1,11 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../../../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../../../../spec_helper')
require 'puppet/network/handler'
require 'puppet/network/http/rack' if Puppet.features.rack?
require 'puppet/network/http/rack/xmlrpc' if Puppet.features.rack?
-describe "Puppet::Network::HTTP::RackXMLRPC" do
- confine "Rack is not available" => Puppet.features.rack?
-
+describe "Puppet::Network::HTTP::RackXMLRPC", :if => Puppet.features.rack? do
describe "when initializing" do
it "should create an Puppet::Network::XMLRPCServer" do
Puppet::Network::XMLRPCServer.expects(:new).returns stub_everything
diff --git a/spec/unit/network/http/rack_spec.rb b/spec/unit/network/http/rack_spec.rb
index 8be9ccb50..75d3fdb90 100755
--- a/spec/unit/network/http/rack_spec.rb
+++ b/spec/unit/network/http/rack_spec.rb
@@ -1,12 +1,10 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../../../spec_helper')
require 'puppet/network/handler'
require 'puppet/network/http/rack' if Puppet.features.rack?
-describe "Puppet::Network::HTTP::Rack" do
- confine "Rack is not available" => Puppet.features.rack?
-
+describe "Puppet::Network::HTTP::Rack", :if => Puppet.features.rack? do
describe "while initializing" do
it "should require a protocol specification" do
diff --git a/spec/unit/network/http/webrick/rest_spec.rb b/spec/unit/network/http/webrick/rest_spec.rb
index b00c62dc4..b1491e32e 100755
--- a/spec/unit/network/http/webrick/rest_spec.rb
+++ b/spec/unit/network/http/webrick/rest_spec.rb
@@ -1,6 +1,6 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../../../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../../../../spec_helper')
require 'puppet/network/http'
require 'webrick'
require 'puppet/network/http/webrick/rest'
diff --git a/spec/unit/network/http/webrick_spec.rb b/spec/unit/network/http/webrick_spec.rb
index 8e7c92b71..b27a941ea 100755
--- a/spec/unit/network/http/webrick_spec.rb
+++ b/spec/unit/network/http/webrick_spec.rb
@@ -3,7 +3,7 @@
# Created by Rick Bradley on 2007-10-15.
# Copyright (c) 2007. All rights reserved.
-require File.dirname(__FILE__) + '/../../../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../../../spec_helper')
require 'puppet/network/handler'
require 'puppet/network/http'
require 'puppet/network/http/webrick'
@@ -282,7 +282,7 @@ describe Puppet::Network::HTTP::WEBrick do
@cert = stub 'cert', :content => "mycert"
@host = stub 'host', :key => @key, :certificate => @cert, :name => "yay", :ssl_store => "mystore"
- Puppet::SSL::Certificate.stubs(:find).with('ca').returns @cert
+ Puppet::SSL::Certificate.indirection.stubs(:find).with('ca').returns @cert
Puppet::SSL::Host.stubs(:localhost).returns @host
end
@@ -299,7 +299,7 @@ describe Puppet::Network::HTTP::WEBrick do
end
it "should fail if no CA certificate can be found" do
- Puppet::SSL::Certificate.stubs(:find).with('ca').returns nil
+ Puppet::SSL::Certificate.indirection.stubs(:find).with('ca').returns nil
lambda { @server.setup_ssl }.should raise_error(Puppet::Error)
end
diff --git a/spec/unit/network/http_pool_spec.rb b/spec/unit/network/http_pool_spec.rb
index 8fa7de8f9..2cd96cea4 100755
--- a/spec/unit/network/http_pool_spec.rb
+++ b/spec/unit/network/http_pool_spec.rb
@@ -3,7 +3,7 @@
# Created by Luke Kanies on 2007-11-26.
# Copyright (c) 2007. All rights reserved.
-require File.dirname(__FILE__) + '/../../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
require 'puppet/network/http_pool'
describe Puppet::Network::HttpPool do
diff --git a/spec/unit/network/http_spec.rb b/spec/unit/network/http_spec.rb
index e1d0d2269..8422e2113 100755
--- a/spec/unit/network/http_spec.rb
+++ b/spec/unit/network/http_spec.rb
@@ -3,7 +3,7 @@
# Created by Rick Bradley on 2007-10-03.
# Copyright (c) 2007. All rights reserved.
-require File.dirname(__FILE__) + '/../../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
require 'puppet/network/http'
diff --git a/spec/unit/network/rest_authconfig_spec.rb b/spec/unit/network/rest_authconfig_spec.rb
index e81eb41ed..270d1d094 100755
--- a/spec/unit/network/rest_authconfig_spec.rb
+++ b/spec/unit/network/rest_authconfig_spec.rb
@@ -1,6 +1,6 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
require 'puppet/network/rest_authconfig'
@@ -17,7 +17,6 @@ describe Puppet::Network::RestAuthConfig do
{ :acl => "/certificate/", :method => :find, :authenticated => false },
{ :acl => "/certificate_request", :method => [:find, :save], :authenticated => false },
{ :acl => "/status", :method => [:find], :authenticated => true },
- { :acl => "/resource", :method => [:find, :save, :search], :authenticated => true },
]
before :each do
@@ -39,9 +38,10 @@ describe Puppet::Network::RestAuthConfig do
end
it "should ask for authorization to the ACL subsystem" do
- @acl.expects(:fail_on_deny).with("/path/to/resource", :node => "me", :ip => "127.0.0.1", :method => :save, :environment => :env, :authenticated => true)
+ params = {:ip => "127.0.0.1", :node => "me", :environment => :env, :authenticated => true}
+ @acl.expects(:is_request_forbidden_and_why?).with("path", :save, "to/resource", params).returns(nil)
- @authconfig.allowed?("path", :save, "to/resource", :ip => "127.0.0.1", :node => "me", :environment => :env, :authenticated => true)
+ @authconfig.allowed?("path", :save, "to/resource", params)
end
describe "when defining an acl with mk_acl" do
diff --git a/spec/unit/network/rights_spec.rb b/spec/unit/network/rights_spec.rb
index 969fc189e..8ae03c56d 100755
--- a/spec/unit/network/rights_spec.rb
+++ b/spec/unit/network/rights_spec.rb
@@ -1,6 +1,6 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
require 'puppet/network/rights'
@@ -9,6 +9,26 @@ describe Puppet::Network::Rights do
@right = Puppet::Network::Rights.new
end
+ describe "when validating a :head request" do
+ [:find, :save].each do |allowed_method|
+ it "should allow the request if only #{allowed_method} is allowed" do
+ rights = Puppet::Network::Rights.new
+ rights.newright("/")
+ rights.allow("/", "*")
+ rights.restrict_method("/", allowed_method)
+ rights.restrict_authenticated("/", :any)
+ rights.is_request_forbidden_and_why?(:indirection_name, :head, "key", {}).should == nil
+ end
+ end
+
+ it "should disallow the request if neither :find nor :save is allowed" do
+ rights = Puppet::Network::Rights.new
+ why_forbidden = rights.is_request_forbidden_and_why?(:indirection_name, :head, "key", {})
+ why_forbidden.should be_instance_of(Puppet::Network::AuthorizationError)
+ why_forbidden.to_s.should == "Forbidden request: access to /indirection_name/key [find]"
+ end
+ end
+
[:allow, :deny, :restrict_method, :restrict_environment, :restrict_authenticated].each do |m|
it "should have a #{m} method" do
@right.should respond_to(m)
@@ -155,19 +175,19 @@ describe Puppet::Network::Rights do
Puppet::Network::Rights::Right.stubs(:new).returns(@pathacl)
end
- it "should delegate to fail_on_deny" do
- @right.expects(:fail_on_deny).with("namespace", :node => "host.domain.com", :ip => "127.0.0.1")
+ it "should delegate to is_forbidden_and_why?" do
+ @right.expects(:is_forbidden_and_why?).with("namespace", :node => "host.domain.com", :ip => "127.0.0.1").returns(nil)
@right.allowed?("namespace", "host.domain.com", "127.0.0.1")
end
- it "should return true if fail_on_deny doesn't fail" do
- @right.stubs(:fail_on_deny)
+ it "should return true if is_forbidden_and_why? returns nil" do
+ @right.stubs(:is_forbidden_and_why?).returns(nil)
@right.allowed?("namespace", :args).should be_true
end
- it "should return false if fail_on_deny raises an AuthorizationError" do
- @right.stubs(:fail_on_deny).raises(Puppet::Network::AuthorizationError.new("forbidden"))
+ it "should return false if is_forbidden_and_why? returns an AuthorizationError" do
+ @right.stubs(:is_forbidden_and_why?).returns(Puppet::Network::AuthorizationError.new("forbidden"))
@right.allowed?("namespace", :args1, :args2).should be_false
end
@@ -179,7 +199,7 @@ describe Puppet::Network::Rights do
acl.expects(:match?).returns(true)
acl.expects(:allowed?).with { |node,ip,h| node == "node" and ip == "ip" }.returns(true)
- @right.fail_on_deny("namespace", { :node => "node", :ip => "ip" } )
+ @right.is_forbidden_and_why?("namespace", { :node => "node", :ip => "ip" } ).should == nil
end
it "should then check for path rights if no namespace match" do
@@ -195,7 +215,7 @@ describe Puppet::Network::Rights do
acl.expects(:allowed?).never
@pathacl.expects(:allowed?).returns(true)
- @right.fail_on_deny("/path/to/there", {})
+ @right.is_forbidden_and_why?("/path/to/there", {}).should == nil
end
it "should pass the match? return to allowed?" do
@@ -204,12 +224,12 @@ describe Puppet::Network::Rights do
@pathacl.expects(:match?).returns(:match)
@pathacl.expects(:allowed?).with { |node,ip,h| h[:match] == :match }.returns(true)
- @right.fail_on_deny("/path/to/there", {})
+ @right.is_forbidden_and_why?("/path/to/there", {}).should == nil
end
describe "with namespace acls" do
- it "should raise an error if this namespace right doesn't exist" do
- lambda{ @right.fail_on_deny("namespace") }.should raise_error
+ it "should return an ArgumentError if this namespace right doesn't exist" do
+ lambda { @right.is_forbidden_and_why?("namespace") }.should raise_error(ArgumentError)
end
end
@@ -235,7 +255,7 @@ describe Puppet::Network::Rights do
@long_acl.expects(:allowed?).returns(true)
@short_acl.expects(:allowed?).never
- @right.fail_on_deny("/path/to/there/and/there", {})
+ @right.is_forbidden_and_why?("/path/to/there/and/there", {}).should == nil
end
it "should select the first match that doesn't return :dunno" do
@@ -248,7 +268,7 @@ describe Puppet::Network::Rights do
@long_acl.expects(:allowed?).returns(:dunno)
@short_acl.expects(:allowed?).returns(true)
- @right.fail_on_deny("/path/to/there/and/there", {})
+ @right.is_forbidden_and_why?("/path/to/there/and/there", {}).should == nil
end
it "should not select an ACL that doesn't match" do
@@ -261,7 +281,7 @@ describe Puppet::Network::Rights do
@long_acl.expects(:allowed?).never
@short_acl.expects(:allowed?).returns(true)
- @right.fail_on_deny("/path/to/there/and/there", {})
+ @right.is_forbidden_and_why?("/path/to/there/and/there", {}).should == nil
end
it "should not raise an AuthorizationError if allowed" do
@@ -270,7 +290,7 @@ describe Puppet::Network::Rights do
@long_acl.stubs(:match?).returns(true)
@long_acl.stubs(:allowed?).returns(true)
- lambda { @right.fail_on_deny("/path/to/there/and/there", {}) }.should_not raise_error(Puppet::Network::AuthorizationError)
+ @right.is_forbidden_and_why?("/path/to/there/and/there", {}).should == nil
end
it "should raise an AuthorizationError if the match is denied" do
@@ -279,11 +299,11 @@ describe Puppet::Network::Rights do
@long_acl.stubs(:match?).returns(true)
@long_acl.stubs(:allowed?).returns(false)
- lambda{ @right.fail_on_deny("/path/to/there", {}) }.should raise_error(Puppet::Network::AuthorizationError)
+ @right.is_forbidden_and_why?("/path/to/there", {}).should be_instance_of(Puppet::Network::AuthorizationError)
end
it "should raise an AuthorizationError if no path match" do
- lambda { @right.fail_on_deny("/nomatch", {}) }.should raise_error(Puppet::Network::AuthorizationError)
+ @right.is_forbidden_and_why?("/nomatch", {}).should be_instance_of(Puppet::Network::AuthorizationError)
end
end
@@ -309,7 +329,7 @@ describe Puppet::Network::Rights do
@regex_acl1.expects(:allowed?).returns(true)
@regex_acl2.expects(:allowed?).never
- @right.fail_on_deny("/files/repository/myfile/other", {})
+ @right.is_forbidden_and_why?("/files/repository/myfile/other", {}).should == nil
end
it "should select the first match that doesn't return :dunno" do
@@ -322,7 +342,7 @@ describe Puppet::Network::Rights do
@regex_acl1.expects(:allowed?).returns(:dunno)
@regex_acl2.expects(:allowed?).returns(true)
- @right.fail_on_deny("/files/repository/myfile/other", {})
+ @right.is_forbidden_and_why?("/files/repository/myfile/other", {}).should == nil
end
it "should not select an ACL that doesn't match" do
@@ -335,7 +355,7 @@ describe Puppet::Network::Rights do
@regex_acl1.expects(:allowed?).never
@regex_acl2.expects(:allowed?).returns(true)
- @right.fail_on_deny("/files/repository/myfile/other", {})
+ @right.is_forbidden_and_why?("/files/repository/myfile/other", {}).should == nil
end
it "should not raise an AuthorizationError if allowed" do
@@ -344,15 +364,15 @@ describe Puppet::Network::Rights do
@regex_acl1.stubs(:match?).returns(true)
@regex_acl1.stubs(:allowed?).returns(true)
- lambda { @right.fail_on_deny("/files/repository/myfile/other", {}) }.should_not raise_error(Puppet::Network::AuthorizationError)
+ @right.is_forbidden_and_why?("/files/repository/myfile/other", {}).should == nil
end
it "should raise an error if no regex acl match" do
- lambda{ @right.fail_on_deny("/path", {}) }.should raise_error(Puppet::Network::AuthorizationError)
+ @right.is_forbidden_and_why?("/path", {}).should be_instance_of(Puppet::Network::AuthorizationError)
end
it "should raise an AuthorizedError on deny" do
- lambda { @right.fail_on_deny("/path", {}) }.should raise_error(Puppet::Network::AuthorizationError)
+ @right.is_forbidden_and_why?("/path", {}).should be_instance_of(Puppet::Network::AuthorizationError)
end
end
diff --git a/spec/unit/network/server_spec.rb b/spec/unit/network/server_spec.rb
index c2496dcca..2a63cd4ec 100755
--- a/spec/unit/network/server_spec.rb
+++ b/spec/unit/network/server_spec.rb
@@ -3,7 +3,7 @@
# Created by Rick Bradley on 2007-10-03.
# Copyright (c) 2007. All rights reserved.
-require File.dirname(__FILE__) + '/../../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
require 'puppet/network/server'
require 'puppet/network/handler'
diff --git a/spec/unit/node/environment_spec.rb b/spec/unit/node/environment_spec.rb
index be2980879..153be5f60 100755
--- a/spec/unit/node/environment_spec.rb
+++ b/spec/unit/node/environment_spec.rb
@@ -1,6 +1,6 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
require 'puppet/node/environment'
require 'puppet/util/execution'
diff --git a/spec/unit/node/facts_spec.rb b/spec/unit/node/facts_spec.rb
index cb2aa3dc7..797009ae4 100755
--- a/spec/unit/node/facts_spec.rb
+++ b/spec/unit/node/facts_spec.rb
@@ -1,6 +1,6 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
require 'puppet/node/facts'
@@ -76,16 +76,10 @@ describe Puppet::Node::Facts, "when indirecting" do
@facts = Puppet::Node::Facts.new("me", "one" => "two")
end
- it "should redirect to the specified fact store for retrieval" do
- Puppet::Node::Facts.stubs(:indirection).returns(@indirection)
- @indirection.expects(:find)
- Puppet::Node::Facts.find(:my_facts)
- end
-
it "should redirect to the specified fact store for storage" do
Puppet::Node::Facts.stubs(:indirection).returns(@indirection)
@indirection.expects(:save)
- @facts.save
+ Puppet::Node::Facts.indirection.save(@facts)
end
describe "when the Puppet application is 'master'" do
diff --git a/spec/unit/node_spec.rb b/spec/unit/node_spec.rb
index 36334ea05..ec1b65ee1 100755
--- a/spec/unit/node_spec.rb
+++ b/spec/unit/node_spec.rb
@@ -1,6 +1,6 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
describe Puppet::Node do
describe "when managing its environment" do
@@ -84,11 +84,11 @@ end
describe Puppet::Node, "when merging facts" do
before do
@node = Puppet::Node.new("testnode")
- Puppet::Node::Facts.stubs(:find).with(@node.name).returns(Puppet::Node::Facts.new(@node.name, "one" => "c", "two" => "b"))
+ Puppet::Node::Facts.indirection.stubs(:find).with(@node.name).returns(Puppet::Node::Facts.new(@node.name, "one" => "c", "two" => "b"))
end
it "should fail intelligently if it cannot find facts" do
- Puppet::Node::Facts.expects(:find).with(@node.name).raises "foo"
+ Puppet::Node::Facts.indirection.expects(:find).with(@node.name).raises "foo"
lambda { @node.fact_merge }.should raise_error(Puppet::Error)
end
@@ -128,13 +128,6 @@ describe Puppet::Node, "when merging facts" do
end
describe Puppet::Node, "when indirecting" do
- it "should redirect to the indirection" do
- @indirection = stub 'indirection', :name => :node
- Puppet::Node.stubs(:indirection).returns(@indirection)
- @indirection.expects(:find)
- Puppet::Node.find(:my_node.to_s)
- end
-
it "should default to the 'plain' node terminus" do
Puppet::Node.indirection.terminus_class.should == :plain
end
diff --git a/spec/unit/other/selinux_spec.rb b/spec/unit/other/selinux_spec.rb
index 4ec0bba5a..7f908885f 100644
--- a/spec/unit/other/selinux_spec.rb
+++ b/spec/unit/other/selinux_spec.rb
@@ -1,6 +1,6 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
require 'puppet/type/selboolean'
require 'puppet/type/selmodule'
diff --git a/spec/unit/other/transbucket_spec.rb b/spec/unit/other/transbucket_spec.rb
index a5c4b47a4..6bc257897 100755
--- a/spec/unit/other/transbucket_spec.rb
+++ b/spec/unit/other/transbucket_spec.rb
@@ -1,6 +1,6 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
describe Puppet::TransBucket do
before do
diff --git a/spec/unit/other/transobject_spec.rb b/spec/unit/other/transobject_spec.rb
index 352af48fd..c2652a386 100755
--- a/spec/unit/other/transobject_spec.rb
+++ b/spec/unit/other/transobject_spec.rb
@@ -1,6 +1,6 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
require 'puppet/transportable'
diff --git a/spec/unit/parameter/value_collection_spec.rb b/spec/unit/parameter/value_collection_spec.rb
index cb82d1517..99e4302bc 100755
--- a/spec/unit/parameter/value_collection_spec.rb
+++ b/spec/unit/parameter/value_collection_spec.rb
@@ -1,6 +1,6 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
require 'puppet/parameter'
diff --git a/spec/unit/parameter/value_spec.rb b/spec/unit/parameter/value_spec.rb
index 10b24fb4d..cb44770b4 100755
--- a/spec/unit/parameter/value_spec.rb
+++ b/spec/unit/parameter/value_spec.rb
@@ -1,6 +1,6 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
require 'puppet/parameter'
diff --git a/spec/unit/parameter_spec.rb b/spec/unit/parameter_spec.rb
index 966bbfb81..c9ef32faf 100755
--- a/spec/unit/parameter_spec.rb
+++ b/spec/unit/parameter_spec.rb
@@ -1,6 +1,6 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
require 'puppet/parameter'
@@ -52,8 +52,7 @@ describe Puppet::Parameter do
@resource.expects(:line).returns 10
@resource.expects(:file).returns "file"
@resource.expects(:tags).returns %w{one two}
- @resource.expects(:version).returns 50
- @parameter.source_descriptors.should == {:tags=>["one", "two", "foo"], :path=>"//foo", :version=>50, :file => "file", :line => 10}
+ @parameter.source_descriptors.should == {:tags=>["one", "two", "foo"], :path=>"//foo", :file => "file", :line => 10}
end
describe "when returning the value" do
diff --git a/spec/unit/parser/ast/arithmetic_operator_spec.rb b/spec/unit/parser/ast/arithmetic_operator_spec.rb
index 093cf94f1..381c5c629 100755
--- a/spec/unit/parser/ast/arithmetic_operator_spec.rb
+++ b/spec/unit/parser/ast/arithmetic_operator_spec.rb
@@ -1,6 +1,6 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../../../spec_helper')
describe Puppet::Parser::AST::ArithmeticOperator do
diff --git a/spec/unit/parser/ast/astarray_spec.rb b/spec/unit/parser/ast/astarray_spec.rb
index 8794848b6..01082b3f0 100755
--- a/spec/unit/parser/ast/astarray_spec.rb
+++ b/spec/unit/parser/ast/astarray_spec.rb
@@ -1,6 +1,6 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../../../spec_helper')
describe Puppet::Parser::AST::ASTArray do
before :each do
diff --git a/spec/unit/parser/ast/asthash_spec.rb b/spec/unit/parser/ast/asthash_spec.rb
index c70553c56..83f604545 100644
--- a/spec/unit/parser/ast/asthash_spec.rb
+++ b/spec/unit/parser/ast/asthash_spec.rb
@@ -1,6 +1,6 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../../../spec_helper')
describe Puppet::Parser::AST::ASTHash do
before :each do
diff --git a/spec/unit/parser/ast/boolean_operator_spec.rb b/spec/unit/parser/ast/boolean_operator_spec.rb
index 10e987e31..529946694 100755
--- a/spec/unit/parser/ast/boolean_operator_spec.rb
+++ b/spec/unit/parser/ast/boolean_operator_spec.rb
@@ -1,6 +1,6 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../../../spec_helper')
describe Puppet::Parser::AST::BooleanOperator do
diff --git a/spec/unit/parser/ast/casestatement_spec.rb b/spec/unit/parser/ast/casestatement_spec.rb
index 4d79e54cb..a77c04c43 100755
--- a/spec/unit/parser/ast/casestatement_spec.rb
+++ b/spec/unit/parser/ast/casestatement_spec.rb
@@ -1,6 +1,6 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../../../spec_helper')
describe Puppet::Parser::AST::CaseStatement do
before :each do
diff --git a/spec/unit/parser/ast/collection_spec.rb b/spec/unit/parser/ast/collection_spec.rb
index 392a2c0f0..a495bca15 100755
--- a/spec/unit/parser/ast/collection_spec.rb
+++ b/spec/unit/parser/ast/collection_spec.rb
@@ -1,6 +1,6 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../../../spec_helper')
describe Puppet::Parser::AST::Collection do
before :each do
diff --git a/spec/unit/parser/ast/collexpr_spec.rb b/spec/unit/parser/ast/collexpr_spec.rb
index 01276dfb3..04ce69cd3 100755
--- a/spec/unit/parser/ast/collexpr_spec.rb
+++ b/spec/unit/parser/ast/collexpr_spec.rb
@@ -1,6 +1,6 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../../../spec_helper')
describe Puppet::Parser::AST::CollExpr do
diff --git a/spec/unit/parser/ast/comparison_operator_spec.rb b/spec/unit/parser/ast/comparison_operator_spec.rb
index 931f936df..03c9069cb 100755
--- a/spec/unit/parser/ast/comparison_operator_spec.rb
+++ b/spec/unit/parser/ast/comparison_operator_spec.rb
@@ -1,6 +1,6 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../../../spec_helper')
describe Puppet::Parser::AST::ComparisonOperator do
before :each do
diff --git a/spec/unit/parser/ast/definition_spec.rb b/spec/unit/parser/ast/definition_spec.rb
index b7b2c851c..e7f55d258 100644
--- a/spec/unit/parser/ast/definition_spec.rb
+++ b/spec/unit/parser/ast/definition_spec.rb
@@ -1,6 +1,6 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../../../spec_helper')
describe Puppet::Parser::AST::Definition do
it "should make its context available through an accessor" do
diff --git a/spec/unit/parser/ast/function_spec.rb b/spec/unit/parser/ast/function_spec.rb
index 38e344157..cd4b0f94e 100644
--- a/spec/unit/parser/ast/function_spec.rb
+++ b/spec/unit/parser/ast/function_spec.rb
@@ -1,6 +1,6 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../../../spec_helper')
describe Puppet::Parser::AST::Function do
before :each do
diff --git a/spec/unit/parser/ast/hostclass_spec.rb b/spec/unit/parser/ast/hostclass_spec.rb
index b22eba98b..390490788 100644
--- a/spec/unit/parser/ast/hostclass_spec.rb
+++ b/spec/unit/parser/ast/hostclass_spec.rb
@@ -1,6 +1,6 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../../../spec_helper')
describe Puppet::Parser::AST::Hostclass do
def ast
diff --git a/spec/unit/parser/ast/ifstatement_spec.rb b/spec/unit/parser/ast/ifstatement_spec.rb
index 2a9e1e37b..6a2fed22c 100755
--- a/spec/unit/parser/ast/ifstatement_spec.rb
+++ b/spec/unit/parser/ast/ifstatement_spec.rb
@@ -1,6 +1,6 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../../../spec_helper')
describe Puppet::Parser::AST::IfStatement do
before :each do
diff --git a/spec/unit/parser/ast/in_operator_spec.rb b/spec/unit/parser/ast/in_operator_spec.rb
index aebe442ab..08c01582e 100644
--- a/spec/unit/parser/ast/in_operator_spec.rb
+++ b/spec/unit/parser/ast/in_operator_spec.rb
@@ -1,6 +1,6 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../../../spec_helper')
require 'puppet/parser/ast/in_operator'
diff --git a/spec/unit/parser/ast/leaf_spec.rb b/spec/unit/parser/ast/leaf_spec.rb
index a19c24115..2119a27a8 100755
--- a/spec/unit/parser/ast/leaf_spec.rb
+++ b/spec/unit/parser/ast/leaf_spec.rb
@@ -1,6 +1,6 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../../../spec_helper')
describe Puppet::Parser::AST::Leaf do
before :each do
diff --git a/spec/unit/parser/ast/match_operator_spec.rb b/spec/unit/parser/ast/match_operator_spec.rb
index d6e998751..f2a68b676 100755
--- a/spec/unit/parser/ast/match_operator_spec.rb
+++ b/spec/unit/parser/ast/match_operator_spec.rb
@@ -1,6 +1,6 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../../../spec_helper')
describe Puppet::Parser::AST::MatchOperator do
before :each do
diff --git a/spec/unit/parser/ast/minus_spec.rb b/spec/unit/parser/ast/minus_spec.rb
index 108c8812e..339087e80 100755
--- a/spec/unit/parser/ast/minus_spec.rb
+++ b/spec/unit/parser/ast/minus_spec.rb
@@ -1,6 +1,6 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../../../spec_helper')
describe Puppet::Parser::AST::Minus do
before :each do
diff --git a/spec/unit/parser/ast/node_spec.rb b/spec/unit/parser/ast/node_spec.rb
index 3e8017de0..c4e20ca67 100644
--- a/spec/unit/parser/ast/node_spec.rb
+++ b/spec/unit/parser/ast/node_spec.rb
@@ -1,6 +1,6 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../../../spec_helper')
describe Puppet::Parser::AST::Node do
describe "when instantiated" do
diff --git a/spec/unit/parser/ast/nop_spec.rb b/spec/unit/parser/ast/nop_spec.rb
index 3e493197a..3fa2fc0ee 100755
--- a/spec/unit/parser/ast/nop_spec.rb
+++ b/spec/unit/parser/ast/nop_spec.rb
@@ -1,6 +1,6 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../../../spec_helper')
describe Puppet::Parser::AST::Nop do
diff --git a/spec/unit/parser/ast/not_spec.rb b/spec/unit/parser/ast/not_spec.rb
index 2ef6e0689..31a425132 100755
--- a/spec/unit/parser/ast/not_spec.rb
+++ b/spec/unit/parser/ast/not_spec.rb
@@ -1,6 +1,6 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../../../spec_helper')
describe Puppet::Parser::AST::Not do
before :each do
diff --git a/spec/unit/parser/ast/relationship_spec.rb b/spec/unit/parser/ast/relationship_spec.rb
index 2a0f658df..d8bc3a535 100644
--- a/spec/unit/parser/ast/relationship_spec.rb
+++ b/spec/unit/parser/ast/relationship_spec.rb
@@ -1,6 +1,6 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../../../spec_helper')
describe Puppet::Parser::AST::Relationship do
before do
diff --git a/spec/unit/parser/ast/resource_defaults_spec.rb b/spec/unit/parser/ast/resource_defaults_spec.rb
index 7843fd9a9..36eb8df5f 100755
--- a/spec/unit/parser/ast/resource_defaults_spec.rb
+++ b/spec/unit/parser/ast/resource_defaults_spec.rb
@@ -1,6 +1,6 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../../../spec_helper')
describe Puppet::Parser::AST::ResourceDefaults do
diff --git a/spec/unit/parser/ast/resource_override_spec.rb b/spec/unit/parser/ast/resource_override_spec.rb
index 637ab41fc..7ca3a7e8c 100755
--- a/spec/unit/parser/ast/resource_override_spec.rb
+++ b/spec/unit/parser/ast/resource_override_spec.rb
@@ -1,6 +1,6 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../../../spec_helper')
describe Puppet::Parser::AST::ResourceOverride do
diff --git a/spec/unit/parser/ast/resource_reference_spec.rb b/spec/unit/parser/ast/resource_reference_spec.rb
index 93419d963..492c25490 100755
--- a/spec/unit/parser/ast/resource_reference_spec.rb
+++ b/spec/unit/parser/ast/resource_reference_spec.rb
@@ -1,6 +1,6 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../../../spec_helper')
describe Puppet::Parser::AST::ResourceReference do
diff --git a/spec/unit/parser/ast/resource_spec.rb b/spec/unit/parser/ast/resource_spec.rb
index 3f7fa229a..b00fee587 100755
--- a/spec/unit/parser/ast/resource_spec.rb
+++ b/spec/unit/parser/ast/resource_spec.rb
@@ -1,6 +1,6 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../../../spec_helper')
describe Puppet::Parser::AST::Resource do
ast = Puppet::Parser::AST
diff --git a/spec/unit/parser/ast/selector_spec.rb b/spec/unit/parser/ast/selector_spec.rb
index 42898475f..4c13aa7ba 100755
--- a/spec/unit/parser/ast/selector_spec.rb
+++ b/spec/unit/parser/ast/selector_spec.rb
@@ -1,6 +1,6 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../../../spec_helper')
describe Puppet::Parser::AST::Selector do
before :each do
diff --git a/spec/unit/parser/ast/vardef_spec.rb b/spec/unit/parser/ast/vardef_spec.rb
index a90010f5a..9c8b77905 100755
--- a/spec/unit/parser/ast/vardef_spec.rb
+++ b/spec/unit/parser/ast/vardef_spec.rb
@@ -1,6 +1,6 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../../../spec_helper')
describe Puppet::Parser::AST::VarDef do
before :each do
diff --git a/spec/unit/parser/ast_spec.rb b/spec/unit/parser/ast_spec.rb
index 29dce2b9c..cdfb51869 100644
--- a/spec/unit/parser/ast_spec.rb
+++ b/spec/unit/parser/ast_spec.rb
@@ -1,6 +1,6 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
require 'puppet/parser/ast'
diff --git a/spec/unit/parser/collector_spec.rb b/spec/unit/parser/collector_spec.rb
index 908cda63a..100a04daf 100755
--- a/spec/unit/parser/collector_spec.rb
+++ b/spec/unit/parser/collector_spec.rb
@@ -1,6 +1,6 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
require 'puppet/rails'
require 'puppet/parser/collector'
@@ -263,9 +263,7 @@ describe Puppet::Parser::Collector, "when collecting virtual and catalog resourc
end
end
-describe Puppet::Parser::Collector, "when collecting exported resources" do
- confine "Cannot test Rails integration without ActiveRecord" => Puppet.features.rails?
-
+describe Puppet::Parser::Collector, "when collecting exported resources", :if => Puppet.features.rails? do
before do
@compiler = Puppet::Parser::Compiler.new(Puppet::Node.new("mynode"))
@scope = Puppet::Parser::Scope.new :compiler => @compiler
@@ -469,9 +467,7 @@ describe Puppet::Parser::Collector, "when collecting exported resources" do
end
end
-describe Puppet::Parser::Collector, "when building its ActiveRecord query for collecting exported resources" do
- confine "Cannot test Rails integration without ActiveRecord" => Puppet.features.rails?
-
+describe Puppet::Parser::Collector, "when building its ActiveRecord query for collecting exported resources", :if => Puppet.features.rails? do
before do
@scope = stub 'scope', :host => "myhost", :debug => nil
@compiler = mock 'compile'
diff --git a/spec/unit/parser/compiler_spec.rb b/spec/unit/parser/compiler_spec.rb
index 95f3853e2..18f9a93b6 100755
--- a/spec/unit/parser/compiler_spec.rb
+++ b/spec/unit/parser/compiler_spec.rb
@@ -1,6 +1,6 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
class CompilerTestResource
attr_accessor :builtin, :virtual, :evaluated, :type, :title
@@ -105,8 +105,15 @@ describe Puppet::Parser::Compiler do
node.classes = %w{foo bar}
compiler = Puppet::Parser::Compiler.new(node)
- compiler.classlist.should include("foo")
- compiler.classlist.should include("bar")
+ compiler.classlist.should =~ ['foo', 'bar']
+ end
+
+ it "should transform node class hashes into a class list" do
+ node = Puppet::Node.new("mynode")
+ node.classes = {'foo'=>{'one'=>'1'}, 'bar'=>{'two'=>'2'}}
+ compiler = Puppet::Parser::Compiler.new(node)
+
+ compiler.classlist.should =~ ['foo', 'bar']
end
it "should add a 'main' stage to the catalog" do
@@ -185,6 +192,14 @@ describe Puppet::Parser::Compiler do
@compiler.class.publicize_methods(:evaluate_node_classes) { @compiler.evaluate_node_classes }
end
+ it "should evaluate any parameterized classes named in the node" do
+ classes = {'foo'=>{'1'=>'one'}, 'bar'=>{'2'=>'two'}}
+ @node.stubs(:classes).returns(classes)
+ @compiler.expects(:evaluate_classes).with(classes, @compiler.topscope)
+ @compiler.compile
+ end
+
+
it "should evaluate the main class if it exists" do
compile_stub(:evaluate_main)
main_class = @known_resource_types.add Puppet::Resource::Type.new(:hostclass, "")
@@ -532,7 +547,7 @@ describe Puppet::Parser::Compiler do
@compiler.add_collection(coll)
- lambda { @compiler.compile }.should raise_error(Puppet::ParseError)
+ lambda { @compiler.compile }.should raise_error Puppet::ParseError, 'Failed to realize virtual resources something'
end
it "should fail when there are unevaluated resource collections that refer to multiple specific resources" do
@@ -541,7 +556,7 @@ describe Puppet::Parser::Compiler do
@compiler.add_collection(coll)
- lambda { @compiler.compile }.should raise_error(Puppet::ParseError)
+ lambda { @compiler.compile }.should raise_error Puppet::ParseError, 'Failed to realize virtual resources one, two'
end
end
@@ -566,6 +581,14 @@ describe Puppet::Parser::Compiler do
@scope.expects(:find_hostclass).with("notfound").returns(nil)
@compiler.evaluate_classes(%w{notfound}, @scope)
end
+ # I wish it would fail
+ it "should log when it can't find class" do
+ klasses = {'foo'=>nil}
+ @node.classes = klasses
+ @compiler.topscope.stubs(:find_hostclass).with('foo').returns(nil)
+ Puppet.expects(:info).with('Could not find class foo for testnode')
+ @compiler.compile
+ end
end
describe "when evaluating found classes" do
@@ -586,6 +609,68 @@ describe Puppet::Parser::Compiler do
@compiler.evaluate_classes(%w{myclass}, @scope)
end
+ it "should ensure each node class hash is in catalog and have appropriate parameters" do
+ klasses = {'foo'=>{'1'=>'one'}, 'bar::foo'=>{'2'=>'two'}, 'bar'=>{'1'=> [1,2,3], '2'=>{'foo'=>'bar'}}}
+ @node.classes = klasses
+ ast_obj = Puppet::Parser::AST::String.new(:value => 'foo')
+ klasses.each do |name, params|
+ klass = Puppet::Resource::Type.new(:hostclass, name, :arguments => {'1' => ast_obj, '2' => ast_obj})
+ @compiler.topscope.known_resource_types.add klass
+ end
+ catalog = @compiler.compile
+ catalog.classes.should =~ ['foo', 'bar::foo', 'settings', 'bar']
+
+ r1 = catalog.resources.detect {|r| r.title == 'Foo' }
+ r1.to_hash.should == {:'1' => 'one', :'2' => 'foo'}
+ r1.tags. should =~ ['class', 'foo']
+
+ r2 = catalog.resources.detect {|r| r.title == 'Bar::Foo' }
+ r2.to_hash.should == {:'1' => 'foo', :'2' => 'two'}
+ r2.tags.should =~ ['bar::foo', 'class', 'bar', 'foo']
+
+ r2 = catalog.resources.detect {|r| r.title == 'Bar' }
+ r2.to_hash.should == {:'1' => [1,2,3], :'2' => {'foo'=>'bar'}}
+ r2.tags.should =~ ['class', 'bar']
+ end
+
+ it "should ensure each node class is in catalog and has appropriate tags" do
+ klasses = ['bar::foo']
+ @node.classes = klasses
+ ast_obj = Puppet::Parser::AST::String.new(:value => 'foo')
+ klasses.each do |name|
+ klass = Puppet::Resource::Type.new(:hostclass, name, :arguments => {'1' => ast_obj, '2' => ast_obj})
+ @compiler.topscope.known_resource_types.add klass
+ end
+ catalog = @compiler.compile
+
+ r2 = catalog.resources.detect {|r| r.title == 'Bar::Foo' }
+ r2.tags.should =~ ['bar::foo', 'class', 'bar', 'foo']
+ end
+
+ it "should fail if required parameters are missing" do
+ klass = {'foo'=>{'1'=>'one'}}
+ @node.classes = klass
+ klass = Puppet::Resource::Type.new(:hostclass, 'foo', :arguments => {'1' => nil, '2' => nil})
+ @compiler.topscope.known_resource_types.add klass
+ lambda { @compiler.compile }.should raise_error Puppet::ParseError, "Must pass 2 to Class[Foo]"
+ end
+
+ it "should fail if invalid parameters are passed" do
+ klass = {'foo'=>{'3'=>'one'}}
+ @node.classes = klass
+ klass = Puppet::Resource::Type.new(:hostclass, 'foo', :arguments => {'1' => nil, '2' => nil})
+ @compiler.topscope.known_resource_types.add klass
+ lambda { @compiler.compile }.should raise_error Puppet::ParseError, "Invalid parameter 3"
+ end
+
+ it "should ensure class is in catalog without params" do
+ @node.classes = klasses = {'foo'=>nil}
+ foo = Puppet::Resource::Type.new(:hostclass, 'foo')
+ @compiler.topscope.known_resource_types.add foo
+ catalog = @compiler.compile
+ catalog.classes.should include 'foo'
+ end
+
it "should not evaluate the resources created for found classes unless asked" do
@compiler.catalog.stubs(:tag)
@@ -759,7 +844,7 @@ describe Puppet::Parser::Compiler do
it "should fail if the compile is finished and resource overrides have not been applied" do
@compiler.add_override(@override)
- lambda { @compiler.compile }.should raise_error(Puppet::ParseError)
+ lambda { @compiler.compile }.should raise_error Puppet::ParseError, 'Could not find resource(s) File[/foo] for overriding'
end
end
end
diff --git a/spec/unit/parser/files_spec.rb b/spec/unit/parser/files_spec.rb
index 3eb0db07e..525c83697 100644
--- a/spec/unit/parser/files_spec.rb
+++ b/spec/unit/parser/files_spec.rb
@@ -1,6 +1,6 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
require 'puppet/parser/files'
diff --git a/spec/unit/parser/functions/defined_spec.rb b/spec/unit/parser/functions/defined_spec.rb
index cf3f66e17..0dd1dadb8 100755
--- a/spec/unit/parser/functions/defined_spec.rb
+++ b/spec/unit/parser/functions/defined_spec.rb
@@ -1,6 +1,6 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../../../spec_helper')
describe "the 'defined' function" do
diff --git a/spec/unit/parser/functions/extlookup_spec.rb b/spec/unit/parser/functions/extlookup_spec.rb
index a3dcaa742..a476dc844 100755
--- a/spec/unit/parser/functions/extlookup_spec.rb
+++ b/spec/unit/parser/functions/extlookup_spec.rb
@@ -1,6 +1,6 @@
#! /usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../../../spec_helper')
require 'tempfile'
describe "the extlookup function" do
diff --git a/spec/unit/parser/functions/fqdn_rand_spec.rb b/spec/unit/parser/functions/fqdn_rand_spec.rb
index 81c12c6a7..151ebac9a 100644
--- a/spec/unit/parser/functions/fqdn_rand_spec.rb
+++ b/spec/unit/parser/functions/fqdn_rand_spec.rb
@@ -1,6 +1,6 @@
#! /usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../../../spec_helper')
describe "the fqdn_rand function" do
diff --git a/spec/unit/parser/functions/generate_spec.rb b/spec/unit/parser/functions/generate_spec.rb
index 27aabe261..12f454210 100755
--- a/spec/unit/parser/functions/generate_spec.rb
+++ b/spec/unit/parser/functions/generate_spec.rb
@@ -1,6 +1,6 @@
#! /usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../../../spec_helper')
describe "the generate function" do
diff --git a/spec/unit/parser/functions/include_spec.rb b/spec/unit/parser/functions/include_spec.rb
index 4f609b055..67227e7d9 100644
--- a/spec/unit/parser/functions/include_spec.rb
+++ b/spec/unit/parser/functions/include_spec.rb
@@ -1,6 +1,6 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../../../spec_helper')
describe "the 'include' function" do
diff --git a/spec/unit/parser/functions/inline_template_spec.rb b/spec/unit/parser/functions/inline_template_spec.rb
index 62f389e5d..36d53778d 100755
--- a/spec/unit/parser/functions/inline_template_spec.rb
+++ b/spec/unit/parser/functions/inline_template_spec.rb
@@ -1,6 +1,6 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../../../spec_helper')
describe "the inline_template function" do
diff --git a/spec/unit/parser/functions/realize_spec.rb b/spec/unit/parser/functions/realize_spec.rb
index 82f4fa251..899f69b01 100755
--- a/spec/unit/parser/functions/realize_spec.rb
+++ b/spec/unit/parser/functions/realize_spec.rb
@@ -1,6 +1,6 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../../../spec_helper')
describe "the realize function" do
diff --git a/spec/unit/parser/functions/regsubst_spec.rb b/spec/unit/parser/functions/regsubst_spec.rb
index 47126dd7a..09aa92d28 100755
--- a/spec/unit/parser/functions/regsubst_spec.rb
+++ b/spec/unit/parser/functions/regsubst_spec.rb
@@ -1,6 +1,6 @@
#! /usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../../../spec_helper')
describe "the regsubst function" do
diff --git a/spec/unit/parser/functions/require_spec.rb b/spec/unit/parser/functions/require_spec.rb
index 49c4bbf74..4afbd5a63 100755
--- a/spec/unit/parser/functions/require_spec.rb
+++ b/spec/unit/parser/functions/require_spec.rb
@@ -1,6 +1,6 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../../../spec_helper')
describe "the require function" do
diff --git a/spec/unit/parser/functions/shellquote_spec.rb b/spec/unit/parser/functions/shellquote_spec.rb
index 46b9f8d10..c8b0d650d 100755
--- a/spec/unit/parser/functions/shellquote_spec.rb
+++ b/spec/unit/parser/functions/shellquote_spec.rb
@@ -1,6 +1,6 @@
#! /usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../../../spec_helper')
describe "the shellquote function" do
diff --git a/spec/unit/parser/functions/split_spec.rb b/spec/unit/parser/functions/split_spec.rb
index a1c83bb0f..39710003b 100755
--- a/spec/unit/parser/functions/split_spec.rb
+++ b/spec/unit/parser/functions/split_spec.rb
@@ -1,6 +1,6 @@
#! /usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../../../spec_helper')
describe "the split function" do
diff --git a/spec/unit/parser/functions/sprintf_spec.rb b/spec/unit/parser/functions/sprintf_spec.rb
index 01545a879..4f29012b3 100755
--- a/spec/unit/parser/functions/sprintf_spec.rb
+++ b/spec/unit/parser/functions/sprintf_spec.rb
@@ -1,6 +1,6 @@
#! /usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../../../spec_helper')
describe "the sprintf function" do
diff --git a/spec/unit/parser/functions/tag_spec.rb b/spec/unit/parser/functions/tag_spec.rb
index dac134134..e9b5122c7 100755
--- a/spec/unit/parser/functions/tag_spec.rb
+++ b/spec/unit/parser/functions/tag_spec.rb
@@ -1,6 +1,6 @@
#! /usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../../../spec_helper')
describe "the 'tag' function" do
diff --git a/spec/unit/parser/functions/template_spec.rb b/spec/unit/parser/functions/template_spec.rb
index 096b0598e..9dd5cc947 100755
--- a/spec/unit/parser/functions/template_spec.rb
+++ b/spec/unit/parser/functions/template_spec.rb
@@ -1,6 +1,6 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../../../spec_helper')
describe "the template function" do
diff --git a/spec/unit/parser/functions/versioncmp_spec.rb b/spec/unit/parser/functions/versioncmp_spec.rb
index 380c6307a..2bc7be801 100755
--- a/spec/unit/parser/functions/versioncmp_spec.rb
+++ b/spec/unit/parser/functions/versioncmp_spec.rb
@@ -1,6 +1,6 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../../../spec_helper')
describe "the versioncmp function" do
diff --git a/spec/unit/parser/functions_spec.rb b/spec/unit/parser/functions_spec.rb
index 18aee4b65..51e52faee 100644
--- a/spec/unit/parser/functions_spec.rb
+++ b/spec/unit/parser/functions_spec.rb
@@ -1,6 +1,6 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
describe Puppet::Parser::Functions do
diff --git a/spec/unit/parser/lexer_spec.rb b/spec/unit/parser/lexer_spec.rb
index d52add399..58978ff03 100755
--- a/spec/unit/parser/lexer_spec.rb
+++ b/spec/unit/parser/lexer_spec.rb
@@ -1,11 +1,11 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
require 'puppet/parser/lexer'
# This is a special matcher to match easily lexer output
-Spec::Matchers.define :be_like do |*expected|
+RSpec::Matchers.define :be_like do |*expected|
match do |actual|
expected.zip(actual).all? { |e,a| !e or a[0] == e or (e.is_a? Array and a[0] == e[0] and (a[1] == e[1] or (a[1].is_a?(Hash) and a[1][:value] == e[1]))) }
end
@@ -651,7 +651,8 @@ describe "Puppet::Parser::Lexer in the old tests" do
end
end
-require 'puppettest/support/utils'
+require File.dirname(__FILE__) + '/../../../test/lib/puppettest'
+require File.dirname(__FILE__) + '/../../../test/lib/puppettest/support/utils'
describe "Puppet::Parser::Lexer in the old tests when lexing example files" do
extend PuppetTest::Support::Utils
textfiles do |file|
diff --git a/spec/unit/parser/parser_spec.rb b/spec/unit/parser/parser_spec.rb
index ab43194e9..f5df3041c 100755
--- a/spec/unit/parser/parser_spec.rb
+++ b/spec/unit/parser/parser_spec.rb
@@ -1,6 +1,6 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
describe Puppet::Parser do
diff --git a/spec/unit/parser/relationship_spec.rb b/spec/unit/parser/relationship_spec.rb
index 57f1a772b..883a38d11 100644
--- a/spec/unit/parser/relationship_spec.rb
+++ b/spec/unit/parser/relationship_spec.rb
@@ -1,6 +1,6 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
require 'puppet/parser/relationship'
diff --git a/spec/unit/parser/resource_spec.rb b/spec/unit/parser/resource_spec.rb
index dae22fcaa..73c4412dd 100755
--- a/spec/unit/parser/resource_spec.rb
+++ b/spec/unit/parser/resource_spec.rb
@@ -1,6 +1,6 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
# LAK: FIXME This is just new tests for resources; I have
# not moved all tests over yet.
diff --git a/spec/unit/parser/scope_spec.rb b/spec/unit/parser/scope_spec.rb
index 2e390a53b..32a87f1f4 100755
--- a/spec/unit/parser/scope_spec.rb
+++ b/spec/unit/parser/scope_spec.rb
@@ -1,6 +1,6 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
describe Puppet::Parser::Scope do
before :each do
diff --git a/spec/unit/parser/templatewrapper_spec.rb b/spec/unit/parser/templatewrapper_spec.rb
index 68d90a1cc..aab169348 100755
--- a/spec/unit/parser/templatewrapper_spec.rb
+++ b/spec/unit/parser/templatewrapper_spec.rb
@@ -1,6 +1,6 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
require 'puppet/parser/templatewrapper'
describe Puppet::Parser::TemplateWrapper do
diff --git a/spec/unit/parser/type_loader_spec.rb b/spec/unit/parser/type_loader_spec.rb
index cfa68871d..bd41adfb6 100644
--- a/spec/unit/parser/type_loader_spec.rb
+++ b/spec/unit/parser/type_loader_spec.rb
@@ -1,6 +1,6 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
require 'puppet/parser/type_loader'
require 'puppet_spec/files'
diff --git a/spec/unit/property/keyvalue_spec.rb b/spec/unit/property/keyvalue_spec.rb
index 7666def56..a44d891d7 100644
--- a/spec/unit/property/keyvalue_spec.rb
+++ b/spec/unit/property/keyvalue_spec.rb
@@ -134,7 +134,7 @@ describe klass do
end
end
- describe "when calling insync?" do
+ describe "when calling safe_insync?" do
before do
@provider = mock("provider")
@property.stubs(:provider).returns(@provider)
@@ -142,26 +142,26 @@ describe klass do
end
it "should return true unless @should is defined and not nil" do
- @property.insync?("foo") == true
+ @property.safe_insync?("foo") == true
end
it "should return true if the passed in values is nil" do
@property.should = "foo"
- @property.insync?(nil) == true
+ @property.safe_insync?(nil) == true
end
it "should return true if hashified should value == (retrieved) value passed in" do
@provider.stubs(:prop_name).returns({ :foo => "baz", :bar => "boo" })
@property.should = ["foo=baz", "bar=boo"]
@property.expects(:inclusive?).returns(true)
- @property.insync?({ :foo => "baz", :bar => "boo" }).must == true
+ @property.safe_insync?({ :foo => "baz", :bar => "boo" }).must == true
end
it "should return false if prepared value != should value" do
@provider.stubs(:prop_name).returns({ "foo" => "bee", "bar" => "boo" })
@property.should = ["foo=baz", "bar=boo"]
@property.expects(:inclusive?).returns(true)
- @property.insync?({ "foo" => "bee", "bar" => "boo" }).must == false
+ @property.safe_insync?({ "foo" => "bee", "bar" => "boo" }).must == false
end
end
end
diff --git a/spec/unit/property/list_spec.rb b/spec/unit/property/list_spec.rb
index 3e8cc5402..c6c5db10e 100644
--- a/spec/unit/property/list_spec.rb
+++ b/spec/unit/property/list_spec.rb
@@ -118,39 +118,39 @@ describe list_class do
end
end
- describe "when calling insync?" do
+ describe "when calling safe_insync?" do
it "should return true unless @should is defined and not nil" do
- @property.must be_insync("foo")
+ @property.must be_safe_insync("foo")
end
it "should return true unless the passed in values is not nil" do
@property.should = "foo"
- @property.must be_insync(nil)
+ @property.must be_safe_insync(nil)
end
it "should call prepare_is_for_comparison with value passed in and should" do
@property.should = "foo"
@property.expects(:prepare_is_for_comparison).with("bar")
@property.expects(:should)
- @property.insync?("bar")
+ @property.safe_insync?("bar")
end
it "should return true if 'is' value is array of comma delimited should values" do
@property.should = "bar,foo"
@property.expects(:inclusive?).returns(true)
- @property.must be_insync(["bar","foo"])
+ @property.must be_safe_insync(["bar","foo"])
end
it "should return true if 'is' value is :absent and should value is empty string" do
@property.should = ""
@property.expects(:inclusive?).returns(true)
- @property.must be_insync([])
+ @property.must be_safe_insync([])
end
it "should return false if prepared value != should value" do
@property.should = "bar,baz,foo"
@property.expects(:inclusive?).returns(true)
- @property.must_not be_insync(["bar","foo"])
+ @property.must_not be_safe_insync(["bar","foo"])
end
end
diff --git a/spec/unit/property_spec.rb b/spec/unit/property_spec.rb
index 56e643b1a..602d3c66b 100755
--- a/spec/unit/property_spec.rb
+++ b/spec/unit/property_spec.rb
@@ -1,6 +1,6 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
require 'puppet/property'
describe Puppet::Property do
diff --git a/spec/unit/provider/augeas/augeas_spec.rb b/spec/unit/provider/augeas/augeas_spec.rb
index 07b632083..9fcc85660 100644
--- a/spec/unit/provider/augeas/augeas_spec.rb
+++ b/spec/unit/provider/augeas/augeas_spec.rb
@@ -1,6 +1,6 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../../../spec_helper')
provider_class = Puppet::Type.type(:augeas).provider(:augeas)
@@ -316,6 +316,30 @@ describe provider_class do
provider.stubs(:get_augeas_version).returns("0.3.5")
provider.need_to_run?.should == false
end
+
+ #Ticket 5211 testing
+ it "should return true when a size != the provided value" do
+ resource = stub("resource")
+ resource.stubs(:[]).returns(false).then.returns("match path size != 17").then.returns("")
+ provider = provider_class.new(resource)
+ augeas_stub = stub("augeas", :match => ["set", "of", "values"])
+ augeas_stub.stubs("close")
+ provider.aug= augeas_stub
+ provider.stubs(:get_augeas_version).returns("0.3.5")
+ provider.need_to_run?.should == true
+ end
+
+ #Ticket 5211 testing
+ it "should return false when a size doeas equal the provided value" do
+ resource = stub("resource")
+ resource.stubs(:[]).returns(false).then.returns("match path size != 3").then.returns("")
+ provider = provider_class.new(resource)
+ augeas_stub = stub("augeas", :match => ["set", "of", "values"])
+ augeas_stub.stubs("close")
+ provider.aug= augeas_stub
+ provider.stubs(:get_augeas_version).returns("0.3.5")
+ provider.need_to_run?.should == false
+ end
end
describe "augeas execution integration" do
diff --git a/spec/unit/provider/confine/exists_spec.rb b/spec/unit/provider/confine/exists_spec.rb
index f039208b8..1dabafb19 100755
--- a/spec/unit/provider/confine/exists_spec.rb
+++ b/spec/unit/provider/confine/exists_spec.rb
@@ -1,6 +1,6 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../../../spec_helper')
require 'puppet/provider/confine/exists'
diff --git a/spec/unit/provider/confine/false_spec.rb b/spec/unit/provider/confine/false_spec.rb
index 999fc4714..8ea4bf740 100755
--- a/spec/unit/provider/confine/false_spec.rb
+++ b/spec/unit/provider/confine/false_spec.rb
@@ -1,6 +1,6 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../../../spec_helper')
require 'puppet/provider/confine/false'
diff --git a/spec/unit/provider/confine/feature_spec.rb b/spec/unit/provider/confine/feature_spec.rb
index e8368efac..534c8c14a 100755
--- a/spec/unit/provider/confine/feature_spec.rb
+++ b/spec/unit/provider/confine/feature_spec.rb
@@ -1,6 +1,6 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../../../spec_helper')
require 'puppet/provider/confine/feature'
diff --git a/spec/unit/provider/confine/true_spec.rb b/spec/unit/provider/confine/true_spec.rb
index 23041e6d5..b23373b87 100755
--- a/spec/unit/provider/confine/true_spec.rb
+++ b/spec/unit/provider/confine/true_spec.rb
@@ -1,6 +1,6 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../../../spec_helper')
require 'puppet/provider/confine/true'
diff --git a/spec/unit/provider/confine/variable_spec.rb b/spec/unit/provider/confine/variable_spec.rb
index eda2dd4c5..083573c3a 100755
--- a/spec/unit/provider/confine/variable_spec.rb
+++ b/spec/unit/provider/confine/variable_spec.rb
@@ -1,6 +1,6 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../../../spec_helper')
require 'puppet/provider/confine/variable'
diff --git a/spec/unit/provider/confine_collection_spec.rb b/spec/unit/provider/confine_collection_spec.rb
index e5f7f0300..fc68ef7f6 100755
--- a/spec/unit/provider/confine_collection_spec.rb
+++ b/spec/unit/provider/confine_collection_spec.rb
@@ -1,6 +1,6 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
require 'puppet/provider/confine_collection'
diff --git a/spec/unit/provider/confine_spec.rb b/spec/unit/provider/confine_spec.rb
index 1fa7f3d11..ce969eded 100755
--- a/spec/unit/provider/confine_spec.rb
+++ b/spec/unit/provider/confine_spec.rb
@@ -1,6 +1,6 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
require 'puppet/provider/confine'
diff --git a/spec/unit/provider/confiner_spec.rb b/spec/unit/provider/confiner_spec.rb
index d513c7232..15e2e6129 100755
--- a/spec/unit/provider/confiner_spec.rb
+++ b/spec/unit/provider/confiner_spec.rb
@@ -1,6 +1,6 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
require 'puppet/provider/confiner'
diff --git a/spec/unit/provider/group/groupadd_spec.rb b/spec/unit/provider/group/groupadd_spec.rb
index 33d9acd98..41431fb59 100755
--- a/spec/unit/provider/group/groupadd_spec.rb
+++ b/spec/unit/provider/group/groupadd_spec.rb
@@ -1,6 +1,6 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../../../spec_helper')
provider_class = Puppet::Type.type(:group).provider(:groupadd)
diff --git a/spec/unit/provider/group/ldap_spec.rb b/spec/unit/provider/group/ldap_spec.rb
index b8c54be94..8454b9604 100755
--- a/spec/unit/provider/group/ldap_spec.rb
+++ b/spec/unit/provider/group/ldap_spec.rb
@@ -3,7 +3,7 @@
# Created by Luke Kanies on 2008-3-10.
# Copyright (c) 2006. All rights reserved.
-require File.dirname(__FILE__) + '/../../../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../../../spec_helper')
provider_class = Puppet::Type.type(:group).provider(:ldap)
diff --git a/spec/unit/provider/host/parsed_spec.rb b/spec/unit/provider/host/parsed_spec.rb
index 239e3bd86..5704304ba 100644
--- a/spec/unit/provider/host/parsed_spec.rb
+++ b/spec/unit/provider/host/parsed_spec.rb
@@ -1,6 +1,6 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../../../spec_helper')
require 'puppet_spec/files'
require 'puppettest/support/utils'
@@ -28,9 +28,13 @@ describe provider_class do
hostresource = Puppet::Type::Host.new(:name => args[:name])
hostresource.stubs(:should).with(:target).returns @hostfile
- # Using setters of provider
+ # Using setters of provider to build our testobject
+ # Note: We already proved, that in case of host_aliases
+ # the provider setter "host_aliases=(value)" will be
+ # called with the joined array, so we just simulate that
host = @provider.new(hostresource)
args.each do |property,value|
+ value = value.join(" ") if property == :host_aliases and value.is_a?(Array)
host.send("#{property}=", value)
end
host
@@ -63,6 +67,10 @@ describe provider_class do
@provider.parse_line("::1 localhost")[:comment].should == ""
end
+ it "should set host_aliases to :absent" do
+ @provider.parse_line("::1 localhost")[:host_aliases].should == :absent
+ end
+
end
describe "when parsing a line with ip, hostname and comment" do
@@ -87,13 +95,13 @@ describe provider_class do
describe "when parsing a line with ip, hostname and aliases" do
it "should parse alias from the third field" do
- @provider.parse_line("127.0.0.1 localhost localhost.localdomain")[:host_aliases].should == ["localhost.localdomain"]
+ @provider.parse_line("127.0.0.1 localhost localhost.localdomain")[:host_aliases].should == "localhost.localdomain"
end
it "should parse multiple aliases" do
- @provider.parse_line("127.0.0.1 host alias1 alias2")[:host_aliases].should == ['alias1', 'alias2']
- @provider.parse_line("127.0.0.1 host alias1\talias2")[:host_aliases].should == ['alias1', 'alias2']
- @provider.parse_line("127.0.0.1 host alias1\talias2 alias3")[:host_aliases].should == ['alias1', 'alias2', 'alias3']
+ @provider.parse_line("127.0.0.1 host alias1 alias2")[:host_aliases].should == 'alias1 alias2'
+ @provider.parse_line("127.0.0.1 host alias1\talias2")[:host_aliases].should == 'alias1 alias2'
+ @provider.parse_line("127.0.0.1 host alias1\talias2 alias3")[:host_aliases].should == 'alias1 alias2 alias3'
end
end
@@ -114,7 +122,7 @@ describe provider_class do
end
it "should parse all host_aliases from the third field" do
- @provider.parse_line(@testline)[:host_aliases].should == ['alias1' ,'alias2', 'alias3']
+ @provider.parse_line(@testline)[:host_aliases].should == 'alias1 alias2 alias3'
end
it "should parse the comment after the first '#' character" do
@@ -143,7 +151,7 @@ describe provider_class do
host = mkhost(
:name => 'localhost.localdomain',
:ip => '127.0.0.1',
- :host_aliases => ['localhost'],
+ :host_aliases => 'localhost',
:ensure => :present
)
genhost(host).should == "127.0.0.1\tlocalhost.localdomain\tlocalhost\n"
@@ -156,7 +164,7 @@ describe provider_class do
:host_aliases => [ 'a1','a2','a3','a4' ],
:ensure => :present
)
- genhost(host).should == "192.0.0.1\thost\ta1\ta2\ta3\ta4\n"
+ genhost(host).should == "192.0.0.1\thost\ta1 a2 a3 a4\n"
end
it "should be able to generate a simple hostfile entry with comments" do
@@ -173,7 +181,7 @@ describe provider_class do
host = mkhost(
:name => 'localhost.localdomain',
:ip => '127.0.0.1',
- :host_aliases => ['localhost'],
+ :host_aliases => 'localhost',
:comment => 'Bazinga!',
:ensure => :present
)
@@ -188,7 +196,7 @@ describe provider_class do
:comment => 'Bazinga!',
:ensure => :present
)
- genhost(host).should == "192.0.0.1\thost\ta1\ta2\ta3\ta4\t# Bazinga!\n"
+ genhost(host).should == "192.0.0.1\thost\ta1 a2 a3 a4\t# Bazinga!\n"
end
end
diff --git a/spec/unit/provider/ldap_spec.rb b/spec/unit/provider/ldap_spec.rb
index 588cafc1f..7ed289c62 100755
--- a/spec/unit/provider/ldap_spec.rb
+++ b/spec/unit/provider/ldap_spec.rb
@@ -3,7 +3,7 @@
# Created by Luke Kanies on 2008-3-21.
# Copyright (c) 2006. All rights reserved.
-require File.dirname(__FILE__) + '/../../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
require 'puppet/provider/ldap'
diff --git a/spec/unit/provider/macauthorization_spec.rb b/spec/unit/provider/macauthorization_spec.rb
index d9e04e957..3c74334ba 100755
--- a/spec/unit/provider/macauthorization_spec.rb
+++ b/spec/unit/provider/macauthorization_spec.rb
@@ -3,7 +3,7 @@
# Unit testing for the macauthorization provider
#
-require File.dirname(__FILE__) + '/../../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
require 'puppet'
require 'facter/util/plist'
diff --git a/spec/unit/provider/mcx/mcxcontent_spec.rb b/spec/unit/provider/mcx/mcxcontent_spec.rb
index d3fb043b6..82dbf9ac7 100755
--- a/spec/unit/provider/mcx/mcxcontent_spec.rb
+++ b/spec/unit/provider/mcx/mcxcontent_spec.rb
@@ -18,7 +18,7 @@
# Author: Jeff McCune <mccune.jeff@gmail.com>
-require File.dirname(__FILE__) + '/../../../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../../../spec_helper')
provider_class = Puppet::Type.type(:mcx).provider(:mcxcontent)
diff --git a/spec/unit/provider/mount/parsed_spec.rb b/spec/unit/provider/mount/parsed_spec.rb
index 7d2e8a84c..fc4df97ab 100755
--- a/spec/unit/provider/mount/parsed_spec.rb
+++ b/spec/unit/provider/mount/parsed_spec.rb
@@ -3,7 +3,7 @@
# Created by Luke Kanies on 2007-9-12.
# Copyright (c) 2006. All rights reserved.
-require File.dirname(__FILE__) + '/../../../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../../../spec_helper')
require 'puppettest/support/utils'
require 'puppettest/fileparsing'
@@ -157,8 +157,7 @@ describe provider_class do
end
end
- describe provider_class, " when parsing information about the root filesystem" do
- confine "Mount type not tested on Darwin" => Facter["operatingsystem"].value != "Darwin"
+ describe provider_class, " when parsing information about the root filesystem", :if => Facter["operatingsystem"].value != "Darwin" do
include ParsedMountTesting
before do
diff --git a/spec/unit/provider/mount_spec.rb b/spec/unit/provider/mount_spec.rb
index b034214ee..256295574 100755
--- a/spec/unit/provider/mount_spec.rb
+++ b/spec/unit/provider/mount_spec.rb
@@ -1,6 +1,6 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
require 'puppet/provider/mount'
@@ -120,6 +120,14 @@ describe Puppet::Provider::Mount do
@mounter.should be_mounted
end
+ it "should match mounted devices if the operating system is AIX" do
+ Facter.stubs(:value).with("operatingsystem").returns("AIX")
+ mount_data = File.read(File.join(File.dirname(__FILE__), '..', '..', 'fixtures', 'unit', 'provider', 'mount', 'mount-output.aix.txt'))
+ @mounter.expects(:mountcmd).returns(mount_data)
+
+ @mounter.should be_mounted
+ end
+
it "should match ' on <name>' if the operating system is not Darwin, Solaris, or HP-UX" do
Facter.stubs(:value).with("operatingsystem").returns("Debian")
@mounter.expects(:mountcmd).returns("/dev/dsk/whatever on / and stuff\n/dev/other/disk on /var and stuff")
diff --git a/spec/unit/provider/naginator_spec.rb b/spec/unit/provider/naginator_spec.rb
index 72195756c..8ae1895cc 100755
--- a/spec/unit/provider/naginator_spec.rb
+++ b/spec/unit/provider/naginator_spec.rb
@@ -1,6 +1,6 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
require 'puppet/provider/naginator'
diff --git a/spec/unit/provider/nameservice/directoryservice_spec.rb b/spec/unit/provider/nameservice/directoryservice_spec.rb
new file mode 100755
index 000000000..661899db9
--- /dev/null
+++ b/spec/unit/provider/nameservice/directoryservice_spec.rb
@@ -0,0 +1,38 @@
+#!/usr/bin/env ruby
+
+require File.dirname(__FILE__) + '/../../../spec_helper'
+
+# We use this as a reasonable way to obtain all the support infrastructure.
+[:user, :group].each do |type_for_this_round|
+ provider_class = Puppet::Type.type(type_for_this_round).provider(:directoryservice)
+
+ describe provider_class do
+ before do
+ @resource = stub("resource")
+ @provider = provider_class.new(@resource)
+ end
+
+ it "[#6009] should handle nested arrays of members" do
+ current = ["foo", "bar", "baz"]
+ desired = ["foo", ["quux"], "qorp"]
+ group = 'example'
+
+ @resource.stubs(:[]).with(:name).returns(group)
+ @resource.stubs(:[]).with(:auth_membership).returns(true)
+ @provider.instance_variable_set(:@property_value_cache_hash,
+ { :members => current })
+
+ %w{bar baz}.each do |del|
+ @provider.expects(:execute).once.
+ with([:dseditgroup, '-o', 'edit', '-n', '.', '-d', del, group])
+ end
+
+ %w{quux qorp}.each do |add|
+ @provider.expects(:execute).once.
+ with([:dseditgroup, '-o', 'edit', '-n', '.', '-a', add, group])
+ end
+
+ expect { @provider.set(:members, desired) }.should_not raise_error
+ end
+ end
+end
diff --git a/spec/unit/provider/package/aix_spec.rb b/spec/unit/provider/package/aix_spec.rb
index 26732a3f0..40e497c27 100755
--- a/spec/unit/provider/package/aix_spec.rb
+++ b/spec/unit/provider/package/aix_spec.rb
@@ -1,6 +1,6 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../../../spec_helper')
provider_class = Puppet::Type.type(:package).provider(:aix)
diff --git a/spec/unit/provider/package/freebsd_spec.rb b/spec/unit/provider/package/freebsd_spec.rb
new file mode 100755
index 000000000..0d38a16cf
--- /dev/null
+++ b/spec/unit/provider/package/freebsd_spec.rb
@@ -0,0 +1,55 @@
+#!/usr/bin/env ruby
+
+require File.dirname(__FILE__) + '/../../../spec_helper'
+
+provider_class = Puppet::Type.type(:package).provider(:freebsd)
+
+describe provider_class do
+ before :each do
+ # Create a mock resource
+ @resource = stub 'resource'
+
+ # A catch all; no parameters set
+ @resource.stubs(:[]).returns(nil)
+
+ # But set name and source
+ @resource.stubs(:[]).with(:name).returns "mypackage"
+ @resource.stubs(:[]).with(:ensure).returns :installed
+
+ @provider = provider_class.new
+ @provider.resource = @resource
+ end
+
+ it "should have an install method" do
+ @provider = provider_class.new
+ @provider.should respond_to(:install)
+ end
+
+ describe "when installing" do
+ before :each do
+ @resource.stubs(:should).with(:ensure).returns(:installed)
+ end
+
+ it "should install a package from a path to a directory" do
+ # For better or worse, trailing '/' is needed. --daniel 2011-01-26
+ path = '/path/to/directory/'
+ @resource.stubs(:[]).with(:source).returns(path)
+ Puppet::Util::Execution.expects(:withenv).once.with({:PKG_PATH => path}).yields
+ @provider.expects(:pkgadd).once.with("mypackage")
+
+ expect { @provider.install }.should_not raise_error
+ end
+
+ %w{http https ftp}.each do |protocol|
+ it "should install a package via #{protocol}" do
+ # For better or worse, trailing '/' is needed. --daniel 2011-01-26
+ path = "#{protocol}://localhost/"
+ @resource.stubs(:[]).with(:source).returns(path)
+ Puppet::Util::Execution.expects(:withenv).once.with({:PACKAGESITE => path}).yields
+ @provider.expects(:pkgadd).once.with('-r', "mypackage")
+
+ expect { @provider.install }.should_not raise_error
+ end
+ end
+ end
+end
diff --git a/spec/unit/provider/package/gem_spec.rb b/spec/unit/provider/package/gem_spec.rb
index 063e1474b..7c0d34d00 100644
--- a/spec/unit/provider/package/gem_spec.rb
+++ b/spec/unit/provider/package/gem_spec.rb
@@ -1,6 +1,6 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../../../spec_helper')
provider_class = Puppet::Type.type(:package).provider(:gem)
diff --git a/spec/unit/provider/package/hpux_spec.rb b/spec/unit/provider/package/hpux_spec.rb
index e4ac22e21..e75ae0822 100644
--- a/spec/unit/provider/package/hpux_spec.rb
+++ b/spec/unit/provider/package/hpux_spec.rb
@@ -1,6 +1,6 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../../../spec_helper')
provider_class = Puppet::Type.type(:package).provider(:hpux)
diff --git a/spec/unit/provider/package/nim_spec.rb b/spec/unit/provider/package/nim_spec.rb
index 53a9cc839..74f903813 100755
--- a/spec/unit/provider/package/nim_spec.rb
+++ b/spec/unit/provider/package/nim_spec.rb
@@ -1,6 +1,6 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../../../spec_helper')
provider_class = Puppet::Type.type(:package).provider(:nim)
diff --git a/spec/unit/provider/package/yum_spec.rb b/spec/unit/provider/package/yum_spec.rb
index f6a99aa78..4e2294a77 100644
--- a/spec/unit/provider/package/yum_spec.rb
+++ b/spec/unit/provider/package/yum_spec.rb
@@ -1,6 +1,6 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../../../spec_helper')
provider = Puppet::Type.type(:package).provider(:yum)
diff --git a/spec/unit/provider/package/zypper_spec.rb b/spec/unit/provider/package/zypper_spec.rb
index 5ac13b659..1bf27ad97 100644
--- a/spec/unit/provider/package/zypper_spec.rb
+++ b/spec/unit/provider/package/zypper_spec.rb
@@ -1,6 +1,6 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../../../spec_helper')
provider_class = Puppet::Type.type(:package).provider(:zypper)
diff --git a/spec/unit/provider/parsedfile_spec.rb b/spec/unit/provider/parsedfile_spec.rb
index d40f77370..7d95ef1d0 100755
--- a/spec/unit/provider/parsedfile_spec.rb
+++ b/spec/unit/provider/parsedfile_spec.rb
@@ -1,6 +1,6 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
require 'puppet/provider/parsedfile'
diff --git a/spec/unit/provider/service/daemontools_spec.rb b/spec/unit/provider/service/daemontools_spec.rb
index 5e8b8d055..0bdb0a85d 100755
--- a/spec/unit/provider/service/daemontools_spec.rb
+++ b/spec/unit/provider/service/daemontools_spec.rb
@@ -4,7 +4,7 @@
#
# author Brice Figureau
#
-require File.dirname(__FILE__) + '/../../../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../../../spec_helper')
provider_class = Puppet::Type.type(:service).provider(:daemontools)
diff --git a/spec/unit/provider/service/debian_spec.rb b/spec/unit/provider/service/debian_spec.rb
index 8dee2ee94..8c9522deb 100755
--- a/spec/unit/provider/service/debian_spec.rb
+++ b/spec/unit/provider/service/debian_spec.rb
@@ -3,7 +3,7 @@
# Unit testing for the debian service provider
#
-require File.dirname(__FILE__) + '/../../../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../../../spec_helper')
provider_class = Puppet::Type.type(:service).provider(:debian)
diff --git a/spec/unit/provider/service/freebsd_spec.rb b/spec/unit/provider/service/freebsd_spec.rb
index 0330adbed..d8b751108 100644
--- a/spec/unit/provider/service/freebsd_spec.rb
+++ b/spec/unit/provider/service/freebsd_spec.rb
@@ -1,6 +1,6 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../../../spec_helper')
provider_class = Puppet::Type.type(:service).provider(:freebsd)
diff --git a/spec/unit/provider/service/init_spec.rb b/spec/unit/provider/service/init_spec.rb
index bbc88ff76..b54c27e8e 100755
--- a/spec/unit/provider/service/init_spec.rb
+++ b/spec/unit/provider/service/init_spec.rb
@@ -3,7 +3,7 @@
# Unit testing for the Init service Provider
#
-require File.dirname(__FILE__) + '/../../../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../../../spec_helper')
provider_class = Puppet::Type.type(:service).provider(:init)
@@ -84,10 +84,12 @@ describe provider_class do
end
it "should be able to find the init script in the service path" do
+ File.stubs(:stat).raises(Errno::ENOENT.new('No such file or directory'))
File.expects(:stat).with("/service/path/myservice").returns true
@provider.initscript.should == "/service/path/myservice"
end
it "should be able to find the init script in the service path" do
+ File.stubs(:stat).raises(Errno::ENOENT.new('No such file or directory'))
File.expects(:stat).with("/alt/service/path/myservice").returns true
@provider.initscript.should == "/alt/service/path/myservice"
end
diff --git a/spec/unit/provider/service/launchd_spec.rb b/spec/unit/provider/service/launchd_spec.rb
index 43e4cba8e..dfcb58fdc 100755
--- a/spec/unit/provider/service/launchd_spec.rb
+++ b/spec/unit/provider/service/launchd_spec.rb
@@ -3,7 +3,7 @@
# Unit testing for the launchd service provider
#
-require File.dirname(__FILE__) + '/../../../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../../../spec_helper')
require 'puppet'
diff --git a/spec/unit/provider/service/redhat_spec.rb b/spec/unit/provider/service/redhat_spec.rb
index fd5822788..a3c6247dd 100755
--- a/spec/unit/provider/service/redhat_spec.rb
+++ b/spec/unit/provider/service/redhat_spec.rb
@@ -2,7 +2,7 @@
#
# Unit testing for the RedHat service Provider
#
-require File.dirname(__FILE__) + '/../../../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../../../spec_helper')
provider_class = Puppet::Type.type(:service).provider(:redhat)
diff --git a/spec/unit/provider/service/runit_spec.rb b/spec/unit/provider/service/runit_spec.rb
index 80ce456b4..12dfeeb35 100755
--- a/spec/unit/provider/service/runit_spec.rb
+++ b/spec/unit/provider/service/runit_spec.rb
@@ -4,7 +4,7 @@
#
# author Brice Figureau
#
-require File.dirname(__FILE__) + '/../../../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../../../spec_helper')
provider_class = Puppet::Type.type(:service).provider(:runit)
diff --git a/spec/unit/provider/service/src_spec.rb b/spec/unit/provider/service/src_spec.rb
index eff98f030..dbe073513 100755
--- a/spec/unit/provider/service/src_spec.rb
+++ b/spec/unit/provider/service/src_spec.rb
@@ -3,7 +3,7 @@
# Unit testing for the AIX System Resource Controller (src) provider
#
-require File.dirname(__FILE__) + '/../../../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../../../spec_helper')
provider_class = Puppet::Type.type(:service).provider(:src)
diff --git a/spec/unit/provider/service/upstart.rb b/spec/unit/provider/service/upstart.rb
index 9fde9e67f..22cf2bdeb 100644
--- a/spec/unit/provider/service/upstart.rb
+++ b/spec/unit/provider/service/upstart.rb
@@ -1,6 +1,6 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../../../spec_helper')
provider_class = Puppet::Type.type(:service).provider(:upstart)
diff --git a/spec/unit/provider/ssh_authorized_key/parsed_spec.rb b/spec/unit/provider/ssh_authorized_key/parsed_spec.rb
index 11e9233e0..fb4c64926 100755
--- a/spec/unit/provider/ssh_authorized_key/parsed_spec.rb
+++ b/spec/unit/provider/ssh_authorized_key/parsed_spec.rb
@@ -1,6 +1,6 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../../../spec_helper')
require 'puppet_spec/files'
require 'puppettest/support/utils'
diff --git a/spec/unit/provider/sshkey/parsed_spec.rb b/spec/unit/provider/sshkey/parsed_spec.rb
index 1a5470974..7a76b02d6 100755
--- a/spec/unit/provider/sshkey/parsed_spec.rb
+++ b/spec/unit/provider/sshkey/parsed_spec.rb
@@ -1,6 +1,6 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../../../spec_helper')
provider_class = Puppet::Type.type(:sshkey).provider(:parsed)
diff --git a/spec/unit/provider/user/hpux_spec.rb b/spec/unit/provider/user/hpux_spec.rb
index f53f6c31e..b10f2847c 100755
--- a/spec/unit/provider/user/hpux_spec.rb
+++ b/spec/unit/provider/user/hpux_spec.rb
@@ -1,6 +1,6 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../../../spec_helper')
provider_class = Puppet::Type.type(:user).provider(:hpuxuseradd)
diff --git a/spec/unit/provider/user/ldap_spec.rb b/spec/unit/provider/user/ldap_spec.rb
index b6635705d..5b2dc98b5 100755
--- a/spec/unit/provider/user/ldap_spec.rb
+++ b/spec/unit/provider/user/ldap_spec.rb
@@ -3,7 +3,7 @@
# Created by Luke Kanies on 2008-3-10.
# Copyright (c) 2006. All rights reserved.
-require File.dirname(__FILE__) + '/../../../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../../../spec_helper')
provider_class = Puppet::Type.type(:user).provider(:ldap)
diff --git a/spec/unit/provider/user/user_role_add_spec.rb b/spec/unit/provider/user/user_role_add_spec.rb
index 9cf649267..9cd0feb12 100644
--- a/spec/unit/provider/user/user_role_add_spec.rb
+++ b/spec/unit/provider/user/user_role_add_spec.rb
@@ -1,6 +1,6 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../../../spec_helper')
provider_class = Puppet::Type.type(:user).provider(:user_role_add)
diff --git a/spec/unit/provider/user/useradd_spec.rb b/spec/unit/provider/user/useradd_spec.rb
index 9ebba596c..f9babe6aa 100755
--- a/spec/unit/provider/user/useradd_spec.rb
+++ b/spec/unit/provider/user/useradd_spec.rb
@@ -1,6 +1,6 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../../../spec_helper')
provider_class = Puppet::Type.type(:user).provider(:useradd)
diff --git a/spec/unit/provider/zfs/solaris_spec.rb b/spec/unit/provider/zfs/solaris_spec.rb
index 43a88b1c7..4998ba6fe 100755
--- a/spec/unit/provider/zfs/solaris_spec.rb
+++ b/spec/unit/provider/zfs/solaris_spec.rb
@@ -1,6 +1,6 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../../../spec_helper')
provider_class = Puppet::Type.type(:zfs).provider(:solaris)
@@ -75,7 +75,7 @@ describe provider_class do
end
- [:mountpoint, :compression, :copies, :quota, :reservation, :sharenfs, :snapdir].each do |prop|
+ [:mountpoint, :recordsize, :aclmode, :aclinherit, :primarycache, :secondarycache, :compression, :copies, :quota, :reservation, :sharenfs, :snapdir].each do |prop|
describe "when getting the #{prop} value" do
it "should call zfs with :get, #{prop} and this zfs" do
@provider.expects(:zfs).with(:get, "-H", "-o", "value", prop, @resource[:name]).returns("value\n")
diff --git a/spec/unit/provider/zone/solaris_spec.rb b/spec/unit/provider/zone/solaris_spec.rb
index 44416aa61..4a1d03272 100755
--- a/spec/unit/provider/zone/solaris_spec.rb
+++ b/spec/unit/provider/zone/solaris_spec.rb
@@ -1,6 +1,6 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../../../spec_helper')
provider_class = Puppet::Type.type(:zone).provider(:solaris)
diff --git a/spec/unit/provider/zpool/solaris_spec.rb b/spec/unit/provider/zpool/solaris_spec.rb
index 99e6997e4..805dd54df 100755
--- a/spec/unit/provider/zpool/solaris_spec.rb
+++ b/spec/unit/provider/zpool/solaris_spec.rb
@@ -1,6 +1,6 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../../../spec_helper')
provider_class = Puppet::Type.type(:zpool).provider(:solaris)
diff --git a/spec/unit/provider_spec.rb b/spec/unit/provider_spec.rb
index 629406535..24f5216fe 100755
--- a/spec/unit/provider_spec.rb
+++ b/spec/unit/provider_spec.rb
@@ -1,6 +1,6 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
describe Puppet::Provider do
it "should have a specifity class method" do
diff --git a/spec/unit/puppet_spec.rb b/spec/unit/puppet_spec.rb
index 60ac9e9d9..28dbd5104 100755
--- a/spec/unit/puppet_spec.rb
+++ b/spec/unit/puppet_spec.rb
@@ -1,6 +1,6 @@
#!/usr/bin/env ruby"
-require File.dirname(__FILE__) + '/../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
require 'puppet'
describe Puppet do
diff --git a/spec/unit/rails/host_spec.rb b/spec/unit/rails/host_spec.rb
index 324a673a9..e83135c91 100755
--- a/spec/unit/rails/host_spec.rb
+++ b/spec/unit/rails/host_spec.rb
@@ -1,10 +1,8 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../spec_helper'
-
-describe "Puppet::Rails::Host" do
- confine "Cannot test without ActiveRecord" => Puppet.features.rails?
+require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
+describe "Puppet::Rails::Host", :if => Puppet.features.rails? do
def column(name, type)
ActiveRecord::ConnectionAdapters::Column.new(name, nil, type, false)
end
diff --git a/spec/unit/rails/param_value_spec.rb b/spec/unit/rails/param_value_spec.rb
index 243456e89..9a725cfc8 100755
--- a/spec/unit/rails/param_value_spec.rb
+++ b/spec/unit/rails/param_value_spec.rb
@@ -1,11 +1,9 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
require 'puppet/rails'
-describe "Puppet::Rails::ParamValue" do
- confine "Cannot test without ActiveRecord" => Puppet.features.rails?
-
+describe "Puppet::Rails::ParamValue", :if => Puppet.features.rails? do
def column(name, type)
ActiveRecord::ConnectionAdapters::Column.new(name, nil, type, false)
end
diff --git a/spec/unit/rails/resource_spec.rb b/spec/unit/rails/resource_spec.rb
index 6e23d2020..3fbbbc7b7 100755
--- a/spec/unit/rails/resource_spec.rb
+++ b/spec/unit/rails/resource_spec.rb
@@ -1,11 +1,9 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
require 'puppet/rails'
-describe "Puppet::Rails::Resource" do
- confine "Cannot test without ActiveRecord" => Puppet.features.rails?
-
+describe "Puppet::Rails::Resource", :if => Puppet.features.rails? do
def column(name, type)
ActiveRecord::ConnectionAdapters::Column.new(name, nil, type, false)
end
diff --git a/spec/unit/rails_spec.rb b/spec/unit/rails_spec.rb
index 24248e622..a08485e4c 100755
--- a/spec/unit/rails_spec.rb
+++ b/spec/unit/rails_spec.rb
@@ -1,11 +1,9 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
require 'puppet/rails'
-describe Puppet::Rails, "when initializing any connection" do
- confine "Cannot test without ActiveRecord" => Puppet.features.rails?
-
+describe Puppet::Rails, "when initializing any connection", :if => Puppet.features.rails? do
before do
Puppet.settings.stubs(:use)
@logger = mock 'logger'
@@ -77,9 +75,7 @@ describe Puppet::Rails, "when initializing any connection" do
end
end
-describe Puppet::Rails, "when initializing a sqlite3 connection" do
- confine "Cannot test without ActiveRecord" => Puppet.features.rails?
-
+describe Puppet::Rails, "when initializing a sqlite3 connection", :if => Puppet.features.rails? do
it "should provide the adapter, log_level, and database arguments" do
Puppet.settings.expects(:value).with(:dbadapter).returns("sqlite3")
Puppet.settings.expects(:value).with(:rails_loglevel).returns("testlevel")
@@ -93,9 +89,7 @@ describe Puppet::Rails, "when initializing a sqlite3 connection" do
end
end
-describe Puppet::Rails, "when initializing a mysql connection" do
- confine "Cannot test without ActiveRecord" => Puppet.features.rails?
-
+describe Puppet::Rails, "when initializing a mysql connection", :if => Puppet.features.rails? do
it "should provide the adapter, log_level, and host, port, username, password, database, and reconnect arguments" do
Puppet.settings.stubs(:value).with(:dbadapter).returns("mysql")
Puppet.settings.stubs(:value).with(:rails_loglevel).returns("testlevel")
@@ -190,9 +184,7 @@ describe Puppet::Rails, "when initializing a mysql connection" do
end
end
-describe Puppet::Rails, "when initializing a postgresql connection" do
- confine "Cannot test without ActiveRecord" => Puppet.features.rails?
-
+describe Puppet::Rails, "when initializing a postgresql connection", :if => Puppet.features.rails? do
it "should provide the adapter, log_level, and host, port, username, password, connections, and database arguments" do
Puppet.settings.stubs(:value).with(:dbadapter).returns("postgresql")
Puppet.settings.stubs(:value).with(:rails_loglevel).returns("testlevel")
@@ -263,9 +255,7 @@ describe Puppet::Rails, "when initializing a postgresql connection" do
end
end
-describe Puppet::Rails, "when initializing an Oracle connection" do
- confine "Cannot test without ActiveRecord" => Puppet.features.rails?
-
+describe Puppet::Rails, "when initializing an Oracle connection", :if => Puppet.features.rails? do
it "should provide the adapter, log_level, and username, password, and database arguments" do
Puppet.settings.stubs(:value).with(:dbadapter).returns("oracle_enhanced")
Puppet.settings.stubs(:value).with(:rails_loglevel).returns("testlevel")
diff --git a/spec/unit/relationship_spec.rb b/spec/unit/relationship_spec.rb
index 4586cd0f3..362d74c74 100755
--- a/spec/unit/relationship_spec.rb
+++ b/spec/unit/relationship_spec.rb
@@ -3,7 +3,7 @@
# Created by Luke Kanies on 2007-11-1.
# Copyright (c) 2006. All rights reserved.
-require File.dirname(__FILE__) + '/../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
require 'puppet/relationship'
describe Puppet::Relationship do
@@ -155,9 +155,7 @@ describe Puppet::Relationship, " when matching edges with a non-standard event"
end
end
-describe Puppet::Relationship, "when converting to pson" do
- confine "Missing 'pson' library" => Puppet.features.pson?
-
+describe Puppet::Relationship, "when converting to pson", :if => Puppet.features.pson? do
before do
@edge = Puppet::Relationship.new(:a, :b, :event => :random, :callback => :whatever)
end
@@ -190,9 +188,7 @@ describe Puppet::Relationship, "when converting to pson" do
end
end
-describe Puppet::Relationship, "when converting from pson" do
- confine "Missing 'pson' library" => Puppet.features.pson?
-
+describe Puppet::Relationship, "when converting from pson", :if => Puppet.features.pson? do
before do
@event = "random"
@callback = "whatever"
diff --git a/spec/unit/reports/http_spec.rb b/spec/unit/reports/http_spec.rb
index c814975df..70742f7dc 100644
--- a/spec/unit/reports/http_spec.rb
+++ b/spec/unit/reports/http_spec.rb
@@ -18,7 +18,7 @@ processor = Puppet::Reports.report(:http)
describe processor do
before { Net::HTTP.any_instance.stubs(:start).yields(FakeHTTP) }
- subject { Puppet::Transaction::Report.new.extend(processor) }
+ subject { Puppet::Transaction::Report.new("apply").extend(processor) }
it { should respond_to(:process) }
diff --git a/spec/unit/reports/store_spec.rb b/spec/unit/reports/store_spec.rb
new file mode 100644
index 000000000..1acb5badd
--- /dev/null
+++ b/spec/unit/reports/store_spec.rb
@@ -0,0 +1,31 @@
+#!/usr/bin/env ruby
+
+Dir.chdir(File.dirname(__FILE__)) { (s = lambda { |f| File.exist?(f) ? require(f) : Dir.chdir("..") { s.call(f) } }).call("spec/spec_helper.rb") }
+
+require 'puppet/reports'
+require 'time'
+
+processor = Puppet::Reports.report(:store)
+
+describe processor do
+ describe "#process" do
+ include PuppetSpec::Files
+ before :each do
+ Puppet[:reportdir] = tmpdir('reports')
+ @report = YAML.load_file(File.join(PuppetSpec::FIXTURE_DIR, 'yaml/report2.6.x.yaml')).extend processor
+ end
+
+ it "should create a report directory for the client if one doesn't exist" do
+ @report.process
+
+ File.should be_directory(File.join(Puppet[:reportdir], @report.host))
+ end
+
+ it "should write the report to the file in YAML" do
+ Time.stubs(:now).returns(Time.parse("2011-01-06 12:00:00 UTC"))
+ @report.process
+
+ File.read(File.join(Puppet[:reportdir], @report.host, "201101061200.yaml")).should == @report.to_yaml
+ end
+ end
+end
diff --git a/spec/unit/reports/tagmail_spec.rb b/spec/unit/reports/tagmail_spec.rb
index bdb16600e..1dadfc7cd 100755
--- a/spec/unit/reports/tagmail_spec.rb
+++ b/spec/unit/reports/tagmail_spec.rb
@@ -11,7 +11,7 @@ describe tagmail do
extend PuppetTest::Support::Utils
before do
- @processor = Puppet::Transaction::Report.new
+ @processor = Puppet::Transaction::Report.new("apply")
@processor.extend(Puppet::Reports.report(:tagmail))
end
diff --git a/spec/unit/reports_spec.rb b/spec/unit/reports_spec.rb
index 57e77a546..a9d10be17 100755
--- a/spec/unit/reports_spec.rb
+++ b/spec/unit/reports_spec.rb
@@ -1,6 +1,6 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
require 'puppet/reports'
diff --git a/spec/unit/resource/catalog_spec.rb b/spec/unit/resource/catalog_spec.rb
index fbfe29ff3..42850c23b 100755
--- a/spec/unit/resource/catalog_spec.rb
+++ b/spec/unit/resource/catalog_spec.rb
@@ -1,6 +1,6 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
describe Puppet::Resource::Catalog, "when compiling" do
@@ -818,12 +818,6 @@ describe Puppet::Resource::Catalog, "when compiling" do
Puppet::Util::Cacher.expire
end
- it "should redirect to the indirection for retrieval" do
- Puppet::Resource::Catalog.stubs(:indirection).returns(@indirection)
- @indirection.expects(:find)
- Puppet::Resource::Catalog.find(:myconfig)
- end
-
it "should use the value of the 'catalog_terminus' setting to determine its terminus class" do
# Puppet only checks the terminus setting the first time you ask
# so this returns the object to the clean state
@@ -880,9 +874,7 @@ describe Puppet::Resource::Catalog, "when compiling" do
end
end
-describe Puppet::Resource::Catalog, "when converting to pson" do
- confine "Missing 'pson' library" => Puppet.features.pson?
-
+describe Puppet::Resource::Catalog, "when converting to pson", :if => Puppet.features.pson? do
before do
@catalog = Puppet::Resource::Catalog.new("myhost")
end
@@ -940,9 +932,7 @@ describe Puppet::Resource::Catalog, "when converting to pson" do
end
end
-describe Puppet::Resource::Catalog, "when converting from pson" do
- confine "Missing 'pson' library" => Puppet.features.pson?
-
+describe Puppet::Resource::Catalog, "when converting from pson", :if => Puppet.features.pson? do
def pson_result_should
Puppet::Resource::Catalog.expects(:new).with { |hash| yield hash }
end
diff --git a/spec/unit/resource/status_spec.rb b/spec/unit/resource/status_spec.rb
index 425015a13..343b8d318 100755
--- a/spec/unit/resource/status_spec.rb
+++ b/spec/unit/resource/status_spec.rb
@@ -1,6 +1,6 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
require 'puppet/resource/status'
@@ -10,7 +10,12 @@ describe Puppet::Resource::Status do
@status = Puppet::Resource::Status.new(@resource)
end
- [:node, :version, :file, :line, :current_values, :skipped_reason, :status, :evaluation_time, :change_count].each do |attr|
+ it "should compute type and title correctly" do
+ @status.resource_type.should == "File"
+ @status.title.should == "/my/file"
+ end
+
+ [:node, :file, :line, :current_values, :status, :evaluation_time].each do |attr|
it "should support #{attr}" do
@status.send(attr.to_s + "=", "foo")
@status.send(attr).should == "foo"
@@ -38,7 +43,7 @@ describe Puppet::Resource::Status do
Puppet::Resource::Status.new(@resource).source_description.should == "/my/path"
end
- [:file, :line, :version].each do |attr|
+ [:file, :line].each do |attr|
it "should copy the resource's #{attr}" do
@resource.expects(attr).returns "foo"
Puppet::Resource::Status.new(@resource).send(attr).should == "foo"
@@ -74,7 +79,7 @@ describe Puppet::Resource::Status do
@status.send_log :notice, "my message"
end
- [:file, :line, :version].each do |attr|
+ [:file, :line].each do |attr|
it "should pass the #{attr}" do
Puppet::Util::Log.expects(:new).with { |args| args[attr] == "my val" }
@status.send(attr.to_s + "=", "my val")
@@ -100,4 +105,49 @@ describe Puppet::Resource::Status do
(@status << event).should equal(@status)
@status.events.should == [event]
end
+
+ it "should count the number of successful events and set changed" do
+ 3.times{ @status << Puppet::Transaction::Event.new(:status => 'success') }
+ @status.change_count.should == 3
+
+ @status.changed.should == true
+ @status.out_of_sync.should == true
+ end
+
+ it "should not start with any changes" do
+ @status.change_count.should == 0
+
+ @status.changed.should == false
+ @status.out_of_sync.should == false
+ end
+
+ it "should not treat failure, audit, or noop events as changed" do
+ ['failure', 'audit', 'noop'].each do |s| @status << Puppet::Transaction::Event.new(:status => s) end
+ @status.change_count.should == 0
+ @status.changed.should == false
+ end
+
+ it "should not treat audit events as out of sync" do
+ @status << Puppet::Transaction::Event.new(:status => 'audit')
+ @status.out_of_sync_count.should == 0
+ @status.out_of_sync.should == false
+ end
+
+ ['failure', 'noop', 'success'].each do |event_status|
+ it "should treat #{event_status} events as out of sync" do
+ 3.times do @status << Puppet::Transaction::Event.new(:status => event_status) end
+ @status.out_of_sync_count.should == 3
+ @status.out_of_sync.should == true
+ end
+ end
+
+ describe "When converting to YAML" do
+ it "should include only documented attributes" do
+ @status.file = "/foo.rb"
+ @status.line = 27
+ @status.evaluation_time = 2.7
+ @status.tags = %w{one two}
+ @status.to_yaml_properties.should == Puppet::Resource::Status::YAML_ATTRIBUTES.sort
+ end
+ end
end
diff --git a/spec/unit/resource/type_collection_helper_spec.rb b/spec/unit/resource/type_collection_helper_spec.rb
index 608b6e61f..442cfd076 100644
--- a/spec/unit/resource/type_collection_helper_spec.rb
+++ b/spec/unit/resource/type_collection_helper_spec.rb
@@ -1,6 +1,6 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
require 'puppet/resource/type_collection_helper'
diff --git a/spec/unit/resource/type_collection_spec.rb b/spec/unit/resource/type_collection_spec.rb
index b8da3cf58..278e629bd 100644
--- a/spec/unit/resource/type_collection_spec.rb
+++ b/spec/unit/resource/type_collection_spec.rb
@@ -1,6 +1,6 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
require 'puppet/resource/type_collection'
require 'puppet/resource/type'
diff --git a/spec/unit/resource/type_spec.rb b/spec/unit/resource/type_spec.rb
index ef45712e6..e9c203526 100755
--- a/spec/unit/resource/type_spec.rb
+++ b/spec/unit/resource/type_spec.rb
@@ -1,6 +1,6 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
require 'puppet/resource/type'
@@ -261,6 +261,28 @@ describe Puppet::Resource::Type do
@type = Puppet::Resource::Type.new(:hostclass, "foo")
end
+ ['module_name', 'name', 'title'].each do |variable|
+ it "should allow #{variable} to be evaluated as param default" do
+ @type.instance_eval { @module_name = "bar" }
+ var = Puppet::Parser::AST::Variable.new({'value' => variable})
+ @type.set_arguments :foo => var
+ @type.set_resource_parameters(@resource, @scope)
+ @scope.lookupvar('foo').should == 'bar'
+ end
+ end
+
+ # this test is to clarify a crazy edge case
+ # if you specify these special names as params, the resource
+ # will override the special variables
+ it "resource should override defaults" do
+ @type.set_arguments :name => nil
+ @resource[:name] = 'foobar'
+ var = Puppet::Parser::AST::Variable.new({'value' => 'name'})
+ @type.set_arguments :foo => var
+ @type.set_resource_parameters(@resource, @scope)
+ @scope.lookupvar('foo').should == 'foobar'
+ end
+
it "should set each of the resource's parameters as variables in the scope" do
@type.set_arguments :foo => nil, :boo => nil
@resource[:foo] = "bar"
@@ -496,7 +518,7 @@ describe Puppet::Resource::Type do
it "should evaluate the parent's resource" do
@type.parent_type(@scope)
-
+
@type.evaluate_code(@resource)
@scope.class_scope(@parent_type).should_not be_nil
@@ -504,7 +526,7 @@ describe Puppet::Resource::Type do
it "should not evaluate the parent's resource if it has already been evaluated" do
@parent_resource.evaluate
-
+
@type.parent_type(@scope)
@parent_resource.expects(:evaluate).never
@@ -544,7 +566,7 @@ describe Puppet::Resource::Type do
it "should not evaluate the parent's resource if it has already been evaluated" do
@parent_resource.evaluate
-
+
@type.parent_type(@scope)
@parent_resource.expects(:evaluate).never
@@ -574,7 +596,7 @@ describe Puppet::Resource::Type do
@code = Puppet::Resource::TypeCollection.new("env")
@code.add @top
@code.add @middle
-
+
@node.environment.stubs(:known_resource_types).returns(@code)
end
@@ -600,12 +622,36 @@ describe Puppet::Resource::Type do
@compiler.catalog.resource(:class, "top").should be_instance_of(Puppet::Parser::Resource)
end
+ it "should add specified parameters to the resource" do
+ @top.ensure_in_catalog(@scope, {'one'=>'1', 'two'=>'2'})
+ @compiler.catalog.resource(:class, "top")['one'].should == '1'
+ @compiler.catalog.resource(:class, "top")['two'].should == '2'
+ end
+
+ it "should not require params for a param class" do
+ @top.ensure_in_catalog(@scope, {})
+ @compiler.catalog.resource(:class, "top").should be_instance_of(Puppet::Parser::Resource)
+ end
+
it "should evaluate the parent class if one exists" do
@middle.ensure_in_catalog(@scope)
@compiler.catalog.resource(:class, "top").should be_instance_of(Puppet::Parser::Resource)
end
+ it "should evaluate the parent class if one exists" do
+ @middle.ensure_in_catalog(@scope, {})
+
+ @compiler.catalog.resource(:class, "top").should be_instance_of(Puppet::Parser::Resource)
+ end
+
+ it "should fail if you try to create duplicate class resources" do
+ othertop = Puppet::Parser::Resource.new(:class, 'top',:source => @source, :scope => @scope )
+ # add the same class resource to the catalog
+ @compiler.catalog.add_resource(othertop)
+ lambda { @top.ensure_in_catalog(@scope, {}) }.should raise_error(Puppet::Resource::Catalog::DuplicateResourceError)
+ end
+
it "should fail to evaluate if a parent class is defined but cannot be found" do
othertop = Puppet::Resource::Type.new :hostclass, "something", :parent => "yay"
@code.add othertop
diff --git a/spec/unit/resource_spec.rb b/spec/unit/resource_spec.rb
index e65e8a13a..8b7bfc3e6 100755
--- a/spec/unit/resource_spec.rb
+++ b/spec/unit/resource_spec.rb
@@ -1,6 +1,6 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
require 'puppet/resource'
describe Puppet::Resource do
@@ -98,6 +98,14 @@ describe Puppet::Resource do
lambda { Puppet::Resource.new("foo") }.should raise_error(ArgumentError)
end
+ it 'should fail if strict is set and type does not exist' do
+ lambda { Puppet::Resource.new('foo', 'title', {:strict=>true}) }.should raise_error(ArgumentError, 'Invalid resource type foo')
+ end
+
+ it 'should fail if strict is set and class does not exist' do
+ lambda { Puppet::Resource.new('Class', 'foo', {:strict=>true}) }.should raise_error(ArgumentError, 'Could not find declared class foo')
+ end
+
it "should fail if the title is a hash and the type is not a valid resource reference string" do
lambda { Puppet::Resource.new({:type => "foo", :title => "bar"}) }.should raise_error(ArgumentError,
'Puppet::Resource.new does not take a hash as the first argument. Did you mean ("foo", "bar") ?'
@@ -585,9 +593,7 @@ describe Puppet::Resource do
end
end
- describe "when converting to pson" do
- confine "Missing 'pson' library" => Puppet.features.pson?
-
+ describe "when converting to pson", :if => Puppet.features.pson? do
def pson_output_should
@resource.class.expects(:pson_create).with { |hash| yield hash }
end
@@ -666,9 +672,7 @@ describe Puppet::Resource do
end
end
- describe "when converting from pson" do
- confine "Missing 'pson' library" => Puppet.features.pson?
-
+ describe "when converting from pson", :if => Puppet.features.pson? do
def pson_result_should
Puppet::Resource.expects(:new).with { |hash| yield hash }
end
diff --git a/spec/unit/run_spec.rb b/spec/unit/run_spec.rb
index 58a16d2a6..6c5ecde65 100755
--- a/spec/unit/run_spec.rb
+++ b/spec/unit/run_spec.rb
@@ -1,6 +1,6 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
require 'puppet/agent'
require 'puppet/run'
diff --git a/spec/unit/simple_graph_spec.rb b/spec/unit/simple_graph_spec.rb
index fa0bcb06a..e49811ea7 100755
--- a/spec/unit/simple_graph_spec.rb
+++ b/spec/unit/simple_graph_spec.rb
@@ -3,7 +3,7 @@
# Created by Luke Kanies on 2007-11-1.
# Copyright (c) 2006. All rights reserved.
-require File.dirname(__FILE__) + '/../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
require 'puppet/simple_graph'
describe Puppet::SimpleGraph do
diff --git a/spec/unit/ssl/base_spec.rb b/spec/unit/ssl/base_spec.rb
index 47575feab..99038391f 100755
--- a/spec/unit/ssl/base_spec.rb
+++ b/spec/unit/ssl/base_spec.rb
@@ -1,6 +1,6 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
require 'puppet/ssl/certificate'
diff --git a/spec/unit/ssl/certificate_authority/interface_spec.rb b/spec/unit/ssl/certificate_authority/interface_spec.rb
index d8c351ae2..2e4a3fc77 100755
--- a/spec/unit/ssl/certificate_authority/interface_spec.rb
+++ b/spec/unit/ssl/certificate_authority/interface_spec.rb
@@ -1,10 +1,10 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../../../spec_helper')
require 'puppet/ssl/certificate_authority'
-describe "a normal interface method", :shared => true do
+shared_examples_for "a normal interface method" do
it "should call the method on the CA for each host specified if an array was provided" do
@ca.expects(@method).with("host1")
@ca.expects(@method).with("host2")
diff --git a/spec/unit/ssl/certificate_authority_spec.rb b/spec/unit/ssl/certificate_authority_spec.rb
index 39fee3f0a..76633b48f 100755
--- a/spec/unit/ssl/certificate_authority_spec.rb
+++ b/spec/unit/ssl/certificate_authority_spec.rb
@@ -1,6 +1,6 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
require 'puppet/ssl/certificate_authority'
@@ -138,18 +138,18 @@ describe Puppet::SSL::CertificateAuthority do
it "should return any found CRL instance" do
crl = mock 'crl'
- Puppet::SSL::CertificateRevocationList.expects(:find).returns crl
+ Puppet::SSL::CertificateRevocationList.indirection.expects(:find).returns crl
@ca.crl.should equal(crl)
end
it "should create, generate, and save a new CRL instance of no CRL can be found" do
- crl = mock 'crl'
- Puppet::SSL::CertificateRevocationList.expects(:find).returns nil
+ crl = Puppet::SSL::CertificateRevocationList.new("fakename")
+ Puppet::SSL::CertificateRevocationList.indirection.expects(:find).returns nil
Puppet::SSL::CertificateRevocationList.expects(:new).returns crl
crl.expects(:generate).with(@ca.host.certificate.content, @ca.host.key.content)
- crl.expects(:save)
+ Puppet::SSL::CertificateRevocationList.indirection.expects(:save).with(crl)
@ca.crl.should equal(crl)
end
@@ -235,12 +235,13 @@ describe Puppet::SSL::CertificateAuthority do
@name = "myhost"
@real_cert = stub 'realcert', :sign => nil
- @cert = stub 'certificate', :content => @real_cert
+ @cert = Puppet::SSL::Certificate.new(@name)
+ @cert.content = @real_cert
Puppet::SSL::Certificate.stubs(:new).returns @cert
@cert.stubs(:content=)
- @cert.stubs(:save)
+ Puppet::SSL::Certificate.indirection.stubs(:save)
# Stub out the factory
@factory = stub 'factory', :result => "my real cert"
@@ -252,7 +253,7 @@ describe Puppet::SSL::CertificateAuthority do
@inventory = stub 'inventory', :add => nil
@ca.stubs(:inventory).returns @inventory
- Puppet::SSL::CertificateRequest.stubs(:destroy)
+ Puppet::SSL::CertificateRequest.indirection.stubs(:destroy)
end
describe "and calculating the next certificate serial number" do
@@ -295,7 +296,7 @@ describe Puppet::SSL::CertificateAuthority do
end
it "should not look up a certificate request for the host" do
- Puppet::SSL::CertificateRequest.expects(:find).never
+ Puppet::SSL::CertificateRequest.indirection.expects(:find).never
@ca.sign(@name, :ca, @request)
end
@@ -329,7 +330,7 @@ describe Puppet::SSL::CertificateAuthority do
end
it "should save the resulting certificate" do
- @cert.expects(:save)
+ Puppet::SSL::Certificate.indirection.expects(:save).with(@cert)
@ca.sign(@name, :ca, @request)
end
@@ -340,8 +341,8 @@ describe Puppet::SSL::CertificateAuthority do
@serial = 10
@ca.stubs(:next_serial).returns @serial
- Puppet::SSL::CertificateRequest.stubs(:find).with(@name).returns @request
- @cert.stubs :save
+ Puppet::SSL::CertificateRequest.indirection.stubs(:find).with(@name).returns @request
+ Puppet::SSL::CertificateRequest.indirection.stubs :save
end
it "should use a certificate type of :server" do
@@ -353,13 +354,13 @@ describe Puppet::SSL::CertificateAuthority do
end
it "should use look up a CSR for the host in the :ca_file terminus" do
- Puppet::SSL::CertificateRequest.expects(:find).with(@name).returns @request
+ Puppet::SSL::CertificateRequest.indirection.expects(:find).with(@name).returns @request
@ca.sign(@name)
end
it "should fail if no CSR can be found for the host" do
- Puppet::SSL::CertificateRequest.expects(:find).with(@name).returns nil
+ Puppet::SSL::CertificateRequest.indirection.expects(:find).with(@name).returns nil
lambda { @ca.sign(@name) }.should raise_error(ArgumentError)
end
@@ -390,12 +391,12 @@ describe Puppet::SSL::CertificateAuthority do
end
it "should save the resulting certificate" do
- @cert.expects(:save)
+ Puppet::SSL::Certificate.indirection.stubs(:save).with(@cert)
@ca.sign(@name)
end
it "should remove the host's certificate request" do
- Puppet::SSL::CertificateRequest.expects(:destroy).with(@name)
+ Puppet::SSL::CertificateRequest.indirection.expects(:destroy).with(@name)
@ca.sign(@name)
end
@@ -405,8 +406,8 @@ describe Puppet::SSL::CertificateAuthority do
@serial = 10
@ca.stubs(:next_serial).returns @serial
- Puppet::SSL::CertificateRequest.stubs(:find).with(@name).returns @request
- @cert.stubs :save
+ Puppet::SSL::CertificateRequest.indirection.stubs(:find).with(@name).returns @request
+ Puppet::SSL::Certificate.indirection.stubs :save
Puppet::SSL::Certificate.expects(:new).with(@name).returns @cert
@ca.sign(@name)
@@ -414,8 +415,8 @@ describe Puppet::SSL::CertificateAuthority do
it "should return the certificate instance" do
@ca.stubs(:next_serial).returns @serial
- Puppet::SSL::CertificateRequest.stubs(:find).with(@name).returns @request
- @cert.stubs :save
+ Puppet::SSL::CertificateRequest.indirection.stubs(:find).with(@name).returns @request
+ Puppet::SSL::Certificate.indirection.stubs :save
@ca.sign(@name).should equal(@cert)
end
@@ -423,8 +424,8 @@ describe Puppet::SSL::CertificateAuthority do
@ca.stubs(:next_serial).returns @serial
@inventory.expects(:add).with(@cert)
- Puppet::SSL::CertificateRequest.stubs(:find).with(@name).returns @request
- @cert.stubs :save
+ Puppet::SSL::CertificateRequest.indirection.stubs(:find).with(@name).returns @request
+ Puppet::SSL::Certificate.indirection.stubs :save
@ca.sign(@name)
end
@@ -436,7 +437,7 @@ describe Puppet::SSL::CertificateAuthority do
it "should do nothing if autosign is disabled" do
Puppet.settings.expects(:value).with(:autosign).returns 'false'
- Puppet::SSL::CertificateRequest.expects(:search).never
+ Puppet::SSL::CertificateRequest.indirection.expects(:search).never
@ca.autosign
end
@@ -444,7 +445,7 @@ describe Puppet::SSL::CertificateAuthority do
Puppet.settings.expects(:value).with(:autosign).returns '/auto/sign'
FileTest.expects(:exist?).with("/auto/sign").returns false
- Puppet::SSL::CertificateRequest.expects(:search).never
+ Puppet::SSL::CertificateRequest.indirection.expects(:search).never
@ca.autosign
end
@@ -454,7 +455,7 @@ describe Puppet::SSL::CertificateAuthority do
FileTest.stubs(:exist?).with("/auto/sign").returns true
File.stubs(:readlines).with("/auto/sign").returns ["one\n", "two\n"]
- Puppet::SSL::CertificateRequest.stubs(:search).returns []
+ Puppet::SSL::CertificateRequest.indirection.stubs(:search).returns []
@store = stub 'store', :allow => nil
Puppet::Network::AuthStore.stubs(:new).returns @store
@@ -495,13 +496,13 @@ describe Puppet::SSL::CertificateAuthority do
it "should sign all CSRs whose hostname matches the autosign configuration" do
csr1 = mock 'csr1'
csr2 = mock 'csr2'
- Puppet::SSL::CertificateRequest.stubs(:search).returns [csr1, csr2]
+ Puppet::SSL::CertificateRequest.indirection.stubs(:search).returns [csr1, csr2]
end
it "should not sign CSRs whose hostname does not match the autosign configuration" do
csr1 = mock 'csr1'
csr2 = mock 'csr2'
- Puppet::SSL::CertificateRequest.stubs(:search).returns [csr1, csr2]
+ Puppet::SSL::CertificateRequest.indirection.stubs(:search).returns [csr1, csr2]
end
end
end
@@ -548,7 +549,7 @@ describe Puppet::SSL::CertificateAuthority do
it "should be able to list waiting certificate requests" do
req1 = stub 'req1', :name => "one"
req2 = stub 'req2', :name => "two"
- Puppet::SSL::CertificateRequest.expects(:search).with("*").returns [req1, req2]
+ Puppet::SSL::CertificateRequest.indirection.expects(:search).with("*").returns [req1, req2]
@ca.waiting?.should == %w{one two}
end
@@ -566,19 +567,19 @@ describe Puppet::SSL::CertificateAuthority do
it "should list certificates as the sorted list of all existing signed certificates" do
cert1 = stub 'cert1', :name => "cert1"
cert2 = stub 'cert2', :name => "cert2"
- Puppet::SSL::Certificate.expects(:search).with("*").returns [cert1, cert2]
+ Puppet::SSL::Certificate.indirection.expects(:search).with("*").returns [cert1, cert2]
@ca.list.should == %w{cert1 cert2}
end
describe "and printing certificates" do
it "should return nil if the certificate cannot be found" do
- Puppet::SSL::Certificate.expects(:find).with("myhost").returns nil
+ Puppet::SSL::Certificate.indirection.expects(:find).with("myhost").returns nil
@ca.print("myhost").should be_nil
end
it "should print certificates by calling :to_text on the host's certificate" do
cert1 = stub 'cert1', :name => "cert1", :to_text => "mytext"
- Puppet::SSL::Certificate.expects(:find).with("myhost").returns cert1
+ Puppet::SSL::Certificate.indirection.expects(:find).with("myhost").returns cert1
@ca.print("myhost").should == "mytext"
end
end
@@ -586,19 +587,19 @@ describe Puppet::SSL::CertificateAuthority do
describe "and fingerprinting certificates" do
before :each do
@cert = stub 'cert', :name => "cert", :fingerprint => "DIGEST"
- Puppet::SSL::Certificate.stubs(:find).with("myhost").returns @cert
- Puppet::SSL::CertificateRequest.stubs(:find).with("myhost")
+ Puppet::SSL::Certificate.indirection.stubs(:find).with("myhost").returns @cert
+ Puppet::SSL::CertificateRequest.indirection.stubs(:find).with("myhost")
end
it "should raise an error if the certificate or CSR cannot be found" do
- Puppet::SSL::Certificate.expects(:find).with("myhost").returns nil
- Puppet::SSL::CertificateRequest.expects(:find).with("myhost").returns nil
+ Puppet::SSL::Certificate.indirection.expects(:find).with("myhost").returns nil
+ Puppet::SSL::CertificateRequest.indirection.expects(:find).with("myhost").returns nil
lambda { @ca.fingerprint("myhost") }.should raise_error
end
it "should try to find a CSR if no certificate can be found" do
- Puppet::SSL::Certificate.expects(:find).with("myhost").returns nil
- Puppet::SSL::CertificateRequest.expects(:find).with("myhost").returns @cert
+ Puppet::SSL::Certificate.indirection.expects(:find).with("myhost").returns nil
+ Puppet::SSL::CertificateRequest.indirection.expects(:find).with("myhost").returns @cert
@cert.expects(:fingerprint)
@ca.fingerprint("myhost")
end
@@ -623,7 +624,7 @@ describe Puppet::SSL::CertificateAuthority do
Puppet.settings.stubs(:value).returns "crtstuff"
@cert = stub 'cert', :content => "mycert"
- Puppet::SSL::Certificate.stubs(:find).returns @cert
+ Puppet::SSL::Certificate.indirection.stubs(:find).returns @cert
@crl = stub('crl', :content => "mycrl")
@@ -631,7 +632,7 @@ describe Puppet::SSL::CertificateAuthority do
end
it "should fail if the host's certificate cannot be found" do
- Puppet::SSL::Certificate.expects(:find).with("me").returns(nil)
+ Puppet::SSL::Certificate.indirection.expects(:find).with("me").returns(nil)
lambda { @ca.verify("me") }.should raise_error(ArgumentError)
end
@@ -694,7 +695,7 @@ describe Puppet::SSL::CertificateAuthority do
@real_cert = stub 'real_cert', :serial => 15
@cert = stub 'cert', :content => @real_cert
- Puppet::SSL::Certificate.stubs(:find).returns @cert
+ Puppet::SSL::Certificate.indirection.stubs(:find).returns @cert
end
@@ -714,7 +715,7 @@ describe Puppet::SSL::CertificateAuthority do
it "should get the serial number from the local certificate if it exists" do
@ca.crl.expects(:revoke).with { |serial, key| serial == 15 }
- Puppet::SSL::Certificate.expects(:find).with("host").returns @cert
+ Puppet::SSL::Certificate.indirection.expects(:find).with("host").returns @cert
@ca.revoke('host')
end
@@ -722,7 +723,7 @@ describe Puppet::SSL::CertificateAuthority do
it "should get the serial number from inventory if no local certificate exists" do
real_cert = stub 'real_cert', :serial => 15
cert = stub 'cert', :content => real_cert
- Puppet::SSL::Certificate.expects(:find).with("host").returns nil
+ Puppet::SSL::Certificate.indirection.expects(:find).with("host").returns nil
@ca.inventory.expects(:serial).with("host").returns 16
@@ -739,13 +740,13 @@ describe Puppet::SSL::CertificateAuthority do
before do
@host = stub 'host', :generate_certificate_request => nil
Puppet::SSL::Host.stubs(:new).returns @host
- Puppet::SSL::Certificate.stubs(:find).returns nil
+ Puppet::SSL::Certificate.indirection.stubs(:find).returns nil
@ca.stubs(:sign)
end
it "should fail if a certificate already exists for the host" do
- Puppet::SSL::Certificate.expects(:find).with("him").returns "something"
+ Puppet::SSL::Certificate.indirection.expects(:find).with("him").returns "something"
lambda { @ca.generate("him") }.should raise_error(ArgumentError)
end
diff --git a/spec/unit/ssl/certificate_factory_spec.rb b/spec/unit/ssl/certificate_factory_spec.rb
index de2093810..c2bcb19ce 100755
--- a/spec/unit/ssl/certificate_factory_spec.rb
+++ b/spec/unit/ssl/certificate_factory_spec.rb
@@ -1,6 +1,6 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
require 'puppet/ssl/certificate_factory'
diff --git a/spec/unit/ssl/certificate_request_spec.rb b/spec/unit/ssl/certificate_request_spec.rb
index 437fc0556..32c9cb51d 100755
--- a/spec/unit/ssl/certificate_request_spec.rb
+++ b/spec/unit/ssl/certificate_request_spec.rb
@@ -1,6 +1,6 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
require 'puppet/ssl/certificate_request'
require 'puppet/ssl/key'
@@ -187,22 +187,17 @@ describe Puppet::SSL::CertificateRequest do
end
describe "when a CSR is saved" do
- it "should allow arguments" do
- csr = Puppet::SSL::CertificateRequest.new("me")
- csr.class.indirection.stubs(:save)
-
- lambda { csr.save :ipaddress => "foo" }.should_not raise_error
- end
-
describe "and a CA is available" do
it "should save the CSR and trigger autosigning" do
ca = mock 'ca', :autosign
Puppet::SSL::CertificateAuthority.expects(:instance).returns ca
csr = Puppet::SSL::CertificateRequest.new("me")
- Puppet::SSL::CertificateRequest.indirection.expects(:save).with(nil, csr)
+ terminus = mock 'terminus'
+ Puppet::SSL::CertificateRequest.indirection.expects(:prepare).returns(terminus)
+ terminus.expects(:save).with { |request| request.instance == csr && request.key == "me" }
- csr.save
+ Puppet::SSL::CertificateRequest.indirection.save(csr)
end
end
@@ -211,9 +206,11 @@ describe Puppet::SSL::CertificateRequest do
Puppet::SSL::CertificateAuthority.expects(:instance).returns nil
csr = Puppet::SSL::CertificateRequest.new("me")
- Puppet::SSL::CertificateRequest.indirection.expects(:save).with(nil, csr)
+ terminus = mock 'terminus'
+ Puppet::SSL::CertificateRequest.indirection.expects(:prepare).returns(terminus)
+ terminus.expects(:save).with { |request| request.instance == csr && request.key == "me" }
- csr.save
+ Puppet::SSL::CertificateRequest.indirection.save(csr)
end
end
end
diff --git a/spec/unit/ssl/certificate_revocation_list_spec.rb b/spec/unit/ssl/certificate_revocation_list_spec.rb
index f9993d52e..e83ad9cc5 100755
--- a/spec/unit/ssl/certificate_revocation_list_spec.rb
+++ b/spec/unit/ssl/certificate_revocation_list_spec.rb
@@ -1,6 +1,6 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
require 'puppet/ssl/certificate_revocation_list'
@@ -119,7 +119,7 @@ describe Puppet::SSL::CertificateRevocationList do
@crl.generate(@cert, @key)
@crl.content.stubs(:sign)
- @crl.stubs :save
+ Puppet::SSL::CertificateRevocationList.indirection.stubs :save
@key = mock 'key'
end
@@ -161,7 +161,7 @@ describe Puppet::SSL::CertificateRevocationList do
end
it "should save the CRL" do
- @crl.expects :save
+ Puppet::SSL::CertificateRevocationList.indirection.expects(:save).with(@crl, nil)
@crl.revoke(1, @key)
end
end
diff --git a/spec/unit/ssl/certificate_spec.rb b/spec/unit/ssl/certificate_spec.rb
index 842aa35c5..b3af9f236 100755
--- a/spec/unit/ssl/certificate_spec.rb
+++ b/spec/unit/ssl/certificate_spec.rb
@@ -1,6 +1,6 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
require 'puppet/ssl/certificate'
diff --git a/spec/unit/ssl/host_spec.rb b/spec/unit/ssl/host_spec.rb
index b2e43393c..d8f15e738 100755
--- a/spec/unit/ssl/host_spec.rb
+++ b/spec/unit/ssl/host_spec.rb
@@ -1,6 +1,6 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
require 'puppet/ssl/host'
@@ -22,7 +22,7 @@ describe Puppet::SSL::Host do
it "should retrieve its public key from its private key" do
realkey = mock 'realkey'
key = stub 'key', :content => realkey
- Puppet::SSL::Key.stubs(:find).returns(key)
+ Puppet::SSL::Key.indirection.stubs(:find).returns(key)
pubkey = mock 'public_key'
realkey.expects(:public_key).returns pubkey
@@ -142,8 +142,8 @@ describe Puppet::SSL::Host do
describe "when specifying the CA location" do
before do
[Puppet::SSL::Key, Puppet::SSL::Certificate, Puppet::SSL::CertificateRequest, Puppet::SSL::CertificateRevocationList].each do |klass|
- klass.stubs(:terminus_class=)
- klass.stubs(:cache_class=)
+ klass.indirection.stubs(:terminus_class=)
+ klass.indirection.stubs(:cache_class=)
end
end
@@ -169,23 +169,23 @@ describe Puppet::SSL::Host do
describe "as 'local'" do
it "should set the cache class for Certificate, CertificateRevocationList, and CertificateRequest as :file" do
- Puppet::SSL::Certificate.expects(:cache_class=).with :file
- Puppet::SSL::CertificateRequest.expects(:cache_class=).with :file
- Puppet::SSL::CertificateRevocationList.expects(:cache_class=).with :file
+ Puppet::SSL::Certificate.indirection.expects(:cache_class=).with :file
+ Puppet::SSL::CertificateRequest.indirection.expects(:cache_class=).with :file
+ Puppet::SSL::CertificateRevocationList.indirection.expects(:cache_class=).with :file
Puppet::SSL::Host.ca_location = :local
end
it "should set the terminus class for Key as :file" do
- Puppet::SSL::Key.expects(:terminus_class=).with :file
+ Puppet::SSL::Key.indirection.expects(:terminus_class=).with :file
Puppet::SSL::Host.ca_location = :local
end
it "should set the terminus class for Certificate, CertificateRevocationList, and CertificateRequest as :ca" do
- Puppet::SSL::Certificate.expects(:terminus_class=).with :ca
- Puppet::SSL::CertificateRequest.expects(:terminus_class=).with :ca
- Puppet::SSL::CertificateRevocationList.expects(:terminus_class=).with :ca
+ Puppet::SSL::Certificate.indirection.expects(:terminus_class=).with :ca
+ Puppet::SSL::CertificateRequest.indirection.expects(:terminus_class=).with :ca
+ Puppet::SSL::CertificateRevocationList.indirection.expects(:terminus_class=).with :ca
Puppet::SSL::Host.ca_location = :local
end
@@ -193,23 +193,23 @@ describe Puppet::SSL::Host do
describe "as 'remote'" do
it "should set the cache class for Certificate, CertificateRevocationList, and CertificateRequest as :file" do
- Puppet::SSL::Certificate.expects(:cache_class=).with :file
- Puppet::SSL::CertificateRequest.expects(:cache_class=).with :file
- Puppet::SSL::CertificateRevocationList.expects(:cache_class=).with :file
+ Puppet::SSL::Certificate.indirection.expects(:cache_class=).with :file
+ Puppet::SSL::CertificateRequest.indirection.expects(:cache_class=).with :file
+ Puppet::SSL::CertificateRevocationList.indirection.expects(:cache_class=).with :file
Puppet::SSL::Host.ca_location = :remote
end
it "should set the terminus class for Key as :file" do
- Puppet::SSL::Key.expects(:terminus_class=).with :file
+ Puppet::SSL::Key.indirection.expects(:terminus_class=).with :file
Puppet::SSL::Host.ca_location = :remote
end
it "should set the terminus class for Certificate, CertificateRevocationList, and CertificateRequest as :rest" do
- Puppet::SSL::Certificate.expects(:terminus_class=).with :rest
- Puppet::SSL::CertificateRequest.expects(:terminus_class=).with :rest
- Puppet::SSL::CertificateRevocationList.expects(:terminus_class=).with :rest
+ Puppet::SSL::Certificate.indirection.expects(:terminus_class=).with :rest
+ Puppet::SSL::CertificateRequest.indirection.expects(:terminus_class=).with :rest
+ Puppet::SSL::CertificateRevocationList.indirection.expects(:terminus_class=).with :rest
Puppet::SSL::Host.ca_location = :remote
end
@@ -217,18 +217,18 @@ describe Puppet::SSL::Host do
describe "as 'only'" do
it "should set the terminus class for Key, Certificate, CertificateRevocationList, and CertificateRequest as :ca" do
- Puppet::SSL::Key.expects(:terminus_class=).with :ca
- Puppet::SSL::Certificate.expects(:terminus_class=).with :ca
- Puppet::SSL::CertificateRequest.expects(:terminus_class=).with :ca
- Puppet::SSL::CertificateRevocationList.expects(:terminus_class=).with :ca
+ Puppet::SSL::Key.indirection.expects(:terminus_class=).with :ca
+ Puppet::SSL::Certificate.indirection.expects(:terminus_class=).with :ca
+ Puppet::SSL::CertificateRequest.indirection.expects(:terminus_class=).with :ca
+ Puppet::SSL::CertificateRevocationList.indirection.expects(:terminus_class=).with :ca
Puppet::SSL::Host.ca_location = :only
end
it "should reset the cache class for Certificate, CertificateRevocationList, and CertificateRequest to nil" do
- Puppet::SSL::Certificate.expects(:cache_class=).with nil
- Puppet::SSL::CertificateRequest.expects(:cache_class=).with nil
- Puppet::SSL::CertificateRevocationList.expects(:cache_class=).with nil
+ Puppet::SSL::Certificate.indirection.expects(:cache_class=).with nil
+ Puppet::SSL::CertificateRequest.indirection.expects(:cache_class=).with nil
+ Puppet::SSL::CertificateRevocationList.indirection.expects(:cache_class=).with nil
Puppet::SSL::Host.ca_location = :only
end
@@ -236,10 +236,10 @@ describe Puppet::SSL::Host do
describe "as 'none'" do
it "should set the terminus class for Key, Certificate, CertificateRevocationList, and CertificateRequest as :file" do
- Puppet::SSL::Key.expects(:terminus_class=).with :file
- Puppet::SSL::Certificate.expects(:terminus_class=).with :file
- Puppet::SSL::CertificateRequest.expects(:terminus_class=).with :file
- Puppet::SSL::CertificateRevocationList.expects(:terminus_class=).with :file
+ Puppet::SSL::Key.indirection.expects(:terminus_class=).with :file
+ Puppet::SSL::Certificate.indirection.expects(:terminus_class=).with :file
+ Puppet::SSL::CertificateRequest.indirection.expects(:terminus_class=).with :file
+ Puppet::SSL::CertificateRevocationList.indirection.expects(:terminus_class=).with :file
Puppet::SSL::Host.ca_location = :none
end
@@ -252,21 +252,21 @@ describe Puppet::SSL::Host do
describe "when destroying a host's SSL files" do
before do
- Puppet::SSL::Key.stubs(:destroy).returns false
- Puppet::SSL::Certificate.stubs(:destroy).returns false
- Puppet::SSL::CertificateRequest.stubs(:destroy).returns false
+ Puppet::SSL::Key.indirection.stubs(:destroy).returns false
+ Puppet::SSL::Certificate.indirection.stubs(:destroy).returns false
+ Puppet::SSL::CertificateRequest.indirection.stubs(:destroy).returns false
end
it "should destroy its certificate, certificate request, and key" do
- Puppet::SSL::Key.expects(:destroy).with("myhost")
- Puppet::SSL::Certificate.expects(:destroy).with("myhost")
- Puppet::SSL::CertificateRequest.expects(:destroy).with("myhost")
+ Puppet::SSL::Key.indirection.expects(:destroy).with("myhost")
+ Puppet::SSL::Certificate.indirection.expects(:destroy).with("myhost")
+ Puppet::SSL::CertificateRequest.indirection.expects(:destroy).with("myhost")
Puppet::SSL::Host.destroy("myhost")
end
it "should return true if any of the classes returned true" do
- Puppet::SSL::Certificate.expects(:destroy).with("myhost").returns true
+ Puppet::SSL::Certificate.indirection.expects(:destroy).with("myhost").returns true
Puppet::SSL::Host.destroy("myhost").should be_true
end
@@ -301,16 +301,17 @@ describe Puppet::SSL::Host do
describe "when managing its private key" do
before do
@realkey = "mykey"
- @key = stub 'key', :content => @realkey
+ @key = Puppet::SSL::Key.new("mykey")
+ @key.content = @realkey
end
it "should return nil if the key is not set and cannot be found" do
- Puppet::SSL::Key.expects(:find).with("myname").returns(nil)
+ Puppet::SSL::Key.indirection.expects(:find).with("myname").returns(nil)
@host.key.should be_nil
end
it "should find the key in the Key class and return the Puppet instance" do
- Puppet::SSL::Key.expects(:find).with("myname").returns(@key)
+ Puppet::SSL::Key.indirection.expects(:find).with("myname").returns(@key)
@host.key.should equal(@key)
end
@@ -318,7 +319,7 @@ describe Puppet::SSL::Host do
Puppet::SSL::Key.expects(:new).with("myname").returns(@key)
@key.expects(:generate)
- @key.expects(:save)
+ Puppet::SSL::Key.indirection.expects(:save)
@host.generate_key.should be_true
@host.key.should equal(@key)
@@ -328,14 +329,14 @@ describe Puppet::SSL::Host do
Puppet::SSL::Key.expects(:new).with("myname").returns(@key)
@key.stubs(:generate)
- @key.expects(:save).raises "eh"
+ Puppet::SSL::Key.indirection.expects(:save).raises "eh"
lambda { @host.generate_key }.should raise_error
@host.key.should be_nil
end
it "should return any previously found key without requerying" do
- Puppet::SSL::Key.expects(:find).with("myname").returns(@key).once
+ Puppet::SSL::Key.indirection.expects(:find).with("myname").returns(@key).once
@host.key.should equal(@key)
@host.key.should equal(@key)
end
@@ -344,16 +345,17 @@ describe Puppet::SSL::Host do
describe "when managing its certificate request" do
before do
@realrequest = "real request"
- @request = stub 'request', :content => @realrequest
+ @request = Puppet::SSL::CertificateRequest.new("myname")
+ @request.content = @realrequest
end
it "should return nil if the key is not set and cannot be found" do
- Puppet::SSL::CertificateRequest.expects(:find).with("myname").returns(nil)
+ Puppet::SSL::CertificateRequest.indirection.expects(:find).with("myname").returns(nil)
@host.certificate_request.should be_nil
end
it "should find the request in the Key class and return it and return the Puppet SSL request" do
- Puppet::SSL::CertificateRequest.expects(:find).with("myname").returns @request
+ Puppet::SSL::CertificateRequest.indirection.expects(:find).with("myname").returns @request
@host.certificate_request.should equal(@request)
end
@@ -367,7 +369,7 @@ describe Puppet::SSL::Host do
@host.expects(:generate_key).returns(key)
@request.stubs(:generate)
- @request.stubs(:save)
+ Puppet::SSL::CertificateRequest.indirection.stubs(:save)
@host.generate_certificate_request
end
@@ -378,14 +380,14 @@ describe Puppet::SSL::Host do
key = stub 'key', :public_key => mock("public_key"), :content => "mycontent"
@host.stubs(:key).returns(key)
@request.expects(:generate).with("mycontent")
- @request.expects(:save)
+ Puppet::SSL::CertificateRequest.indirection.expects(:save).with(@request)
@host.generate_certificate_request.should be_true
@host.certificate_request.should equal(@request)
end
it "should return any previously found request without requerying" do
- Puppet::SSL::CertificateRequest.expects(:find).with("myname").returns(@request).once
+ Puppet::SSL::CertificateRequest.indirection.expects(:find).with("myname").returns(@request).once
@host.certificate_request.should equal(@request)
@host.certificate_request.should equal(@request)
@@ -397,11 +399,14 @@ describe Puppet::SSL::Host do
key = stub 'key', :public_key => mock("public_key"), :content => "mycontent"
@host.stubs(:key).returns(key)
@request.stubs(:generate)
- @request.expects(:save).raises "eh"
+ @request.stubs(:name).returns("myname")
+ terminus = stub 'terminus'
+ Puppet::SSL::CertificateRequest.indirection.expects(:prepare).returns(terminus)
+ terminus.expects(:save).with { |req| req.instance == @request && req.key == "myname" }.raises "eh"
lambda { @host.generate_certificate_request }.should raise_error
- @host.certificate_request.should be_nil
+ @host.instance_eval { @certificate_request }.should be_nil
end
end
@@ -415,36 +420,36 @@ describe Puppet::SSL::Host do
end
it "should find the CA certificate if it does not have a certificate" do
- Puppet::SSL::Certificate.expects(:find).with(Puppet::SSL::CA_NAME).returns mock("cacert")
- Puppet::SSL::Certificate.stubs(:find).with("myname").returns @cert
+ Puppet::SSL::Certificate.indirection.expects(:find).with(Puppet::SSL::CA_NAME).returns mock("cacert")
+ Puppet::SSL::Certificate.indirection.stubs(:find).with("myname").returns @cert
@host.certificate
end
it "should not find the CA certificate if it is the CA host" do
@host.expects(:ca?).returns true
- Puppet::SSL::Certificate.stubs(:find)
- Puppet::SSL::Certificate.expects(:find).with(Puppet::SSL::CA_NAME).never
+ Puppet::SSL::Certificate.indirection.stubs(:find)
+ Puppet::SSL::Certificate.indirection.expects(:find).with(Puppet::SSL::CA_NAME).never
@host.certificate
end
it "should return nil if it cannot find a CA certificate" do
- Puppet::SSL::Certificate.expects(:find).with(Puppet::SSL::CA_NAME).returns nil
- Puppet::SSL::Certificate.expects(:find).with("myname").never
+ Puppet::SSL::Certificate.indirection.expects(:find).with(Puppet::SSL::CA_NAME).returns nil
+ Puppet::SSL::Certificate.indirection.expects(:find).with("myname").never
@host.certificate.should be_nil
end
it "should find the key if it does not have one" do
- Puppet::SSL::Certificate.stubs(:find)
+ Puppet::SSL::Certificate.indirection.stubs(:find)
@host.expects(:key).returns mock("key")
@host.certificate
end
it "should generate the key if one cannot be found" do
- Puppet::SSL::Certificate.stubs(:find)
+ Puppet::SSL::Certificate.indirection.stubs(:find)
@host.expects(:key).returns nil
@host.expects(:generate_key)
@@ -453,8 +458,8 @@ describe Puppet::SSL::Host do
end
it "should find the certificate in the Certificate class and return the Puppet certificate instance" do
- Puppet::SSL::Certificate.expects(:find).with(Puppet::SSL::CA_NAME).returns mock("cacert")
- Puppet::SSL::Certificate.expects(:find).with("myname").returns @cert
+ Puppet::SSL::Certificate.indirection.expects(:find).with(Puppet::SSL::CA_NAME).returns mock("cacert")
+ Puppet::SSL::Certificate.indirection.expects(:find).with("myname").returns @cert
@host.certificate.should equal(@cert)
end
@@ -462,14 +467,14 @@ describe Puppet::SSL::Host do
it "should fail if the found certificate does not match the private key" do
@host.expects(:certificate_matches_key?).returns false
- Puppet::SSL::Certificate.stubs(:find).returns @cert
+ Puppet::SSL::Certificate.indirection.stubs(:find).returns @cert
lambda { @host.certificate }.should raise_error(Puppet::Error)
end
it "should return any previously found certificate" do
- Puppet::SSL::Certificate.expects(:find).with(Puppet::SSL::CA_NAME).returns mock("cacert")
- Puppet::SSL::Certificate.expects(:find).with("myname").returns(@cert).once
+ Puppet::SSL::Certificate.indirection.expects(:find).with(Puppet::SSL::CA_NAME).returns mock("cacert")
+ Puppet::SSL::Certificate.indirection.expects(:find).with("myname").returns(@cert).once
@host.certificate.should equal(@cert)
@host.certificate.should equal(@cert)
@@ -482,30 +487,30 @@ describe Puppet::SSL::Host do
describe "when listing certificate hosts" do
it "should default to listing all clients with any file types" do
- Puppet::SSL::Key.expects(:search).returns []
- Puppet::SSL::Certificate.expects(:search).returns []
- Puppet::SSL::CertificateRequest.expects(:search).returns []
+ Puppet::SSL::Key.indirection.expects(:search).returns []
+ Puppet::SSL::Certificate.indirection.expects(:search).returns []
+ Puppet::SSL::CertificateRequest.indirection.expects(:search).returns []
Puppet::SSL::Host.search
end
it "should be able to list only clients with a key" do
- Puppet::SSL::Key.expects(:search).returns []
- Puppet::SSL::Certificate.expects(:search).never
- Puppet::SSL::CertificateRequest.expects(:search).never
+ Puppet::SSL::Key.indirection.expects(:search).returns []
+ Puppet::SSL::Certificate.indirection.expects(:search).never
+ Puppet::SSL::CertificateRequest.indirection.expects(:search).never
Puppet::SSL::Host.search :for => Puppet::SSL::Key
end
it "should be able to list only clients with a certificate" do
- Puppet::SSL::Key.expects(:search).never
- Puppet::SSL::Certificate.expects(:search).returns []
- Puppet::SSL::CertificateRequest.expects(:search).never
+ Puppet::SSL::Key.indirection.expects(:search).never
+ Puppet::SSL::Certificate.indirection.expects(:search).returns []
+ Puppet::SSL::CertificateRequest.indirection.expects(:search).never
Puppet::SSL::Host.search :for => Puppet::SSL::Certificate
end
it "should be able to list only clients with a certificate request" do
- Puppet::SSL::Key.expects(:search).never
- Puppet::SSL::Certificate.expects(:search).never
- Puppet::SSL::CertificateRequest.expects(:search).returns []
+ Puppet::SSL::Key.indirection.expects(:search).never
+ Puppet::SSL::Certificate.indirection.expects(:search).never
+ Puppet::SSL::CertificateRequest.indirection.expects(:search).returns []
Puppet::SSL::Host.search :for => Puppet::SSL::CertificateRequest
end
@@ -514,9 +519,9 @@ describe Puppet::SSL::Host do
cert = stub 'cert', :name => "cert"
csr = stub 'csr', :name => "csr"
- Puppet::SSL::Key.expects(:search).returns [key]
- Puppet::SSL::Certificate.expects(:search).returns [cert]
- Puppet::SSL::CertificateRequest.expects(:search).returns [csr]
+ Puppet::SSL::Key.indirection.expects(:search).returns [key]
+ Puppet::SSL::Certificate.indirection.expects(:search).returns [cert]
+ Puppet::SSL::CertificateRequest.indirection.expects(:search).returns [csr]
returned = []
%w{key cert csr}.each do |name|
@@ -606,7 +611,7 @@ describe Puppet::SSL::Host do
Puppet.settings.stubs(:value).with(:localcacert).returns "ssl_host_testing"
- Puppet::SSL::CertificateRevocationList.stubs(:find).returns(nil)
+ Puppet::SSL::CertificateRevocationList.indirection.stubs(:find).returns(nil)
end
it "should accept a purpose" do
@@ -628,7 +633,7 @@ describe Puppet::SSL::Host do
describe "and a CRL is available" do
before do
@crl = stub 'crl', :content => "real_crl"
- Puppet::SSL::CertificateRevocationList.stubs(:find).returns @crl
+ Puppet::SSL::CertificateRevocationList.indirection.stubs(:find).returns @crl
Puppet.settings.stubs(:value).with(:certificate_revocation).returns true
end
diff --git a/spec/unit/ssl/inventory_spec.rb b/spec/unit/ssl/inventory_spec.rb
index a57d6fafc..4d47a37c6 100755
--- a/spec/unit/ssl/inventory_spec.rb
+++ b/spec/unit/ssl/inventory_spec.rb
@@ -1,6 +1,6 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
require 'puppet/ssl/inventory'
@@ -40,7 +40,7 @@ describe Puppet::SSL::Inventory do
Puppet.settings.stubs(:write)
FileTest.stubs(:exist?).with("/inven/tory").returns false
- Puppet::SSL::Certificate.stubs(:search).returns []
+ Puppet::SSL::Certificate.indirection.stubs(:search).returns []
end
it "should log that it is building a new inventory file" do
@@ -67,7 +67,7 @@ describe Puppet::SSL::Inventory do
cert1 = mock 'cert1'
cert2 = mock 'cert2'
- Puppet::SSL::Certificate.expects(:search).with("*").returns [cert1, cert2]
+ Puppet::SSL::Certificate.indirection.expects(:search).with("*").returns [cert1, cert2]
@class.any_instance.expects(:add).with(cert1)
@class.any_instance.expects(:add).with(cert2)
diff --git a/spec/unit/ssl/key_spec.rb b/spec/unit/ssl/key_spec.rb
index 58193db28..e0667a5cc 100755
--- a/spec/unit/ssl/key_spec.rb
+++ b/spec/unit/ssl/key_spec.rb
@@ -1,6 +1,6 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
require 'puppet/ssl/key'
diff --git a/spec/unit/sslcertificates/ca_spec.rb b/spec/unit/sslcertificates/ca_spec.rb
index b1393b25d..4e44f2d90 100644
--- a/spec/unit/sslcertificates/ca_spec.rb
+++ b/spec/unit/sslcertificates/ca_spec.rb
@@ -1,5 +1,5 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
require 'puppet'
require 'puppet/sslcertificates'
diff --git a/spec/unit/status_spec.rb b/spec/unit/status_spec.rb
index 71bfa4a44..3a9c805b3 100644
--- a/spec/unit/status_spec.rb
+++ b/spec/unit/status_spec.rb
@@ -1,11 +1,11 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
describe Puppet::Status do
it "should implement find" do
- Puppet::Status.find( :default ).should be_is_a(Puppet::Status)
- Puppet::Status.find( :default ).status["is_alive"].should == true
+ Puppet::Status.indirection.find( :default ).should be_is_a(Puppet::Status)
+ Puppet::Status.indirection.find( :default ).status["is_alive"].should == true
end
it "should default to is_alive is true" do
diff --git a/spec/unit/transaction/change_spec.rb b/spec/unit/transaction/change_spec.rb
deleted file mode 100755
index e443e3baa..000000000
--- a/spec/unit/transaction/change_spec.rb
+++ /dev/null
@@ -1,193 +0,0 @@
-#!/usr/bin/env ruby
-
-require File.dirname(__FILE__) + '/../../spec_helper'
-
-require 'puppet/transaction/change'
-
-describe Puppet::Transaction::Change do
- Change = Puppet::Transaction::Change
-
- describe "when initializing" do
- before do
- @property = stub 'property', :path => "/property/path", :should => "shouldval"
- end
-
- it "should require the property and current value" do
- lambda { Change.new }.should raise_error
- end
-
- it "should set its property to the provided property" do
- Change.new(@property, "value").property.should == :property
- end
-
- it "should set its 'is' value to the provided value" do
- Change.new(@property, "value").is.should == "value"
- end
-
- it "should retrieve the 'should' value from the property" do
- # Yay rspec :)
- Change.new(@property, "value").should.should == @property.should
- end
- end
-
- describe "when an instance" do
- before do
- @property = stub 'property', :path => "/property/path", :should => "shouldval"
- @change = Change.new(@property, "value")
- end
-
- it "should be noop if the property is noop" do
- @property.expects(:noop).returns true
- @change.noop?.should be_true
- end
-
- it "should be auditing if set so" do
- @change.auditing = true
- @change.must be_auditing
- end
-
- it "should set its resource to the proxy if it has one" do
- @change.proxy = :myresource
- @change.resource.should == :myresource
- end
-
- it "should set its resource to the property's resource if no proxy is set" do
- @property.expects(:resource).returns :myresource
- @change.resource.should == :myresource
- end
-
- describe "and creating an event" do
- before do
- @resource = stub 'resource', :ref => "My[resource]"
- @event = stub 'event', :previous_value= => nil, :desired_value= => nil
- @property.stubs(:event).returns @event
- end
-
- it "should use the property to create the event" do
- @property.expects(:event).returns @event
- @change.event.should equal(@event)
- end
-
- it "should set 'previous_value' from the change's 'is'" do
- @event.expects(:previous_value=).with(@change.is)
- @change.event
- end
-
- it "should set 'desired_value' from the change's 'should'" do
- @event.expects(:desired_value=).with(@change.should)
- @change.event
- end
- end
-
- describe "and executing" do
- before do
- @event = Puppet::Transaction::Event.new(:myevent)
- @event.stubs(:send_log)
- @change.stubs(:noop?).returns false
- @property.stubs(:event).returns @event
-
- @property.stub_everything
- @property.stubs(:resource).returns "myresource"
- @property.stubs(:name).returns :myprop
- end
-
- describe "in noop mode" do
- before { @change.stubs(:noop?).returns true }
-
- it "should log that it is in noop" do
- @property.expects(:is_to_s)
- @property.expects(:should_to_s)
-
- @event.expects(:message=).with { |msg| msg.include?("should be") }
-
- @change.apply
- end
-
- it "should produce a :noop event and return" do
- @property.stub_everything
-
- @event.expects(:status=).with("noop")
-
- @change.apply.should == @event
- end
- end
-
- describe "in audit mode" do
- before { @change.auditing = true }
-
- it "should log that it is in audit mode" do
- @property.expects(:is_to_s)
- @property.expects(:should_to_s)
-
- @event.expects(:message=).with { |msg| msg.include?("audit") }
-
- @change.apply
- end
-
- it "should produce a :audit event and return" do
- @property.stub_everything
-
- @event.expects(:status=).with("audit")
-
- @change.apply.should == @event
- end
- end
-
- it "should sync the property" do
- @property.expects(:sync)
-
- @change.apply
- end
-
- it "should return the default event if syncing the property returns nil" do
- @property.stubs(:sync).returns nil
-
- @change.expects(:event).with(nil).returns @event
-
- @change.apply.should == @event
- end
-
- it "should return the default event if syncing the property returns an empty array" do
- @property.stubs(:sync).returns []
-
- @change.expects(:event).with(nil).returns @event
-
- @change.apply.should == @event
- end
-
- it "should log the change" do
- @property.expects(:sync).returns [:one]
-
- @event.expects(:send_log)
-
- @change.apply
- end
-
- it "should set the event's message to the change log" do
- @property.expects(:change_to_s).returns "my change"
- @change.apply.message.should == "my change"
- end
-
- it "should set the event's status to 'success'" do
- @change.apply.status.should == "success"
- end
-
- describe "and the change fails" do
- before { @property.expects(:sync).raises "an exception" }
-
- it "should catch the exception and log the err" do
- @event.expects(:send_log)
- lambda { @change.apply }.should_not raise_error
- end
-
- it "should mark the event status as 'failure'" do
- @change.apply.status.should == "failure"
- end
-
- it "should set the event log to a failure log" do
- @change.apply.message.should be_include("failed")
- end
- end
- end
- end
-end
diff --git a/spec/unit/transaction/event_manager_spec.rb b/spec/unit/transaction/event_manager_spec.rb
index eeb3d3389..e45fbdf78 100755
--- a/spec/unit/transaction/event_manager_spec.rb
+++ b/spec/unit/transaction/event_manager_spec.rb
@@ -1,6 +1,6 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
require 'puppet/transaction/event_manager'
diff --git a/spec/unit/transaction/event_spec.rb b/spec/unit/transaction/event_spec.rb
index 9cf6bc165..c77716cd6 100755
--- a/spec/unit/transaction/event_spec.rb
+++ b/spec/unit/transaction/event_spec.rb
@@ -1,11 +1,11 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
require 'puppet/transaction/event'
describe Puppet::Transaction::Event do
- [:previous_value, :desired_value, :property, :resource, :name, :message, :node, :version, :file, :line, :tags].each do |attr|
+ [:previous_value, :desired_value, :property, :resource, :name, :message, :file, :line, :tags, :audited].each do |attr|
it "should support #{attr}" do
event = Puppet::Transaction::Event.new
event.send(attr.to_s + "=", "foo")
@@ -46,6 +46,12 @@ describe Puppet::Transaction::Event do
Puppet::Transaction::Event.new.time.should be_instance_of(Time)
end
+ describe "audit property" do
+ it "should default to false" do
+ Puppet::Transaction::Event.new.audited.should == false
+ end
+ end
+
describe "when sending logs" do
before do
Puppet::Util::Log.stubs(:new)
@@ -83,7 +89,7 @@ describe Puppet::Transaction::Event do
Puppet::Transaction::Event.new(:tags => %w{one two}).send_log
end
- [:file, :line, :version].each do |attr|
+ [:file, :line].each do |attr|
it "should pass the #{attr}" do
Puppet::Util::Log.expects(:new).with { |args| args[attr] == "my val" }
Puppet::Transaction::Event.new(attr => "my val").send_log
@@ -105,4 +111,17 @@ describe Puppet::Transaction::Event do
Puppet::Transaction::Event.new(:resource => "Foo[bar]").send_log
end
end
+
+ describe "When converting to YAML" do
+ it "should include only documented attributes" do
+ resource = Puppet::Type.type(:file).new(:title => "/tmp/foo")
+ event = Puppet::Transaction::Event.new(:source_description => "/my/param", :resource => resource,
+ :file => "/foo.rb", :line => 27, :tags => %w{one two},
+ :desired_value => 7, :historical_value => 'Brazil',
+ :message => "Help I'm trapped in a spec test",
+ :name => :mode_changed, :previous_value => 6, :property => :mode,
+ :status => 'success')
+ event.to_yaml_properties.should == Puppet::Transaction::Event::YAML_ATTRIBUTES.sort
+ end
+ end
end
diff --git a/spec/unit/transaction/report_spec.rb b/spec/unit/transaction/report_spec.rb
index b310713d2..a3bfe1e82 100755
--- a/spec/unit/transaction/report_spec.rb
+++ b/spec/unit/transaction/report_spec.rb
@@ -1,6 +1,6 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
require 'puppet/transaction/report'
@@ -11,22 +11,36 @@ describe Puppet::Transaction::Report do
it "should set its host name to the certname" do
Puppet.settings.expects(:value).with(:certname).returns "myhost"
- Puppet::Transaction::Report.new.host.should == "myhost"
+ Puppet::Transaction::Report.new("apply").host.should == "myhost"
end
it "should return its host name as its name" do
- r = Puppet::Transaction::Report.new
+ r = Puppet::Transaction::Report.new("apply")
r.name.should == r.host
end
it "should create an initialization timestamp" do
Time.expects(:now).returns "mytime"
- Puppet::Transaction::Report.new.time.should == "mytime"
+ Puppet::Transaction::Report.new("apply").time.should == "mytime"
+ end
+
+ it "should take a 'kind' as an argument" do
+ Puppet::Transaction::Report.new("inspect").kind.should == "inspect"
+ end
+
+ it "should take a 'configuration_version' as an argument" do
+ Puppet::Transaction::Report.new("inspect", "some configuration version").configuration_version.should == "some configuration version"
+ end
+
+ it "should be able to set configuration_version" do
+ report = Puppet::Transaction::Report.new("inspect")
+ report.configuration_version = "some version"
+ report.configuration_version.should == "some version"
end
describe "when accepting logs" do
before do
- @report = Puppet::Transaction::Report.new
+ @report = Puppet::Transaction::Report.new("apply")
end
it "should add new logs to the log list" do
@@ -42,7 +56,7 @@ describe Puppet::Transaction::Report do
describe "when accepting resource statuses" do
before do
- @report = Puppet::Transaction::Report.new
+ @report = Puppet::Transaction::Report.new("apply")
end
it "should add each status to its status list" do
@@ -53,20 +67,13 @@ describe Puppet::Transaction::Report do
end
describe "when using the indirector" do
- it "should redirect :find to the indirection" do
- @indirection = stub 'indirection', :name => :report
- Puppet::Transaction::Report.stubs(:indirection).returns(@indirection)
- @indirection.expects(:find)
- Puppet::Transaction::Report.find(:report)
- end
-
it "should redirect :save to the indirection" do
Facter.stubs(:value).returns("eh")
@indirection = stub 'indirection', :name => :report
Puppet::Transaction::Report.stubs(:indirection).returns(@indirection)
- report = Puppet::Transaction::Report.new
+ report = Puppet::Transaction::Report.new("apply")
@indirection.expects(:save)
- report.save
+ Puppet::Transaction::Report.indirection.save(report)
end
it "should default to the 'processor' terminus" do
@@ -74,7 +81,7 @@ describe Puppet::Transaction::Report do
end
it "should delegate its name attribute to its host method" do
- report = Puppet::Transaction::Report.new
+ report = Puppet::Transaction::Report.new("apply")
report.expects(:host).returns "me"
report.name.should == "me"
end
@@ -86,30 +93,37 @@ describe Puppet::Transaction::Report do
describe "when computing exit status" do
it "should produce 2 if changes are present" do
- report = Puppet::Transaction::Report.new
- report.add_metric("changes", {:total => 1})
- report.add_metric("resources", {:failed => 0})
+ report = Puppet::Transaction::Report.new("apply")
+ report.add_metric("changes", {"total" => 1})
+ report.add_metric("resources", {"failed" => 0})
report.exit_status.should == 2
end
it "should produce 4 if failures are present" do
- report = Puppet::Transaction::Report.new
- report.add_metric("changes", {:total => 0})
- report.add_metric("resources", {:failed => 1})
+ report = Puppet::Transaction::Report.new("apply")
+ report.add_metric("changes", {"total" => 0})
+ report.add_metric("resources", {"failed" => 1})
report.exit_status.should == 4
end
it "should produce 6 if both changes and failures are present" do
- report = Puppet::Transaction::Report.new
- report.add_metric("changes", {:total => 1})
- report.add_metric("resources", {:failed => 1})
+ report = Puppet::Transaction::Report.new("apply")
+ report.add_metric("changes", {"total" => 1})
+ report.add_metric("resources", {"failed" => 1})
report.exit_status.should == 6
end
end
- describe "when calculating metrics" do
+ describe "before finalizing the report" do
+ it "should have a status of 'failed'" do
+ report = Puppet::Transaction::Report.new("apply")
+ report.status.should == 'failed'
+ end
+ end
+
+ describe "when finalizing the report" do
before do
- @report = Puppet::Transaction::Report.new
+ @report = Puppet::Transaction::Report.new("apply")
end
def metric(name, value)
@@ -121,7 +135,7 @@ describe Puppet::Transaction::Report do
end
def add_statuses(count, type = :file)
- 3.times do |i|
+ count.times do |i|
status = Puppet::Resource::Status.new(Puppet::Type.type(type).new(:title => "/my/path#{i}"))
yield status if block_given?
@report.add_resource_status status
@@ -131,7 +145,7 @@ describe Puppet::Transaction::Report do
[:time, :resources, :changes, :events].each do |type|
it "should add #{type} metrics" do
- @report.calculate_metrics
+ @report.finalize_report
@report.metrics[type.to_s].should be_instance_of(Puppet::Transaction::Metric)
end
end
@@ -140,25 +154,38 @@ describe Puppet::Transaction::Report do
it "should provide the total number of resources" do
add_statuses(3)
- @report.calculate_metrics
- metric(:resources, :total).should == 3
+ @report.finalize_report
+ metric(:resources, "total").should == 3
end
Puppet::Resource::Status::STATES.each do |state|
it "should provide the number of #{state} resources as determined by the status objects" do
add_statuses(3) { |status| status.send(state.to_s + "=", true) }
- @report.calculate_metrics
- metric(:resources, state).should == 3
+ @report.finalize_report
+ metric(:resources, state.to_s).should == 3
end
end
+
+ it "should mark the report as 'failed' if there are failing resources" do
+ add_statuses(1) { |status| status.failed = true }
+ @report.finalize_report
+ @report.status.should == 'failed'
+ end
end
describe "for changes" do
- it "should provide the number of changes from the resource statuses" do
- add_statuses(3) { |status| status.change_count = 3 }
- @report.calculate_metrics
- metric(:changes, :total).should == 9
+ it "should provide the number of changes from the resource statuses and mark the report as 'changed'" do
+ add_statuses(3) { |status| 3.times { status << Puppet::Transaction::Event.new(:status => 'success') } }
+ @report.finalize_report
+ metric(:changes, "total").should == 9
+ @report.status.should == 'changed'
+ end
+
+ it "should provide a total even if there are no changes, and mark the report as 'unchanged'" do
+ @report.finalize_report
+ metric(:changes, "total").should == 0
+ @report.status.should == 'unchanged'
end
end
@@ -174,7 +201,7 @@ describe Puppet::Transaction::Report do
status.evaluation_time = 3
end
- @report.calculate_metrics
+ @report.finalize_report
metric(:time, "file").should == 3
metric(:time, "exec").should == 6
@@ -183,18 +210,32 @@ describe Puppet::Transaction::Report do
it "should add any provided times from external sources" do
@report.add_times :foobar, 50
- @report.calculate_metrics
+ @report.finalize_report
metric(:time, "foobar").should == 50
end
+
+ it "should have a total time" do
+ add_statuses(3, :file) do |status|
+ status.evaluation_time = 1.25
+ end
+ @report.add_times :config_retrieval, 0.5
+ @report.finalize_report
+ metric(:time, "total").should == 4.25
+ end
end
describe "for events" do
it "should provide the total number of events" do
add_statuses(3) do |status|
- 3.times { |i| status.add_event(Puppet::Transaction::Event.new) }
+ 3.times { |i| status.add_event(Puppet::Transaction::Event.new :status => 'success') }
end
- @report.calculate_metrics
- metric(:events, :total).should == 9
+ @report.finalize_report
+ metric(:events, "total").should == 9
+ end
+
+ it "should provide the total even if there are no events" do
+ @report.finalize_report
+ metric(:events, "total").should == 0
end
Puppet::Transaction::Event::EVENT_STATUSES.each do |status_name|
@@ -207,7 +248,7 @@ describe Puppet::Transaction::Report do
end
end
- @report.calculate_metrics
+ @report.finalize_report
metric(:events, status_name).should == 9
end
end
@@ -222,7 +263,7 @@ describe Puppet::Transaction::Report do
trans = catalog.apply
@report = trans.report
- @report.calculate_metrics
+ @report.finalize_report
end
%w{changes time resources events}.each do |main|
@@ -242,4 +283,12 @@ describe Puppet::Transaction::Report do
end
end
end
+
+ describe "when outputting yaml" do
+ it "should not include @external_times" do
+ report = Puppet::Transaction::Report.new('apply')
+ report.add_times('config_retrieval', 1.0)
+ report.to_yaml_properties.should_not include('@external_times')
+ end
+ end
end
diff --git a/spec/unit/transaction/resource_harness_spec.rb b/spec/unit/transaction/resource_harness_spec.rb
index 255481ae4..168b50287 100755
--- a/spec/unit/transaction/resource_harness_spec.rb
+++ b/spec/unit/transaction/resource_harness_spec.rb
@@ -1,10 +1,12 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
require 'puppet/transaction/resource_harness'
describe Puppet::Transaction::ResourceHarness do
+ include PuppetSpec::Files
+
before do
@transaction = Puppet::Transaction.new(Puppet::Resource::Catalog.new)
@resource = Puppet::Type.type(:file).new :path => "/my/file"
@@ -25,38 +27,6 @@ describe Puppet::Transaction::ResourceHarness do
Puppet::Transaction::ResourceHarness.new(@transaction).relationship_graph.should == "relgraph"
end
- describe "when copying audited parameters" do
- before do
- @resource = Puppet::Type.type(:file).new :path => "/foo/bar", :audit => :mode
- end
-
- it "should do nothing if no parameters are being audited" do
- @resource[:audit] = []
- @harness.expects(:cached).never
- @harness.copy_audited_parameters(@resource, {}).should == []
- end
-
- it "should do nothing if an audited parameter already has a desired value set" do
- @resource[:mode] = "755"
- @harness.expects(:cached).never
- @harness.copy_audited_parameters(@resource, {}).should == []
- end
-
- it "should copy any cached values to the 'should' values" do
- @harness.cache(@resource, :mode, "755")
- @harness.copy_audited_parameters(@resource, {}).should == [:mode]
-
- @resource[:mode].should == 0755
- end
-
- it "should cache and log the current value if no cached values are present" do
- @resource.expects(:debug)
- @harness.copy_audited_parameters(@resource, {:mode => "755"}).should == []
-
- @harness.cached(@resource, :mode).should == "755"
- end
- end
-
describe "when evaluating a resource" do
it "should create and return a resource status instance for the resource" do
@harness.evaluate(@resource).should be_instance_of(Puppet::Resource::Status)
@@ -78,212 +48,322 @@ describe Puppet::Transaction::ResourceHarness do
@harness.evaluate(@resource).should be_failed
end
- it "should use the status and retrieved state to determine which changes need to be made" do
- @harness.expects(:changes_to_perform).with(@status, @resource).returns []
- @harness.evaluate(@resource)
- end
-
- it "should mark the status as out of sync and apply the created changes if there are any" do
- changes = %w{mychanges}
- @harness.expects(:changes_to_perform).returns changes
- @harness.expects(:apply_changes).with(@status, changes)
- @harness.evaluate(@resource).should be_out_of_sync
- end
-
- it "should cache the last-synced time" do
- changes = %w{mychanges}
- @harness.stubs(:changes_to_perform).returns changes
- @harness.stubs(:apply_changes)
- @harness.expects(:cache).with { |resource, name, time| name == :synced and time.is_a?(Time) }
- @harness.evaluate(@resource)
- end
-
- it "should flush the resource when applying changes if appropriate" do
- changes = %w{mychanges}
- @harness.stubs(:changes_to_perform).returns changes
- @harness.stubs(:apply_changes)
- @resource.expects(:flush)
- @harness.evaluate(@resource)
- end
-
- it "should use the status and retrieved state to determine which changes need to be made" do
- @harness.expects(:changes_to_perform).with(@status, @resource).returns []
- @harness.evaluate(@resource)
- end
-
- it "should not attempt to apply changes if none need to be made" do
- @harness.expects(:changes_to_perform).returns []
- @harness.expects(:apply_changes).never
- @harness.evaluate(@resource).should_not be_out_of_sync
- end
-
it "should store the resource's evaluation time in the resource status" do
@harness.evaluate(@resource).evaluation_time.should be_instance_of(Float)
end
-
- it "should set the change count to the total number of changes" do
- changes = %w{a b c d}
- @harness.expects(:changes_to_perform).returns changes
- @harness.expects(:apply_changes).with(@status, changes)
- @harness.evaluate(@resource).change_count.should == 4
- end
end
- describe "when creating changes" do
- before do
- @current_state = Puppet::Resource.new(:file, "/my/file")
- @resource.stubs(:retrieve).returns @current_state
- Puppet.features.stubs(:root?).returns true
- end
-
- it "should retrieve the current values from the resource" do
- @resource.expects(:retrieve).returns @current_state
- @harness.changes_to_perform(@status, @resource)
- end
-
- it "should cache that the resource was checked" do
- @harness.expects(:cache).with { |resource, name, time| name == :checked and time.is_a?(Time) }
- @harness.changes_to_perform(@status, @resource)
- end
-
- it "should create changes with the appropriate property and current value" do
- @resource[:ensure] = :present
- @current_state[:ensure] = :absent
-
- change = stub 'change'
- Puppet::Transaction::Change.expects(:new).with(@resource.parameter(:ensure), :absent).returns change
-
- @harness.changes_to_perform(@status, @resource)[0].should equal(change)
+ def events_to_hash(events)
+ events.map do |event|
+ hash = {}
+ event.instance_variables.each do |varname|
+ hash[varname] = event.instance_variable_get(varname.to_sym)
+ end
+ hash
end
+ end
- it "should not attempt to manage properties that do not have desired values set" do
- mode = @resource.newattr(:mode)
- @current_state[:mode] = :absent
+ def make_stub_provider
+ stubProvider = Class.new(Puppet::Type)
+ stubProvider.instance_eval do
+ initvars
- mode.expects(:insync?).never
+ newparam(:name) do
+ desc "The name var"
+ isnamevar
+ end
- @harness.changes_to_perform(@status, @resource)
- end
+ newproperty(:foo) do
+ desc "A property that can be changed successfully"
+ def sync
+ end
- it "should copy audited parameters" do
- @resource[:audit] = :mode
- @harness.cache(@resource, :mode, "755")
- @harness.changes_to_perform(@status, @resource)
- @resource[:mode].should == 0755
- end
+ def retrieve
+ :absent
+ end
- it "should mark changes created as a result of auditing as auditing changes" do
- @current_state[:mode] = 0644
- @resource[:audit] = :mode
- @harness.cache(@resource, :mode, "755")
- @harness.changes_to_perform(@status, @resource)[0].must be_auditing
- end
+ def insync?(reference_value)
+ false
+ end
+ end
- describe "and the 'ensure' parameter is present but not in sync" do
- it "should return a single change for the 'ensure' parameter" do
- @resource[:ensure] = :present
- @resource[:mode] = "755"
- @current_state[:ensure] = :absent
- @current_state[:mode] = :absent
+ newproperty(:bar) do
+ desc "A property that raises an exception when you try to change it"
+ def sync
+ raise ZeroDivisionError.new('bar')
+ end
- @resource.stubs(:retrieve).returns @current_state
+ def retrieve
+ :absent
+ end
- changes = @harness.changes_to_perform(@status, @resource)
- changes.length.should == 1
- changes[0].property.name.should == :ensure
+ def insync?(reference_value)
+ false
+ end
end
end
+ stubProvider
+ end
- describe "and the 'ensure' parameter should be set to 'absent', and is correctly set to 'absent'" do
- it "should return no changes" do
- @resource[:ensure] = :absent
- @resource[:mode] = "755"
- @current_state[:ensure] = :absent
- @current_state[:mode] = :absent
-
- @harness.changes_to_perform(@status, @resource).should == []
- end
+ describe "when an error occurs" do
+ before :each do
+ stub_provider = make_stub_provider
+ resource = stub_provider.new :name => 'name', :foo => 1, :bar => 2
+ resource.expects(:err).never
+ @status = @harness.evaluate(resource)
end
- describe "and the 'ensure' parameter is 'absent' and there is no 'desired value'" do
- it "should return no changes" do
- @resource.newattr(:ensure)
- @resource[:mode] = "755"
- @current_state[:ensure] = :absent
- @current_state[:mode] = :absent
+ it "should record previous successful events" do
+ @status.events[0].property.should == 'foo'
+ @status.events[0].status.should == 'success'
+ end
- @harness.changes_to_perform(@status, @resource).should == []
- end
+ it "should record a failure event" do
+ @status.events[1].property.should == 'bar'
+ @status.events[1].status.should == 'failure'
end
+ end
- describe "and non-'ensure' parameters are not in sync" do
- it "should return a change for each parameter that is not in sync" do
- @resource[:ensure] = :present
- @resource[:mode] = "755"
- @resource[:owner] = 0
- @current_state[:ensure] = :present
- @current_state[:mode] = 0444
- @current_state[:owner] = 50
-
- mode = stub 'mode_change'
- owner = stub 'owner_change'
- Puppet::Transaction::Change.expects(:new).with(@resource.parameter(:mode), 0444).returns mode
- Puppet::Transaction::Change.expects(:new).with(@resource.parameter(:owner), 50).returns owner
-
- changes = @harness.changes_to_perform(@status, @resource)
- changes.length.should == 2
- changes.should be_include(mode)
- changes.should be_include(owner)
+ describe "when auditing" do
+ it "should not call insync? on parameters that are merely audited" do
+ stub_provider = make_stub_provider
+ resource = stub_provider.new :name => 'name', :audit => ['foo']
+ resource.property(:foo).expects(:insync?).never
+ status = @harness.evaluate(resource)
+ status.events.each do |event|
+ event.status.should != 'failure'
end
end
- describe "and all parameters are in sync" do
- it "should return an empty array" do
- @resource[:ensure] = :present
- @resource[:mode] = "755"
- @current_state[:ensure] = :present
- @current_state[:mode] = 0755
- @harness.changes_to_perform(@status, @resource).should == []
+ it "should be able to audit a file's group" do # see bug #5710
+ test_file = tmpfile('foo')
+ File.open(test_file, 'w').close
+ resource = Puppet::Type.type(:file).new :path => test_file, :audit => ['group'], :backup => false
+ resource.expects(:err).never # make sure no exceptions get swallowed
+ status = @harness.evaluate(resource)
+ status.events.each do |event|
+ event.status.should != 'failure'
end
end
end
describe "when applying changes" do
- before do
- @change1 = stub 'change1', :apply => stub("event", :status => "success"), :auditing? => false
- @change2 = stub 'change2', :apply => stub("event", :status => "success"), :auditing? => false
- @changes = [@change1, @change2]
- end
-
- it "should apply the change" do
- @change1.expects(:apply).returns( stub("event", :status => "success") )
- @change2.expects(:apply).returns( stub("event", :status => "success") )
-
- @harness.apply_changes(@status, @changes)
- end
-
- it "should mark the resource as changed" do
- @harness.apply_changes(@status, @changes)
-
- @status.should be_changed
- end
-
- it "should queue the resulting event" do
- @harness.apply_changes(@status, @changes)
-
- @status.events.should be_include(@change1.apply)
- @status.events.should be_include(@change2.apply)
- end
-
- it "should cache the new value if it is an auditing change" do
- @change1.expects(:auditing?).returns true
- property = stub 'property', :name => "foo", :resource => "myres"
- @change1.stubs(:property).returns property
- @change1.stubs(:is).returns "myval"
-
- @harness.apply_changes(@status, @changes)
-
- @harness.cached("myres", "foo").should == "myval"
+ [false, true].each do |noop_mode|; describe (noop_mode ? "in noop mode" : "in normal mode") do
+ [nil, '750'].each do |machine_state|; describe (machine_state ? "with a file initially present" : "with no file initially present") do
+ [nil, '750', '755'].each do |yaml_mode|
+ [nil, :file, :absent].each do |yaml_ensure|; describe "with mode=#{yaml_mode.inspect} and ensure=#{yaml_ensure.inspect} stored in state.yml" do
+ [false, true].each do |auditing_ensure|
+ [false, true].each do |auditing_mode|
+ auditing = []
+ auditing.push(:mode) if auditing_mode
+ auditing.push(:ensure) if auditing_ensure
+ [nil, :file, :absent].each do |ensure_property| # what we set "ensure" to in the manifest
+ [nil, '750', '755'].each do |mode_property| # what we set "mode" to in the manifest
+ manifest_settings = {}
+ manifest_settings[:audit] = auditing if !auditing.empty?
+ manifest_settings[:ensure] = ensure_property if ensure_property
+ manifest_settings[:mode] = mode_property if mode_property
+ describe "with manifest settings #{manifest_settings.inspect}" do; it "should behave properly" do
+ # Set up preconditions
+ test_file = tmpfile('foo')
+ if machine_state
+ File.open(test_file, 'w', machine_state.to_i(8)).close
+ end
+
+ Puppet[:noop] = noop_mode
+ params = { :path => test_file, :backup => false }
+ params.merge!(manifest_settings)
+ resource = Puppet::Type.type(:file).new params
+
+ @harness.cache(resource, :mode, yaml_mode) if yaml_mode
+ @harness.cache(resource, :ensure, yaml_ensure) if yaml_ensure
+
+ fake_time = Time.utc(2011, 'jan', 3, 12, 24, 0)
+ Time.stubs(:now).returns(fake_time) # So that Puppet::Resource::Status objects will compare properly
+
+ resource.expects(:err).never # make sure no exceptions get swallowed
+ status = @harness.evaluate(resource) # do the thing
+
+ # check that the state of the machine has been properly updated
+ expected_logs = []
+ expected_status_events = []
+ if auditing_mode
+ @harness.cached(resource, :mode).should == (machine_state || :absent)
+ else
+ @harness.cached(resource, :mode).should == yaml_mode
+ end
+ if auditing_ensure
+ @harness.cached(resource, :ensure).should == (machine_state ? :file : :absent)
+ else
+ @harness.cached(resource, :ensure).should == yaml_ensure
+ end
+ if ensure_property == :file
+ file_would_be_there_if_not_noop = true
+ elsif ensure_property == nil
+ file_would_be_there_if_not_noop = machine_state != nil
+ else # ensure_property == :absent
+ file_would_be_there_if_not_noop = false
+ end
+ file_should_be_there = noop_mode ? machine_state != nil : file_would_be_there_if_not_noop
+ File.exists?(test_file).should == file_should_be_there
+ if file_should_be_there
+ if noop_mode
+ expected_file_mode = machine_state
+ else
+ expected_file_mode = mode_property || machine_state
+ end
+ if !expected_file_mode
+ # we didn't specify a mode and the file was created, so mode comes from umode
+ else
+ file_mode = File.stat(test_file).mode & 0777
+ file_mode.should == expected_file_mode.to_i(8)
+ end
+ end
+
+ # Test log output for the "mode" parameter
+ previously_recorded_mode_already_logged = false
+ mode_status_msg = nil
+ if machine_state && file_would_be_there_if_not_noop && mode_property && machine_state != mode_property
+ if noop_mode
+ what_happened = "current_value #{machine_state}, should be #{mode_property} (noop)"
+ expected_status = 'noop'
+ else
+ what_happened = "mode changed '#{machine_state}' to '#{mode_property}'"
+ expected_status = 'success'
+ end
+ if auditing_mode && yaml_mode && yaml_mode != machine_state
+ previously_recorded_mode_already_logged = true
+ mode_status_msg = "#{what_happened} (previously recorded value was #{yaml_mode})"
+ else
+ mode_status_msg = what_happened
+ end
+ expected_logs << "notice: /#{resource}/mode: #{mode_status_msg}"
+ end
+ if @harness.cached(resource, :mode) && @harness.cached(resource, :mode) != yaml_mode
+ if yaml_mode
+ unless previously_recorded_mode_already_logged
+ mode_status_msg = "audit change: previously recorded value #{yaml_mode} has been changed to #{@harness.cached(resource, :mode)}"
+ expected_logs << "notice: /#{resource}/mode: #{mode_status_msg}"
+ expected_status = 'audit'
+ end
+ else
+ expected_logs << "notice: /#{resource}/mode: audit change: newly-recorded value #{@harness.cached(resource, :mode)}"
+ end
+ end
+ if mode_status_msg
+ expected_status_events << Puppet::Transaction::Event.new(
+ :source_description => "/#{resource}/mode", :resource => resource, :file => nil,
+ :line => nil, :tags => %w{file}, :desired_value => mode_property,
+ :historical_value => yaml_mode, :message => mode_status_msg, :name => :mode_changed,
+ :previous_value => machine_state || :absent, :property => :mode, :status => expected_status,
+ :audited => auditing_mode)
+ end
+
+ # Test log output for the "ensure" parameter
+ previously_recorded_ensure_already_logged = false
+ ensure_status_msg = nil
+ if file_would_be_there_if_not_noop != (machine_state != nil)
+ if noop_mode
+ what_happened = "current_value #{machine_state ? 'file' : 'absent'}, should be #{file_would_be_there_if_not_noop ? 'file' : 'absent'} (noop)"
+ expected_status = 'noop'
+ else
+ what_happened = file_would_be_there_if_not_noop ? 'created' : 'removed'
+ expected_status = 'success'
+ end
+ if auditing_ensure && yaml_ensure && yaml_ensure != (machine_state ? :file : :absent)
+ previously_recorded_ensure_already_logged = true
+ ensure_status_msg = "#{what_happened} (previously recorded value was #{yaml_ensure})"
+ else
+ ensure_status_msg = "#{what_happened}"
+ end
+ expected_logs << "notice: /#{resource}/ensure: #{ensure_status_msg}"
+ end
+ if @harness.cached(resource, :ensure) && @harness.cached(resource, :ensure) != yaml_ensure
+ if yaml_ensure
+ unless previously_recorded_ensure_already_logged
+ ensure_status_msg = "audit change: previously recorded value #{yaml_ensure} has been changed to #{@harness.cached(resource, :ensure)}"
+ expected_logs << "notice: /#{resource}/ensure: #{ensure_status_msg}"
+ expected_status = 'audit'
+ end
+ else
+ expected_logs << "notice: /#{resource}/ensure: audit change: newly-recorded value #{@harness.cached(resource, :ensure)}"
+ end
+ end
+ if ensure_status_msg
+ if ensure_property == :file
+ ensure_event_name = :file_created
+ elsif ensure_property == nil
+ ensure_event_name = :file_changed
+ else # ensure_property == :absent
+ ensure_event_name = :file_removed
+ end
+ expected_status_events << Puppet::Transaction::Event.new(
+ :source_description => "/#{resource}/ensure", :resource => resource, :file => nil,
+ :line => nil, :tags => %w{file}, :desired_value => ensure_property,
+ :historical_value => yaml_ensure, :message => ensure_status_msg, :name => ensure_event_name,
+ :previous_value => machine_state ? :file : :absent, :property => :ensure,
+ :status => expected_status, :audited => auditing_ensure)
+ end
+
+ # Actually check the logs.
+ @logs.map {|l| "#{l.level}: #{l.source}: #{l.message}"}.should =~ expected_logs
+
+ # All the log messages should show up as events except the "newly-recorded" ones.
+ expected_event_logs = @logs.reject {|l| l.message =~ /newly-recorded/ }
+ status.events.map {|e| e.message}.should =~ expected_event_logs.map {|l| l.message }
+ events_to_hash(status.events).should =~ events_to_hash(expected_status_events)
+
+ # Check change count - this is the number of changes that actually occurred.
+ expected_change_count = 0
+ if (machine_state != nil) != file_should_be_there
+ expected_change_count = 1
+ elsif machine_state != nil
+ if expected_file_mode != machine_state
+ expected_change_count = 1
+ end
+ end
+ status.change_count.should == expected_change_count
+
+ # Check out of sync count - this is the number
+ # of changes that would have occurred in
+ # non-noop mode.
+ expected_out_of_sync_count = 0
+ if (machine_state != nil) != file_would_be_there_if_not_noop
+ expected_out_of_sync_count = 1
+ elsif machine_state != nil
+ if mode_property != nil && mode_property != machine_state
+ expected_out_of_sync_count = 1
+ end
+ end
+ if !noop_mode
+ expected_out_of_sync_count.should == expected_change_count
+ end
+ status.out_of_sync_count.should == expected_out_of_sync_count
+
+ # Check legacy summary fields
+ status.changed.should == (expected_change_count != 0)
+ status.out_of_sync.should == (expected_out_of_sync_count != 0)
+
+ # Check the :synced field on state.yml
+ synced_should_be_set = !noop_mode && status.changed
+ (@harness.cached(resource, :synced) != nil).should == synced_should_be_set
+ end; end
+ end
+ end
+ end
+ end
+ end; end
+ end
+ end; end
+ end; end
+
+ it "should not apply changes if allow_changes?() returns false" do
+ test_file = tmpfile('foo')
+ resource = Puppet::Type.type(:file).new :path => test_file, :backup => false, :ensure => :file
+ resource.expects(:err).never # make sure no exceptions get swallowed
+ @harness.expects(:allow_changes?).with(resource).returns false
+ status = @harness.evaluate(resource)
+ File.exists?(test_file).should == false
end
end
diff --git a/spec/unit/transaction_spec.rb b/spec/unit/transaction_spec.rb
index 2df4404be..3677bfd87 100755
--- a/spec/unit/transaction_spec.rb
+++ b/spec/unit/transaction_spec.rb
@@ -1,6 +1,6 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
require 'puppet/transaction'
@@ -58,11 +58,6 @@ describe Puppet::Transaction do
@transaction.report.resource_statuses[resource.to_s].should equal(status)
end
- it "should calculate metrics on and report the report when asked to generate a report" do
- @transaction.report.expects(:calculate_metrics)
- @transaction.generate_report.should equal(@transaction.report)
- end
-
it "should consider a resource to be failed if a status instance exists for that resource and indicates it is failed" do
resource = Puppet::Type.type(:notify).new :name => "yayness"
status = Puppet::Resource::Status.new(resource)
@@ -94,7 +89,7 @@ describe Puppet::Transaction do
end
it "should be possible to replace the report object" do
- report = Puppet::Transaction::Report.new
+ report = Puppet::Transaction::Report.new("apply")
@transaction.report = report
@transaction.report.should == report
diff --git a/spec/unit/type/augeas_spec.rb b/spec/unit/type/augeas_spec.rb
index e426fbeed..dece395e1 100644
--- a/spec/unit/type/augeas_spec.rb
+++ b/spec/unit/type/augeas_spec.rb
@@ -1,13 +1,11 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
augeas = Puppet::Type.type(:augeas)
describe augeas do
- describe "when augeas is present" do
- confine "Augeas is unavailable" => Puppet.features.augeas?
-
+ describe "when augeas is present", :if => Puppet.features.augeas? do
it "should have a default provider inheriting from Puppet::Provider" do
augeas.defaultprovider.ancestors.should be_include(Puppet::Provider)
end
diff --git a/spec/unit/type/component_spec.rb b/spec/unit/type/component_spec.rb
index f7403e5e3..60abfafbf 100755
--- a/spec/unit/type/component_spec.rb
+++ b/spec/unit/type/component_spec.rb
@@ -1,6 +1,6 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
component = Puppet::Type.type(:component)
diff --git a/spec/unit/type/computer_spec.rb b/spec/unit/type/computer_spec.rb
index 1f1c55b2f..3177884f7 100755
--- a/spec/unit/type/computer_spec.rb
+++ b/spec/unit/type/computer_spec.rb
@@ -1,6 +1,6 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
computer = Puppet::Type.type(:computer)
diff --git a/spec/unit/type/exec_spec.rb b/spec/unit/type/exec_spec.rb
index e04cfc065..e980ec542 100755
--- a/spec/unit/type/exec_spec.rb
+++ b/spec/unit/type/exec_spec.rb
@@ -1,6 +1,6 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
describe Puppet::Type.type(:exec) do
diff --git a/spec/unit/type/file/content_spec.rb b/spec/unit/type/file/content_spec.rb
index cde643fc8..9178c94bf 100755
--- a/spec/unit/type/file/content_spec.rb
+++ b/spec/unit/type/file/content_spec.rb
@@ -141,17 +141,20 @@ describe content do
it "should return true if the resource shouldn't be a regular file" do
@resource.expects(:should_be_file?).returns false
- @content.must be_insync("whatever")
+ @content.should = "foo"
+ @content.must be_safe_insync("whatever")
end
it "should return false if the current content is :absent" do
- @content.should_not be_insync(:absent)
+ @content.should = "foo"
+ @content.should_not be_safe_insync(:absent)
end
it "should return false if the file should be a file but is not present" do
@resource.expects(:should_be_file?).returns true
+ @content.should = "foo"
- @content.should_not be_insync(:absent)
+ @content.should_not be_safe_insync(:absent)
end
describe "and the file exists" do
@@ -161,12 +164,12 @@ describe content do
it "should return false if the current contents are different from the desired content" do
@content.should = "some content"
- @content.should_not be_insync("other content")
+ @content.should_not be_safe_insync("other content")
end
it "should return true if the sum for the current contents is the same as the sum for the desired content" do
@content.should = "some content"
- @content.must be_insync("{md5}" + Digest::MD5.hexdigest("some content"))
+ @content.must be_safe_insync("{md5}" + Digest::MD5.hexdigest("some content"))
end
describe "and Puppet[:show_diff] is set" do
@@ -179,14 +182,14 @@ describe content do
@content.expects(:diff).returns("my diff").once
@content.expects(:print).with("my diff").once
- @content.insync?("other content")
+ @content.safe_insync?("other content")
end
it "should not display a diff if the sum for the current contents is the same as the sum for the desired content" do
@content.should = "some content"
@content.expects(:diff).never
- @content.insync?("{md5}" + Digest::MD5.hexdigest("some content"))
+ @content.safe_insync?("{md5}" + Digest::MD5.hexdigest("some content"))
end
end
end
@@ -199,17 +202,18 @@ describe content do
it "should be insync if the file exists and the content is different" do
@resource.stubs(:stat).returns mock('stat')
- @content.must be_insync("whatever")
+ @content.must be_safe_insync("whatever")
end
it "should be insync if the file exists and the content is right" do
@resource.stubs(:stat).returns mock('stat')
- @content.must be_insync("something")
+ @content.must be_safe_insync("something")
end
it "should not be insync if the file does not exist" do
- @content.should_not be_insync(:absent)
+ @content.should = "foo"
+ @content.should_not be_safe_insync(:absent)
end
end
end
@@ -457,5 +461,54 @@ describe content do
describe "from a filebucket" do
end
+
+ # These are testing the implementation rather than the desired behaviour; while that bites, there are a whole
+ # pile of other methods in the File type that depend on intimate details of this implementation and vice-versa.
+ # If these blow up, you are gonna have to review the callers to make sure they don't explode! --daniel 2011-02-01
+ describe "each_chunk_from should work" do
+ before do
+ @content = content.new(:resource => @resource)
+ end
+
+ it "when content is a string" do
+ @content.each_chunk_from('i_am_a_string') { |chunk| chunk.should == 'i_am_a_string' }
+ end
+
+ it "when no content, source, but ensure present" do
+ @resource[:ensure] = :present
+ @content.each_chunk_from(nil) { |chunk| chunk.should == '' }
+ end
+
+ it "when no content, source, but ensure file" do
+ @resource[:ensure] = :file
+ @content.each_chunk_from(nil) { |chunk| chunk.should == '' }
+ end
+
+ it "when no content or source" do
+ @content.expects(:read_file_from_filebucket).once.returns('im_a_filebucket')
+ @content.each_chunk_from(nil) { |chunk| chunk.should == 'im_a_filebucket' }
+ end
+
+ it "when running as puppet apply" do
+ @content.class.expects(:standalone?).returns true
+ source_or_content = stubs('source_or_content')
+ source_or_content.expects(:content).once.returns :whoo
+ @content.each_chunk_from(source_or_content) { |chunk| chunk.should == :whoo }
+ end
+
+ it "when running from source with a local file" do
+ source_or_content = stubs('source_or_content')
+ source_or_content.expects(:local?).returns true
+ @content.expects(:chunk_file_from_disk).with(source_or_content).once.yields 'woot'
+ @content.each_chunk_from(source_or_content) { |chunk| chunk.should == 'woot' }
+ end
+
+ it "when running from source with a remote file" do
+ source_or_content = stubs('source_or_content')
+ source_or_content.expects(:local?).returns false
+ @content.expects(:chunk_file_from_source).with(source_or_content).once.yields 'woot'
+ @content.each_chunk_from(source_or_content) { |chunk| chunk.should == 'woot' }
+ end
+ end
end
end
diff --git a/spec/unit/type/file/ctime.rb b/spec/unit/type/file/ctime.rb
new file mode 100644
index 000000000..6145cbfdc
--- /dev/null
+++ b/spec/unit/type/file/ctime.rb
@@ -0,0 +1,35 @@
+#!/usr/bin/env ruby
+
+Dir.chdir(File.dirname(__FILE__)) { (s = lambda { |f| File.exist?(f) ? require(f) : Dir.chdir("..") { s.call(f) } }).call("spec/spec_helper.rb") }
+
+describe Puppet::Type.type(:file).attrclass(:ctime) do
+ require 'puppet_spec/files'
+ include PuppetSpec::Files
+
+ before do
+ @filename = tmpfile('ctime')
+ @resource = Puppet::Type.type(:file).new({:name => @filename})
+ end
+
+ it "should be able to audit the file's ctime" do
+ File.open(@filename, "w"){ }
+
+ @resource[:audit] = [:ctime]
+
+ # this .to_resource audit behavior is magical :-(
+ @resource.to_resource[:ctime].should == File.stat(@filename).ctime
+ end
+
+ it "should return absent if auditing an absent file" do
+ @resource[:audit] = [:ctime]
+
+ @resource.to_resource[:ctime].should == :absent
+ end
+
+ it "should prevent the user from trying to set the ctime" do
+ lambda {
+ @resource[:ctime] = Time.now.to_s
+ }.should raise_error(Puppet::Error, /ctime is read-only/)
+ end
+
+end
diff --git a/spec/unit/type/file/ensure_spec.rb b/spec/unit/type/file/ensure_spec.rb
index ec53ed85a..dbb3a1053 100755
--- a/spec/unit/type/file/ensure_spec.rb
+++ b/spec/unit/type/file/ensure_spec.rb
@@ -41,44 +41,45 @@ describe property do
end
it "should always be in sync if replace is 'false' unless the file is missing" do
+ @ensure.should = :file
@resource.expects(:replace?).returns false
- @ensure.insync?(:link).should be_true
+ @ensure.safe_insync?(:link).should be_true
end
it "should be in sync if :ensure is set to :absent and the file does not exist" do
@ensure.should = :absent
- @ensure.must be_insync(:absent)
+ @ensure.must be_safe_insync(:absent)
end
it "should not be in sync if :ensure is set to :absent and the file exists" do
@ensure.should = :absent
- @ensure.should_not be_insync(:file)
+ @ensure.should_not be_safe_insync(:file)
end
it "should be in sync if a normal file exists and :ensure is set to :present" do
@ensure.should = :present
- @ensure.must be_insync(:file)
+ @ensure.must be_safe_insync(:file)
end
it "should be in sync if a directory exists and :ensure is set to :present" do
@ensure.should = :present
- @ensure.must be_insync(:directory)
+ @ensure.must be_safe_insync(:directory)
end
it "should be in sync if a symlink exists and :ensure is set to :present" do
@ensure.should = :present
- @ensure.must be_insync(:link)
+ @ensure.must be_safe_insync(:link)
end
it "should not be in sync if :ensure is set to :file and a directory exists" do
@ensure.should = :file
- @ensure.should_not be_insync(:directory)
+ @ensure.should_not be_safe_insync(:directory)
end
end
end
diff --git a/spec/unit/type/file/group_spec.rb b/spec/unit/type/file/group_spec.rb
index 2283b57fa..956cd57e7 100755
--- a/spec/unit/type/file/group_spec.rb
+++ b/spec/unit/type/file/group_spec.rb
@@ -56,19 +56,19 @@ describe property do
describe "when determining if the file is in sync" do
it "should directly compare the group values if the desired group is an integer" do
@group.should = [10]
- @group.must be_insync(10)
+ @group.must be_safe_insync(10)
end
it "should treat numeric strings as integers" do
@group.should = ["10"]
- @group.must be_insync(10)
+ @group.must be_safe_insync(10)
end
it "should convert the group name to an integer if the desired group is a string" do
@group.expects(:gid).with("foo").returns 10
@group.should = %w{foo}
- @group.must be_insync(10)
+ @group.must be_safe_insync(10)
end
it "should not validate that groups exist when a group is specified as an integer" do
@@ -80,12 +80,12 @@ describe property do
@group.expects(:gid).with("foo").returns nil
@group.should = %w{foo}
- lambda { @group.insync?(10) }.should raise_error(Puppet::Error)
+ lambda { @group.safe_insync?(10) }.should raise_error(Puppet::Error)
end
it "should return false if the groups are not equal" do
@group.should = [10]
- @group.should_not be_insync(20)
+ @group.should_not be_safe_insync(20)
end
end
diff --git a/spec/unit/type/file/mtime.rb b/spec/unit/type/file/mtime.rb
new file mode 100644
index 000000000..043156ceb
--- /dev/null
+++ b/spec/unit/type/file/mtime.rb
@@ -0,0 +1,35 @@
+#!/usr/bin/env ruby
+
+Dir.chdir(File.dirname(__FILE__)) { (s = lambda { |f| File.exist?(f) ? require(f) : Dir.chdir("..") { s.call(f) } }).call("spec/spec_helper.rb") }
+
+describe Puppet::Type.type(:file).attrclass(:mtime) do
+ require 'puppet_spec/files'
+ include PuppetSpec::Files
+
+ before do
+ @filename = tmpfile('mtime')
+ @resource = Puppet::Type.type(:file).new({:name => @filename})
+ end
+
+ it "should be able to audit the file's mtime" do
+ File.open(@filename, "w"){ }
+
+ @resource[:audit] = [:mtime]
+
+ # this .to_resource audit behavior is magical :-(
+ @resource.to_resource[:mtime].should == File.stat(@filename).mtime
+ end
+
+ it "should return absent if auditing an absent file" do
+ @resource[:audit] = [:mtime]
+
+ @resource.to_resource[:mtime].should == :absent
+ end
+
+ it "should prevent the user from trying to set the mtime" do
+ lambda {
+ @resource[:mtime] = Time.now.to_s
+ }.should raise_error(Puppet::Error, /mtime is read-only/)
+ end
+
+end
diff --git a/spec/unit/type/file/owner_spec.rb b/spec/unit/type/file/owner_spec.rb
index 8e136a187..bcb8e07d6 100755
--- a/spec/unit/type/file/owner_spec.rb
+++ b/spec/unit/type/file/owner_spec.rb
@@ -68,7 +68,7 @@ describe property do
@provider.expects(:warnonce)
@owner.should = [10]
- @owner.must be_insync(20)
+ @owner.must be_safe_insync(20)
end
end
@@ -77,24 +77,24 @@ describe property do
end
it "should be in sync if 'should' is not provided" do
- @owner.must be_insync(10)
+ @owner.must be_safe_insync(10)
end
it "should directly compare the owner values if the desired owner is an integer" do
@owner.should = [10]
- @owner.must be_insync(10)
+ @owner.must be_safe_insync(10)
end
it "should treat numeric strings as integers" do
@owner.should = ["10"]
- @owner.must be_insync(10)
+ @owner.must be_safe_insync(10)
end
it "should convert the owner name to an integer if the desired owner is a string" do
@provider.expects(:uid).with("foo").returns 10
@owner.should = %w{foo}
- @owner.must be_insync(10)
+ @owner.must be_safe_insync(10)
end
it "should not validate that users exist when a user is specified as an integer" do
@@ -106,12 +106,12 @@ describe property do
@provider.expects(:uid).with("foo").returns nil
@owner.should = %w{foo}
- lambda { @owner.insync?(10) }.should raise_error(Puppet::Error)
+ lambda { @owner.safe_insync?(10) }.should raise_error(Puppet::Error)
end
it "should return false if the owners are not equal" do
@owner.should = [10]
- @owner.should_not be_insync(20)
+ @owner.should_not be_safe_insync(20)
end
end
diff --git a/spec/unit/type/file/selinux_spec.rb b/spec/unit/type/file/selinux_spec.rb
index 1ca59e9e7..043471dec 100644
--- a/spec/unit/type/file/selinux_spec.rb
+++ b/spec/unit/type/file/selinux_spec.rb
@@ -73,10 +73,10 @@ Dir.chdir(File.dirname(__FILE__)) { (s = lambda { |f| File.exist?(f) ? require(f
@sel.sync
end
- it "should do nothing for insync? if no SELinux support" do
+ it "should do nothing for safe_insync? if no SELinux support" do
@sel.should = %{newcontext}
@sel.expects(:selinux_support?).returns false
- @sel.insync?("oldcontext").should == true
+ @sel.safe_insync?("oldcontext").should == true
end
end
end
diff --git a/spec/unit/type/file/source_spec.rb b/spec/unit/type/file/source_spec.rb
index a45a1f74e..c07963a50 100755
--- a/spec/unit/type/file/source_spec.rb
+++ b/spec/unit/type/file/source_spec.rb
@@ -6,7 +6,7 @@ source = Puppet::Type.type(:file).attrclass(:source)
describe Puppet::Type.type(:file).attrclass(:source) do
before do
# Wow that's a messy interface to the resource.
- @resource = stub 'resource', :[]= => nil, :property => nil, :catalog => stub("catalog", :dependent_data_expired? => false)
+ @resource = stub 'resource', :[]= => nil, :property => nil, :catalog => stub("catalog", :dependent_data_expired? => false), :line => 0, :file => ''
end
it "should be a subclass of Parameter" do
@@ -54,22 +54,22 @@ describe Puppet::Type.type(:file).attrclass(:source) do
it "should collect its metadata using the Metadata class if it is not already set" do
@source = source.new(:resource => @resource, :value => "/foo/bar")
- Puppet::FileServing::Metadata.expects(:find).with("/foo/bar").returns @metadata
+ Puppet::FileServing::Metadata.indirection.expects(:find).with("/foo/bar").returns @metadata
@source.metadata
end
it "should use the metadata from the first found source" do
metadata = stub 'metadata', :source= => nil
@source = source.new(:resource => @resource, :value => ["/foo/bar", "/fee/booz"])
- Puppet::FileServing::Metadata.expects(:find).with("/foo/bar").returns nil
- Puppet::FileServing::Metadata.expects(:find).with("/fee/booz").returns metadata
+ Puppet::FileServing::Metadata.indirection.expects(:find).with("/foo/bar").returns nil
+ Puppet::FileServing::Metadata.indirection.expects(:find).with("/fee/booz").returns metadata
@source.metadata.should equal(metadata)
end
it "should store the found source as the metadata's source" do
metadata = mock 'metadata'
@source = source.new(:resource => @resource, :value => "/foo/bar")
- Puppet::FileServing::Metadata.expects(:find).with("/foo/bar").returns metadata
+ Puppet::FileServing::Metadata.indirection.expects(:find).with("/foo/bar").returns metadata
metadata.expects(:source=).with("/foo/bar")
@source.metadata
@@ -77,7 +77,7 @@ describe Puppet::Type.type(:file).attrclass(:source) do
it "should fail intelligently if an exception is encountered while querying for metadata" do
@source = source.new(:resource => @resource, :value => "/foo/bar")
- Puppet::FileServing::Metadata.expects(:find).with("/foo/bar").raises RuntimeError
+ Puppet::FileServing::Metadata.indirection.expects(:find).with("/foo/bar").raises RuntimeError
@source.expects(:fail).raises ArgumentError
lambda { @source.metadata }.should raise_error(ArgumentError)
@@ -85,7 +85,7 @@ describe Puppet::Type.type(:file).attrclass(:source) do
it "should fail if no specified sources can be found" do
@source = source.new(:resource => @resource, :value => "/foo/bar")
- Puppet::FileServing::Metadata.expects(:find).with("/foo/bar").returns nil
+ Puppet::FileServing::Metadata.indirection.expects(:find).with("/foo/bar").returns nil
@source.expects(:fail).raises RuntimeError
@@ -96,7 +96,7 @@ describe Puppet::Type.type(:file).attrclass(:source) do
expirer = stub 'expired', :dependent_data_expired? => true
metadata = stub 'metadata', :source= => nil
- Puppet::FileServing::Metadata.expects(:find).with("/fee/booz").returns metadata
+ Puppet::FileServing::Metadata.indirection.expects(:find).with("/fee/booz").returns metadata
@source = source.new(:resource => @resource, :value => ["/fee/booz"])
@source.metadata = "foo"
@@ -154,7 +154,7 @@ describe Puppet::Type.type(:file).attrclass(:source) do
@resource[:owner].must == 100
@resource[:group].must == 200
- @resource[:mode].must == 123
+ @resource[:mode].must == "173"
# Metadata calls it checksum, we call it content.
@resource[:content].must == @metadata.checksum
@@ -170,7 +170,7 @@ describe Puppet::Type.type(:file).attrclass(:source) do
@resource[:owner].must == 1
@resource[:group].must == 2
- @resource[:mode].must == 3
+ @resource[:mode].must == "3"
@resource[:content].should_not == @metadata.checksum
end
diff --git a/spec/unit/type/file/type.rb b/spec/unit/type/file/type.rb
new file mode 100644
index 000000000..e46f0e0b0
--- /dev/null
+++ b/spec/unit/type/file/type.rb
@@ -0,0 +1,20 @@
+#!/usr/bin/env ruby
+
+Dir.chdir(File.dirname(__FILE__)) { (s = lambda { |f| File.exist?(f) ? require(f) : Dir.chdir("..") { s.call(f) } }).call("spec/spec_helper.rb") }
+
+describe Puppet::Type.type(:file).attrclass(:type) do
+ require 'puppet_spec/files'
+ include PuppetSpec::Files
+
+ before do
+ @filename = tmpfile('type')
+ @resource = Puppet::Type.type(:file).new({:name => @filename})
+ end
+
+ it "should prevent the user from trying to set the type" do
+ lambda {
+ @resource[:type] = "fifo"
+ }.should raise_error(Puppet::Error, /type is read-only/)
+ end
+
+end
diff --git a/spec/unit/type/file_spec.rb b/spec/unit/type/file_spec.rb
index 7d93dfd64..539782fd4 100755
--- a/spec/unit/type/file_spec.rb
+++ b/spec/unit/type/file_spec.rb
@@ -1,6 +1,6 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
describe Puppet::Type.type(:file) do
before do
@@ -71,7 +71,7 @@ describe Puppet::Type.type(:file) do
before { @file.stubs(:validate_checksum?).returns(true) }
it "should fail if the checksum parameter and content checksums do not match" do
- checksum = stub('checksum_parameter', :sum => 'checksum_b')
+ checksum = stub('checksum_parameter', :sum => 'checksum_b', :sum_file => 'checksum_b')
@file.stubs(:parameter).with(:checksum).returns(checksum)
property = stub('content_property', :actual_content => "something", :length => "something".length, :write => 'checksum_a')
@@ -194,6 +194,23 @@ describe Puppet::Type.type(:file) do
file = Puppet::Type::File.new(:path => "/")
file[:path].should == "/"
end
+
+ it "should accept a double-slash at the start of the path" do
+ expect {
+ file = Puppet::Type::File.new(:path => "//tmp/xxx")
+ # REVISIT: This should be wrong, later. See the next test.
+ # --daniel 2011-01-31
+ file[:path].should == '/tmp/xxx'
+ }.should_not raise_error
+ end
+
+ # REVISIT: This is pending, because I don't want to try and audit the
+ # entire codebase to make sure we get this right. POSIX treats two (and
+ # exactly two) '/' characters at the start of the path specially.
+ #
+ # See sections 3.2 and 4.11, which allow DomainOS to be all special like
+ # and still have the POSIX branding and all. --daniel 2011-01-31
+ it "should preserve the double-slash at the start of the path"
end
describe "on Microsoft Windows systems" do
@@ -208,8 +225,7 @@ describe Puppet::Type.type(:file) do
end
end
- describe "when using Microsoft Windows filenames" do
- confine "Only works on Microsoft Windows" => Puppet.features.microsoft_windows?
+ describe "when using Microsoft Windows filenames", :if => Puppet.features.microsoft_windows? do
describe "on Microsoft Windows systems" do
before do
Puppet.features.stubs(:posix?).returns(false)
@@ -271,8 +287,7 @@ describe Puppet::Type.type(:file) do
end
describe "when using UNC filenames" do
- describe "on Microsoft Windows systems" do
- confine "Only works on Microsoft Windows" => Puppet.features.microsoft_windows?
+ describe "on Microsoft Windows systems", :if => Puppet.features.microsoft_windows? do
before do
Puppet.features.stubs(:posix?).returns(false)
Puppet.features.stubs(:microsoft_windows?).returns(true)
@@ -381,9 +396,9 @@ describe Puppet::Type.type(:file) do
@resource = Puppet::Type.type(:file).new(
-
+
:path => @link,
-
+
:mode => "755"
)
@catalog.add_resource @resource
@@ -510,47 +525,47 @@ describe Puppet::Type.type(:file) do
describe "when executing a recursive search" do
it "should use Metadata to do its recursion" do
- Puppet::FileServing::Metadata.expects(:search)
+ Puppet::FileServing::Metadata.indirection.expects(:search)
@file.perform_recursion(@file[:path])
end
it "should use the provided path as the key to the search" do
- Puppet::FileServing::Metadata.expects(:search).with { |key, options| key == "/foo" }
+ Puppet::FileServing::Metadata.indirection.expects(:search).with { |key, options| key == "/foo" }
@file.perform_recursion("/foo")
end
it "should return the results of the metadata search" do
- Puppet::FileServing::Metadata.expects(:search).returns "foobar"
+ Puppet::FileServing::Metadata.indirection.expects(:search).returns "foobar"
@file.perform_recursion(@file[:path]).should == "foobar"
end
it "should pass its recursion value to the search" do
@file[:recurse] = true
- Puppet::FileServing::Metadata.expects(:search).with { |key, options| options[:recurse] == true }
+ Puppet::FileServing::Metadata.indirection.expects(:search).with { |key, options| options[:recurse] == true }
@file.perform_recursion(@file[:path])
end
it "should pass true if recursion is remote" do
@file[:recurse] = :remote
- Puppet::FileServing::Metadata.expects(:search).with { |key, options| options[:recurse] == true }
+ Puppet::FileServing::Metadata.indirection.expects(:search).with { |key, options| options[:recurse] == true }
@file.perform_recursion(@file[:path])
end
it "should pass its recursion limit value to the search" do
@file[:recurselimit] = 10
- Puppet::FileServing::Metadata.expects(:search).with { |key, options| options[:recurselimit] == 10 }
+ Puppet::FileServing::Metadata.indirection.expects(:search).with { |key, options| options[:recurselimit] == 10 }
@file.perform_recursion(@file[:path])
end
it "should configure the search to ignore or manage links" do
@file[:links] = :manage
- Puppet::FileServing::Metadata.expects(:search).with { |key, options| options[:links] == :manage }
+ Puppet::FileServing::Metadata.indirection.expects(:search).with { |key, options| options[:links] == :manage }
@file.perform_recursion(@file[:path])
end
it "should pass its 'ignore' setting to the search if it has one" do
@file[:ignore] = %w{.svn CVS}
- Puppet::FileServing::Metadata.expects(:search).with { |key, options| options[:ignore] == %w{.svn CVS} }
+ Puppet::FileServing::Metadata.indirection.expects(:search).with { |key, options| options[:ignore] == %w{.svn CVS} }
@file.perform_recursion(@file[:path])
end
end
@@ -597,7 +612,7 @@ describe Puppet::Type.type(:file) do
it "should set checksum_type to none if this file checksum is none" do
@file[:checksum] = :none
- Puppet::FileServing::Metadata.expects(:search).with { |path,params| params[:checksum_type] == :none }.returns [@metadata]
+ Puppet::FileServing::Metadata.indirection.expects(:search).with { |path,params| params[:checksum_type] == :none }.returns [@metadata]
@file.expects(:newchild).with("my/file").returns "fiebar"
@file.recurse_local
end
@@ -808,6 +823,73 @@ describe Puppet::Type.type(:file) do
end
end
+ describe "when specifying both source, and content properties" do
+ before do
+ @file[:source] = '/one'
+ @file[:content] = 'file contents'
+ end
+
+ it "should raise an exception" do
+ lambda {@file.validate }.should raise_error(/You cannot specify more than one of/)
+ end
+ end
+
+ describe "when using source" do
+ before do
+ @file[:source] = '/one'
+ end
+ Puppet::Type::File::ParameterChecksum.value_collection.values.reject {|v| v == :none}.each do |checksum_type|
+ describe "with checksum '#{checksum_type}'" do
+ before do
+ @file[:checksum] = checksum_type
+ end
+
+ it 'should validate' do
+
+ lambda { @file.validate }.should_not raise_error
+ end
+ end
+ end
+
+ describe "with checksum 'none'" do
+ before do
+ @file[:checksum] = :none
+ end
+
+ it 'should raise an exception when validating' do
+ lambda { @file.validate }.should raise_error(/You cannot specify source when using checksum 'none'/)
+ end
+ end
+ end
+
+ describe "when using content" do
+ before do
+ @file[:content] = 'file contents'
+ end
+
+ (Puppet::Type::File::ParameterChecksum.value_collection.values - SOURCE_ONLY_CHECKSUMS).each do |checksum_type|
+ describe "with checksum '#{checksum_type}'" do
+ before do
+ @file[:checksum] = checksum_type
+ end
+
+ it 'should validate' do
+ lambda { @file.validate }.should_not raise_error
+ end
+ end
+ end
+
+ SOURCE_ONLY_CHECKSUMS.each do |checksum_type|
+ describe "with checksum '#{checksum_type}'" do
+ it 'should raise an exception when validating' do
+ @file[:checksum] = checksum_type
+
+ lambda { @file.validate }.should raise_error(/You cannot specify content when using checksum '#{checksum_type}'/)
+ end
+ end
+ end
+ end
+
describe "when returning resources with :eval_generate" do
before do
@graph = stub 'graph', :add_edge => nil
@@ -1058,7 +1140,7 @@ describe Puppet::Type.type(:file) do
before do
@type_class = Puppet::Type.type(:file)
end
-
+
it "should have a regexp that captures the entire string, except for a terminating slash" do
patterns = @type_class.title_patterns
string = "abc/\n\tdef/"
@@ -1067,4 +1149,45 @@ describe Puppet::Type.type(:file) do
end
end
+ describe "when auditing" do
+ it "should not fail if creating a new file if group is not set" do
+ File.exists?(@path).should == false
+ file = Puppet::Type::File.new(:name => @path, :audit => "all", :content => "content")
+ catalog = Puppet::Resource::Catalog.new
+ catalog.add_resource(file)
+
+ Puppet::Util::Storage.stubs(:store) # to prevent the catalog from trying to write state.yaml
+ transaction = catalog.apply
+
+ transaction.report.resource_statuses["File[#{@path}]"].failed.should == false
+ File.exists?(@path).should == true
+ end
+
+ it "should not log errors if creating a new file with ensure present and no content" do
+ File.exists?(@path).should == false
+ file = Puppet::Type::File.new(:name => @path, :audit => "content", :ensure => "present")
+ catalog = Puppet::Resource::Catalog.new
+ catalog.add_resource(file)
+
+ Puppet::Util::Storage.stubs(:store) # to prevent the catalog from trying to write state.yaml
+
+ catalog.apply
+ @logs.reject {|l| l.level == :notice }.should be_empty
+ end
+ end
+
+ describe "when specifying both source and checksum" do
+ it 'should use the specified checksum when source is first' do
+ @file[:source] = '/foo'
+ @file[:checksum] = :md5lite
+
+ @file[:checksum].should be :md5lite
+ end
+ it 'should use the specified checksum when source is last' do
+ @file[:checksum] = :md5lite
+ @file[:source] = '/foo'
+
+ @file[:checksum].should be :md5lite
+ end
+ end
end
diff --git a/spec/unit/type/filebucket_spec.rb b/spec/unit/type/filebucket_spec.rb
index 0b8ea50f8..7fcbacc4f 100644
--- a/spec/unit/type/filebucket_spec.rb
+++ b/spec/unit/type/filebucket_spec.rb
@@ -1,6 +1,6 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
describe Puppet::Type.type(:filebucket) do
describe "when validating attributes" do
diff --git a/spec/unit/type/group_spec.rb b/spec/unit/type/group_spec.rb
index b41ce71a0..43fdfcd4d 100755
--- a/spec/unit/type/group_spec.rb
+++ b/spec/unit/type/group_spec.rb
@@ -1,6 +1,6 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
describe Puppet::Type.type(:group) do
before do
diff --git a/spec/unit/type/host_spec.rb b/spec/unit/type/host_spec.rb
index 12ae2af08..60ce73c6d 100755
--- a/spec/unit/type/host_spec.rb
+++ b/spec/unit/type/host_spec.rb
@@ -1,13 +1,15 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
-ssh_authorized_key = Puppet::Type.type(:ssh_authorized_key)
+host = Puppet::Type.type(:host)
-describe Puppet::Type.type(:host) do
+describe host do
before do
- @class = Puppet::Type.type(:host)
+ @class = host
@catalog = Puppet::Resource::Catalog.new
+ @provider = stub 'provider'
+ @resource = stub 'resource', :resource => nil, :provider => @provider
end
it "should have :name be its namevar" do
@@ -26,6 +28,11 @@ describe Puppet::Type.type(:host) do
@class.attrtype(property).should == :property
end
end
+
+ it "should have a list host_aliases" do
+ @class.attrclass(:host_aliases).ancestors.should be_include(Puppet::Property::OrderedList)
+ end
+
end
describe "when validating values" do
@@ -80,4 +87,44 @@ describe Puppet::Type.type(:host) do
proc { @class.new(:name => "foo", :host_aliases => ['alias1','']) }.should raise_error
end
end
+
+ describe "when syncing" do
+
+ it "should send the first value to the provider for ip property" do
+ @ip = @class.attrclass(:ip).new(:resource => @resource, :should => %w{192.168.0.1 192.168.0.2})
+ @provider.expects(:ip=).with '192.168.0.1'
+ @ip.sync
+ end
+
+ it "should send the first value to the provider for comment property" do
+ @comment = @class.attrclass(:comment).new(:resource => @resource, :should => %w{Bazinga Notme})
+ @provider.expects(:comment=).with 'Bazinga'
+ @comment.sync
+ end
+
+ it "should send the joined array to the provider for host_alias" do
+ @host_aliases = @class.attrclass(:host_aliases).new(:resource => @resource, :should => %w{foo bar})
+ @provider.expects(:host_aliases=).with 'foo bar'
+ @host_aliases.sync
+ end
+
+ it "should also use the specified delimiter for joining" do
+ @host_aliases = @class.attrclass(:host_aliases).new(:resource => @resource, :should => %w{foo bar})
+ @host_aliases.stubs(:delimiter).returns "\t"
+ @provider.expects(:host_aliases=).with "foo\tbar"
+ @host_aliases.sync
+ end
+
+ it "should care about the order of host_aliases" do
+ @host_aliases = @class.attrclass(:host_aliases).new(:resource => @resource, :should => %w{foo bar})
+ @host_aliases.insync?(%w{foo bar}).should == true
+ @host_aliases.insync?(%w{bar foo}).should == false
+ end
+
+ it "should not consider aliases to be in sync if should is a subset of current" do
+ @host_aliases = @class.attrclass(:host_aliases).new(:resource => @resource, :should => %w{foo bar})
+ @host_aliases.insync?(%w{foo bar anotherone}).should == false
+ end
+
+ end
end
diff --git a/spec/unit/type/macauthorization_spec.rb b/spec/unit/type/macauthorization_spec.rb
index 544f07f4b..e0d3b9433 100755
--- a/spec/unit/type/macauthorization_spec.rb
+++ b/spec/unit/type/macauthorization_spec.rb
@@ -1,6 +1,6 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
macauth_type = Puppet::Type.type(:macauthorization)
diff --git a/spec/unit/type/mcx_spec.rb b/spec/unit/type/mcx_spec.rb
index 703ecb473..4b60a5c96 100755
--- a/spec/unit/type/mcx_spec.rb
+++ b/spec/unit/type/mcx_spec.rb
@@ -20,7 +20,7 @@
# Most of this code copied from /spec/type/service.rb
-require File.dirname(__FILE__) + '/../../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
require 'puppet/type/mcx'
diff --git a/spec/unit/type/mount_spec.rb b/spec/unit/type/mount_spec.rb
index 4aa9baf70..3df8de903 100755
--- a/spec/unit/type/mount_spec.rb
+++ b/spec/unit/type/mount_spec.rb
@@ -1,6 +1,6 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
describe Puppet::Type.type(:mount) do
it "should have a :refreshable feature that requires the :remount method" do
@@ -184,22 +184,22 @@ describe Puppet::Type.type(:mount)::Ensure do
it "should be insync if it is mounted and should be defined" do
@ensure.should = :defined
- @ensure.insync?(:mounted).should == true
+ @ensure.safe_insync?(:mounted).should == true
end
it "should be insync if it is unmounted and should be defined" do
@ensure.should = :defined
- @ensure.insync?(:unmounted).should == true
+ @ensure.safe_insync?(:unmounted).should == true
end
it "should be insync if it is mounted and should be present" do
@ensure.should = :present
- @ensure.insync?(:mounted).should == true
+ @ensure.safe_insync?(:mounted).should == true
end
it "should be insync if it is unmounted and should be present" do
@ensure.should = :present
- @ensure.insync?(:unmounted).should == true
+ @ensure.safe_insync?(:unmounted).should == true
end
end
diff --git a/spec/unit/type/nagios_spec.rb b/spec/unit/type/nagios_spec.rb
index 2acbd392f..1515c2ae9 100755
--- a/spec/unit/type/nagios_spec.rb
+++ b/spec/unit/type/nagios_spec.rb
@@ -1,6 +1,6 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
require 'puppet/external/nagios'
diff --git a/spec/unit/type/noop_metaparam_spec.rb b/spec/unit/type/noop_metaparam_spec.rb
index 5ab2d9b7e..6f8f87e6c 100755
--- a/spec/unit/type/noop_metaparam_spec.rb
+++ b/spec/unit/type/noop_metaparam_spec.rb
@@ -1,6 +1,6 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
require 'puppet/type'
diff --git a/spec/unit/type/package_spec.rb b/spec/unit/type/package_spec.rb
index b0c5d2252..3db9c77be 100755
--- a/spec/unit/type/package_spec.rb
+++ b/spec/unit/type/package_spec.rb
@@ -1,6 +1,6 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
describe Puppet::Type.type(:package) do
before do
@@ -121,7 +121,7 @@ describe Puppet::Type.type(:package) do
before { @package[:ensure] = :purged }
it "should do nothing if it is :purged" do
- @provider.expects(:properties).returns(:ensure => :purged)
+ @provider.expects(:properties).returns(:ensure => :purged).at_least_once
@catalog.apply
end
@@ -141,7 +141,7 @@ describe Puppet::Type.type(:package) do
[:purged, :absent].each do |state|
it "should do nothing if it is #{state.to_s}" do
- @provider.expects(:properties).returns(:ensure => state)
+ @provider.expects(:properties).returns(:ensure => state).at_least_once
@catalog.apply
end
end
@@ -162,7 +162,7 @@ describe Puppet::Type.type(:package) do
[:present, :latest, "1.0"].each do |state|
it "should do nothing if it is #{state.to_s}" do
- @provider.expects(:properties).returns(:ensure => state)
+ @provider.expects(:properties).returns(:ensure => state).at_least_once
@catalog.apply
end
end
diff --git a/spec/unit/type/resources_spec.rb b/spec/unit/type/resources_spec.rb
index 9d955591c..020ab9b81 100644
--- a/spec/unit/type/resources_spec.rb
+++ b/spec/unit/type/resources_spec.rb
@@ -1,6 +1,6 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
resources = Puppet::Type.type(:resources)
diff --git a/spec/unit/type/schedule_spec.rb b/spec/unit/type/schedule_spec.rb
index 8305431a6..59d199812 100755
--- a/spec/unit/type/schedule_spec.rb
+++ b/spec/unit/type/schedule_spec.rb
@@ -1,6 +1,6 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
module ScheduleTesting
diff --git a/spec/unit/type/service_spec.rb b/spec/unit/type/service_spec.rb
index 77628670a..b11c4d7e7 100755
--- a/spec/unit/type/service_spec.rb
+++ b/spec/unit/type/service_spec.rb
@@ -1,6 +1,6 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
describe Puppet::Type.type(:service) do
it "should have an :enableable feature that requires the :enable, :disable, and :enabled? methods" do
diff --git a/spec/unit/type/ssh_authorized_key_spec.rb b/spec/unit/type/ssh_authorized_key_spec.rb
index a0b435f80..287fca3ab 100755
--- a/spec/unit/type/ssh_authorized_key_spec.rb
+++ b/spec/unit/type/ssh_authorized_key_spec.rb
@@ -1,6 +1,6 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
ssh_authorized_key = Puppet::Type.type(:ssh_authorized_key)
@@ -134,7 +134,7 @@ describe ssh_authorized_key do
it "should not raise spurious change events" do
resource = @class.new(:name => "Test", :user => "root")
target = File.expand_path("~root/.ssh/authorized_keys")
- resource.property(:target).insync?(target).should == true
+ resource.property(:target).safe_insync?(target).should == true
end
end
diff --git a/spec/unit/type/sshkey_spec.rb b/spec/unit/type/sshkey_spec.rb
new file mode 100644
index 000000000..8315d7ba9
--- /dev/null
+++ b/spec/unit/type/sshkey_spec.rb
@@ -0,0 +1,71 @@
+#!/usr/bin/env ruby
+
+require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
+
+sshkey = Puppet::Type.type(:sshkey)
+
+describe sshkey do
+ before do
+ @class = sshkey
+ end
+
+ it "should have :name its namevar" do
+ @class.key_attributes.should == [:name]
+ end
+
+ describe "when validating attributes" do
+ [:name, :provider].each do |param|
+ it "should have a #{param} parameter" do
+ @class.attrtype(param).should == :param
+ end
+ end
+
+ [:host_aliases, :ensure, :key, :type].each do |property|
+ it "should have a #{property} property" do
+ @class.attrtype(property).should == :property
+ end
+ end
+ end
+
+ describe "when validating values" do
+
+ it "should support ssh-dss as a type value" do
+ proc { @class.new(:name => "foo", :type => "ssh-dss") }.should_not raise_error
+ end
+
+ it "should support ssh-rsa as a type value" do
+ proc { @class.new(:name => "whev", :type => "ssh-rsa") }.should_not raise_error
+ end
+
+ it "should alias :dsa to ssh-dss as a value for type" do
+ key = @class.new(:name => "whev", :type => :dsa)
+ key.should(:type).should == :'ssh-dss'
+ end
+
+ it "should alias :rsa to ssh-rsa as a value for type" do
+ key = @class.new(:name => "whev", :type => :rsa)
+ key.should(:type).should == :'ssh-rsa'
+ end
+
+ it "should not support values other than ssh-dss, ssh-rsa, dsa, rsa for type" do
+ proc { @class.new(:name => "whev", :type => :'ssh-dsa') }.should raise_error(Puppet::Error)
+ end
+
+ it "should accept one host_alias" do
+ proc { @class.new(:name => "foo", :host_aliases => 'foo.bar.tld') }.should_not raise_error
+ end
+
+ it "should accept multiple host_aliases as an array" do
+ proc { @class.new(:name => "foo", :host_aliases => ['foo.bar.tld','10.0.9.9']) }.should_not raise_error
+ end
+
+ it "should not accept spaces in any host_alias" do
+ proc { @class.new(:name => "foo", :host_aliases => ['foo.bar.tld','foo bar']) }.should raise_error(Puppet::Error)
+ end
+
+ it "should not accept aliases in the resourcename" do
+ proc { @class.new(:name => 'host,host.domain,ip') }.should raise_error(Puppet::Error)
+ end
+
+ end
+end
diff --git a/spec/unit/type/stage_spec.rb b/spec/unit/type/stage_spec.rb
index bcde7c4b2..19922f112 100644
--- a/spec/unit/type/stage_spec.rb
+++ b/spec/unit/type/stage_spec.rb
@@ -1,6 +1,6 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
describe Puppet::Type.type(:stage) do
it "should have a 'name' parameter'" do
diff --git a/spec/unit/type/tidy_spec.rb b/spec/unit/type/tidy_spec.rb
index 1573ead1b..56bdf6c19 100755
--- a/spec/unit/type/tidy_spec.rb
+++ b/spec/unit/type/tidy_spec.rb
@@ -1,6 +1,6 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
require 'puppet/file_bucket/dipper'
tidy = Puppet::Type.type(:tidy)
diff --git a/spec/unit/type/user_spec.rb b/spec/unit/type/user_spec.rb
index ccea9ee4c..117c90f1c 100755
--- a/spec/unit/type/user_spec.rb
+++ b/spec/unit/type/user_spec.rb
@@ -1,6 +1,6 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
user = Puppet::Type.type(:user)
@@ -201,21 +201,21 @@ describe user do
it "should return true if no 'should' values are set" do
@gid = user.attrclass(:gid).new(:resource => @resource)
- @gid.must be_insync(500)
+ @gid.must be_safe_insync(500)
end
it "should return true if any of the specified groups are equal to the current integer" do
Puppet::Util.expects(:gid).with("foo").returns 300
Puppet::Util.expects(:gid).with("bar").returns 500
- @gid.must be_insync(500)
+ @gid.must be_safe_insync(500)
end
it "should return false if none of the specified groups are equal to the current integer" do
Puppet::Util.expects(:gid).with("foo").returns 300
Puppet::Util.expects(:gid).with("bar").returns 500
- @gid.should_not be_insync(700)
+ @gid.should_not be_safe_insync(700)
end
end
@@ -245,6 +245,34 @@ describe user do
end
end
+ describe "when managing minimum password age" do
+ before do
+ @age = user.attrclass(:password_min_age).new(:resource => @resource)
+ end
+
+ it "should accept a negative minimum age" do
+ expect { @age.should = -1 }.should_not raise_error
+ end
+
+ it "should fail with an empty minimum age" do
+ expect { @age.should = '' }.should raise_error(Puppet::Error)
+ end
+ end
+
+ describe "when managing maximum password age" do
+ before do
+ @age = user.attrclass(:password_max_age).new(:resource => @resource)
+ end
+
+ it "should accept a negative maximum age" do
+ expect { @age.should = -1 }.should_not raise_error
+ end
+
+ it "should fail with an empty maximum age" do
+ expect { @age.should = '' }.should raise_error(Puppet::Error)
+ end
+ end
+
describe "when managing passwords" do
before do
@password = user.attrclass(:password).new(:resource => @resource, :should => "mypass")
diff --git a/spec/unit/type/whit_spec.rb b/spec/unit/type/whit_spec.rb
index 998d9df30..46eb0ab6e 100644
--- a/spec/unit/type/whit_spec.rb
+++ b/spec/unit/type/whit_spec.rb
@@ -1,6 +1,6 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
whit = Puppet::Type.type(:whit).new(:name => "Foo::Bar")
diff --git a/spec/unit/type/zpool_spec.rb b/spec/unit/type/zpool_spec.rb
index db12459ab..be8cb12ba 100755
--- a/spec/unit/type/zpool_spec.rb
+++ b/spec/unit/type/zpool_spec.rb
@@ -38,27 +38,27 @@ describe vdev_property do
it "should be insync if the devices are the same" do
@property.should = ["dev1 dev2"]
- @property.insync?(["dev2 dev1"]).must be_true
+ @property.safe_insync?(["dev2 dev1"]).must be_true
end
it "should be out of sync if the devices are not the same" do
@property.should = ["dev1 dev3"]
- @property.insync?(["dev2 dev1"]).must be_false
+ @property.safe_insync?(["dev2 dev1"]).must be_false
end
it "should be insync if the devices are the same and the should values are comma seperated" do
@property.should = ["dev1", "dev2"]
- @property.insync?(["dev2 dev1"]).must be_true
+ @property.safe_insync?(["dev2 dev1"]).must be_true
end
it "should be out of sync if the device is absent and should has a value" do
@property.should = ["dev1", "dev2"]
- @property.insync?(:absent).must be_false
+ @property.safe_insync?(:absent).must be_false
end
it "should be insync if the device is absent and should is absent" do
@property.should = [:absent]
- @property.insync?(:absent).must be_true
+ @property.safe_insync?(:absent).must be_true
end
end
@@ -73,38 +73,38 @@ describe multi_vdev_property do
it "should be insync if the devices are the same" do
@property.should = ["dev1 dev2"]
- @property.insync?(["dev2 dev1"]).must be_true
+ @property.safe_insync?(["dev2 dev1"]).must be_true
end
it "should be out of sync if the devices are not the same" do
@property.should = ["dev1 dev3"]
- @property.insync?(["dev2 dev1"]).must be_false
+ @property.safe_insync?(["dev2 dev1"]).must be_false
end
it "should be out of sync if the device is absent and should has a value" do
@property.should = ["dev1", "dev2"]
- @property.insync?(:absent).must be_false
+ @property.safe_insync?(:absent).must be_false
end
it "should be insync if the device is absent and should is absent" do
@property.should = [:absent]
- @property.insync?(:absent).must be_true
+ @property.safe_insync?(:absent).must be_true
end
describe "when there are multiple lists of devices" do
it "should be in sync if each group has the same devices" do
@property.should = ["dev1 dev2", "dev3 dev4"]
- @property.insync?(["dev2 dev1", "dev3 dev4"]).must be_true
+ @property.safe_insync?(["dev2 dev1", "dev3 dev4"]).must be_true
end
it "should be out of sync if any group has the different devices" do
@property.should = ["dev1 devX", "dev3 dev4"]
- @property.insync?(["dev2 dev1", "dev3 dev4"]).must be_false
+ @property.safe_insync?(["dev2 dev1", "dev3 dev4"]).must be_false
end
it "should be out of sync if devices are in the wrong group" do
@property.should = ["dev1 dev2", "dev3 dev4"]
- @property.insync?(["dev2 dev3", "dev1 dev4"]).must be_false
+ @property.safe_insync?(["dev2 dev3", "dev1 dev4"]).must be_false
end
end
end
diff --git a/spec/unit/type_spec.rb b/spec/unit/type_spec.rb
index 48b00ec4a..d1143d92e 100755
--- a/spec/unit/type_spec.rb
+++ b/spec/unit/type_spec.rb
@@ -1,6 +1,6 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
describe Puppet::Type do
it "should include the Cacher module" do
@@ -116,7 +116,7 @@ describe Puppet::Type do
catalog.version = 50
catalog.add_resource resource
- resource.source_descriptors.should == {:version=>50, :tags=>["mount", "foo"], :path=>"/Mount[foo]"}
+ resource.source_descriptors.should == {:tags=>["mount", "foo"], :path=>"/Mount[foo]"}
end
it "should consider its type to be the name of its class" do
@@ -153,7 +153,7 @@ describe Puppet::Type do
@resource.event.default_log_level.should == :warning
end
- {:file => "/my/file", :line => 50, :tags => %{foo bar}, :version => 50}.each do |attr, value|
+ {:file => "/my/file", :line => 50, :tags => %{foo bar}}.each do |attr, value|
it "should set the #{attr}" do
@resource.stubs(attr).returns value
@resource.event.send(attr).should == value
diff --git a/spec/unit/util/autoload/file_cache_spec.rb b/spec/unit/util/autoload/file_cache_spec.rb
index c94ec7110..5ad820e4c 100755
--- a/spec/unit/util/autoload/file_cache_spec.rb
+++ b/spec/unit/util/autoload/file_cache_spec.rb
@@ -1,6 +1,6 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../../../spec_helper')
require 'puppet/util/autoload/file_cache'
class FileCacheTester
diff --git a/spec/unit/util/backups_spec.rb b/spec/unit/util/backups_spec.rb
index 259b18652..3d707a58c 100755
--- a/spec/unit/util/backups_spec.rb
+++ b/spec/unit/util/backups_spec.rb
@@ -1,6 +1,6 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
require 'puppet/util/backups'
diff --git a/spec/unit/util/cache_accumulator_spec.rb b/spec/unit/util/cache_accumulator_spec.rb
index 469522ae8..4ed9abf5c 100644
--- a/spec/unit/util/cache_accumulator_spec.rb
+++ b/spec/unit/util/cache_accumulator_spec.rb
@@ -1,6 +1,6 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
require 'puppet/util/rails/cache_accumulator'
describe Puppet::Util::CacheAccumulator do
diff --git a/spec/unit/util/cacher_spec.rb b/spec/unit/util/cacher_spec.rb
index 89783ed27..125382e84 100755
--- a/spec/unit/util/cacher_spec.rb
+++ b/spec/unit/util/cacher_spec.rb
@@ -1,6 +1,6 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
require 'puppet/util/cacher'
diff --git a/spec/unit/util/checksums_spec.rb b/spec/unit/util/checksums_spec.rb
index e018581af..954dc650b 100755
--- a/spec/unit/util/checksums_spec.rb
+++ b/spec/unit/util/checksums_spec.rb
@@ -3,7 +3,7 @@
# Created by Luke Kanies on 2007-9-22.
# Copyright (c) 2007. All rights reserved.
-require File.dirname(__FILE__) + '/../../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
require 'puppet/util/checksums'
@@ -140,7 +140,9 @@ describe Puppet::Util::Checksums do
end
it "should return nil for streams" do
- @summer.send(sum.to_s + "_stream").should be_nil
+ expectation = stub "expectation"
+ expectation.expects(:do_something!).at_least_once
+ @summer.send(sum.to_s + "_stream"){ |checksum| checksum << "anything" ; expectation.do_something! }.should be_nil
end
end
end
@@ -149,5 +151,11 @@ describe Puppet::Util::Checksums do
it "should return an empty string" do
@summer.none_file("/my/file").should == ""
end
+
+ it "should return an empty string for streams" do
+ expectation = stub "expectation"
+ expectation.expects(:do_something!).at_least_once
+ @summer.none_stream{ |checksum| checksum << "anything" ; expectation.do_something! }.should == ""
+ end
end
end
diff --git a/spec/unit/util/constant_inflector_spec.rb b/spec/unit/util/constant_inflector_spec.rb
index 423ca8f2e..29574fd5b 100755
--- a/spec/unit/util/constant_inflector_spec.rb
+++ b/spec/unit/util/constant_inflector_spec.rb
@@ -3,7 +3,7 @@
# Created by Luke Kanies on 2008-02-12.
# Copyright (c) 2007. All rights reserved.
-require File.dirname(__FILE__) + '/../../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
require 'puppet/util/constant_inflector'
diff --git a/spec/unit/util/ldap/connection_spec.rb b/spec/unit/util/ldap/connection_spec.rb
index 557c42eaa..91f008a2e 100755
--- a/spec/unit/util/ldap/connection_spec.rb
+++ b/spec/unit/util/ldap/connection_spec.rb
@@ -3,7 +3,7 @@
# Created by Luke Kanies on 2008-3-19.
# Copyright (c) 2006. All rights reserved.
-require File.dirname(__FILE__) + '/../../../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../../../spec_helper')
require 'puppet/util/ldap/connection'
diff --git a/spec/unit/util/ldap/generator_spec.rb b/spec/unit/util/ldap/generator_spec.rb
index 1630cd183..59c05b7c7 100755
--- a/spec/unit/util/ldap/generator_spec.rb
+++ b/spec/unit/util/ldap/generator_spec.rb
@@ -3,7 +3,7 @@
# Created by Luke Kanies on 2008-3-28.
# Copyright (c) 2008. All rights reserved.
-require File.dirname(__FILE__) + '/../../../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../../../spec_helper')
require 'puppet/util/ldap/generator'
diff --git a/spec/unit/util/ldap/manager_spec.rb b/spec/unit/util/ldap/manager_spec.rb
index ba693d562..e91582c8d 100755
--- a/spec/unit/util/ldap/manager_spec.rb
+++ b/spec/unit/util/ldap/manager_spec.rb
@@ -3,7 +3,7 @@
# Created by Luke Kanies on 2008-3-19.
# Copyright (c) 2006. All rights reserved.
-require File.dirname(__FILE__) + '/../../../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../../../spec_helper')
require 'puppet/util/ldap/manager'
diff --git a/spec/unit/util/loadedfile_spec.rb b/spec/unit/util/loadedfile_spec.rb
index 3bc26a421..23d2766d7 100755
--- a/spec/unit/util/loadedfile_spec.rb
+++ b/spec/unit/util/loadedfile_spec.rb
@@ -1,6 +1,6 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
require 'tempfile'
require 'puppet/util/loadedfile'
diff --git a/spec/unit/util/log/destinations_spec.rb b/spec/unit/util/log/destinations_spec.rb
index 6596c0664..468702fb3 100755
--- a/spec/unit/util/log/destinations_spec.rb
+++ b/spec/unit/util/log/destinations_spec.rb
@@ -1,6 +1,6 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../../../spec_helper')
require 'puppet/util/log'
diff --git a/spec/unit/util/log_spec.rb b/spec/unit/util/log_spec.rb
index ea5d59859..a6f11739b 100755
--- a/spec/unit/util/log_spec.rb
+++ b/spec/unit/util/log_spec.rb
@@ -120,7 +120,7 @@ describe Puppet::Util::Log do
Puppet::Util::Log.new(:level => "notice", :message => :foo, :source => "foo")
end
- [:file, :line, :version].each do |attr|
+ [:file, :line].each do |attr|
it "should use #{attr} if provided" do
Puppet::Util::Log.any_instance.expects(attr.to_s + "=").with "foo"
Puppet::Util::Log.new(:level => "notice", :message => :foo, attr => "foo")
@@ -177,23 +177,12 @@ describe Puppet::Util::Log do
log = Puppet::Util::Log.new(:level => "notice", :message => :foo)
log.expects(:tag).with("tag")
log.expects(:tag).with("tag2")
- log.expects(:version=).with(100)
log.source = source
log.source.should == "path"
end
- it "should copy over any version information" do
- catalog = Puppet::Resource::Catalog.new
- catalog.version = 25
- source = Puppet::Type.type(:file).new :path => "/foo/bar"
- catalog.add_resource source
-
- log = Puppet::Util::Log.new(:level => "notice", :message => :foo, :source => source)
- log.version.should == 25
- end
-
it "should copy over any file and line information" do
source = Puppet::Type.type(:file).new :path => "/foo/bar"
source.file = "/my/file"
@@ -212,4 +201,22 @@ describe Puppet::Util::Log do
end
end
end
+
+ describe "to_yaml" do
+ it "should not include the @version attribute" do
+ log = Puppet::Util::Log.new(:level => "notice", :message => :foo, :version => 100)
+ log.to_yaml_properties.should_not include('@version')
+ end
+
+ it "should include attributes @level, @message, @source, @tags, and @time" do
+ log = Puppet::Util::Log.new(:level => "notice", :message => :foo, :version => 100)
+ log.to_yaml_properties.should == %w{@level @message @source @tags @time}
+ end
+
+ it "should include attributes @file and @line if specified" do
+ log = Puppet::Util::Log.new(:level => "notice", :message => :foo, :file => "foo", :line => 35)
+ log.to_yaml_properties.should include('@file')
+ log.to_yaml_properties.should include('@line')
+ end
+ end
end
diff --git a/spec/unit/util/logging_spec.rb b/spec/unit/util/logging_spec.rb
index 46ae5386f..411cd17a9 100755
--- a/spec/unit/util/logging_spec.rb
+++ b/spec/unit/util/logging_spec.rb
@@ -81,7 +81,7 @@ describe Puppet::Util::Logging do
@logger.notice ["foo", "bar", "baz"]
end
- [:file, :line, :version, :tags].each do |attr|
+ [:file, :line, :tags].each do |attr|
it "should include #{attr} if available" do
@logger.singleton_class.send(:attr_accessor, attr)
diff --git a/spec/unit/util/metric_spec.rb b/spec/unit/util/metric_spec.rb
index 72571ee4a..600b88f85 100755
--- a/spec/unit/util/metric_spec.rb
+++ b/spec/unit/util/metric_spec.rb
@@ -59,7 +59,7 @@ describe Puppet::Util::Metric do
end
it "should support a label for values" do
- @metric.newvalue(:foo, 10, "label")
+ @metric.newvalue("foo", 10, "label")
@metric.values[0][1].should == "label"
end
@@ -69,19 +69,19 @@ describe Puppet::Util::Metric do
end
it "should return its values sorted by label" do
- @metric.newvalue(:foo, 10, "b")
- @metric.newvalue(:bar, 10, "a")
+ @metric.newvalue("foo", 10, "b")
+ @metric.newvalue("bar", 10, "a")
- @metric.values.should == [[:bar, "a", 10], [:foo, "b", 10]]
+ @metric.values.should == [["bar", "a", 10], ["foo", "b", 10]]
end
it "should use an array indexer method to retrieve individual values" do
- @metric.newvalue(:foo, 10)
- @metric[:foo].should == 10
+ @metric.newvalue("foo", 10)
+ @metric["foo"].should == 10
end
it "should return nil if the named value cannot be found" do
- @metric[:foo].should == 0
+ @metric["foo"].should == 0
end
# LAK: I'm not taking the time to develop these tests right now.
diff --git a/spec/unit/util/nagios_maker_spec.rb b/spec/unit/util/nagios_maker_spec.rb
index 5cda98738..20582525d 100755
--- a/spec/unit/util/nagios_maker_spec.rb
+++ b/spec/unit/util/nagios_maker_spec.rb
@@ -3,7 +3,7 @@
# Created by Luke Kanies on 2007-11-18.
# Copyright (c) 2007. All rights reserved.
-require File.dirname(__FILE__) + '/../../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
require 'puppet/util/nagios_maker'
diff --git a/spec/unit/util/package_spec.rb b/spec/unit/util/package_spec.rb
index 09b222194..e72a7ae91 100644
--- a/spec/unit/util/package_spec.rb
+++ b/spec/unit/util/package_spec.rb
@@ -1,6 +1,6 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
require 'puppet/util/package'
diff --git a/spec/unit/util/queue/stomp_spec.rb b/spec/unit/util/queue/stomp_spec.rb
index 9f1d28448..a11d5324e 100755
--- a/spec/unit/util/queue/stomp_spec.rb
+++ b/spec/unit/util/queue/stomp_spec.rb
@@ -1,20 +1,16 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../../../spec_helper')
require 'puppet/util/queue'
-describe Puppet::Util::Queue do
- confine "Missing Stomp" => Puppet.features.stomp?
-
+describe Puppet::Util::Queue, :if => Puppet.features.stomp? do
it 'should load :stomp client appropriately' do
Puppet.settings.stubs(:value).returns 'faux_queue_source'
Puppet::Util::Queue.queue_type_to_class(:stomp).name.should == 'Puppet::Util::Queue::Stomp'
end
end
-describe 'Puppet::Util::Queue::Stomp' do
- confine "Missing Stomp" => Puppet.features.stomp?
-
+describe 'Puppet::Util::Queue::Stomp', :if => Puppet.features.stomp? do
before do
# So we make sure we never create a real client instance.
# Otherwise we'll try to connect, and that's bad.
diff --git a/spec/unit/util/queue_spec.rb b/spec/unit/util/queue_spec.rb
index 571bddda4..d356fd7bb 100755
--- a/spec/unit/util/queue_spec.rb
+++ b/spec/unit/util/queue_spec.rb
@@ -1,6 +1,6 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
require 'puppet/util/queue'
require 'spec/mocks'
diff --git a/spec/unit/util/reference_serializer_spec.rb b/spec/unit/util/reference_serializer_spec.rb
index 6e7d8a674..f72715ed6 100644
--- a/spec/unit/util/reference_serializer_spec.rb
+++ b/spec/unit/util/reference_serializer_spec.rb
@@ -1,6 +1,6 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
require 'puppet/util/rails/reference_serializer'
class SerializeTester
diff --git a/spec/unit/util/resource_template_spec.rb b/spec/unit/util/resource_template_spec.rb
index 2eab2cfcb..e823a9ff4 100755
--- a/spec/unit/util/resource_template_spec.rb
+++ b/spec/unit/util/resource_template_spec.rb
@@ -1,6 +1,6 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
require 'puppet/util/resource_template'
diff --git a/spec/unit/util/run_mode_spec.rb b/spec/unit/util/run_mode_spec.rb
index d6ab08a10..1956973ea 100644
--- a/spec/unit/util/run_mode_spec.rb
+++ b/spec/unit/util/run_mode_spec.rb
@@ -1,6 +1,6 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
describe Puppet::Util::RunMode do
before do
diff --git a/spec/unit/util/selinux_spec.rb b/spec/unit/util/selinux_spec.rb
index e92784386..c18be0c2f 100755
--- a/spec/unit/util/selinux_spec.rb
+++ b/spec/unit/util/selinux_spec.rb
@@ -1,6 +1,6 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
require 'puppet/util/selinux'
include Puppet::Util::SELinux
diff --git a/spec/unit/util/settings/file_setting_spec.rb b/spec/unit/util/settings/file_setting_spec.rb
index 2870fbb57..a2049e2ad 100755
--- a/spec/unit/util/settings/file_setting_spec.rb
+++ b/spec/unit/util/settings/file_setting_spec.rb
@@ -1,6 +1,6 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../../../spec_helper')
require 'puppet/util/settings'
require 'puppet/util/settings/file_setting'
@@ -146,9 +146,7 @@ describe Puppet::Util::Settings::FileSetting do
@file.to_resource.should be_instance_of(Puppet::Resource)
end
- describe "on POSIX systems" do
- confine "no /dev on Microsoft Windows" => Puppet.features.posix?
-
+ describe "on POSIX systems", :if => Puppet.features.posix? do
it "should skip files in /dev" do
@settings.stubs(:value).with(:mydir).returns "/dev/file"
@file.to_resource.should be_nil
diff --git a/spec/unit/util/settings_spec.rb b/spec/unit/util/settings_spec.rb
index 7bca44b76..732be6a08 100755
--- a/spec/unit/util/settings_spec.rb
+++ b/spec/unit/util/settings_spec.rb
@@ -1,6 +1,6 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
describe Puppet::Util::Settings do
describe "when specifying defaults" do
diff --git a/spec/unit/util/storage_spec.rb b/spec/unit/util/storage_spec.rb
index ae3cbc2ae..5359f746f 100755
--- a/spec/unit/util/storage_spec.rb
+++ b/spec/unit/util/storage_spec.rb
@@ -1,6 +1,6 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
require 'yaml'
require 'puppet/util/storage'
diff --git a/spec/unit/util/tagging_spec.rb b/spec/unit/util/tagging_spec.rb
index 8fd8552b8..5231be2eb 100755
--- a/spec/unit/util/tagging_spec.rb
+++ b/spec/unit/util/tagging_spec.rb
@@ -3,7 +3,7 @@
# Created by Luke Kanies on 2008-01-19.
# Copyright (c) 2007. All rights reserved.
-require File.dirname(__FILE__) + '/../../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
require 'puppet/util/tagging'
diff --git a/spec/unit/util/warnings_spec.rb b/spec/unit/util/warnings_spec.rb
index c05c9837b..a3460bccf 100755
--- a/spec/unit/util/warnings_spec.rb
+++ b/spec/unit/util/warnings_spec.rb
@@ -1,6 +1,6 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../spec_helper'
+require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
describe Puppet::Util::Warnings do
before(:all) do
diff --git a/test/certmgr/certmgr.rb b/test/certmgr/certmgr.rb
index b78a138b7..11ecd6307 100755
--- a/test/certmgr/certmgr.rb
+++ b/test/certmgr/certmgr.rb
@@ -1,6 +1,6 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../lib/puppettest'
+require File.expand_path(File.dirname(__FILE__) + '/../lib/puppettest')
require 'puppet'
require 'puppet/sslcertificates.rb'
diff --git a/test/certmgr/inventory.rb b/test/certmgr/inventory.rb
index d1ba4c879..fa612b2c1 100755
--- a/test/certmgr/inventory.rb
+++ b/test/certmgr/inventory.rb
@@ -1,6 +1,6 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../lib/puppettest'
+require File.expand_path(File.dirname(__FILE__) + '/../lib/puppettest')
require 'puppet'
require 'puppettest/certificates'
diff --git a/test/certmgr/support.rb b/test/certmgr/support.rb
index 060c458d8..f85d54a8a 100755
--- a/test/certmgr/support.rb
+++ b/test/certmgr/support.rb
@@ -1,6 +1,6 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../lib/puppettest'
+require File.expand_path(File.dirname(__FILE__) + '/../lib/puppettest')
require 'puppettest'
require 'puppet/sslcertificates/support'
diff --git a/test/language/ast.rb b/test/language/ast.rb
index 10b9fa361..ec20cdb99 100755
--- a/test/language/ast.rb
+++ b/test/language/ast.rb
@@ -1,6 +1,6 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../lib/puppettest'
+require File.expand_path(File.dirname(__FILE__) + '/../lib/puppettest')
require 'puppettest'
require 'puppet/parser/parser'
diff --git a/test/language/ast/variable.rb b/test/language/ast/variable.rb
index 8a7738b23..968d1b7c3 100755
--- a/test/language/ast/variable.rb
+++ b/test/language/ast/variable.rb
@@ -3,7 +3,7 @@
# Created by Luke A. Kanies on 2007-0419.
# Copyright (c) 2006. All rights reserved.
-require File.dirname(__FILE__) + '/../../lib/puppettest'
+require File.expand_path(File.dirname(__FILE__) + '/../../lib/puppettest')
require 'puppettest'
require 'puppettest/parsertesting'
diff --git a/test/language/functions.rb b/test/language/functions.rb
index 081063e2b..3c27f2b2b 100755
--- a/test/language/functions.rb
+++ b/test/language/functions.rb
@@ -1,6 +1,6 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../lib/puppettest'
+require File.expand_path(File.dirname(__FILE__) + '/../lib/puppettest')
require 'puppet'
require 'puppet/parser/parser'
diff --git a/test/language/parser.rb b/test/language/parser.rb
index 6f3d751c2..36a9c4787 100755
--- a/test/language/parser.rb
+++ b/test/language/parser.rb
@@ -1,6 +1,6 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../lib/puppettest'
+require File.expand_path(File.dirname(__FILE__) + '/../lib/puppettest')
require 'mocha'
require 'puppet'
@@ -500,9 +500,9 @@ file { "/tmp/yayness":
ensure
if Puppet.features.rails?
Puppet[:storeconfigs] = false
- Puppet::Resource::Catalog.cache_class = catalog_cache_class
- Puppet::Node::Facts.cache_class = facts_cache_class
- Puppet::Node.cache_class = node_cache_class
+ Puppet::Resource::Catalog.indirection.cache_class = catalog_cache_class
+ Puppet::Node::Facts.indirection.cache_class = facts_cache_class
+ Puppet::Node.indirection.cache_class = node_cache_class
end
end
@@ -539,9 +539,9 @@ file { "/tmp/yayness":
ensure
if Puppet.features.rails?
Puppet[:storeconfigs] = false
- Puppet::Resource::Catalog.cache_class = catalog_cache_class
- Puppet::Node::Facts.cache_class = facts_cache_class
- Puppet::Node.cache_class = node_cache_class
+ Puppet::Resource::Catalog.indirection.cache_class = catalog_cache_class
+ Puppet::Node::Facts.indirection.cache_class = facts_cache_class
+ Puppet::Node.indirection.cache_class = node_cache_class
end
end
diff --git a/test/language/scope.rb b/test/language/scope.rb
index d9c122a92..c4154dc27 100755
--- a/test/language/scope.rb
+++ b/test/language/scope.rb
@@ -1,6 +1,6 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../lib/puppettest'
+require File.expand_path(File.dirname(__FILE__) + '/../lib/puppettest')
require 'mocha'
require 'puppettest'
@@ -233,9 +233,9 @@ Host <<||>>"
}
ensure
Puppet[:storeconfigs] = false
- Puppet::Resource::Catalog.cache_class = catalog_cache_class
- Puppet::Node::Facts.cache_class = facts_cache_class
- Puppet::Node.cache_class = node_cache_class
+ Puppet::Resource::Catalog.indirection.cache_class = catalog_cache_class
+ Puppet::Node::Facts.indirection.cache_class = facts_cache_class
+ Puppet::Node.indirection.cache_class = node_cache_class
end
else
$stderr.puts "No ActiveRecord -- skipping collection tests"
diff --git a/test/language/snippets.rb b/test/language/snippets.rb
index 51c5e23fe..bfc14fa2d 100755
--- a/test/language/snippets.rb
+++ b/test/language/snippets.rb
@@ -1,6 +1,6 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../lib/puppettest'
+require File.expand_path(File.dirname(__FILE__) + '/../lib/puppettest')
require 'puppet'
require 'puppet/parser/parser'
@@ -37,6 +37,9 @@ class TestSnippets < Test::Unit::TestCase
end
def assert_mode_equal(mode, path)
+ if mode.is_a? Integer
+ mode = mode.to_s(8)
+ end
unless file = @catalog.resource(:file, path)
raise "Could not find file #{path}"
end
@@ -501,7 +504,7 @@ class TestSnippets < Test::Unit::TestCase
catalog = nil
assert_nothing_raised("Could not compile catalog") {
- catalog = Puppet::Resource::Catalog.find(node)
+ catalog = Puppet::Resource::Catalog.indirection.find(node)
}
assert_nothing_raised("Could not convert catalog") {
diff --git a/test/language/transportable.rb b/test/language/transportable.rb
index 1e9ae930e..d8b5c10e1 100755
--- a/test/language/transportable.rb
+++ b/test/language/transportable.rb
@@ -1,6 +1,6 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../lib/puppettest'
+require File.expand_path(File.dirname(__FILE__) + '/../lib/puppettest')
require 'puppet'
require 'puppet/transportable'
diff --git a/test/lib/puppettest/fileparsing.rb b/test/lib/puppettest/fileparsing.rb
index 914c4bcb3..bd4f9e152 100644
--- a/test/lib/puppettest/fileparsing.rb
+++ b/test/lib/puppettest/fileparsing.rb
@@ -1,3 +1,5 @@
+require 'test/unit'
+
module PuppetTest::FileParsing
# Run an isomorphism test on our parsing process.
def fakedataparse(*files)
diff --git a/test/lib/puppettest/reporttesting.rb b/test/lib/puppettest/reporttesting.rb
index 448a6a9d8..54a2f6799 100644
--- a/test/lib/puppettest/reporttesting.rb
+++ b/test/lib/puppettest/reporttesting.rb
@@ -1,7 +1,7 @@
module PuppetTest::Reporttesting
def fakereport
# Create a bunch of log messages in an array.
- report = Puppet::Transaction::Report.new
+ report = Puppet::Transaction::Report.new("apply")
3.times { |i|
# We have to use warning so that the logs always happen
diff --git a/test/lib/puppettest/support/utils.rb b/test/lib/puppettest/support/utils.rb
index e022f123c..bca5d9634 100644
--- a/test/lib/puppettest/support/utils.rb
+++ b/test/lib/puppettest/support/utils.rb
@@ -92,7 +92,7 @@ module PuppetTest::Support::Utils
method = type
trans.send(method)
- newevents = trans.events.reject { |e| e.status == 'failure' }.collect { |e|
+ newevents = trans.events.reject { |e| ['failure', 'audit'].include? e.status }.collect { |e|
e.name
}
diff --git a/test/network/authconfig.rb b/test/network/authconfig.rb
index f53238d0b..3a4f18838 100755
--- a/test/network/authconfig.rb
+++ b/test/network/authconfig.rb
@@ -1,6 +1,6 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../lib/puppettest'
+require File.expand_path(File.dirname(__FILE__) + '/../lib/puppettest')
require 'puppettest'
diff --git a/test/network/authorization.rb b/test/network/authorization.rb
index f29fe2554..5a1254a84 100755
--- a/test/network/authorization.rb
+++ b/test/network/authorization.rb
@@ -1,6 +1,6 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../lib/puppettest'
+require File.expand_path(File.dirname(__FILE__) + '/../lib/puppettest')
require 'puppettest'
require 'puppet/network/authorization'
diff --git a/test/network/authstore.rb b/test/network/authstore.rb
index e608423bf..e3c185302 100755
--- a/test/network/authstore.rb
+++ b/test/network/authstore.rb
@@ -1,6 +1,6 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../lib/puppettest'
+require File.expand_path(File.dirname(__FILE__) + '/../lib/puppettest')
require 'puppettest'
require 'mocha'
diff --git a/test/network/client/ca.rb b/test/network/client/ca.rb
index 5037fe48d..fcb950174 100755
--- a/test/network/client/ca.rb
+++ b/test/network/client/ca.rb
@@ -1,6 +1,6 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../lib/puppettest'
+require File.expand_path(File.dirname(__FILE__) + '/../../lib/puppettest')
require 'mocha'
require 'puppettest'
diff --git a/test/network/client/dipper.rb b/test/network/client/dipper.rb
index d4f784628..45f3a7a5c 100755
--- a/test/network/client/dipper.rb
+++ b/test/network/client/dipper.rb
@@ -1,6 +1,6 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../lib/puppettest'
+require File.expand_path(File.dirname(__FILE__) + '/../../lib/puppettest')
require 'puppettest'
require 'puppet/file_bucket/dipper'
diff --git a/test/network/client_request.rb b/test/network/client_request.rb
index 25fc57ff4..96b9d3e4f 100755
--- a/test/network/client_request.rb
+++ b/test/network/client_request.rb
@@ -1,6 +1,6 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../lib/puppettest'
+require File.expand_path(File.dirname(__FILE__) + '/../lib/puppettest')
require 'puppettest'
diff --git a/test/network/handler/ca.rb b/test/network/handler/ca.rb
index 79a1b15dc..e27e9c29b 100755
--- a/test/network/handler/ca.rb
+++ b/test/network/handler/ca.rb
@@ -1,6 +1,6 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../lib/puppettest'
+require File.expand_path(File.dirname(__FILE__) + '/../../lib/puppettest')
require 'puppettest'
require 'puppet/network/handler/ca'
diff --git a/test/network/handler/fileserver.rb b/test/network/handler/fileserver.rb
index d979821bb..b76f8e199 100755
--- a/test/network/handler/fileserver.rb
+++ b/test/network/handler/fileserver.rb
@@ -1,6 +1,6 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../lib/puppettest'
+require File.expand_path(File.dirname(__FILE__) + '/../../lib/puppettest')
require 'puppettest'
require 'puppet/network/handler/fileserver'
diff --git a/test/network/handler/master.rb b/test/network/handler/master.rb
index 81869ac06..4c0374a76 100755
--- a/test/network/handler/master.rb
+++ b/test/network/handler/master.rb
@@ -1,6 +1,6 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../lib/puppettest'
+require File.expand_path(File.dirname(__FILE__) + '/../../lib/puppettest')
require 'puppettest'
require 'puppet/network/handler/master'
@@ -13,7 +13,7 @@ class TestMaster < Test::Unit::TestCase
@master = Puppet::Network::Handler.master.new(:Manifest => tempfile)
@catalog = stub 'catalog', :extract => ""
- Puppet::Resource::Catalog.stubs(:find).returns(@catalog)
+ Puppet::Resource::Catalog.indirection.stubs(:find).returns(@catalog)
end
def teardown
@@ -32,15 +32,17 @@ class TestMaster < Test::Unit::TestCase
def test_hostname_is_used_if_client_is_missing
@master.expects(:decode_facts).returns("hostname" => "yay")
- Puppet::Node::Facts.expects(:new).with { |name, facts| name == "yay" }.returns(stub('facts', :save => nil))
+ facts = Puppet::Node::Facts.new("the_facts")
+ Puppet::Node::Facts.indirection.stubs(:save).with(facts)
+ Puppet::Node::Facts.expects(:new).with { |name, facts| name == "yay" }.returns(facts)
@master.getconfig("facts")
end
def test_facts_are_saved
- facts = mock('facts')
+ facts = Puppet::Node::Facts.new("the_facts")
Puppet::Node::Facts.expects(:new).returns(facts)
- facts.expects(:save)
+ Puppet::Node::Facts.indirection.expects(:save).with(facts)
@master.stubs(:decode_facts)
@@ -48,12 +50,13 @@ class TestMaster < Test::Unit::TestCase
end
def test_catalog_is_used_for_compiling
- facts = stub('facts', :save => nil)
+ facts = Puppet::Node::Facts.new("the_facts")
+ Puppet::Node::Facts.indirection.stubs(:save).with(facts)
Puppet::Node::Facts.stubs(:new).returns(facts)
@master.stubs(:decode_facts)
- Puppet::Resource::Catalog.expects(:find).with("foo.com").returns(@catalog)
+ Puppet::Resource::Catalog.indirection.expects(:find).with("foo.com").returns(@catalog)
@master.getconfig("facts", "yaml", "foo.com")
end
@@ -61,14 +64,15 @@ end
class TestMasterFormats < Test::Unit::TestCase
def setup
- @facts = stub('facts', :save => nil)
+ @facts = Puppet::Node::Facts.new("the_facts")
Puppet::Node::Facts.stubs(:new).returns(@facts)
+ Puppet::Node::Facts.indirection.stubs(:save)
@master = Puppet::Network::Handler.master.new(:Code => "")
@master.stubs(:decode_facts)
@catalog = stub 'catalog', :extract => ""
- Puppet::Resource::Catalog.stubs(:find).returns(@catalog)
+ Puppet::Resource::Catalog.indirection.stubs(:find).returns(@catalog)
end
def test_marshal_can_be_used
diff --git a/test/network/handler/report.rb b/test/network/handler/report.rb
index 590dcdb13..d0c223878 100755
--- a/test/network/handler/report.rb
+++ b/test/network/handler/report.rb
@@ -1,6 +1,6 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../lib/puppettest'
+require File.expand_path(File.dirname(__FILE__) + '/../../lib/puppettest')
require 'puppettest'
require 'puppet/network/handler/report'
diff --git a/test/network/handler/runner.rb b/test/network/handler/runner.rb
index 396568b29..d03fb2c89 100755
--- a/test/network/handler/runner.rb
+++ b/test/network/handler/runner.rb
@@ -1,6 +1,6 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../lib/puppettest'
+require File.expand_path(File.dirname(__FILE__) + '/../../lib/puppettest')
require 'puppettest'
require 'puppet/network/handler/runner'
diff --git a/test/network/rights.rb b/test/network/rights.rb
index df032b5a9..0167a98f1 100755
--- a/test/network/rights.rb
+++ b/test/network/rights.rb
@@ -1,6 +1,6 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../lib/puppettest'
+require File.expand_path(File.dirname(__FILE__) + '/../lib/puppettest')
require 'puppettest'
require 'puppet/network/rights'
diff --git a/test/network/server/mongrel_test.rb b/test/network/server/mongrel_test.rb
index 7bb2df150..ca215ee25 100755
--- a/test/network/server/mongrel_test.rb
+++ b/test/network/server/mongrel_test.rb
@@ -1,6 +1,6 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../lib/puppettest'
+require File.expand_path(File.dirname(__FILE__) + '/../../lib/puppettest')
require 'puppettest'
require 'mocha'
@@ -95,11 +95,5 @@ class TestMongrelServer < PuppetTest::TestCase
assert_equal(ip, info.ip, "Did not copy over ip correctly")
assert_equal(Resolv.getname(ip), info.name, "Did not look up hostname correctly")
end
-
- def test_daemonize
- mongrel = mkserver
-
- assert(mongrel.respond_to?(:daemonize), "Mongrel server does not respond to daemonize")
- end
end
diff --git a/test/network/server/webrick.rb b/test/network/server/webrick.rb
index e203894d9..624147b6c 100755
--- a/test/network/server/webrick.rb
+++ b/test/network/server/webrick.rb
@@ -1,6 +1,6 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../lib/puppettest'
+require File.expand_path(File.dirname(__FILE__) + '/../../lib/puppettest')
require 'puppettest'
require 'puppet/network/http_server/webrick'
diff --git a/test/network/xmlrpc/client.rb b/test/network/xmlrpc/client.rb
index 7e7f36944..73159a994 100755
--- a/test/network/xmlrpc/client.rb
+++ b/test/network/xmlrpc/client.rb
@@ -1,6 +1,6 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../lib/puppettest'
+require File.expand_path(File.dirname(__FILE__) + '/../../lib/puppettest')
require 'puppettest'
require 'puppet/network/xmlrpc/client'
diff --git a/test/network/xmlrpc/processor.rb b/test/network/xmlrpc/processor.rb
index 0c990c9e8..379b34a85 100755
--- a/test/network/xmlrpc/processor.rb
+++ b/test/network/xmlrpc/processor.rb
@@ -1,6 +1,6 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../lib/puppettest'
+require File.expand_path(File.dirname(__FILE__) + '/../../lib/puppettest')
require 'puppettest'
require 'puppet/network/xmlrpc/processor'
diff --git a/test/network/xmlrpc/server.rb b/test/network/xmlrpc/server.rb
index a5474b08c..0653f009e 100755
--- a/test/network/xmlrpc/server.rb
+++ b/test/network/xmlrpc/server.rb
@@ -1,6 +1,6 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../lib/puppettest'
+require File.expand_path(File.dirname(__FILE__) + '/../../lib/puppettest')
require 'puppettest'
require 'puppet/network/xmlrpc/server'
diff --git a/test/network/xmlrpc/webrick_servlet.rb b/test/network/xmlrpc/webrick_servlet.rb
index 47bad27c2..f2faf09ec 100755
--- a/test/network/xmlrpc/webrick_servlet.rb
+++ b/test/network/xmlrpc/webrick_servlet.rb
@@ -1,6 +1,6 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../lib/puppettest'
+require File.expand_path(File.dirname(__FILE__) + '/../../lib/puppettest')
require 'puppettest'
require 'puppettest/support/utils'
diff --git a/test/other/provider.rb b/test/other/provider.rb
index a539ee5a7..c31c6bfb9 100755
--- a/test/other/provider.rb
+++ b/test/other/provider.rb
@@ -1,6 +1,6 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../lib/puppettest'
+require File.expand_path(File.dirname(__FILE__) + '/../lib/puppettest')
require 'puppet'
require 'puppet/provider'
diff --git a/test/other/puppet.rb b/test/other/puppet.rb
index 657bdefca..9fb53ddba 100755
--- a/test/other/puppet.rb
+++ b/test/other/puppet.rb
@@ -1,6 +1,6 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../lib/puppettest'
+require File.expand_path(File.dirname(__FILE__) + '/../lib/puppettest')
require 'puppet'
require 'puppettest'
diff --git a/test/other/relationships.rb b/test/other/relationships.rb
index df4d3a96e..717353c02 100755
--- a/test/other/relationships.rb
+++ b/test/other/relationships.rb
@@ -1,6 +1,6 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../lib/puppettest'
+require File.expand_path(File.dirname(__FILE__) + '/../lib/puppettest')
require 'puppet'
require 'puppettest'
diff --git a/test/other/report.rb b/test/other/report.rb
index 8a909b41c..fb206470a 100755
--- a/test/other/report.rb
+++ b/test/other/report.rb
@@ -1,6 +1,6 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../lib/puppettest'
+require File.expand_path(File.dirname(__FILE__) + '/../lib/puppettest')
require 'puppet'
require 'puppet/reports'
@@ -68,7 +68,7 @@ class TestReports < Test::Unit::TestCase
def test_store_report
# Create a bunch of log messages in an array.
- report = Puppet::Transaction::Report.new
+ report = Puppet::Transaction::Report.new("apply")
# We have to reuse reporting here because of something going on in the
# server/report.rb file
diff --git a/test/other/transactions.rb b/test/other/transactions.rb
index 6655d8645..be8cef483 100755
--- a/test/other/transactions.rb
+++ b/test/other/transactions.rb
@@ -1,6 +1,6 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../lib/puppettest'
+require File.expand_path(File.dirname(__FILE__) + '/../lib/puppettest')
require 'mocha'
require 'puppet'
diff --git a/test/puppet/defaults.rb b/test/puppet/defaults.rb
index d290cef1f..18c74bf49 100755
--- a/test/puppet/defaults.rb
+++ b/test/puppet/defaults.rb
@@ -1,6 +1,6 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../lib/puppettest'
+require File.expand_path(File.dirname(__FILE__) + '/../lib/puppettest')
require 'puppet'
require 'puppettest'
diff --git a/test/puppet/errortest.rb b/test/puppet/errortest.rb
index bb81b0d3f..35f2ed39e 100755
--- a/test/puppet/errortest.rb
+++ b/test/puppet/errortest.rb
@@ -1,6 +1,6 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../lib/puppettest'
+require File.expand_path(File.dirname(__FILE__) + '/../lib/puppettest')
require 'puppet'
require 'puppettest'
diff --git a/test/puppet/tc_suidmanager.rb b/test/puppet/tc_suidmanager.rb
index eeb56f2c9..2f4cb40da 100755
--- a/test/puppet/tc_suidmanager.rb
+++ b/test/puppet/tc_suidmanager.rb
@@ -1,6 +1,6 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../lib/puppettest'
+require File.expand_path(File.dirname(__FILE__) + '/../lib/puppettest')
require 'puppet'
require 'puppettest'
diff --git a/test/rails/rails.rb b/test/rails/rails.rb
index 6a5bd7b17..75987b95e 100755
--- a/test/rails/rails.rb
+++ b/test/rails/rails.rb
@@ -1,6 +1,6 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../lib/puppettest'
+require File.expand_path(File.dirname(__FILE__) + '/../lib/puppettest')
require 'puppet'
require 'puppet/rails'
diff --git a/test/rails/railsparameter.rb b/test/rails/railsparameter.rb
index 77ce33912..fafa2b7e7 100755
--- a/test/rails/railsparameter.rb
+++ b/test/rails/railsparameter.rb
@@ -1,6 +1,6 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../lib/puppettest'
+require File.expand_path(File.dirname(__FILE__) + '/../lib/puppettest')
require 'puppet'
require 'puppet/rails'
diff --git a/test/ral/manager/attributes.rb b/test/ral/manager/attributes.rb
index 6d0284d9e..030f38c50 100755
--- a/test/ral/manager/attributes.rb
+++ b/test/ral/manager/attributes.rb
@@ -3,7 +3,7 @@
# Created by Luke A. Kanies on 2007-02-05.
# Copyright (c) 2007. All rights reserved.
-require File.dirname(__FILE__) + '/../../lib/puppettest'
+require File.expand_path(File.dirname(__FILE__) + '/../../lib/puppettest')
require 'puppettest'
require 'mocha'
diff --git a/test/ral/manager/instances.rb b/test/ral/manager/instances.rb
index dd1cf054e..f1731ac64 100755
--- a/test/ral/manager/instances.rb
+++ b/test/ral/manager/instances.rb
@@ -3,7 +3,7 @@
# Created by Luke A. Kanies on 2007-06-10.
# Copyright (c) 2007. All rights reserved.
-require File.dirname(__FILE__) + '/../../lib/puppettest'
+require File.expand_path(File.dirname(__FILE__) + '/../../lib/puppettest')
require 'puppettest'
diff --git a/test/ral/manager/manager.rb b/test/ral/manager/manager.rb
index 76b1d97fe..9c9449a45 100755
--- a/test/ral/manager/manager.rb
+++ b/test/ral/manager/manager.rb
@@ -3,7 +3,7 @@
# Created by Luke A. Kanies on 2006-11-29.
# Copyright (c) 2006. All rights reserved.
-require File.dirname(__FILE__) + '/../../lib/puppettest'
+require File.expand_path(File.dirname(__FILE__) + '/../../lib/puppettest')
require 'puppettest'
diff --git a/test/ral/manager/provider.rb b/test/ral/manager/provider.rb
index d4c8a3407..1d7265b7c 100755
--- a/test/ral/manager/provider.rb
+++ b/test/ral/manager/provider.rb
@@ -1,6 +1,6 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../lib/puppettest'
+require File.expand_path(File.dirname(__FILE__) + '/../../lib/puppettest')
require 'puppettest'
require 'mocha'
diff --git a/test/ral/manager/type.rb b/test/ral/manager/type.rb
index 145877722..c2e6a0c1e 100755
--- a/test/ral/manager/type.rb
+++ b/test/ral/manager/type.rb
@@ -1,6 +1,6 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../lib/puppettest'
+require File.expand_path(File.dirname(__FILE__) + '/../../lib/puppettest')
require 'mocha'
require 'puppettest'
diff --git a/test/ral/providers/cron/crontab.rb b/test/ral/providers/cron/crontab.rb
index be2af1e16..3475cf6f1 100755
--- a/test/ral/providers/cron/crontab.rb
+++ b/test/ral/providers/cron/crontab.rb
@@ -1,6 +1,6 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../../lib/puppettest'
+require File.expand_path(File.dirname(__FILE__) + '/../../../lib/puppettest')
require 'puppettest'
require 'mocha'
diff --git a/test/ral/providers/group.rb b/test/ral/providers/group.rb
index 8a0860551..4259be355 100755
--- a/test/ral/providers/group.rb
+++ b/test/ral/providers/group.rb
@@ -1,6 +1,6 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../lib/puppettest'
+require File.expand_path(File.dirname(__FILE__) + '/../../lib/puppettest')
require 'puppettest'
require 'etc'
diff --git a/test/ral/providers/host/parsed.rb b/test/ral/providers/host/parsed.rb
index 955edd5d3..521654d53 100755
--- a/test/ral/providers/host/parsed.rb
+++ b/test/ral/providers/host/parsed.rb
@@ -1,8 +1,7 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../../lib/puppettest'
+require File.expand_path(File.dirname(__FILE__) + '/../../../lib/puppettest')
-require 'etc'
require 'puppettest'
require 'puppettest/fileparsing'
require 'test/unit'
@@ -25,213 +24,9 @@ class TestParsedHostProvider < Test::Unit::TestCase
super
end
- def test_provider_existence
- assert(@provider, "Could not retrieve provider")
- end
-
- # Here we just create a fake host type that answers to all of the methods
- # but does not modify our actual system.
- def mkfaketype
- @provider.filetype = Puppet::Util::FileType.filetype(:ram)
- end
-
- def mkhosthash
- if defined?(@hcount)
- @hcount += 1
- else
- @hcount = 1
- end
-
- return {
- :name => "fakehost#{@hcount}",
- :ip => "192.168.27.#{@hcount}",
- :host_aliases => ["alias#{@hcount}"],
- :ensure => :present
- }
- end
-
- def mkhost
- hash = mkhosthash
-
- fakeresource = fakeresource(:host, hash[:name])
-
- host = @provider.new(fakeresource)
-
- assert(host, "Could not create provider host")
- hash.each do |name, val|
- host.send(name.to_s + "=", val)
- end
-
- host
- end
-
- # Make sure we convert both directlys correctly using a simple host.
- def test_basic_isomorphism
- hash = {:record_type => :parsed, :name => "myhost", :ip => "192.168.43.56", :host_aliases => %w{another host},
- :comment => ''}
-
- str = nil
- assert_nothing_raised do
- str = @provider.to_line(hash)
- end
-
- assert_equal("192.168.43.56\tmyhost\tanother\thost", str)
-
- newhash = nil
- assert_nothing_raised do
- newhash = @provider.parse(str).shift
- end
-
- assert_equal(hash, newhash)
- end
-
- # Make sure parsing gets comments, blanks, and hosts
- def test_blanks_and_comments
- mkfaketype
- text = %{# comment one
-
-192.168.43.56\tmyhost\tanother\thost
-
-# another comment
-192.168.43.57\tanotherhost
-}
-
- instances = nil
- assert_nothing_raised do
- instances = @provider.parse(text)
- end
-
-
- assert_equal(
- [
- {:record_type => :comment, :line => "# comment one"},
- {:record_type => :blank, :line => ""},
- {:record_type => :parsed, :name => "myhost", :ip => "192.168.43.56", :host_aliases => %w{another host},
- :comment => ''},
- {:record_type => :blank, :line => " "},
- {:record_type => :comment, :line => "# another comment"},
-
- {:record_type => :parsed, :name => "anotherhost", :ip => "192.168.43.57", :host_aliases => [],
- :comment => ''}
- ], instances)
-
- newtext = nil
- assert_nothing_raised do
- newtext = @provider.to_file(instances).gsub(/^# HEADER.+\n/, '')
- end
-
- assert_equal(text, newtext)
- end
-
- def test_simplehost
- mkfaketype
- @provider.default_target = :yayness
- file = @provider.target_object(:yayness)
-
- # Start out with no content.
- assert_nothing_raised {
- assert_equal([], @provider.parse(file.read))
- }
-
- # Now create a provider
- host = nil
- assert_nothing_raised {
- host = mkhost
- }
-
- # Make sure we're still empty
- assert_nothing_raised {
- assert_equal([], @provider.parse(file.read))
- }
-
- # Try storing it
- assert_nothing_raised do
- host.flush
- end
-
- # Make sure we get the host back
- assert_nothing_raised {
-
- assert(
- file.read.include?(host.name),
-
- "Did not flush host to disk")
- }
-
- # Remove a single field and make sure it gets tossed
- name = host.host_aliases
- host.host_aliases = [:absent]
-
- assert_nothing_raised {
- host.flush
-
- assert(
- ! file.read.include?(name[0]),
-
- "Did not remove host_aliases from disk")
- }
-
- # Make sure it throws up if we remove a required field
- host.ip = :absent
-
- assert_raise(ArgumentError) {
- host.flush
- }
-
- # Now remove the whole object
- host.ensure = :absent
- assert_nothing_raised {
- host.flush
- assert_equal([], @provider.parse(file.read))
- }
- end
-
# Parse our sample data and make sure we regenerate it correctly.
def test_hostsparse
fakedata("data/types/hosts").each do |file| fakedataparse(file) end
end
-
- # Make sure we can modify the file elsewhere and those modifications will
- # get taken into account.
- def test_modifyingfile
- hostfile = tempfile
- @provider.default_target = hostfile
-
- file = @provider.target_object(hostfile)
-
- hosts = []
- 3.times {
- h = mkhost
- hosts << h
- }
-
- hosts.each do |host|
- host.flush
- end
-
- newhost = mkhost
- hosts << newhost
-
- # Now store our new host
- newhost.flush
-
- # Verify we can retrieve that info
- assert_nothing_raised("Could not retrieve after second write") {
- @provider.prefetch
- }
-
- text = file.read
-
- instances = @provider.parse(text)
-
- # And verify that we have data for everything
- hosts.each { |host|
- name = host.resource[:name]
- assert(text.include?(name), "Host #{name} is not in file")
- hash = host.property_hash
- assert(! hash.empty?, "Could not find host #{name}")
- assert(hash[:ip], "Could not find ip for host #{name}")
- }
- end
end
diff --git a/test/ral/providers/mailalias/aliases.rb b/test/ral/providers/mailalias/aliases.rb
index 0497528c3..9cd2fc354 100755
--- a/test/ral/providers/mailalias/aliases.rb
+++ b/test/ral/providers/mailalias/aliases.rb
@@ -1,6 +1,6 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../../lib/puppettest'
+require File.expand_path(File.dirname(__FILE__) + '/../../../lib/puppettest')
require 'puppettest'
require 'puppettest/fileparsing'
diff --git a/test/ral/providers/nameservice.rb b/test/ral/providers/nameservice.rb
index 967c59f92..a04b45b1f 100755
--- a/test/ral/providers/nameservice.rb
+++ b/test/ral/providers/nameservice.rb
@@ -1,6 +1,6 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../lib/puppettest'
+require File.expand_path(File.dirname(__FILE__) + '/../../lib/puppettest')
require 'puppettest'
require 'puppet/provider/nameservice'
diff --git a/test/ral/providers/package.rb b/test/ral/providers/package.rb
index 9c5e0dfa6..5264443bc 100755
--- a/test/ral/providers/package.rb
+++ b/test/ral/providers/package.rb
@@ -1,6 +1,6 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../lib/puppettest'
+require File.expand_path(File.dirname(__FILE__) + '/../../lib/puppettest')
require 'puppettest'
require 'etc'
diff --git a/test/ral/providers/package/aptitude.rb b/test/ral/providers/package/aptitude.rb
index 34eba10bf..871de9ded 100755
--- a/test/ral/providers/package/aptitude.rb
+++ b/test/ral/providers/package/aptitude.rb
@@ -1,6 +1,6 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../../lib/puppettest'
+require File.expand_path(File.dirname(__FILE__) + '/../../../lib/puppettest')
require 'mocha'
diff --git a/test/ral/providers/package/aptrpm.rb b/test/ral/providers/package/aptrpm.rb
index 5f2a0d274..a9646696a 100755
--- a/test/ral/providers/package/aptrpm.rb
+++ b/test/ral/providers/package/aptrpm.rb
@@ -1,6 +1,6 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../../lib/puppettest'
+require File.expand_path(File.dirname(__FILE__) + '/../../../lib/puppettest')
require 'mocha'
diff --git a/test/ral/providers/parsedfile.rb b/test/ral/providers/parsedfile.rb
index c7e5d9b04..b9e33e56c 100755
--- a/test/ral/providers/parsedfile.rb
+++ b/test/ral/providers/parsedfile.rb
@@ -1,6 +1,6 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../lib/puppettest'
+require File.expand_path(File.dirname(__FILE__) + '/../../lib/puppettest')
require 'puppettest'
require 'mocha'
diff --git a/test/ral/providers/port/parsed.rb b/test/ral/providers/port/parsed.rb
index 13cc87d2c..062044796 100755
--- a/test/ral/providers/port/parsed.rb
+++ b/test/ral/providers/port/parsed.rb
@@ -1,6 +1,6 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../../lib/puppettest'
+require File.expand_path(File.dirname(__FILE__) + '/../../../lib/puppettest')
require 'puppettest'
#require 'puppettest/fileparsing'
diff --git a/test/ral/providers/provider.rb b/test/ral/providers/provider.rb
index f46e03f82..a9f5ad21c 100755
--- a/test/ral/providers/provider.rb
+++ b/test/ral/providers/provider.rb
@@ -1,6 +1,6 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../lib/puppettest'
+require File.expand_path(File.dirname(__FILE__) + '/../../lib/puppettest')
require 'puppettest'
require 'facter'
diff --git a/test/ral/providers/service/base.rb b/test/ral/providers/service/base.rb
index 82d36ab98..112246b12 100755
--- a/test/ral/providers/service/base.rb
+++ b/test/ral/providers/service/base.rb
@@ -3,7 +3,7 @@
# Created by Luke A. Kanies on 2007-01-28.
# Copyright (c) 2007. All rights reserved.
-require File.dirname(__FILE__) + '/../../../lib/puppettest'
+require File.expand_path(File.dirname(__FILE__) + '/../../../lib/puppettest')
require 'puppettest'
diff --git a/test/ral/providers/sshkey/parsed.rb b/test/ral/providers/sshkey/parsed.rb
index f21158fed..2a6041406 100755
--- a/test/ral/providers/sshkey/parsed.rb
+++ b/test/ral/providers/sshkey/parsed.rb
@@ -1,6 +1,6 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../../lib/puppettest'
+require File.expand_path(File.dirname(__FILE__) + '/../../../lib/puppettest')
require 'puppettest'
require 'puppettest/fileparsing'
diff --git a/test/ral/providers/user.rb b/test/ral/providers/user.rb
index 64f833f6a..ebf2ab700 100755
--- a/test/ral/providers/user.rb
+++ b/test/ral/providers/user.rb
@@ -1,6 +1,6 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../lib/puppettest'
+require File.expand_path(File.dirname(__FILE__) + '/../../lib/puppettest')
require 'puppettest'
require 'puppettest/support/utils'
diff --git a/test/ral/providers/user/useradd.rb b/test/ral/providers/user/useradd.rb
index 12e1f7ffc..6350ec6dc 100755
--- a/test/ral/providers/user/useradd.rb
+++ b/test/ral/providers/user/useradd.rb
@@ -1,6 +1,6 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../../lib/puppettest'
+require File.expand_path(File.dirname(__FILE__) + '/../../../lib/puppettest')
require 'mocha'
diff --git a/test/ral/type/cron.rb b/test/ral/type/cron.rb
index a941caec8..ae280e04f 100755
--- a/test/ral/type/cron.rb
+++ b/test/ral/type/cron.rb
@@ -1,6 +1,6 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../lib/puppettest'
+require File.expand_path(File.dirname(__FILE__) + '/../../lib/puppettest')
require 'puppettest'
diff --git a/test/ral/type/exec.rb b/test/ral/type/exec.rb
index 5b26a98a2..933994b88 100755
--- a/test/ral/type/exec.rb
+++ b/test/ral/type/exec.rb
@@ -1,6 +1,6 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../lib/puppettest'
+require File.expand_path(File.dirname(__FILE__) + '/../../lib/puppettest')
require 'puppettest'
diff --git a/test/ral/type/file.rb b/test/ral/type/file.rb
index 6322529cf..2285e72c8 100755
--- a/test/ral/type/file.rb
+++ b/test/ral/type/file.rb
@@ -1,6 +1,6 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../lib/puppettest'
+require File.expand_path(File.dirname(__FILE__) + '/../../lib/puppettest')
require 'puppettest'
require 'puppettest/support/utils'
@@ -612,7 +612,7 @@ class TestFile < Test::Unit::TestCase
:mode => "0777"
)
- assert_equal(0777, file.should(:mode), "Mode did not get set correctly")
+ assert_equal("777", file.should(:mode), "Mode did not get set correctly")
assert_apply(file)
assert_equal(0777, File.stat(path).mode & 007777, "file mode is incorrect")
File.unlink(path)
diff --git a/test/ral/type/file/target.rb b/test/ral/type/file/target.rb
index 339e47dcc..272128586 100755
--- a/test/ral/type/file/target.rb
+++ b/test/ral/type/file/target.rb
@@ -1,6 +1,6 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../../lib/puppettest'
+require File.expand_path(File.dirname(__FILE__) + '/../../../lib/puppettest')
require 'puppettest'
require 'puppettest/support/utils'
diff --git a/test/ral/type/fileignoresource.rb b/test/ral/type/fileignoresource.rb
index 3254fe293..593fcf7a7 100755
--- a/test/ral/type/fileignoresource.rb
+++ b/test/ral/type/fileignoresource.rb
@@ -1,6 +1,6 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../lib/puppettest'
+require File.expand_path(File.dirname(__FILE__) + '/../../lib/puppettest')
require 'puppettest'
require 'puppettest/support/utils'
diff --git a/test/ral/type/filesources.rb b/test/ral/type/filesources.rb
index dd73cea27..3363aafb3 100755
--- a/test/ral/type/filesources.rb
+++ b/test/ral/type/filesources.rb
@@ -1,6 +1,6 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../lib/puppettest'
+require File.expand_path(File.dirname(__FILE__) + '/../../lib/puppettest')
require 'puppettest'
require 'puppettest/support/utils'
@@ -327,12 +327,9 @@ class TestFileSources < Test::Unit::TestCase
file = nil
assert_nothing_raised {
-
- file = Puppet::Type.type(:file).new(
-
+ file = Puppet::Type.type(:file).new(
:name => dest,
:ensure => "file",
-
:source => source
)
}
diff --git a/test/ral/type/host.rb b/test/ral/type/host.rb
index 1b5bb01c9..00e1d9ef6 100755
--- a/test/ral/type/host.rb
+++ b/test/ral/type/host.rb
@@ -1,6 +1,6 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../lib/puppettest'
+require File.expand_path(File.dirname(__FILE__) + '/../../lib/puppettest')
require 'puppettest'
require 'test/unit'
diff --git a/test/ral/type/mailalias.rb b/test/ral/type/mailalias.rb
index 634ff2a31..1c867ef1b 100755
--- a/test/ral/type/mailalias.rb
+++ b/test/ral/type/mailalias.rb
@@ -1,6 +1,6 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../lib/puppettest'
+require File.expand_path(File.dirname(__FILE__) + '/../../lib/puppettest')
require 'puppettest'
require 'mocha'
diff --git a/test/ral/type/port.rb b/test/ral/type/port.rb
index 85592d14a..1daee1474 100755
--- a/test/ral/type/port.rb
+++ b/test/ral/type/port.rb
@@ -1,6 +1,6 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../lib/puppettest'
+require File.expand_path(File.dirname(__FILE__) + '/../../lib/puppettest')
require 'puppettest'
diff --git a/test/ral/type/resources.rb b/test/ral/type/resources.rb
index f36df7f1d..fcfeebe10 100755
--- a/test/ral/type/resources.rb
+++ b/test/ral/type/resources.rb
@@ -3,7 +3,7 @@
# Created by Luke Kanies on 2006-12-12.
# Copyright (c) 2006. All rights reserved.
-require File.dirname(__FILE__) + '/../../lib/puppettest'
+require File.expand_path(File.dirname(__FILE__) + '/../../lib/puppettest')
require 'puppettest'
diff --git a/test/ral/type/service.rb b/test/ral/type/service.rb
index 9e6469088..b7ae8dfd6 100755
--- a/test/ral/type/service.rb
+++ b/test/ral/type/service.rb
@@ -1,6 +1,6 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../lib/puppettest'
+require File.expand_path(File.dirname(__FILE__) + '/../../lib/puppettest')
require 'puppettest'
require 'mocha'
diff --git a/test/ral/type/sshkey.rb b/test/ral/type/sshkey.rb
index 725f188ca..2bdc00877 100755
--- a/test/ral/type/sshkey.rb
+++ b/test/ral/type/sshkey.rb
@@ -1,6 +1,6 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../lib/puppettest'
+require File.expand_path(File.dirname(__FILE__) + '/../../lib/puppettest')
require 'puppettest'
require 'facter'
diff --git a/test/ral/type/user.rb b/test/ral/type/user.rb
index dee6a9176..404d84f4e 100755
--- a/test/ral/type/user.rb
+++ b/test/ral/type/user.rb
@@ -1,6 +1,6 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../lib/puppettest'
+require File.expand_path(File.dirname(__FILE__) + '/../../lib/puppettest')
require 'puppettest'
require 'etc'
diff --git a/test/ral/type/yumrepo.rb b/test/ral/type/yumrepo.rb
index bbc1562db..086615097 100755
--- a/test/ral/type/yumrepo.rb
+++ b/test/ral/type/yumrepo.rb
@@ -1,6 +1,6 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../lib/puppettest'
+require File.expand_path(File.dirname(__FILE__) + '/../../lib/puppettest')
require 'puppettest'
require 'fileutils'
diff --git a/test/ral/type/zone.rb b/test/ral/type/zone.rb
index 59de99075..c93cc68bc 100755
--- a/test/ral/type/zone.rb
+++ b/test/ral/type/zone.rb
@@ -1,6 +1,6 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../../lib/puppettest'
+require File.expand_path(File.dirname(__FILE__) + '/../../lib/puppettest')
require 'puppettest'
require 'puppet/type/zone'
diff --git a/test/test b/test/test
index 097885751..c8b9b08ef 100755
--- a/test/test
+++ b/test/test
@@ -68,7 +68,7 @@
#
# = Copyright
#
-# Copyright (c) 2005 Reductive Labs, LLC
+# Copyright (c) 2005 Puppet Labs, LLC
# Licensed under the GNU Public License
require 'find'
diff --git a/test/util/classgen.rb b/test/util/classgen.rb
index 5560764d5..aa9bdbed7 100755
--- a/test/util/classgen.rb
+++ b/test/util/classgen.rb
@@ -1,6 +1,6 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../lib/puppettest'
+require File.expand_path(File.dirname(__FILE__) + '/../lib/puppettest')
require 'puppet'
require 'puppettest'
diff --git a/test/util/execution.rb b/test/util/execution.rb
index e6509582e..316231b66 100755
--- a/test/util/execution.rb
+++ b/test/util/execution.rb
@@ -1,6 +1,6 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../lib/puppettest'
+require File.expand_path(File.dirname(__FILE__) + '/../lib/puppettest')
require 'puppet'
require 'puppettest'
diff --git a/test/util/fileparsing.rb b/test/util/fileparsing.rb
index 05ed80a79..831f19bdb 100755
--- a/test/util/fileparsing.rb
+++ b/test/util/fileparsing.rb
@@ -1,6 +1,6 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../lib/puppettest'
+require File.expand_path(File.dirname(__FILE__) + '/../lib/puppettest')
require 'puppettest'
require 'puppettest/fileparsing'
diff --git a/test/util/inifile.rb b/test/util/inifile.rb
index 78831ca2f..e3ce20823 100755
--- a/test/util/inifile.rb
+++ b/test/util/inifile.rb
@@ -1,6 +1,6 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../lib/puppettest'
+require File.expand_path(File.dirname(__FILE__) + '/../lib/puppettest')
require 'puppet'
require 'puppet/util/inifile'
diff --git a/test/util/instance_loader.rb b/test/util/instance_loader.rb
index 2e3dcb3d6..61ca4e3c8 100755
--- a/test/util/instance_loader.rb
+++ b/test/util/instance_loader.rb
@@ -1,6 +1,6 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../lib/puppettest'
+require File.expand_path(File.dirname(__FILE__) + '/../lib/puppettest')
require 'puppet'
require 'puppet/util/instance_loader'
diff --git a/test/util/log.rb b/test/util/log.rb
index 4dbd3c6d1..908347a50 100755
--- a/test/util/log.rb
+++ b/test/util/log.rb
@@ -1,6 +1,6 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../lib/puppettest'
+require File.expand_path(File.dirname(__FILE__) + '/../lib/puppettest')
require 'puppet'
require 'puppet/util/log'
diff --git a/test/util/metrics.rb b/test/util/metrics.rb
index 82e792d0b..d1a052293 100755
--- a/test/util/metrics.rb
+++ b/test/util/metrics.rb
@@ -1,6 +1,6 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../lib/puppettest'
+require File.expand_path(File.dirname(__FILE__) + '/../lib/puppettest')
require 'puppet'
require 'puppet/util/metric'
diff --git a/test/util/package.rb b/test/util/package.rb
index b2bb6dfcc..cd6a9d01d 100755
--- a/test/util/package.rb
+++ b/test/util/package.rb
@@ -1,6 +1,6 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../lib/puppettest'
+require File.expand_path(File.dirname(__FILE__) + '/../lib/puppettest')
require 'puppet'
require 'puppet/util/package'
diff --git a/test/util/pidlock.rb b/test/util/pidlock.rb
index 764c7436d..beaff1089 100755
--- a/test/util/pidlock.rb
+++ b/test/util/pidlock.rb
@@ -1,4 +1,4 @@
-require File.dirname(__FILE__) + '/../lib/puppettest'
+require File.expand_path(File.dirname(__FILE__) + '/../lib/puppettest')
require 'puppet/util/pidlock'
require 'fileutils'
diff --git a/test/util/settings.rb b/test/util/settings.rb
index ffcfbbfc2..7a7150983 100755
--- a/test/util/settings.rb
+++ b/test/util/settings.rb
@@ -1,6 +1,6 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../lib/puppettest'
+require File.expand_path(File.dirname(__FILE__) + '/../lib/puppettest')
require 'mocha'
require 'puppettest'
diff --git a/test/util/storage.rb b/test/util/storage.rb
index f4836ce78..26bf70952 100755
--- a/test/util/storage.rb
+++ b/test/util/storage.rb
@@ -1,6 +1,6 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../lib/puppettest'
+require File.expand_path(File.dirname(__FILE__) + '/../lib/puppettest')
require 'puppet'
require 'puppettest'
diff --git a/test/util/subclass_loader.rb b/test/util/subclass_loader.rb
index 957b6cc6c..c3453157e 100755
--- a/test/util/subclass_loader.rb
+++ b/test/util/subclass_loader.rb
@@ -1,6 +1,6 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../lib/puppettest'
+require File.expand_path(File.dirname(__FILE__) + '/../lib/puppettest')
require 'puppettest'
require 'puppet/util/subclass_loader'
diff --git a/test/util/utiltest.rb b/test/util/utiltest.rb
index 0e55e1dde..1c934d612 100755
--- a/test/util/utiltest.rb
+++ b/test/util/utiltest.rb
@@ -1,6 +1,6 @@
#!/usr/bin/env ruby
-require File.dirname(__FILE__) + '/../lib/puppettest'
+require File.expand_path(File.dirname(__FILE__) + '/../lib/puppettest')
require 'puppettest'
require 'mocha'