diff options
author | Jacob Helwig <jacob@puppetlabs.com> | 2011-03-17 16:08:41 -0700 |
---|---|---|
committer | Jacob Helwig <jacob@puppetlabs.com> | 2011-03-17 16:08:41 -0700 |
commit | 9d4f793f12961409f7fcca9e475454284bf5945c (patch) | |
tree | d9ac9b6ca936a0cd5cb121ae992e96a2652e7e03 | |
parent | 43f82efd24564862952a715cba4424d6f0c92e48 (diff) | |
parent | 330d3992744b80187223e5b6af2a58219e4610f6 (diff) | |
download | facter-9d4f793f12961409f7fcca9e475454284bf5945c.tar.gz facter-9d4f793f12961409f7fcca9e475454284bf5945c.tar.xz facter-9d4f793f12961409f7fcca9e475454284bf5945c.zip |
Merge branch 'next'
* next:
Clean up indentation, and alignment in macaddress_spec.rb
(#6716) fix facter issues on OSX with ipv6 in macaddress.rb.
Fixed #2346 - A much cleverer EC2 fact
Fixed #2346 - Part 1: Added arp fact for Linux
Discussion on ec2 facts - #2346
Fixed #3087 - Identify VMWare
(#6327) Memory facts should be available on Mac Darwin
Fixed #6695 - Updated id fact for Darwin et al
-rw-r--r-- | lib/facter/arp.rb | 22 | ||||
-rw-r--r-- | lib/facter/ec2.rb | 77 | ||||
-rw-r--r-- | lib/facter/id.rb | 11 | ||||
-rw-r--r-- | lib/facter/memory.rb | 37 | ||||
-rw-r--r-- | lib/facter/operatingsystem.rb | 9 | ||||
-rw-r--r-- | lib/facter/operatingsystemrelease.rb | 12 | ||||
-rw-r--r-- | lib/facter/util/ip.rb | 7 | ||||
-rw-r--r-- | lib/facter/util/macaddress.rb | 2 | ||||
-rw-r--r-- | lib/facter/util/memory.rb | 31 | ||||
-rw-r--r-- | spec/fixtures/ifconfig/darwin_10_6_6_dualstack | 8 | ||||
-rw-r--r-- | spec/fixtures/ifconfig/darwin_10_6_6_dualstack_en1 | 7 | ||||
-rw-r--r-- | spec/fixtures/netstat/darwin_10_6_6_dualstack | 34 | ||||
-rwxr-xr-x | spec/unit/id_spec.rb | 27 | ||||
-rwxr-xr-x | spec/unit/operatingsystem_spec.rb | 16 | ||||
-rwxr-xr-x | spec/unit/operatingsystemrelease_spec.rb | 26 | ||||
-rwxr-xr-x | spec/unit/util/ip_spec.rb | 7 | ||||
-rwxr-xr-x | spec/unit/util/macaddress_spec.rb | 109 |
17 files changed, 350 insertions, 92 deletions
diff --git a/lib/facter/arp.rb b/lib/facter/arp.rb new file mode 100644 index 0000000..f4b7709 --- /dev/null +++ b/lib/facter/arp.rb @@ -0,0 +1,22 @@ +require 'facter/util/ip' + +Facter.add(:arp) do + confine :kernel => :linux + setcode do + arp = [] + output = %x{/usr/sbin/arp -a} + output.each_line do |s| + arp.push($1) if s =~ /^\S+\s\S+\s\S+\s(\S+)\s\S+\s\S+\s\S+$/ + end + arp[0] + end +end + +Facter::Util::IP.get_interfaces.each do |interface| + Facter.add("arp_" + Facter::Util::IP.alphafy(interface)) do + confine :kernel => :linux + setcode do + Facter::Util::IP.get_arp_value(interface) + end + end +end diff --git a/lib/facter/ec2.rb b/lib/facter/ec2.rb index ef84757..29b2a1c 100644 --- a/lib/facter/ec2.rb +++ b/lib/facter/ec2.rb @@ -1,24 +1,46 @@ -# Changelog: -# Original facts - Tim Dysinger -# Updated and added can_connect? function - KurtBe +# Original fact Tim Dysinger +# Additional work from KurtBe +# Additional work for Paul Nasrat +# Additional work modelled on Ohai EC2 fact require 'open-uri' -require 'timeout' +require 'socket' -def can_connect?(ip,port,wait_sec=2) - Timeout::timeout(wait_sec) {open(ip, port)} - return true -rescue - return false -end +EC2_ADDR = "169.254.169.254" +EC2_METADATA_URL = "http://#{EC2_ADDR}/2008-02-01/meta-data" +EC2_USERDATA_URL = "http://#{EC2_ADDR}/2008-02-01/user-data" + +def can_metadata_connect?(addr, port, timeout=2) + t = Socket.new(Socket::Constants::AF_INET, Socket::Constants::SOCK_STREAM, 0) + saddr = Socket.pack_sockaddr_in(port, addr) + connected = false + begin + t.connect_nonblock(saddr) + rescue Errno::EINPROGRESS + r,w,e = IO::select(nil,[t],nil,timeout) + if !w.nil? + connected = true + else + begin + t.connect_nonblock(saddr) + rescue Errno::EISCONN + t.close + connected = true + rescue SystemCallError + end + end + rescue SystemCallError + end + connected +end def metadata(id = "") - open("http://169.254.169.254/2008-02-01/meta-data/#{id||=''}").read. + open("#{EC2_METADATA_URL}/#{id||=''}").read. split("\n").each do |o| key = "#{id}#{o.gsub(/\=.*$/, '/')}" if key[-1..-1] != '/' - value = open("http://169.254.169.254/2008-02-01/meta-data/#{key}").read. + value = open("#{EC2_METADATA_URL}/#{key}").read. split("\n") value = value.size>1 ? value : value.first symbol = "ec2_#{key.gsub(/\-|\//, '_')}".to_sym @@ -29,7 +51,34 @@ def metadata(id = "") end end -if can_connect?("169.254.169.254","80") - metadata +def userdata() + # assumes the only expected error is the 404 if there's no user-data + begin + value = OpenURI.open_uri("#{EC2_USERDATA_URL}/").read.split + Facter.add(:ec2_userdata) { setcode { value } } + rescue OpenURI::HTTPError + end end +def has_euca_mac? + if Facter.value(:macaddress) =~ /^[dD]0:0[dD]:/ + return true + else + return false + end +end + +def has_ec2_arp? + if Facter.value(:arp) == 'fe:ff:ff:ff:ff:ff' + return true + else + return false + end +end + +if (has_euca_mac? || has_ec2_arp?) && can_metadata_connect?(EC2_ADDR,80) + metadata + userdata +else + Facter.debug "Not an EC2 host" +end diff --git a/lib/facter/id.rb b/lib/facter/id.rb index c2c3594..1c42284 100644 --- a/lib/facter/id.rb +++ b/lib/facter/id.rb @@ -1,15 +1,8 @@ Facter.add(:id) do - confine :operatingsystem => %w{Linux Fedora RedHat CentOS SuSE SLES Debian Ubuntu Gentoo AIX OEL OVS GNU/kFreeBSD windows} setcode "whoami" end Facter.add(:id) do - confine :operatingsystem => %w{Solaris} - setcode do - if %x{id} =~ /^uid=\d+\((\S+)\)/ - $1 - else - nil - end - end + confine :kernel => :SunOS + setcode "/usr/xpg4/bin/id -un" end diff --git a/lib/facter/memory.rb b/lib/facter/memory.rb index aa67702..9dd2e29 100644 --- a/lib/facter/memory.rb +++ b/lib/facter/memory.rb @@ -110,6 +110,43 @@ if Facter.value(:kernel) == "OpenBSD" end end +if Facter.value(:kernel) == "Darwin" + swap = Facter::Util::Resolution.exec('sysctl vm.swapusage') + swapfree, swaptotal = 0, 0 + unless swap.empty? + # Parse the line: + # vm.swapusage: total = 128.00M used = 0.37M free = 127.63M (encrypted) + if swap =~ /total\s=\s(\S+)\s+used\s=\s(\S+)\s+free\s=\s(\S+)\s/ + swaptotal += $1.to_i + swapfree += $3.to_i + end + end + + Facter.add("SwapSize") do + confine :kernel => :Darwin + setcode do + Facter::Memory.scale_number(swaptotal.to_f,"MB") + end + end + + Facter.add("SwapFree") do + confine :kernel => :Darwin + setcode do + Facter::Memory.scale_number(swapfree.to_f,"MB") + end + end + + Facter::Memory.vmstat_darwin_find_free_memory() + + Facter.add("MemoryTotal") do + confine :kernel => :Darwin + memtotal = Facter::Util::Resolution.exec("sysctl hw.memsize | cut -d':' -f2") + setcode do + Facter::Memory.scale_number(memtotal.to_f,"") + end + end +end + if Facter.value(:kernel) == "SunOS" swap = Facter::Util::Resolution.exec('/usr/sbin/swap -l') swapfree, swaptotal = 0, 0 diff --git a/lib/facter/operatingsystem.rb b/lib/facter/operatingsystem.rb index 1675909..25eeb00 100644 --- a/lib/facter/operatingsystem.rb +++ b/lib/facter/operatingsystem.rb @@ -32,6 +32,8 @@ Facter.add(:operatingsystem) do end elsif FileTest.exists?("/etc/arch-release") "Arch" + elsif FileTest.exists?("/etc/vmware-release") + "VMWareESX" elsif FileTest.exists?("/etc/redhat-release") txt = File.read("/etc/redhat-release") if txt =~ /centos/i @@ -63,6 +65,13 @@ Facter.add(:operatingsystem) do end Facter.add(:operatingsystem) do + confine :kernel => "VMkernel" + setcode do + "ESXi" + end +end + +Facter.add(:operatingsystem) do # Default to just returning the kernel as the operating system setcode do Facter[:kernel].value end end diff --git a/lib/facter/operatingsystemrelease.rb b/lib/facter/operatingsystemrelease.rb index ac9be65..da1b76a 100644 --- a/lib/facter/operatingsystemrelease.rb +++ b/lib/facter/operatingsystemrelease.rb @@ -84,6 +84,16 @@ Facter.add(:operatingsystemrelease) do end Facter.add(:operatingsystemrelease) do + confine :operatingsystem => %w{VMwareESX} + setcode do + release = Facter::Util::Resolution.exec('vmware -v') + if release =~ /VMware ESX .*?(\d.*)/ + $1 + end + end +end + +Facter.add(:operatingsystemrelease) do confine :operatingsystem => %w{Slamd64} setcode do releasefile = Facter::Util::Resolution.exec('cat /etc/slamd64-version') @@ -96,5 +106,5 @@ Facter.add(:operatingsystemrelease) do end Facter.add(:operatingsystemrelease) do - setcode do Facter[:kernelrelease].value end + setcode do Facter[:kernelrelease].value end end diff --git a/lib/facter/util/ip.rb b/lib/facter/util/ip.rb index e4370dc..8b6dbf4 100644 --- a/lib/facter/util/ip.rb +++ b/lib/facter/util/ip.rb @@ -169,4 +169,11 @@ module Facter::Util::IP network = ip.mask(subnet.to_s).to_s end end + + def self.get_arp_value(interface) + arp = Facter::Util::Resolution.exec("arp -en -i #{interface} | sed -e 1d") + if arp =~ /^\S+\s+\w+\s+(\S+)\s+\w\s+\S+$/ + return $1 + end + end end diff --git a/lib/facter/util/macaddress.rb b/lib/facter/util/macaddress.rb index fc0a043..f6bae14 100644 --- a/lib/facter/util/macaddress.rb +++ b/lib/facter/util/macaddress.rb @@ -12,7 +12,7 @@ module Facter::Util::Macaddress end def self.default_interface - `#{netstat_command} | /usr/bin/awk '/^default/{print $6}'`.chomp + `#{netstat_command} | /usr/bin/awk '/^default/{print $6;exit}'`.chomp end private diff --git a/lib/facter/util/memory.rb b/lib/facter/util/memory.rb index 43abec6..029b117 100644 --- a/lib/facter/util/memory.rb +++ b/lib/facter/util/memory.rb @@ -62,5 +62,36 @@ module Facter::Memory end end end + + # Darwin had to be different. It's generally opaque with how much RAM it is + # using, and this figure could be improved upon too I fear. + # Parses the output of "vm_stat", takes the pages free & pages speculative + # and multiples that by the page size (also given in output). Ties in with + # what activity monitor outputs for free memory. + def self.vmstat_darwin_find_free_memory() + + memfree = 0 + pagesize = 0 + memspecfree = 0 + + vmstats = Facter::Util::Resolution.exec('vm_stat') + vmstats.each do |vmline| + case + when vmline =~ /page\ssize\sof\s(\d+)\sbytes/ + pagesize = $1.to_i + when vmline =~ /^Pages\sfree:\s+(\d+)\./ + memfree = $1.to_i + when vmline =~ /^Pages\sspeculative:\s+(\d+)\./ + memspecfree = $1.to_i + end + end + + freemem = ( memfree + memspecfree ) * pagesize + Facter.add("MemoryFree") do + setcode do + Facter::Memory.scale_number(freemem.to_f, "") + end + end + end end diff --git a/spec/fixtures/ifconfig/darwin_10_6_6_dualstack b/spec/fixtures/ifconfig/darwin_10_6_6_dualstack new file mode 100644 index 0000000..819f56e --- /dev/null +++ b/spec/fixtures/ifconfig/darwin_10_6_6_dualstack @@ -0,0 +1,8 @@ +lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> mtu 16384 + inet 127.0.0.1 netmask 0xff000000 + inet6 ::1 prefixlen 128 + inet6 fe80::1%lo0 prefixlen 64 scopeid 0x1 +en0: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 1500 + ether 00:25:4b:ca:56:72 + media: autoselect + status: inactive diff --git a/spec/fixtures/ifconfig/darwin_10_6_6_dualstack_en1 b/spec/fixtures/ifconfig/darwin_10_6_6_dualstack_en1 new file mode 100644 index 0000000..eabb1f6 --- /dev/null +++ b/spec/fixtures/ifconfig/darwin_10_6_6_dualstack_en1 @@ -0,0 +1,7 @@ +en1: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 1500 + ether 00:25:00:48:19:ef + inet6 fe80::225:ff:fe48:19ef%en1 prefixlen 64 scopeid 0x5 + inet 192.168.1.207 netmask 0xffffff00 broadcast 192.168.1.255 + inet6 2000:44b4:32:400::1 prefixlen 64 + media: autoselect + status: active diff --git a/spec/fixtures/netstat/darwin_10_6_6_dualstack b/spec/fixtures/netstat/darwin_10_6_6_dualstack new file mode 100644 index 0000000..14d937d --- /dev/null +++ b/spec/fixtures/netstat/darwin_10_6_6_dualstack @@ -0,0 +1,34 @@ +Routing tables + +Internet: +Destination Gateway Flags Refs Use Netif Expire +default 192.168.1.254 UGSc 38 0 en1 +127 127.0.0.1 UCS 0 0 lo0 +127.0.0.1 127.0.0.1 UH 14 1044474 lo0 +169.254 link#5 UCS 0 0 en1 +192.168.1 link#5 UCS 2 0 en1 +192.168.1.207 127.0.0.1 UHS 0 1 lo0 +192.168.1.220 e0:f8:47:98:85:71 UHLWI 0 0 en1 135 +192.168.1.254 0:4:ed:66:13:cc UHLWI 42 134 en1 1158 + +Internet6: +Destination Gateway Flags Netif Expire +default 2000:44b4:61::16e UGSc tun0 +::1 ::1 UH lo0 +2000:44b4:61::16e 2000:44b4:61::16f UH tun0 +2000:44b4:61::16f link#9 UHL lo0 +2000:44b4:62:480::/64 link#5 UC en1 +2000:44b4:62:480::/60 ::1 UGSc lo0 +2000:44b4:62:480::1 0:25:0:48:19:ef UHL lo0 +fe80::%lo0/64 fe80::1%lo0 Uc lo0 +fe80::1%lo0 link#1 UHL lo0 +fe80::%en1/64 link#5 UC en1 +fe80::225:ff:fe48:19ef%en1 0:25:0:48:19:ef UHL lo0 +fe80::a00:27ff:fe02:bcb5%en1 8:0:27:2:bc:b5 UHLW en1 +fe80::a932:c76f:9c2e:ead8%en1 0:1e:2a:b3:9b:66 UHLW en1 +fe80::e2f8:47ff:fe98:8571%en1 e0:f8:47:98:85:71 UHLW en1 +fe80::225:4bff:feca:5672%tun0 link#9 UHL lo0 +ff01::/32 ::1 Um lo0 +ff02::/32 ::1 UmC lo0 +ff02::/32 link#5 UmC en1 +ff02::/32 fe80::225:4bff:feca:5672%tun0 UmC tun0 diff --git a/spec/unit/id_spec.rb b/spec/unit/id_spec.rb new file mode 100755 index 0000000..a9e1797 --- /dev/null +++ b/spec/unit/id_spec.rb @@ -0,0 +1,27 @@ +#!/usr/bin/env ruby + +require File.expand_path(File.dirname(__FILE__) + '/../spec_helper') + +describe "id fact" do + + kernel = [ 'Linux', 'Darwin', 'windows', 'FreeBSD', 'OpenBSD', 'NetBSD', 'AIX', 'HP-UX' ] + + kernel.each do |k| + describe "with kernel reported as #{k}" do + it "should return the current user" do + Facter::Util::Resolution.stubs(:exec).with('uname -s').returns(k) + Facter::Util::Resolution.stubs(:exec).with('lsb_release -a 2>/dev/null').returns('foo') + Facter::Util::Resolution.expects(:exec).once.with('whoami', '/bin/sh').returns 'bar' + + Facter.fact(:id).value.should == 'bar' + end + end + end + + it "should return the current user on Solaris" do + Facter::Util::Resolution.stubs(:exec).with('uname -s').returns('SunOS') + Facter::Util::Resolution.expects(:exec).once.with('/usr/xpg4/bin/id -un', '/bin/sh').returns 'bar' + + Facter.fact(:id).value.should == 'bar' + end +end diff --git a/spec/unit/operatingsystem_spec.rb b/spec/unit/operatingsystem_spec.rb index 73b3649..91cd311 100755 --- a/spec/unit/operatingsystem_spec.rb +++ b/spec/unit/operatingsystem_spec.rb @@ -26,8 +26,13 @@ describe "Operating System fact" do Facter.fact(:operatingsystem).value.should == "Solaris" end - it "should identify Oracle VM as OVS" do + it "should be ESXi for VMkernel" do + Facter.fact(:kernel).stubs(:value).returns("VMkernel") + + Facter.fact(:operatingsystem).value.should == "ESXi" + end + it "should identify Oracle VM as OVS" do Facter.fact(:kernel).stubs(:value).returns("Linux") FileTest.stubs(:exists?).returns false @@ -36,4 +41,13 @@ describe "Operating System fact" do Facter.fact(:operatingsystem).value.should == "OVS" end + + it "should identify VMWare ESX" do + Facter.fact(:kernel).stubs(:value).returns("Linux") + FileTest.stubs(:exists?).returns false + + FileTest.expects(:exists?).with("/etc/vmware-release").returns true + + Facter.fact(:operatingsystem).value.should == "VMWareESX" + end end diff --git a/spec/unit/operatingsystemrelease_spec.rb b/spec/unit/operatingsystemrelease_spec.rb index 1cfb4ac..739a20a 100755 --- a/spec/unit/operatingsystemrelease_spec.rb +++ b/spec/unit/operatingsystemrelease_spec.rb @@ -15,14 +15,14 @@ describe "Operating System Release fact" do end test_cases = { - "CentOS" => "/etc/redhat-release", - "RedHat" => "/etc/redhat-release", - "Fedora" => "/etc/fedora-release", - "MeeGo" => "/etc/meego-release", - "OEL" => "/etc/enterprise-release", - "oel" => "/etc/enterprise-release", - "OVS" => "/etc/ovs-release", - "ovs" => "/etc/ovs-release" + "CentOS" => "/etc/redhat-release", + "RedHat" => "/etc/redhat-release", + "Fedora" => "/etc/fedora-release", + "MeeGo" => "/etc/meego-release", + "OEL" => "/etc/enterprise-release", + "oel" => "/etc/enterprise-release", + "OVS" => "/etc/ovs-release", + "ovs" => "/etc/ovs-release", } test_cases.each do |system, file| @@ -36,4 +36,14 @@ describe "Operating System Release fact" do end end end + + it "for VMWareESX it should run the vmware -v command" do + Facter.fact(:kernel).stubs(:value).returns("VMkernel") + Facter.fact(:kernelrelease).stubs(:value).returns("4.1.0") + Facter.fact(:operatingsystem).stubs(:value).returns("VMwareESX") + + Facter::Util::Resolution.stubs(:exec).with('vmware -v').returns('foo') + + Facter.fact(:operatingsystemrelease).value + end end diff --git a/spec/unit/util/ip_spec.rb b/spec/unit/util/ip_spec.rb index 1a545b8..0374e75 100755 --- a/spec/unit/util/ip_spec.rb +++ b/spec/unit/util/ip_spec.rb @@ -227,4 +227,11 @@ describe Facter::Util::IP do Facter::Util::IP.convert_from_hex?(platform).should == true end end + + it "should return an arp address on Linux" do + Facter.stubs(:value).with(:kernel).returns("Linux") + + Facter::Util::IP.expects(:get_arp_value).with("eth0").returns("00:00:0c:9f:f0:04") + Facter::Util::IP.get_arp_value("eth0").should == "00:00:0c:9f:f0:04" + end end diff --git a/spec/unit/util/macaddress_spec.rb b/spec/unit/util/macaddress_spec.rb index 98215c4..4764b05 100755 --- a/spec/unit/util/macaddress_spec.rb +++ b/spec/unit/util/macaddress_spec.rb @@ -5,71 +5,64 @@ require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper') require 'facter/util/macaddress' describe "Darwin" do - test_cases = [ - # version, iface, real macaddress, fallback macaddress - ["9.8.0", 'en0', "00:17:f2:06:e4:2e", "00:17:f2:06:e4:2e"], - ["10.3.0", 'en0', "00:17:f2:06:e3:c2", "00:17:f2:06:e3:c2"], - ["10.6.4", 'en1', "58:b0:35:7f:25:b3", "58:b0:35:fa:08:b1"] - ] - - test_cases.each do |version, default_iface, macaddress, fallback_macaddress| - netstat_file = File.join(SPECDIR, "fixtures", "netstat", "darwin_#{version.tr('.', '_')}") - ifconfig_file_no_iface = File.join(SPECDIR, "fixtures", "ifconfig", "darwin_#{version.tr('.', '_')}") - ifconfig_file = "#{ifconfig_file_no_iface}_#{default_iface}" - - describe "version #{version}" do - - describe Facter::Util::Macaddress::Darwin do - - describe ".default_interface" do - describe "when netstat has a default interface" do - - before do - Facter::Util::Macaddress::Darwin.stubs(:netstat_command).returns("cat \"#{netstat_file}\"") - end - - it "should return the default interface name" do - Facter::Util::Macaddress::Darwin.default_interface.should == default_iface - end - end - - end - - describe ".macaddress" do - describe "when netstat has a default interface" do - before do - Facter.stubs(:warn) - Facter::Util::Macaddress::Darwin.stubs(:default_interface).returns('') - Facter::Util::Macaddress::Darwin.stubs(:ifconfig_command).returns("cat \"#{ifconfig_file}\"") - end - - it "should return the macaddress of the default interface" do - Facter::Util::Macaddress::Darwin.macaddress.should == macaddress - end - - end + test_cases = [ + # version, iface, real macaddress, fallback macaddress + ["9.8.0", 'en0', "00:17:f2:06:e4:2e", "00:17:f2:06:e4:2e"], + ["10.3.0", 'en0', "00:17:f2:06:e3:c2", "00:17:f2:06:e3:c2"], + ["10.6.4", 'en1', "58:b0:35:7f:25:b3", "58:b0:35:fa:08:b1"], + ["10.6.6_dualstack", "en1", "00:25:00:48:19:ef", "00:25:4b:ca:56:72"] + ] + + test_cases.each do |version, default_iface, macaddress, fallback_macaddress| + netstat_file = File.join(SPECDIR, "fixtures", "netstat", "darwin_#{version.tr('.', '_')}") + ifconfig_file_no_iface = File.join(SPECDIR, "fixtures", "ifconfig", "darwin_#{version.tr('.', '_')}") + ifconfig_file = "#{ifconfig_file_no_iface}_#{default_iface}" + + describe "version #{version}" do + describe Facter::Util::Macaddress::Darwin do + describe ".default_interface" do + describe "when netstat has a default interface" do + before do + Facter::Util::Macaddress::Darwin.stubs(:netstat_command).returns("cat \"#{netstat_file}\"") + end - describe "when netstat does not have a default interface" do - before do - Facter::Util::Macaddress::Darwin.stubs(:default_interface).returns("") - Facter::Util::Macaddress::Darwin.stubs(:ifconfig_command).returns("cat \"#{ifconfig_file_no_iface}\"") - end + it "should return the default interface name" do + Facter::Util::Macaddress::Darwin.default_interface.should == default_iface + end + end + end - it "should warn about the lack of default" do - Facter.expects(:warn).with("Could not find a default route. Using first non-loopback interface") - Facter::Util::Macaddress::Darwin.stubs(:default_interface).returns('') - Facter::Util::Macaddress::Darwin.macaddress - end + describe ".macaddress" do + describe "when netstat has a default interface" do + before do + Facter.stubs(:warn) + Facter::Util::Macaddress::Darwin.stubs(:default_interface).returns('') + Facter::Util::Macaddress::Darwin.stubs(:ifconfig_command).returns("cat \"#{ifconfig_file}\"") + end - it "should return the macaddress of the first non-loopback interface" do - Facter::Util::Macaddress::Darwin.macaddress.should == fallback_macaddress - end + it "should return the macaddress of the default interface" do + Facter::Util::Macaddress::Darwin.macaddress.should == macaddress + end + end - end - end + describe "when netstat does not have a default interface" do + before do + Facter::Util::Macaddress::Darwin.stubs(:default_interface).returns("") + Facter::Util::Macaddress::Darwin.stubs(:ifconfig_command).returns("cat \"#{ifconfig_file_no_iface}\"") + end + it "should warn about the lack of default" do + Facter.expects(:warn).with("Could not find a default route. Using first non-loopback interface") + Facter::Util::Macaddress::Darwin.stubs(:default_interface).returns('') + Facter::Util::Macaddress::Darwin.macaddress end + it "should return the macaddress of the first non-loopback interface" do + Facter::Util::Macaddress::Darwin.macaddress.should == fallback_macaddress + end + end end + end end + end end |