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.

Files changed (440) hide show
  1. checksums.yaml +7 -0
  2. data/COMMITTERS.md +194 -0
  3. data/CONTRIBUTING.md +65 -0
  4. data/Gemfile +53 -0
  5. data/LICENSE +15 -0
  6. data/README.md +33 -0
  7. data/Rakefile +79 -0
  8. data/bin/facter +20 -0
  9. data/etc/facter.conf +5 -0
  10. data/ext/build_defaults.yaml +24 -0
  11. data/ext/debian/changelog.erb +59 -0
  12. data/ext/debian/compat +1 -0
  13. data/ext/debian/control +14 -0
  14. data/ext/debian/copyright +19 -0
  15. data/ext/debian/docs +1 -0
  16. data/ext/debian/lintian-overrides +0 -0
  17. data/ext/debian/rules +10 -0
  18. data/ext/debian/source/format +1 -0
  19. data/ext/facter-diff +74 -0
  20. data/ext/ips/facter.p5m.erb +10 -0
  21. data/ext/ips/rules +7 -0
  22. data/ext/ips/transforms +18 -0
  23. data/ext/osx/file_mapping.yaml +27 -0
  24. data/ext/osx/preflight.erb +33 -0
  25. data/ext/osx/prototype.plist.erb +38 -0
  26. data/ext/project_data.yaml +36 -0
  27. data/ext/redhat/facter.spec.erb +220 -0
  28. data/ext/solaris/pkginfo +7 -0
  29. data/install.rb +380 -0
  30. data/lib/facter.rb +261 -0
  31. data/lib/facter/Cfkey.rb +42 -0
  32. data/lib/facter/application.rb +204 -0
  33. data/lib/facter/architecture.rb +50 -0
  34. data/lib/facter/augeasversion.rb +28 -0
  35. data/lib/facter/blockdevices.rb +105 -0
  36. data/lib/facter/core/aggregate.rb +220 -0
  37. data/lib/facter/core/directed_graph.rb +46 -0
  38. data/lib/facter/core/execution.rb +123 -0
  39. data/lib/facter/core/execution/base.rb +81 -0
  40. data/lib/facter/core/execution/posix.rb +50 -0
  41. data/lib/facter/core/execution/windows.rb +57 -0
  42. data/lib/facter/core/logging.rb +169 -0
  43. data/lib/facter/core/resolvable.rb +94 -0
  44. data/lib/facter/core/suitable.rb +113 -0
  45. data/lib/facter/dhcp_servers.rb +39 -0
  46. data/lib/facter/domain.rb +99 -0
  47. data/lib/facter/ec2.rb +44 -0
  48. data/lib/facter/ec2/rest.rb +130 -0
  49. data/lib/facter/facterversion.rb +15 -0
  50. data/lib/facter/filesystems.rb +38 -0
  51. data/lib/facter/fqdn.rb +24 -0
  52. data/lib/facter/gce.rb +16 -0
  53. data/lib/facter/gce/metadata.rb +87 -0
  54. data/lib/facter/hardwareisa.rb +20 -0
  55. data/lib/facter/hardwaremodel.rb +67 -0
  56. data/lib/facter/hostname.rb +31 -0
  57. data/lib/facter/id.rb +21 -0
  58. data/lib/facter/interfaces.rb +46 -0
  59. data/lib/facter/ipaddress.rb +171 -0
  60. data/lib/facter/ipaddress6.rb +82 -0
  61. data/lib/facter/iphostnumber.rb +29 -0
  62. data/lib/facter/kernel.rb +22 -0
  63. data/lib/facter/kernelmajversion.rb +23 -0
  64. data/lib/facter/kernelrelease.rb +50 -0
  65. data/lib/facter/kernelversion.rb +22 -0
  66. data/lib/facter/ldom.rb +47 -0
  67. data/lib/facter/lsbdistcodename.rb +16 -0
  68. data/lib/facter/lsbdistdescription.rb +25 -0
  69. data/lib/facter/lsbdistid.rb +16 -0
  70. data/lib/facter/lsbdistrelease.rb +16 -0
  71. data/lib/facter/lsbmajdistrelease.rb +27 -0
  72. data/lib/facter/lsbrelease.rb +16 -0
  73. data/lib/facter/macaddress.rb +97 -0
  74. data/lib/facter/macosx.rb +56 -0
  75. data/lib/facter/manufacturer.rb +68 -0
  76. data/lib/facter/memory.rb +168 -0
  77. data/lib/facter/netmask.rb +42 -0
  78. data/lib/facter/network.rb +20 -0
  79. data/lib/facter/operatingsystem.rb +141 -0
  80. data/lib/facter/operatingsystemmajrelease.rb +47 -0
  81. data/lib/facter/operatingsystemrelease.rb +250 -0
  82. data/lib/facter/osfamily.rb +37 -0
  83. data/lib/facter/partitions.rb +35 -0
  84. data/lib/facter/path.rb +14 -0
  85. data/lib/facter/physicalprocessorcount.rb +91 -0
  86. data/lib/facter/processor.rb +168 -0
  87. data/lib/facter/ps.rb +30 -0
  88. data/lib/facter/puppetversion.rb +20 -0
  89. data/lib/facter/rubysitedir.rb +12 -0
  90. data/lib/facter/rubyversion.rb +12 -0
  91. data/lib/facter/selinux.rb +99 -0
  92. data/lib/facter/ssh.rb +72 -0
  93. data/lib/facter/timezone.rb +14 -0
  94. data/lib/facter/uniqueid.rb +4 -0
  95. data/lib/facter/uptime.rb +34 -0
  96. data/lib/facter/uptime_days.rb +15 -0
  97. data/lib/facter/uptime_hours.rb +15 -0
  98. data/lib/facter/uptime_seconds.rb +24 -0
  99. data/lib/facter/util/architecture.rb +19 -0
  100. data/lib/facter/util/collection.rb +161 -0
  101. data/lib/facter/util/composite_loader.rb +12 -0
  102. data/lib/facter/util/config.rb +63 -0
  103. data/lib/facter/util/confine.rb +66 -0
  104. data/lib/facter/util/dhcp_servers.rb +43 -0
  105. data/lib/facter/util/directory_loader.rb +83 -0
  106. data/lib/facter/util/ec2.rb +106 -0
  107. data/lib/facter/util/fact.rb +204 -0
  108. data/lib/facter/util/file_read.rb +37 -0
  109. data/lib/facter/util/formatter.rb +39 -0
  110. data/lib/facter/util/ip.rb +285 -0
  111. data/lib/facter/util/ip/windows.rb +215 -0
  112. data/lib/facter/util/loader.rb +155 -0
  113. data/lib/facter/util/macaddress.rb +43 -0
  114. data/lib/facter/util/macosx.rb +73 -0
  115. data/lib/facter/util/manufacturer.rb +99 -0
  116. data/lib/facter/util/memory.rb +228 -0
  117. data/lib/facter/util/netmask.rb +40 -0
  118. data/lib/facter/util/normalization.rb +94 -0
  119. data/lib/facter/util/nothing_loader.rb +12 -0
  120. data/lib/facter/util/operatingsystem.rb +21 -0
  121. data/lib/facter/util/parser.rb +158 -0
  122. data/lib/facter/util/partitions.rb +41 -0
  123. data/lib/facter/util/partitions/linux.rb +65 -0
  124. data/lib/facter/util/plist.rb +24 -0
  125. data/lib/facter/util/plist/generator.rb +228 -0
  126. data/lib/facter/util/plist/parser.rb +226 -0
  127. data/lib/facter/util/posix.rb +16 -0
  128. data/lib/facter/util/processor.rb +289 -0
  129. data/lib/facter/util/registry.rb +11 -0
  130. data/lib/facter/util/resolution.rb +160 -0
  131. data/lib/facter/util/solaris_zones.rb +158 -0
  132. data/lib/facter/util/unix_root.rb +5 -0
  133. data/lib/facter/util/uptime.rb +81 -0
  134. data/lib/facter/util/values.rb +109 -0
  135. data/lib/facter/util/virtual.rb +180 -0
  136. data/lib/facter/util/vlans.rb +21 -0
  137. data/lib/facter/util/windows_root.rb +7 -0
  138. data/lib/facter/util/wmi.rb +16 -0
  139. data/lib/facter/util/xendomains.rb +10 -0
  140. data/lib/facter/version.rb +86 -0
  141. data/lib/facter/virtual.rb +311 -0
  142. data/lib/facter/vlans.rb +17 -0
  143. data/lib/facter/xendomains.rb +20 -0
  144. data/lib/facter/zfs_version.rb +10 -0
  145. data/lib/facter/zonename.rb +6 -0
  146. data/lib/facter/zones.rb +17 -0
  147. data/lib/facter/zpool_version.rb +10 -0
  148. data/spec/fixtures/cpuinfo/amd64dual +57 -0
  149. data/spec/fixtures/cpuinfo/amd64quad +79 -0
  150. data/spec/fixtures/cpuinfo/amd64solo +23 -0
  151. data/spec/fixtures/cpuinfo/amd64tri +86 -0
  152. data/spec/fixtures/cpuinfo/amd64twentyfour +600 -0
  153. data/spec/fixtures/cpuinfo/bbg3-armel +12 -0
  154. data/spec/fixtures/cpuinfo/beaglexm-armel +12 -0
  155. data/spec/fixtures/cpuinfo/panda-armel +17 -0
  156. data/spec/fixtures/cpuinfo/ppc64 +19 -0
  157. data/spec/fixtures/cpuinfo/sparc +10 -0
  158. data/spec/fixtures/hpux/machinfo/hppa-rp4440 +26 -0
  159. data/spec/fixtures/hpux/machinfo/ia64-rx2620 +49 -0
  160. data/spec/fixtures/hpux/machinfo/ia64-rx6600 +26 -0
  161. data/spec/fixtures/hpux/machinfo/ia64-rx8640 +53 -0
  162. data/spec/fixtures/hpux/machinfo/superdome-server-SD32B +53 -0
  163. data/spec/fixtures/hpux/machinfo/superdome2-16s +31 -0
  164. data/spec/fixtures/hpux/sched.models +174 -0
  165. data/spec/fixtures/hpux/unistd.h +1534 -0
  166. data/spec/fixtures/ifconfig/bsd_ifconfig_all_with_multiple_interfaces +18 -0
  167. data/spec/fixtures/ifconfig/centos_5_5 +17 -0
  168. data/spec/fixtures/ifconfig/centos_5_5_eth0 +8 -0
  169. data/spec/fixtures/ifconfig/darwin_10_3_0 +26 -0
  170. data/spec/fixtures/ifconfig/darwin_10_3_0_en0 +6 -0
  171. data/spec/fixtures/ifconfig/darwin_10_6_4 +28 -0
  172. data/spec/fixtures/ifconfig/darwin_10_6_4_en1 +6 -0
  173. data/spec/fixtures/ifconfig/darwin_10_6_6_dualstack +8 -0
  174. data/spec/fixtures/ifconfig/darwin_10_6_6_dualstack_en1 +7 -0
  175. data/spec/fixtures/ifconfig/darwin_9_8_0 +26 -0
  176. data/spec/fixtures/ifconfig/darwin_9_8_0_en0 +6 -0
  177. data/spec/fixtures/ifconfig/darwin_ifconfig_all_with_multiple_interfaces +23 -0
  178. data/spec/fixtures/ifconfig/fedora_10 +36 -0
  179. data/spec/fixtures/ifconfig/fedora_10_eth0 +9 -0
  180. data/spec/fixtures/ifconfig/fedora_13 +18 -0
  181. data/spec/fixtures/ifconfig/fedora_13_eth0 +9 -0
  182. data/spec/fixtures/ifconfig/fedora_8 +38 -0
  183. data/spec/fixtures/ifconfig/fedora_8_eth0 +9 -0
  184. data/spec/fixtures/ifconfig/freebsd_6_0 +12 -0
  185. data/spec/fixtures/ifconfig/ifconfig_net_tools_1.60.txt +19 -0
  186. data/spec/fixtures/ifconfig/ifconfig_ubuntu_1204.txt +16 -0
  187. data/spec/fixtures/ifconfig/linux_ifconfig_all_with_multiple_interfaces +19 -0
  188. data/spec/fixtures/ifconfig/linux_ifconfig_no_addr +19 -0
  189. data/spec/fixtures/ifconfig/linux_ifconfig_no_mac +8 -0
  190. data/spec/fixtures/ifconfig/linux_ifconfig_venet +24 -0
  191. data/spec/fixtures/ifconfig/open_solaris_10 +12 -0
  192. data/spec/fixtures/ifconfig/open_solaris_b132 +20 -0
  193. data/spec/fixtures/ifconfig/openbsd_bridge_rules +11 -0
  194. data/spec/fixtures/ifconfig/sunos_ifconfig_all_with_multiple_interfaces +10 -0
  195. data/spec/fixtures/ifconfig/ubuntu_7_04 +38 -0
  196. data/spec/fixtures/ifconfig/ubuntu_7_04_eth0 +9 -0
  197. data/spec/fixtures/ldom/ldom_v1 +6 -0
  198. data/spec/fixtures/netstat/centos_5_5 +5 -0
  199. data/spec/fixtures/netstat/darwin_10_3_0 +35 -0
  200. data/spec/fixtures/netstat/darwin_10_6_4 +29 -0
  201. data/spec/fixtures/netstat/darwin_10_6_6_dualstack +34 -0
  202. data/spec/fixtures/netstat/darwin_9_8_0 +28 -0
  203. data/spec/fixtures/netstat/fedora_10 +7 -0
  204. data/spec/fixtures/netstat/open_solaris_10 +16 -0
  205. data/spec/fixtures/netstat/open_solaris_b132 +17 -0
  206. data/spec/fixtures/netstat/ubuntu_7_04 +7 -0
  207. data/spec/fixtures/processorcount/solaris-psrinfo +24 -0
  208. data/spec/fixtures/processorcount/solaris-sparc-kstat-cpu-info +1216 -0
  209. data/spec/fixtures/processorcount/solaris-x86_64-kstat-cpu-info +225 -0
  210. data/spec/fixtures/unit/dhcp_servers/nmcli_devices +4 -0
  211. data/spec/fixtures/unit/dhcp_servers/nmcli_devices_disconnected +4 -0
  212. data/spec/fixtures/unit/dhcp_servers/nmcli_eth0_dhcp +36 -0
  213. data/spec/fixtures/unit/dhcp_servers/nmcli_eth0_static +24 -0
  214. data/spec/fixtures/unit/dhcp_servers/nmcli_wlan0_dhcp +49 -0
  215. data/spec/fixtures/unit/dhcp_servers/nmcli_wlan0_static +37 -0
  216. data/spec/fixtures/unit/dhcp_servers/route +3 -0
  217. data/spec/fixtures/unit/dhcp_servers/route_nogw +1 -0
  218. data/spec/fixtures/unit/ec2/rest/meta-data/root +20 -0
  219. data/spec/fixtures/unit/filesystems/linux +28 -0
  220. data/spec/fixtures/unit/gce/metadata/metadata.json +69 -0
  221. data/spec/fixtures/unit/interfaces/ifconfig_net_tools_1.60.txt +19 -0
  222. data/spec/fixtures/unit/interfaces/ifconfig_net_tools_1.60.txt.em1 +10 -0
  223. data/spec/fixtures/unit/interfaces/ifconfig_net_tools_1.60.txt.lo +8 -0
  224. data/spec/fixtures/unit/ipaddress/ifconfig_multiple_127_addresses.txt +20 -0
  225. data/spec/fixtures/unit/ipaddress/ifconfig_net_tools_1.60.txt +19 -0
  226. data/spec/fixtures/unit/ipaddress/ifconfig_non_english_locale.txt +18 -0
  227. data/spec/fixtures/unit/ipaddress/ifconfig_ubuntu_1204.txt +16 -0
  228. data/spec/fixtures/unit/kernelrelease/openbsd-5.3 +2 -0
  229. data/spec/fixtures/unit/kernelrelease/openbsd-5.3-current +3 -0
  230. data/spec/fixtures/unit/memory/aix-svmon +9 -0
  231. data/spec/fixtures/unit/memory/aix-swap_l +2 -0
  232. data/spec/fixtures/unit/memory/darwin-swapinfo-multiple +3 -0
  233. data/spec/fixtures/unit/memory/darwin-swapinfo-single +2 -0
  234. data/spec/fixtures/unit/memory/darwin-vm_stat +13 -0
  235. data/spec/fixtures/unit/memory/dragonfly-vmstat +3 -0
  236. data/spec/fixtures/unit/memory/freebsd-vmstat +3 -0
  237. data/spec/fixtures/unit/memory/linux-proc_meminfo +10 -0
  238. data/spec/fixtures/unit/memory/openbsd-vmstat +3 -0
  239. data/spec/fixtures/unit/memory/smartos_zone_swap_l-single +2 -0
  240. data/spec/fixtures/unit/memory/solaris-prtconf +4 -0
  241. data/spec/fixtures/unit/memory/solaris-swap_l-multiple +3 -0
  242. data/spec/fixtures/unit/memory/solaris-swap_l-single +2 -0
  243. data/spec/fixtures/unit/memory/solaris-vmstat +3 -0
  244. data/spec/fixtures/unit/netmask/darwin_10_8_5.txt +30 -0
  245. data/spec/fixtures/unit/netmask/ifconfig_aix_7.txt +3 -0
  246. data/spec/fixtures/unit/netmask/ifconfig_net_tools_1.60.txt +19 -0
  247. data/spec/fixtures/unit/netmask/ifconfig_ubuntu_1204.txt +16 -0
  248. data/spec/fixtures/unit/selinux/selinux_sestatus +6 -0
  249. data/spec/fixtures/unit/util/dhcp_servers/route +3 -0
  250. data/spec/fixtures/unit/util/dhcp_servers/route_nogw +1 -0
  251. data/spec/fixtures/unit/util/ec2/centos-arp-ec2.out +1 -0
  252. data/spec/fixtures/unit/util/ec2/linux-arp-ec2.out +1 -0
  253. data/spec/fixtures/unit/util/ec2/linux-arp-not-ec2.out +5 -0
  254. data/spec/fixtures/unit/util/ec2/solaris8_arp_a_not_ec2.out +7 -0
  255. data/spec/fixtures/unit/util/ec2/windows-2008-arp-a-not-ec2.out +6 -0
  256. data/spec/fixtures/unit/util/ec2/windows-2008-arp-a.out +10 -0
  257. data/spec/fixtures/unit/util/ip/6.0-STABLE_FreeBSD_ifconfig +12 -0
  258. data/spec/fixtures/unit/util/ip/Mac_OS_X_10.5.5_ifconfig +26 -0
  259. data/spec/fixtures/unit/util/ip/darwin_ifconfig_all_with_multiple_interfaces +10 -0
  260. data/spec/fixtures/unit/util/ip/darwin_ifconfig_single_interface +6 -0
  261. data/spec/fixtures/unit/util/ip/debian_kfreebsd_ifconfig +40 -0
  262. data/spec/fixtures/unit/util/ip/hpux_1111_ifconfig_lan0 +2 -0
  263. data/spec/fixtures/unit/util/ip/hpux_1111_ifconfig_lan1 +2 -0
  264. data/spec/fixtures/unit/util/ip/hpux_1111_ifconfig_lo0 +2 -0
  265. data/spec/fixtures/unit/util/ip/hpux_1111_lanscan +5 -0
  266. data/spec/fixtures/unit/util/ip/hpux_1111_netstat_in +4 -0
  267. data/spec/fixtures/unit/util/ip/hpux_1131_asterisk_ifconfig_lan0 +2 -0
  268. data/spec/fixtures/unit/util/ip/hpux_1131_asterisk_ifconfig_lan1 +2 -0
  269. data/spec/fixtures/unit/util/ip/hpux_1131_asterisk_ifconfig_lo0 +2 -0
  270. data/spec/fixtures/unit/util/ip/hpux_1131_asterisk_lanscan +5 -0
  271. data/spec/fixtures/unit/util/ip/hpux_1131_asterisk_netstat_in +4 -0
  272. data/spec/fixtures/unit/util/ip/hpux_1131_ifconfig_lan0 +2 -0
  273. data/spec/fixtures/unit/util/ip/hpux_1131_ifconfig_lan1 +2 -0
  274. data/spec/fixtures/unit/util/ip/hpux_1131_ifconfig_lo0 +2 -0
  275. data/spec/fixtures/unit/util/ip/hpux_1131_lanscan +4 -0
  276. data/spec/fixtures/unit/util/ip/hpux_1131_netstat_in +4 -0
  277. data/spec/fixtures/unit/util/ip/hpux_1131_nic_bonding_ifconfig_lan1 +2 -0
  278. data/spec/fixtures/unit/util/ip/hpux_1131_nic_bonding_ifconfig_lan4 +2 -0
  279. data/spec/fixtures/unit/util/ip/hpux_1131_nic_bonding_ifconfig_lan4_1 +2 -0
  280. data/spec/fixtures/unit/util/ip/hpux_1131_nic_bonding_ifconfig_lo0 +2 -0
  281. data/spec/fixtures/unit/util/ip/hpux_1131_nic_bonding_lanscan +9 -0
  282. data/spec/fixtures/unit/util/ip/hpux_1131_nic_bonding_netstat_in +6 -0
  283. data/spec/fixtures/unit/util/ip/linux_2_6_35_proc_net_bonding_bond0 +19 -0
  284. data/spec/fixtures/unit/util/ip/linux_get_single_interface_eth0 +10 -0
  285. data/spec/fixtures/unit/util/ip/linux_get_single_interface_ib0 +8 -0
  286. data/spec/fixtures/unit/util/ip/linux_get_single_interface_lo +9 -0
  287. data/spec/fixtures/unit/util/ip/linux_ifconfig_all_with_single_interface +18 -0
  288. data/spec/fixtures/unit/util/ip/linux_ifconfig_ib0 +8 -0
  289. data/spec/fixtures/unit/util/ip/solaris_ifconfig_all_with_multiple_interfaces +8 -0
  290. data/spec/fixtures/unit/util/ip/solaris_ifconfig_single_interface +3 -0
  291. data/spec/fixtures/unit/util/ip/windows_netsh_all_interfaces +12 -0
  292. data/spec/fixtures/unit/util/ip/windows_netsh_single_interface +7 -0
  293. data/spec/fixtures/unit/util/ip/windows_netsh_single_interface6 +18 -0
  294. data/spec/fixtures/unit/util/manufacturer/freebsd_dmidecode +42 -0
  295. data/spec/fixtures/unit/util/manufacturer/intel_linux_dmidecode +549 -0
  296. data/spec/fixtures/unit/util/manufacturer/linux_dmidecode_with_spaces +60 -0
  297. data/spec/fixtures/unit/util/manufacturer/opensolaris_smbios +33 -0
  298. data/spec/fixtures/unit/util/manufacturer/smartos_smbios +533 -0
  299. data/spec/fixtures/unit/util/manufacturer/solaris_sunfire_v120_prtdiag +33 -0
  300. data/spec/fixtures/unit/util/manufacturer/solaris_t5220_prtdiag +136 -0
  301. data/spec/fixtures/unit/util/operatingsystem/cumuluslinux.txt +8 -0
  302. data/spec/fixtures/unit/util/operatingsystem/redhat-7.txt +12 -0
  303. data/spec/fixtures/unit/util/operatingsystem/sabayon.txt +7 -0
  304. data/spec/fixtures/unit/util/operatingsystem/wheezy.txt +9 -0
  305. data/spec/fixtures/unit/util/partitions/partitions/mount +9 -0
  306. data/spec/fixtures/unit/util/processor/solaris-i86pc +28 -0
  307. data/spec/fixtures/unit/util/processor/solaris-sun4u +151 -0
  308. data/spec/fixtures/unit/util/processor/x86-pentium2 +41 -0
  309. data/spec/fixtures/unit/util/uptime/kstat_boot_time +1 -0
  310. data/spec/fixtures/unit/util/uptime/sysctl_kern_boottime_darwin +1 -0
  311. data/spec/fixtures/unit/util/uptime/sysctl_kern_boottime_openbsd +1 -0
  312. data/spec/fixtures/unit/util/uptime/ubuntu_proc_uptime +1 -0
  313. data/spec/fixtures/unit/util/virtual/invalid_unicode_dmi_entries +0 -0
  314. data/spec/fixtures/unit/util/virtual/solaris10_proc_self_status1 +0 -0
  315. data/spec/fixtures/unit/util/vlans/centos-5-no-vlans +2 -0
  316. data/spec/fixtures/unit/util/vlans/linux_vlan_config +6 -0
  317. data/spec/fixtures/unit/util/xendomains/xendomains +4 -0
  318. data/spec/fixtures/unit/virtual/sysfs_dmi_entries_raw.txt +0 -0
  319. data/spec/fixtures/unit/zfs_version/freebsd_8.2 +14 -0
  320. data/spec/fixtures/unit/zfs_version/freebsd_9.0 +13 -0
  321. data/spec/fixtures/unit/zfs_version/linux-fuse_0.6.9 +14 -0
  322. data/spec/fixtures/unit/zfs_version/solaris_10 +10 -0
  323. data/spec/fixtures/unit/zfs_version/solaris_11 +12 -0
  324. data/spec/fixtures/unit/zpool_version/freebsd_8.2 +26 -0
  325. data/spec/fixtures/unit/zpool_version/freebsd_9.0 +38 -0
  326. data/spec/fixtures/unit/zpool_version/linux-fuse_0.6.9 +35 -0
  327. data/spec/fixtures/unit/zpool_version/solaris_10 +31 -0
  328. data/spec/fixtures/unit/zpool_version/solaris_11 +43 -0
  329. data/spec/fixtures/virtual/proc_1_cgroup/in_a_container +9 -0
  330. data/spec/fixtures/virtual/proc_1_cgroup/in_a_docker_container +8 -0
  331. data/spec/fixtures/virtual/proc_1_cgroup/not_in_a_container +9 -0
  332. data/spec/fixtures/virtual/proc_self_status/vserver_2_1/guest +37 -0
  333. data/spec/fixtures/virtual/proc_self_status/vserver_2_1/host +36 -0
  334. data/spec/fixtures/virtual/proc_self_status/vserver_2_3/guest +39 -0
  335. data/spec/fixtures/virtual/proc_self_status/vserver_2_3/host +39 -0
  336. data/spec/integration/facter_spec.rb +39 -0
  337. data/spec/lib/facter_spec/cpuinfo.rb +15 -0
  338. data/spec/lib/facter_spec/windows_network.rb +64 -0
  339. data/spec/puppetlabs_spec/files.rb +57 -0
  340. data/spec/puppetlabs_spec/fixtures.rb +49 -0
  341. data/spec/puppetlabs_spec/matchers.rb +87 -0
  342. data/spec/puppetlabs_spec/verbose.rb +9 -0
  343. data/spec/puppetlabs_spec_helper.rb +26 -0
  344. data/spec/shared_contexts/platform.rb +55 -0
  345. data/spec/shared_formats/parses.rb +3 -0
  346. data/spec/spec_helper.rb +75 -0
  347. data/spec/unit/application_spec.rb +101 -0
  348. data/spec/unit/architecture_spec.rb +63 -0
  349. data/spec/unit/blockdevices_spec.rb +109 -0
  350. data/spec/unit/core/aggregate_spec.rb +125 -0
  351. data/spec/unit/core/directed_graph_spec.rb +79 -0
  352. data/spec/unit/core/execution/base_spec.rb +130 -0
  353. data/spec/unit/core/execution/posix_spec.rb +86 -0
  354. data/spec/unit/core/execution/windows_spec.rb +106 -0
  355. data/spec/unit/core/execution_spec.rb +42 -0
  356. data/spec/unit/core/logging_spec.rb +104 -0
  357. data/spec/unit/core/resolvable_spec.rb +81 -0
  358. data/spec/unit/core/suitable_spec.rb +106 -0
  359. data/spec/unit/dhcp_servers_spec.rb +152 -0
  360. data/spec/unit/domain_spec.rb +310 -0
  361. data/spec/unit/ec2/rest_spec.rb +145 -0
  362. data/spec/unit/ec2_spec.rb +127 -0
  363. data/spec/unit/facter_spec.rb +108 -0
  364. data/spec/unit/filesystems_spec.rb +50 -0
  365. data/spec/unit/fqdn_spec.rb +16 -0
  366. data/spec/unit/gce/metadata_spec.rb +49 -0
  367. data/spec/unit/gce_spec.rb +34 -0
  368. data/spec/unit/hardwareisa_spec.rb +41 -0
  369. data/spec/unit/hardwaremodel_spec.rb +56 -0
  370. data/spec/unit/hostname_spec.rb +40 -0
  371. data/spec/unit/id_spec.rb +29 -0
  372. data/spec/unit/interfaces_spec.rb +57 -0
  373. data/spec/unit/ipaddress6_spec.rb +161 -0
  374. data/spec/unit/ipaddress_spec.rb +114 -0
  375. data/spec/unit/kernel_spec.rb +24 -0
  376. data/spec/unit/kernelmajversion_spec.rb +22 -0
  377. data/spec/unit/kernelrelease_spec.rb +69 -0
  378. data/spec/unit/kernelversion_spec.rb +32 -0
  379. data/spec/unit/ldom_spec.rb +75 -0
  380. data/spec/unit/lsbdistcodename_spec.rb +25 -0
  381. data/spec/unit/lsbdistdescription_spec.rb +25 -0
  382. data/spec/unit/lsbdistid_spec.rb +25 -0
  383. data/spec/unit/lsbdistrelease_spec.rb +25 -0
  384. data/spec/unit/lsbmajdistrelease_spec.rb +13 -0
  385. data/spec/unit/lsbrelease_spec.rb +25 -0
  386. data/spec/unit/macaddress_spec.rb +73 -0
  387. data/spec/unit/manufacturer_spec.rb +115 -0
  388. data/spec/unit/memory_spec.rb +470 -0
  389. data/spec/unit/netmask_spec.rb +106 -0
  390. data/spec/unit/operatingsystem_spec.rb +160 -0
  391. data/spec/unit/operatingsystemmajrelease_spec.rb +38 -0
  392. data/spec/unit/operatingsystemrelease_spec.rb +236 -0
  393. data/spec/unit/osfamily_spec.rb +62 -0
  394. data/spec/unit/partitions_spec.rb +48 -0
  395. data/spec/unit/physicalprocessorcount_spec.rb +85 -0
  396. data/spec/unit/processor_spec.rb +401 -0
  397. data/spec/unit/ps_spec.rb +42 -0
  398. data/spec/unit/selinux_spec.rb +114 -0
  399. data/spec/unit/ssh_spec.rb +77 -0
  400. data/spec/unit/uniqueid_spec.rb +27 -0
  401. data/spec/unit/uptime_spec.rb +110 -0
  402. data/spec/unit/util/collection_spec.rb +258 -0
  403. data/spec/unit/util/config_spec.rb +97 -0
  404. data/spec/unit/util/confine_spec.rb +148 -0
  405. data/spec/unit/util/dhcp_servers_spec.rb +63 -0
  406. data/spec/unit/util/directory_loader_spec.rb +88 -0
  407. data/spec/unit/util/ec2_spec.rb +184 -0
  408. data/spec/unit/util/fact_spec.rb +142 -0
  409. data/spec/unit/util/file_read_spec.rb +29 -0
  410. data/spec/unit/util/formatter_spec.rb +50 -0
  411. data/spec/unit/util/ip/windows_spec.rb +80 -0
  412. data/spec/unit/util/ip_spec.rb +467 -0
  413. data/spec/unit/util/loader_spec.rb +286 -0
  414. data/spec/unit/util/macaddress_spec.rb +141 -0
  415. data/spec/unit/util/macosx_spec.rb +114 -0
  416. data/spec/unit/util/manufacturer_spec.rb +223 -0
  417. data/spec/unit/util/normalization_spec.rb +113 -0
  418. data/spec/unit/util/operatingsystem_spec.rb +92 -0
  419. data/spec/unit/util/parser_spec.rb +200 -0
  420. data/spec/unit/util/partitions/partitions_spec.rb +67 -0
  421. data/spec/unit/util/partitions_spec.rb +19 -0
  422. data/spec/unit/util/posix_spec.rb +11 -0
  423. data/spec/unit/util/processor_spec.rb +92 -0
  424. data/spec/unit/util/registry_spec.rb +76 -0
  425. data/spec/unit/util/resolution_spec.rb +129 -0
  426. data/spec/unit/util/solaris_zones_spec.rb +127 -0
  427. data/spec/unit/util/uptime_spec.rb +126 -0
  428. data/spec/unit/util/values_spec.rb +171 -0
  429. data/spec/unit/util/virtual_spec.rb +364 -0
  430. data/spec/unit/util/vlans_spec.rb +42 -0
  431. data/spec/unit/util/wmi_spec.rb +19 -0
  432. data/spec/unit/util/xendomains_spec.rb +21 -0
  433. data/spec/unit/version_spec.rb +42 -0
  434. data/spec/unit/virtual_spec.rb +519 -0
  435. data/spec/unit/zfs_version_spec.rb +75 -0
  436. data/spec/unit/zonename_spec.rb +14 -0
  437. data/spec/unit/zones_spec.rb +55 -0
  438. data/spec/unit/zpool_version_spec.rb +75 -0
  439. data/spec/watchr.rb +125 -0
  440. 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