facter 2.0.1.rc1-universal-darwin

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of facter might be problematic. Click here for more details.

Files changed (379) hide show
  1. checksums.yaml +7 -0
  2. data/COMMITTERS.md +194 -0
  3. data/CONTRIBUTING.md +65 -0
  4. data/Gemfile +43 -0
  5. data/LICENSE +15 -0
  6. data/README.md +33 -0
  7. data/Rakefile +79 -0
  8. data/bin/facter +16 -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 +33 -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 +262 -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 +100 -0
  39. data/lib/facter/core/execution/base.rb +73 -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 +117 -0
  45. data/lib/facter/domain.rb +99 -0
  46. data/lib/facter/ec2.rb +37 -0
  47. data/lib/facter/facterversion.rb +15 -0
  48. data/lib/facter/filesystems.rb +38 -0
  49. data/lib/facter/fqdn.rb +22 -0
  50. data/lib/facter/hardwareisa.rb +20 -0
  51. data/lib/facter/hardwaremodel.rb +67 -0
  52. data/lib/facter/hostname.rb +33 -0
  53. data/lib/facter/id.rb +21 -0
  54. data/lib/facter/interfaces.rb +46 -0
  55. data/lib/facter/ipaddress.rb +171 -0
  56. data/lib/facter/ipaddress6.rb +82 -0
  57. data/lib/facter/iphostnumber.rb +29 -0
  58. data/lib/facter/kernel.rb +22 -0
  59. data/lib/facter/kernelmajversion.rb +15 -0
  60. data/lib/facter/kernelrelease.rb +42 -0
  61. data/lib/facter/kernelversion.rb +22 -0
  62. data/lib/facter/ldom.rb +47 -0
  63. data/lib/facter/lsbdistcodename.rb +18 -0
  64. data/lib/facter/lsbdistdescription.rb +21 -0
  65. data/lib/facter/lsbdistid.rb +18 -0
  66. data/lib/facter/lsbdistrelease.rb +18 -0
  67. data/lib/facter/lsbmajdistrelease.rb +27 -0
  68. data/lib/facter/lsbrelease.rb +18 -0
  69. data/lib/facter/macaddress.rb +97 -0
  70. data/lib/facter/macosx.rb +56 -0
  71. data/lib/facter/manufacturer.rb +68 -0
  72. data/lib/facter/memory.rb +162 -0
  73. data/lib/facter/netmask.rb +42 -0
  74. data/lib/facter/network.rb +20 -0
  75. data/lib/facter/operatingsystem.rb +121 -0
  76. data/lib/facter/operatingsystemmajrelease.rb +33 -0
  77. data/lib/facter/operatingsystemrelease.rb +226 -0
  78. data/lib/facter/osfamily.rb +35 -0
  79. data/lib/facter/path.rb +14 -0
  80. data/lib/facter/physicalprocessorcount.rb +84 -0
  81. data/lib/facter/processor.rb +183 -0
  82. data/lib/facter/ps.rb +30 -0
  83. data/lib/facter/puppetversion.rb +20 -0
  84. data/lib/facter/rubysitedir.rb +12 -0
  85. data/lib/facter/rubyversion.rb +12 -0
  86. data/lib/facter/selinux.rb +99 -0
  87. data/lib/facter/ssh.rb +72 -0
  88. data/lib/facter/timezone.rb +14 -0
  89. data/lib/facter/uniqueid.rb +4 -0
  90. data/lib/facter/uptime.rb +34 -0
  91. data/lib/facter/uptime_days.rb +15 -0
  92. data/lib/facter/uptime_hours.rb +15 -0
  93. data/lib/facter/uptime_seconds.rb +24 -0
  94. data/lib/facter/util/architecture.rb +19 -0
  95. data/lib/facter/util/collection.rb +161 -0
  96. data/lib/facter/util/composite_loader.rb +12 -0
  97. data/lib/facter/util/config.rb +61 -0
  98. data/lib/facter/util/confine.rb +66 -0
  99. data/lib/facter/util/directory_loader.rb +83 -0
  100. data/lib/facter/util/ec2.rb +101 -0
  101. data/lib/facter/util/fact.rb +204 -0
  102. data/lib/facter/util/file_read.rb +37 -0
  103. data/lib/facter/util/formatter.rb +38 -0
  104. data/lib/facter/util/ip.rb +285 -0
  105. data/lib/facter/util/ip/windows.rb +215 -0
  106. data/lib/facter/util/loader.rb +146 -0
  107. data/lib/facter/util/macaddress.rb +43 -0
  108. data/lib/facter/util/macosx.rb +73 -0
  109. data/lib/facter/util/manufacturer.rb +104 -0
  110. data/lib/facter/util/memory.rb +228 -0
  111. data/lib/facter/util/monkey_patches.rb +8 -0
  112. data/lib/facter/util/netmask.rb +40 -0
  113. data/lib/facter/util/normalization.rb +94 -0
  114. data/lib/facter/util/nothing_loader.rb +12 -0
  115. data/lib/facter/util/parser.rb +158 -0
  116. data/lib/facter/util/plist.rb +24 -0
  117. data/lib/facter/util/plist/generator.rb +228 -0
  118. data/lib/facter/util/plist/parser.rb +226 -0
  119. data/lib/facter/util/processor.rb +291 -0
  120. data/lib/facter/util/registry.rb +11 -0
  121. data/lib/facter/util/resolution.rb +152 -0
  122. data/lib/facter/util/solaris_zones.rb +158 -0
  123. data/lib/facter/util/unix_root.rb +5 -0
  124. data/lib/facter/util/uptime.rb +81 -0
  125. data/lib/facter/util/values.rb +80 -0
  126. data/lib/facter/util/virtual.rb +151 -0
  127. data/lib/facter/util/vlans.rb +24 -0
  128. data/lib/facter/util/windows_root.rb +37 -0
  129. data/lib/facter/util/wmi.rb +16 -0
  130. data/lib/facter/util/xendomains.rb +10 -0
  131. data/lib/facter/version.rb +86 -0
  132. data/lib/facter/virtual.rb +262 -0
  133. data/lib/facter/vlans.rb +17 -0
  134. data/lib/facter/xendomains.rb +20 -0
  135. data/lib/facter/zfs_version.rb +10 -0
  136. data/lib/facter/zonename.rb +6 -0
  137. data/lib/facter/zones.rb +17 -0
  138. data/lib/facter/zpool_version.rb +10 -0
  139. data/spec/fixtures/cpuinfo/amd64dual +57 -0
  140. data/spec/fixtures/cpuinfo/amd64quad +79 -0
  141. data/spec/fixtures/cpuinfo/amd64solo +23 -0
  142. data/spec/fixtures/cpuinfo/amd64tri +86 -0
  143. data/spec/fixtures/cpuinfo/amd64twentyfour +600 -0
  144. data/spec/fixtures/cpuinfo/bbg3-armel +12 -0
  145. data/spec/fixtures/cpuinfo/beaglexm-armel +12 -0
  146. data/spec/fixtures/cpuinfo/panda-armel +17 -0
  147. data/spec/fixtures/cpuinfo/ppc64 +19 -0
  148. data/spec/fixtures/cpuinfo/sparc +10 -0
  149. data/spec/fixtures/hpux/machinfo/hppa-rp4440 +26 -0
  150. data/spec/fixtures/hpux/machinfo/ia64-rx2620 +49 -0
  151. data/spec/fixtures/hpux/machinfo/ia64-rx6600 +26 -0
  152. data/spec/fixtures/hpux/machinfo/ia64-rx8640 +53 -0
  153. data/spec/fixtures/hpux/machinfo/superdome-server-SD32B +53 -0
  154. data/spec/fixtures/hpux/machinfo/superdome2-16s +31 -0
  155. data/spec/fixtures/hpux/sched.models +174 -0
  156. data/spec/fixtures/hpux/unistd.h +1534 -0
  157. data/spec/fixtures/ifconfig/bsd_ifconfig_all_with_multiple_interfaces +18 -0
  158. data/spec/fixtures/ifconfig/centos_5_5 +17 -0
  159. data/spec/fixtures/ifconfig/centos_5_5_eth0 +8 -0
  160. data/spec/fixtures/ifconfig/darwin_10_3_0 +26 -0
  161. data/spec/fixtures/ifconfig/darwin_10_3_0_en0 +6 -0
  162. data/spec/fixtures/ifconfig/darwin_10_6_4 +28 -0
  163. data/spec/fixtures/ifconfig/darwin_10_6_4_en1 +6 -0
  164. data/spec/fixtures/ifconfig/darwin_10_6_6_dualstack +8 -0
  165. data/spec/fixtures/ifconfig/darwin_10_6_6_dualstack_en1 +7 -0
  166. data/spec/fixtures/ifconfig/darwin_9_8_0 +26 -0
  167. data/spec/fixtures/ifconfig/darwin_9_8_0_en0 +6 -0
  168. data/spec/fixtures/ifconfig/darwin_ifconfig_all_with_multiple_interfaces +23 -0
  169. data/spec/fixtures/ifconfig/fedora_10 +36 -0
  170. data/spec/fixtures/ifconfig/fedora_10_eth0 +9 -0
  171. data/spec/fixtures/ifconfig/fedora_13 +18 -0
  172. data/spec/fixtures/ifconfig/fedora_13_eth0 +9 -0
  173. data/spec/fixtures/ifconfig/fedora_8 +38 -0
  174. data/spec/fixtures/ifconfig/fedora_8_eth0 +9 -0
  175. data/spec/fixtures/ifconfig/freebsd_6_0 +12 -0
  176. data/spec/fixtures/ifconfig/ifconfig_net_tools_1.60.txt +19 -0
  177. data/spec/fixtures/ifconfig/ifconfig_ubuntu_1204.txt +16 -0
  178. data/spec/fixtures/ifconfig/linux_ifconfig_all_with_multiple_interfaces +19 -0
  179. data/spec/fixtures/ifconfig/linux_ifconfig_no_addr +19 -0
  180. data/spec/fixtures/ifconfig/linux_ifconfig_no_mac +8 -0
  181. data/spec/fixtures/ifconfig/linux_ifconfig_venet +24 -0
  182. data/spec/fixtures/ifconfig/open_solaris_10 +12 -0
  183. data/spec/fixtures/ifconfig/open_solaris_b132 +20 -0
  184. data/spec/fixtures/ifconfig/sunos_ifconfig_all_with_multiple_interfaces +10 -0
  185. data/spec/fixtures/ifconfig/ubuntu_7_04 +38 -0
  186. data/spec/fixtures/ifconfig/ubuntu_7_04_eth0 +9 -0
  187. data/spec/fixtures/ldom/ldom_v1 +6 -0
  188. data/spec/fixtures/netstat/centos_5_5 +5 -0
  189. data/spec/fixtures/netstat/darwin_10_3_0 +35 -0
  190. data/spec/fixtures/netstat/darwin_10_6_4 +29 -0
  191. data/spec/fixtures/netstat/darwin_10_6_6_dualstack +34 -0
  192. data/spec/fixtures/netstat/darwin_9_8_0 +28 -0
  193. data/spec/fixtures/netstat/fedora_10 +7 -0
  194. data/spec/fixtures/netstat/open_solaris_10 +16 -0
  195. data/spec/fixtures/netstat/open_solaris_b132 +17 -0
  196. data/spec/fixtures/netstat/ubuntu_7_04 +7 -0
  197. data/spec/fixtures/processorcount/solaris-psrinfo +24 -0
  198. data/spec/fixtures/processorcount/solaris-sparc-kstat-cpu-info +1216 -0
  199. data/spec/fixtures/processorcount/solaris-x86_64-kstat-cpu-info +225 -0
  200. data/spec/fixtures/unit/filesystems/linux +28 -0
  201. data/spec/fixtures/unit/interfaces/ifconfig_net_tools_1.60.txt +19 -0
  202. data/spec/fixtures/unit/interfaces/ifconfig_net_tools_1.60.txt.em1 +10 -0
  203. data/spec/fixtures/unit/interfaces/ifconfig_net_tools_1.60.txt.lo +8 -0
  204. data/spec/fixtures/unit/ipaddress/ifconfig_multiple_127_addresses.txt +20 -0
  205. data/spec/fixtures/unit/ipaddress/ifconfig_net_tools_1.60.txt +19 -0
  206. data/spec/fixtures/unit/ipaddress/ifconfig_non_english_locale.txt +18 -0
  207. data/spec/fixtures/unit/ipaddress/ifconfig_ubuntu_1204.txt +16 -0
  208. data/spec/fixtures/unit/netmask/darwin_10_8_5.txt +30 -0
  209. data/spec/fixtures/unit/netmask/ifconfig_net_tools_1.60.txt +19 -0
  210. data/spec/fixtures/unit/netmask/ifconfig_ubuntu_1204.txt +16 -0
  211. data/spec/fixtures/unit/selinux/selinux_sestatus +6 -0
  212. data/spec/fixtures/unit/util/ec2/centos-arp-ec2.out +1 -0
  213. data/spec/fixtures/unit/util/ec2/linux-arp-ec2.out +1 -0
  214. data/spec/fixtures/unit/util/ec2/linux-arp-not-ec2.out +5 -0
  215. data/spec/fixtures/unit/util/ec2/solaris8_arp_a_not_ec2.out +7 -0
  216. data/spec/fixtures/unit/util/ec2/windows-2008-arp-a-not-ec2.out +6 -0
  217. data/spec/fixtures/unit/util/ec2/windows-2008-arp-a.out +10 -0
  218. data/spec/fixtures/unit/util/ip/6.0-STABLE_FreeBSD_ifconfig +12 -0
  219. data/spec/fixtures/unit/util/ip/Mac_OS_X_10.5.5_ifconfig +26 -0
  220. data/spec/fixtures/unit/util/ip/darwin_ifconfig_all_with_multiple_interfaces +10 -0
  221. data/spec/fixtures/unit/util/ip/darwin_ifconfig_single_interface +6 -0
  222. data/spec/fixtures/unit/util/ip/debian_kfreebsd_ifconfig +40 -0
  223. data/spec/fixtures/unit/util/ip/hpux_1111_ifconfig_lan0 +2 -0
  224. data/spec/fixtures/unit/util/ip/hpux_1111_ifconfig_lan1 +2 -0
  225. data/spec/fixtures/unit/util/ip/hpux_1111_ifconfig_lo0 +2 -0
  226. data/spec/fixtures/unit/util/ip/hpux_1111_lanscan +5 -0
  227. data/spec/fixtures/unit/util/ip/hpux_1111_netstat_in +4 -0
  228. data/spec/fixtures/unit/util/ip/hpux_1131_asterisk_ifconfig_lan0 +2 -0
  229. data/spec/fixtures/unit/util/ip/hpux_1131_asterisk_ifconfig_lan1 +2 -0
  230. data/spec/fixtures/unit/util/ip/hpux_1131_asterisk_ifconfig_lo0 +2 -0
  231. data/spec/fixtures/unit/util/ip/hpux_1131_asterisk_lanscan +5 -0
  232. data/spec/fixtures/unit/util/ip/hpux_1131_asterisk_netstat_in +4 -0
  233. data/spec/fixtures/unit/util/ip/hpux_1131_ifconfig_lan0 +2 -0
  234. data/spec/fixtures/unit/util/ip/hpux_1131_ifconfig_lan1 +2 -0
  235. data/spec/fixtures/unit/util/ip/hpux_1131_ifconfig_lo0 +2 -0
  236. data/spec/fixtures/unit/util/ip/hpux_1131_lanscan +4 -0
  237. data/spec/fixtures/unit/util/ip/hpux_1131_netstat_in +4 -0
  238. data/spec/fixtures/unit/util/ip/hpux_1131_nic_bonding_ifconfig_lan1 +2 -0
  239. data/spec/fixtures/unit/util/ip/hpux_1131_nic_bonding_ifconfig_lan4 +2 -0
  240. data/spec/fixtures/unit/util/ip/hpux_1131_nic_bonding_ifconfig_lan4_1 +2 -0
  241. data/spec/fixtures/unit/util/ip/hpux_1131_nic_bonding_ifconfig_lo0 +2 -0
  242. data/spec/fixtures/unit/util/ip/hpux_1131_nic_bonding_lanscan +9 -0
  243. data/spec/fixtures/unit/util/ip/hpux_1131_nic_bonding_netstat_in +6 -0
  244. data/spec/fixtures/unit/util/ip/linux_2_6_35_proc_net_bonding_bond0 +19 -0
  245. data/spec/fixtures/unit/util/ip/linux_get_single_interface_eth0 +10 -0
  246. data/spec/fixtures/unit/util/ip/linux_get_single_interface_ib0 +8 -0
  247. data/spec/fixtures/unit/util/ip/linux_get_single_interface_lo +9 -0
  248. data/spec/fixtures/unit/util/ip/linux_ifconfig_all_with_single_interface +18 -0
  249. data/spec/fixtures/unit/util/ip/linux_ifconfig_ib0 +8 -0
  250. data/spec/fixtures/unit/util/ip/solaris_ifconfig_all_with_multiple_interfaces +8 -0
  251. data/spec/fixtures/unit/util/ip/solaris_ifconfig_single_interface +3 -0
  252. data/spec/fixtures/unit/util/ip/windows_netsh_all_interfaces +12 -0
  253. data/spec/fixtures/unit/util/ip/windows_netsh_single_interface +7 -0
  254. data/spec/fixtures/unit/util/ip/windows_netsh_single_interface6 +18 -0
  255. data/spec/fixtures/unit/util/loader/nosuchfact.rb +1 -0
  256. data/spec/fixtures/unit/util/manufacturer/freebsd_dmidecode +42 -0
  257. data/spec/fixtures/unit/util/manufacturer/intel_linux_dmidecode +549 -0
  258. data/spec/fixtures/unit/util/manufacturer/linux_dmidecode_with_spaces +60 -0
  259. data/spec/fixtures/unit/util/manufacturer/opensolaris_smbios +33 -0
  260. data/spec/fixtures/unit/util/manufacturer/solaris_sunfire_v120_prtdiag +33 -0
  261. data/spec/fixtures/unit/util/manufacturer/solaris_t5220_prtdiag +136 -0
  262. data/spec/fixtures/unit/util/processor/solaris-i86pc +28 -0
  263. data/spec/fixtures/unit/util/processor/solaris-sun4u +151 -0
  264. data/spec/fixtures/unit/util/processor/x86-pentium2 +41 -0
  265. data/spec/fixtures/unit/util/uptime/kstat_boot_time +1 -0
  266. data/spec/fixtures/unit/util/uptime/sysctl_kern_boottime_darwin +1 -0
  267. data/spec/fixtures/unit/util/uptime/sysctl_kern_boottime_openbsd +1 -0
  268. data/spec/fixtures/unit/util/uptime/ubuntu_proc_uptime +1 -0
  269. data/spec/fixtures/unit/util/virtual/invalid_unicode_dmi_entries +0 -0
  270. data/spec/fixtures/unit/util/virtual/solaris10_proc_self_status1 +0 -0
  271. data/spec/fixtures/unit/util/vlans/linux_vlan_config +6 -0
  272. data/spec/fixtures/unit/util/xendomains/xendomains +4 -0
  273. data/spec/fixtures/unit/virtual/sysfs_dmi_entries_raw.txt +0 -0
  274. data/spec/fixtures/unit/zfs_version/freebsd_8.2 +14 -0
  275. data/spec/fixtures/unit/zfs_version/freebsd_9.0 +13 -0
  276. data/spec/fixtures/unit/zfs_version/linux-fuse_0.6.9 +14 -0
  277. data/spec/fixtures/unit/zfs_version/solaris_10 +10 -0
  278. data/spec/fixtures/unit/zfs_version/solaris_11 +12 -0
  279. data/spec/fixtures/unit/zpool_version/freebsd_8.2 +26 -0
  280. data/spec/fixtures/unit/zpool_version/freebsd_9.0 +38 -0
  281. data/spec/fixtures/unit/zpool_version/linux-fuse_0.6.9 +35 -0
  282. data/spec/fixtures/unit/zpool_version/solaris_10 +31 -0
  283. data/spec/fixtures/unit/zpool_version/solaris_11 +43 -0
  284. data/spec/fixtures/virtual/proc_self_status/vserver_2_1/guest +37 -0
  285. data/spec/fixtures/virtual/proc_self_status/vserver_2_1/host +36 -0
  286. data/spec/fixtures/virtual/proc_self_status/vserver_2_3/guest +39 -0
  287. data/spec/fixtures/virtual/proc_self_status/vserver_2_3/host +39 -0
  288. data/spec/integration/facter_spec.rb +39 -0
  289. data/spec/lib/facter_spec/cpuinfo.rb +15 -0
  290. data/spec/lib/facter_spec/windows_network.rb +64 -0
  291. data/spec/puppetlabs_spec/files.rb +57 -0
  292. data/spec/puppetlabs_spec/fixtures.rb +49 -0
  293. data/spec/puppetlabs_spec/matchers.rb +87 -0
  294. data/spec/puppetlabs_spec/verbose.rb +9 -0
  295. data/spec/puppetlabs_spec_helper.rb +26 -0
  296. data/spec/shared_contexts/platform.rb +55 -0
  297. data/spec/shared_formats/parses.rb +3 -0
  298. data/spec/spec_helper.rb +75 -0
  299. data/spec/unit/application_spec.rb +101 -0
  300. data/spec/unit/architecture_spec.rb +63 -0
  301. data/spec/unit/blockdevices_spec.rb +109 -0
  302. data/spec/unit/core/aggregate_spec.rb +125 -0
  303. data/spec/unit/core/directed_graph_spec.rb +79 -0
  304. data/spec/unit/core/execution/base_spec.rb +119 -0
  305. data/spec/unit/core/execution/posix_spec.rb +86 -0
  306. data/spec/unit/core/execution/windows_spec.rb +106 -0
  307. data/spec/unit/core/execution_spec.rb +37 -0
  308. data/spec/unit/core/logging_spec.rb +104 -0
  309. data/spec/unit/core/resolvable_spec.rb +81 -0
  310. data/spec/unit/core/suitable_spec.rb +96 -0
  311. data/spec/unit/domain_spec.rb +310 -0
  312. data/spec/unit/ec2_spec.rb +187 -0
  313. data/spec/unit/facter_spec.rb +108 -0
  314. data/spec/unit/filesystems_spec.rb +50 -0
  315. data/spec/unit/hardwareisa_spec.rb +41 -0
  316. data/spec/unit/hardwaremodel_spec.rb +56 -0
  317. data/spec/unit/hostname_spec.rb +40 -0
  318. data/spec/unit/id_spec.rb +29 -0
  319. data/spec/unit/interfaces_spec.rb +57 -0
  320. data/spec/unit/ipaddress6_spec.rb +161 -0
  321. data/spec/unit/ipaddress_spec.rb +114 -0
  322. data/spec/unit/kernel_spec.rb +24 -0
  323. data/spec/unit/kernelmajversion_spec.rb +17 -0
  324. data/spec/unit/kernelrelease_spec.rb +53 -0
  325. data/spec/unit/kernelversion_spec.rb +32 -0
  326. data/spec/unit/ldom_spec.rb +74 -0
  327. data/spec/unit/lsbdistcodename_spec.rb +25 -0
  328. data/spec/unit/lsbdistdescription_spec.rb +25 -0
  329. data/spec/unit/lsbdistid_spec.rb +25 -0
  330. data/spec/unit/lsbdistrelease_spec.rb +25 -0
  331. data/spec/unit/lsbmajdistrelease_spec.rb +13 -0
  332. data/spec/unit/lsbrelease_spec.rb +25 -0
  333. data/spec/unit/macaddress_spec.rb +61 -0
  334. data/spec/unit/manufacturer_spec.rb +115 -0
  335. data/spec/unit/memory_spec.rb +539 -0
  336. data/spec/unit/netmask_spec.rb +95 -0
  337. data/spec/unit/operatingsystem_spec.rb +141 -0
  338. data/spec/unit/operatingsystemmajrelease_spec.rb +16 -0
  339. data/spec/unit/operatingsystemrelease_spec.rb +226 -0
  340. data/spec/unit/physicalprocessorcount_spec.rb +76 -0
  341. data/spec/unit/processor_spec.rb +393 -0
  342. data/spec/unit/ps_spec.rb +42 -0
  343. data/spec/unit/selinux_spec.rb +114 -0
  344. data/spec/unit/ssh_spec.rb +77 -0
  345. data/spec/unit/uniqueid_spec.rb +27 -0
  346. data/spec/unit/uptime_spec.rb +110 -0
  347. data/spec/unit/util/collection_spec.rb +258 -0
  348. data/spec/unit/util/config_spec.rb +84 -0
  349. data/spec/unit/util/confine_spec.rb +148 -0
  350. data/spec/unit/util/directory_loader_spec.rb +88 -0
  351. data/spec/unit/util/ec2_spec.rb +180 -0
  352. data/spec/unit/util/fact_spec.rb +142 -0
  353. data/spec/unit/util/file_read_spec.rb +29 -0
  354. data/spec/unit/util/ip/windows_spec.rb +80 -0
  355. data/spec/unit/util/ip_spec.rb +463 -0
  356. data/spec/unit/util/loader_spec.rb +286 -0
  357. data/spec/unit/util/macaddress_spec.rb +141 -0
  358. data/spec/unit/util/macosx_spec.rb +113 -0
  359. data/spec/unit/util/manufacturer_spec.rb +179 -0
  360. data/spec/unit/util/normalization_spec.rb +113 -0
  361. data/spec/unit/util/parser_spec.rb +200 -0
  362. data/spec/unit/util/processor_spec.rb +92 -0
  363. data/spec/unit/util/registry_spec.rb +76 -0
  364. data/spec/unit/util/resolution_spec.rb +129 -0
  365. data/spec/unit/util/solaris_zones_spec.rb +127 -0
  366. data/spec/unit/util/uptime_spec.rb +126 -0
  367. data/spec/unit/util/values_spec.rb +131 -0
  368. data/spec/unit/util/virtual_spec.rb +294 -0
  369. data/spec/unit/util/vlans_spec.rb +12 -0
  370. data/spec/unit/util/wmi_spec.rb +19 -0
  371. data/spec/unit/util/xendomains_spec.rb +21 -0
  372. data/spec/unit/version_spec.rb +42 -0
  373. data/spec/unit/virtual_spec.rb +470 -0
  374. data/spec/unit/zfs_version_spec.rb +75 -0
  375. data/spec/unit/zonename_spec.rb +14 -0
  376. data/spec/unit/zones_spec.rb +55 -0
  377. data/spec/unit/zpool_version_spec.rb +75 -0
  378. data/spec/watchr.rb +125 -0
  379. metadata +674 -0
