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,179 @@
1
+ #! /usr/bin/env ruby
2
+
3
+ require 'spec_helper'
4
+ require 'facter/util/manufacturer'
5
+
6
+ describe Facter::Manufacturer do
7
+ before :each do
8
+ Facter.clear
9
+ end
10
+
11
+ it "should return the system DMI table" do
12
+ Facter::Manufacturer.should respond_to(:get_dmi_table)
13
+ end
14
+
15
+ it "should return nil on non-supported operating systems" do
16
+ Facter.stubs(:value).with(:kernel).returns("SomeThing")
17
+ Facter::Manufacturer.get_dmi_table().should be_nil
18
+ end
19
+
20
+ it "should parse prtdiag output on a sunfire v120" do
21
+ Facter::Core::Execution.stubs(:exec).returns(my_fixture_read("solaris_sunfire_v120_prtdiag"))
22
+ Facter::Manufacturer.prtdiag_sparc_find_system_info()
23
+ Facter.value(:manufacturer).should == "Sun Microsystems"
24
+ Facter.value(:productname).should == "Sun Fire V120 (UltraSPARC-IIe 648MHz)"
25
+ end
26
+
27
+ it "should parse prtdiag output on a t5220" do
28
+ Facter::Core::Execution.stubs(:exec).returns(my_fixture_read("solaris_t5220_prtdiag"))
29
+ Facter::Manufacturer.prtdiag_sparc_find_system_info()
30
+ Facter.value(:manufacturer).should == "Sun Microsystems"
31
+ Facter.value(:productname).should == "SPARC Enterprise T5220"
32
+ end
33
+
34
+ it "should not set manufacturer if prtdiag output is nil" do
35
+ # Stub kernel so we don't have windows fall through to its own mechanism
36
+ Facter.fact(:kernel).stubs(:value).returns("SunOS")
37
+ Facter.fact(:hardwareisa).stubs(:value).returns("sparc")
38
+
39
+ Facter::Core::Execution.stubs(:exec).with(regexp_matches(/prtdiag/)).returns(nil)
40
+ Facter::Manufacturer.prtdiag_sparc_find_system_info()
41
+ Facter.value(:manufacturer).should_not == "Sun Microsystems"
42
+ end
43
+
44
+ it "should strip white space on dmi output with spaces" do
45
+ dmidecode_output = my_fixture_read("linux_dmidecode_with_spaces")
46
+ Facter::Manufacturer.expects(:get_dmi_table).returns(dmidecode_output)
47
+ Facter.fact(:kernel).stubs(:value).returns("Linux")
48
+
49
+ query = { '[Ss]ystem [Ii]nformation' => [ { 'Product(?: Name)?:' => 'productname' } ] }
50
+
51
+ Facter::Manufacturer.dmi_find_system_info(query)
52
+ Facter.value(:productname).should == "MS-6754"
53
+ end
54
+
55
+ it "should handle output from smbios when run under sunos" do
56
+ smbios_output = my_fixture_read("opensolaris_smbios")
57
+ Facter::Manufacturer.expects(:get_dmi_table).returns(smbios_output)
58
+ Facter.fact(:kernel).stubs(:value).returns("SunOS")
59
+
60
+ query = { 'BIOS information' => [ { 'Release Date:' => 'reldate' } ] }
61
+
62
+ Facter::Manufacturer.dmi_find_system_info(query)
63
+ Facter.value(:reldate).should == "12/01/2006"
64
+ end
65
+
66
+ it "should not split on dmi keys containing the string Handle" do
67
+ dmidecode_output = <<-eos
68
+ Handle 0x1000, DMI type 16, 15 bytes
69
+ Physical Memory Array
70
+ Location: System Board Or Motherboard
71
+ Use: System Memory
72
+ Error Correction Type: None
73
+ Maximum Capacity: 4 GB
74
+ Error Information Handle: Not Provided
75
+ Number Of Devices: 123
76
+
77
+ Handle 0x001F
78
+ DMI type 127, 4 bytes.
79
+ End Of Table
80
+ eos
81
+ Facter::Manufacturer.expects(:get_dmi_table).returns(dmidecode_output)
82
+ Facter.fact(:kernel).stubs(:value).returns("Linux")
83
+ query = { 'Physical Memory Array' => [ { 'Number Of Devices:' => 'ramslots'}]}
84
+ Facter::Manufacturer.dmi_find_system_info(query)
85
+ Facter.value(:ramslots).should == "123"
86
+ end
87
+
88
+ it "should match the key in the defined section and not the first one found" do
89
+ dmidecode_output = <<-eos
90
+ Handle 0x000C, DMI type 7, 19 bytes
91
+ Cache Information
92
+ Socket Designation: Internal L2 Cache
93
+ Configuration: Enabled, Socketed, Level 2
94
+ Operational Mode: Write Back
95
+ Location: Internal
96
+ Installed Size: 4096 KB
97
+ Maximum Size: 4096 KB
98
+ Supported SRAM Types:
99
+ Burst
100
+ Installed SRAM Type: Burst
101
+ Speed: Unknown
102
+ Error Correction Type: Single-bit ECC
103
+ System Type: Unified
104
+ Associativity: 8-way Set-associative
105
+
106
+ Handle 0x1000, DMI type 16, 15 bytes
107
+ Physical Memory Array
108
+ Location: System Board Or Motherboard
109
+ Use: System Memory
110
+ Error Correction Type: None
111
+ Maximum Capacity: 4 GB
112
+ Error Information Handle: Not Provided
113
+ Number Of Devices: 2
114
+
115
+ Handle 0x001F
116
+ DMI type 127, 4 bytes.
117
+ End Of Table
118
+ eos
119
+ Facter::Manufacturer.expects(:get_dmi_table).returns(dmidecode_output)
120
+ Facter.fact(:kernel).stubs(:value).returns("Linux")
121
+ query = { 'Physical Memory Array' => [ { 'Location:' => 'ramlocation'}]}
122
+ Facter::Manufacturer.dmi_find_system_info(query)
123
+ Facter.value(:ramlocation).should == "System Board Or Motherboard"
124
+ end
125
+
126
+ it "should return an appropriate uuid on linux" do
127
+ Facter.fact(:kernel).stubs(:value).returns("Linux")
128
+ dmidecode = my_fixture_read("intel_linux_dmidecode")
129
+ Facter::Manufacturer.expects(:get_dmi_table).returns(dmidecode)
130
+
131
+ query = { '[Ss]ystem [Ii]nformation' => [ { 'UUID:' => 'uuid' } ] }
132
+ Facter::Manufacturer.dmi_find_system_info(query)
133
+ Facter.value(:uuid).should == "60A98BB3-95B6-E111-AF74-4C72B9247D28"
134
+ end
135
+
136
+ def find_product_name(os)
137
+ output_file = case os
138
+ when "FreeBSD" then my_fixture("freebsd_dmidecode")
139
+ when "SunOS" then my_fixture("opensolaris_smbios")
140
+ end
141
+
142
+ output = File.new(output_file).read()
143
+ query = { '[Ss]ystem [Ii]nformation' => [ { 'Product(?: Name)?:' => "product_name_#{os}" } ] }
144
+
145
+ Facter.fact(:kernel).stubs(:value).returns(os)
146
+ Facter::Manufacturer.expects(:get_dmi_table).returns(output)
147
+
148
+ Facter::Manufacturer.dmi_find_system_info(query)
149
+
150
+ return Facter.value("product_name_#{os}")
151
+ end
152
+
153
+ it "should return the same result with smbios than with dmidecode" do
154
+ find_product_name("FreeBSD").should_not == nil
155
+ find_product_name("FreeBSD").should == find_product_name("SunOS")
156
+ end
157
+
158
+ it "should find information on Windows" do
159
+ Facter.fact(:kernel).stubs(:value).returns("windows")
160
+ require 'facter/util/wmi'
161
+
162
+ bios = stubs 'bios'
163
+ bios.stubs(:Manufacturer).returns("Phoenix Technologies LTD")
164
+ bios.stubs(:Serialnumber).returns("56 4d 40 2b 4d 81 94 d6-e6 c5 56 a4 56 0c 9e 9f")
165
+
166
+ product = stubs 'product'
167
+ product.stubs(:Name).returns("VMware Virtual Platform")
168
+
169
+ wmi = stubs 'wmi'
170
+ wmi.stubs(:ExecQuery).with("select * from Win32_Bios").returns([bios])
171
+ wmi.stubs(:ExecQuery).with("select * from Win32_Bios").returns([bios])
172
+ wmi.stubs(:ExecQuery).with("select * from Win32_ComputerSystemProduct").returns([product])
173
+
174
+ Facter::Util::WMI.stubs(:connect).returns(wmi)
175
+ Facter.value(:manufacturer).should == "Phoenix Technologies LTD"
176
+ Facter.value(:serialnumber).should == "56 4d 40 2b 4d 81 94 d6-e6 c5 56 a4 56 0c 9e 9f"
177
+ Facter.value(:productname).should == "VMware Virtual Platform"
178
+ end
179
+ end
@@ -0,0 +1,113 @@
1
+ # encoding: utf-8
2
+
3
+ require 'spec_helper'
4
+ require 'facter/util/normalization'
5
+
6
+ describe Facter::Util::Normalization do
7
+
8
+ subject { described_class }
9
+
10
+ def utf16(str)
11
+ if String.method_defined?(:encode) && defined?(::Encoding)
12
+ str.encode(Encoding::UTF_16LE)
13
+ else
14
+ str
15
+ end
16
+ end
17
+
18
+ def utf8(str)
19
+ if String.method_defined?(:encode) && defined?(::Encoding)
20
+ str.encode(Encoding::UTF_8)
21
+ else
22
+ str
23
+ end
24
+ end
25
+
26
+ describe "validating strings" do
27
+ describe "and string encoding is supported", :if => String.instance_methods.include?(:encoding) do
28
+ it "accepts strings that are ASCII and match their encoding and converts them to UTF-8" do
29
+ str = "ASCII".encode(Encoding::ASCII)
30
+ normalized_str = subject.normalize(str)
31
+ expect(normalized_str.encoding).to eq(Encoding::UTF_8)
32
+ end
33
+
34
+ it "accepts strings that are UTF-8 and match their encoding" do
35
+ str = "let's make a ☃!".encode(Encoding::UTF_8)
36
+ expect(subject.normalize(str)).to eq(str)
37
+ end
38
+
39
+ it "converts valid non UTF-8 strings to UTF-8" do
40
+ str = "let's make a ☃!".encode(Encoding::UTF_16LE)
41
+ enc = subject.normalize(str).encoding
42
+ expect(enc).to eq(Encoding::UTF_8)
43
+ end
44
+
45
+ it "normalizes a frozen string returning a non-frozen string" do
46
+ str = "factvalue".encode(Encoding::UTF_16LE).freeze
47
+ normalized_str = subject.normalize(str)
48
+ expect(normalized_str.encoding).to eq(Encoding::UTF_8)
49
+ expect(normalized_str).to_not be_frozen
50
+ end
51
+
52
+ it "rejects strings that are not UTF-8 and do not match their claimed encoding" do
53
+ invalid_shift_jis = "\xFF\x5C!".force_encoding(Encoding::SHIFT_JIS)
54
+ expect {
55
+ subject.normalize(invalid_shift_jis)
56
+ }.to raise_error(Facter::Util::Normalization::NormalizationError, /String encoding Shift_JIS is not UTF-8 and could not be converted to UTF-8/)
57
+ end
58
+
59
+ it "rejects strings that claim to be UTF-8 encoded but aren't" do
60
+ str = "\255ay!".force_encoding(Encoding::UTF_8)
61
+ expect {
62
+ subject.normalize(str)
63
+ }.to raise_error(Facter::Util::Normalization::NormalizationError, /String.*doesn't match the reported encoding UTF-8/)
64
+ end
65
+ end
66
+
67
+ describe "and string encoding is not supported", :unless => String.instance_methods.include?(:encoding) do
68
+ it "accepts strings that are UTF-8 and match their encoding" do
69
+ str = "let's make a ☃!"
70
+ expect(subject.normalize(str)).to eq(str)
71
+ end
72
+
73
+ it "rejects strings that are not UTF-8" do
74
+ str = "let's make a \255\255\255!"
75
+ expect {
76
+ subject.normalize(str)
77
+ }.to raise_error(Facter::Util::Normalization::NormalizationError, /String .* is not valid UTF-8/)
78
+ end
79
+ end
80
+ end
81
+
82
+ describe "normalizing arrays" do
83
+ it "normalizes each element in the array" do
84
+ arr = [utf16('first'), utf16('second'), [utf16('third'), utf16('fourth')]]
85
+ expected_arr = [utf8('first'), utf8('second'), [utf8('third'), utf8('fourth')]]
86
+
87
+ expect(subject.normalize_array(arr)).to eq(expected_arr)
88
+ end
89
+ end
90
+
91
+ describe "normalizing hashes" do
92
+ it "normalizes each element in the array" do
93
+ hsh = {utf16('first') => utf16('second'), utf16('third') => [utf16('fourth'), utf16('fifth')]}
94
+ expected_hsh = {utf8('first') => utf8('second'), utf8('third') => [utf8('fourth'), utf8('fifth')]}
95
+
96
+ expect(subject.normalize_hash(hsh)).to eq(expected_hsh)
97
+ end
98
+ end
99
+
100
+ [1, 1.0, true, false, nil].each do |val|
101
+ it "accepts #{val.inspect}:#{val.class}" do
102
+ expect(subject.normalize(val)).to eq(val)
103
+ end
104
+ end
105
+
106
+ [:sym, Object.new, Set.new].each do |val|
107
+ it "rejects #{val.inspect}:#{val.class}" do
108
+ expect {
109
+ subject.normalize(val)
110
+ }.to raise_error(Facter::Util::Normalization::NormalizationError, /Expected .*but was #{val.class}/ )
111
+ end
112
+ end
113
+ end
@@ -0,0 +1,200 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'spec_helper'
4
+ require 'facter/util/parser'
5
+ require 'tempfile'
6
+ require 'tmpdir.rb'
7
+
8
+ describe Facter::Util::Parser do
9
+ include PuppetlabsSpec::Files
10
+
11
+ describe "extension_matches? function" do
12
+ it "should match extensions when subclass uses match_extension" do
13
+ Facter::Util::Parser.extension_matches?("myfile.foobar", "foobar").should == true
14
+ end
15
+
16
+ it "should match extensions when subclass uses match_extension with an array" do
17
+ Facter::Util::Parser.extension_matches?("myfile.ext1", ["ext1","ext2","ext3"]).should == true
18
+ Facter::Util::Parser.extension_matches?("myfile.ext2", ["ext1","ext2","ext3"]).should == true
19
+ Facter::Util::Parser.extension_matches?("myfile.ext3", ["ext1","ext2","ext3"]).should == true
20
+ end
21
+
22
+ it "should match extension ignoring case on file" do
23
+ Facter::Util::Parser.extension_matches?("myfile.EXT1", "ext1").should == true
24
+ Facter::Util::Parser.extension_matches?("myfile.ExT1", "ext1").should == true
25
+ Facter::Util::Parser.extension_matches?("myfile.exT1", "ext1").should == true
26
+ end
27
+
28
+ it "should match extension ignoring case for match_extension" do
29
+ Facter::Util::Parser.extension_matches?("myfile.EXT1", "EXT1").should == true
30
+ Facter::Util::Parser.extension_matches?("myfile.ExT1", "EXT1").should == true
31
+ Facter::Util::Parser.extension_matches?("myfile.exT1", "EXT1").should == true
32
+ end
33
+ end
34
+
35
+ let(:data) do {"one" => "two", "three" => "four"} end
36
+
37
+ describe "yaml" do
38
+ let(:data_in_yaml) { YAML.dump(data) }
39
+ let(:data_file) { "/tmp/foo.yaml" }
40
+
41
+ it "should return a hash of whatever is stored on disk" do
42
+ File.stubs(:read).with(data_file).returns(data_in_yaml)
43
+ described_class.parser_for(data_file).results.should == data
44
+ end
45
+
46
+ it "should handle exceptions and warn" do
47
+ # YAML data with an error
48
+ File.stubs(:read).with(data_file).returns(data_in_yaml + "}")
49
+ Facter.expects(:warn).at_least_once
50
+ lambda { Facter::Util::Parser.parser_for(data_file).results }.should_not raise_error
51
+ end
52
+ end
53
+
54
+ describe "json" do
55
+ let(:data_in_json) { JSON.dump(data) }
56
+ let(:data_file) { "/tmp/foo.json" }
57
+
58
+ it "should return a hash of whatever is stored on disk" do
59
+ pending("this test requires the json library") unless Facter.json?
60
+ File.stubs(:read).with(data_file).returns(data_in_json)
61
+ Facter::Util::Parser.parser_for(data_file).results.should == data
62
+ end
63
+ end
64
+
65
+ describe "txt" do
66
+ let(:data_file) { "/tmp/foo.txt" }
67
+
68
+ shared_examples_for "txt parser" do
69
+ it "should return a hash of whatever is stored on disk" do
70
+ File.stubs(:read).with(data_file).returns(data_in_txt)
71
+ Facter::Util::Parser.parser_for(data_file).results.should == data
72
+ end
73
+ end
74
+
75
+ context "well formed data" do
76
+ let(:data_in_txt) { "one=two\nthree=four\n" }
77
+ it_behaves_like "txt parser"
78
+ end
79
+
80
+ context "extra equal sign" do
81
+ let(:data_in_txt) { "one=two\nthree=four=five\n" }
82
+ let(:data) do {"one" => "two", "three" => "four=five"} end
83
+ it_behaves_like "txt parser"
84
+ end
85
+
86
+ context "extra data" do
87
+ let(:data_in_txt) { "one=two\nfive\nthree=four\n" }
88
+ it_behaves_like "txt parser"
89
+ end
90
+ end
91
+
92
+ describe "scripts" do
93
+ let(:ext) { Facter::Util::Config.is_windows? ? '.bat' : '.sh' }
94
+ let(:cmd) { "/tmp/foo#{ext}" }
95
+ let(:data_in_txt) { "one=two\nthree=four\n" }
96
+
97
+ def expects_script_to_return(path, content, result)
98
+ Facter::Core::Execution.stubs(:exec).with(path).returns(content)
99
+ File.stubs(:executable?).with(path).returns(true)
100
+ File.stubs(:file?).with(path).returns(true)
101
+
102
+ Facter::Util::Parser.parser_for(path).results.should == result
103
+ end
104
+
105
+ def expects_parser_to_return_nil_for_directory(path)
106
+ File.stubs(:file?).with(path).returns(false)
107
+
108
+ Facter::Util::Parser.parser_for(path).results.should be_nil
109
+ end
110
+
111
+ it "returns a hash of whatever is returned by the executable" do
112
+ expects_script_to_return(cmd, data_in_txt, data)
113
+ end
114
+
115
+ it "should not parse a directory" do
116
+ expects_parser_to_return_nil_for_directory(cmd)
117
+ end
118
+
119
+ it "returns an empty hash when the script returns nil" do
120
+ expects_script_to_return(cmd, nil, {})
121
+ end
122
+
123
+ it "quotes scripts with spaces" do
124
+ path = "/h a s s p a c e s#{ext}"
125
+
126
+ Facter::Core::Execution.expects(:exec).with("\"#{path}\"").returns(data_in_txt)
127
+
128
+ expects_script_to_return(path, data_in_txt, data)
129
+ end
130
+
131
+ context "exe, bat, cmd, and com files" do
132
+ let :cmds do ["/tmp/foo.bat", "/tmp/foo.cmd", "/tmp/foo.exe", "/tmp/foo.com"] end
133
+
134
+ before :each do
135
+ cmds.each {|cmd|
136
+ File.stubs(:executable?).with(cmd).returns(true)
137
+ File.stubs(:file?).with(cmd).returns(true)
138
+ }
139
+ end
140
+
141
+ it "should return nothing parser if not on windows" do
142
+ Facter::Util::Config.stubs(:is_windows?).returns(false)
143
+ cmds.each {|cmd| Facter::Util::Parser.parser_for(cmd).should be_an_instance_of(Facter::Util::Parser::NothingParser) }
144
+ end
145
+
146
+ it "should return script parser if on windows" do
147
+ Facter::Util::Config.stubs(:is_windows?).returns(true)
148
+ cmds.each {|cmd| Facter::Util::Parser.parser_for(cmd).should be_an_instance_of(Facter::Util::Parser::ScriptParser) }
149
+ end
150
+ end
151
+
152
+ context "exe, bat, cmd, and com files" do
153
+ let :cmds do ["/tmp/foo.bat", "/tmp/foo.cmd", "/tmp/foo.exe", "/tmp/foo.com"] end
154
+
155
+ before :each do
156
+ cmds.each {|cmd|
157
+ File.stubs(:executable?).with(cmd).returns(true)
158
+ File.stubs(:file?).with(cmd).returns(true)
159
+ }
160
+ end
161
+
162
+ it "should return nothing parser if not on windows" do
163
+ Facter::Util::Config.stubs(:is_windows?).returns(false)
164
+ cmds.each {|cmd| Facter::Util::Parser.parser_for(cmd).should be_an_instance_of(Facter::Util::Parser::NothingParser) }
165
+ end
166
+
167
+ it "should return script parser if on windows" do
168
+ Facter::Util::Config.stubs(:is_windows?).returns(true)
169
+ cmds.each {|cmd| Facter::Util::Parser.parser_for(cmd).should be_an_instance_of(Facter::Util::Parser::ScriptParser) }
170
+ end
171
+
172
+ end
173
+
174
+ describe "powershell parser" do
175
+ let(:ps1) { "/tmp/foo.ps1" }
176
+
177
+ def expects_to_parse_powershell(cmd, content, result)
178
+ Facter::Util::Config.stubs(:is_windows?).returns(true)
179
+ Facter::Core::Execution.stubs(:exec).returns(content)
180
+ File.stubs(:file?).with(ps1).returns(true)
181
+
182
+ Facter::Util::Parser.parser_for(cmd).results.should == result
183
+ end
184
+
185
+ it "should not parse a directory" do
186
+ expects_parser_to_return_nil_for_directory(ps1)
187
+ end
188
+
189
+ it "should parse output from powershell" do
190
+ expects_to_parse_powershell(ps1, data_in_txt, data)
191
+ end
192
+ end
193
+ end
194
+
195
+ describe "nothing parser" do
196
+ it "uses the nothing parser when there is no other parser" do
197
+ Facter::Util::Parser.parser_for("this.is.not.valid").results.should be_nil
198
+ end
199
+ end
200
+ end