facter 2.0.1.rc1-universal-darwin
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of facter might be problematic. Click here for more details.
- checksums.yaml +7 -0
- data/COMMITTERS.md +194 -0
- data/CONTRIBUTING.md +65 -0
- data/Gemfile +43 -0
- data/LICENSE +15 -0
- data/README.md +33 -0
- data/Rakefile +79 -0
- data/bin/facter +16 -0
- data/etc/facter.conf +5 -0
- data/ext/build_defaults.yaml +24 -0
- data/ext/debian/changelog.erb +59 -0
- data/ext/debian/compat +1 -0
- data/ext/debian/control +14 -0
- data/ext/debian/copyright +19 -0
- data/ext/debian/docs +1 -0
- data/ext/debian/lintian-overrides +0 -0
- data/ext/debian/rules +10 -0
- data/ext/debian/source/format +1 -0
- data/ext/facter-diff +74 -0
- data/ext/ips/facter.p5m.erb +10 -0
- data/ext/ips/rules +7 -0
- data/ext/ips/transforms +18 -0
- data/ext/osx/file_mapping.yaml +27 -0
- data/ext/osx/preflight.erb +33 -0
- data/ext/osx/prototype.plist.erb +38 -0
- data/ext/project_data.yaml +33 -0
- data/ext/redhat/facter.spec.erb +220 -0
- data/ext/solaris/pkginfo +7 -0
- data/install.rb +380 -0
- data/lib/facter.rb +262 -0
- data/lib/facter/Cfkey.rb +42 -0
- data/lib/facter/application.rb +204 -0
- data/lib/facter/architecture.rb +50 -0
- data/lib/facter/augeasversion.rb +28 -0
- data/lib/facter/blockdevices.rb +105 -0
- data/lib/facter/core/aggregate.rb +220 -0
- data/lib/facter/core/directed_graph.rb +46 -0
- data/lib/facter/core/execution.rb +100 -0
- data/lib/facter/core/execution/base.rb +73 -0
- data/lib/facter/core/execution/posix.rb +50 -0
- data/lib/facter/core/execution/windows.rb +57 -0
- data/lib/facter/core/logging.rb +169 -0
- data/lib/facter/core/resolvable.rb +94 -0
- data/lib/facter/core/suitable.rb +117 -0
- data/lib/facter/domain.rb +99 -0
- data/lib/facter/ec2.rb +37 -0
- data/lib/facter/facterversion.rb +15 -0
- data/lib/facter/filesystems.rb +38 -0
- data/lib/facter/fqdn.rb +22 -0
- data/lib/facter/hardwareisa.rb +20 -0
- data/lib/facter/hardwaremodel.rb +67 -0
- data/lib/facter/hostname.rb +33 -0
- data/lib/facter/id.rb +21 -0
- data/lib/facter/interfaces.rb +46 -0
- data/lib/facter/ipaddress.rb +171 -0
- data/lib/facter/ipaddress6.rb +82 -0
- data/lib/facter/iphostnumber.rb +29 -0
- data/lib/facter/kernel.rb +22 -0
- data/lib/facter/kernelmajversion.rb +15 -0
- data/lib/facter/kernelrelease.rb +42 -0
- data/lib/facter/kernelversion.rb +22 -0
- data/lib/facter/ldom.rb +47 -0
- data/lib/facter/lsbdistcodename.rb +18 -0
- data/lib/facter/lsbdistdescription.rb +21 -0
- data/lib/facter/lsbdistid.rb +18 -0
- data/lib/facter/lsbdistrelease.rb +18 -0
- data/lib/facter/lsbmajdistrelease.rb +27 -0
- data/lib/facter/lsbrelease.rb +18 -0
- data/lib/facter/macaddress.rb +97 -0
- data/lib/facter/macosx.rb +56 -0
- data/lib/facter/manufacturer.rb +68 -0
- data/lib/facter/memory.rb +162 -0
- data/lib/facter/netmask.rb +42 -0
- data/lib/facter/network.rb +20 -0
- data/lib/facter/operatingsystem.rb +121 -0
- data/lib/facter/operatingsystemmajrelease.rb +33 -0
- data/lib/facter/operatingsystemrelease.rb +226 -0
- data/lib/facter/osfamily.rb +35 -0
- data/lib/facter/path.rb +14 -0
- data/lib/facter/physicalprocessorcount.rb +84 -0
- data/lib/facter/processor.rb +183 -0
- data/lib/facter/ps.rb +30 -0
- data/lib/facter/puppetversion.rb +20 -0
- data/lib/facter/rubysitedir.rb +12 -0
- data/lib/facter/rubyversion.rb +12 -0
- data/lib/facter/selinux.rb +99 -0
- data/lib/facter/ssh.rb +72 -0
- data/lib/facter/timezone.rb +14 -0
- data/lib/facter/uniqueid.rb +4 -0
- data/lib/facter/uptime.rb +34 -0
- data/lib/facter/uptime_days.rb +15 -0
- data/lib/facter/uptime_hours.rb +15 -0
- data/lib/facter/uptime_seconds.rb +24 -0
- data/lib/facter/util/architecture.rb +19 -0
- data/lib/facter/util/collection.rb +161 -0
- data/lib/facter/util/composite_loader.rb +12 -0
- data/lib/facter/util/config.rb +61 -0
- data/lib/facter/util/confine.rb +66 -0
- data/lib/facter/util/directory_loader.rb +83 -0
- data/lib/facter/util/ec2.rb +101 -0
- data/lib/facter/util/fact.rb +204 -0
- data/lib/facter/util/file_read.rb +37 -0
- data/lib/facter/util/formatter.rb +38 -0
- data/lib/facter/util/ip.rb +285 -0
- data/lib/facter/util/ip/windows.rb +215 -0
- data/lib/facter/util/loader.rb +146 -0
- data/lib/facter/util/macaddress.rb +43 -0
- data/lib/facter/util/macosx.rb +73 -0
- data/lib/facter/util/manufacturer.rb +104 -0
- data/lib/facter/util/memory.rb +228 -0
- data/lib/facter/util/monkey_patches.rb +8 -0
- data/lib/facter/util/netmask.rb +40 -0
- data/lib/facter/util/normalization.rb +94 -0
- data/lib/facter/util/nothing_loader.rb +12 -0
- data/lib/facter/util/parser.rb +158 -0
- data/lib/facter/util/plist.rb +24 -0
- data/lib/facter/util/plist/generator.rb +228 -0
- data/lib/facter/util/plist/parser.rb +226 -0
- data/lib/facter/util/processor.rb +291 -0
- data/lib/facter/util/registry.rb +11 -0
- data/lib/facter/util/resolution.rb +152 -0
- data/lib/facter/util/solaris_zones.rb +158 -0
- data/lib/facter/util/unix_root.rb +5 -0
- data/lib/facter/util/uptime.rb +81 -0
- data/lib/facter/util/values.rb +80 -0
- data/lib/facter/util/virtual.rb +151 -0
- data/lib/facter/util/vlans.rb +24 -0
- data/lib/facter/util/windows_root.rb +37 -0
- data/lib/facter/util/wmi.rb +16 -0
- data/lib/facter/util/xendomains.rb +10 -0
- data/lib/facter/version.rb +86 -0
- data/lib/facter/virtual.rb +262 -0
- data/lib/facter/vlans.rb +17 -0
- data/lib/facter/xendomains.rb +20 -0
- data/lib/facter/zfs_version.rb +10 -0
- data/lib/facter/zonename.rb +6 -0
- data/lib/facter/zones.rb +17 -0
- data/lib/facter/zpool_version.rb +10 -0
- data/spec/fixtures/cpuinfo/amd64dual +57 -0
- data/spec/fixtures/cpuinfo/amd64quad +79 -0
- data/spec/fixtures/cpuinfo/amd64solo +23 -0
- data/spec/fixtures/cpuinfo/amd64tri +86 -0
- data/spec/fixtures/cpuinfo/amd64twentyfour +600 -0
- data/spec/fixtures/cpuinfo/bbg3-armel +12 -0
- data/spec/fixtures/cpuinfo/beaglexm-armel +12 -0
- data/spec/fixtures/cpuinfo/panda-armel +17 -0
- data/spec/fixtures/cpuinfo/ppc64 +19 -0
- data/spec/fixtures/cpuinfo/sparc +10 -0
- data/spec/fixtures/hpux/machinfo/hppa-rp4440 +26 -0
- data/spec/fixtures/hpux/machinfo/ia64-rx2620 +49 -0
- data/spec/fixtures/hpux/machinfo/ia64-rx6600 +26 -0
- data/spec/fixtures/hpux/machinfo/ia64-rx8640 +53 -0
- data/spec/fixtures/hpux/machinfo/superdome-server-SD32B +53 -0
- data/spec/fixtures/hpux/machinfo/superdome2-16s +31 -0
- data/spec/fixtures/hpux/sched.models +174 -0
- data/spec/fixtures/hpux/unistd.h +1534 -0
- data/spec/fixtures/ifconfig/bsd_ifconfig_all_with_multiple_interfaces +18 -0
- data/spec/fixtures/ifconfig/centos_5_5 +17 -0
- data/spec/fixtures/ifconfig/centos_5_5_eth0 +8 -0
- data/spec/fixtures/ifconfig/darwin_10_3_0 +26 -0
- data/spec/fixtures/ifconfig/darwin_10_3_0_en0 +6 -0
- data/spec/fixtures/ifconfig/darwin_10_6_4 +28 -0
- data/spec/fixtures/ifconfig/darwin_10_6_4_en1 +6 -0
- data/spec/fixtures/ifconfig/darwin_10_6_6_dualstack +8 -0
- data/spec/fixtures/ifconfig/darwin_10_6_6_dualstack_en1 +7 -0
- data/spec/fixtures/ifconfig/darwin_9_8_0 +26 -0
- data/spec/fixtures/ifconfig/darwin_9_8_0_en0 +6 -0
- data/spec/fixtures/ifconfig/darwin_ifconfig_all_with_multiple_interfaces +23 -0
- data/spec/fixtures/ifconfig/fedora_10 +36 -0
- data/spec/fixtures/ifconfig/fedora_10_eth0 +9 -0
- data/spec/fixtures/ifconfig/fedora_13 +18 -0
- data/spec/fixtures/ifconfig/fedora_13_eth0 +9 -0
- data/spec/fixtures/ifconfig/fedora_8 +38 -0
- data/spec/fixtures/ifconfig/fedora_8_eth0 +9 -0
- data/spec/fixtures/ifconfig/freebsd_6_0 +12 -0
- data/spec/fixtures/ifconfig/ifconfig_net_tools_1.60.txt +19 -0
- data/spec/fixtures/ifconfig/ifconfig_ubuntu_1204.txt +16 -0
- data/spec/fixtures/ifconfig/linux_ifconfig_all_with_multiple_interfaces +19 -0
- data/spec/fixtures/ifconfig/linux_ifconfig_no_addr +19 -0
- data/spec/fixtures/ifconfig/linux_ifconfig_no_mac +8 -0
- data/spec/fixtures/ifconfig/linux_ifconfig_venet +24 -0
- data/spec/fixtures/ifconfig/open_solaris_10 +12 -0
- data/spec/fixtures/ifconfig/open_solaris_b132 +20 -0
- data/spec/fixtures/ifconfig/sunos_ifconfig_all_with_multiple_interfaces +10 -0
- data/spec/fixtures/ifconfig/ubuntu_7_04 +38 -0
- data/spec/fixtures/ifconfig/ubuntu_7_04_eth0 +9 -0
- data/spec/fixtures/ldom/ldom_v1 +6 -0
- data/spec/fixtures/netstat/centos_5_5 +5 -0
- data/spec/fixtures/netstat/darwin_10_3_0 +35 -0
- data/spec/fixtures/netstat/darwin_10_6_4 +29 -0
- data/spec/fixtures/netstat/darwin_10_6_6_dualstack +34 -0
- data/spec/fixtures/netstat/darwin_9_8_0 +28 -0
- data/spec/fixtures/netstat/fedora_10 +7 -0
- data/spec/fixtures/netstat/open_solaris_10 +16 -0
- data/spec/fixtures/netstat/open_solaris_b132 +17 -0
- data/spec/fixtures/netstat/ubuntu_7_04 +7 -0
- data/spec/fixtures/processorcount/solaris-psrinfo +24 -0
- data/spec/fixtures/processorcount/solaris-sparc-kstat-cpu-info +1216 -0
- data/spec/fixtures/processorcount/solaris-x86_64-kstat-cpu-info +225 -0
- data/spec/fixtures/unit/filesystems/linux +28 -0
- data/spec/fixtures/unit/interfaces/ifconfig_net_tools_1.60.txt +19 -0
- data/spec/fixtures/unit/interfaces/ifconfig_net_tools_1.60.txt.em1 +10 -0
- data/spec/fixtures/unit/interfaces/ifconfig_net_tools_1.60.txt.lo +8 -0
- data/spec/fixtures/unit/ipaddress/ifconfig_multiple_127_addresses.txt +20 -0
- data/spec/fixtures/unit/ipaddress/ifconfig_net_tools_1.60.txt +19 -0
- data/spec/fixtures/unit/ipaddress/ifconfig_non_english_locale.txt +18 -0
- data/spec/fixtures/unit/ipaddress/ifconfig_ubuntu_1204.txt +16 -0
- data/spec/fixtures/unit/netmask/darwin_10_8_5.txt +30 -0
- data/spec/fixtures/unit/netmask/ifconfig_net_tools_1.60.txt +19 -0
- data/spec/fixtures/unit/netmask/ifconfig_ubuntu_1204.txt +16 -0
- data/spec/fixtures/unit/selinux/selinux_sestatus +6 -0
- data/spec/fixtures/unit/util/ec2/centos-arp-ec2.out +1 -0
- data/spec/fixtures/unit/util/ec2/linux-arp-ec2.out +1 -0
- data/spec/fixtures/unit/util/ec2/linux-arp-not-ec2.out +5 -0
- data/spec/fixtures/unit/util/ec2/solaris8_arp_a_not_ec2.out +7 -0
- data/spec/fixtures/unit/util/ec2/windows-2008-arp-a-not-ec2.out +6 -0
- data/spec/fixtures/unit/util/ec2/windows-2008-arp-a.out +10 -0
- data/spec/fixtures/unit/util/ip/6.0-STABLE_FreeBSD_ifconfig +12 -0
- data/spec/fixtures/unit/util/ip/Mac_OS_X_10.5.5_ifconfig +26 -0
- data/spec/fixtures/unit/util/ip/darwin_ifconfig_all_with_multiple_interfaces +10 -0
- data/spec/fixtures/unit/util/ip/darwin_ifconfig_single_interface +6 -0
- data/spec/fixtures/unit/util/ip/debian_kfreebsd_ifconfig +40 -0
- data/spec/fixtures/unit/util/ip/hpux_1111_ifconfig_lan0 +2 -0
- data/spec/fixtures/unit/util/ip/hpux_1111_ifconfig_lan1 +2 -0
- data/spec/fixtures/unit/util/ip/hpux_1111_ifconfig_lo0 +2 -0
- data/spec/fixtures/unit/util/ip/hpux_1111_lanscan +5 -0
- data/spec/fixtures/unit/util/ip/hpux_1111_netstat_in +4 -0
- data/spec/fixtures/unit/util/ip/hpux_1131_asterisk_ifconfig_lan0 +2 -0
- data/spec/fixtures/unit/util/ip/hpux_1131_asterisk_ifconfig_lan1 +2 -0
- data/spec/fixtures/unit/util/ip/hpux_1131_asterisk_ifconfig_lo0 +2 -0
- data/spec/fixtures/unit/util/ip/hpux_1131_asterisk_lanscan +5 -0
- data/spec/fixtures/unit/util/ip/hpux_1131_asterisk_netstat_in +4 -0
- data/spec/fixtures/unit/util/ip/hpux_1131_ifconfig_lan0 +2 -0
- data/spec/fixtures/unit/util/ip/hpux_1131_ifconfig_lan1 +2 -0
- data/spec/fixtures/unit/util/ip/hpux_1131_ifconfig_lo0 +2 -0
- data/spec/fixtures/unit/util/ip/hpux_1131_lanscan +4 -0
- data/spec/fixtures/unit/util/ip/hpux_1131_netstat_in +4 -0
- data/spec/fixtures/unit/util/ip/hpux_1131_nic_bonding_ifconfig_lan1 +2 -0
- data/spec/fixtures/unit/util/ip/hpux_1131_nic_bonding_ifconfig_lan4 +2 -0
- data/spec/fixtures/unit/util/ip/hpux_1131_nic_bonding_ifconfig_lan4_1 +2 -0
- data/spec/fixtures/unit/util/ip/hpux_1131_nic_bonding_ifconfig_lo0 +2 -0
- data/spec/fixtures/unit/util/ip/hpux_1131_nic_bonding_lanscan +9 -0
- data/spec/fixtures/unit/util/ip/hpux_1131_nic_bonding_netstat_in +6 -0
- data/spec/fixtures/unit/util/ip/linux_2_6_35_proc_net_bonding_bond0 +19 -0
- data/spec/fixtures/unit/util/ip/linux_get_single_interface_eth0 +10 -0
- data/spec/fixtures/unit/util/ip/linux_get_single_interface_ib0 +8 -0
- data/spec/fixtures/unit/util/ip/linux_get_single_interface_lo +9 -0
- data/spec/fixtures/unit/util/ip/linux_ifconfig_all_with_single_interface +18 -0
- data/spec/fixtures/unit/util/ip/linux_ifconfig_ib0 +8 -0
- data/spec/fixtures/unit/util/ip/solaris_ifconfig_all_with_multiple_interfaces +8 -0
- data/spec/fixtures/unit/util/ip/solaris_ifconfig_single_interface +3 -0
- data/spec/fixtures/unit/util/ip/windows_netsh_all_interfaces +12 -0
- data/spec/fixtures/unit/util/ip/windows_netsh_single_interface +7 -0
- data/spec/fixtures/unit/util/ip/windows_netsh_single_interface6 +18 -0
- data/spec/fixtures/unit/util/loader/nosuchfact.rb +1 -0
- data/spec/fixtures/unit/util/manufacturer/freebsd_dmidecode +42 -0
- data/spec/fixtures/unit/util/manufacturer/intel_linux_dmidecode +549 -0
- data/spec/fixtures/unit/util/manufacturer/linux_dmidecode_with_spaces +60 -0
- data/spec/fixtures/unit/util/manufacturer/opensolaris_smbios +33 -0
- data/spec/fixtures/unit/util/manufacturer/solaris_sunfire_v120_prtdiag +33 -0
- data/spec/fixtures/unit/util/manufacturer/solaris_t5220_prtdiag +136 -0
- data/spec/fixtures/unit/util/processor/solaris-i86pc +28 -0
- data/spec/fixtures/unit/util/processor/solaris-sun4u +151 -0
- data/spec/fixtures/unit/util/processor/x86-pentium2 +41 -0
- data/spec/fixtures/unit/util/uptime/kstat_boot_time +1 -0
- data/spec/fixtures/unit/util/uptime/sysctl_kern_boottime_darwin +1 -0
- data/spec/fixtures/unit/util/uptime/sysctl_kern_boottime_openbsd +1 -0
- data/spec/fixtures/unit/util/uptime/ubuntu_proc_uptime +1 -0
- data/spec/fixtures/unit/util/virtual/invalid_unicode_dmi_entries +0 -0
- data/spec/fixtures/unit/util/virtual/solaris10_proc_self_status1 +0 -0
- data/spec/fixtures/unit/util/vlans/linux_vlan_config +6 -0
- data/spec/fixtures/unit/util/xendomains/xendomains +4 -0
- data/spec/fixtures/unit/virtual/sysfs_dmi_entries_raw.txt +0 -0
- data/spec/fixtures/unit/zfs_version/freebsd_8.2 +14 -0
- data/spec/fixtures/unit/zfs_version/freebsd_9.0 +13 -0
- data/spec/fixtures/unit/zfs_version/linux-fuse_0.6.9 +14 -0
- data/spec/fixtures/unit/zfs_version/solaris_10 +10 -0
- data/spec/fixtures/unit/zfs_version/solaris_11 +12 -0
- data/spec/fixtures/unit/zpool_version/freebsd_8.2 +26 -0
- data/spec/fixtures/unit/zpool_version/freebsd_9.0 +38 -0
- data/spec/fixtures/unit/zpool_version/linux-fuse_0.6.9 +35 -0
- data/spec/fixtures/unit/zpool_version/solaris_10 +31 -0
- data/spec/fixtures/unit/zpool_version/solaris_11 +43 -0
- data/spec/fixtures/virtual/proc_self_status/vserver_2_1/guest +37 -0
- data/spec/fixtures/virtual/proc_self_status/vserver_2_1/host +36 -0
- data/spec/fixtures/virtual/proc_self_status/vserver_2_3/guest +39 -0
- data/spec/fixtures/virtual/proc_self_status/vserver_2_3/host +39 -0
- data/spec/integration/facter_spec.rb +39 -0
- data/spec/lib/facter_spec/cpuinfo.rb +15 -0
- data/spec/lib/facter_spec/windows_network.rb +64 -0
- data/spec/puppetlabs_spec/files.rb +57 -0
- data/spec/puppetlabs_spec/fixtures.rb +49 -0
- data/spec/puppetlabs_spec/matchers.rb +87 -0
- data/spec/puppetlabs_spec/verbose.rb +9 -0
- data/spec/puppetlabs_spec_helper.rb +26 -0
- data/spec/shared_contexts/platform.rb +55 -0
- data/spec/shared_formats/parses.rb +3 -0
- data/spec/spec_helper.rb +75 -0
- data/spec/unit/application_spec.rb +101 -0
- data/spec/unit/architecture_spec.rb +63 -0
- data/spec/unit/blockdevices_spec.rb +109 -0
- data/spec/unit/core/aggregate_spec.rb +125 -0
- data/spec/unit/core/directed_graph_spec.rb +79 -0
- data/spec/unit/core/execution/base_spec.rb +119 -0
- data/spec/unit/core/execution/posix_spec.rb +86 -0
- data/spec/unit/core/execution/windows_spec.rb +106 -0
- data/spec/unit/core/execution_spec.rb +37 -0
- data/spec/unit/core/logging_spec.rb +104 -0
- data/spec/unit/core/resolvable_spec.rb +81 -0
- data/spec/unit/core/suitable_spec.rb +96 -0
- data/spec/unit/domain_spec.rb +310 -0
- data/spec/unit/ec2_spec.rb +187 -0
- data/spec/unit/facter_spec.rb +108 -0
- data/spec/unit/filesystems_spec.rb +50 -0
- data/spec/unit/hardwareisa_spec.rb +41 -0
- data/spec/unit/hardwaremodel_spec.rb +56 -0
- data/spec/unit/hostname_spec.rb +40 -0
- data/spec/unit/id_spec.rb +29 -0
- data/spec/unit/interfaces_spec.rb +57 -0
- data/spec/unit/ipaddress6_spec.rb +161 -0
- data/spec/unit/ipaddress_spec.rb +114 -0
- data/spec/unit/kernel_spec.rb +24 -0
- data/spec/unit/kernelmajversion_spec.rb +17 -0
- data/spec/unit/kernelrelease_spec.rb +53 -0
- data/spec/unit/kernelversion_spec.rb +32 -0
- data/spec/unit/ldom_spec.rb +74 -0
- data/spec/unit/lsbdistcodename_spec.rb +25 -0
- data/spec/unit/lsbdistdescription_spec.rb +25 -0
- data/spec/unit/lsbdistid_spec.rb +25 -0
- data/spec/unit/lsbdistrelease_spec.rb +25 -0
- data/spec/unit/lsbmajdistrelease_spec.rb +13 -0
- data/spec/unit/lsbrelease_spec.rb +25 -0
- data/spec/unit/macaddress_spec.rb +61 -0
- data/spec/unit/manufacturer_spec.rb +115 -0
- data/spec/unit/memory_spec.rb +539 -0
- data/spec/unit/netmask_spec.rb +95 -0
- data/spec/unit/operatingsystem_spec.rb +141 -0
- data/spec/unit/operatingsystemmajrelease_spec.rb +16 -0
- data/spec/unit/operatingsystemrelease_spec.rb +226 -0
- data/spec/unit/physicalprocessorcount_spec.rb +76 -0
- data/spec/unit/processor_spec.rb +393 -0
- data/spec/unit/ps_spec.rb +42 -0
- data/spec/unit/selinux_spec.rb +114 -0
- data/spec/unit/ssh_spec.rb +77 -0
- data/spec/unit/uniqueid_spec.rb +27 -0
- data/spec/unit/uptime_spec.rb +110 -0
- data/spec/unit/util/collection_spec.rb +258 -0
- data/spec/unit/util/config_spec.rb +84 -0
- data/spec/unit/util/confine_spec.rb +148 -0
- data/spec/unit/util/directory_loader_spec.rb +88 -0
- data/spec/unit/util/ec2_spec.rb +180 -0
- data/spec/unit/util/fact_spec.rb +142 -0
- data/spec/unit/util/file_read_spec.rb +29 -0
- data/spec/unit/util/ip/windows_spec.rb +80 -0
- data/spec/unit/util/ip_spec.rb +463 -0
- data/spec/unit/util/loader_spec.rb +286 -0
- data/spec/unit/util/macaddress_spec.rb +141 -0
- data/spec/unit/util/macosx_spec.rb +113 -0
- data/spec/unit/util/manufacturer_spec.rb +179 -0
- data/spec/unit/util/normalization_spec.rb +113 -0
- data/spec/unit/util/parser_spec.rb +200 -0
- data/spec/unit/util/processor_spec.rb +92 -0
- data/spec/unit/util/registry_spec.rb +76 -0
- data/spec/unit/util/resolution_spec.rb +129 -0
- data/spec/unit/util/solaris_zones_spec.rb +127 -0
- data/spec/unit/util/uptime_spec.rb +126 -0
- data/spec/unit/util/values_spec.rb +131 -0
- data/spec/unit/util/virtual_spec.rb +294 -0
- data/spec/unit/util/vlans_spec.rb +12 -0
- data/spec/unit/util/wmi_spec.rb +19 -0
- data/spec/unit/util/xendomains_spec.rb +21 -0
- data/spec/unit/version_spec.rb +42 -0
- data/spec/unit/virtual_spec.rb +470 -0
- data/spec/unit/zfs_version_spec.rb +75 -0
- data/spec/unit/zonename_spec.rb +14 -0
- data/spec/unit/zones_spec.rb +55 -0
- data/spec/unit/zpool_version_spec.rb +75 -0
- data/spec/watchr.rb +125 -0
- metadata +674 -0
@@ -0,0 +1,42 @@
|
|
1
|
+
#! /usr/bin/env ruby
|
2
|
+
|
3
|
+
require 'spec_helper'
|
4
|
+
|
5
|
+
describe "ps facts" do
|
6
|
+
|
7
|
+
it "should return busybox style ps www on OpenWrt" do
|
8
|
+
Facter.fact(:operatingsystem).stubs(:value).returns 'OpenWrt'
|
9
|
+
Facter.fact(:ps).value.should == 'ps www'
|
10
|
+
end
|
11
|
+
|
12
|
+
[
|
13
|
+
'FreeBSD',
|
14
|
+
'NetBSD',
|
15
|
+
'OpenBSD',
|
16
|
+
'Darwin',
|
17
|
+
'DragonFly'
|
18
|
+
].each do |os|
|
19
|
+
it "should return unix style ps on operatingsystem #{os}" do
|
20
|
+
Facter.fact(:operatingsystem).stubs(:value).returns os
|
21
|
+
Facter.fact(:ps).value.should == 'ps auxwww'
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
# Other Linux Distros should return a ps -ef
|
26
|
+
[
|
27
|
+
'RedHat',
|
28
|
+
'Debian',
|
29
|
+
].each do |os|
|
30
|
+
it "should return gnu/linux style ps -ef on operatingsystem #{os}" do
|
31
|
+
Facter.fact(:operatingsystem).stubs(:value).returns os
|
32
|
+
Facter.fact(:ps).value.should == 'ps -ef'
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
it "should return tasklist.exe on Windows" do
|
37
|
+
Facter.fact(:operatingsystem).stubs(:value).returns 'windows'
|
38
|
+
Facter.fact(:ps).value.should == 'tasklist.exe'
|
39
|
+
end
|
40
|
+
|
41
|
+
end
|
42
|
+
|
@@ -0,0 +1,114 @@
|
|
1
|
+
#! /usr/bin/env ruby
|
2
|
+
|
3
|
+
require 'spec_helper'
|
4
|
+
|
5
|
+
describe "SELinux facts" do
|
6
|
+
describe "should detect if SELinux is enabled" do
|
7
|
+
before :each do
|
8
|
+
Facter.fact(:kernel).stubs(:value).returns("Linux")
|
9
|
+
end
|
10
|
+
|
11
|
+
it "and return true with default /selinux" do
|
12
|
+
mounts_does_not_exist
|
13
|
+
|
14
|
+
File.stubs(:read).with("/proc/self/attr/current").returns("notkernel")
|
15
|
+
FileTest.expects(:exists?).with("/proc/self/attr/current").returns true
|
16
|
+
File.expects(:read).with("/proc/self/attr/current").returns("kernel")
|
17
|
+
|
18
|
+
FileTest.expects(:exists?).with("/selinux/enforce").returns true
|
19
|
+
|
20
|
+
Facter.fact(:selinux).value.should == "true"
|
21
|
+
end
|
22
|
+
|
23
|
+
it "and return true with selinuxfs path from /proc" do
|
24
|
+
selinux_root = "/sys/fs/selinux"
|
25
|
+
mounts_contains("selinuxfs #{selinux_root} selinuxfs rw,relatime 0 0")
|
26
|
+
|
27
|
+
FileTest.expects(:exists?).with("#{selinux_root}/enforce").returns true
|
28
|
+
|
29
|
+
FileTest.expects(:exists?).with("/proc/self/attr/current").returns true
|
30
|
+
File.expects(:read).with("/proc/self/attr/current").returns("kernel")
|
31
|
+
|
32
|
+
Facter.fact(:selinux).value.should == "true"
|
33
|
+
end
|
34
|
+
|
35
|
+
it "and return true with multiple selinuxfs mounts from /proc" do
|
36
|
+
selinux_root = "/sys/fs/selinux"
|
37
|
+
mounts_contains(
|
38
|
+
"selinuxfs #{selinux_root} selinuxfs rw,relatime 0 0",
|
39
|
+
"selinuxfs /var/tmp/imgcreate-R2wmE6/install_root/sys/fs/selinux selinuxfs rw,relatime 0 0"
|
40
|
+
)
|
41
|
+
|
42
|
+
FileTest.expects(:exists?).with("#{selinux_root}/enforce").returns true
|
43
|
+
|
44
|
+
FileTest.expects(:exists?).with("/proc/self/attr/current").returns true
|
45
|
+
File.expects(:read).with("/proc/self/attr/current").returns("kernel")
|
46
|
+
|
47
|
+
Facter.fact(:selinux).value.should == "true"
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
describe "when selinux is present" do
|
52
|
+
before :each do
|
53
|
+
Facter.fact(:selinux).stubs(:value).returns("true")
|
54
|
+
end
|
55
|
+
|
56
|
+
it "should return true if SELinux policy enabled" do
|
57
|
+
mounts_does_not_exist
|
58
|
+
|
59
|
+
FileTest.expects(:exists?).with("/selinux/enforce").returns true
|
60
|
+
File.expects(:read).with("/selinux/enforce").returns("1")
|
61
|
+
|
62
|
+
Facter.fact(:selinux_enforced).value.should == "true"
|
63
|
+
end
|
64
|
+
|
65
|
+
it "should return an SELinux policy version" do
|
66
|
+
mounts_does_not_exist
|
67
|
+
|
68
|
+
FileTest.expects(:exists?).with("/selinux/policyvers").returns true
|
69
|
+
File.expects(:read).with("/selinux/policyvers").returns("1")
|
70
|
+
|
71
|
+
Facter.fact(:selinux_policyversion).value.should == "1"
|
72
|
+
end
|
73
|
+
|
74
|
+
it "it should return 'unknown' SELinux policy version if /selinux/policyvers doesn't exist" do
|
75
|
+
mounts_does_not_exist
|
76
|
+
|
77
|
+
FileTest.expects(:exists?).with("/selinux/policyvers").returns false
|
78
|
+
|
79
|
+
Facter.fact(:selinux_policyversion).value.should == "unknown"
|
80
|
+
end
|
81
|
+
|
82
|
+
it "should return the SELinux current mode" do
|
83
|
+
sestatus_is(my_fixture_read("selinux_sestatus"))
|
84
|
+
|
85
|
+
Facter.fact(:selinux_current_mode).value.should == "permissive"
|
86
|
+
end
|
87
|
+
|
88
|
+
it "should return the SELinux mode from the configuration file" do
|
89
|
+
sestatus_is(my_fixture_read("selinux_sestatus"))
|
90
|
+
|
91
|
+
Facter.fact(:selinux_config_mode).value.should == "permissive"
|
92
|
+
end
|
93
|
+
|
94
|
+
it "should return the SELinux configuration file policy" do
|
95
|
+
sestatus_is(my_fixture_read("selinux_sestatus"))
|
96
|
+
|
97
|
+
Facter.fact(:selinux_config_policy).value.should == "targeted"
|
98
|
+
end
|
99
|
+
end
|
100
|
+
|
101
|
+
def sestatus_is(status)
|
102
|
+
Facter::Core::Execution.stubs(:exec).with('/usr/sbin/sestatus').returns(status)
|
103
|
+
end
|
104
|
+
|
105
|
+
def mounts_does_not_exist
|
106
|
+
FileTest.stubs(:exists?).with("/proc/self/mounts").returns false
|
107
|
+
end
|
108
|
+
|
109
|
+
def mounts_contains(*lines)
|
110
|
+
FileTest.expects(:exists?).with("/proc/self/mounts").returns true
|
111
|
+
Facter::Core::Execution.expects(:exec).with("cat /proc/self/mounts").returns(lines.join("\n"))
|
112
|
+
end
|
113
|
+
|
114
|
+
end
|
@@ -0,0 +1,77 @@
|
|
1
|
+
#! /usr/bin/env ruby
|
2
|
+
|
3
|
+
require 'spec_helper'
|
4
|
+
require 'facter/ssh'
|
5
|
+
require 'pathname'
|
6
|
+
|
7
|
+
describe "SSH fact" do
|
8
|
+
|
9
|
+
dirs = [ '/etc/ssh',
|
10
|
+
'/usr/local/etc/ssh',
|
11
|
+
'/etc',
|
12
|
+
'/usr/local/etc',
|
13
|
+
'/etc/opt/ssh',
|
14
|
+
]
|
15
|
+
|
16
|
+
before :each do
|
17
|
+
# We need these facts loaded, but they belong to a file with a
|
18
|
+
# different name, so load the file explicitly.
|
19
|
+
Facter.collection.internal_loader.load(:ssh)
|
20
|
+
end
|
21
|
+
|
22
|
+
# fingerprints extracted from ssh-keygen -r '' -f /etc/ssh/ssh_host_dsa_key.pub
|
23
|
+
{ 'SSHRSAKey' => [ 'ssh_host_rsa_key.pub' , "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDrs+KtR8hjasELsyCiiBplUeIi77hEHzTSQt1ALG7N4IgtMg27ZAcq0tl2/O9ZarQuClc903pgionbM9Q98CtAIoqgJwdtsor7ETRmzwrcY/mvI7ne51UzQy4Eh9WrplfpNyg+EVO0FUC7mBcay6JY30QKasePp+g4MkwK5cuTzOCzd9up9KELonlH7tTm2L0YI4HhZugwVoTFulCAZvPICxSk1B/fEKyGSZVfY/UxZNqg9g2Wyvq5u40xQ5eO882UwhB3w4IbmRnPKcyotAcqOJxA7hToMKtEmFct+vjHE8T37w8axE/1X9mdvy8IZbkEBL1cupqqb8a8vU1QTg1z", "SSHFP 1 1 1e4f163a1747d0d1a08a29972c9b5d94ee5705d0\nSSHFP 1 2 4e834c91e423d6085ed6dfb880a59e2f1b04f17c1dc17da07708af67c5ab6045" ],
|
24
|
+
'SSHDSAKey' => [ 'ssh_host_dsa_key.pub' , "ssh-dss AAAAB3NzaC1kc3MAAACBAKjmRez14aZT6OKhHrsw19s7u30AdghwHFQbtC+L781YjJ3UV0/WQoZ8NaDL4ovuvW23RuO49tsqSNcVHg+PtRiN2iTVAS2h55TFhaPKhTs+i0NH3p3Ze8LNSYuz8uK7a+nTxysz47GYTHiE1ke8KXe5wGKDO1TO/MUgpDbwx72LAAAAFQD9yMJCnZMiKzA7J1RNkwvgCyBKSQAAAIAtWBAsuRM0F2fdCe+F/JmgyryQmRIT5vP8E1ww3t3ywdLHklN7UMkaEKBW/TN/jj1JOGXtZ2v5XI+0VNoNKD/7dnCGzNViRT/jjfyVi6l5UMg4Q52Gv0RXJoBJpxNqFOU2niSsy8hioyE39W6LJYWJtQozGpH/KKgkCSvxBn5hlAAAAIB1yo/YD0kQICOO0KE+UMMaKtV7FwyedFJsxsWYwZfHXGwWskf0d2+lPhd9qwdbmSvySE8Qrlvu+W+X8AipwGkItSnj16ORF8kO3lfABa+7L4BLDtumt7ybjBPcHOy3n28dd07TmMtyWvLjOb0mcxPo+TwDLtHd3L/3C1Dh41jRPg==\n", "SSHFP 2 1 f63dfe8da99f50ffbcfa40a61161cee29d109f70\nSSHFP 2 2 5f57aa6be9baddd71b6049ed5d8639664a7ddf92ce293e3887f16ad0f2d459d9" ],
|
25
|
+
'SSHECDSAKey' => [ 'ssh_host_ecdsa_key.pub' , 'ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBIuKHtgXQUIrXSVNKC7uY+ZOF7jjfqYNU7Cb/IncDOZ7jW44dxsfBzRJwS5sTHERjBinJskY87mmwY07NFF5GoE=', "SSHFP 3 1 091a088fd3500ad9e35ce201c5101646cbf6ff98\nSSHFP 3 2 1dd2aa8f29b539337316e2862b28c196c68ffe0af78fccf9e50625635677e50f"],
|
26
|
+
'SSHED25519Key' => [ 'ssh_host_ed25519_key.pub' , 'ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIAkxkUMKV0H7Z0KDgfMs+iKQFwJhKUDg8GImV/BwN48X', "SSHFP 4 1 216d49ff3581a42c7a2d4064f2356b375367d493\nSSHFP 4 2 95e3aa6f86bc2dcc46f1e9e5ea930c790afc0669fcf237c4d7b0c8e386ef2790"]
|
27
|
+
}.each_pair do |fact, data|
|
28
|
+
describe "#{fact}" do
|
29
|
+
let(:filename) { data[0] }
|
30
|
+
let(:contents) { data[1] }
|
31
|
+
let(:fingerprint) { data[2] }
|
32
|
+
let(:fingerprint_fact) { "SSHFP_#{fact[3..-4]}" }
|
33
|
+
let(:private_key) { /AAAA\S+/.match(contents).to_s }
|
34
|
+
|
35
|
+
# Before we start testing, we'll say that the file
|
36
|
+
# doesn't exist in any of our search locations.
|
37
|
+
# Then, when we test a specific directory, we'll
|
38
|
+
# toggle just that one on.
|
39
|
+
# This doesn't test the search order, but it does
|
40
|
+
# make testing each of the individual cases *way*
|
41
|
+
# easier. --jeffweiss 24 May 2012
|
42
|
+
before(:each) do
|
43
|
+
dirs.each do |dir|
|
44
|
+
full_path = File.join(dir, filename)
|
45
|
+
FileTest.stubs(:file?).with(full_path).returns false
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
# Now, let's go through each and individually flip then
|
50
|
+
# on for that test.
|
51
|
+
dirs.each do |dir|
|
52
|
+
describe "when data is in #{dir}" do
|
53
|
+
let(:full_path) { File.join(dir, filename) }
|
54
|
+
before(:each) do
|
55
|
+
full_path = File.join(dir, filename)
|
56
|
+
FileTest.stubs(:file?).with(full_path).returns true
|
57
|
+
end
|
58
|
+
|
59
|
+
it "should find in #{dir}" do
|
60
|
+
FileTest.expects(:file?).with(full_path)
|
61
|
+
Facter.fact(fact).value
|
62
|
+
end
|
63
|
+
|
64
|
+
it "should match the contents" do
|
65
|
+
File.expects(:read).with(full_path).at_least_once.returns contents
|
66
|
+
Facter.fact(fact).value.should == private_key
|
67
|
+
end
|
68
|
+
|
69
|
+
it "should have matching fingerprint" do
|
70
|
+
File.expects(:read).with(full_path).at_least_once.returns contents
|
71
|
+
Facter.fact(fingerprint_fact).value.should == fingerprint
|
72
|
+
end
|
73
|
+
end
|
74
|
+
end
|
75
|
+
end
|
76
|
+
end
|
77
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require 'spec_helper'
|
4
|
+
require 'facter'
|
5
|
+
|
6
|
+
describe "Uniqueid fact" do
|
7
|
+
it "should match hostid on Solaris" do
|
8
|
+
Facter.fact(:kernel).stubs(:value).returns("SunOS")
|
9
|
+
Facter::Core::Execution.stubs(:exec).with("hostid").returns("Larry")
|
10
|
+
|
11
|
+
Facter.fact(:uniqueid).value.should == "Larry"
|
12
|
+
end
|
13
|
+
|
14
|
+
it "should match hostid on Linux" do
|
15
|
+
Facter.fact(:kernel).stubs(:value).returns("Linux")
|
16
|
+
Facter::Core::Execution.stubs(:exec).with("hostid").returns("Curly")
|
17
|
+
|
18
|
+
Facter.fact(:uniqueid).value.should == "Curly"
|
19
|
+
end
|
20
|
+
|
21
|
+
it "should match hostid on AIX" do
|
22
|
+
Facter.fact(:kernel).stubs(:value).returns("AIX")
|
23
|
+
Facter::Core::Execution.stubs(:exec).with("hostid").returns("Moe")
|
24
|
+
|
25
|
+
Facter.fact(:uniqueid).value.should == "Moe"
|
26
|
+
end
|
27
|
+
end
|
@@ -0,0 +1,110 @@
|
|
1
|
+
#! /usr/bin/env ruby
|
2
|
+
|
3
|
+
require 'spec_helper'
|
4
|
+
require 'facter/util/uptime'
|
5
|
+
|
6
|
+
describe "uptime facts:" do
|
7
|
+
before { Facter.clear }
|
8
|
+
after { Facter.clear }
|
9
|
+
|
10
|
+
describe "when uptime information is available" do
|
11
|
+
describe "uptime" do
|
12
|
+
test_cases = [
|
13
|
+
[60 * 60 * 24 * 3, '3 days'],
|
14
|
+
[60 * 60 * 24 * 3 + 25, '3 days'],
|
15
|
+
[60 * 60 * 24 * 1, '1 day'],
|
16
|
+
[60 * 60 * 24 * 1 + 25, '1 day'],
|
17
|
+
[60 * (60 * 3 + 45), '3:45 hours'],
|
18
|
+
[60 * (60 * 3 + 4), '3:04 hours'],
|
19
|
+
[60 * 60, '1:00 hours'],
|
20
|
+
[60 * 35, '0:35 hours']
|
21
|
+
]
|
22
|
+
|
23
|
+
test_cases.each do |seconds, expected|
|
24
|
+
it "should return #{expected.inspect} for #{seconds} seconds" do
|
25
|
+
Facter::Util::Uptime.stubs(:get_uptime_seconds_unix).returns(seconds)
|
26
|
+
Facter::Util::Uptime.stubs(:get_uptime_seconds_win).returns(seconds)
|
27
|
+
|
28
|
+
Facter.fact(:uptime).value.should == expected
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
end
|
34
|
+
|
35
|
+
describe "when uptime information is available" do
|
36
|
+
before do
|
37
|
+
Facter::Util::Uptime.stubs(:get_uptime_seconds_unix).returns(60 * 60 * 24 + 23)
|
38
|
+
Facter::Util::Uptime.stubs(:get_uptime_seconds_win).returns(60 * 60 * 24 + 23)
|
39
|
+
end
|
40
|
+
|
41
|
+
describe "uptime_seconds" do
|
42
|
+
it "should return the uptime in seconds" do
|
43
|
+
Facter.fact(:uptime_seconds).value.should == 60 * 60 * 24 + 23
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
describe "uptime_hours" do
|
48
|
+
it "should return the uptime in hours" do
|
49
|
+
Facter.fact(:uptime_hours).value.should == 24
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
describe "uptime_days" do
|
54
|
+
it "should return the uptime in days" do
|
55
|
+
Facter.fact(:uptime_days).value.should == 1
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
describe "when uptime information is not available" do
|
61
|
+
before do
|
62
|
+
Facter::Util::Uptime.stubs(:get_uptime_seconds_unix).returns(nil)
|
63
|
+
Facter::Util::Uptime.stubs(:get_uptime_seconds_win).returns(nil)
|
64
|
+
$stderr, @old = StringIO.new, $stderr
|
65
|
+
end
|
66
|
+
|
67
|
+
after do
|
68
|
+
$stderr = @old
|
69
|
+
end
|
70
|
+
|
71
|
+
describe "uptime" do
|
72
|
+
it "should return 'unknown'" do
|
73
|
+
Facter.fact(:uptime).value.should == "unknown"
|
74
|
+
end
|
75
|
+
end
|
76
|
+
|
77
|
+
describe "uptime_seconds" do
|
78
|
+
it "should return nil" do
|
79
|
+
Facter.fact(:uptime_seconds).value.should == nil
|
80
|
+
end
|
81
|
+
|
82
|
+
it "should not print a warn message to stderr" do
|
83
|
+
Facter.fact(:uptime_seconds).value
|
84
|
+
$stderr.string.should == ""
|
85
|
+
end
|
86
|
+
end
|
87
|
+
|
88
|
+
describe "uptime_hours" do
|
89
|
+
it "should return nil" do
|
90
|
+
Facter.fact(:uptime_hours).value.should == nil
|
91
|
+
end
|
92
|
+
|
93
|
+
it "should not print a warn message to stderr" do
|
94
|
+
Facter.fact(:uptime_hours).value
|
95
|
+
$stderr.string.should == ""
|
96
|
+
end
|
97
|
+
end
|
98
|
+
|
99
|
+
describe "uptime_days" do
|
100
|
+
it "should return nil" do
|
101
|
+
Facter.fact(:uptime_days).value.should == nil
|
102
|
+
end
|
103
|
+
|
104
|
+
it "should not print a warn message to stderr" do
|
105
|
+
Facter.fact(:uptime_days).value
|
106
|
+
$stderr.string.should == ""
|
107
|
+
end
|
108
|
+
end
|
109
|
+
end
|
110
|
+
end
|
@@ -0,0 +1,258 @@
|
|
1
|
+
#! /usr/bin/env ruby
|
2
|
+
|
3
|
+
require 'spec_helper'
|
4
|
+
require 'facter/util/collection'
|
5
|
+
require 'facter/util/nothing_loader'
|
6
|
+
|
7
|
+
describe Facter::Util::Collection do
|
8
|
+
let(:external_loader) { Facter::Util::NothingLoader.new }
|
9
|
+
let(:internal_loader) do
|
10
|
+
load = Facter::Util::Loader.new
|
11
|
+
load.stubs(:load).returns nil
|
12
|
+
load.stubs(:load_all).returns nil
|
13
|
+
load
|
14
|
+
end
|
15
|
+
let(:collection) { Facter::Util::Collection.new(internal_loader, external_loader) }
|
16
|
+
|
17
|
+
it "should delegate its load_all method to its loader" do
|
18
|
+
internal_loader.expects(:load_all)
|
19
|
+
|
20
|
+
collection.load_all
|
21
|
+
end
|
22
|
+
|
23
|
+
describe "when adding facts" do
|
24
|
+
it "should create a new fact if no fact with the same name already exists" do
|
25
|
+
collection.add(:myname)
|
26
|
+
collection.fact(:myname).name.should == :myname
|
27
|
+
end
|
28
|
+
|
29
|
+
it "should accept options" do
|
30
|
+
collection.add(:myname, :timeout => 1) { }
|
31
|
+
end
|
32
|
+
|
33
|
+
it "passes resolution specific options to the fact" do
|
34
|
+
fact = Facter::Util::Fact.new(:myname)
|
35
|
+
Facter::Util::Fact.expects(:new).with(:myname, {:timeout => 'myval'}).returns fact
|
36
|
+
|
37
|
+
fact.expects(:add).with({:timeout => 'myval'})
|
38
|
+
|
39
|
+
collection.add(:myname, :timeout => "myval") {}
|
40
|
+
end
|
41
|
+
|
42
|
+
describe "and a block is provided" do
|
43
|
+
it "should use the block to add a resolution to the fact" do
|
44
|
+
fact = mock 'fact'
|
45
|
+
fact.stubs(:extract_ldapname_option!)
|
46
|
+
Facter::Util::Fact.expects(:new).returns fact
|
47
|
+
|
48
|
+
fact.expects(:add)
|
49
|
+
|
50
|
+
collection.add(:myname) {}
|
51
|
+
end
|
52
|
+
|
53
|
+
it "should discard resolutions that throw an exception when added" do
|
54
|
+
Facter.expects(:warn).with(regexp_matches(/Unable to add resolve .* kaboom!/))
|
55
|
+
expect {
|
56
|
+
collection.add('yay') do
|
57
|
+
raise "kaboom!"
|
58
|
+
end
|
59
|
+
}.to_not raise_error
|
60
|
+
expect(collection.value('yay')).to be_nil
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
describe "when only defining facts" do
|
66
|
+
it "creates a new fact if no such fact exists" do
|
67
|
+
fact = Facter::Util::Fact.new(:newfact)
|
68
|
+
Facter::Util::Fact.expects(:new).with(:newfact, {}).returns fact
|
69
|
+
expect(collection.define_fact(:newfact)).to equal fact
|
70
|
+
end
|
71
|
+
|
72
|
+
it "returns an existing fact if the fact has already been defined" do
|
73
|
+
fact = collection.define_fact(:newfact)
|
74
|
+
expect(collection.define_fact(:newfact)).to equal fact
|
75
|
+
end
|
76
|
+
|
77
|
+
it "passes options to newly generated facts" do
|
78
|
+
Facter.stubs(:warnonce)
|
79
|
+
fact = collection.define_fact(:newfact, :ldapname => 'NewFact')
|
80
|
+
expect(fact.ldapname).to eq 'NewFact'
|
81
|
+
end
|
82
|
+
|
83
|
+
it "logs a warning if the fact could not be defined" do
|
84
|
+
Facter.expects(:warn).with("Unable to add fact newfact: kaboom!")
|
85
|
+
|
86
|
+
collection.define_fact(:newfact) do
|
87
|
+
raise "kaboom!"
|
88
|
+
end
|
89
|
+
end
|
90
|
+
end
|
91
|
+
|
92
|
+
describe "when retrieving facts" do
|
93
|
+
before do
|
94
|
+
@fact = collection.add("YayNess")
|
95
|
+
end
|
96
|
+
|
97
|
+
it "should return the fact instance specified by the name" do
|
98
|
+
collection.fact("YayNess").should equal(@fact)
|
99
|
+
end
|
100
|
+
|
101
|
+
it "should be case-insensitive" do
|
102
|
+
collection.fact("yayness").should equal(@fact)
|
103
|
+
end
|
104
|
+
|
105
|
+
it "should treat strings and symbols equivalently" do
|
106
|
+
collection.fact(:yayness).should equal(@fact)
|
107
|
+
end
|
108
|
+
|
109
|
+
it "should use its loader to try to load the fact if no fact can be found" do
|
110
|
+
collection.internal_loader.expects(:load).with(:testing)
|
111
|
+
collection.fact("testing")
|
112
|
+
end
|
113
|
+
|
114
|
+
it "should return nil if it cannot find or load the fact" do
|
115
|
+
collection.internal_loader.expects(:load).with(:testing)
|
116
|
+
collection.fact("testing").should be_nil
|
117
|
+
end
|
118
|
+
end
|
119
|
+
|
120
|
+
describe "when returning a fact's value" do
|
121
|
+
before do
|
122
|
+
@fact = collection.add("YayNess", :value => "result")
|
123
|
+
end
|
124
|
+
|
125
|
+
it "should return the result of calling :value on the fact" do
|
126
|
+
collection.value("YayNess").should == "result"
|
127
|
+
end
|
128
|
+
|
129
|
+
it "should be case-insensitive" do
|
130
|
+
collection.value("yayness").should == "result"
|
131
|
+
end
|
132
|
+
|
133
|
+
it "should treat strings and symbols equivalently" do
|
134
|
+
collection.value(:yayness).should == "result"
|
135
|
+
end
|
136
|
+
end
|
137
|
+
|
138
|
+
it "should return the fact's value when the array index method is used" do
|
139
|
+
collection.add("myfact", :value => "foo")
|
140
|
+
|
141
|
+
collection["myfact"].should == "foo"
|
142
|
+
end
|
143
|
+
|
144
|
+
it "should have a method for flushing all facts" do
|
145
|
+
fact = collection.add("YayNess")
|
146
|
+
|
147
|
+
fact.expects(:flush)
|
148
|
+
|
149
|
+
collection.flush
|
150
|
+
end
|
151
|
+
|
152
|
+
it "should have a method that returns all fact names" do
|
153
|
+
collection.add(:one)
|
154
|
+
collection.add(:two)
|
155
|
+
|
156
|
+
collection.list.sort { |a,b| a.to_s <=> b.to_s }.should == [:one, :two]
|
157
|
+
end
|
158
|
+
|
159
|
+
describe "when returning a hash of values" do
|
160
|
+
it "should return a hash of fact names and values with the fact names as strings" do
|
161
|
+
collection.add(:one, :value => "me")
|
162
|
+
|
163
|
+
collection.to_hash.should == {"one" => "me"}
|
164
|
+
end
|
165
|
+
|
166
|
+
it "should not include facts that did not return a value" do
|
167
|
+
collection.add(:two, :value => nil)
|
168
|
+
|
169
|
+
collection.to_hash.should_not be_include(:two)
|
170
|
+
end
|
171
|
+
end
|
172
|
+
|
173
|
+
describe "when iterating over facts" do
|
174
|
+
before do
|
175
|
+
collection.add(:one, :value => "ONE")
|
176
|
+
collection.add(:two, :value => "TWO")
|
177
|
+
end
|
178
|
+
|
179
|
+
it "should yield each fact name and the fact value" do
|
180
|
+
facts = {}
|
181
|
+
collection.each do |fact, value|
|
182
|
+
facts[fact] = value
|
183
|
+
end
|
184
|
+
facts.should == {"one" => "ONE", "two" => "TWO"}
|
185
|
+
end
|
186
|
+
|
187
|
+
it "should convert the fact name to a string" do
|
188
|
+
facts = {}
|
189
|
+
collection.each do |fact, value|
|
190
|
+
fact.should be_instance_of(String)
|
191
|
+
end
|
192
|
+
end
|
193
|
+
|
194
|
+
it "should only yield facts that have values" do
|
195
|
+
collection.add(:nil_fact, :value => nil)
|
196
|
+
facts = {}
|
197
|
+
collection.each do |fact, value|
|
198
|
+
facts[fact] = value
|
199
|
+
end
|
200
|
+
|
201
|
+
facts.should_not be_include("nil_fact")
|
202
|
+
end
|
203
|
+
end
|
204
|
+
|
205
|
+
describe "when no facts are loaded" do
|
206
|
+
it "should warn when no facts were loaded" do
|
207
|
+
Facter.expects(:warnonce).with("No facts loaded from #{internal_loader.search_path.join(File::PATH_SEPARATOR)}").once
|
208
|
+
|
209
|
+
collection.fact("one")
|
210
|
+
end
|
211
|
+
end
|
212
|
+
|
213
|
+
describe "external facts" do
|
214
|
+
let(:external_loader) { SingleFactLoader.new(:test_fact, "fact value") }
|
215
|
+
let(:collection) { Facter::Util::Collection.new(internal_loader, external_loader) }
|
216
|
+
|
217
|
+
it "loads when a specific fact is requested" do
|
218
|
+
collection.fact(:test_fact).value.should == "fact value"
|
219
|
+
end
|
220
|
+
|
221
|
+
it "loads when facts are listed" do
|
222
|
+
collection.list.should == [:test_fact]
|
223
|
+
end
|
224
|
+
|
225
|
+
it "loads when all facts are iterated over" do
|
226
|
+
facts = []
|
227
|
+
collection.each { |fact_name, fact_value| facts << [fact_name, fact_value] }
|
228
|
+
|
229
|
+
facts.should == [["test_fact", "fact value"]]
|
230
|
+
end
|
231
|
+
|
232
|
+
it "are loaded only once" do
|
233
|
+
external_loader.expects(:load).with(collection)
|
234
|
+
|
235
|
+
collection.load_all
|
236
|
+
collection.load_all
|
237
|
+
end
|
238
|
+
|
239
|
+
it "are reloaded after flushing" do
|
240
|
+
external_loader.expects(:load).with(collection).twice
|
241
|
+
|
242
|
+
collection.load_all
|
243
|
+
collection.flush
|
244
|
+
collection.load_all
|
245
|
+
end
|
246
|
+
end
|
247
|
+
|
248
|
+
class SingleFactLoader
|
249
|
+
def initialize(name, value)
|
250
|
+
@name = name
|
251
|
+
@value = value
|
252
|
+
end
|
253
|
+
|
254
|
+
def load(collection)
|
255
|
+
collection.add(@name, :value => @value)
|
256
|
+
end
|
257
|
+
end
|
258
|
+
end
|