@@ -0,0 +1,92 @@
1
+ #! /usr/bin/env ruby
2
+
3
+ require 'spec_helper'
4
+ require 'facter/util/processor'
5
+ require 'facter_spec/cpuinfo'
6
+
7
+ describe Facter::Util::Processor do
8
+ describe "on linux" do
9
+ include FacterSpec::Cpuinfo
10
+
11
+ before :each do
12
+ Facter.fact(:kernel).stubs(:value).returns("Linux")
13
+ File.stubs(:exists?).with("/proc/cpuinfo").returns(true)
14
+ end
15
+
16
+ describe "with architecture amd64" do
17
+ before :each do
18
+ Facter.fact(:architecture).stubs(:value).returns("amd64")
19
+ end
20
+
21
+ it "should get the processor description from the amd64solo fixture" do
22
+ File.stubs(:readlines).with("/proc/cpuinfo").returns(cpuinfo_fixture_readlines("amd64solo"))
23
+ Facter::Util::Processor.enum_cpuinfo[0].should == "Intel(R) Core(TM)2 Duo CPU P8700 @ 2.53GHz"
24
+ end
25
+
26
+ it "should get the processor descriptions from the amd64dual fixture" do
27
+ File.stubs(:readlines).with("/proc/cpuinfo").returns(cpuinfo_fixture_readlines("amd64dual"))
28
+
29
+ Facter::Util::Processor.enum_cpuinfo[0].should == "Intel(R) Core(TM)2 Duo CPU P8700 @ 2.53GHz"
30
+ Facter::Util::Processor.enum_cpuinfo[1].should == "Intel(R) Core(TM)2 Duo CPU P8700 @ 2.53GHz"
31
+ end
32
+
33
+ it "should get the processor descriptions from the amd64tri fixture" do
34
+ File.stubs(:readlines).with("/proc/cpuinfo").returns(cpuinfo_fixture_readlines("amd64tri"))
35
+
36
+ Facter::Util::Processor.enum_cpuinfo[0].should == "Intel(R) Core(TM)2 Duo CPU P8700 @ 2.53GHz"
37
+ Facter::Util::Processor.enum_cpuinfo[1].should == "Intel(R) Core(TM)2 Duo CPU P8700 @ 2.53GHz"
38
+ Facter::Util::Processor.enum_cpuinfo[2].should == "Intel(R) Core(TM)2 Duo CPU P8700 @ 2.53GHz"
39
+ end
40
+
41
+ it "should get the processor descriptions from the amd64quad fixture" do
42
+ File.stubs(:readlines).with("/proc/cpuinfo").returns(cpuinfo_fixture_readlines("amd64quad"))
43
+
44
+ Facter::Util::Processor.enum_cpuinfo[0].should == "Quad-Core AMD Opteron(tm) Processor 2374 HE"
45
+ Facter::Util::Processor.enum_cpuinfo[1].should == "Quad-Core AMD Opteron(tm) Processor 2374 HE"
46
+ Facter::Util::Processor.enum_cpuinfo[2].should == "Quad-Core AMD Opteron(tm) Processor 2374 HE"
47
+ Facter::Util::Processor.enum_cpuinfo[3].should == "Quad-Core AMD Opteron(tm) Processor 2374 HE"
48
+ end
49
+ end
50
+
51
+ describe "with architecture x86" do
52
+ before :each do
53
+ Facter.fact(:architecture).stubs(:value).returns("x86")
54
+ File.stubs(:readlines).with("/proc/cpuinfo").returns(my_fixture_read("x86-pentium2").lines)
55
+ end
56
+
57
+ subject { Facter::Util::Processor.enum_cpuinfo }
58
+
59
+ it "should have the correct processor titles" do
60
+ subject[0].should == "Pentium II (Deschutes)"
61
+ subject[1].should == "Pentium II (Deschutes)"
62
+ end
63
+ end
64
+ end
65
+
66
+ describe "on Solaris" do
67
+ before :each do
68
+ Facter.fact(:kernel).stubs(:value).returns("SunOS")
69
+ end
70
+
71
+ it "should get the processor description on Solaris (x86)" do
72
+ Facter.fact(:architecture).stubs(:value).returns("i86pc")
73
+ Facter::Core::Execution.stubs(:exec).with("/usr/bin/kstat cpu_info").returns(my_fixture_read("solaris-i86pc"))
74
+
75
+ Facter::Util::Processor.enum_kstat[0].should == "Intel(r) Core(tm) i5 CPU M 450 @ 2.40GHz"
76
+ end
77
+
78
+ it "should get the processor description on Solaris (SPARC64)" do
79
+ Facter.fact(:architecture).stubs(:value).returns("sun4u")
80
+ Facter::Core::Execution.stubs(:exec).with("/usr/bin/kstat cpu_info").returns(my_fixture_read("solaris-sun4u"))
81
+
82
+ Facter::Util::Processor.enum_kstat[0].should == "SPARC64-VII"
83
+ Facter::Util::Processor.enum_kstat[1].should == "SPARC64-VII"
84
+ Facter::Util::Processor.enum_kstat[2].should == "SPARC64-VII"
85
+ Facter::Util::Processor.enum_kstat[3].should == "SPARC64-VII"
86
+ Facter::Util::Processor.enum_kstat[4].should == "SPARC64-VII"
87
+ Facter::Util::Processor.enum_kstat[5].should == "SPARC64-VII"
88
+ Facter::Util::Processor.enum_kstat[6].should == "SPARC64-VII"
89
+ Facter::Util::Processor.enum_kstat[7].should == "SPARC64-VII"
90
+ end
91
+ end
92
+ end
@@ -0,0 +1,76 @@
1
+ #! /usr/bin/env ruby
2
+ require 'spec_helper'
3
+ require 'facter/operatingsystem'
4
+ require 'facter/util/registry'
5
+
6
+ describe Facter::Util::Registry do
7
+ describe "hklm_read", :if => Facter::Util::Config.is_windows? do
8
+ before(:all) do
9
+ require 'win32/registry'
10
+ end
11
+ describe "valid params" do
12
+ [ {:key => "valid_key", :value => "valid_value", :expected => "valid"},
13
+ {:key => "valid_key", :value => "", :expected => "valid"},
14
+ {:key => "valid_key", :value => nil, :expected => "invalid"},
15
+ {:key => "", :value => "valid_value", :expected => "valid"},
16
+ {:key => "", :value => "", :expected => "valid"},
17
+ {:key => "", :value => nil, :expected => "invalid"},
18
+ {:key => nil, :value => "valid_value", :expected => "invalid"},
19
+ {:key => nil, :value => "", :expected => "invalid"},
20
+ {:key => nil, :value => nil, :expected => "invalid"}
21
+ ].each do |scenario|
22
+ describe "with key #{scenario[:key] || "nil"} and value #{scenario[:value] || "nil"}" do
23
+ let :fake_registry_key do
24
+ fake = {}
25
+ fake[scenario[:value]] = scenario[:expected]
26
+ fake
27
+ end
28
+ it "should return #{scenario[:expected]} value" do
29
+ Win32::Registry::HKEY_LOCAL_MACHINE.stubs(:open).with(scenario[:key]).returns(fake_registry_key)
30
+ fake_registry_key.stubs(:close)
31
+
32
+ Facter::Util::Registry.hklm_read(scenario[:key], scenario[:value]).should == scenario[:expected]
33
+ end
34
+ end
35
+ end
36
+ end
37
+
38
+ describe "invalid params" do
39
+ [ {:key => "valid_key", :value => "invalid_value"},
40
+ {:key => "valid_key", :value => ""},
41
+ {:key => "valid_key", :value => nil},
42
+ ].each do |scenario|
43
+ describe "with valid key and value #{scenario[:value] || "nil"}" do
44
+ let :fake_registry_key do
45
+ {}
46
+ end
47
+ it "should raise an error" do
48
+ Win32::Registry::HKEY_LOCAL_MACHINE.stubs(:open).with(scenario[:key]).returns(fake_registry_key)
49
+ fake_registry_key.stubs(:close)
50
+
51
+ Facter::Util::Registry.hklm_read(scenario[:key], scenario[:value]).should raise_error
52
+ end
53
+ end
54
+ end
55
+ [ {:key => "invalid_key", :value => "valid_value"},
56
+ {:key => "invalid_key", :value => ""},
57
+ {:key => "invalid_key", :value => nil},
58
+ {:key => "", :value => "valid_value"},
59
+ {:key => "", :value => ""},
60
+ {:key => "", :value => nil},
61
+ {:key => nil, :value => "valid_value"},
62
+ {:key => nil, :value => ""},
63
+ {:key => nil, :value => nil}
64
+ ].each do |scenario|
65
+ describe "with invalid key #{scenario[:key] || "nil"} and value #{scenario[:value] || "nil"}" do
66
+ it "should raise an error" do
67
+ Win32::Registry::HKEY_LOCAL_MACHINE.stubs(:open).with(scenario[:key]).raises(Win32::Registry::Error, 2)
68
+ expect do
69
+ Facter::Util::Registry.hklm_read(scenario[:key], scenario[:value])
70
+ end.to raise_error Win32::Registry::Error
71
+ end
72
+ end
73
+ end
74
+ end
75
+ end
76
+ end
@@ -0,0 +1,129 @@
1
+ #! /usr/bin/env ruby
2
+
3
+ require 'spec_helper'
4
+ require 'facter/util/resolution'
5
+
6
+ describe Facter::Util::Resolution do
7
+ include FacterSpec::ConfigHelper
8
+
9
+ subject(:resolution) { described_class.new(:foo, stub_fact) }
10
+
11
+ let(:stub_fact) { stub('fact', :name => :stubfact) }
12
+
13
+ it "requires a name" do
14
+ expect { Facter::Util::Resolution.new }.to raise_error(ArgumentError)
15
+ end
16
+
17
+ it "requires a fact" do
18
+ expect { Facter::Util::Resolution.new('yay') }.to raise_error(ArgumentError)
19
+ end
20
+
21
+ it "can return its name" do
22
+ expect(resolution.name).to eq :foo
23
+ end
24
+
25
+ it "can explicitly set a value" do
26
+ resolution.value = "foo"
27
+ expect(resolution.value).to eq "foo"
28
+ end
29
+
30
+ it "defaults to nil for code" do
31
+ expect(resolution.code).to be_nil
32
+ end
33
+
34
+ describe "when setting the code" do
35
+ before do
36
+ Facter.stubs(:warnonce)
37
+ end
38
+
39
+ it "creates a block when given a command" do
40
+ resolution.setcode "foo"
41
+ expect(resolution.code).to be_a_kind_of Proc
42
+ end
43
+
44
+ it "stores the provided block when given a block" do
45
+ block = lambda { }
46
+ resolution.setcode(&block)
47
+ resolution.code.should equal(block)
48
+ end
49
+
50
+
51
+ it "prefers a command over a block" do
52
+ block = lambda { }
53
+ resolution.setcode("foo", &block)
54
+ expect(resolution.code).to_not eq block
55
+ end
56
+
57
+ it "fails if neither a string nor block has been provided" do
58
+ expect { resolution.setcode }.to raise_error(ArgumentError)
59
+ end
60
+ end
61
+
62
+ describe "when returning the value" do
63
+ it "returns any value that has been provided" do
64
+ resolution.value = "foo"
65
+ expect(resolution.value).to eq "foo"
66
+ end
67
+
68
+ describe "and setcode has not been called" do
69
+ it "returns nil" do
70
+ expect(resolution.value).to be_nil
71
+ end
72
+ end
73
+
74
+ describe "and the code is a string" do
75
+ it "returns the result of executing the code" do
76
+ resolution.setcode "/bin/foo"
77
+ Facter::Core::Execution.expects(:exec).once.with("/bin/foo").returns "yup"
78
+
79
+ expect(resolution.value).to eq "yup"
80
+ end
81
+ end
82
+
83
+ describe "and the code is a block" do
84
+ it "returns the value returned by the block" do
85
+ resolution.setcode { "yayness" }
86
+ expect(resolution.value).to eq "yayness"
87
+ end
88
+ end
89
+ end
90
+
91
+ describe "setting options" do
92
+ it "can set the value" do
93
+ resolution.set_options(:value => 'something')
94
+ expect(resolution.value).to eq 'something'
95
+ end
96
+
97
+ it "can set the timeout" do
98
+ resolution.set_options(:timeout => 314)
99
+ expect(resolution.limit).to eq 314
100
+ end
101
+
102
+ it "can set the weight" do
103
+ resolution.set_options(:weight => 27)
104
+ expect(resolution.weight).to eq 27
105
+ end
106
+
107
+ it "fails on unhandled options" do
108
+ expect do
109
+ resolution.set_options(:foo => 'bar')
110
+ end.to raise_error(ArgumentError, /Invalid resolution options.*foo/)
111
+ end
112
+ end
113
+
114
+ describe "evaluating" do
115
+ it "evaluates the block in the context of the given resolution" do
116
+ subject.expects(:has_weight).with(5)
117
+ subject.evaluate { has_weight(5) }
118
+ end
119
+
120
+ it "raises a warning if the resolution is evaluated twice" do
121
+ Facter.expects(:warn).with do |msg|
122
+ expect(msg).to match /Already evaluated foo at.*reevaluating anyways/
123
+ end
124
+
125
+ subject.evaluate { }
126
+ subject.evaluate { }
127
+ end
128
+ end
129
+ end
@@ -0,0 +1,127 @@
1
+ require 'spec_helper'
2
+ require 'facter/util/solaris_zones'
3
+
4
+ describe Facter::Util::SolarisZones do
5
+ let :zone_list do
6
+ zone_list = <<-EOF
7
+ 0:global:running:/::native:shared
8
+ -:local:configured:/::native:shared
9
+ -:zoneA:stopped:/::native:shared
10
+ EOF
11
+ end
12
+
13
+ let :zone_list2 do
14
+ zone_list = <<-EOF
15
+ 0:global:running:/::native:shared
16
+ -:local:configured:/::native:shared
17
+ -:zoneB:stopped:/::native:shared
18
+ -:zoneC:stopped:/::native:shared
19
+ EOF
20
+ end
21
+
22
+ subject do
23
+ described_class.new(:zoneadm_output => zone_list)
24
+ end
25
+
26
+ describe '.add_facts' do
27
+ before :each do
28
+ zones = described_class.new(:zoneadm_output => zone_list)
29
+ zones.send(:parse!)
30
+ zones.stubs(:refresh)
31
+ described_class.stubs(:new).returns(zones)
32
+ end
33
+
34
+ it 'defines the zones fact' do
35
+ described_class.add_facts
36
+ Facter.fact(:zones).value.should == 3
37
+ end
38
+
39
+ it 'defines a fact for each attribute of a zone' do
40
+ described_class.add_facts
41
+ [:id, :name, :status, :path, :uuid, :brand, :iptype].each do |attr|
42
+ Facter.fact("zone_local_#{attr}".intern).
43
+ should be_a_kind_of Facter::Util::Fact
44
+ end
45
+ end
46
+ end
47
+
48
+ describe '#refresh' do
49
+ it 'executes the zoneadm_cmd' do
50
+ Facter::Core::Execution.expects(:exec).with(subject.zoneadm_cmd).returns(zone_list)
51
+ subject.refresh
52
+ end
53
+ end
54
+
55
+ describe 'multiple facts sharing a single model' do
56
+ context 'when zones is resolved for the first time' do
57
+ it 'counts the number of zones' do
58
+ given_initial_zone_facts
59
+ Facter.fact(:zones).value.should == 3
60
+ end
61
+ it 'defines facts for zoneA' do
62
+ given_initial_zone_facts
63
+ Facter.fact(:zone_zoneA_id).value.should == '-'
64
+ end
65
+ it 'does not define facts for zoneB' do
66
+ given_initial_zone_facts
67
+ Facter.fact(:zone_zoneB_id).should be_nil
68
+ end
69
+ it 'uses a single read of the system information for all of the dynamically generated zone facts' do
70
+ given_initial_zone_facts # <= single read happens here
71
+
72
+ Facter::Core::Execution.expects(:exec).never
73
+ Facter.fact(:zone_zoneA_id).value
74
+ Facter.fact(:zone_local_id).value
75
+ end
76
+ end
77
+ context 'when all facts have been flushed after zones was resolved once' do
78
+ it 'updates the number of zones' do
79
+ given_initial_zone_facts
80
+ when_facts_have_been_resolved_then_flushed
81
+
82
+ Facter.fact(:zones).value.should == 4
83
+ end
84
+ it 'stops resolving a value for a zone that no longer exists' do
85
+ given_initial_zone_facts
86
+ when_facts_have_been_resolved_then_flushed
87
+
88
+ Facter.fact(:zone_zoneA_id).value.should be_nil
89
+ Facter.fact(:zone_zoneA_status).value.should be_nil
90
+ Facter.fact(:zone_zoneA_path).value.should be_nil
91
+ end
92
+ it 'defines facts for new zones' do
93
+ given_initial_zone_facts
94
+ when_facts_have_been_resolved_then_flushed
95
+
96
+ Facter.fact(:zone_zoneB_id).should be_nil
97
+ Facter.fact(:zones).value
98
+ Facter.fact(:zone_zoneB_id).value.should be_a_kind_of String
99
+ end
100
+ it 'uses a single read of the system information for all of the dynamically generated zone facts' do
101
+ given_initial_zone_facts
102
+ when_facts_have_been_resolved_then_flushed
103
+
104
+ Facter::Core::Execution.expects(:exec).once.returns(zone_list2)
105
+ Facter.fact(:zones).value
106
+ Facter.fact(:zone_zoneA_id).value
107
+ Facter.fact(:zone_local_id).value
108
+ end
109
+
110
+ end
111
+ end
112
+
113
+ def given_initial_zone_facts
114
+ Facter::Core::Execution.stubs(:exec).
115
+ with(subject.zoneadm_cmd).
116
+ returns(zone_list)
117
+ described_class.add_facts
118
+ end
119
+
120
+ def when_facts_have_been_resolved_then_flushed
121
+ Facter.fact(:zones).value
122
+ Facter.fact(:zone_zoneA_id).value
123
+ Facter.fact(:zone_local_id).value
124
+ Facter::Core::Execution.stubs(:exec).returns(zone_list2)
125
+ Facter.flush
126
+ end
127
+ end
@@ -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(:exec).with('uptime 2>/dev/null').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::Util::Uptime.stubs(:uptime_executable_cmd).returns("cat \"#{@nonexistent_file}\"")
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