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,42 @@
1
+ #! /usr/bin/env ruby
2
+
3
+ require 'spec_helper'
4
+
5
+ describe "ps facts" do
6
+
7
+ it "should return busybox style ps www on OpenWrt" do
8
+ Facter.fact(:operatingsystem).stubs(:value).returns 'OpenWrt'
9
+ Facter.fact(:ps).value.should == 'ps www'
10
+ end
11
+
12
+ [
13
+ 'FreeBSD',
14
+ 'NetBSD',
15
+ 'OpenBSD',
16
+ 'Darwin',
17
+ 'DragonFly'
18
+ ].each do |os|
19
+ it "should return unix style ps on operatingsystem #{os}" do
20
+ Facter.fact(:operatingsystem).stubs(:value).returns os
21
+ Facter.fact(:ps).value.should == 'ps auxwww'
22
+ end
23
+ end
24
+
25
+ # Other Linux Distros should return a ps -ef
26
+ [
27
+ 'RedHat',
28
+ 'Debian',
29
+ ].each do |os|
30
+ it "should return gnu/linux style ps -ef on operatingsystem #{os}" do
31
+ Facter.fact(:operatingsystem).stubs(:value).returns os
32
+ Facter.fact(:ps).value.should == 'ps -ef'
33
+ end
34
+ end
35
+
36
+ it "should return tasklist.exe on Windows" do
37
+ Facter.fact(:operatingsystem).stubs(:value).returns 'windows'
38
+ Facter.fact(:ps).value.should == 'tasklist.exe'
39
+ end
40
+
41
+ end
42
+
@@ -0,0 +1,114 @@
1
+ #! /usr/bin/env ruby
2
+
3
+ require 'spec_helper'
4
+
5
+ describe "SELinux facts" do
6
+ describe "should detect if SELinux is enabled" do
7
+ before :each do
8
+ Facter.fact(:kernel).stubs(:value).returns("Linux")
9
+ end
10
+
11
+ it "and return true with default /selinux" do
12
+ mounts_does_not_exist
13
+
14
+ File.stubs(:read).with("/proc/self/attr/current").returns("notkernel")
15
+ FileTest.expects(:exists?).with("/proc/self/attr/current").returns true
16
+ File.expects(:read).with("/proc/self/attr/current").returns("kernel")
17
+
18
+ FileTest.expects(:exists?).with("/selinux/enforce").returns true
19
+
20
+ Facter.fact(:selinux).value.should == "true"
21
+ end
22
+
23
+ it "and return true with selinuxfs path from /proc" do
24
+ selinux_root = "/sys/fs/selinux"
25
+ mounts_contains("selinuxfs #{selinux_root} selinuxfs rw,relatime 0 0")
26
+
27
+ FileTest.expects(:exists?).with("#{selinux_root}/enforce").returns true
28
+
29
+ FileTest.expects(:exists?).with("/proc/self/attr/current").returns true
30
+ File.expects(:read).with("/proc/self/attr/current").returns("kernel")
31
+
32
+ Facter.fact(:selinux).value.should == "true"
33
+ end
34
+
35
+ it "and return true with multiple selinuxfs mounts from /proc" do
36
+ selinux_root = "/sys/fs/selinux"
37
+ mounts_contains(
38
+ "selinuxfs #{selinux_root} selinuxfs rw,relatime 0 0",
39
+ "selinuxfs /var/tmp/imgcreate-R2wmE6/install_root/sys/fs/selinux selinuxfs rw,relatime 0 0"
40
+ )
41
+
42
+ FileTest.expects(:exists?).with("#{selinux_root}/enforce").returns true
43
+
44
+ FileTest.expects(:exists?).with("/proc/self/attr/current").returns true
45
+ File.expects(:read).with("/proc/self/attr/current").returns("kernel")
46
+
47
+ Facter.fact(:selinux).value.should == "true"
48
+ end
49
+ end
50
+
51
+ describe "when selinux is present" do
52
+ before :each do
53
+ Facter.fact(:selinux).stubs(:value).returns("true")
54
+ end
55
+
56
+ it "should return true if SELinux policy enabled" do
57
+ mounts_does_not_exist
58
+
59
+ FileTest.expects(:exists?).with("/selinux/enforce").returns true
60
+ File.expects(:read).with("/selinux/enforce").returns("1")
61
+
62
+ Facter.fact(:selinux_enforced).value.should == "true"
63
+ end
64
+
65
+ it "should return an SELinux policy version" do
66
+ mounts_does_not_exist
67
+
68
+ FileTest.expects(:exists?).with("/selinux/policyvers").returns true
69
+ File.expects(:read).with("/selinux/policyvers").returns("1")
70
+
71
+ Facter.fact(:selinux_policyversion).value.should == "1"
72
+ end
73
+
74
+ it "it should return 'unknown' SELinux policy version if /selinux/policyvers doesn't exist" do
75
+ mounts_does_not_exist
76
+
77
+ FileTest.expects(:exists?).with("/selinux/policyvers").returns false
78
+
79
+ Facter.fact(:selinux_policyversion).value.should == "unknown"
80
+ end
81
+
82
+ it "should return the SELinux current mode" do
83
+ sestatus_is(my_fixture_read("selinux_sestatus"))
84
+
85
+ Facter.fact(:selinux_current_mode).value.should == "permissive"
86
+ end
87
+
88
+ it "should return the SELinux mode from the configuration file" do
89
+ sestatus_is(my_fixture_read("selinux_sestatus"))
90
+
91
+ Facter.fact(:selinux_config_mode).value.should == "permissive"
92
+ end
93
+
94
+ it "should return the SELinux configuration file policy" do
95
+ sestatus_is(my_fixture_read("selinux_sestatus"))
96
+
97
+ Facter.fact(:selinux_config_policy).value.should == "targeted"
98
+ end
99
+ end
100
+
101
+ def sestatus_is(status)
102
+ Facter::Core::Execution.stubs(:exec).with('/usr/sbin/sestatus').returns(status)
103
+ end
104
+
105
+ def mounts_does_not_exist
106
+ FileTest.stubs(:exists?).with("/proc/self/mounts").returns false
107
+ end
108
+
109
+ def mounts_contains(*lines)
110
+ FileTest.expects(:exists?).with("/proc/self/mounts").returns true
111
+ Facter::Core::Execution.expects(:exec).with("cat /proc/self/mounts").returns(lines.join("\n"))
112
+ end
113
+
114
+ end
@@ -0,0 +1,77 @@
1
+ #! /usr/bin/env ruby
2
+
3
+ require 'spec_helper'
4
+ require 'facter/ssh'
5
+ require 'pathname'
6
+
7
+ describe "SSH fact" do
8
+
9
+ dirs = [ '/etc/ssh',
10
+ '/usr/local/etc/ssh',
11
+ '/etc',
12
+ '/usr/local/etc',
13
+ '/etc/opt/ssh',
14
+ ]
15
+
16
+ before :each do
17
+ # We need these facts loaded, but they belong to a file with a
18
+ # different name, so load the file explicitly.
19
+ Facter.collection.internal_loader.load(:ssh)
20
+ end
21
+
22
+ # fingerprints extracted from ssh-keygen -r '' -f /etc/ssh/ssh_host_dsa_key.pub
23
+ { 'SSHRSAKey' => [ 'ssh_host_rsa_key.pub' , "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDrs+KtR8hjasELsyCiiBplUeIi77hEHzTSQt1ALG7N4IgtMg27ZAcq0tl2/O9ZarQuClc903pgionbM9Q98CtAIoqgJwdtsor7ETRmzwrcY/mvI7ne51UzQy4Eh9WrplfpNyg+EVO0FUC7mBcay6JY30QKasePp+g4MkwK5cuTzOCzd9up9KELonlH7tTm2L0YI4HhZugwVoTFulCAZvPICxSk1B/fEKyGSZVfY/UxZNqg9g2Wyvq5u40xQ5eO882UwhB3w4IbmRnPKcyotAcqOJxA7hToMKtEmFct+vjHE8T37w8axE/1X9mdvy8IZbkEBL1cupqqb8a8vU1QTg1z", "SSHFP 1 1 1e4f163a1747d0d1a08a29972c9b5d94ee5705d0\nSSHFP 1 2 4e834c91e423d6085ed6dfb880a59e2f1b04f17c1dc17da07708af67c5ab6045" ],
24
+ 'SSHDSAKey' => [ 'ssh_host_dsa_key.pub' , "ssh-dss AAAAB3NzaC1kc3MAAACBAKjmRez14aZT6OKhHrsw19s7u30AdghwHFQbtC+L781YjJ3UV0/WQoZ8NaDL4ovuvW23RuO49tsqSNcVHg+PtRiN2iTVAS2h55TFhaPKhTs+i0NH3p3Ze8LNSYuz8uK7a+nTxysz47GYTHiE1ke8KXe5wGKDO1TO/MUgpDbwx72LAAAAFQD9yMJCnZMiKzA7J1RNkwvgCyBKSQAAAIAtWBAsuRM0F2fdCe+F/JmgyryQmRIT5vP8E1ww3t3ywdLHklN7UMkaEKBW/TN/jj1JOGXtZ2v5XI+0VNoNKD/7dnCGzNViRT/jjfyVi6l5UMg4Q52Gv0RXJoBJpxNqFOU2niSsy8hioyE39W6LJYWJtQozGpH/KKgkCSvxBn5hlAAAAIB1yo/YD0kQICOO0KE+UMMaKtV7FwyedFJsxsWYwZfHXGwWskf0d2+lPhd9qwdbmSvySE8Qrlvu+W+X8AipwGkItSnj16ORF8kO3lfABa+7L4BLDtumt7ybjBPcHOy3n28dd07TmMtyWvLjOb0mcxPo+TwDLtHd3L/3C1Dh41jRPg==\n", "SSHFP 2 1 f63dfe8da99f50ffbcfa40a61161cee29d109f70\nSSHFP 2 2 5f57aa6be9baddd71b6049ed5d8639664a7ddf92ce293e3887f16ad0f2d459d9" ],
25
+ 'SSHECDSAKey' => [ 'ssh_host_ecdsa_key.pub' , 'ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBIuKHtgXQUIrXSVNKC7uY+ZOF7jjfqYNU7Cb/IncDOZ7jW44dxsfBzRJwS5sTHERjBinJskY87mmwY07NFF5GoE=', "SSHFP 3 1 091a088fd3500ad9e35ce201c5101646cbf6ff98\nSSHFP 3 2 1dd2aa8f29b539337316e2862b28c196c68ffe0af78fccf9e50625635677e50f"],
26
+ 'SSHED25519Key' => [ 'ssh_host_ed25519_key.pub' , 'ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIAkxkUMKV0H7Z0KDgfMs+iKQFwJhKUDg8GImV/BwN48X', "SSHFP 4 1 216d49ff3581a42c7a2d4064f2356b375367d493\nSSHFP 4 2 95e3aa6f86bc2dcc46f1e9e5ea930c790afc0669fcf237c4d7b0c8e386ef2790"]
27
+ }.each_pair do |fact, data|
28
+ describe "#{fact}" do
29
+ let(:filename) { data[0] }
30
+ let(:contents) { data[1] }
31
+ let(:fingerprint) { data[2] }
32
+ let(:fingerprint_fact) { "SSHFP_#{fact[3..-4]}" }
33
+ let(:private_key) { /AAAA\S+/.match(contents).to_s }
34
+
35
+ # Before we start testing, we'll say that the file
36
+ # doesn't exist in any of our search locations.
37
+ # Then, when we test a specific directory, we'll
38
+ # toggle just that one on.
39
+ # This doesn't test the search order, but it does
40
+ # make testing each of the individual cases *way*
41
+ # easier. --jeffweiss 24 May 2012
42
+ before(:each) do
43
+ dirs.each do |dir|
44
+ full_path = File.join(dir, filename)
45
+ FileTest.stubs(:file?).with(full_path).returns false
46
+ end
47
+ end
48
+
49
+ # Now, let's go through each and individually flip then
50
+ # on for that test.
51
+ dirs.each do |dir|
52
+ describe "when data is in #{dir}" do
53
+ let(:full_path) { File.join(dir, filename) }
54
+ before(:each) do
55
+ full_path = File.join(dir, filename)
56
+ FileTest.stubs(:file?).with(full_path).returns true
57
+ end
58
+
59
+ it "should find in #{dir}" do
60
+ FileTest.expects(:file?).with(full_path)
61
+ Facter.fact(fact).value
62
+ end
63
+
64
+ it "should match the contents" do
65
+ File.expects(:read).with(full_path).at_least_once.returns contents
66
+ Facter.fact(fact).value.should == private_key
67
+ end
68
+
69
+ it "should have matching fingerprint" do
70
+ File.expects(:read).with(full_path).at_least_once.returns contents
71
+ Facter.fact(fingerprint_fact).value.should == fingerprint
72
+ end
73
+ end
74
+ end
75
+ end
76
+ end
77
+ end
@@ -0,0 +1,27 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'spec_helper'
4
+ require 'facter'
5
+
6
+ describe "Uniqueid fact" do
7
+ it "should match hostid on Solaris" do
8
+ Facter.fact(:kernel).stubs(:value).returns("SunOS")
9
+ Facter::Core::Execution.stubs(:exec).with("hostid").returns("Larry")
10
+
11
+ Facter.fact(:uniqueid).value.should == "Larry"
12
+ end
13
+
14
+ it "should match hostid on Linux" do
15
+ Facter.fact(:kernel).stubs(:value).returns("Linux")
16
+ Facter::Core::Execution.stubs(:exec).with("hostid").returns("Curly")
17
+
18
+ Facter.fact(:uniqueid).value.should == "Curly"
19
+ end
20
+
21
+ it "should match hostid on AIX" do
22
+ Facter.fact(:kernel).stubs(:value).returns("AIX")
23
+ Facter::Core::Execution.stubs(:exec).with("hostid").returns("Moe")
24
+
25
+ Facter.fact(:uniqueid).value.should == "Moe"
26
+ end
27
+ end
@@ -0,0 +1,110 @@
1
+ #! /usr/bin/env ruby
2
+
3
+ require 'spec_helper'
4
+ require 'facter/util/uptime'
5
+
6
+ describe "uptime facts:" do
7
+ before { Facter.clear }
8
+ after { Facter.clear }
9
+
10
+ describe "when uptime information is available" do
11
+ describe "uptime" do
12
+ test_cases = [
13
+ [60 * 60 * 24 * 3, '3 days'],
14
+ [60 * 60 * 24 * 3 + 25, '3 days'],
15
+ [60 * 60 * 24 * 1, '1 day'],
16
+ [60 * 60 * 24 * 1 + 25, '1 day'],
17
+ [60 * (60 * 3 + 45), '3:45 hours'],
18
+ [60 * (60 * 3 + 4), '3:04 hours'],
19
+ [60 * 60, '1:00 hours'],
20
+ [60 * 35, '0:35 hours']
21
+ ]
22
+
23
+ test_cases.each do |seconds, expected|
24
+ it "should return #{expected.inspect} for #{seconds} seconds" do
25
+ Facter::Util::Uptime.stubs(:get_uptime_seconds_unix).returns(seconds)
26
+ Facter::Util::Uptime.stubs(:get_uptime_seconds_win).returns(seconds)
27
+
28
+ Facter.fact(:uptime).value.should == expected
29
+ end
30
+ end
31
+ end
32
+
33
+ end
34
+
35
+ describe "when uptime information is available" do
36
+ before do
37
+ Facter::Util::Uptime.stubs(:get_uptime_seconds_unix).returns(60 * 60 * 24 + 23)
38
+ Facter::Util::Uptime.stubs(:get_uptime_seconds_win).returns(60 * 60 * 24 + 23)
39
+ end
40
+
41
+ describe "uptime_seconds" do
42
+ it "should return the uptime in seconds" do
43
+ Facter.fact(:uptime_seconds).value.should == 60 * 60 * 24 + 23
44
+ end
45
+ end
46
+
47
+ describe "uptime_hours" do
48
+ it "should return the uptime in hours" do
49
+ Facter.fact(:uptime_hours).value.should == 24
50
+ end
51
+ end
52
+
53
+ describe "uptime_days" do
54
+ it "should return the uptime in days" do
55
+ Facter.fact(:uptime_days).value.should == 1
56
+ end
57
+ end
58
+ end
59
+
60
+ describe "when uptime information is not available" do
61
+ before do
62
+ Facter::Util::Uptime.stubs(:get_uptime_seconds_unix).returns(nil)
63
+ Facter::Util::Uptime.stubs(:get_uptime_seconds_win).returns(nil)
64
+ $stderr, @old = StringIO.new, $stderr
65
+ end
66
+
67
+ after do
68
+ $stderr = @old
69
+ end
70
+
71
+ describe "uptime" do
72
+ it "should return 'unknown'" do
73
+ Facter.fact(:uptime).value.should == "unknown"
74
+ end
75
+ end
76
+
77
+ describe "uptime_seconds" do
78
+ it "should return nil" do
79
+ Facter.fact(:uptime_seconds).value.should == nil
80
+ end
81
+
82
+ it "should not print a warn message to stderr" do
83
+ Facter.fact(:uptime_seconds).value
84
+ $stderr.string.should == ""
85
+ end
86
+ end
87
+
88
+ describe "uptime_hours" do
89
+ it "should return nil" do
90
+ Facter.fact(:uptime_hours).value.should == nil
91
+ end
92
+
93
+ it "should not print a warn message to stderr" do
94
+ Facter.fact(:uptime_hours).value
95
+ $stderr.string.should == ""
96
+ end
97
+ end
98
+
99
+ describe "uptime_days" do
100
+ it "should return nil" do
101
+ Facter.fact(:uptime_days).value.should == nil
102
+ end
103
+
104
+ it "should not print a warn message to stderr" do
105
+ Facter.fact(:uptime_days).value
106
+ $stderr.string.should == ""
107
+ end
108
+ end
109
+ end
110
+ end
@@ -0,0 +1,258 @@
1
+ #! /usr/bin/env ruby
2
+
3
+ require 'spec_helper'
4
+ require 'facter/util/collection'
5
+ require 'facter/util/nothing_loader'
6
+
7
+ describe Facter::Util::Collection do
8
+ let(:external_loader) { Facter::Util::NothingLoader.new }
9
+ let(:internal_loader) do
10
+ load = Facter::Util::Loader.new
11
+ load.stubs(:load).returns nil
12
+ load.stubs(:load_all).returns nil
13
+ load
14
+ end
15
+ let(:collection) { Facter::Util::Collection.new(internal_loader, external_loader) }
16
+
17
+ it "should delegate its load_all method to its loader" do
18
+ internal_loader.expects(:load_all)
19
+
20
+ collection.load_all
21
+ end
22
+
23
+ describe "when adding facts" do
24
+ it "should create a new fact if no fact with the same name already exists" do
25
+ collection.add(:myname)
26
+ collection.fact(:myname).name.should == :myname
27
+ end
28
+
29
+ it "should accept options" do
30
+ collection.add(:myname, :timeout => 1) { }
31
+ end
32
+
33
+ it "passes resolution specific options to the fact" do
34
+ fact = Facter::Util::Fact.new(:myname)
35
+ Facter::Util::Fact.expects(:new).with(:myname, {:timeout => 'myval'}).returns fact
36
+
37
+ fact.expects(:add).with({:timeout => 'myval'})
38
+
39
+ collection.add(:myname, :timeout => "myval") {}
40
+ end
41
+
42
+ describe "and a block is provided" do
43
+ it "should use the block to add a resolution to the fact" do
44
+ fact = mock 'fact'
45
+ fact.stubs(:extract_ldapname_option!)
46
+ Facter::Util::Fact.expects(:new).returns fact
47
+
48
+ fact.expects(:add)
49
+
50
+ collection.add(:myname) {}
51
+ end
52
+
53
+ it "should discard resolutions that throw an exception when added" do
54
+ Facter.expects(:warn).with(regexp_matches(/Unable to add resolve .* kaboom!/))
55
+ expect {
56
+ collection.add('yay') do
57
+ raise "kaboom!"
58
+ end
59
+ }.to_not raise_error
60
+ expect(collection.value('yay')).to be_nil
61
+ end
62
+ end
63
+ end
64
+
65
+ describe "when only defining facts" do
66
+ it "creates a new fact if no such fact exists" do
67
+ fact = Facter::Util::Fact.new(:newfact)
68
+ Facter::Util::Fact.expects(:new).with(:newfact, {}).returns fact
69
+ expect(collection.define_fact(:newfact)).to equal fact
70
+ end
71
+
72
+ it "returns an existing fact if the fact has already been defined" do
73
+ fact = collection.define_fact(:newfact)
74
+ expect(collection.define_fact(:newfact)).to equal fact
75
+ end
76
+
77
+ it "passes options to newly generated facts" do
78
+ Facter.stubs(:warnonce)
79
+ fact = collection.define_fact(:newfact, :ldapname => 'NewFact')
80
+ expect(fact.ldapname).to eq 'NewFact'
81
+ end
82
+
83
+ it "logs a warning if the fact could not be defined" do
84
+ Facter.expects(:warn).with("Unable to add fact newfact: kaboom!")
85
+
86
+ collection.define_fact(:newfact) do
87
+ raise "kaboom!"
88
+ end
89
+ end
90
+ end
91
+
92
+ describe "when retrieving facts" do
93
+ before do
94
+ @fact = collection.add("YayNess")
95
+ end
96
+
97
+ it "should return the fact instance specified by the name" do
98
+ collection.fact("YayNess").should equal(@fact)
99
+ end
100
+
101
+ it "should be case-insensitive" do
102
+ collection.fact("yayness").should equal(@fact)
103
+ end
104
+
105
+ it "should treat strings and symbols equivalently" do
106
+ collection.fact(:yayness).should equal(@fact)
107
+ end
108
+
109
+ it "should use its loader to try to load the fact if no fact can be found" do
110
+ collection.internal_loader.expects(:load).with(:testing)
111
+ collection.fact("testing")
112
+ end
113
+
114
+ it "should return nil if it cannot find or load the fact" do
115
+ collection.internal_loader.expects(:load).with(:testing)
116
+ collection.fact("testing").should be_nil
117
+ end
118
+ end
119
+
120
+ describe "when returning a fact's value" do
121
+ before do
122
+ @fact = collection.add("YayNess", :value => "result")
123
+ end
124
+
125
+ it "should return the result of calling :value on the fact" do
126
+ collection.value("YayNess").should == "result"
127
+ end
128
+
129
+ it "should be case-insensitive" do
130
+ collection.value("yayness").should == "result"
131
+ end
132
+
133
+ it "should treat strings and symbols equivalently" do
134
+ collection.value(:yayness).should == "result"
135
+ end
136
+ end
137
+
138
+ it "should return the fact's value when the array index method is used" do
139
+ collection.add("myfact", :value => "foo")
140
+
141
+ collection["myfact"].should == "foo"
142
+ end
143
+
144
+ it "should have a method for flushing all facts" do
145
+ fact = collection.add("YayNess")
146
+
147
+ fact.expects(:flush)
148
+
149
+ collection.flush
150
+ end
151
+
152
+ it "should have a method that returns all fact names" do
153
+ collection.add(:one)
154
+ collection.add(:two)
155
+
156
+ collection.list.sort { |a,b| a.to_s <=> b.to_s }.should == [:one, :two]
157
+ end
158
+
159
+ describe "when returning a hash of values" do
160
+ it "should return a hash of fact names and values with the fact names as strings" do
161
+ collection.add(:one, :value => "me")
162
+
163
+ collection.to_hash.should == {"one" => "me"}
164
+ end
165
+
166
+ it "should not include facts that did not return a value" do
167
+ collection.add(:two, :value => nil)
168
+
169
+ collection.to_hash.should_not be_include(:two)
170
+ end
171
+ end
172
+
173
+ describe "when iterating over facts" do
174
+ before do
175
+ collection.add(:one, :value => "ONE")
176
+ collection.add(:two, :value => "TWO")
177
+ end
178
+
179
+ it "should yield each fact name and the fact value" do
180
+ facts = {}
181
+ collection.each do |fact, value|
182
+ facts[fact] = value
183
+ end
184
+ facts.should == {"one" => "ONE", "two" => "TWO"}
185
+ end
186
+
187
+ it "should convert the fact name to a string" do
188
+ facts = {}
189
+ collection.each do |fact, value|
190
+ fact.should be_instance_of(String)
191
+ end
192
+ end
193
+
194
+ it "should only yield facts that have values" do
195
+ collection.add(:nil_fact, :value => nil)
196
+ facts = {}
197
+ collection.each do |fact, value|
198
+ facts[fact] = value
199
+ end
200
+
201
+ facts.should_not be_include("nil_fact")
202
+ end
203
+ end
204
+
205
+ describe "when no facts are loaded" do
206
+ it "should warn when no facts were loaded" do
207
+ Facter.expects(:warnonce).with("No facts loaded from #{internal_loader.search_path.join(File::PATH_SEPARATOR)}").once
208
+
209
+ collection.fact("one")
210
+ end
211
+ end
212
+
213
+ describe "external facts" do
214
+ let(:external_loader) { SingleFactLoader.new(:test_fact, "fact value") }
215
+ let(:collection) { Facter::Util::Collection.new(internal_loader, external_loader) }
216
+
217
+ it "loads when a specific fact is requested" do
218
+ collection.fact(:test_fact).value.should == "fact value"
219
+ end
220
+
221
+ it "loads when facts are listed" do
222
+ collection.list.should == [:test_fact]
223
+ end
224
+
225
+ it "loads when all facts are iterated over" do
226
+ facts = []
227
+ collection.each { |fact_name, fact_value| facts << [fact_name, fact_value] }
228
+
229
+ facts.should == [["test_fact", "fact value"]]
230
+ end
231
+
232
+ it "are loaded only once" do
233
+ external_loader.expects(:load).with(collection)
234
+
235
+ collection.load_all
236
+ collection.load_all
237
+ end
238
+
239
+ it "are reloaded after flushing" do
240
+ external_loader.expects(:load).with(collection).twice
241
+
242
+ collection.load_all
243
+ collection.flush
244
+ collection.load_all
245
+ end
246
+ end
247
+
248
+ class SingleFactLoader
249
+ def initialize(name, value)
250
+ @name = name
251
+ @value = value
252
+ end
253
+
254
+ def load(collection)
255
+ collection.add(@name, :value => @value)
256
+ end
257
+ end
258
+ end