facter 2.1.0-x64-mingw32
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of 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 +53 -0
- data/LICENSE +15 -0
- data/README.md +33 -0
- data/Rakefile +79 -0
- data/bin/facter +20 -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 +36 -0
- data/ext/redhat/facter.spec.erb +220 -0
- data/ext/solaris/pkginfo +7 -0
- data/install.rb +380 -0
- data/lib/facter.rb +261 -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 +123 -0
- data/lib/facter/core/execution/base.rb +81 -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 +113 -0
- data/lib/facter/dhcp_servers.rb +39 -0
- data/lib/facter/domain.rb +99 -0
- data/lib/facter/ec2.rb +44 -0
- data/lib/facter/ec2/rest.rb +130 -0
- data/lib/facter/facterversion.rb +15 -0
- data/lib/facter/filesystems.rb +38 -0
- data/lib/facter/fqdn.rb +24 -0
- data/lib/facter/gce.rb +16 -0
- data/lib/facter/gce/metadata.rb +87 -0
- data/lib/facter/hardwareisa.rb +20 -0
- data/lib/facter/hardwaremodel.rb +67 -0
- data/lib/facter/hostname.rb +31 -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 +23 -0
- data/lib/facter/kernelrelease.rb +50 -0
- data/lib/facter/kernelversion.rb +22 -0
- data/lib/facter/ldom.rb +47 -0
- data/lib/facter/lsbdistcodename.rb +16 -0
- data/lib/facter/lsbdistdescription.rb +25 -0
- data/lib/facter/lsbdistid.rb +16 -0
- data/lib/facter/lsbdistrelease.rb +16 -0
- data/lib/facter/lsbmajdistrelease.rb +27 -0
- data/lib/facter/lsbrelease.rb +16 -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 +168 -0
- data/lib/facter/netmask.rb +42 -0
- data/lib/facter/network.rb +20 -0
- data/lib/facter/operatingsystem.rb +141 -0
- data/lib/facter/operatingsystemmajrelease.rb +47 -0
- data/lib/facter/operatingsystemrelease.rb +250 -0
- data/lib/facter/osfamily.rb +37 -0
- data/lib/facter/partitions.rb +35 -0
- data/lib/facter/path.rb +14 -0
- data/lib/facter/physicalprocessorcount.rb +91 -0
- data/lib/facter/processor.rb +168 -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 +63 -0
- data/lib/facter/util/confine.rb +66 -0
- data/lib/facter/util/dhcp_servers.rb +43 -0
- data/lib/facter/util/directory_loader.rb +83 -0
- data/lib/facter/util/ec2.rb +106 -0
- data/lib/facter/util/fact.rb +204 -0
- data/lib/facter/util/file_read.rb +37 -0
- data/lib/facter/util/formatter.rb +39 -0
- data/lib/facter/util/ip.rb +285 -0
- data/lib/facter/util/ip/windows.rb +215 -0
- data/lib/facter/util/loader.rb +155 -0
- data/lib/facter/util/macaddress.rb +43 -0
- data/lib/facter/util/macosx.rb +73 -0
- data/lib/facter/util/manufacturer.rb +99 -0
- data/lib/facter/util/memory.rb +228 -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/operatingsystem.rb +21 -0
- data/lib/facter/util/parser.rb +158 -0
- data/lib/facter/util/partitions.rb +41 -0
- data/lib/facter/util/partitions/linux.rb +65 -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/posix.rb +16 -0
- data/lib/facter/util/processor.rb +289 -0
- data/lib/facter/util/registry.rb +11 -0
- data/lib/facter/util/resolution.rb +160 -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 +109 -0
- data/lib/facter/util/virtual.rb +180 -0
- data/lib/facter/util/vlans.rb +21 -0
- data/lib/facter/util/windows_root.rb +7 -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 +311 -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/openbsd_bridge_rules +11 -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/dhcp_servers/nmcli_devices +4 -0
- data/spec/fixtures/unit/dhcp_servers/nmcli_devices_disconnected +4 -0
- data/spec/fixtures/unit/dhcp_servers/nmcli_eth0_dhcp +36 -0
- data/spec/fixtures/unit/dhcp_servers/nmcli_eth0_static +24 -0
- data/spec/fixtures/unit/dhcp_servers/nmcli_wlan0_dhcp +49 -0
- data/spec/fixtures/unit/dhcp_servers/nmcli_wlan0_static +37 -0
- data/spec/fixtures/unit/dhcp_servers/route +3 -0
- data/spec/fixtures/unit/dhcp_servers/route_nogw +1 -0
- data/spec/fixtures/unit/ec2/rest/meta-data/root +20 -0
- data/spec/fixtures/unit/filesystems/linux +28 -0
- data/spec/fixtures/unit/gce/metadata/metadata.json +69 -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/kernelrelease/openbsd-5.3 +2 -0
- data/spec/fixtures/unit/kernelrelease/openbsd-5.3-current +3 -0
- data/spec/fixtures/unit/memory/aix-svmon +9 -0
- data/spec/fixtures/unit/memory/aix-swap_l +2 -0
- data/spec/fixtures/unit/memory/darwin-swapinfo-multiple +3 -0
- data/spec/fixtures/unit/memory/darwin-swapinfo-single +2 -0
- data/spec/fixtures/unit/memory/darwin-vm_stat +13 -0
- data/spec/fixtures/unit/memory/dragonfly-vmstat +3 -0
- data/spec/fixtures/unit/memory/freebsd-vmstat +3 -0
- data/spec/fixtures/unit/memory/linux-proc_meminfo +10 -0
- data/spec/fixtures/unit/memory/openbsd-vmstat +3 -0
- data/spec/fixtures/unit/memory/smartos_zone_swap_l-single +2 -0
- data/spec/fixtures/unit/memory/solaris-prtconf +4 -0
- data/spec/fixtures/unit/memory/solaris-swap_l-multiple +3 -0
- data/spec/fixtures/unit/memory/solaris-swap_l-single +2 -0
- data/spec/fixtures/unit/memory/solaris-vmstat +3 -0
- data/spec/fixtures/unit/netmask/darwin_10_8_5.txt +30 -0
- data/spec/fixtures/unit/netmask/ifconfig_aix_7.txt +3 -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/dhcp_servers/route +3 -0
- data/spec/fixtures/unit/util/dhcp_servers/route_nogw +1 -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/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/smartos_smbios +533 -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/operatingsystem/cumuluslinux.txt +8 -0
- data/spec/fixtures/unit/util/operatingsystem/redhat-7.txt +12 -0
- data/spec/fixtures/unit/util/operatingsystem/sabayon.txt +7 -0
- data/spec/fixtures/unit/util/operatingsystem/wheezy.txt +9 -0
- data/spec/fixtures/unit/util/partitions/partitions/mount +9 -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/centos-5-no-vlans +2 -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_1_cgroup/in_a_container +9 -0
- data/spec/fixtures/virtual/proc_1_cgroup/in_a_docker_container +8 -0
- data/spec/fixtures/virtual/proc_1_cgroup/not_in_a_container +9 -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 +130 -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 +42 -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 +106 -0
- data/spec/unit/dhcp_servers_spec.rb +152 -0
- data/spec/unit/domain_spec.rb +310 -0
- data/spec/unit/ec2/rest_spec.rb +145 -0
- data/spec/unit/ec2_spec.rb +127 -0
- data/spec/unit/facter_spec.rb +108 -0
- data/spec/unit/filesystems_spec.rb +50 -0
- data/spec/unit/fqdn_spec.rb +16 -0
- data/spec/unit/gce/metadata_spec.rb +49 -0
- data/spec/unit/gce_spec.rb +34 -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 +22 -0
- data/spec/unit/kernelrelease_spec.rb +69 -0
- data/spec/unit/kernelversion_spec.rb +32 -0
- data/spec/unit/ldom_spec.rb +75 -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 +73 -0
- data/spec/unit/manufacturer_spec.rb +115 -0
- data/spec/unit/memory_spec.rb +470 -0
- data/spec/unit/netmask_spec.rb +106 -0
- data/spec/unit/operatingsystem_spec.rb +160 -0
- data/spec/unit/operatingsystemmajrelease_spec.rb +38 -0
- data/spec/unit/operatingsystemrelease_spec.rb +236 -0
- data/spec/unit/osfamily_spec.rb +62 -0
- data/spec/unit/partitions_spec.rb +48 -0
- data/spec/unit/physicalprocessorcount_spec.rb +85 -0
- data/spec/unit/processor_spec.rb +401 -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 +97 -0
- data/spec/unit/util/confine_spec.rb +148 -0
- data/spec/unit/util/dhcp_servers_spec.rb +63 -0
- data/spec/unit/util/directory_loader_spec.rb +88 -0
- data/spec/unit/util/ec2_spec.rb +184 -0
- data/spec/unit/util/fact_spec.rb +142 -0
- data/spec/unit/util/file_read_spec.rb +29 -0
- data/spec/unit/util/formatter_spec.rb +50 -0
- data/spec/unit/util/ip/windows_spec.rb +80 -0
- data/spec/unit/util/ip_spec.rb +467 -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 +114 -0
- data/spec/unit/util/manufacturer_spec.rb +223 -0
- data/spec/unit/util/normalization_spec.rb +113 -0
- data/spec/unit/util/operatingsystem_spec.rb +92 -0
- data/spec/unit/util/parser_spec.rb +200 -0
- data/spec/unit/util/partitions/partitions_spec.rb +67 -0
- data/spec/unit/util/partitions_spec.rb +19 -0
- data/spec/unit/util/posix_spec.rb +11 -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 +171 -0
- data/spec/unit/util/virtual_spec.rb +364 -0
- data/spec/unit/util/vlans_spec.rb +42 -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 +519 -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 +815 -0
@@ -0,0 +1,126 @@
|
|
1
|
+
#! /usr/bin/env ruby
|
2
|
+
|
3
|
+
require 'spec_helper'
|
4
|
+
require 'facter/util/uptime'
|
5
|
+
|
6
|
+
describe Facter::Util::Uptime do
|
7
|
+
|
8
|
+
describe ".get_uptime_seconds_unix", :unless => Facter::Util::Config.is_windows? do
|
9
|
+
describe "when /proc/uptime is available" do
|
10
|
+
before do
|
11
|
+
uptime_file = my_fixture("ubuntu_proc_uptime")
|
12
|
+
Facter::Util::Uptime.stubs(:uptime_file).returns("\"#{uptime_file}\"")
|
13
|
+
end
|
14
|
+
|
15
|
+
it "should return the uptime in seconds as an integer" do
|
16
|
+
Facter::Util::Uptime.get_uptime_seconds_unix.should == 5097686
|
17
|
+
end
|
18
|
+
|
19
|
+
end
|
20
|
+
|
21
|
+
describe "when /proc/uptime is not available" do
|
22
|
+
before :each do
|
23
|
+
@nonexistent_file = '/non/existent/file'
|
24
|
+
File.exists?(@nonexistent_file).should == false
|
25
|
+
Facter::Util::Uptime.stubs(:uptime_file).returns(@nonexistent_file)
|
26
|
+
end
|
27
|
+
|
28
|
+
it "should use 'sysctl -n kern.boottime' on OpenBSD" do
|
29
|
+
sysctl_output_file = my_fixture('sysctl_kern_boottime_openbsd') # Dec 09 21:11:46 +0000 2011
|
30
|
+
Facter::Util::Uptime.stubs(:uptime_sysctl_cmd).returns("cat \"#{sysctl_output_file}\"")
|
31
|
+
Time.stubs(:now).returns Time.parse("Dec 09 22:11:46 +0000 2011") # one hour later
|
32
|
+
Facter::Util::Uptime.get_uptime_seconds_unix.should == 60 * 60
|
33
|
+
end
|
34
|
+
|
35
|
+
it "should use 'sysctl -n kern.boottime' on Darwin, etc." do
|
36
|
+
sysctl_output_file = my_fixture('sysctl_kern_boottime_darwin') # Oct 30 21:52:27 +0000 2011
|
37
|
+
Facter::Util::Uptime.stubs(:uptime_sysctl_cmd).returns("cat \"#{sysctl_output_file}\"")
|
38
|
+
Time.stubs(:now).returns Time.parse("Oct 30 22:52:27 +0000 2011") # one hour later
|
39
|
+
Facter::Util::Uptime.get_uptime_seconds_unix.should == 60 * 60
|
40
|
+
end
|
41
|
+
|
42
|
+
describe "nor is 'sysctl kern.boottime'" do
|
43
|
+
before :each do
|
44
|
+
Facter::Util::Uptime.stubs(:uptime_proc_uptime).returns(false)
|
45
|
+
Facter::Util::Uptime.stubs(:uptime_sysctl).returns(false)
|
46
|
+
Facter.fact(:kernel).stubs(:value).returns('SunOS')
|
47
|
+
end
|
48
|
+
|
49
|
+
describe "should use 'uptime' command" do
|
50
|
+
# Note about uptime variations.
|
51
|
+
# Solaris (I have examined 5.6, 5.7, 5.8, 5.9, 5.10 & 5.11) and HP-UX (11.00, 11.11, 11.23, 11.31) have time
|
52
|
+
# right justified at at 8 characters, and two spaces before 'up'.
|
53
|
+
# Solaris differs from all other Unices (and Linux) in that the plural/singular case of minutes/hours/days are
|
54
|
+
# written min(s)/hr(s)/day(s) instead of min/mins/hr/hrs etc., e.g. 1 min(s), 2 min(s) as opposed to
|
55
|
+
# 1 min, 2 mins, etc.
|
56
|
+
# AIX (4.3.3, 5.2, 5.3, 6.1) differs from other SysV Unices in that times are padded with a leading 0 in the
|
57
|
+
# hour column where necessary, and have AM/PM in uppercase, and there are three spaces before 'up'.
|
58
|
+
# Tru64 (4.0, 5.1) differs from other SysV Unices in that times are in 24 hour format, and there are no
|
59
|
+
# leading spaces.
|
60
|
+
# Linux (RHEL, uptime version 2.0.7) differs from the SysV Unices in that only minutes before the first hour
|
61
|
+
# are written as 1 min, 2 min, 3 min etc. and after that full hours are rendered 1:00 or 21:00. Time of
|
62
|
+
# day was written 5:37pm and right-justified at 8 characters, with 2 spaces before 'up'. A figure in
|
63
|
+
# whole days was written as 3 days, 0 min.
|
64
|
+
# By version 2.0.17 the time of day was rewritten in 24hr time with seconds, right-justified at 9 characters.
|
65
|
+
# By version 3.2.7 one of the spaces before 'up' had been removed.
|
66
|
+
test_cases = [
|
67
|
+
[' 4:42pm up 1 min(s), 0 users, load average: 0.95, 0.25, 0.09', 1*60],
|
68
|
+
['13:16 up 58 mins, 2 users, load average: 0.00, 0.02, 0.05', 58*60],
|
69
|
+
['13:18 up 1 hr, 1 user, load average: 0.58, 0.23, 0.14', 1*60*60 ],
|
70
|
+
[' 10:14pm up 3 hr(s), 0 users, load average: 0.00, 0.00, 0.00', 3*60*60 ],
|
71
|
+
['14:18 up 2 hrs, 0 users, load average: 0.33, 0.27, 0.29', 2*60*60 ],
|
72
|
+
[' 9:01pm up 1:47, 0 users, load average: 0.00, 0.00, 0.00', 1*60*60 + 47*60],
|
73
|
+
['13:19 up 1:01, 1 user, load average: 0.10, 0.26, 0.21', 1*60*60 + 1*60],
|
74
|
+
['10:49 up 22:31, 0 users, load average: 0.26, 0.34, 0.27', 22*60*60 + 31*60],
|
75
|
+
['12:18 up 1 day, 0 users, load average: 0.74, 0.20, 0.10', 1*24*60*60 ],
|
76
|
+
[' 2:48pm up 1 day(s), 0 users, load average: 0.21, 0.20, 0.17', 1*24*60*60 ],
|
77
|
+
['12:18 up 2 days, 0 users, load average: 0.50, 0.27, 0.16', 2*24*60*60 ],
|
78
|
+
[' 1:56pm up 25 day(s), 2 users, load average: 0.59, 0.56, 0.50', 25*24*60*60 ],
|
79
|
+
[' 1:29pm up 485 days, 0 users, load average: 0.00, 0.01, 0.01', 485*24*60*60 ],
|
80
|
+
[' 18:11:24 up 69 days, 0 min, 0 users, load average: 0.00, 0.00, 0.00', 69*24*60*60 ],
|
81
|
+
['12:19 up 1 day, 1 min, 0 users, load average: 0.07, 0.16, 0.13', 1*24*60*60 + 1*60],
|
82
|
+
[' 3:23pm up 25 day(s), 27 min(s), 2 users, load average: 0.49, 0.45, 0.46', 25*24*60*60 + 27*60],
|
83
|
+
[' 02:42PM up 1 day, 39 mins, 0 users, load average: 1.49, 1.74, 1.80', 1*24*60*60 + 39*60],
|
84
|
+
[' 18:13:13 up 245 days, 44 min, 1 user, load average: 0.00, 0.00, 0.00', 245*24*60*60 + 44*60],
|
85
|
+
[' 6:09pm up 350 days, 2 min, 1 user, load average: 0.02, 0.03, 0.00', 350*24*60*60 + 2*60],
|
86
|
+
[' 1:07pm up 174 day(s), 16 hr(s), 0 users, load average: 0.05, 0.04, 0.03', 174*24*60*60 + 16*60*60 ],
|
87
|
+
[' 02:34PM up 621 days, 18 hrs, 0 users, load average: 2.67, 2.52, 2.56', 621*24*60*60 + 18*60*60 ],
|
88
|
+
[' 3:30am up 108 days, 1 hr, 31 users, load average: 0.39, 0.40, 0.41', 108*24*60*60 + 1*60*60 ],
|
89
|
+
['13:18 up 1 day, 1 hr, 0 users, load average: 0.78, 0.33, 0.18', 1*24*60*60 + 1*60*60 ],
|
90
|
+
['14:18 up 1 day, 2 hrs, 0 users, load average: 1.17, 0.48, 0.41', 1*24*60*60 + 2*60*60 ],
|
91
|
+
['15:56 up 152 days, 17 hrs, 0 users, load average: 0.01, 0.06, 0.07', 152*24*60*60 + 17*60*60 ],
|
92
|
+
[' 5:37pm up 25 days, 21:00, 0 users, load average: 0.01, 0.02, 0.00', 25*24*60*60 + 21*60*60 ],
|
93
|
+
[' 8:59pm up 94 day(s), 3:17, 46 users, load average: 0.66, 0.67, 0.70', 94*24*60*60 + 3*60*60 + 17*60],
|
94
|
+
[' 3:01pm up 4496 day(s), 21:19, 32 users, load average: 0.61, 0.62, 0.62', 4496*24*60*60 + 21*60*60 + 19*60],
|
95
|
+
[' 02:42PM up 41 days, 2:38, 0 users, load average: 0.38, 0.70, 0.55', 41*24*60*60 + 2*60*60 + 38*60],
|
96
|
+
[' 18:13:29 up 25 days, 21:36, 0 users, load average: 0.00, 0.00, 0.00', 25*24*60*60 + 21*60*60 + 36*60],
|
97
|
+
[' 13:36:05 up 118 days, 1:15, 1 user, load average: 0.00, 0.00, 0.00', 118*24*60*60 + 1*60*60 + 15*60]
|
98
|
+
]
|
99
|
+
|
100
|
+
test_cases.each do |uptime, expected|
|
101
|
+
it "should return #{expected} for #{uptime}" do
|
102
|
+
Facter::Core::Execution.stubs(:execute).with('uptime 2>/dev/null', {:on_fail => nil}).returns(uptime)
|
103
|
+
Facter.fact(:uptime_seconds).value.should == expected
|
104
|
+
end
|
105
|
+
end
|
106
|
+
|
107
|
+
describe "nor is 'uptime' command" do
|
108
|
+
before :each do
|
109
|
+
Facter::Core::Execution.stubs(:execute).with('uptime 2>/dev/null', {:on_fail => nil}).returns(nil)
|
110
|
+
end
|
111
|
+
|
112
|
+
it "should return nil" do
|
113
|
+
Facter::Util::Uptime.get_uptime_seconds_unix.should == nil
|
114
|
+
end
|
115
|
+
end
|
116
|
+
end
|
117
|
+
end
|
118
|
+
end
|
119
|
+
end
|
120
|
+
|
121
|
+
describe ".get_uptime_seconds_win", :if => Facter::Util::Config.is_windows? do
|
122
|
+
it "should return a postive value" do
|
123
|
+
Facter::Util::Uptime.get_uptime_seconds_win.should > 0
|
124
|
+
end
|
125
|
+
end
|
126
|
+
end
|
@@ -0,0 +1,171 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'facter/util/values'
|
3
|
+
|
4
|
+
describe Facter::Util::Values do
|
5
|
+
describe 'deep_freeze' do
|
6
|
+
it "it dups and freezes strings" do
|
7
|
+
input = "hi"
|
8
|
+
output = described_class.deep_freeze(input)
|
9
|
+
expect(input).to_not be_frozen
|
10
|
+
expect(output).to be_frozen
|
11
|
+
end
|
12
|
+
|
13
|
+
it "freezes arrays and each element in the array" do
|
14
|
+
input = %w[one two three]
|
15
|
+
output = described_class.deep_freeze(input)
|
16
|
+
|
17
|
+
input.each { |entry| expect(entry).to_not be_frozen }
|
18
|
+
output.each { |entry| expect(entry).to be_frozen }
|
19
|
+
|
20
|
+
expect(input).to_not be_frozen
|
21
|
+
expect(output).to be_frozen
|
22
|
+
end
|
23
|
+
|
24
|
+
it "freezes hashes and each key and value in the hash" do
|
25
|
+
input = {'one' => 'two', 'three' => 'four'}
|
26
|
+
|
27
|
+
output = described_class.deep_freeze(input)
|
28
|
+
|
29
|
+
input.each_pair do |key, val|
|
30
|
+
# Ruby freezes all string keys, so these will always be frozen
|
31
|
+
expect(key).to be_frozen
|
32
|
+
expect(val).to_not be_frozen
|
33
|
+
end
|
34
|
+
|
35
|
+
output.each_pair do |key, val|
|
36
|
+
expect(key).to be_frozen
|
37
|
+
expect(val).to be_frozen
|
38
|
+
end
|
39
|
+
|
40
|
+
expect(input).to_not be_frozen
|
41
|
+
expect(output).to be_frozen
|
42
|
+
end
|
43
|
+
|
44
|
+
it "raises an error when given a structure that cannot be deeply frozen" do
|
45
|
+
expect {
|
46
|
+
described_class.deep_freeze(Set.new)
|
47
|
+
}.to raise_error(Facter::Util::Values::DeepFreezeError, /Cannot deep freeze.*Set/)
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
describe 'deep_merge' do
|
52
|
+
it "non-destructively concatenates arrays" do
|
53
|
+
first = %w[foo bar]
|
54
|
+
second = %w[baz quux]
|
55
|
+
|
56
|
+
expect(described_class.deep_merge(first, second)).to eq %w[foo bar baz quux]
|
57
|
+
expect(first).to eq %w[foo bar]
|
58
|
+
expect(second).to eq %w[baz quux]
|
59
|
+
end
|
60
|
+
|
61
|
+
it "returns the left value if the right value is nil" do
|
62
|
+
expect(described_class.deep_merge("left", nil)).to eq "left"
|
63
|
+
end
|
64
|
+
|
65
|
+
it "returns the right value if the left value is nil" do
|
66
|
+
expect(described_class.deep_merge(nil, "right")).to eq "right"
|
67
|
+
end
|
68
|
+
|
69
|
+
it "returns nil if both values are nil" do
|
70
|
+
expect(described_class.deep_merge(nil, nil)).to be_nil
|
71
|
+
end
|
72
|
+
|
73
|
+
describe "with hashes" do
|
74
|
+
it "merges when keys do not overlap" do
|
75
|
+
|
76
|
+
first = {:foo => 'bar'}
|
77
|
+
second = {:baz => 'quux'}
|
78
|
+
|
79
|
+
expect(described_class.deep_merge(first, second)).to eq(:foo => 'bar', :baz => 'quux')
|
80
|
+
expect(first).to eq(:foo => 'bar')
|
81
|
+
expect(second).to eq(:baz => 'quux')
|
82
|
+
end
|
83
|
+
|
84
|
+
it "concatenates arrays when both keys are arrays" do
|
85
|
+
first = {:foo => %w[bar]}
|
86
|
+
second = {:foo => %w[baz quux]}
|
87
|
+
|
88
|
+
expect(described_class.deep_merge(first, second)).to eq(:foo => %w[bar baz quux])
|
89
|
+
expect(first).to eq(:foo => %w[bar])
|
90
|
+
expect(second).to eq(:foo => %w[baz quux])
|
91
|
+
end
|
92
|
+
|
93
|
+
it "merges hashes when both keys are hashes" do
|
94
|
+
first = {:foo => {:pb => 'lead', :ag => 'silver'}}
|
95
|
+
second = {:foo => {:au => 'gold', :na => 'sodium'}}
|
96
|
+
|
97
|
+
expect(described_class.deep_merge(first, second)).to eq(
|
98
|
+
:foo => {
|
99
|
+
:pb => 'lead',
|
100
|
+
:ag => 'silver',
|
101
|
+
:au => 'gold',
|
102
|
+
:na => 'sodium'
|
103
|
+
}
|
104
|
+
)
|
105
|
+
end
|
106
|
+
|
107
|
+
it "prints the data structure path if an error is raised" do
|
108
|
+
first = {:foo => {:bar => {:baz => {:quux => true}}}}
|
109
|
+
second = {:foo => {:bar => {:baz => {:quux => false}}}}
|
110
|
+
|
111
|
+
expect {
|
112
|
+
described_class.deep_merge(first, second)
|
113
|
+
}.to raise_error(Facter::Util::Values::DeepMergeError, /Cannot merge .*at .*foo.*bar.*baz.*quux/)
|
114
|
+
end
|
115
|
+
end
|
116
|
+
|
117
|
+
describe "with unmergable scalar values" do
|
118
|
+
[
|
119
|
+
[true, false],
|
120
|
+
[1, 2],
|
121
|
+
['up', 'down']
|
122
|
+
].each do |(left, right)|
|
123
|
+
it "raises an error when merging #{left}:#{left.class} and #{right}:#{right.class}" do
|
124
|
+
expect {
|
125
|
+
described_class.deep_merge(left, right)
|
126
|
+
}.to raise_error(Facter::Util::Values::DeepMergeError, /Cannot merge #{left.inspect}:#{left.class} and #{right.inspect}:#{right.class}/)
|
127
|
+
end
|
128
|
+
end
|
129
|
+
end
|
130
|
+
end
|
131
|
+
|
132
|
+
describe "flatten_structure" do
|
133
|
+
it "converts a string to a hash containing that string" do
|
134
|
+
input = "foo"
|
135
|
+
output = described_class.flatten_structure("path", input)
|
136
|
+
expect(output).to eq({"path" => "foo"})
|
137
|
+
end
|
138
|
+
|
139
|
+
it "converts an array to a hash with the array elements with indexes" do
|
140
|
+
input = ["foo"]
|
141
|
+
output = described_class.flatten_structure("path", input)
|
142
|
+
expect(output).to eq({"path_0" => "foo"})
|
143
|
+
end
|
144
|
+
|
145
|
+
it "prefixes a non-nested hash with the given path" do
|
146
|
+
input = {"foo" => "bar"}
|
147
|
+
output = described_class.flatten_structure("path", input)
|
148
|
+
expect(output).to eq({"path_foo" => "bar"})
|
149
|
+
end
|
150
|
+
|
151
|
+
it "flattens elements till it reaches the first non-flattenable structure" do
|
152
|
+
input = {
|
153
|
+
"first" => "second",
|
154
|
+
"arr" => ["zero", "one"],
|
155
|
+
"nested_array" => [
|
156
|
+
"hash" => "string",
|
157
|
+
],
|
158
|
+
"top" => {"middle" => ['bottom']},
|
159
|
+
}
|
160
|
+
output = described_class.flatten_structure("path", input)
|
161
|
+
|
162
|
+
expect(output).to eq({
|
163
|
+
"path_first" => "second",
|
164
|
+
"path_arr_0" => "zero",
|
165
|
+
"path_arr_1" => "one",
|
166
|
+
"path_nested_array_0_hash" => "string",
|
167
|
+
"path_top_middle_0" => "bottom"
|
168
|
+
})
|
169
|
+
end
|
170
|
+
end
|
171
|
+
end
|
@@ -0,0 +1,364 @@
|
|
1
|
+
#! /usr/bin/env ruby
|
2
|
+
|
3
|
+
require 'spec_helper'
|
4
|
+
require 'facter/util/virtual'
|
5
|
+
require 'stringio'
|
6
|
+
|
7
|
+
describe Facter::Util::Virtual do
|
8
|
+
|
9
|
+
after do
|
10
|
+
Facter.clear
|
11
|
+
end
|
12
|
+
it "should detect openvz" do
|
13
|
+
FileTest.stubs(:directory?).with("/proc/vz").returns(true)
|
14
|
+
Dir.stubs(:glob).with("/proc/vz/*").returns(['vzquota'])
|
15
|
+
Facter::Util::Virtual.should be_openvz
|
16
|
+
end
|
17
|
+
|
18
|
+
it "should not detect openvz when /proc/lve/list is present" do
|
19
|
+
FileTest.stubs(:file?).with("/proc/lve/list").returns(true)
|
20
|
+
Facter::Util::Virtual.should_not be_openvz
|
21
|
+
end
|
22
|
+
|
23
|
+
it "should not detect openvz when /proc/vz/ is empty" do
|
24
|
+
FileTest.stubs(:file?).with("/proc/lve/list").returns(false)
|
25
|
+
FileTest.stubs(:directory?).with("/proc/vz").returns(true)
|
26
|
+
Dir.stubs(:glob).with("/proc/vz/*").returns([])
|
27
|
+
Facter::Util::Virtual.should_not be_openvz
|
28
|
+
end
|
29
|
+
|
30
|
+
it "should identify openvzhn when /proc/self/status has envID of 0" do
|
31
|
+
Facter::Util::Virtual.stubs(:openvz?).returns(true)
|
32
|
+
FileTest.stubs(:exists?).with("/proc/self/status").returns(true)
|
33
|
+
Facter::Core::Execution.stubs(:exec).with('grep "envID" /proc/self/status').returns("envID: 0")
|
34
|
+
Facter::Util::Virtual.openvz_type().should == "openvzhn"
|
35
|
+
end
|
36
|
+
|
37
|
+
it "should identify openvzve when /proc/self/status has envID of 0" do
|
38
|
+
Facter::Util::Virtual.stubs(:openvz?).returns(true)
|
39
|
+
FileTest.stubs(:exists?).with('/proc/self/status').returns(true)
|
40
|
+
Facter::Core::Execution.stubs(:exec).with('grep "envID" /proc/self/status').returns("envID: 666")
|
41
|
+
Facter::Util::Virtual.openvz_type().should == "openvzve"
|
42
|
+
end
|
43
|
+
|
44
|
+
it "should not attempt to identify openvz when /proc/self/status has no envID" do
|
45
|
+
Facter::Util::Virtual.stubs(:openvz?).returns(true)
|
46
|
+
FileTest.stubs(:exists?).with('/proc/self/status').returns(true)
|
47
|
+
Facter::Core::Execution.stubs(:exec).with('grep "envID" /proc/self/status').returns("")
|
48
|
+
Facter::Util::Virtual.openvz_type().should be_nil
|
49
|
+
end
|
50
|
+
|
51
|
+
it "should identify Solaris zones when non-global zone" do
|
52
|
+
Facter::Core::Execution.stubs(:exec).with("/sbin/zonename").returns("somezone")
|
53
|
+
Facter::Util::Virtual.should be_zone
|
54
|
+
end
|
55
|
+
|
56
|
+
it "should not identify Solaris zones when global zone" do
|
57
|
+
Facter::Core::Execution.stubs(:exec).with("/sbin/zonename").returns("global")
|
58
|
+
Facter::Util::Virtual.should_not be_zone
|
59
|
+
end
|
60
|
+
|
61
|
+
it "(#14522) handles the unencoded binary data in /proc/self/status on Solaris" do
|
62
|
+
Facter.fact(:osfamily).stubs(:value).returns("Solaris")
|
63
|
+
File.stubs(:open).with('/proc/self/status', 'rb').returns(solaris_proc_self_status)
|
64
|
+
FileTest.stubs(:exists?).with('/proc/self/status').returns(true)
|
65
|
+
|
66
|
+
Facter::Util::Virtual.vserver?.should eq(false)
|
67
|
+
end
|
68
|
+
|
69
|
+
it "should not detect vserver if no self status" do
|
70
|
+
FileTest.stubs(:exists?).with("/proc/self/status").returns(false)
|
71
|
+
Facter::Util::Virtual.should_not be_vserver
|
72
|
+
end
|
73
|
+
|
74
|
+
it "should detect vserver when vxid present in process status" do
|
75
|
+
FileTest.stubs(:exists?).with("/proc/self/status").returns(true)
|
76
|
+
File.stubs(:open).with("/proc/self/status", "rb").returns(StringIO.new("VxID: 42\n"))
|
77
|
+
Facter::Util::Virtual.should be_vserver
|
78
|
+
end
|
79
|
+
|
80
|
+
it "should detect vserver when s_context present in process status" do
|
81
|
+
FileTest.stubs(:exists?).with("/proc/self/status").returns(true)
|
82
|
+
File.stubs(:open).with("/proc/self/status", "rb").returns(StringIO.new("s_context: 42\n"))
|
83
|
+
Facter::Util::Virtual.should be_vserver
|
84
|
+
end
|
85
|
+
|
86
|
+
it "should not detect vserver when vserver flags not present in process status" do
|
87
|
+
FileTest.stubs(:exists?).with("/proc/self/status").returns(true)
|
88
|
+
File.stubs(:open).with("/proc/self/status", "rb").returns(StringIO.new("wibble: 42\n"))
|
89
|
+
Facter::Util::Virtual.should_not be_vserver
|
90
|
+
end
|
91
|
+
|
92
|
+
it "should identify kvm" do
|
93
|
+
Facter::Util::Virtual.stubs(:kvm?).returns(true)
|
94
|
+
Facter::Core::Execution.stubs(:exec).with('dmidecode 2> /dev/null').returns("something")
|
95
|
+
Facter::Util::Virtual.kvm_type().should == "kvm"
|
96
|
+
end
|
97
|
+
|
98
|
+
it "should be able to detect RHEV via sysfs on Linux" do
|
99
|
+
# Fake files are always hard to stub. :/
|
100
|
+
File.stubs(:read).with("/sys/devices/virtual/dmi/id/product_name").
|
101
|
+
returns("RHEV Hypervisor")
|
102
|
+
|
103
|
+
Facter::Util::Virtual.should be_rhev
|
104
|
+
end
|
105
|
+
|
106
|
+
it "should be able to detect RHEV via sysfs on Linux improperly" do
|
107
|
+
# Fake files are always hard to stub. :/
|
108
|
+
File.stubs(:read).with("/sys/devices/virtual/dmi/id/product_name").
|
109
|
+
returns("something else")
|
110
|
+
|
111
|
+
Facter::Util::Virtual.should_not be_rhev
|
112
|
+
end
|
113
|
+
|
114
|
+
it "should be able to detect ovirt via sysfs on Linux" do
|
115
|
+
# Fake files are always hard to stub. :/
|
116
|
+
File.stubs(:read).with("/sys/devices/virtual/dmi/id/product_name").
|
117
|
+
returns("oVirt Node")
|
118
|
+
|
119
|
+
Facter::Util::Virtual.should be_ovirt
|
120
|
+
end
|
121
|
+
|
122
|
+
it "should be able to detect ovirt via sysfs on Linux improperly" do
|
123
|
+
# Fake files are always hard to stub. :/
|
124
|
+
File.stubs(:read).with("/sys/devices/virtual/dmi/id/product_name").
|
125
|
+
returns("something else")
|
126
|
+
|
127
|
+
Facter::Util::Virtual.should_not be_ovirt
|
128
|
+
end
|
129
|
+
|
130
|
+
it "detects GCE if the DMI product name is Google" do
|
131
|
+
File.stubs(:read).with("/sys/devices/virtual/dmi/id/product_name").returns("Google")
|
132
|
+
expect(Facter::Util::Virtual.gce?).to be_true
|
133
|
+
end
|
134
|
+
|
135
|
+
it "does not detect GCE if the DMI product name is not Google" do
|
136
|
+
File.stubs(:read).with("/sys/devices/virtual/dmi/id/product_name").returns('')
|
137
|
+
expect(Facter::Util::Virtual.gce?).to be_false
|
138
|
+
end
|
139
|
+
|
140
|
+
fixture_path = fixtures('virtual', 'proc_self_status')
|
141
|
+
|
142
|
+
test_cases = [
|
143
|
+
[File.join(fixture_path, 'vserver_2_1', 'guest'), true, 'vserver 2.1 guest'],
|
144
|
+
[File.join(fixture_path, 'vserver_2_1', 'host'), true, 'vserver 2.1 host'],
|
145
|
+
[File.join(fixture_path, 'vserver_2_3', 'guest'), true, 'vserver 2.3 guest'],
|
146
|
+
[File.join(fixture_path, 'vserver_2_3', 'host'), true, 'vserver 2.3 host']
|
147
|
+
]
|
148
|
+
|
149
|
+
test_cases.each do |status_file, expected, description|
|
150
|
+
describe "with /proc/self/status from #{description}" do
|
151
|
+
it "should detect vserver as #{expected.inspect}" do
|
152
|
+
status = File.read(status_file)
|
153
|
+
FileTest.stubs(:exists?).with("/proc/self/status").returns(true)
|
154
|
+
File.stubs(:open).with("/proc/self/status", "rb").returns(StringIO.new(status))
|
155
|
+
Facter::Util::Virtual.vserver?.should == expected
|
156
|
+
end
|
157
|
+
end
|
158
|
+
end
|
159
|
+
|
160
|
+
it "reads dmi entries as ascii data" do
|
161
|
+
entries_file = my_fixture('invalid_unicode_dmi_entries')
|
162
|
+
expected_contents = 'Virtual'
|
163
|
+
|
164
|
+
entries = Facter::Util::Virtual.read_sysfs_dmi_entries(entries_file)
|
165
|
+
|
166
|
+
entries.should =~ /#{expected_contents}/
|
167
|
+
end
|
168
|
+
|
169
|
+
it "should identify vserver_host when /proc/virtual exists" do
|
170
|
+
Facter::Util::Virtual.expects(:vserver?).returns(true)
|
171
|
+
FileTest.stubs(:exists?).with("/proc/virtual").returns(true)
|
172
|
+
Facter::Util::Virtual.vserver_type().should == "vserver_host"
|
173
|
+
end
|
174
|
+
|
175
|
+
it "should identify vserver_type as vserver when /proc/virtual does not exist" do
|
176
|
+
Facter::Util::Virtual.expects(:vserver?).returns(true)
|
177
|
+
FileTest.stubs(:exists?).with("/proc/virtual").returns(false)
|
178
|
+
Facter::Util::Virtual.vserver_type().should == "vserver"
|
179
|
+
end
|
180
|
+
|
181
|
+
it "should detect xen when /proc/sys/xen exists" do
|
182
|
+
FileTest.expects(:exists?).with("/proc/sys/xen").returns(true)
|
183
|
+
Facter::Util::Virtual.should be_xen
|
184
|
+
end
|
185
|
+
|
186
|
+
it "should detect xen when /sys/bus/xen exists" do
|
187
|
+
FileTest.expects(:exists?).with("/proc/sys/xen").returns(false)
|
188
|
+
FileTest.expects(:exists?).with("/sys/bus/xen").returns(true)
|
189
|
+
Facter::Util::Virtual.should be_xen
|
190
|
+
end
|
191
|
+
|
192
|
+
it "should detect xen when /proc/xen exists" do
|
193
|
+
FileTest.expects(:exists?).with("/proc/sys/xen").returns(false)
|
194
|
+
FileTest.expects(:exists?).with("/sys/bus/xen").returns(false)
|
195
|
+
FileTest.expects(:exists?).with("/proc/xen").returns(true)
|
196
|
+
Facter::Util::Virtual.should be_xen
|
197
|
+
end
|
198
|
+
|
199
|
+
it "should not detect xen when no sysfs/proc xen directories exist" do
|
200
|
+
FileTest.expects(:exists?).with("/proc/sys/xen").returns(false)
|
201
|
+
FileTest.expects(:exists?).with("/sys/bus/xen").returns(false)
|
202
|
+
FileTest.expects(:exists?).with("/proc/xen").returns(false)
|
203
|
+
Facter::Util::Virtual.should_not be_xen
|
204
|
+
end
|
205
|
+
|
206
|
+
it "should detect kvm" do
|
207
|
+
FileTest.stubs(:exists?).with("/proc/cpuinfo").returns(true)
|
208
|
+
File.stubs(:read).with("/proc/cpuinfo").returns("model name : QEMU Virtual CPU version 0.9.1\n")
|
209
|
+
Facter::Util::Virtual.should be_kvm
|
210
|
+
end
|
211
|
+
|
212
|
+
it "should detect kvm on FreeBSD" do
|
213
|
+
FileTest.stubs(:exists?).with("/proc/cpuinfo").returns(false)
|
214
|
+
Facter.fact(:kernel).stubs(:value).returns("FreeBSD")
|
215
|
+
Facter::Util::POSIX.stubs(:sysctl).with("hw.model").returns("QEMU Virtual CPU version 0.12.4")
|
216
|
+
Facter::Util::Virtual.should be_kvm
|
217
|
+
end
|
218
|
+
|
219
|
+
it "should detect kvm on OpenBSD" do
|
220
|
+
FileTest.stubs(:exists?).with("/proc/cpuinfo").returns(false)
|
221
|
+
Facter.fact(:kernel).stubs(:value).returns("OpenBSD")
|
222
|
+
Facter::Util::POSIX.stubs(:sysctl).with("hw.model").returns('QEMU Virtual CPU version (cpu64-rhel6) ("AuthenticAMD" 686-class, 512KB L2 cache)')
|
223
|
+
Facter::Util::Virtual.should be_kvm
|
224
|
+
end
|
225
|
+
|
226
|
+
it "should identify FreeBSD jail when in jail" do
|
227
|
+
Facter.fact(:kernel).stubs(:value).returns("FreeBSD")
|
228
|
+
Facter::Core::Execution.stubs(:exec).with("/sbin/sysctl -n security.jail.jailed").returns("1")
|
229
|
+
Facter::Util::Virtual.should be_jail
|
230
|
+
end
|
231
|
+
|
232
|
+
it "should not identify GNU/kFreeBSD jail when not in jail" do
|
233
|
+
Facter.fact(:kernel).stubs(:value).returns("GNU/kFreeBSD")
|
234
|
+
Facter::Core::Execution.stubs(:exec).with("/bin/sysctl -n security.jail.jailed").returns("0")
|
235
|
+
Facter::Util::Virtual.should_not be_jail
|
236
|
+
end
|
237
|
+
|
238
|
+
it "should detect hpvm on HP-UX" do
|
239
|
+
Facter.fact(:kernel).stubs(:value).returns("HP-UX")
|
240
|
+
Facter::Core::Execution.stubs(:exec).with("/usr/bin/getconf MACHINE_MODEL").returns('ia64 hp server Integrity Virtual Machine')
|
241
|
+
Facter::Util::Virtual.should be_hpvm
|
242
|
+
end
|
243
|
+
|
244
|
+
it "should not detect hpvm on HP-UX when not in hpvm" do
|
245
|
+
Facter.fact(:kernel).stubs(:value).returns("HP-UX")
|
246
|
+
Facter::Core::Execution.stubs(:exec).with("/usr/bin/getconf MACHINE_MODEL").returns('ia64 hp server rx660')
|
247
|
+
Facter::Util::Virtual.should_not be_hpvm
|
248
|
+
end
|
249
|
+
|
250
|
+
it "should be able to detect virtualbox via sysfs on Linux" do
|
251
|
+
# Fake files are always hard to stub. :/
|
252
|
+
File.stubs(:read).with("/sys/devices/virtual/dmi/id/product_name").
|
253
|
+
returns("VirtualBox")
|
254
|
+
|
255
|
+
Facter::Util::Virtual.should be_virtualbox
|
256
|
+
end
|
257
|
+
|
258
|
+
it "should be able to detect virtualbox via sysfs on Linux improperly" do
|
259
|
+
# Fake files are always hard to stub. :/
|
260
|
+
File.stubs(:read).with("/sys/devices/virtual/dmi/id/product_name").
|
261
|
+
returns("HP-Oracle-Sun-VMWare-funky-town")
|
262
|
+
|
263
|
+
Facter::Util::Virtual.should_not be_virtualbox
|
264
|
+
end
|
265
|
+
|
266
|
+
let :solaris_proc_self_status do
|
267
|
+
sample_data = my_fixture_read('solaris10_proc_self_status1')
|
268
|
+
mockfile = mock('File')
|
269
|
+
mockfile.stubs(:read).returns(sample_data)
|
270
|
+
mockfile
|
271
|
+
end
|
272
|
+
|
273
|
+
shared_examples_for "virt-what" do |kernel, path, null_device|
|
274
|
+
before(:each) do
|
275
|
+
Facter.fact(:kernel).stubs(:value).returns(kernel)
|
276
|
+
Facter::Core::Execution.expects(:which).with("virt-what").returns(path)
|
277
|
+
Facter::Core::Execution.expects(:exec).with("#{path} 2>#{null_device}")
|
278
|
+
end
|
279
|
+
|
280
|
+
it "on #{kernel} virt-what is at #{path} and stderr is sent to #{null_device}" do
|
281
|
+
Facter::Util::Virtual.virt_what
|
282
|
+
end
|
283
|
+
end
|
284
|
+
|
285
|
+
context "on linux" do
|
286
|
+
it_should_behave_like "virt-what", "linux", "/usr/bin/virt-what", "/dev/null"
|
287
|
+
|
288
|
+
it "should strip out warnings on stdout from virt-what" do
|
289
|
+
virt_what_warning = "virt-what: this script must be run as root"
|
290
|
+
Facter.fact(:kernel).stubs(:value).returns('linux')
|
291
|
+
Facter::Core::Execution.expects(:which).with('virt-what').returns "/usr/bin/virt-what"
|
292
|
+
Facter::Core::Execution.expects(:exec).with('/usr/bin/virt-what 2>/dev/null').returns virt_what_warning
|
293
|
+
Facter::Util::Virtual.virt_what.should_not match /^virt-what: /
|
294
|
+
end
|
295
|
+
end
|
296
|
+
|
297
|
+
context "on unix" do
|
298
|
+
it_should_behave_like "virt-what", "unix", "/usr/bin/virt-what", "/dev/null"
|
299
|
+
end
|
300
|
+
|
301
|
+
context "on windows" do
|
302
|
+
it_should_behave_like "virt-what", "windows", 'c:\windows\system32\virt-what', "NUL"
|
303
|
+
end
|
304
|
+
|
305
|
+
describe '.lxc?' do
|
306
|
+
subject do
|
307
|
+
Facter::Util::Virtual.lxc?
|
308
|
+
end
|
309
|
+
|
310
|
+
fixture_path = fixtures('virtual', 'proc_1_cgroup')
|
311
|
+
|
312
|
+
context '/proc/1/cgroup has at least one hierarchy rooted in /lxc/' do
|
313
|
+
before :each do
|
314
|
+
fakepath = Pathname.new(File.join(fixture_path, 'in_a_container'))
|
315
|
+
Pathname.stubs(:new).with('/proc/1/cgroup').returns(fakepath)
|
316
|
+
end
|
317
|
+
|
318
|
+
it 'is true' do
|
319
|
+
subject.should be_true
|
320
|
+
end
|
321
|
+
end
|
322
|
+
|
323
|
+
context '/proc/1/cgroup has no hierarchies rooted in /lxc/' do
|
324
|
+
before :each do
|
325
|
+
fakepath = Pathname.new(File.join(fixture_path, 'not_in_a_container'))
|
326
|
+
Pathname.stubs(:new).with('/proc/1/cgroup').returns(fakepath)
|
327
|
+
end
|
328
|
+
|
329
|
+
it 'is false' do
|
330
|
+
subject.should be_false
|
331
|
+
end
|
332
|
+
end
|
333
|
+
end
|
334
|
+
|
335
|
+
describe '.docker?' do
|
336
|
+
subject do
|
337
|
+
Facter::Util::Virtual.docker?
|
338
|
+
end
|
339
|
+
|
340
|
+
fixture_path = fixtures('virtual', 'proc_1_cgroup')
|
341
|
+
|
342
|
+
context '/proc/1/cgroup has at least one hierarchy rooted in /docker/' do
|
343
|
+
before :each do
|
344
|
+
fakepath = Pathname.new(File.join(fixture_path, 'in_a_docker_container'))
|
345
|
+
Pathname.stubs(:new).with('/proc/1/cgroup').returns(fakepath)
|
346
|
+
end
|
347
|
+
|
348
|
+
it 'is true' do
|
349
|
+
subject.should be_true
|
350
|
+
end
|
351
|
+
end
|
352
|
+
|
353
|
+
context '/proc/1/cgroup has no hierarchies rooted in /docker/' do
|
354
|
+
before :each do
|
355
|
+
fakepath = Pathname.new(File.join(fixture_path, 'not_in_a_container'))
|
356
|
+
Pathname.stubs(:new).with('/proc/1/cgroup').returns(fakepath)
|
357
|
+
end
|
358
|
+
|
359
|
+
it 'is false' do
|
360
|
+
subject.should be_false
|
361
|
+
end
|
362
|
+
end
|
363
|
+
end
|
364
|
+
end
|