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,142 @@
1
+ #! /usr/bin/env ruby
2
+
3
+ require 'spec_helper'
4
+ require 'facter/util/fact'
5
+
6
+ describe Facter::Util::Fact do
7
+
8
+ subject(:fact) { Facter::Util::Fact.new("yay") }
9
+
10
+ let(:resolution) { Facter::Util::Resolution.new("yay", fact) }
11
+
12
+ it "requires a name" do
13
+ expect { Facter::Util::Fact.new }.to raise_error(ArgumentError)
14
+ end
15
+
16
+ it "downcases and converts the name to a symbol" do
17
+ expect(Facter::Util::Fact.new("YayNess").name).to eq :yayness
18
+ end
19
+
20
+ it "issues a deprecation warning for use of ldapname" do
21
+ Facter.expects(:warnonce).with("ldapname is deprecated and will be removed in a future version")
22
+ Facter::Util::Fact.new("YayNess", :ldapname => "fooness")
23
+ end
24
+
25
+ describe "when adding resolution mechanisms using #add" do
26
+ it "delegates to #define_resolution with an anonymous resolution" do
27
+ subject.expects(:define_resolution).with(nil, {})
28
+ subject.add
29
+ end
30
+ end
31
+
32
+ describe "looking up resolutions by name" do
33
+ subject(:fact) { described_class.new('yay') }
34
+
35
+ it "returns nil if no such resolution exists" do
36
+ expect(fact.resolution('nope')).to be_nil
37
+ end
38
+
39
+ it "never returns anonymous resolutions" do
40
+ fact.add() { setcode { 'anonymous' } }
41
+
42
+ expect(fact.resolution(nil)).to be_nil
43
+ end
44
+ end
45
+
46
+ describe "adding resolution mechanisms by name" do
47
+
48
+ let(:res) do
49
+ stub 'resolution',
50
+ :name => 'named',
51
+ :set_options => nil,
52
+ :resolution_type => :simple
53
+ end
54
+
55
+ it "creates a new resolution if no such resolution exists" do
56
+ Facter::Util::Resolution.expects(:new).once.with('named', fact).returns(res)
57
+
58
+ fact.define_resolution('named')
59
+
60
+ expect(fact.resolution('named')).to eq res
61
+ end
62
+
63
+ it "creates a simple resolution when the type is nil" do
64
+ fact.define_resolution('named')
65
+ expect(fact.resolution('named')).to be_a_kind_of Facter::Util::Resolution
66
+ end
67
+
68
+ it "creates a simple resolution when the type is :simple" do
69
+ fact.define_resolution('named', :type => :simple)
70
+ expect(fact.resolution('named')).to be_a_kind_of Facter::Util::Resolution
71
+ end
72
+
73
+ it "creates an aggregate resolution when the type is :aggregate" do
74
+ fact.define_resolution('named', :type => :aggregate)
75
+ expect(fact.resolution('named')).to be_a_kind_of Facter::Core::Aggregate
76
+ end
77
+
78
+ it "raises an error if there is an existing resolution with a different type" do
79
+ pending "We need to stop rescuing all errors when instantiating resolutions"
80
+ fact.define_resolution('named')
81
+ expect {
82
+ fact.define_resolution('named', :type => :aggregate)
83
+ }.to raise_error(ArgumentError, /Cannot return resolution.*already defined as simple/)
84
+ end
85
+
86
+ it "returns existing resolutions by name" do
87
+ Facter::Util::Resolution.expects(:new).once.with('named', fact).returns(res)
88
+
89
+ fact.define_resolution('named')
90
+ fact.define_resolution('named')
91
+
92
+ expect(fact.resolution('named')).to eq res
93
+ end
94
+ end
95
+
96
+ describe "when returning a value" do
97
+ it "returns nil if there are no resolutions" do
98
+ Facter::Util::Fact.new("yay").value.should be_nil
99
+ end
100
+
101
+ it "prefers the highest weight resolution" do
102
+ fact.add { has_weight 1; setcode { "1" } }
103
+ fact.add { has_weight 2; setcode { "2" } }
104
+ fact.add { has_weight 0; setcode { "0" } }
105
+ expect(fact.value).to eq "2"
106
+ end
107
+
108
+ it "returns the first value returned by a resolution" do
109
+ fact.add { has_weight 1; setcode { "1" } }
110
+ fact.add { has_weight 2; setcode { nil } }
111
+ fact.add { has_weight 0; setcode { "0" } }
112
+ expect(fact.value).to eq "1"
113
+ end
114
+
115
+ it "skips unsuitable resolutions" do
116
+ fact.add { has_weight 1; setcode { "1" } }
117
+ fact.add do
118
+ def suitable?; false; end
119
+ has_weight 2
120
+ setcode { 2 }
121
+ end
122
+
123
+ expect(fact.value).to eq "1"
124
+ end
125
+ end
126
+
127
+ describe '#flush' do
128
+ subject do
129
+ Facter::Util::Fact.new(:foo)
130
+ end
131
+
132
+ it "invokes #flush on all resolutions" do
133
+ simple = subject.add(:type => :simple)
134
+ simple.expects(:flush)
135
+
136
+ aggregate = subject.add(:type => :aggregate)
137
+ aggregate.expects(:flush)
138
+
139
+ subject.flush
140
+ end
141
+ end
142
+ end
@@ -0,0 +1,29 @@
1
+ #! /usr/bin/env ruby
2
+
3
+ require 'facter/util/file_read'
4
+ require 'spec_helper'
5
+
6
+ describe Facter::Util::FileRead do
7
+ let(:issue) { "Ubuntu 10.04.4 LTS \\n \\l\n\n" }
8
+
9
+ it "reads a file" do
10
+ File.expects(:read).with("/etc/issue").returns(issue)
11
+ Facter::Util::FileRead.read("/etc/issue").should == issue
12
+ end
13
+
14
+ it "returns nil if the file cannot be accessed" do
15
+ File.stubs(:read).with("/etc/issue").raises(Errno::EACCES.new("/etc/issue"))
16
+ Facter::Util::FileRead.read("/etc/issue").should be_nil
17
+ end
18
+
19
+ it "returns nil if the file does not exist" do
20
+ File.stubs(:read).with("/etc/issue").raises(Errno::ENOENT.new("/etc/issue"))
21
+ Facter::Util::FileRead.read("/etc/issue").should be_nil
22
+ end
23
+
24
+ it "logs a message when handing exceptions" do
25
+ File.stubs(:read).with("/etc/issue").raises(Errno::EACCES.new("/etc/issue"))
26
+ Facter.expects(:debug).with("Could not read /etc/issue: Permission denied - /etc/issue")
27
+ Facter::Util::FileRead.read("/etc/issue")
28
+ end
29
+ end
@@ -0,0 +1,80 @@
1
+ # encoding: UTF-8
2
+
3
+ require 'spec_helper'
4
+ require 'facter/util/ip/windows'
5
+
6
+ describe Facter::Util::IP::Windows do
7
+ before :each do
8
+ Facter.fact(:kernel).stubs(:value).returns('windows')
9
+ end
10
+
11
+ describe ".to_s" do
12
+ let(:to_s) { described_class.to_s }
13
+
14
+ it { to_s.should eq 'windows' }
15
+ end
16
+
17
+ describe ".convert_netmask_from_hex?" do
18
+ let :convert_netmask_from_hex? do
19
+ described_class.convert_netmask_from_hex?
20
+ end
21
+
22
+ it { convert_netmask_from_hex?.should be false }
23
+ end
24
+
25
+ describe ".bonding_master" do
26
+ let(:bonding_master) { described_class.bonding_master('eth0') }
27
+
28
+ pending("porting to Windows") do
29
+ it { bonding_master.should be_nil }
30
+ end
31
+ end
32
+
33
+ describe ".interfaces" do
34
+ let(:name) { 'Local Area Connection' }
35
+ let(:index) { 7 }
36
+ let(:nic_config) { mock('nic_config', :Index => index) }
37
+ let(:nic) { stub('nic', :NetConnectionId => name ) }
38
+ let(:nic_empty_NetConnectionId) { stub('nic', :NetConnectionId => '' ) }
39
+ let(:nic_nil_NetConnectionId) { stub('nic', :NetConnectionId => nil ) }
40
+ let(:wmi_query) {"SELECT * FROM Win32_NetworkAdapter WHERE Index = #{index} AND NetEnabled = TRUE"}
41
+
42
+ it "should return an array of only connected interfaces" do
43
+ Facter::Util::WMI.expects(:execquery).with(Facter::Util::IP::Windows::WMI_IP_INFO_QUERY).
44
+ returns([nic_config])
45
+ Facter::Util::WMI.expects(:execquery).with(wmi_query).
46
+ returns([nic])
47
+
48
+ described_class.interfaces.should == [name]
49
+ end
50
+
51
+ it "should not return an interface with an empty NetConnectionId" do
52
+ Facter::Util::WMI.expects(:execquery).with(Facter::Util::IP::Windows::WMI_IP_INFO_QUERY).
53
+ returns([nic_config])
54
+ Facter::Util::WMI.expects(:execquery).with(wmi_query).
55
+ returns([nic_empty_NetConnectionId])
56
+
57
+ described_class.interfaces.should == []
58
+ end
59
+
60
+ it "should not return an interface with a nil NetConnectionId" do
61
+ Facter::Util::WMI.expects(:execquery).with(Facter::Util::IP::Windows::WMI_IP_INFO_QUERY).
62
+ returns([nic_config])
63
+ Facter::Util::WMI.expects(:execquery).with(wmi_query).
64
+ returns([nic_nil_NetConnectionId])
65
+
66
+ described_class.interfaces.should == []
67
+ end
68
+
69
+ context "when the adapter configuration is enabled but the underlying adapter is not enabled" do
70
+ it "should not return an interface" do
71
+ Facter::Util::WMI.expects(:execquery).with(Facter::Util::IP::Windows::WMI_IP_INFO_QUERY).
72
+ returns([nic_config])
73
+ Facter::Util::WMI.expects(:execquery).with(wmi_query).
74
+ returns([])
75
+
76
+ described_class.interfaces.should == []
77
+ end
78
+ end
79
+ end
80
+ end
@@ -0,0 +1,463 @@
1
+ #! /usr/bin/env ruby
2
+
3
+ require 'spec_helper'
4
+ require 'facter/util/ip'
5
+
6
+ describe Facter::Util::IP do
7
+ include FacterSpec::ConfigHelper
8
+
9
+ before :each do
10
+ given_a_configuration_of(:is_windows => false)
11
+ end
12
+
13
+ [:freebsd, :linux, :netbsd, :openbsd, :sunos, :darwin, :"hp-ux", :"gnu/kfreebsd", :windows].each do |platform|
14
+ it "should be supported on #{platform}" do
15
+ given_a_configuration_of(:is_windows => platform == :windows)
16
+ Facter::Util::IP.supported_platforms.should be_include(platform)
17
+ end
18
+ end
19
+
20
+ it "should return a list of interfaces" do
21
+ Facter::Util::IP.should respond_to(:get_interfaces)
22
+ end
23
+
24
+ it "should return an empty list of interfaces on an unknown kernel" do
25
+ Facter.stubs(:value).returns("UnknownKernel")
26
+ Facter::Util::IP.get_interfaces().should == []
27
+ end
28
+
29
+ it "should return a list with a single interface and the loopback interface on Linux with a single interface" do
30
+ linux_ifconfig = my_fixture_read("linux_ifconfig_all_with_single_interface")
31
+ Facter::Util::IP.stubs(:get_all_interface_output).returns(linux_ifconfig)
32
+ Facter::Util::IP.get_interfaces().should == ["eth0", "lo"]
33
+ end
34
+
35
+ it "should return a list two interfaces on Darwin with two interfaces" do
36
+ darwin_ifconfig = my_fixture_read("darwin_ifconfig_all_with_multiple_interfaces")
37
+ Facter::Util::IP.stubs(:get_all_interface_output).returns(darwin_ifconfig)
38
+ Facter::Util::IP.get_interfaces().should == ["lo0", "en0"]
39
+ end
40
+
41
+ it "should return a list two interfaces on Solaris with two interfaces multiply reporting" do
42
+ solaris_ifconfig = my_fixture_read("solaris_ifconfig_all_with_multiple_interfaces")
43
+ Facter::Util::IP.stubs(:get_all_interface_output).returns(solaris_ifconfig)
44
+ Facter::Util::IP.get_interfaces().should == ["lo0", "e1000g0"]
45
+ end
46
+
47
+ it "should return a list of six interfaces on a GNU/kFreeBSD with six interfaces" do
48
+ kfreebsd_ifconfig = my_fixture_read("debian_kfreebsd_ifconfig")
49
+ Facter::Util::IP.stubs(:get_all_interface_output).returns(kfreebsd_ifconfig)
50
+ Facter::Util::IP.get_interfaces().should == ["em0", "em1", "bge0", "bge1", "lo0", "vlan0"]
51
+ end
52
+
53
+ it "should return a list of only connected interfaces on Windows" do
54
+ Facter.fact(:kernel).stubs(:value).returns("windows")
55
+
56
+ Facter::Util::IP::Windows.expects(:interfaces).returns(["Loopback Pseudo-Interface 1", "Local Area Connection", "Teredo Tunneling Pseudo-Interface"])
57
+ Facter::Util::IP.get_interfaces().should == ["Loopback Pseudo-Interface 1", "Local Area Connection", "Teredo Tunneling Pseudo-Interface"]
58
+ end
59
+
60
+ it "should return a value for a specific interface" do
61
+ Facter::Util::IP.should respond_to(:get_interface_value)
62
+ end
63
+
64
+ it "should not return interface information for unsupported platforms" do
65
+ Facter.stubs(:value).with(:kernel).returns("bleah")
66
+ Facter::Util::IP.get_interface_value("e1000g0", "netmask").should == []
67
+ end
68
+
69
+ it "should return ipaddress information for Solaris" do
70
+ solaris_ifconfig_interface = my_fixture_read("solaris_ifconfig_single_interface")
71
+
72
+ Facter::Util::IP.expects(:get_single_interface_output).with("e1000g0").returns(solaris_ifconfig_interface)
73
+ Facter.stubs(:value).with(:kernel).returns("SunOS")
74
+
75
+ Facter::Util::IP.get_interface_value("e1000g0", "ipaddress").should == "172.16.15.138"
76
+ end
77
+
78
+ it "should return netmask information for Solaris" do
79
+ solaris_ifconfig_interface = my_fixture_read("solaris_ifconfig_single_interface")
80
+
81
+ Facter::Util::IP.expects(:get_single_interface_output).with("e1000g0").returns(solaris_ifconfig_interface)
82
+ Facter.stubs(:value).with(:kernel).returns("SunOS")
83
+
84
+ Facter::Util::IP.get_interface_value("e1000g0", "netmask").should == "255.255.255.0"
85
+ end
86
+
87
+ it "should return calculated network information for Solaris" do
88
+ solaris_ifconfig_interface = my_fixture_read("solaris_ifconfig_single_interface")
89
+
90
+ Facter::Util::IP.stubs(:get_single_interface_output).with("e1000g0").returns(solaris_ifconfig_interface)
91
+ Facter.stubs(:value).with(:kernel).returns("SunOS")
92
+
93
+ Facter::Util::IP.get_network_value("e1000g0").should == "172.16.15.0"
94
+ end
95
+
96
+ it "should return macaddress with leading zeros stripped off for GNU/kFreeBSD" do
97
+ kfreebsd_ifconfig = my_fixture_read("debian_kfreebsd_ifconfig")
98
+
99
+ Facter::Util::IP.expects(:get_single_interface_output).with("em0").returns(kfreebsd_ifconfig)
100
+ Facter.stubs(:value).with(:kernel).returns("GNU/kFreeBSD")
101
+
102
+ Facter::Util::IP.get_interface_value("em0", "macaddress").should == "0:11:a:59:67:90"
103
+ end
104
+
105
+ it "should return interface information for FreeBSD supported via an alias" do
106
+ ifconfig_interface = my_fixture_read("6.0-STABLE_FreeBSD_ifconfig")
107
+
108
+ Facter::Util::IP.expects(:get_single_interface_output).with("fxp0").returns(ifconfig_interface)
109
+ Facter.stubs(:value).with(:kernel).returns("FreeBSD")
110
+
111
+ Facter::Util::IP.get_interface_value("fxp0", "macaddress").should == "00:0e:0c:68:67:7c"
112
+ end
113
+
114
+ it "should return macaddress information for OS X" do
115
+ ifconfig_interface = my_fixture_read("Mac_OS_X_10.5.5_ifconfig")
116
+
117
+ Facter::Util::IP.expects(:get_single_interface_output).with("en1").returns(ifconfig_interface)
118
+ Facter.stubs(:value).with(:kernel).returns("Darwin")
119
+
120
+ Facter::Util::IP.get_interface_value("en1", "macaddress").should == "00:1b:63:ae:02:66"
121
+ end
122
+
123
+ it "should return all interfaces correctly on OS X" do
124
+ ifconfig_interface = my_fixture_read("Mac_OS_X_10.5.5_ifconfig")
125
+
126
+ Facter::Util::IP.expects(:get_all_interface_output).returns(ifconfig_interface)
127
+ Facter.stubs(:value).with(:kernel).returns("Darwin")
128
+
129
+ Facter::Util::IP.get_interfaces().should == ["lo0", "gif0", "stf0", "en0", "fw0", "en1", "vmnet8", "vmnet1"]
130
+ end
131
+
132
+ it "should return a human readable netmask on Solaris" do
133
+ solaris_ifconfig_interface = my_fixture_read("solaris_ifconfig_single_interface")
134
+
135
+ Facter::Util::IP.expects(:get_single_interface_output).with("e1000g0").returns(solaris_ifconfig_interface)
136
+ Facter.stubs(:value).with(:kernel).returns("SunOS")
137
+
138
+ Facter::Util::IP.get_interface_value("e1000g0", "netmask").should == "255.255.255.0"
139
+ end
140
+
141
+ it "should return a human readable netmask on Darwin" do
142
+ darwin_ifconfig_interface = my_fixture_read("darwin_ifconfig_single_interface")
143
+
144
+ Facter::Util::IP.expects(:get_single_interface_output).with("en1").returns(darwin_ifconfig_interface)
145
+ Facter.stubs(:value).with(:kernel).returns("Darwin")
146
+
147
+ Facter::Util::IP.get_interface_value("en1", "netmask").should == "255.255.255.0"
148
+ end
149
+
150
+ it "should return a human readable netmask on GNU/kFreeBSD" do
151
+ kfreebsd_ifconfig = my_fixture_read("debian_kfreebsd_ifconfig")
152
+
153
+ Facter::Util::IP.expects(:get_single_interface_output).with("em1").returns(kfreebsd_ifconfig)
154
+ Facter.stubs(:value).with(:kernel).returns("GNU/kFreeBSD")
155
+
156
+ Facter::Util::IP.get_interface_value("em1", "netmask").should == "255.255.255.0"
157
+ end
158
+
159
+ it "should return correct macaddress information for infiniband on Linux" do
160
+ correct_ifconfig_interface = my_fixture_read("linux_get_single_interface_ib0")
161
+
162
+ Facter::Util::IP.expects(:get_single_interface_output).with("ib0").returns(correct_ifconfig_interface)
163
+ Facter.stubs(:value).with(:kernel).returns("Linux")
164
+
165
+ Facter::Util::IP.get_interface_value("ib0", "macaddress").should == "80:00:00:4a:fe:80:00:00:00:00:00:00:00:02:c9:03:00:43:27:21"
166
+ end
167
+
168
+ it "should replace the incorrect macaddress with the correct macaddress in ifconfig for infiniband on Linux" do
169
+ ifconfig_interface = my_fixture_read("linux_ifconfig_ib0")
170
+ correct_ifconfig_interface = my_fixture_read("linux_get_single_interface_ib0")
171
+
172
+ Facter::Util::IP.expects(:get_infiniband_macaddress).with("ib0").returns("80:00:00:4a:fe:80:00:00:00:00:00:00:00:02:c9:03:00:43:27:21")
173
+ Facter::Util::IP.expects(:ifconfig_interface).with("ib0").returns(ifconfig_interface)
174
+ Facter.stubs(:value).with(:kernel).returns("Linux")
175
+
176
+ Facter::Util::IP.get_single_interface_output("ib0").should == correct_ifconfig_interface
177
+ end
178
+
179
+ it "should return fake macaddress information for infiniband on Linux when neither sysfs or /sbin/ip are available" do
180
+ ifconfig_interface = my_fixture_read("linux_ifconfig_ib0")
181
+
182
+ File.expects(:exists?).with("/sys/class/net/ib0/address").returns(false)
183
+ File.expects(:exists?).with("/sbin/ip").returns(false)
184
+ Facter::Util::IP.expects(:ifconfig_interface).with("ib0").returns(ifconfig_interface)
185
+ Facter.stubs(:value).with(:kernel).returns("Linux")
186
+
187
+ Facter::Util::IP.get_interface_value("ib0", "macaddress").should == "FF:FF:FF:FF:FF:FF:FF:FF:FF:FF:FF:FF:FF:FF:FF:FF:FF:FF:FF:FF"
188
+ end
189
+
190
+ it "should not get bonding master on interface aliases" do
191
+ Facter.stubs(:value).with(:kernel).returns("Linux")
192
+
193
+ Facter::Util::IP.get_bonding_master("eth0:1").should be_nil
194
+ end
195
+
196
+ [:freebsd, :netbsd, :openbsd, :sunos, :darwin, :"hp-ux"].each do |platform|
197
+ it "should require conversion from hex on #{platform}" do
198
+ Facter::Util::IP.convert_from_hex?(platform).should == true
199
+ end
200
+ end
201
+
202
+ [:windows].each do |platform|
203
+ it "should not require conversion from hex on #{platform}" do
204
+ Facter::Util::IP.convert_from_hex?(platform).should be_false
205
+ end
206
+ end
207
+
208
+ it "should return an arp address on Linux" do
209
+ Facter.stubs(:value).with(:kernel).returns("Linux")
210
+
211
+ Facter::Util::IP.expects(:get_arp_value).with("eth0").returns("00:00:0c:9f:f0:04")
212
+ Facter::Util::IP.get_arp_value("eth0").should == "00:00:0c:9f:f0:04"
213
+ end
214
+
215
+ it "should return mtu information on Linux" do
216
+ linux_ifconfig = my_fixture_read("linux_ifconfig_all_with_single_interface")
217
+ Facter::Util::IP.stubs(:get_all_interface_output).returns(linux_ifconfig)
218
+ Facter::Util::IP.stubs(:get_single_interface_output).with("eth0").
219
+ returns(my_fixture_read("linux_get_single_interface_eth0"))
220
+ Facter::Util::IP.stubs(:get_single_interface_output).with("lo").
221
+ returns(my_fixture_read("linux_get_single_interface_lo"))
222
+ Facter.stubs(:value).with(:kernel).returns("Linux")
223
+
224
+ Facter::Util::IP.get_interface_value("eth0", "mtu").should == "1500"
225
+ Facter::Util::IP.get_interface_value("lo", "mtu").should == "16436"
226
+ end
227
+
228
+ it "should return mtu information on Darwin" do
229
+ darwin_ifconfig_interface = my_fixture_read("darwin_ifconfig_single_interface")
230
+
231
+ Facter::Util::IP.expects(:get_single_interface_output).with("en1").returns(darwin_ifconfig_interface)
232
+ Facter.stubs(:value).with(:kernel).returns("Darwin")
233
+
234
+ Facter::Util::IP.get_interface_value("en1", "mtu").should == "1500"
235
+ end
236
+
237
+ it "should return mtu information for Solaris" do
238
+ solaris_ifconfig_interface = my_fixture_read("solaris_ifconfig_single_interface")
239
+
240
+ Facter::Util::IP.expects(:get_single_interface_output).with("e1000g0").returns(solaris_ifconfig_interface)
241
+ Facter.stubs(:value).with(:kernel).returns("SunOS")
242
+
243
+ Facter::Util::IP.get_interface_value("e1000g0", "mtu").should == "1500"
244
+ end
245
+
246
+ # (#17487) - tests for HP-UX.
247
+ # some fake data for testing robustness of regexps.
248
+ def self.fake_netstat_in_examples
249
+ examples = []
250
+ examples << ["Header row\na line with none in it\na line without\nanother line without\n",
251
+ "a line without\nanother line without\n"]
252
+ examples << ["Header row\na line without\na line with none in it\nanother line with none\nanother line without\n",
253
+ "a line without\nanother line without\n"]
254
+ examples << ["Header row\na line with * asterisks *\na line with none in it\nanother line without\n",
255
+ "a line with asterisks \nanother line without\n"]
256
+ examples << ["a line with none none none in it\na line with none in it\na line without\nanother line without\n",
257
+ "another line without\n"]
258
+ examples
259
+ end
260
+
261
+ fake_netstat_in_examples.each_with_index do |example, i|
262
+ input, expected_output = example
263
+ it "should pass regexp test on fake netstat input example #{i}" do
264
+ Facter.stubs(:value).with(:kernel).returns("HP-UX")
265
+ Facter::Util::IP.stubs(:hpux_netstat_in).returns(input)
266
+ Facter::Util::IP.get_all_interface_output().should == expected_output
267
+ end
268
+ end
269
+
270
+ # and some real data for exhaustive tests.
271
+ def self.hpux_examples
272
+ examples = []
273
+ examples << ["HP-UX 11.11",
274
+ ["lan1", "lan0", "lo0" ],
275
+ ["1500", "1500", "4136" ],
276
+ ["10.1.1.6", "192.168.3.10", "127.0.0.1"],
277
+ ["255.255.255.0", "255.255.255.0", "255.0.0.0"],
278
+ ["00:10:79:7B:5C:DE", "00:30:7F:0C:79:DC", nil ],
279
+ [my_fixture_read("hpux_1111_ifconfig_lan1"),
280
+ my_fixture_read("hpux_1111_ifconfig_lan0"),
281
+ my_fixture_read("hpux_1111_ifconfig_lo0")],
282
+ my_fixture_read("hpux_1111_netstat_in"),
283
+ my_fixture_read("hpux_1111_lanscan")]
284
+
285
+ examples << ["HP-UX 11.31",
286
+ ["lan1", "lan0", "lo0" ],
287
+ ["1500", "1500", "4136" ],
288
+ ["10.1.54.36", "192.168.30.152", "127.0.0.1"],
289
+ ["255.255.255.0", "255.255.255.0", "255.0.0.0"],
290
+ ["00:17:FD:2D:2A:57", "00:12:31:7D:62:09", nil ],
291
+ [my_fixture_read("hpux_1131_ifconfig_lan1"),
292
+ my_fixture_read("hpux_1131_ifconfig_lan0"),
293
+ my_fixture_read("hpux_1131_ifconfig_lo0")],
294
+ my_fixture_read("hpux_1131_netstat_in"),
295
+ my_fixture_read("hpux_1131_lanscan")]
296
+
297
+ examples << ["HP-UX 11.31 with an asterisk after a NIC that has an address",
298
+ ["lan1", "lan0", "lo0" ],
299
+ ["1500", "1500", "4136" ],
300
+ ["10.10.0.5", "192.168.3.9", "127.0.0.1"],
301
+ ["255.255.255.0", "255.255.255.0", "255.0.0.0"],
302
+ ["00:10:79:7B:BE:46", "00:30:5D:06:26:B2", nil ],
303
+ [my_fixture_read("hpux_1131_asterisk_ifconfig_lan1"),
304
+ my_fixture_read("hpux_1131_asterisk_ifconfig_lan0"),
305
+ my_fixture_read("hpux_1131_asterisk_ifconfig_lo0")],
306
+ my_fixture_read("hpux_1131_asterisk_netstat_in"),
307
+ my_fixture_read("hpux_1131_asterisk_lanscan")]
308
+
309
+ examples << ["HP-UX 11.31 with NIC bonding and one virtual NIC",
310
+ ["lan4:1", "lan1", "lo0", "lan4" ],
311
+ ["1500", "1500", "4136", "1500" ],
312
+ ["192.168.1.197", "192.168.30.32", "127.0.0.1", "192.168.32.75" ],
313
+ ["255.255.255.0", "255.255.255.0", "255.0.0.0", "255.255.255.0" ],
314
+ [nil, "00:12:81:9E:48:DE", nil, "00:12:81:9E:4A:7E"],
315
+ [my_fixture_read("hpux_1131_nic_bonding_ifconfig_lan4_1"),
316
+ my_fixture_read("hpux_1131_nic_bonding_ifconfig_lan1"),
317
+ my_fixture_read("hpux_1131_nic_bonding_ifconfig_lo0"),
318
+ my_fixture_read("hpux_1131_nic_bonding_ifconfig_lan4")],
319
+ my_fixture_read("hpux_1131_nic_bonding_netstat_in"),
320
+ my_fixture_read("hpux_1131_nic_bonding_lanscan")]
321
+ examples
322
+ end
323
+
324
+ hpux_examples.each do |example|
325
+ description, array_of_expected_ifs, array_of_expected_mtus,
326
+ array_of_expected_ips, array_of_expected_netmasks,
327
+ array_of_expected_macs, array_of_ifconfig_fixtures,
328
+ netstat_in_fixture, lanscan_fixture = example
329
+
330
+ it "should return a list three interfaces on #{description}" do
331
+ Facter.stubs(:value).with(:kernel).returns("HP-UX")
332
+ Facter::Util::IP.stubs(:hpux_netstat_in).returns(netstat_in_fixture)
333
+ Facter::Util::IP.get_interfaces().should == array_of_expected_ifs
334
+ end
335
+
336
+ array_of_expected_ifs.each_with_index do |nic, i|
337
+ ifconfig_fixture = array_of_ifconfig_fixtures[i]
338
+ expected_mtu = array_of_expected_mtus[i]
339
+ expected_ip = array_of_expected_ips[i]
340
+ expected_netmask = array_of_expected_netmasks[i]
341
+ expected_mac = array_of_expected_macs[i]
342
+
343
+ # (#17808) These tests fail because MTU facts haven't been implemented for HP-UX.
344
+ #it "should return MTU #{expected_mtu} on #{nic} for #{description} example" do
345
+ # Facter.stubs(:value).with(:kernel).returns("HP-UX")
346
+ # Facter::Util::IP.stubs(:hpux_netstat_in).returns(netstat_in_fixture)
347
+ # Facter::Util::IP.stubs(:hpux_lanscan).returns(lanscan_fixture)
348
+ # Facter::Util::IP.stubs(:hpux_ifconfig_interface).with(nic).returns(ifconfig_fixture)
349
+ # Facter::Util::IP.get_interface_value(nic, "mtu").should == expected_mtu
350
+ #end
351
+
352
+ it "should return IP #{expected_ip} on #{nic} for #{description} example" do
353
+ Facter.stubs(:value).with(:kernel).returns("HP-UX")
354
+ Facter::Util::IP.stubs(:hpux_lanscan).returns(lanscan_fixture)
355
+ Facter::Util::IP.stubs(:hpux_ifconfig_interface).with(nic).returns(ifconfig_fixture)
356
+ Facter::Util::IP.get_interface_value(nic, "ipaddress").should == expected_ip
357
+ end
358
+
359
+ it "should return netmask #{expected_netmask} on #{nic} for #{description} example" do
360
+ Facter.stubs(:value).with(:kernel).returns("HP-UX")
361
+ Facter::Util::IP.stubs(:hpux_lanscan).returns(lanscan_fixture)
362
+ Facter::Util::IP.stubs(:hpux_ifconfig_interface).with(nic).returns(ifconfig_fixture)
363
+ Facter::Util::IP.get_interface_value(nic, "netmask").should == expected_netmask
364
+ end
365
+
366
+ it "should return MAC address #{expected_mac} on #{nic} for #{description} example" do
367
+ Facter.stubs(:value).with(:kernel).returns("HP-UX")
368
+ Facter::Util::IP.stubs(:hpux_lanscan).returns(lanscan_fixture)
369
+ Facter::Util::IP.stubs(:hpux_ifconfig_interface).with(nic).returns(ifconfig_fixture)
370
+ Facter::Util::IP.get_interface_value(nic, "macaddress").should == expected_mac
371
+ end
372
+ end
373
+ end
374
+
375
+ describe "on Windows" do
376
+ require 'facter/util/ip/windows'
377
+
378
+ before :each do
379
+ Facter.stubs(:value).with(:kernel).returns("windows")
380
+ end
381
+
382
+ it "should return ipaddress information" do
383
+ Facter::Util::IP::Windows.expects(:value_for_interface_and_label).with("Local Area Connection", "ipaddress").returns('172.16.138.216')
384
+
385
+ Facter::Util::IP.get_interface_value("Local Area Connection", "ipaddress").should == "172.16.138.216"
386
+ end
387
+
388
+ it "should return network information" do
389
+ Facter::Util::IP::Windows.expects(:value_for_interface_and_label).with("Local Area Connection", "ipaddress").returns('172.16.138.216')
390
+ Facter::Util::IP::Windows.expects(:value_for_interface_and_label).with("Local Area Connection", "netmask").returns('255.255.255.0')
391
+
392
+ Facter::Util::IP.get_network_value("Local Area Connection").should == "172.16.138.0"
393
+ end
394
+
395
+ it "should return ipaddress6 information" do
396
+ Facter::Util::IP::Windows.expects(:value_for_interface_and_label).with("Local Area Connection", "ipaddress6").returns("2001:0:4137:9e76:2087:77a:53ef:7527")
397
+
398
+ Facter::Util::IP.get_interface_value("Local Area Connection", "ipaddress6").should == "2001:0:4137:9e76:2087:77a:53ef:7527"
399
+ end
400
+ end
401
+
402
+ describe "exec_ifconfig" do
403
+ it "uses get_ifconfig" do
404
+ Facter::Util::IP.stubs(:get_ifconfig).returns("/sbin/ifconfig").once
405
+
406
+ Facter::Util::IP.exec_ifconfig
407
+ end
408
+ it "support additional arguments" do
409
+ Facter::Util::IP.stubs(:get_ifconfig).returns("/sbin/ifconfig")
410
+
411
+ Facter::Core::Execution.stubs(:exec).with("/sbin/ifconfig -a")
412
+
413
+ Facter::Util::IP.exec_ifconfig(["-a"])
414
+ end
415
+ it "joins multiple arguments correctly" do
416
+ Facter::Util::IP.stubs(:get_ifconfig).returns("/sbin/ifconfig")
417
+
418
+ Facter::Core::Execution.stubs(:exec).with("/sbin/ifconfig -a -e -i -j")
419
+
420
+ Facter::Util::IP.exec_ifconfig(["-a","-e","-i","-j"])
421
+ end
422
+ end
423
+ describe "get_ifconfig" do
424
+ it "assigns /sbin/ifconfig if it is executable" do
425
+ File.stubs(:executable?).returns(false)
426
+ File.stubs(:executable?).with("/sbin/ifconfig").returns(true)
427
+ Facter::Util::IP.get_ifconfig.should eq("/sbin/ifconfig")
428
+ end
429
+ it "assigns /usr/sbin/ifconfig if it is executable" do
430
+ File.stubs(:executable?).returns(false)
431
+ File.stubs(:executable?).with("/usr/sbin/ifconfig").returns(true)
432
+ Facter::Util::IP.get_ifconfig.should eq("/usr/sbin/ifconfig")
433
+ end
434
+ it "assigns /bin/ifconfig if it is executable" do
435
+ File.stubs(:executable?).returns(false)
436
+ File.stubs(:executable?).with("/bin/ifconfig").returns(true)
437
+ Facter::Util::IP.get_ifconfig.should eq("/bin/ifconfig")
438
+ end
439
+ end
440
+
441
+ context "with bonded ethernet interfaces on Linux" do
442
+ before :each do
443
+ Facter.fact(:kernel).stubs(:value).returns("Linux")
444
+ end
445
+
446
+ describe "Facter::Util::Ip.get_interface_value" do
447
+ before :each do
448
+ Facter::Util::IP.stubs(:read_proc_net_bonding).
449
+ with("/proc/net/bonding/bond0").
450
+ returns(my_fixture_read("linux_2_6_35_proc_net_bonding_bond0"))
451
+
452
+ Facter::Util::IP.stubs(:get_bonding_master).returns("bond0")
453
+ end
454
+
455
+ it 'provides the real device macaddress for eth0' do
456
+ Facter::Util::IP.get_interface_value("eth0", "macaddress").should == "00:11:22:33:44:55"
457
+ end
458
+ it 'provides the real device macaddress for eth1' do
459
+ Facter::Util::IP.get_interface_value("eth1", "macaddress").should == "00:11:22:33:44:56"
460
+ end
461
+ end
462
+ end
463
+ end