From 2e48e189910f75cc1a6586bbecda27ecbd0afc8e Mon Sep 17 00:00:00 2001 From: James Turnbull Date: Mon, 14 Mar 2011 13:57:32 +1100 Subject: Fixed #6695 - Updated id fact for Darwin et al --- lib/facter/id.rb | 11 ++--------- spec/unit/id_spec.rb | 27 +++++++++++++++++++++++++++ 2 files changed, 29 insertions(+), 9 deletions(-) create mode 100755 spec/unit/id_spec.rb 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/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 -- cgit From d0f0f63f91a0eff72c1c528a6b5fb325bd9001d4 Mon Sep 17 00:00:00 2001 From: Ben H Date: Tue, 15 Mar 2011 17:33:26 +1100 Subject: (#6327) Memory facts should be available on Mac Darwin There's no easy defined way of getting memory information from the command line. Copying mainly the OpenBSD facts, but having to pull in memory free from the vm_stat utility, and parsing the weird vm.swapusage sysctl value for swap. Parsing "top -l 1 -n 0" seemed an option, but that took over a second to run each time, so this appears cheaper. --- lib/facter/memory.rb | 37 +++++++++++++++++++++++++++++++++++++ lib/facter/util/memory.rb | 31 +++++++++++++++++++++++++++++++ 2 files changed, 68 insertions(+) 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/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 -- cgit From e917e1a7f47b4399f5d1dd32dd5cd8ad5da86b64 Mon Sep 17 00:00:00 2001 From: James Turnbull Date: Tue, 15 Mar 2011 18:09:35 +1100 Subject: Fixed #3087 - Identify VMWare Added support for VMWareESX and ESXi to operatingsystem and operatingsystemrelease facts Added appropriate tests --- lib/facter/operatingsystem.rb | 9 +++++++++ lib/facter/operatingsystemrelease.rb | 12 +++++++++++- spec/unit/operatingsystem_spec.rb | 16 +++++++++++++++- spec/unit/operatingsystemrelease_spec.rb | 26 ++++++++++++++++++-------- 4 files changed, 53 insertions(+), 10 deletions(-) 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 @@ -62,6 +64,13 @@ Facter.add(:operatingsystem) do end 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 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 @@ -83,6 +83,16 @@ Facter.add(:operatingsystemrelease) do end 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 @@ -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/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 -- cgit From 5b6f4fa4aae419bd2d65e1af6e185123dd432ac6 Mon Sep 17 00:00:00 2001 From: Paul Nasrat Date: Sun, 28 Jun 2009 11:22:28 +0100 Subject: Discussion on ec2 facts - #2346 The EC2 fact is completely broken at the moment: * Timeout::Error isn't caught by rescue (due to how it inherits) * The issue of wrong open semantics outlined here, this is causing hidden immediate failure * The fact is going to cause a 2 second wait to every facter run Whilst the following patch fixes the first two, I'm not sure we want to take the timeout hit, we also want to add tests as even simple ruby code can get logic errors such as the open(). Signed-off-by: Paul Nasrat --- lib/facter/ec2.rb | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/lib/facter/ec2.rb b/lib/facter/ec2.rb index ef84757..ea29d14 100644 --- a/lib/facter/ec2.rb +++ b/lib/facter/ec2.rb @@ -6,9 +6,12 @@ require 'open-uri' require 'timeout' def can_connect?(ip,port,wait_sec=2) - Timeout::timeout(wait_sec) {open(ip, port)} + url = "http://#{ip}:#{port}/" + Timeout::timeout(wait_sec) {open(url)} return true -rescue +rescue Timeout::Error + return false +rescue return false end -- cgit From 0411d2eacbfad9d07977dea8975b604b7cdd1aa5 Mon Sep 17 00:00:00 2001 From: James Turnbull Date: Tue, 8 Mar 2011 20:18:30 +1100 Subject: Fixed #2346 - Part 1: Added arp fact for Linux Added facts arp (like the ipaddress etc) facts Added facts arp_interfacename --- lib/facter/arp.rb | 22 ++++++++++++++++++++++ lib/facter/util/ip.rb | 7 +++++++ spec/unit/util/ip_spec.rb | 7 +++++++ 3 files changed, 36 insertions(+) create mode 100644 lib/facter/arp.rb 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/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/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 -- cgit From d62e079489c07201cb343f2ca109fecd62d6e567 Mon Sep 17 00:00:00 2001 From: James Turnbull Date: Tue, 8 Mar 2011 21:24:54 +1100 Subject: Fixed #2346 - A much cleverer EC2 fact The fact now checks for an EC2 ARP or in the EU Zone for an EC2 MAC This should mean the fact's return is much more robust The fact also now supports returning userdata (which is a bit ugly given Facter returns strings but a good bookmark for refactor in 2.0) --- lib/facter/ec2.rb | 82 +++++++++++++++++++++++++++++++++++++++++++------------ 1 file changed, 64 insertions(+), 18 deletions(-) diff --git a/lib/facter/ec2.rb b/lib/facter/ec2.rb index ea29d14..29b2a1c 100644 --- a/lib/facter/ec2.rb +++ b/lib/facter/ec2.rb @@ -1,27 +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' - -def can_connect?(ip,port,wait_sec=2) - url = "http://#{ip}:#{port}/" - Timeout::timeout(wait_sec) {open(url)} - return true -rescue Timeout::Error - return false -rescue - return false -end +require 'socket' + +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 @@ -32,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 -- cgit From 3f0a3404894ea1835877856e20d60be4023706fc Mon Sep 17 00:00:00 2001 From: Ben Hughes Date: Thu, 17 Mar 2011 12:23:44 +1100 Subject: (#6716) fix facter issues on OSX with ipv6 in macaddress.rb. Due to "netstat -rn" returning multiple protocols (IPv4 and IPv6) the "default_interface" can get more than one entry in to it, causing the macaddress resolving to break. This limits it to just one interface. --- lib/facter/util/macaddress.rb | 2 +- spec/fixtures/ifconfig/darwin_10_6_6_dualstack | 8 +++++ spec/fixtures/ifconfig/darwin_10_6_6_dualstack_en1 | 7 +++++ spec/fixtures/netstat/darwin_10_6_6_dualstack | 34 ++++++++++++++++++++++ spec/unit/util/macaddress_spec.rb | 3 +- 5 files changed, 52 insertions(+), 2 deletions(-) create mode 100644 spec/fixtures/ifconfig/darwin_10_6_6_dualstack create mode 100644 spec/fixtures/ifconfig/darwin_10_6_6_dualstack_en1 create mode 100644 spec/fixtures/netstat/darwin_10_6_6_dualstack 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/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 mtu 16384 + inet 127.0.0.1 netmask 0xff000000 + inet6 ::1 prefixlen 128 + inet6 fe80::1%lo0 prefixlen 64 scopeid 0x1 +en0: flags=8863 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 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/util/macaddress_spec.rb b/spec/unit/util/macaddress_spec.rb index 98215c4..d255d20 100755 --- a/spec/unit/util/macaddress_spec.rb +++ b/spec/unit/util/macaddress_spec.rb @@ -9,7 +9,8 @@ describe "Darwin" do # 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.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| -- cgit From 2fb831671a75d644c2efd48cfadfadecb9606b54 Mon Sep 17 00:00:00 2001 From: Jacob Helwig Date: Thu, 17 Mar 2011 15:03:28 -0700 Subject: Clean up indentation, and alignment in macaddress_spec.rb This changes the spec file from 4-space indentations to 2-space indentations to match the style guide[1]. [1] http://projects.puppetlabs.com/projects/puppet/wiki/Development_Lifecycle#Style --- spec/unit/util/macaddress_spec.rb | 110 ++++++++++++++++++-------------------- 1 file changed, 51 insertions(+), 59 deletions(-) diff --git a/spec/unit/util/macaddress_spec.rb b/spec/unit/util/macaddress_spec.rb index d255d20..4764b05 100755 --- a/spec/unit/util/macaddress_spec.rb +++ b/spec/unit/util/macaddress_spec.rb @@ -5,72 +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"], - ["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 - - 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 -- cgit